2013年12月18日水曜日

pythonで標準出力(print)のテスト

簡単なのはdoctestでやれって感じですが。

StringIOを使用すればいけるらしい。
documentはこの辺り。
http://docs.python.jp/2.7/library/stringio.html

サンプルは以下の通り。

import unittest 
import StringIO 
import sys

class Hello: 
    @classmethod 
    def say(cls): 
        print "test",

    @classmethod
    def world(cls):
        print "World"
    
class TestHello(unittest.TestCase): 
    def setUp(self): 
        dumout = StringIO.StringIO() 
        self.sysout = sys.stdout 
        sys.stdout = dumout

    def testSay(self):
        Hello.say()
        sys.stdout.seek(0)
        self.assertEqual("test",sys.stdout.getvalue())

    def testWorld(self):
        Hello.world()
        sys.stdout.seek(0)
        self.assertEqual("World\n",sys.stdout.getvalue())

    def tearDown(self):
        sys.stdout = self.sysout

if __name__ == "__main__": 
    unittest.main()

2013年12月11日水曜日

vimの起動時間を調査する

--startuptime <出力先ファイル名>とつけて起動すると 以下のような形で表示される。
times in msec
 clock   self+sourced   self:  sourced script
 clock   elapsed:              other lines

000.012  000.012: --- VIM STARTING ---
000.085  000.073: Allocated generic buffers
000.365  000.280: locale set
000.373  000.008: window checked
000.810  000.437: inits 1
000.817  000.007: parsing arguments
000.818  000.001: expanding arguments
000.832  000.014: shell init
047.956  047.124: Termcap init
047.975  000.019: inits 2
048.074  000.099: init highlight
062.254  000.168  000.168: sourcing $VIM/vimrc
106.266  000.397  000.397: sourcing /usr/share/vim/vim73/colors/desert.vim
とりあえず自分が遅いのは$HOME/.vimrcの読み込みが遅い模様。 ネットワークドライブから読み込んでるからの可能性が高いな。。。
vimrcの無駄な設定とかなくせば早くなりそうだけど、起動したら基本起動しっぱだからしゃあないってことにしよう。
原因深追いするほど時間もないので。。。

2013年12月7日土曜日

nodeのTwitterライブラリ Twitを使って&ソースをちょろっと読んだメモ

TwitというnodeのTwitterライブラリのソースをちょろっと読みました。

repositoryは以下。
https://github.com/ttezel/twit このライブラリの使い方は簡単で
var Twit = require("twit");
var T = new Twit({
    consumer_key:"your key",
    consumer_secret:"your secret",
    access_token:"your access token",
    access_token_secret:"your access token secret"
});

T.post("statuses/update",{status:"post tweet"},function(err,reply){
    //...
})
みたいな感じです。 なんでソースコード読んだかというとoauth周りの処理をどうやってるのかが気になったからです。 Twitではoauthパッケージを使用してるようです。
https://github.com/ciaranj/node-oauth
EventEmitterでListenerを登録して、request投げて各Eventをcallしてるという簡単な感じ。

なんというかそんなに言及することがない; そしてjsのソースを長々と読んで思った。

型がほしい。。。欲しすぎる! 引数の情報とかコメントで書いてないし、中身どんなんだったかなんて覚えてないから 読むのにすごい苦労する。。。 やはり自分も手抜きせずTypeScriptで今後は書こうと思いました(小並感)

2013年12月2日月曜日

postgresqlの初期設定メモ

まずはディレクトリを作成

mkdir ~/database

cd database 

データベースクラスタを作成(データベースの格納領域のこと。ここにデータベースを作成する)
initdb -D example -U postgres

example以下のpostgresql.conf

のportを5433に変更し、コメントアウトを解除する
※このまま起動しても何故か5432が使用されているというエラーがでるため

postgres -D example
でDBを起動する

testという名前のデータベースを作成する
createdb -U postgres -p 5433 test

ターミナルを別に起動し、
psql- p 5433 -U postgres test
でデータベースに接続できる

postgresは管理ユーザなので新たにユーザを作成する

createuser -p 5433 -U postgress

で色々聞かれるので最初にユーザ名を入れ、あとはnoで
ユーザ名はとりあえずuser1で。

作成されているか確認するためデータベースに接続
psql -p 5433 -U user1 test

で¥duと入力すればデータベースユーザが作成されているのがわかる

                             List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication | {}
 user1     |                                                | {}


次はsailsからアクセスするようにします。


    

2013年11月26日火曜日

virtualboxのubuntu13.10にsshで接続するまでのメモ

ubuntuの端末上で

sudo apt-get install openssh-server
/etc/init.d/ssh restart

を行う。

virtualboxの設定>ネットワークでブリッジアダプターにする

でvirtualbox側の端末でifconfigを行いipアドレスを確認

ここまでいったら

ssh ユーザー名@ipアドレス

で接続できる。

2013年11月24日日曜日

ubntu13.10にpostgtresqlをinstallする

まずはvirtual boxにubuntu13.10をインストール

ubuntuは以下からDLする。

で、ターミナルをたちあげて

sudo apt-get install postgresql

でpostgresqlをインストール

バージョンは9.1がインストールされる模様。

まぁとりあえず動かすだけだからこのバージョンでいいやってことで。

ubuntuだとinitdbとかは最初からは使えない(pg_wrapperとかいう独自のコマンドを使うらしい。。。詳しくここあたりを見るとわかるかとhttp://lets.postgresql.jp/documents/tutorial/ubuntu/4)ので
PATHを通します。

.bashrcに以下を追記
PATH="$PATH:/user/lib/postgresql/9.1/bin"
PATH="$PATH:/user/lib/postgresql/9.1/lib"

保存をしたら

source ~/.bashrc

として設定を読み込む。

これでinitdbとかのコマンドが使えるようになる。

2013年11月21日木曜日

node.jsでuuidを生成する

nodeでuuidを生成するにはnode-uuidを使用するのが楽。

npm install node-uuid

でインストールできる。
githubはhttps://github.com/broofa/node-uuid

ちなみにuuidはRFC4122で定義されている。

uuidの生成はv1とv4というのが主に使われていて、v1はMacアドレス?と時間をベースに生成する。v4は乱数で生成するらしい。

とりあえずv4使っておけば安全です。

var uuid = require('node-uuid');

console.log(uuid.v4())
console.log(uuid.v4())
console.log(uuid.v4())
console.log(uuid.v4())
console.log(uuid.v4())

で実行すれば

076c423d-df24-4efa-ae31-6d515d076dce
a22433a9-bfb0-4da4-b6f8-4d49c291a4e3
41fc55de-cfee-4222-894e-09e5cc3e1ad6
b39a4e23-a83c-41f9-b5e9-d83f20da9ca2
d8805de4-86df-40b3-a18e-94411ea20562

こんな感じでuuidが取得できる。

2013年10月19日土曜日

Node.jsのフレームワーク、sails.jsを触ってみた!

最近はsails.jsばかり触っているのでメモ書き程度に残して置きます。


sails.jsとは

sails.jsとはRailsを模したnode用のwebフレームワークです。
特徴としてはblueprintによりjsonを返すAPIを簡単に作成できるところですね。
内部的にexpressとsocket.ioを使用しています。

DB周りに関しては各種adapterがpluginとして提供されている。またwaterlineというORMを利用しているため、
SQLなどを書く必要もありません。

公式は以下
http://sailsjs.org/#!

インストール

nodeはインストール済みなら以下のコマンドを実行すればOK。
npm install -g sails

プロジェクトの作成

sails new PJ名

で出来ます。
作成したPJにはいって
npm install
すればセットアップは終了です。

sailsの起動

以下のコマンドを実行します。

sails lift

そしてhttp://localhost:3000
にアクセスして、indexページが表示されればOK

controllerの追加

sails generate controller  Controller名 action名...

で作成できる。

例えば

sails generate controller HelloWorld hello world

と実行するとcontroller以下にファイルが作成される。

sailsを起動してhttp://localhost:1337/helloworld/helloにアクセスすれば
jsonがresponseとして返ってきます。

Modelの追加についてはまた次の機会に。。。


最近はsails.jsばかり触っていますが、プライベートで動かす分には全く問題がない感じです。
Modelまわりとかもかなり楽できるようになっているので、
余計な時間を使わないで済むようになりました

ちなみにsails.jsはcoffeescriptでも実装が可能です。
ただ、generateコマンドで生成されるのはまだjsファイルのみです。。。
つくったのをjs2coffeeとかでcoffeescriptに自分でやるしかありません。。。

↓ではver 1.0でgenerateの際に利用できるようにするみたなことが書かれてますが、どうなんですかねぇ。。。
https://github.com/balderdashy/sails/issues/350

あとTypeScriptもはよ。

2013年9月14日土曜日

tsdのrepositoryを追加する方法

Typescriptのpackage managerとしてtsdを使用しています。
がこれに乗ってないライブラリがちらほらあったりするので
追加する方法を備忘録的にメモを残しておきます。


1.git clone する
git clone https://github.com/Diullei/tsd.git

2.repo_dataにjsonファイルを追加します。
※他のライブラリのやつを参考にすればOK

3.npm installでnode_moduleをインストールする。

4.gruntでrepository.jsonを作成する。repoディレクトリ以下に作成される。

5.tsdコマンドを実行するディレクトリで
tsd ncfg
を実行しコンフィングファイルを作成する

6.repositoryTypeを0にuriを先ほどビルドしたrepository.jsonのpathを設定する。

※tsd search 追加したライブラリ名
で先ほど追加したファイル名が出てくればOK

ついでにpull reqしておくと他の人が楽できますが、だいぶ放置されているのか
pull requestが承認されない模様。

2013年3月26日火曜日

Grunt.jsでファイルを更新したらCoffeeScriptを自動compiileする

下の作業メモとは違うけどgrunt.jsのsample projectはこちら

https://github.com/float1251/grunt-sample-project


とりあえず作業ログを残します。
作業ログはcoffeescriptですが、githubはtypescriptでもやってます。
業務ではプラスしてjsとcssのminimifyとかもやるようにしました。

Grunt.jsでcoffeescriptをcompileする

# grunt-cliをinstall
npm install -g grunt-cli

# sample-projectを作成する
mkdir ~/sample-grunt

# 作成したdirectoryに移動する
cd ~/sample-grunt

# package.jsonを作成する
# あとで編集できるので全部変更しないでOK
npm init

#以下のコマンドを実行する
#--save-devとつけることでpackage.jsonにdevdepencyが追加される。
#そのため次からはnpm installコマンドで環境が設定できる。
npm install grunt --save-dev
npm install grunt-contrib-coffee --save-dev
# Gruntfile.jsを作成する
# URLからサンプルを持ってきて作成する.
# http://gruntjs.com/sample-gruntfile
# 今回はcoffeescriptで作成したが,jsのほうがいいかもしれない。
# json形式でのerror回避がcoffeescriptだと若干めんどくさい
module.exports = (grunt)->
    grunt.initConfig {
        pkg: grunt.file.readJSON("package.json"),
            coffee:{
                glob_to_multiple:{
                    expand:true,
                    cwd:"./coffee",
                    src:["*.coffee"],
                    dest:"js/",
                    ext:".js"
                }
             }
          }
    grunt.loadNpmTasks "grunt-contrib-coffee"
    grunt.registerTask("default",["coffee"])

# testのためcoffee
mkdir coffee
echo console.log\("Hello Grunt"\); > coffee/test.coffee

# coffee以下にファイルができていることを確認
ls coffee/
>test.coffee

# 以下を実行してErrorがなければOk
grunt

ファイルが更新されたらcoffeescriptをcompiliする

# grunt-contrib-watchを試す
npm install grunt-contrib-watch --save-dev

# Gruntfileに以下を追加する
grunt.loadNpmTasks "grunt-contrib-watch" 
watch:{
files:["coffee/*.cofffee"],
tasks:["coffee"]
}

# 以下を実行して watchされていることを確認
grunt

# coffee以下のファイルを修正して、jsファイルが出力されていることを確認する
※base_pathやcwdにはsrcに記載しているファイル名までのPathを記述する。
これを記述しないと
src:"src/*.coffee"
dest:"js/"
のときに
js/src/*.js
という形式になってしまう。

2013年3月6日水曜日

enchant.jsでまたも適当につくってみました

というわけでまたパズルゲームです。
今度はキーボードを押したらブロックが伸びていくタイプのものです。

前回の反省を生かして、
QUnitを導入し、単体テストを実施しました。
また前回はバージョン管理してなかったのでgitでバージョン管理を行いました。
commitのタイミングはチケットの作業が終わるくらいで一回行うように心がけました。

■反省点
・チケットの作業が終わってもcommitし忘れることがあった。
本当はredmineとgitを連携させたいんだが、ちょっと面倒。。。
・単体テストの粒度が甘く、本格的に結合していくときにバグが発生することがあった。
 もうちょっとテストの粒度を細かする。というかしっかりと境界値やテストに漏れがないか確認する。
・前回に比べればだいぶ綺麗だが、DRYっぽくなってない部分があったり、
一部メソッドの行数が長かったりするのは不満。どっかのタイミングでこれでもやろうかな
・何かJavascrioptというかcoffeescriptっぽく書けてないような気がする。
どっかのOSSとかを読んで見たほうがよいと思った(小並感)

次あたりからUnityで何かつくろうか、それともまたenchant.jsで何かつくるか、
はたまたAndEngineで何かつくるかは考え中。。。


○2013/03/07 追記
・作業時間は5時間弱でした。業後に2日かけて作りました。
これの半分くらいの時間で作れるようになりたいかな。

・ドキュメント残すようにする。
引数が何の型を想定して作っているのかよくわからなくなるので。
調べたらYUIDocというのがあるらしいので次はこれを導入してみる。

2013年3月5日火曜日

ライフゲームをさくっとつくった

ライフゲームなんてあるんですね。知らなかったです。

基本ルール
誕生
死んでいるセルに隣接する生きたセルがちょうど3つあれば、次の世代が誕生する。
生存
生きているセルに隣接する生きたセルが2つか3つならば、次の世代でも生存する。
過疎
生きているセルに隣接する生きたセルが1つ以下ならば、過疎により死滅する。
過密
生きているセルに隣接する生きたセルが4つ以上ならば、過密により死滅する。
(Wikipediaより引用)

参考URL
http://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B2%E3%83%BC%E3%83%A0
http://www.daily-labo.com/ygg18.html

ルールはすごい簡単なんでさくっと作ってみました。

すごい不思議な動きをするなぁと思いました(小並感)。

coffeescriptでテトリスつくってみた

バグがあるがそれなりに形になったので。

・CoffeeScriptというかJavaScriptでハマった。
・単体テストやらずに実装してたらバグが出た時にかなり困った。
・Cellとかもクラス化しとけばよかった。
  また作りが悪いのでリファクタしたくても単体テストがないのでやる気にならなかった。
・redmineでチケット切りながらやったけどMTVが保てるのでいいと思った(小並感)
・最後の最後にQUnitを導入。UnitTestがあるとやはり不具合修正のスピードは全然違う。
  QunitでCoffeeScriptでコンパイルしたjsを使用するには-bをつけてコンパイルする。
・ブロックの定義は4x4の配列よりもx,yを中心にどの位置に配置するかのほうがよかった。
  ex:(x,y)=(1,1)のT字ブロックの際はx=1,y=1 type=[[1,0],[0,1],[0,-1]]みたいに。

反省は次回に生かさないとね。
また気が向いたら作ってみますよ( ̄ー ̄)

2013年3月2日土曜日

適当につくっています



めっちゃ適当に作ってます。
enchant.jsは手軽につくれるので個人的に気に入ってます。
ただcoffeescriptというかjavascriptにイライラしてます。

とりあえず、最低限の機能すら実装できてないのでもっとちゃんと実装しないとなー

そしてUnityでのゲーム開発も進めないとだし。。。
時間が足りなすぎる^^;

herokuにredmineをdeployした


作業メモ。
一部漏れありますが、手順をそのまま残してます。
・最初最新版(2.2.3?)入れようとしたが、エラーが出たので速攻諦めて
記事通り2.2.2でやりなおした。

2.3でもいけたかもしれないが、どうだろう。
見やすく編集しなおそうかとおもたが面倒になったのでこのままでw

■Heroku上にRedMineをinstallする

環境
Mac moutain lion

参考URL
http://d.hatena.ne.jp/rochefort/20130107/p1
http://railsguides.net/2012/04/28/how-to-deploy-redmine-to-heroku/

・Heroku
herokuToolbelt for Mac OS
をDLしてインストールする

ターミナルを起動して
heroku login
Email:xxxxx
Password:xxxxx
を入力。
SSH Public Key は Yでおk

bundlerをinstall
sudo gem install bundler


git clone git://github.com/redmine/redmine.git
cd redmine
cp config/database.yml.example config/database.yml
>Could not find gem 'rails (= 3.2.12) ruby' in the gems available on this machine.
>Run `bundle install` to install missing gems.
と出たので
bundle install
を実行。

bundle install でerrorが出たので
errorに書かれていたとおり、
sudo gem install rmagick -v '2.13.2'
を実行。成功したら改めてbundle installを実行

->mkmf.logを見ると
Can't find magick-configと見えます。
http://d.hatena.ne.jp/ireiz/20110816/1313478957
http://stackoverflow.com/questions/164307/installing-rmagick-on-mac-os-x-with-macports

HomeBrewのインストール
http://mxcl.github.com/homebrew/
の下にあるコマンドをコピペして終了

brew doctor
>Your system is raring to brew.

brew install imagemagick
sudo gem install rmagick

でredmineのディレクトリに移動して改めて
bundle install

またError
wand/MagickWand.h......noとのこと
http://stackoverflow.com/questions/10063051/bundle-cant-install-rmagick-gem-on-mac-osx-10-7
をみて
mdfind MagicWand.h
でMagicWand.hのPathを確認
C_INCLUDE_PATH=/MagicWand.hのPath sudo gem install rmagick
でrmagic

http://www.pistolfly.jp/weblog/2011/03/centosimagemagick.html
http://www.pistolfly.jp/weblog/2010/07/sudopath.html

pkg-config command not found
brew install pkg-config

*正直色々やりすぎてどれが効果的だったかはよくわかりません。
とりあえず、pkg-configが入っていなかった。というのが一番と思われます。
これら以外にもbundle install しろやカスと怒られたので何度かbundle install してます。
これは明らかに私の手順が甘いからです。

-----
.gitignoreから下記を削除
Gemfile.lock
Gemfile.local
public/plugin_assets
config/initializers/session_store.rb
config/initializers/secret_token.rb
config/configuration.yml
config/email.yml

bundle install

rake generate_secret_token
なんかmysql2がたりんと言われましたがシカトしました(*ノω・*)テヘ

heroku create
git add -A
git commit -m "prepare for heroku"
git push heroku master
-----

結局できなかった。
herokuにdeployまでしたがapplictionErorrになって動かない。
redmineのバージョンを下げて実行する
2.2.2でやりましょう。

-----
■2.2.2で試している

brew install postgresql
bundle install
sudo gem install pg -v '0.14.1'
>can't find libpq
http://www.uponmyshoulder.com/blog/2011/cant-find-the-postgresql-client-library-libpq/
sudo su
env ARCHFLAGS="-arch x86_64" gem install pg

これでbundle install はOK

rake generate_secret_token

heroku create

git add -A
git commit -m "prepare for heroku"
git push heroku master
->SQLite3でエラーってる

GemFilesでSQLITE3の部分をコメントアウト
GemFiles.lockでも同様に行う
#コメントアウトしたらcommitするのを忘れずに

#configの修正
config/application.rbを修正
config.assets.initialize_on_precompile = false

config/environment.rbを修正
warningが出るので、exit 1をコメントアウト
heroku run:detached rake db:migrate
heroku run:detached rake redmine:load_default_data
heroku restart
heroku open

これでherokuにredmineがキタ━━━━(゚∀゚)━━━━!!