「RailsでWebアプリを作る」ための最小限必要な技術の目次(タイトル、参考URL/書籍、ゴール)を作ることが目的。
もう出来る項目については飛ばす。
対象は何らかのプログラミング経験のある人。
こっち参照:web-programmer-tutorial - Project Hosting on Google Code
「RailsでWebアプリを作る」ための最小限必要な技術の目次(タイトル、参考URL/書籍、ゴール)を作ることが目的。
もう出来る項目については飛ばす。
対象は何らかのプログラミング経験のある人。
こっち参照:web-programmer-tutorial - Project Hosting on Google Code
CentOS 5.3でRmagick
fontをfedoraから持って来てるところが気持ち悪いが仕方ないね・・・
$ wget http://www.zacharywhitley.com/linux/rpms/fedora/core/6/i386/msttcorefonts-2.0-1.noarch.rpm
$ sudo rpm -ivh msttcorefonts-2.0-1.noarch.rpm
$ ln -s /usr/share/fonts/msttcorefonts /usr/share/fonts/default/TrueType
$ gem install rmagick -v 1.15.14
※おかげさまで、素敵な方に来て頂けることになったのでエンジニアの募集は終了しました。(デザイナーは激しく募集中!)
※給料の割に敷居が高いと指摘を頂いたので加筆修正しました。
僕が働いているアクトインディ株式会社でエンジニアとデザイナーの募集を始めました。(デザイナーに関してはデザイナーのmachidaさんが募集要項を書いてくれると思いますが、僕のところへ連絡をいただいても大丈夫です。)
大学院を半年休学してアルバイトとして参加してくれたShu MASUDAさんの残された時間が後1ヶ月ちょっとなので、早めに募集を開始しました。
社員かアルバイトの方を募集しています。
(LinuxやWeb開発を覚えたい学生の方も歓迎です)
ブログやプログラムのソースコードを見せていただきたいというのは、「仕事外で趣味のコードを書くのが楽しい」という人なのかどうかを知りたいということだけです。凄いコードをかかなくちゃ駄目とかそういうのではないです。
「RailsやLinuxを覚えたい」という方や「Railsを駆逐してSmalltalkの素晴らしさを啓蒙したい」という野望をお持ちの方などをお待ちしています。
本当のところ、「プログラミングが好き」であり「僕たちと楽しく仕事ができる」方であれば大歓迎です。
今回からRailsなどのWebアプリやLinuxの経験が無い方向けに1ヶ月の研修期間を用意しています。
おすすめポイント
エンジニア/デザイナーブログも作ったのでこちらから電波も発信して行きたいと思います。
なお、例によって決まった方には“横山光輝 史記 第七巻”と“勇午 洞爺湖サミット編 第二巻”をお贈りします。
YAPC::Asia 2009 で「Ark」と「kamaitachi」について話します : tech.kayac.com – KAYAC engineers’ blogYAPC::Asia 2009 は9月10日(木)と11日(金)の2日間、東京工業大学大岡山キャンパスで開催されます。
へぇ〜、YAPCでArcの話があるんだ。
「・・・なん・・・だと・・・?」
!!??
なぜYAPCで?ポールグレアムが来るのか?そもそもMzSchemeのVersion352でしか動かないんじゃないのか???
と一瞬パニクったが、よく見ればArk違いだった。(s/Arc/Ark/)
参照こちらのエントリーで書いてたのをちょっと何とかならないか探って見ました。
(あくまで個人的なHackなので本家には問い合わせたりしないようお願い致します。)
JSONをただ引っ張って来てPlayerに渡してるだけだろうと思って、Javascriptの中でsortできないかと少し探りました。
jsはどうも勘が働かず、Firebugsで追ってもいまいち分からず。(そもそも動画サイト毎のプラグインアーキテクチャー的なものとか、なんでニコ動再生できんの?とかいうレベルで分からない。)
やはりサーバーサイドか・・・。
インストール中にチラチラ見えていたMoose?とか、Rose::DBとかHTTP::Engineとか大昔に止まっている俺のPerl脳で理解できるんだろうか。あぁ・・・巨大なモダンPerlが攻めて来る。
と思ったら意外に読み易い。(Remedieのソースが綺麗なのかも)
実装方法は違えど、設計はどの言語も似たようなもんで、Rubyで言えばアレか〜って感じで理解し易かった。
Rose::DB::Object::Managerなんて糞便利なもんがあるんですね。(Class::DBIとかで時が止まっている。)
本題。
remedie 0.6.14へのdiffです。
diff --git a/lib/Remedie/DB/Channel.pm b/lib/Remedie/DB/Channel.pm
index da0597f..f2bde7d 100644
--- a/lib/Remedie/DB/Channel.pm
+++ b/lib/Remedie/DB/Channel.pm
@@ -19,7 +19,7 @@ sub items {
return Remedie::DB::Item::Manager->get_items(
query => \@query,
- sort_by => 'id DESC',
+ sort_by => 'id',
$opts{limit} ? (limit => $opts{limit}) : (),
);
}
キタコレ。
これでニコ動の続きモノ動画を大消化大会だ!
追記:
こっちの方がスマート。
Twitter / toshikaz: remedieにゲーム実況などニコニコマイリストを登 …toshikaz55 remedieにゲーム実況などニコニコマイリストを登録する際に逆順になる場合は、RSSのURLに、/mylist/XXXXXX?sort=d&rss=2.0 とsortを付加してやると順番に登録されて楽に順次再生できる
関連
参照XPのプラクティスのうちの一つ、“継続的インテグレーション”についての詳細はこちら。
要は、
- 継続的インテグレーションテスト部分も含めて「全てが自動化された」「再現可能な」ビルドを、「日に何度も」行うこと
だそうです。
スクリプト言語だとデプロイはあってもビルドって殆ど無いですよね。なので、
“自動的に日に何度もテストを行うこと”
という風に勝手に縮小理解しました。
継続的インテグレーションについては、CIサーバー(Continuous Integration Server)というやつが沢山あって非常に機能も豊富です。
僕の仕事には少々大げさな気がしたのと、
「cronでsvn up && rakeじゃ駄目なのかしら?」
などと思ったのでそれをちょっとだけサポートするコマンドを作ってみました。
komagata’s saimaa at master – GitHub
インストール
$ sudo gem install komagata-saimaa -s http://gems.github.com
これでsaimaaというコマンドが入りました。
使い方
saimaaは-cでshellで実行したいコマンドを引数に取って実行します。
$ saimaa -c "ls /tmp"
コマンドが成功(0を返す)した場合、何もしません。
$ saimaa -c "ls /tmppppp"
--project--
--stdout--
--stderr--
ls: cannot access /tmppppp: No such file or directory
コマンドが失敗(0以外を返す)した場合、標準出力にコマンドの標準出力と標準エラー出力を返します。
$ saimaa -c "ls /tmppppp" example
--project--
example
--stdout--
--stderr--
ls: cannot access /tmppppp: No such file or directory
引数はプロジェクト名として認識されます。(このジョブのタイトルみたいなものです)
通知
saimaaは-nで通知のためのコマンドを引数にとって、-cで実行したコマンドの標準出力を標準入力として実行します。 (command | notifier みたいなのと同じです。)
$ saimaa -c "ls /tmppppp" -n "figlet" example
_ _
_ __ _ __ ___ (_) ___ ___| |_
_____ _____| '_ \| '__/ _ \| |/ _ \/ __| __|____ _____
|_____|_____| |_) | | | (_) | | __/ (__| ||_____|_____|
| .__/|_| \___// |\___|\___|\__|
|_| |__/
_
_____ ____ _ _ __ ___ _ __ | | ___
/ _ \ \/ / _` | '_ ` _ \| '_ \| |/ _ \
| __/> < (_| | | | | | | |_) | | __/
\___/_/\_\__,_|_| |_| |_| .__/|_|\___|
|_|
_ _ _
___| |_ __| | ___ _ _| |_
_____ _____/ __| __/ _` |/ _ \| | | | __|____ _____
|_____|_____\__ \ || (_| | (_) | |_| | ||_____|_____|
|___/\__\__,_|\___/ \__,_|\__|
_ _
___| |_ __| | ___ _ __ _ __
_____ _____/ __| __/ _` |/ _ \ '__| '__|____ _____
|_____|_____\__ \ || (_| | __/ | | | |_____|_____|
|___/\__\__,_|\___|_| |_|
_ _
| |___ _ ___ __ _ _ __ _ __ ___ | |_ __ _ ___ ___ ___ ___ ___
| / __(_) / __/ _` | '_ \| '_ \ / _ \| __| / _` |/ __/ __/ _ \/ __/ __|
| \__ \_ | (_| (_| | | | | | | | (_) | |_ | (_| | (_| (_| __/\__ \__ \
|_|___(_) \___\__,_|_| |_|_| |_|\___/ \__| \__,_|\___\___\___||___/___/
___ _ _
/ / |_ _ __ ___ _ __ _ __ _ __ _ __ _ __ _ | \ | | ___
/ /| __| '_ ` _ \| '_ \| '_ \| '_ \| '_ \| '_ (_) | \| |/ _ \
/ / | |_| | | | | | |_) | |_) | |_) | |_) | |_) | | |\ | (_) |
/_/ \__|_| |_| |_| .__/| .__/| .__/| .__/| .__(_) |_| \_|\___/
|_| |_| |_| |_| |_|
_ __ _ _
___ _ _ ___| |__ / _(_) | ___ ___ _ __
/ __| | | |/ __| '_ \ | |_| | |/ _ \ / _ \| '__|
\__ \ |_| | (__| | | | | _| | | __/ | (_) | |
|___/\__,_|\___|_| |_| |_| |_|_|\___| \___/|_|
_ _ _
__| (_)_ __ ___ ___| |_ ___ _ __ _ _
/ _` | | '__/ _ \/ __| __/ _ \| '__| | | |
| (_| | | | | __/ (__| || (_) | | | |_| |
\__,_|_|_| \___|\___|\__\___/|_| \__, |
|___/
最初に実行したコマンドが成功した場合、通知コマンドは実行されません。
$ saimaa -c "ls /tmp" -n "figlet" example
何に使うの?
だからどうした的なコマンドですが、要するに下記の用に使うことを念頭に置いています。
$ saimaa -c "svn up && rake" -n "mail -s '[example] rspec' notify@example.com" example-project
svn upして、rake [spec]が失敗した時だけnotify@example.comにメール飛ばす。
前述のfigletもそうですが、通知コマンドは標準入力を取るコマンドならば何でもかまいません。(growlnotifyとか)
実際のcronの設定としてはこんな感じです。(ossuary=納骨堂のサイトの設定)
$ crontab -l
PATH=/usr/bin:/bin:/usr/local/bin
HOME=/home/deployer
0 * * * * saimaa -c "cd /var/www/test/ossuary && svn up && script/spec spec -f progress" -n "mail -s '[ossuary] rspec' dev@actindi.net" ossuary
10 * * * * saimaa -c "cd /var/www/test/ossuary && svn up && script/cucumber features -s -l ja" -n "mail -s '[ossuary] cucumber' dev@actindi.net" ossuary
毎時間、0分と10分にそれぞれtrunkのコードにrspecとcucumberのテストを走らせています。
密かに $HOME/.saimaa/saimaa.yml にコマンドの実行結果をプロジェクト名毎に保存するようになっています。(今のところ特にインターフェースはありません)
shでワンラインでかけそうな、どうということは無いコマンドですが、僕の中での継続的インテグレーションの要件を一応みたしています。
また、ruby, rubygems, githubの組み合わせは自作コマンドを配布するとても楽な組み合わせなので最近多用しています。
マルチプラットフォームで動くし、Macなら、/opt/local/bin、Debianなら、/usr/bin といったパスの通ったところに配置してくれるし、gemコマンドでインストール、アンインストールも楽です。
もし、興味がおありの方はちょっとためしてみてもらえるとありがたいです。おそらく、開発サーバーに入って30分もあれば継続的インテグレーションが始められる筈です。
僕のRemedieはリビングPCのWindowsXP上のcoLinux上のDebianで動いているので、Microsoft Updateの再起動でcoLinuxも再起動になる。
さて、【ニコニコ動画】破壊神兄弟が「四八(仮)」を実況の続きでも見ようかなと思ったら、Remedieのトップが真っ黒。
Twitter / Masaki Komagata: 再起動したらRemedieのフィード全部消えた・・・ …komagata 再起動したらRemedieのフィード全部消えた・・・死にたい。
自分の作ったソフトウェアで人が死んだら鬱陶しいですよね。 miyagawaさんからヒントを貰ったので調べてみました。
Twitter / Tatsuhiko Miyagawa: @komagata Oops. Anything l …miyagawa @komagata Oops. Anything left in ~/.remedie/remedie.db? I back it up with TimeMachine and Dropbox
どうもモダンPerl恐怖症があるのか問題に取り組もうとすらしなかったのが良く無かった。
$ locate remedie.db
/home/komagata/.remedie/remedie.db
/.remedie/remedie.db
remedie.dbが二つ・・・。
$ echo "select count(id) from channel;" | sqlite3 /home/komagata/.remedie/remedie.db
15
$ echo "select count(id) from channel;" | sqlite3 /.remedie/remedie.db
0
一目瞭然也・・・。
以前のエントリーのinitスクリプトに問題がある。
$ cat /etc/init.d/remedie
#!/bin/sh
### BEGIN INIT INFO
# Provides: remedie
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start remedie at boot time
# Description: Enable service provided by remedie.
### END INIT INFO
case $1 in
start)
cd /home/komagata/code/remedie/bin
sudo -u komagata env HOME=/home/komagata nohup perl ./remedie-server.pl > /dev/null 2>&1 &
;;
esac
sudo -uでユーザーkomagataとして起動し、HOMEも/home/komagataに設定してやればOK。
これでリアル世界よりも充実したRemedie生活が認可される。
おまけ
Remedieはフィードの動画が連続再生されるのが凄く便利!だけど、新しい順に再生されるので、ニコ動とかでシリーズ物を見つけて、Part.1から順番に見たい時にちょっと不便。これ逆にソートすることできないかな。(これはフィードリーダーでも思う事)
あとで頑張ってソース見てみようと思いますが、そんなん簡単だと言う方がいれば教えて頂ければ幸いです。
ポット使ったら「バチッ」とかいって電源タップが壊れた。と同時にTime Machine用に使ってた裸族の二世帯住宅(RAID-1)の片方も壊れた。
でかいし、うるさいし、面倒臭いのでTime CapsuleをAmazonで衝動買いしました。
実物は結構面積ありますね。ネットワーク機器は重ね置きして、熱で何個も壊してるので重ねないでおこう・・・。
|
|
所謂自己啓発本の古典だけど、たまに読み返したくなるので文庫セット買いました。(小さい箱に入っていてかわいい)
もう定年退職した僕の親父は郵便局の主にセールスの管理職として長年過ごした。(郵便貯金とか簡易保険とか)
ある時、「管理職の秘訣は?」と聞いたら、答えがカーネギーが「人を動かす」の中で繰り返し繰り返し書いている実例の一つみたいで面白かったので紹介します。
郵便局の課長や局長といった管理職は2〜3年?ぐらいで各地の局を点々とするそうで、定期的にまったく新しいメンバーと環境に入って行ってグループ全体の売上を上げるのが仕事です。
そこでまず必ずやることは、
「一番成績の悪い人達を褒めて、励ます。」
だそうです。
具体的には、どこの組織でも必ず成績の悪い集団があるので、その人達と飲みに行って、褒めて、励ますそうです。
「郵便局員であるということは全員、公務員試験を合格してきているはず。そんな優秀な人達ならばちょっとやり方を変えるだけで成績があがる筈だ。」
そして、日報(的なもの?)でのその日の行動に対して、褒めて、励ます。
「今回は残念だったが、2週間に1度くらい用が無くても顔を出してみたらどうかな。」
とか
「見込みの高いお客様のリストを作って、そこを重点的に回れば楽かもしれない。」
といったような普通のアドバイスをその人達に重点的にするそうです。
元々、最悪の成績だったので成績は伸びるしかないし、成績が伸びれば本人も嬉しくてやる気が出る。成績の悪かった集団に改善が見られると、グループ全体の雰囲気も良くなり、皆自発的に行動するようになる。そうです。
公務員に自発的な行動を促すとかとてつもなく難しいんじゃないかと思ってましたが(偏見)、親父曰く、
「公務員といっても人間。成績が悪ければ居心地が悪いし、成績が上がれば嬉しい。」
基本中の基本、大事にしなきゃいけないなあと思いました。
最近疑問に思ってる事。
「プログラミングについてブログを書く事は寒い。」
とか、
「非効率で無意味な行為だ。メリットが無い。」
とか、
「何か僕の知らない別の場所でアウトプットしてる。」
とか、
「規則で公開出来ない。」
とか、そういう風潮があるんでしょうか?
ここ2〜3年?でとても有益な情報を発信してくれていて、勉強になるし、更新をいつも楽しみにしているようなブログがどんどん更新が無くなっている様な気がするんです。
「プログラマーとして成長する = ブログを書かなくなる」
みたいな雰囲気がするんです。
「お、このブログは面白いからフィードリーダーに登録しよう!」
というブログはもちろん日々、沢山発見します。でも大体がコンピューター系の学生の人だったりするんです。
社会人になってプログラマーとして仕事がある程度認められると他者からの承認欲求が満たされるのでブログを書く必要が無くなるんでしょうか?
ちょっとぶっちゃけたところの話が聞きたいです。