% ls ~
Desktop
Downloads
Library
Music
Public
bin
gems
src
Documents
Dropbox
Movies
Pictures
Sites
code
mbox
おもろいとこなし。
% ls ~
Desktop
Downloads
Library
Music
Public
bin
gems
src
Documents
Dropbox
Movies
Pictures
Sites
code
mbox
おもろいとこなし。
(TVばっかり見てるとバカになる風タイトル)
葬儀やお墓といった年配の方をターゲットにしたサイトを作ることが多いのですが、そういった場合、見に来る方の環境はやはりIE6(WindowsXP)が一番多い。
デザイナーのmachidaさん曰く、
「Macでデザインするとフォントやアンチエイリアスが綺麗なので腕が鈍る」
「WindowsXP, IE6環境でのデザインはWebデザイン養成ギブス的に働く」
machidaさんのMacBookは音楽作成にしか使われてないみたいです。
一方で、
「残念なデザインに囲まれていると自分のデザインも残念化する」
といった意見もある。
Vista, IE8, メイリオ環境はどうなんだろう?それが十分綺麗なんだとしたらどっちでもいいわけだ。
あと数年は悩まされ続けそう・・・。
p0t.jpなどのドメインは失効してしまいましたが、大東亜戦争従軍記(http://war.komagata.org)は影響が無くて良かった。
従軍記のブログを公開してから2年近く立ちますが、やはり終戦記念日が圧倒的にアクセスが多いです。
2年連続でこんな感じです。
故人の手記なので基本新しいエントリーがあがることはありませんが、僕が死ぬまでにこの糞ブログでどんなエントリーを書こうが従軍記を公開/維持する方が大事だと思います。
もっと多くの方に読んでもらうにはどうしたらいいんだろうか。
関連:「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から順番に見たい時にちょっと不便。これ逆にソートすることできないかな。(これはフィードリーダーでも思う事)
あとで頑張ってソース見てみようと思いますが、そんなん簡単だと言う方がいれば教えて頂ければ幸いです。