UKSTUDIO
TIG+Limechatで携帯百景の画像をインライン展開する
- 2010-04-23 (金)
- article
公式の方でtwitpic, tweetphoto, yfrog, twitgoo, img.ly, movapic, f.hatena.ne.jpの画像展開がサポートされました。よって現在はこの方法を取らなくても大丈夫です。http://limechat.net/mac/ja.html
引き続き、Limechatネタ。Limechatは画像のURLをインライン展開してくれるので、当然TIG(TwitterIRCGateway)で取得してきたものに画像へのリンクがあればそれも展開する。
しかし、Twitterでは必ずしも画像とわかるURLが流れてくるわけじゃないので展開しない場合もある。個人的にTwitterに画像をあげるとき携帯百景を使うことが多いんだけど、それはURLが画像とわかるものじゃないのでLimechatでは展開してくれない。
TIGではIronRubyやら、IronPythonやらで色々とごにょごにょする仕組みがあるらしく、一応はそれでなんとかできたので手順を書いておく。
まず、TIGのディレクトリにConfigs/[User]にScriptsディレクトリを作る。
そしてこのファイルを適当な名前でそこに保存する。
次に、Limechatの方で#Consoleにjoinし、”DLR”と入力。更にそのまま”reload”と入力。ファイルを読み込んだことを告げるメッセージが返ってくればOK。
仕組みとしては単純で、携帯百景は画像のURLが決まっているので、Twitterにポストされた携帯百景のURLから画像パスを求め、それを発言の末尾に追加しているだけ。スクリプトの正規表現が結構適当なのでもしかしたらうまくうごかない時があるかもしれない。もし使うとしたらそこらへんは自己責任で。
ちなみに展開された画像はこんな感じ。これはTwitterにWeb上からポストした僕の発言。

多分、似たようなやり方でTwitpicとかも対応できると思うので後でやってみようと思う。
- Comments: 0
- Trackbacks: 0
Limechat for Macのテーマ「まんまるドロップ」を公開します
- 2010-04-23 (金)
- article

Limechat for Mac用のテーマ「まんまるドロップ」を作ったので公開しておく。名前は聖剣伝説由来だけど、特に関連はない。
http://github.com/ukstudio/ManmaruDrop
4/16に公開されたバージョン2.6でTwitterのアバターを表示することが出来るようになったのでそれ前提のテーマとして作った。TIG専用チャンネルかどうかに関わらずアイコンを表示していることが前提。
あと、2カラムのみのチェック、メインのログウィンドウ部分ぐらいしかCSSを書いていない(コンソールはほぼ手を出していない)。他にも発言の種類もprivmsgやnotice、replyぐらいしかチェックしてないので変なデザインになることもあるかも。興味ある人はCSSをのぞくのもいいけど、普段CSSを書く人間ではないので結構汚い部分が多いと思う。
しばらくは自分でこのテーマを使っていくつもりなので細々とアップデートがかかると思う。もし良かったら使ってみてくださいまし。
- Comments: 0
- Trackbacks: 0
WEB+DB Vol.56に「コーディングの基礎知識」を書きました
- 2010-04-19 (月)
- article

WEB+DB Vol.56 表紙
4月24日発売のWEB+DB PRESS Vol.56の特集「コーディングの基礎知識」を書いた。既にAmazonに書影が出てるね。(アフィリエイトリンク)。
内容は、一言で言うと「こうコードを書くと良いですよ」って感じ。技評のページには以下のように書いてある。
仕事でコードを書くようになると,「どんな処理をしているのかがわかりやすい」「保守,機能追加が簡単」など,チームでの作業やコードを長くメンテナンスすることを視野に入れたコーディングが必要になります。社会人一年目の今,コードの書き方や考え方に関して良い習慣を身につけておけば,これからのプログラマ生活のさまざまな局面でその効果を実感することでしょう。本特集では,コードを書くうえでの良い習慣の基礎となる部分をていねいに解説します。
http://gihyo.jp/magazine/wdpress/archive/2010/vol56
紹介をダラダラと書いてもあれなので、記事として書かなかったことを少し書いておこうと思う。
少しスポーツの話をするけれど、スポーツには「上手くなる喜び」というものがあると思う。例えば「100m走のタイムが0.1秒縮んだ」「今まで出来なかった技が出来るようになった」などなど。スポーツ経験者ならこの上達した喜びを知ってると思う。絶好調の時はそれこそ毎日自分が成長しているように感じるときもある。(逆に毎日が停滞してるように感じる時もあるのだけれど)
実はプログラミングにもそういう楽しさがある。スポーツと違ってわかりやすい指標がないのでちょっとわかりづらいかもしれない。でも実感としてある。例えば、昨日書いたコードをリファクタリングしてわかりやすいコードに書き直せた時、クラスの設計がわかりやすく出来たときなど。
記事には新人向けということで、きれいに書くと仕事上メリットがあるよ的な感じで書いてはいるけれど、それとは別にそういうきれいなコードを書く喜びというのも知ってもらえたらなーと思う。
ついでに言うと、上記のアフィリンクから買って頂けると僕の懐が少し潤います。
- Comments: 0
- Trackbacks: 2
CentOS 5.4(EC2)にApache+PassengerでRails環境作る
- 2010-03-29 (月)
- article
後々、また参照する気がするので記録しておく。この手の環境構築系のドキュメントってWikiかなんかにみんなで情報集めたらそこそこ便利そうな気がするのだけどどうだろう。
Ruby、RubyGemsのインストール
yumでRubyをインストールしようとすると、1.8.5が入ってしまうので仕方なくソースからインストール。
$ cd /usr/local/src
$ sudo wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p249.tar.gz
$ sudo tar zxvf ruby-1.8.7-p249.tar.gz
$ cd ruby-1.8.7-p249
$ sudo ./configure
$ sudo make
$ sudo make install
$ cd /usr/local/src
$ sudo wget http://rubyforge.org/frs/download.php/69365/rubygems-1.3.6.tgz
$ sudo tar zxvf rubygems-1.3.6
$ cd rubygems-1.3.6
$ sudo ruby setup.rb
この時点で一応RubyGemsもインストール出来てはいるけれど、実際に使おうとするとエラーが発生する。どうやらzlibが入っていなかった模様。
$ sudo yum install zlib-devel
$ cd /usr/local/src/ruby-1.8.7-p249/ext/zlib
$ sudo extconf.rb --with-zlib-include=/usr/include --with-zlib-lib=/usr/lib
$ sudo make
$ sudo make install
MySQLのインストール
こっちはyumからサクッとインストール。
$ sudo yum install mysql mysql-server mysql-devel
$ sudo /etc/initd.mysqld start
my.cnfの設定は/usr/share/mysql/以下からコピーしてきたりとか適当に。ユーザの設定とかも適当に。
Apache+Passenger
まずはApacheをサクッとインストール。
$ sudo yum install httpd-devel
そしてPassengerのインストール。
$ sudo gem install passenger
$ sudo passenger-install-apache2-module
ここでまたしてもエラー。どうやらOpenSSLが入っていないとかなんとか。
$ sudo yum install openssl-devel
$ cd /usr/local/src/ruby-1.8.7-p249/ext/openssl
$ sudo ruby extconf.rb
$ sudo make
$ sudo make install
これで無事Passengerがインストール出来る。
$ sudo passenger-install-apache2-module
最低限のPassengerの設定。この設定の内容はpassenger-install-apache2-moduleを実行した時に表示されているので確認しておくこと。
$ sudo vi /etc/httpd/conf.d/passenger.conf
LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.11/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.11
PassengerRuby /usr/local/bin/ruby
あとはhttpd.confのDocumentRootをRailsのpublicディレクトリにすればOK。
$ sudo vi /etc/httpd/conf/httpd.conf
DocumentRoot /path/to/rails/public
本当に最低限だけどとりあえずこれでPassengerでRailsを動かすことが出来るはず。ApacheやMySQLの自動起動はchkconfigを設定すればよい。Passengerの細かい設定はPassenger users guidを参考に。
- Comments: 1
- Trackbacks: 0
HT-03AでテザリングかつSIM挿し替え時の料金について
- 2010-03-12 (金)
- article
docomoに問合せて返信きた。
テザリング
Biz・ホーダイ ダブルの場合、定額対応アクセスポイントへの通信は
上限額5,985円、それ以外の通信は上限額13,650円になります。
マーケットに公開されているテザリングアプリでテザリングを行なった場合、上限額が5,985円以内で使えるか保証はできない(どのような通信になるかわからないため)けど、最悪でも上限額13,650円以内の利用となるということらしい。
SIM差し替え
HT-03AのSIMをFORMA機種などのiモード端末に挿した場合は、iモード通信を利用する為に別途iモード付加オプションを使う必要がある(月額315円)。こちらは明確に5,985円の対象外とのことなので上限額が13,650円になる。音声通話に関しては基本料金プランに準じた通話料金になるとのこと。つまりHT-03Aと変わらない。
4/1よりパケ・ホーダイダブルとBiz・ホーダイダブルが統合される
上限額が13,650円になる件は、4月からプランが統合されるので結局のところSIMを挿し替えても最大5,985円以内でiモード通信もHT-03Aのスマートフォン通信も利用可能になるとのこと。
パケ・ホーダイ ダブルとBiz・ホーダイ ダブル及びパケ・ホーダイ シンプルとBiz・ホーダイ シンプルの統合のお知らせ
これはあくまでパケ・ホーダイダブルとBiz・ホーダイダブルの統合なのでテザリングの上限が5,985円になるということではなさそう。(未確認)
- Comments: 0
- Trackbacks: 0
東京Ruby会議03にスタッフとして参加した
- 2010-03-02 (火)
- article
2月27日に開催された東京Ruby会議03にスタッフとして参加した。
今年初めになんとなく立てた目標に「なんかしらのイベントにスタッフとして参加する」というものがあって、当初はRuby会議の方に参加するつもりだったんだけど、takknamの人が「東京Ruby会議がスタッフ募集しているみたいだよ」と教えてくれたのがきっかけでスタッフとして応募することになった。
今回、東京Ruby会議03専用に公式サイトを用意したいと言うことで既存のRegionalRuby会議のシステムに僕の方で手を入れることになった。デザイン・マークアップはmayucoさんが担当が担当してそれを僕が組込むという感じ。話を聞くと好評だったようで、僕がスタッフらしい仕事をしたのはこれぐらいなんだけど、これだけでもスタッフとして参加してよかったなと思う。
当日は、会場の準備と受付以外は基本プラプラしてた。朝、東京マラソンのことをすっかり忘れてタクシー使ったら思いっ切り遅刻してしまった。ほんとすみません・・・
セッションは残念ながら成瀬さんの時は受付にいたので聞けなかった。yuguiさんと田中さんのセッションはすごい勉強になった。2人とも説明がとてもわかりやすく素晴らしかった。残念ながらどちらのセッションも理解不足のところがあるので要復習。
ワークショップはどこかに参加はせず、プラプラと。ワークショップも好評だったらしく、開催中みんな楽しそうだった。個人的にメイド服と川口さんの娘さんが折り紙おってたのが印象的です。実は、折り紙ワークショップの内容がすごい気になってたりするんだけどどこかに資料あがったりするのだろうか。
懇親会では、吉岡さんと初めてお会いしたのだけれど、あの質問力はすごいなと思った。見習いたい。
最後に。今回東京Ruby会議03にスタッフとして参加できて本当に良かったです。本当にありがとうございました。
- Comments: 1
- Trackbacks: 0
ClojureでFizzBuzz
- 2010-02-17 (水)
- article
新しい言語学ぶ時はとりあえずFizzBuzzを書く。Clojureのcondは括弧が少なくて個人的に好きです。
- Comments: 0
- Trackbacks: 0
PHPについて適当に
- 2010-02-17 (水)
- article
デザイナの@red_hippyさんがPHPを勉強しているとのことなので適当に。ちなみに僕はあまりPHPを書けないのでバリバリPHPを書いてる人からみたらおかしいところがあるかもしれないけど、なるべくそういうのないよう頑張ります。
そもそもオブジェクト指向でやる必要はあるのか
これは個人的な意見だけど、本職のプログラマでもない限り無理にオブジェクト指向でやる必要はないと思ってる。特に学びはじめのデザイナさんならそこまで複雑なものを作らないだろうし。@red_hippyさんがどの程度のものを作ってるかわからないから一概には言えないけど、掲示板やお問い合わせフォームレベルのものだったらオブジェクト指向である必要はない。
プログラマの人が「PHP5ならオブジェクト指向っすよ!」とか言っても信じちゃいけません! 本当にオブジェクト指向が必要だと思って言ってるのか少し疑問。初心者の人妻にHaskellやらSICPやらすすめる人もいるし、困ったもんだ。
とりあえず、最初は愚直に処理の順番通りに書いていって、「なんかこのコード何回も書いてるなー」ってのが出てきたらそこを関数にするとかで十分。
とは言うものの、@red_hippyさん自身が楽しんでればそれでいいと思うし、Twitterを見る限り楽しんでそうなのでオブジェクト指向の話もちゃんとします。
追記:
これを書いてる途中に@red_hippyさんから、「プログラマさんが勉強するようなことをちゃんとやりたい。」と言われたので上の話はなかったことに。
オブジェクトってなんぞ
では、オブジェクトって何でしょう。
データとそのデータを操作する手続きをまとめたものを「オブジェクト」と呼び、オブジェクトの定義(雛形)を「クラス」と呼びます。PHPでは、オブジェクトは変数(データ)と関数(手続き)をまとめたものです。
@red_hippyさんのブログでも書かれてるけれど、説明的にはこれでOK。これだけでわかる人もそういないと思うけど。 この説明だけだとわかりづらいので「ブログの記事」を例に説明してみる。
まず、「ブログの記事」が持つデータについて考えてみよう。とりあえず思いつくのを適当にあげると「タイトル」「本文」「投稿日」「投稿者」などが考えられる。そしてそのデータを操作する手続きについてはそのデータの保存と取得が考えられる。いわゆるsetter/getter。アクセサとも言う。これを実際のコードに置き換えてみよう。
データがprivateな変数としてあって、それの操作としてsetTitleやgetTitleがあるのがわかる。簡単な例ではあるけど、オブジェクトがデータとそれの手続きをまとめたものというのはこういうこと。ちなみにこの変数のことをメンバ変数の他にインスタンス変数、フィールドとか言ったりする。これは言語によって違うかも。Rubyだと大抵インスタンス変数と言う。
ちなみにマジックメソッドを使ってもいいと思うけど、これはprivateな変数に対してアクセサを作ってしまうので注意が必要。下手すると隠蔽の意味がなくなる。個人的には必要なものだけをアクセスできるようにしたいので、マジックメソッドは使わない。
getter/setterの意味
で、なぜ一々getter/setterを作るのか。一言で言うと、直接データにアクセスされると困る場合が多いから。
まず、困る例を。以下のコードはSquare(正方形)というクラスにもかかわらず、直接データをいじれてしまう為、縦と横で一致しないデータを入れることが出来てしまう。
これを防ぐにはsetterでうまく処理をする必要がある。
heightもしくはwidthに値を保存したら、もう片方にも値をいれることで同じ値になるようにした。メンバ変数をprivateにすることで、この関数を通してでしか値を保存することが出来ない為、縦と横でデータが一致しないということはなくなる。しかし、これはこれで縦を指定しているにもかかわらず、横もかわってるという気持ち悪さが残る。これをもう少し改良して、値の保存はgetLengthという名前にする。これなら関数の名前から縦・横が変わっていても違和感ないだろう。
これと似たような話で、例えばあるデータには数値だけ、文字列だけ入れたいというチェックもsetterでやることができる。
基本的にクラスの中の変数や関数は本当に必要なもの以外privateでいい。別に1つのメンバ変数に対して必ずsetter/getterがいるというわけじゃない。むしろそういうのはよろしくないので、いくつかのメンバ変数をまとめて処理して1つの関数で出力するというのも全然あり。
例えば、prefecture(都道府県)、city(市区町村)、street(通り)というメンバ変数があったら、それぞれpublicにするより、getAddressという関数を作ってその中でそれらを連結して返すという方がいい場合もある。この方が例えば仕様変更でcityがなくなった時に修正する部分が少なくて済むという利点もある。このあたりは抽象化とかデータ構造の分離とかそういう話になるんだけど、ちょっと難しくなりそうなのでこの辺でやめとく。
ちなみにPHPでsetter/getterをちゃんとやってるコードをあまりみない(全部public)なのは、元々オブジェクト指向の言語ではなかったし、そこらへんあまり考えない・知らない人が多いからだと思う。
MVCについて
MVCについてだけど、個人的にはとりあえずフレームワークを使ってしまった方がイメージがつくので理解しやすくなるかと。最初のうちはフレームワーク使わない方がいいって人もいるけど、個人的にはフレームワークを使って疑問に思ったところ、気になったところを調べる方が理解が早い気と思う。
どのフレームワークがオススメとかは正直わからないんだけれど、日本語のドキュメントが多くて有名なのを使っておくのが無難かと。
まとめ
オブジェクト指向は難しいと思います。未だに僕も勉強中だし、ちゃんと理解してないプログラマも多いし。 多分、理解するには人のコードを読んで、自分でコードを書いて、それを誰かにレビューしてもらうというのが早いと思うんだけど、とりあえず1つ1つ理解していくしかないと思うのでじっくり頑張ってください。
- Comments: 0
- Trackbacks: 2
clojure+vimclojureのインストール
- 2010-02-17 (水)
- article
結構時間かかった。今日(正確には昨日)の夕方からずっといじってた。まとめるとそんな時間かかるようなものでもないんだけどね。clojureよりvimclojureで色々手間取った。ちなみにプログラミング Clojureのサンプルを動かすだけなら、サンプルコードの中にClojureの実行環境(REPL)が含まれてるので以下の設定をやる必要はなし。
clojureのインストール
ソースはgithubから落としてくる。masterでもいいんだけど、clojure-contribの方がmasterだとうまくbuildできなかったので1.1.0を使うことにした。
$ git clone git://github.com/richhickey/clojure.git $ cd clojure $ git co -b 1.1.0 1.1.0 $ ant
clojure-contribのインストール
プログラミング Clojureではcontribのライブラリを結構使うみたいなのでこちらもインストール。
$ git clone git://github.com/rechhickey/clojure-contrib.git $ cd clojure-contrib $ git co -b 1.1.0 1.1.0 $ ant -Dclojure.jar=/github/clojure/clojure.jar
REPLの起動
$ java -cp /github/clojure/clojure.jar:/github/clojure/clojure-contrib.jar clojure.main
これで無事REPLが起動すればOK。contribが使えるか気になる人は試しにuseなどしてみるといい。エラーがでずにnilが返ってくればOK。
user=> (use 'clojure.contrib.str-utils) nil
起動コマンド
いつもjava -cpとかやるのは面倒なので起動コマンドを使う。
$ mkdir ~/.clojure $ ln -s /github/clojure/clojure.jar ~/.clojure $ ln -s /github/clojure-contrib/clojure-contrib.jar ~/.clojure $ export CLOJURE_EXT=~/.clojure $ alias clj=/github/clojure-contrib/launchers/bash/clj-env-dir
clojure-contribに起動用のスクリプトがあるのでそれを使う。CLOJURE_EXTにjarのあるディレクトリを指定する必要があるため、適当なディレクトリを作り、そこにjarを入れておく。あとは適当にaliasはるか、実行パスのあるところにファイルを置けばよい。
vimclojureのインストール
vimclojureもリポジトリから落としてくる。tip(masterとかtrunkと同義)だとBuildツールがantじゃなくてgradleになってるけど、うまくbuild出来なかったので2.1.2を使う。
$ hg clone http://bitbucket.org/kotarak/vimclojure/ $ cd vimclojure $ hg co -r v2.1.2
/path/to/vimclojureにlocal.propertiesというファイルを作る。
clojure.jar = /home/user/.clojure/clojure.jar clojure-contrib = /home/user/.clojure/clojure-contrib.jar nailgun-client = ng vimdir = /home/user/.vim
そしてbuild。
$ cd /path/to/vimclojure $ ant $ ant install
antでbuild、ant installでvimdirにpluginとかがインストールされる。vimrcを設定すれば、この時点でsyntax-highlightとかOmni補完とかは使えるようになっているはず。
VimでREPL
vimでREPLなどの機能を使うためにはng-serverを立ち上げる必要がある。CLASSPATHにjarが設定されていないといけないみたいなので設定する。
$ export CLASSPATH=$CLOJURE_EXT/clojure.jar:$CLOJURE_EXT/clojure-contrib.jar:/path/to/vimclojure.jar $ sh bin/ng-server NGServer started on 127.0.0.1, port 2113.
そして、vimrcの修正。syntax highlightの設定なども含む。
" vimclojure let clj_highlight_builtins = 1 let clj_highlight_contrib = 1 let clj_paren_rainbow = 1 let clj_want_gorilla = 1 let vimclojure#NailgunClient = "/path/to/vimclojure/ng"
適当なclojureのファイルを開く。使い方は:help clojure.vimを見ればよい。とりあえず、REPLの起動は<LocalLeader>sr。

これで一通り設定完了。結構時間がかかったけど、大体詰まるところはCLASSPATHまわりだったのでもしうまく動かなかったらまずそこを確認した方がいいかも。
良いclojure + vimライフを。
参考:
Kotka : Projects : Clojure : VimClojure
Clojure Programming/Getting Started – Wikibooks, collection of open-content textbooks
- Comments: 1
- Trackbacks: 1
Gentoo+Passenger+rvm
- 2010-02-09 (火)
- article
rvmのインストール
rvmのインストールはgithubからやった。(rvm: Ruby Version Manager – Ways to install rvm.)
使うバージョンは、1.8.7。
rvm install 1.8.7
rvm 1.8.7 --default
Passengerのインストール
Gentooだと、Passengerはmaskされてるっぽいので/etc/portage/package.keywordsにwww-apache/passenger追加して、emerge passengerする。
Apacheの設定
/etc/conf.d/apacheに”-D PASSENGER”追加。
/etc/apache/vhosts.d/にvirtualhost追加。
<VirtualHost *:80>
ServerName hoge.example.jp
DocumentRoot /path/rails/public
RailsBaseURI /
<Directory /path/rails/public>
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
/etc/apache2/modules.d/30_mod_passenger.confを修正。
PassengerRuby /home/ukstudio/.rvm/bin/ruby-1.8.7-p249
PassengerRoot /home/ukstudio/.rvm/gems/ruby-1.8.7-p249/gems/passenger-2.2.9/
あとはapacheを再起動すればOK。
なんか、rvmに–passengerオプションがあるのでそれを使うよう設定すれば、気軽にPassengerで使うrubyを返られる気がしなくもない。そこらへんはそのうちやる。
- Comments: 0
- Trackbacks: 0
- Feeds
- Meta
- Others
