読者です 読者をやめる 読者になる 読者になる

曲線のある文字の練習

できているようなできていないような。

Qが書けた

ごいすーだ。

ベジェ曲線、初日

Illustrator CCを1ヶ月分購入した ベジェ曲線の本を買ってきた ppworksさんの紹介してたやつ ペンツールの使い方を勉強中 アンカーポイントで次に行くまでの方向線を出し始める、やめる場合にはアンカーポイントを一回クリックした上で次のアンカーポイント…

凍結!

WordPressのメンテとか、多機能さが面倒くさくなったのでこちらは更新を停止する。 ドメインもaerial.stからarchive.aerial.stに移して、記事個別のURLに関してはリダイレクトもかけたので大きな問題はないはず。 05年から7年以上使ってきたWordPressともさ…

二代目MacBook Airの11.6インチを購入

初代を買ってからもうすぐで2年が経とうとしてる今日この頃、SSDの容量不足に加え動作が緩慢になってきたので買い換えることにした。 オプションは付けられるだけ付けて、 MacBook Air 11.6inch CPU 2.0GHz Core i7 8GB RAM 512GB SSD という感じ。 先日「2…

Qiita/Kobito.app便利ですよ

最近はすっかり更新しなくなってしまったこのブログだけど、技術的なメモに関してはQiitaに残すようにしている。 というのも、Markdownが使えるKobito.appがとても便利なので。 メモを取るのにいちいちファイルを作らなくていい Markdownが使える タグが付け…

ikm-opengraph.gemをリリースしてみた

リリースしてみた。初gem。forkだけど。 opengraphという、HTMLのヘッダに埋め込まれたOGPの情報を抜き出すgemがあるんだけど、内部で使用しているRESTClientがUTF-8固定で処理をするためにそれ以外のエンコーディングだと文字化けしてしまうという問題があ…

MySQL 5.5でのスローログ

Homebrewで入れたMySQL 5.5.10のスローログの設定。 $ sudo vim /etc/my.cnf [mysqld] (いろいろ) slow_query_log=1 long_query_time=0.02 slow_query_log_file=slow.log $ mysql.server restart $ tail -f /usr/local/var/mysql/slow.log

Rack::Profilerを使う

Rack::Profilerを使うのに少し躓いたのでメモ。 Gemfile: gem "ruby-prof" gem "rack-contrib", :require => "rack/contrib" app.rbのconfigureブロックあたり: require "rack/contrib/profiler" Rack::RubyProf = RubyProf use Rack::Profiler Rack::RubyPr…

Node.js(V8)は4バイトのUTF-8に未対応

現状、Node.js(V8)は4バイトのUTF-8に対応していない。 $ node > code = 0x1F614 128532 > char = String.fromCharCode(code) '' > char.charCodeAt(0).toString(16) 'f614' 先頭の1が削られてしまっている。 ちなみにV8コミッタの@koichikさんから直接リ…

RestClientの返り値はStringとちょっと違う

インターフェースが簡潔で使いやすいRestClientだけれども、各種HTTPメソッドの返り値をto_iするとステータスコードを返すみたいだ。 たとえば次のようなSinatraアプリが起動していたとする。 get '/' do "1" end このgetルーティングに対してRestClientでア…

LionでPostfix+Gmail

OSX LionにはPostfixがインストールされているんだけど、これを使ってgmail経由で送信する際に一筋縄では行かなかったのでメモ。 まず /etc/postfix/main.cf に以下を追記して、gmailの587番ポートに接続するよう設定する。 relayhost = [smtp.gmail.com]:58…

git reset直前のコミットはORIG_HEADに保存されてる

間違えてgit reset(--soft/--hard問わず)してしまった場合とか、取り消すのはいいんだけどコミットログは見たいとか思ったら、 git show ORIG_HEAD すれば良い。 ORIG_HEADはgit resetする直前のHEADの状態を指しているので、git diffで差分を見るといった…

ActiveRecord3.1/mysql2でTRUNCATE

DatabaseCleanerを使うと 複数データベース(各種RDBMSやMongoDB、CouchDBなどなど)に対応した方法でデータを削除できるんだけど、複数のDBにコネクションをはっている場合にはうまく動いてくれないことがあるらしい。 でも自分の場合、mysql2でうまく動い…

ActiveRecord3.1/MySQLでBIGINT UNSIGNEDなid

ActiveRecord 3.1でMySQL2アダプタを使っている場合に、idカラム(プライマリキーのカラム)にBIGINT UNSIGNEDを使う方法。 まずCREATE TABLE時のidカラムの型を変更するために、ActiveRecordが読み込まれた直後、rakeタスク等でテーブルの作成が行われる前…

Object#presenceが便利

ActiveSupport 2.3で導入されたObject#presenceが便利。 たとえば、 time = options[:timestamp].presence || Time.now で初期値の代入に使えるし、 time = options[:timestamp].presence && Time.at(options[:timestamp]) で値がある場合に限って加工に使え…

sinatraでbefore :onlyみたいなこと

SinatraのbeforeフィルタだとRailsみたいに:onlyや:exceptで適用するルーティングを指定できない。 ただそれだとbeforeフィルタのなかでガリガリとifで分岐する必要があるのでそれもちょっと微妙。 で、A Sinatra Before Only Filterにbefore :onlyについて…

Mongoid/MongoDBでauto increment

Auto Increment with MongoDBより、Mongoid/MongoDBでMySQLのauto incrementみたいなことをする方法。 連番を保持するためのCollectionを用意して、新しくDocumentを作る際にそれをfind_and_modifyで1増加させるという方法をとる。 find_and_modifyを使うの…

RSpec2で特定のテストを実行する

Relishより、次のようにすることで特定のdescribe/context/itのみを実行することができる。 spec_helper.rbのRSpec.configureにfilter_runの設定を追加: RSpec.configure do |c| c.filter_run :focus => true end テストしたいdescribe/context/itに:focus…

yard-sinatraでSinatraのドキュメントにYARDを使う

yardのプラグインであるyard-sinatraを使うとSinatraのアクションごとに記述されたyardocからHTMLドキュメントを生成できる。 インストールと設定 yard-sinatraをインストールすれば必要に応じてyardもインストールされる。 ただしyardはデフォルトではプラ…

display:boxとbox-ordinal-group

CSS3にはdisplay:boxとbox-ordinal-groupという便利な記法があって、マルチカラムレイアウトっぽいことが手軽にできる。詳しくはCSS3の数行で作る簡単な3カラムレイアウトを参照。 で、サンプルを書いてみた。 Google Chrome で表示すると次のようになる。 f…

µ-optparseを使って.rvmrcを生成

optparseのラッパーであるµ-optparseを使って.rvmrcを生成するスクリプトを書いてみた。 オプションは下記の通り。--helpでも見れるし、コードを読むだけでもわかりやすい。 -r, --ruby : Rubyのバージョン。デフォルトはこのスクリプトを実行しているRuby -…

git-svnでリモートのブランチを作成・コミット

git svn branch <BRANCH>で<BRANCH>というリモートブランチがbranches/<BRANCH>に作られる。 これはgit branch -rで確認できる。 $ git svn branch foo $ git branch -r git checkout <BRANCH1> remotes/<BRANCH2>でコミット先がbranches/<BRANCH2>を向いたローカルブランチ<BRANCH1>が作成される。 これはgit svn infoで</branch1></branch2></branch2></branch1></branch></branch></branch>…

リモートホストとの差分

リモートホストとの差分を見る場合、次のようにsshでcatした結果をdiffに流しこめば良い(元ネタ): $ ssh {remote_host} cat {remote_file} | diff {local_file} - リモートホストとローカルホストが同じ構成の場合(開発環境とステージング環境など)には…

Herokuの手始め

毎回Herokuを使ってみようと思うたびに手順を忘れるのでメモ。 アプリケーションの準備 hello_herokuというRailsアプリケーションを作ることにする。 Herokuの標準のDBがPostgreSQLなので今回もそれを指定する。 Test::UnitとPrototype.jsは要らないので-JT…

varnishはQUERY_STRINGも含めてキャッシュする

今動いているサービスが (INTERNET)-[varnish]-[Starman/Catalyst] というような構成でvarnishでCSSや画像なんかの静的ファイルをキャッシュしているんだけど、 現状デプロイしたけどキャッシュが更新されなくて見えてる画像が新しくなってないよって現象が…

Template::Toolkitでファイルのタイムスタンプを付加

Railsだとimage_tagを使えば画像ファイルの更新日時をくっつけて <img src="foo.jpg?1234567890" /> みたいにしてくれて、画像が更新されればブラウザは画像をキャッシュしていても新しくリクエストしてくれたりする。で、Catalyst/Template::Toolkitだとどうやるんだろう?ってことで書いて…

ActiveRecordとMongoidは共存できる

第5回 MongoDB.jp 勉強会 in Tokyoに行ってきた! メモとかはまたのちほどアップするとして(そういえばRubyKaigi最終日のメモもアップできていない)、@yuki24 さんの発表で「ActiveRecordとMongoidは共存」できるという話を聞いて、ちょっと試してみた。 …

RubyKaigi2011(二日目)に参加してきた

今日も午後から参加してきた。@a_matsudaさん、@yharaさんの話が聞けなくて、寝坊してしまったことを激しく後悔している。 5 years know-how of RSpec driven Rails app. development. / @moro 最近のrspecやfixture-replacementを使ったテストの書き方のノ…

RubyKaigi2011(初日)に参加してきた

午後から参加してきた。 とりあえず箇条書きのメモを載せておく。あとで感想を書こう。 Ruby を利用した大規模ウェブサービスの開発・運用 / @hotchpotch cookpadの中の話。extensionsがとても興味深かった。 この後のgithubとかもそうなんだけど、テスト=C…

scopeでtwitterっぽいルーティング

「Ruby on Rails 3 アプリケーションプログラミング」のルーティングの項をパラパラとめくっていたら、scopeを使ってtwitterっぽくトップレベル(?)にユーザ名を持ってくるようなルーティングができることを知ったのでメモ。 概要 例えばroutes.rbには次の…

perlのpackage越しのサブルーチン呼び出し時の引数

perlでpackage越しのサブルーチンを呼ぶ際に"::"と"->"だと引数が違う気がしていたけど、あまりよく考えていなかった。というわけでこんなスクリプトを書いた。 $ cat package_args.pl #!/usr/bin/env perl package Foo; use Data::Dumper; sub bar { print …

nginx + unicorn + Rails on Mac

とりあえず動かしてみたのでメモ。 unicornを動かす まずはgemをインストール。 $ gem install unicorn unicornの処理を設定する $ cd <RAILS_ROOT> $ vi config/unicorn.rb <RAILS_ROOT>/config/unicorn.rbはこんな感じ(nginx + unicorn を試してみたからほぼそのまま拝借): # ワ</rails_root></rails_root>…

Macでpkill

homebrewでproctoolsをインストールする。 $ brew install proctools

has_manyな関連先をまとめてINSERTする

fields_for、accepts_nested_attributes_forを使って、has_manyな関連先をまとめてINSERTする方法。ソースはgithubに上げておいた。ちなみにRails 3.0.8。 Post has_many Tags through Taggingsというモデルがあったとする。 とりあえずscaffoldはこんな感じ…

geminaboxでローカルにgemをホストする

geminaboxを使ってローカルにgemをホストしてみる。 (とりあえずでやってみただけなので、手順等にミスがあるかも) まずはサーバを立てる rvmとpowが入っている前提で。 ~/var/geminabox 以下を使うとする。 $ rvm use 1.8.7@geminabox --create $ gem ins…

LaunchAgentsで標準出力・エラー出力を設定する

LaunchAgentsで起動しているデーモン等で標準出力・エラー出力先を指定するには、StandardOutPathとStandardErrorPathを設定する。 例えばmemcachedでは次のようにする(ちなみにhomebrewでインストールした)。 vi ~/Library/LaunchAgents/com.danga.memcac…

Samba上でTortoiseSVNを扱うときの設定

メモ。 create mask = 664 # ファイル作成時のマスク directory mask = 664 # ディレクトリ作成時のマスク delete readonly = yes # readonlyなファイルを削除可能にする unixだとディレクトリに書き込み権限があればreadonlyなファイルも削除できるけど、wi…

rubygemsをバージョンを指定して更新

メモ。 gem install rubygems-update -v update_rubygems バージョンの一覧はrubygems.orgなどで確認するとよい。

Catalystで未定義アクションのテンプレートを描画

Railsだとコントローラにアクションが定義されていなくても、リクエストに応じたビューのテンプレートファイルが存在すればそれが描画される(ルーティングはされてる必要がある気がする)。 で、Catalystでもそうなってるのかと思ったけど、どうやらそうな…

Catalystでnamed_scope風実装

泣きながらPerl/Catalystを書いている今日この頃です。慣れない言語は辛い。 PerlのORマッパーであるDBIx::Classを使ってるんですが、とりあえずDBIx::Class beginnersを見ると、使い方の指針やFat Modelっぽい書き方が載っていて大変良いです。ActiveRecord…

git-svnを使う際に参考になるサイト

git-svnを使うことでsubversionのリポジトリをgitで操作できる。 チェックアウトしてからの作業の流れは次のような感じ。 svnリポジトリからgit-svnでチェックアウトしてきてgitのローカルリポジトリに変換 gitでローカルリポジトリに変更をコミット ローカ…

perlbrew+cpanmでperlの環境を作る

仕事でperlを触ることになったのでとりえずperlbrewとcpanmを入れてみた。 下準備 とりあえずホームディレクトリにbinを作ってパスに追加する。 $ mkdir -p ~/bin $ export PATH=$HOME/bin:$PATH # ~/.zshrc等にも追加 $ cd ~/bin perlbrewを入れる ホームデ…

4/20のTokyo Rubyist Meetupに行ってきた

4/20のTokyo Rubyist Meetup - After the Earthquakeに行ってきた。Twitterのハッシュタグは#trbmeetup (あとで書く)

これはやっておいて損はないよ

これは新卒準備カレンダー 2011春という企画に向けたエントリです。 このエントリでは「エンジニアをやるならこれはやっておいて損はないよ」ということを書いてみようと思います。 まだまだ社会人2年目のヒヨッ子なのでそれ以外にも大事なことはあるかと思…

Titanium MobileでTableViewのフィルタリング

Ti.UI.SearchBarを使うとTi.UI.TableViewの絞り込みがとても簡単に実現できる。 たとえばuserの一覧を表示しているTableViewを、user.nameの値で絞り込みができるようにするには、 // SearchBarを作る var searchBar = Ti.UI.createSearchBar({ showCancel: …

Titanium Mobileでローカルのjsonファイルを読み込む

ローカルのResources/users.jsonを読み込みたい場合、 // Ti.Filesystem.Fileを返す var file = Ti.Filesystem.getFile(Titanium.Filesystem.resourcesDirectory, 'users.json'); // Ti.Filesystem.File.read()はTi.Blobを返すのでtoString()して文字列に変…

Titanium Mobileでconsole.logを使う

Titanium Mobileにはconsole.logが無いらしい。ぐぐってみたらTi.API.info()を使えばいいみたい。 var console = { log: function(str) { return Ti.API.info(str); } }; Ti.API.info()を直で使うべきなのかもなぁ。

__FILE__と$0

FILE はそのコードが書かれているファイルを指し、$0は起動されたスクリプトを指す。 「FILE は実行中のプログラムのファイル名」が詳しい。 先程の記事に載せたgistではこれを利用してサンプルプログラムを末尾に記述している。

コマンドラインアプリ作成にちょっと便利なStringの拡張

githubをうろうろしていたら「なるほど」と思ったコードを見つけたのでメモっておく。 get-twitter-oauth-token / bin / get-twitter-oauth-token (gistじゃないので残念ながら埋め込むことができない。コピペするのも微妙なのでリンクだけ提示しておく) …