コンピュータやソフトウェアのあれこれ@道民(&元道民)
Archive for 1月, 2012
Sapporo.js-2012.01.28に参加しました
1月 30th
1月28日(土)にSapporo.jsの勉強会、Sapporo.js-2012.01.28に参加してきました。
だいぶ間が空いた久しぶりの参加です。
読み合わせをする本、JavaScript: The Good Partsを購入して臨みました。
配列
6.7 次元から。
配列の初期化について、多次元配列の初期化の注意、単位行列を生成するメソッド。
単位行列・・・については、そもそもそれが何か良くわからなかったのでその場でぐぐりました。
オブジェクトが参照されるので代入時に注意する事、Objectをコピーする場合はJSONコピーを使う事。
JSONコピーの方法は知らなかった。
JSONコピーはプロトタイプはコピーしないのを確認したコード。
var hoge = {a:1};
hoge.__proto__ = {c:3}
console.log(hoge); // {a:1}
console.log(hoge['c']); // 3
var hoge_json = JSON.stringify(hoge);
console.log(hoge_json); // {"a":1}
var foo = JSON.parse(hoge_json);
hoge['b'] = 2;
console.log('hoge', hoge, hoge['c']); // hoge {b: 2, a: 1} 3
console.log('foo' , foo, foo['c']); // foo {a: 1} undefined
for-inの話も面白かった。ちょうど業務で「each使いたいけど使えない、その結果なんかすごいコードがかっこわるい」状態になっているのがあって。(結局for-inはあまり使わない方がいいという話になったのだけど)
あのかっこわるいコードどうしようかな・・・。
(jQueryを入れるほどの画面でもないテスト画面のコードなのだけど気になる)
正規表現
魔術みたいな正規表現
var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
を読み砕いていきました。
部分ごとに分けて考えると、なるほどーとなっていくところが、勉強会の楽しいところだなあ。
最初の
(?:([A-Za-z]+):)
が一瞬顔文字に見えていた私、一人だったらページを流し読みして終わりそう。
上記はURLを判定する正規表現の例です。
たぶんすべての()内に文字が入るとこういうURLになる、はず。[]はキャプチャグループで区切ってみた。
[[http]:][//][terakonya.sarm.net][:[8080]][/getList][?huge][#top]
node.jsをインストールした
マシンに入れずじまいだったnode.jsを、写経中にインストールしました。
といっても、
$ sudo brew install node.js
v0.6.9がさくっとインストールされました。
りゅうのすけ君がスクリーン上でnode.jsを使いながらサンプルをタイピングしてくれていたので、見よう見まねで実践する事ができました。また少しjsと近くなれた気がします。
今回は会社の同僚も勉強会に参加していました。
一緒に仕事をしている人に勉強会で会うと、嬉しいですね ![]()
またよろしくお願いしますー!
MyDNSのリニューアルに合わせてDiCEプラグインを修正
1月 30th
自宅サーバーはダイナミックDNSにMyDNS.JPを使い、DiCEをマシンに入れて、IPの変更を通知させています。
昨年9月にMyDNSが刷新されたのですが、そのタイミングでどうもDiCEの通知がうまく行っていないっぽくて。
しばらく手動で更新していたのですが、DiCEプラグインを修正すれば良い事がわかりました。
やろうやろうと後回しにしていたのですが、DiCEのプラグイン修正を行いましたのでメモしておきます。
DiCE用のプラグインファイル – MyDNS.JPのブログを参考に。
プラグインフォルダの場所
実行コマンド diced と同じ位置に plug-in フォルダがあるよ。
私の場合は
/usr/local/bin/DiCE/plug-in
※若干ディレクトリがおかしい気がする
plug-inフォルダの中にたくさんプラグインファイルがありますが、今回はMyDNS.JP.plgを変更する。
変更内容
- [Updater]Encode
EUC -> UTF-8
- [Response]
1=更新をしました 18=パスワードが違います 1=login_status = 1
↓
1=Login and IP address notify OK 18=パスワードが違います
- [Messages]
1=IPアドレスを更新しました 18=ユーザー名(マスターID)またはパスワードが無効です
↓
1=Login and IP address notify OK 18=ユーザー名(マスターID)またはパスワードが無効です
これも1が変更
1が変更になっている
これで問題なく動くようになるはずです。様子を見てみます。
通知がうまく行っていなかったらこの記事に追記します。
でも2008年から開発が止まっているソフトにIP通知を任せては行けない気がする、そもそも。
MovableTypeのセットアップ
1月 29th
さてさて、MovableTypeをインストールするよ。
最初に言っておこうと思うのですが、
メールの設定は諦めました。
MovableTypeのインストールは、公式サイトのドキュメントを見ながら行いました。
http://www.movabletype.jp/documentation/mt5/installation/system.html
MovableTypeは、WordPressのようにインストール先がブログのURLにならないので、
これから作ろうと思ってるブログ用のフォルダ名は大事にとっておいて、
何か別の名称をインストール先のフォルダ名に付けることになります。
とは言うもの、zipでアップロードして、
解凍したフォルダの名称を変更するのがオススメです。
次に、インストール先のフォルダに移動して、
$ chmod 755 *.cgi
これで準備完了。
“public_html”の下に、zipをアップロードして、
解凍したあとに”mt”という名前に変更した場合は、
こんな感じのURLにブラウザでアクセスして、インストールを開始します。
http://(ifconfigのinetアドレス)/mt
でも、こっからが大変です、ハードル上がります。
Perlモジュールのインストールが必要です。
「えー。」ってなった方は、一緒にPerlの勉強しましょう。
必要と思われるものを(cpanmなどで)インストールするわけですが、
画像関係は別途、パッケージのインストールが必要かも知れません。
個人的に、”Imager”を使いたいので、
あらかじめ、以下のパッケージをインストールして、
$ aptitude install libjpeg-dev libtiff-dev libpng-dev giflib-dev
それから、
$ cpanm Imager perl -MImager -e 'print join ", ", sort keys %Imager::formats'
これで、”Imager”のインストールが完了します。
ちなみに、2行目は現在”Imager”で扱える画像ファイルの形式を出力するスクリプトです。
“jpeg”, “png”, “gif”あたりは使えないと困りますよね。
メールの設定ですが、
これは本番サーバでは必須ですが、
この辺の知識が足りないのでテスト環境での設定は諦めました。
それ以外の設定でハマったのは覚えてないです。
DBの設定は、もしかしたらハマるかもしれませんね。
MySQLは同じサーバにインストールしているので、”localhost”を入力します。
データベース名は、追加したデータベースの名称を、
ユーザー名とパスワードは、ユーザーを追加したときのものを入力します。
(この辺は、前回を参照。)
自分の場合は、このあとウェブサイトの設定をして、ブログを追加しました。
その次に、ブログを更新したらウェブサイトも更新されるように、
MultiBlogプラグインを設定して、次の作戦を練ってます。
おしまい。
UbuntuServer on VMFusion3で???
1月 29th
UbuntuServerを11.04から11.10からアップデートしたら、
host smbus controller not enabled!
って起動時に表示されて、いまいち直せそうもないので、
11.10をクリーンインストールしてみました。
起動時に、Linuxカーネルのバージョンを選択できるのですが、
以前のバージョンだと問題ない様子。
とりあえず、問題の切り分けのためにUbuntu11.10を入れてみます。
今までの記録を漁れば、MovableTypeのテスト環境も構築できるはずだし、
足りなければ追記する予定。
これで、同じメッセージが出たら、11.04入れればいんですかね。
で、とりあえず起動してみました。
結果は、同じメッセージが出ました。
11.10だとVMFusion3じゃアレなんですかね。
それとも、11.04の頃にも出てたのかな。
UbuntuDesktopは、11.10でちゃんと動作してるっぽいんですよね。
とりあえず、様子見ます。
こっちはMovableTypeのテスト環境なので。
おやすみ。
達人プログラマー読書会@札幌-2012.01.25 に参加しました(最終回)
1月 26th
1月25日(水)に行われた、達人プログラマー読書会@札幌に参加しました。
本日が最終回。最後まで参加して、本を読み通す事ができました!(途中2回休んだけど)
最後の2つのセクションが心に響きました。
43. 容赦ないテスト
「早めにテスト、何度もテスト、自動でテスト」
というヒント62に尽きるね、という話になりました。
テストの大切さ、そしてそれがなかなか現場で実践できていない事、今も昔も変わらない。
根本的なところは変わらないけれど、TDDの流れの源流(テストのテストをするための破壊工作など)を感じる部分もありました。
テストそのものよりも、テストデータを作る事が大変な事が多いのだけど、スクリプトを作ればもう少しうまくやれる事が多いのかもしれないという気づきがありました。
44. すべてはドキュメント
いらないドキュメントをたくさん作るのではなく、コードとドキュメントを一体化させる事。
ドキュメントの原本は1つにする事。
マークアップ言語を使えば原本から様々な状況に適したドキュメントを生成できる事。
コードはドキュメントであり、コメントはとても大事な事。
昔、プログラムを始めた頃の自分のコメントは酷かったなあ。
今は、もう少しまともに書けている気がする。でも、まだまだだ。
未来の誰かがソースコードを読んだ時に「?」と引っかかる部分に対するメッセージをコメントとして残しておけるような、そんな書き方がしたい。
「コメントは”何故”を書く、目的やゴールを書く」
忘れないようにする。(ああ、最近TODOコメントが多い・・・)
45. 大きな期待
とてもよいセクションでした。
「達人プログラマ」の”プログラマ”的技術向上の話ではなく、「お客さんと向き合ってものをつくる」という事に対する心構えの話。
「ユーザーの期待をやや上回って、お客さんに嬉しいサプライズを与える」ような仕事がしたい!
アジャイルサムライでも書かれている「期待のマネジメント」について
「特権的な立場ではなく、ユーザーと一緒に作業をすることで期待とその実現方法をお客さんとチーム全体が共有していく」
と書かれていました。
「お客さんと一緒に」仕事をする大切さ。・・・そして難しさ。
読んでいて、ハッとさせられる事が多かったです。
46. 誇りと愛着
達人プログラマは自分の作った物に誇りと愛着を持つ。匿名で逃げてはいけない。
匿名性により、コードに責任を持たなくなり、ソースコードがどんどん酷い事になるプロジェクトを体験した事があります。その時は正直自分も「とりあえず動けばいいや、私に責任はないし」と考えていた事を告白します。
きちんと名前を書いて自分のコードに責任を持つ、責任を持てるコードを書けるようになる事を大切にしていけるプログラマになりたい。
「私はこれを記述した、そしてこの仕事の後ろには私がついている」
それがお客さんに対する品質の保証となれるような達人プログラマ目指して、これからも頑張っていきたいです。
最後に
昨年の7月から開始して計13回。
主催した@onjiro_mohyahyaさん、本当にお疲れさまでした!読了おめでとうございます。
隔週で同じ場所で読書会をやっており、勉強になるところがたくさんありました。
輪読のセンテンスの区切り方はかなり参考にさせていただいていました。
これからも勉強会などなどでお会いすると思いますので、よろしくお願いします!
えにしテックカフェにいってきました
1月 26th
えにしテックカフェ 2012-01-24にお邪魔してきました。
いつも、ここにくると癒されます。(ケーキじゃなくて!皆さんの雰囲気に)
今回のお話はこの3本でした。
- Design Rule Index を読んでみよう
- gollum を使ってみる
- iOS HIG を読んでみよう
Design Rule Index を読んでみよう
@mayucoさんの担当。
今回は「共通運命」の話。
デザイン上、動きがなければ同じ形のものを無意識にグルーピングしているけれど、動きがあると同じ動きのものをグルーピングして考えるようになるという人間の意識の話。
「同時に、同じ速度で、同一方向へ動かす」
「同時に、同頻度で、同じ強度で明滅させる」
と、同じものとして知覚されます。
という文章だけを読んでいると、とても難しく感じたのだけど、
「例えばこの人間の知覚がどういう場面で使われているか」
の例がいろいろと出てきて(レーダーのポイントと文字、人が走るアニメの背景と地面の関係など)、理解する事ができました。
本を読むだけじゃなくて、具体的な例を話し合いながら学ぶ事はとても良い事なんだなと感じました。
えにしテックカフェに行ってDesign Rule Indexの時間があるととても嬉しいです。
gollum を使ってみる
@tricknotesさん担当。
githubのwikiの機能を取り出して使う事のできるサーバー付きアプリケーション。gollumについて。
実際にgithubから持って来てローカル環境で使えるまでを実践。
インスールするまでの手順に興味津々。
知らないコマンドや便利なもの(bundllerなど)がたくさんあって、とても勉強になりました。
でもまだ、1人で入れられる自信は・・・ない。
テキストをgitにコミットするとwiki上で見る事ができるという仕組みはとても便利。
開発でgitを使っている時だと、ブラウザに移動しなくても書きたい事をwikiに残しておけるのは良いなぁ。
しまださん&しだらさんの後ろからの的確な指導にも感動。
iOS HIG を読んでみよう
@darashiさん担当。
iOSヒューマンインターフェースガイドラインをみんなで読んでみる。
実は日本語のドキュメントはちょっと古くて、最新版は英語版のみみたい。
しかし、大枠は変わらないという事で、最初の方からガイドラインを読みました。
頻繁にきちんとガイドラインを更新している事、ユーザーの目線に立つ事、ユーザーが「気持ちいい」と思える操作は何であるかを考える事・・・アップルらしいところがたくさん。
iOSの標準アプリはそう考えると本当にとても良くできているんだなあ。
iOSに関わらず、何かを作る時に使う人の事を考える(その人がどういう使い方をする事が一番気持ちがよいかを考える)、自分が本当にそのユーザーの気持ちにたてているか(自分にとって便利だと思う動作は、ターゲットにとっても便利なのか?)など、考える事がたくさんありました。
えにしテックカフェに行くと、コードをたくさん書きたくなる不思議!
たくさんコードと戯れたいなあと感じた夜でした。
UbuntuにMySQLを入れる
1月 26th
MovableTypeのテスト環境を作りたいの続きです。
$ sudo aptitude install mysql-serverするだけなんですが、
MySQLインストール時にrootのパスワード聞かれるんですね。
てっきり、インストール後にパスワードの設定を行うものだと思ってました。
で、てっきりハマるもんだと思ったんですけどね、
MySQLは公式サイトに日本語リソースもあってすんなり。
1. mysqlのインストール
$ aptitude install mysql-server $ mysql --version mysql Ver 14.14 Distrib 5.1.54, for debian-linux-gnu (x86_64) using readline 6.2
2. 文字コードの設定
“/etc/mysql/my.cnf”の[client]と[mysqld]に以下を追記
default-character-set = utf8
3. MySQLの再起動
文字コードの設定を有効にするために再起動
$ service mysql restart
4. データベースの追加
rootでmysqlにログイン
mysql> create database (データベース名)
5. ユーザーの追加
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER
-> ON (データベース名).*
-> TO (追加するユーザ名)@localhost
-> IDENTIFIED BY '(パスワード)';
次回、「メールの設定はちょっと・・・」の巻。
おしまい。
MovableTypeのテスト環境を作りたい
1月 24th
一般的には、XAMPPなんですかね。
でも、テスト用にローカルで動かしたかったし、Ubuntuの勉強がてらやってみました。
Ubuntuは、11.04を入れました。
インストールの時にまっさらを選んだみたいで、Apacheからインストール。
Ubuntu 11.04だと、Apache2が入るんですね。
それで、最初はFTPかなーって思って、vsftpdを試したけど挫折して、
手元の本に従って、すごくザルなWebDAVを設定して、
なんとかVMにMTOSをアップしました。
この方法が一般的じゃないのは分かってるのですが、
まずは、/etc/apache2の変更ですよね。
“/home/(ユーザー名)/public_html”が存在することを前提にお話しています。
1. envvars
www-dataっていうユーザーを増やしたくないので、この辺をいじりました。
#export APACHE_RUN_USER=www-data export APACHE_RUN_USER=(ユーザ名) #export APACHE_RUN_GROUP=www-data export APACHE_RUN_GROUP=(ユーザ名)
2. sites-enabled/000-default
DocumentRootを以下のように変更
DocumentRoot /home/(ユーザー名)/public_html
3. WebDAVの設定
http.confに以下を記述
DAVLockDB /tmp/DAVLock DAVMinTimeout 600 DAVDepthInfinity on Alias /www /home/(ユーザー名)/public_html <Location /www> DAV on </Location>
シンボリックリンクを貼る
$ cd /etc/apache2/mods-enabled $ ln -s ../mods-available/dav.load $ ln -s ../mods-available/dav_fs.conf $ ln -s ../mods-available/dav_fs.load
MacOS Xの場合は、Finderの[移動]→[サーバへ接続...]を使って接続します。
接続先は以下の通り。
“http://(ifconfigのinetアドレス)”
“http://(ifconfigのinetアドレス)/www”
なので、Ailasの記述が必要かは微妙ですね、
上記の2つで同じところに接続できても意味ないので。
2012/01/26 追記
ゲストで接続するには、打ち消してない方を入力します。
自分は、”envvars”の編集するタイミングが悪かったせいで、
WebDAVでアクセスできても、変更が出来なくてハマりました。
もし、エラーが起きる場合は、
“/tmp/DAVLock”のowner/groupを確認すると良いと思います。
自分は、”www-data”のままだったので編集ができなくて、
chownコマンドで(ユーザ名)に直しました。
でもって、
service apache2 restart
で、再起動すると一段落ですよね。
public_htmlにindex.htmlを置いて確認したり、
index.htmlを削除したらファイル一覧が表示されて、
“sites-enabled/000-default”を見直したり。
で、こっからですよね。
“AddHandler cgi-script .cgi”を、どこに書くの?って、なって。
インターネットで一生懸命検索して、
“mods-available/mime.conf”に存在することが分かって、
無事に、”#AddHandler cgi-script .cgi”を見つける事が出来ました。
以下は、普通にCGIを動かすお話です。
1. AddHandler cgi-script
“#AddHandler cgi-script .cgi”の”#”をはずす
2. MTOSのコピー
WebDAVに接続して任意の場所にコピー
3. パーミッションの変更
MTOSのコピー先で、
$ chmod 755 *.cgi
4. ExecCGIを記述する
“sites-enabled/000-default”の中に、
<Directory /home/(ユーザ名)/public_html/(MTOSのディレクトリ)> Options +ExecCGI </Directory>
5. いざ、アクセス!
自分の場合は、”DBI.pm”が見つからないというエラーが出たので、
cpanm DBIして、「Movable Typeへようこそ」にたどり着きました。
書いたー!今日はここまで。
次回、「MySQLのインストールでハマる!!」の巻。
おやすみなさい。
Groovyのsortキーの話
1月 24th
最近お仕事でJava+Groovyを使っています。
Groovyを使うと、Javaのまどろっこしいところを気持ちよく書けます。
Javaのお仕事をしながらスクリプト言語に触れることができ、他の言語を学習する際にも良い影響を受けています。
で、最近知ったGroovyのソートキーの挙動についてちょっとハマったので残しておく。
GroovyでのCollectionのソート
GroovyでCollectionをソートするとき、ソートの引数としてjava.util.Comparatorの他に、クロージャを渡すことができます。
ソート対象のオブジェクトのプロパティ値を返すクロージャーを渡すことで、そのプロパティ値をソートキーとすることができるのです。
def member = [[name:"a", age:22],[name:"ab", age:18],[name:"abc", age:42],[name:"b", age:33]]
println member.sort{it.name}
//-> [[name:a, age:22], [name:ab, age:18], [name:abc, age:42], [name:b, age:33]]
Google先生でこのソート方法を調べていると
「ソート対象のオブジェクトのプロパティ値をリストで返せば、第1ソートキー・第2ソートキーとして使用することができる」
という情報がちらほら。なんと便利な。
しかし、Grな日々(uehajの日記)の記事 – Groovyのsortにまつわる衝撃の事実では、このソートは実装されているわけではなく単なる偶然だ、と書かれていました。
この記事が書かれたのは2009年、今はどうなっているのかな?
ということで、ちょっと試してみました。
試してみた
def member = [[name:"a", age:22],[name:"ab", age:18],[name:"abc", age:42],[name:"b", age:33]]
// 1) 文字列型のプロパティを返す
println member.sort{it.name}
//-> [[name:a, age:22], [name:ab, age:18], [name:abc, age:42], [name:b, age:33]]
// 2) 文字列型のプロパティを要素に持つリストを返す ★
println member.sort{[it.name]}
//-> [[name:a, age:22], [name:b, age:33], [name:ab, age:18], [name:abc, age:42]]
// 3) 数値型のプロパティを返す
println member.sort{it.age}
//-> [[name:ab, age:18], [name:a, age:22], [name:b, age:33], [name:abc, age:42]]
// 4) 数値型のプロパティを要素に持つリストを返す
println member.sort{[it.age]}
//-> [[name:ab, age:18], [name:a, age:22], [name:b, age:33], [name:abc, age:42]]
// 5) 数値型のプロパティと文字列型のプロパティを要素に持つリストを返す ★
println member.sort{[it.age, it.name]}
//-> [[name:a, age:22], [name:b, age:33], [name:ab, age:18], [name:abc, age:42]]
リストを返すクロージャを渡した時、かつ、プロパティ値が文字列型の場合、期待するソート結果が返ってきませんでした。
リストを返すクロージャーで複数ソートキーを指定できるのだとしたら、1)と2)で挙動が異なる時点で明らかにおかしいです。
先ほど紹介させていただいた Grな日々(uehajの日記)の中でその理由として、「リストについて特別扱いをしていない。リストとしての辞書ソートみたいなものが実現された結果、ソートキー順にソートされているように見えていた」と書かれています。なるほど。
記事が2009年だったので今のバージョン(1.8.5)の該当ソースコード(ここからダウンロードできる)を読んでみました。
現行バージョンでも、リストを返すクロージャーについて特別扱いしていないなぁ。(単純なリストの比較のみ)
結論:
現バージョンでもクロージャーにリストを返したとき、それらの要素がソートキーとして働くような実装はされていない
ちなみにプロパティの型が数値(Integer)だと上手いこといくようにみえます。
def member2 = [[weight:40, age:22],[weight:75, age:18],[weight:75, age:42],[weight:65, age:33],[weight:50, age:18]]
println member2.sort{it.weight}
//-> [[weight:40, age:22], [weight:50, age:18], [weight:65, age:33], [weight:75, age:18], [weight:75, age:42]]
println member2.sort{[it.age]}
//-> [[weight:50, age:18], [weight:75, age:18], [weight:40, age:22], [weight:65, age:33], [weight:75, age:42]]
println member2.sort{[it.age, -it.weight]}
//-> [[weight:75, age:18], [weight:50, age:18], [weight:40, age:22], [weight:65, age:33], [weight:75, age:42]]
Groovy JDK API SpecificationのCollection#sort(Closure)にもソートキーをリストで渡す方法は明示されていませんでした。
第1ソートキー、第2ソートキーを使用したい場合は自分でComparatorを実装するのが正解ですかね。
Ruby勉強会@札幌-21に参加しました
1月 23rd
1/21(土)に行われたRuby勉強会@札幌-21に参加しました。
読み合わせとコードレビュー大会。勉強会でコードレビューするのはとっても面白い試みだなあと思いました。
初めてのRuby読み合わせ
6.3制御式〜。6.3.4 while式までやりました。
case文の書き方が独特だなあ。特に条件を横に並べて書く事ができる点。
例えば、targetという変数の値が1の場合はxx、2,4,5の場合はyy、7の場合はzz、その他の場合はhogeという処理を書くとすると
<Java>
switch(target){
case 1:
xx();
break;
case 2:
case 4:
case 5:
yy();
break;
case 7:
zz();
break;
default:
hoge();
}
}
<Ruby>
case target when 1 then xx when 2,4,5 then yy when 7 then zz else hoge end
Groovyを併用する事で、Javaでもswitch文でパターンマッチングを簡単に使用する事ができたり、
セミコロンを省いたり、とかなり気持ちよく書けるようになっているのだけど、breakを書かなくていいというのはすごく気持ちがよいなあ。
caseと処理が1:1なので、あるcaseにマッチしたときにどの処理を行うべきなのか見やすい。
読書会の中では、rubyの色々な記述方法について、「どれを使っているか、そしてそれはなぜか」という話がたくさんされていました。
色々な書き方があると「意味を考えてコードを書く」という気持ちが強くなるんだなぁと感じました。
どっちを使うか考える時に、このコードで表現したい事は何かを今一度考えるというような。
表現方法がたくさんあるrubyならではの強みだなぁ。
次回は P118 6.3.5から。
初めてのRuby読み合わせ
volpe28vさんがリリースした「コタれん」のソースコードをみんなでレビュー。
Railsのソースをそんなにたくさん見た事がないので興味津々でした。
そして、プロダクトの構成を説明してもらう事、そのソースコードを見る事、ソースコードの指摘を聞く事、全部がとても面白かった。
書いた人も、見ている人も、どっちにも有益な時間でした。あっという間!
業務で行われるソースコードレビューも同じようにたくさんの学びや刺激を受ける事ができますが、勉強会では業務という枠を飛び越え、本当にいろいろな考えを聞く事ができるのが面白い。(人数も多いし)
またやってみたいなあ。
Sapporo Cafeさん
今回の会場はSapporoCafe(北8条西5丁目)でした。
1階はWifi完備のカフェ、2階は談話室として解放されています。
今回の勉強会は2階で開催されました。
普段は2階も自由に使えるスペースとなっていますが、2階の半分のスペースを1時間800円で貸していただけるそうです。1階のカフェメニューを2階でいただく事もできるし(スイートポテト美味しかった!)、プロジェクタも電源もあります。半日で電源、インターネット環境、プロジェクタがついて4000円は安い。小さめの勉強会を開催する時にとても嬉しい場所です。開発オフなど出入り自由な勉強会にもとても向いているんじゃないかな。
ただ、冬場の2階はちょっと寒いので、膝掛けなどの防寒具を持参した方が良さそうです。
1階は居心地のよいカフェでした。机が広々。コーヒーも美味しかったし(350円)、立地条件もとても良い(駅から近い、自分の場合は自宅からも会社からも近い)。
1人でちょっと勉強するのに最適のスペースだなと感じました。
仕事帰りに勉強したり本を読んだりするのに、これからたくさん利用させていただこうと思います!
数年前はこういう施設(インターネットが使えて、4,5人でPCを使いながら開発や話し合いをするスペース)が札幌の街中には全然なかったんだよなあ、時代が嬉しい方向に変わっていっているのを感じました。
これからもよろしくお願いします。
今回の勉強会に参加して、いい刺激を受けて「Rubyのコード書きたいー!」という気持ちになりました。
「どうしてその書き方をするのか」という話をしていたのが一番大きかった。
どの書き方を選ぶかでソースコードから伝わるニュアンスや伝えたい意味が変わるなんて考えた事がなかったので、そういう変化を楽しみながら書いていきたいです。まずは写経から。
