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

マインクラフト内に記憶の宮殿を建てる

マインクラフトを使って、記憶の宮殿を作る試みを行っています。 いまは主に英単語を覚えようとしています。 動画 記憶の宮殿とは 記憶の宮殿は、非常に古くからある記憶術です。 2,500 年ほど前、古代ギリシャの詩人シモニデスが、記憶の宮殿を発明したと言…

Rails, Django, Laravel 開発サーバをダブルクリックで起動する vagrant-layout プラグインというのを作った

vagrant-layout というのを作りました。 koseki/vagrant-layout at plugin · GitHub この記事で書いていた環境を生成する Vagrant プラグイン&設定サンプル集です。 Vagrant を使って Mac からダブルクリックで操作できる仮想環境を作る - こせきの技術日記…

Git の仕組み (2) - コミット・ブランチ・タグ

Git の仕組みシリーズの2回目です。目次がここにあります。前回の記事では、Git オブジェクトとリファレンスが大きなツリー構造になっていることを説明しました。また、Git オブジェクトがどのように記録されているか、ファイルツリーの変更がルート tree オ…

GitHub for Mac と Git コマンドで .gitignore の挙動が異なる件について (聞いてみた)

Git は、1.8.4 から .gitignore に /**/ のようなパターンを書けるようになっています (正式にサポートされたようです)。 Uses of the platform fnmatch(3) function (many places in the code, matching pathspec, .gitignore and .gitattributes to name a…

Git の仕組み (1)

目次 はじめに Git を使ったことがない方へ 生のデータが見たい方へ Git の全体像 .git の中身 Git オブジェクトデータベース 4種類のオブジェクト リファレンス リファレンスのリファレンス 大きなツリー Git オブジェクトの ID と 中身 ハッシュ関数 SHA1 …

Vagrant を使って Mac からダブルクリックで操作できる仮想環境を作る

この記事を公開する直前に Vagrant Cloud がはてブに上がってるのを見て、今あわてて追記しています。すごい楽しいことになってますねー。 Vagrant Cloud Vagrant 1.5 and Vagrant Cloud - Vagrant ブログ記事をざっと読んだ感じだと、Vagrant 1.5 の新機能…

Skype の暗号化についてのメモ

SkypeのメッセージをMicrosoftが盗み見て検閲していることがほぼ確定 - GIGAZINE 機械的にHEADリクエストを送るのを検閲と言えるのかって気はするけど、どういう仕組みなのかは知りたい。Skype が宣伝してたイメージとちがう。一番マシな想像だと、チャット…

Google アナリティクスの利用規約と、クッキーとリファラの話の続き

はてなIDがクッキーで約50サイトに送られていた話 - こせきの技術日記 の続き。長い、意味がわからない、FUDだ、クッキー関係ない、といった批判を受けて、補足と整理をします。 Google アナリティクスの利用規約 Google アナリティクスについて、知らなかっ…

はてなIDがクッキーで約50サイトに送られていた話

(追記) 要点を整理をした記事を書きました。こっちのほうが、余計なこと書いてない分、わかりやすいかもしれません。はてなブックマークに、マイホットエントリーという大変すばらしい機能があって、毎日見ている。 マイホットエントリー機能のご紹介 - はて…

Google アナリティクスで使われるクッキーについて __utma / __utmb / __utmz

公式な仕様は無さそう。ソースを読むのは厳しい。整形しただけでは全然読めなかった。 クッキー 4種類 現行バージョンの ga.js が使用するクッキーは、主に4つ。 __utma ユーザを識別。2年有効。 __utmb 今回のセッションを識別。30分有効。 __utmz どこから…

GitHub の公開鍵で暗号化する ghcrypt の処理内容

GitHub のユーザ名を指定してファイルを暗号化するツール ghcrypt を作った - こせきの技術日記 の続き。甘い物のことは忘れて、もうちょっとちゃんと書きます。いくつかバージョンアップを行いました。暗号化はAESで行い、AES のパスフレーズを公開鍵で暗号…

GitHub のユーザ名を指定してファイルを暗号化するツール ghcrypt を作った

鳩舎さんで、GitHub の公開鍵を簡単に取得できるのを知りました。 Github があると VPS のセットアップが楽 - 鳩舎 で、ファイルにちょっとした暗号化をかけたいことありますよね。パスワード付き zip よりは、もうちょっとマシなのを使いたい。でも GPG は…

英語で RSpec を書くために例文一覧を出力する

gems ディレクトリの */spec/**/*_spec.rb ファイルに対して 'it .* do' を grep する。 cd ~/.rvm/gems/ruby-1.9.3-p327/gems find */spec -type f -name '*_spec.rb' | xargs grep -ho 'it .* do' | sort | uniq | lessみたいな感じ。以下のような出力が得…

Ruby の Array#index は、要素とブロックを渡すの、どっちが速いの?

Array#index を使って、配列に含まれる要素の位置を取得したい。配列の要素が配列やハッシュで、一意に識別可能なIDが含まれる場合、探し方は、要素を直接渡すのと(==で比較する)、ブロックを渡す方法がある。 # ハッシュをそのまま渡す。 array.index hash …

Rails でマイグレーションが失敗する恐怖から解放される感動的なすごい方法

開発中に rake db:migrate がエラーで中断しても、元に戻す方法がわからない。スキーマを書き換える SQL なんて覚えてない。失敗したのにスキーマのバージョンだけ上がったりする。こういった問題を解決する、感動的なすごい方法があるのでは、と思って調べ…

Wikipediaにテストダブルの項目を追加しました。

テストダブル - Wikipedia なんか変だったら直してください、、。 http://en.wikipedia.org/wiki/Test_Double http://xunitpatterns.com/Test%20Double.html を主に参考にしています。

Ruby の Dir.glob にブロックを渡すと、見つかった順に処理してくれる?

結論 Dir.globは見つけた順にブロックを評価するのかと思っていた。そんなことはなかった。 Dir.glob("**/*") {|file| ... } は、ブロックに最初の1ファイル目を渡す前に、全ファイルを探す。 確認 環境は Mac + Ruby 1.8.7, 1.9.3。確認に使ったスクリプト…

SourceTree の圧倒的な素晴らしさと致命的な欠点について。(修正済み)

(追記) 下記の問題点は、1.5で修正される予定とのことです。 (追追記) 濁点付きの検索はできないようですが、ログの問題は修正されていました。v1.5.3で確認。 SourceTree の UI は最高に素晴らしく、これまで見たどんなバージョン管理アプリケーションと比…

Sinatra でアプリケーションログをファイルに書く方法。

Sinatra はじめて触ったんだけど、ログをファイルに書く方法がなかなかわからなかった。ログを、ただファイルに書きたいのです。 結論 独自のミドルウェアで env['app.logger'] を設定し、アプリケーションのloggerメソッドをオーバーライドする。 参考 ruby…

PHP で h() を書くなら一緒に echo しよう。

名前が長い関数 htmlspecialchars() を h() と書けるようにすると便利、という話がある。 PHP: htmlspecialchars - Manual htmlspecialchars関数を簡単に扱えるようにする 第1回 CakePHPを使いたくなる5つの特徴:CakePHPで高速Webアプリ開発|gihyo.jp … 技…

RFC のテキストページや日本語訳から IETF の HTML ページを開くブックマークレット。

Hatena::Let なんて素敵なサービスがあるのを今まで知らなかった。ので使ってみました。 http://let.hatelabo.jp/koseki/let/gYC-ybCXlu-XXw URLのRFC番号っぽいのを探して IETF の HTML ページに移動します。例えば、 http://www.ietf.org/rfc/rfc2616.txt …

HTTPのクエリパラメータにコロン(:)を書くのは不正なのか。

PHP の $_SERVER['REQUEST_URI'] と parse_url() の予想外な動作について。 - こせきの技術日記 の続き。PHPのparse_url()は、 "/abc?a=x&time=09:00&x=y" はパースできるのに、 "/abc?a=x&time=09:00" だと失敗する。 相対URIで「動作しない」仕様だからら…

PHP の $_SERVER['REQUEST_URI'] と parse_url() の予想外な動作について。

REQUEST_URI と HTTP_HOST PHP のサーバ変数 $_SERVER['REQUEST_URI'] には、ふつうパスとクエリが設定される。 'REQUEST_URI' ページにアクセスするために指定された URI。例えば、 '/index.html' PHP: $_SERVER - Manual ただし、常にパスから始まると保証…

Perl 互換の正規表現で再帰的に grep して Emacs で開く。

リファクタリングのお共に。 コマンドで開く emacs $(grep -Prl '正規表現' * | grep -v '\.svn')Prlっていうのが覚えやすくてよい。ほんとは-Perlって書きたいけど無理だった。 -P Perl互換(PCRE) http://www.kt.rim.or.jp/~kbk/regex/regex.html#PCRE ()の…

TAILQ のソースを読んで C のポインタをマスターする。

正月は TAILQ のソースを読んでいた。普段 C を読み書きしないので、とても勉強になった。ポインタの使い方がわかった(ような気持ちになれた)。 TAILQって? TAILQ は C のマクロで書かれた双方向リンクリストの実装。 連結リスト - Wikipedia BSD、OSX や…

Varnish の設定ファイルを使って Basic 認証を実装する。

Varnish 本体に Basic 認証の機能はない。VCL を使って、Basic 認証を実装することならできる。 原始的な実装。 Authorizationヘッダが一致しなかったら401エラーを出す。 backend apache { .host = "127.0.0.1"; .port = "80"; } # vcl_recv は、クライアン…

Varnish の hit_for_pass ってなに?

結論 「キャッシュしない」ことをキャッシュするのが hit for pass キャッシュオブジェクト。同じ URL に、同時にアクセスされたとき、 キャッシュが見つからない場合 …… 先頭のリクエストだけをバックエンドに送り、残りはそのレスポンスを待つ。 hit for p…

右寄りのプログラマを粛正する。

まずこれを10回読もう。 うねりコード - 【アンチパターン】遠くから見ると、画面上でコードがうねっている。 コードが2段階以上右に寄ったら、右足はウンコ踏んでると思いましょう。無闇とエディタの横幅を広げるのも良くない。広いディスプレイは甘え。つ…

nohupコマンドの実行パターン。

実行に時間がかかるコマンドはnohupで実行する。 nohup ${時間がかかるコマンド} > /tmp/nohup-$(date +"%Y%m%d%H%M%S").out 2>&1 < /dev/null &標準出力がリダイレクトされていない場合は、./nohup.out か $HOME/nohup.out に出力される。 SSH接続時は標準…

最近変更されたファイルをtailで表示する。

ファイル名をワイルドカードで指定して、一番最近変更されたファイルをtailで表示する。 ls -t /path/to/prefix-*.log | head -1 | xargs tail -f ls -t /path/to/prefix-*.log | head -1 | xargs lessお好みで tail -f $(ls -t /path/to/prefix-*.log | hea…

2つの期間が重なり合うかどうかを判定する。

2つの期間 A〜B と X〜Y が重なっているかどうかを判定したい場合。のように4つのパターンがある。これを単純に、 A <= X && Y <= B || X <= A && Y <= B || A <= X && B <= Y || X <= A && B <= Yのように判定してはいけない。Xは青い線の上を、Yは赤い線の…

Mac の tmux でクリップボードを使う。

(2015-09-05 追記) この記事は古くなっています。他の記事を参照してください。reattach-to-user-namespace は Homebrew でインストールできます。 ChrisJohnsen/tmux-MacOSX-pasteboard · GitHub tmuxとMacのクリップボードを共有する(copy-mode, vim) - …

EBSのスナップショットを定期的に作成するスクリプト

参考にしたもの code.rock: Amazon EBSとRightAwsを使って自動バックアップ環境を構築する こちらのスクリプトに @gommmmmm さんが手を加えたのが元になっています。ありがとうございます。 失敗時にcronからメールを出すために、正常時に標準出力に何も出力…

Emacsの正規表現編集モード re-builder とややこしいバックスラッシュ問題について。

Emacsの re-builder を使うと、正規表現にマッチする部分をリアルタイムにカラー表示してくれる。 Emacs で正規表現を使うなら re-builder を使おう - Higepon’s blog - Mona OS and Mosh re-builder: the Interactive regexp builder | Mastering Emacs M-x…

Macのドックに時計を表示するDockClock3がいい感じ。

AppStoreで115円です。 http://itunes.apple.com/jp/app/dock-clock-3/id424227129 無理なくアナログ時計を表示しっぱなしにできます。 コマンド+タブにも表示される。230円でカレンダー付きのもあります。別に要らないので買ってないけど。 Dockに時計や日…

Capistrano で名前空間内に変数を設定する。

Capistrano の名前空間を使うと、同じ名前のタスクを複数定義できる。だが、setメソッドで設定する変数は、名前空間で装飾されない。setで設定された変数はCapfile内でグローバルになる。 namespace :aaa do set :path, "A" # 名前空間 aaa に入っている pat…

ブラウザのコピー機能を拡張する。

ブラウザで何も選択しない状態でコマンド+C押したらタイトルとURLをコピーしてほしい、、。2010-09-18 19:24:04 via HootSuite コマンド+Cなんて贅沢いわないから、キーボードでタイトルとURLコピーできるだけでいいんだけど……全然そういうアドオンがみつか…

screenを使ってファイルを転送する。

「いま、sshで見えてるこのファイルが手元にほしい」という時に、scpは手間がかかりすぎる。 接続するホスト = sshで接続しているこのホスト 欲しいファイル = いまlsで見えてるこのファイル なのに、なぜscpにコマンドラインオプションを渡さなければならな…

MySQLの4と5で、NOTの優先順位が違う。

久しぶりにMySQL4を使ってて冷や汗が出た。 MySQL :: MySQL 4.1 リファレンスマニュアル :: 6.3.1.3 論理演算子 MySQL :: MySQL 5.1 リファレンスマニュアル (オンラインヘルプ) :: 7.2.1 演算子の優先順位 MySQL5 mysql> select not 1 = 2; +-----------+ |…

地獄のようによくわかるSQLテーブル結合

テーブルのJOINが苦手でしたが、この例を思いついてからは、すっきりくっきり理解できるようになりました。むしろ頭から離れません……。 ※ INNER、OUTERは飾り。省略できる。 INNER JOIN → JOIN LEFT OUTER JOIN → LEFT JOIN RIGHT OUTER JOIN → RIGHT JOIN ※…

Apacheのアクセス制御をちゃんと理解する。

Apacheの設定で Order deny,allowとか Satisfy anyとか、なんだか意味わからん人のために。僕はずっとわかってなかった。 基本 Apacheのアクセス制御には、 ホストによる制御 (Order,Allow,Deny) ユーザ認証による制御 (Auth*, Require) の2通りがある。Sati…

テキストファイルでTracのwikiを更新する。

Tracのwikiで長いドキュメントを書いていて辛くなってきたので、テキストファイルで更新するためのRakefileを書いた。wikiのソースをリポジトリにコミットできてうれしい。コミットフックでwiki更新時にチケットを更新できてうれしい。 インストール * http:…

Atom文書の拡張のしかたについて。

Atomのスキーマを見ていて、Atomの拡張方法が厳密に決まっていることを知った。別の名前空間を指定すれば自由に拡張できるのかと思っていた。 RFC 4287 - The Atom Syndication Format http://atompub.org/2005/08/17/atom.rnc スキーマ。RFC4287のAppendix …

URIのスキーム一覧

tag URIをもっとあちこちで使いたい。例えばXML名前空間名には、httpよりもtagの方が適切に思える。しかし、RFCのステータスがINFORMATIONALなのが気になった。使う上でどのくらい問題なんだろう。とりあえず全スキームのRFCステータスを調べてみた。IANAの…

Cでrandom()の状態を保存する。initstate()とsetstate()の使い方。

例えばsrandom(1)で初期化した後、random()を100万回呼んだときの状態を保存したい。pythonだと簡単にできるのだけど、Cだと難しい。マニュアルにinitstate()とsetstate()という関数が載っているが、使い方がさっぱりわからなかった。検索すると「必要な回数…

永久に使える自分だけのURIを作る。

UUIDやTag URIスキームを使うと、永久不滅の自分専用URIを作れる。 urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6 tag:user@example.com,2010:foo/bar また、これらのURIをAtomで利用する方法について検討する。 <atom:link rel="tag:nobody@example.com,2010:myself" href="tag:nobody@example.com,2010:myself" /> 自己言及リンク UUID UUIDにはバリエーシ</atom:link>…

Capistrano を Rails 以外で使う設定。

Page not found · GitHub Pages Rails と関係ないプロジェクトで Capistrano を使うための設定を作成した。 最小限の設定 SSHでリモートを操作するための、単純な設定の例。ファイル名は Capfile 。 # sshユーザ名 set :user, "username" # サーバをroleでま…

Ruby で to_yaml するときは、改行コードを LF で統一する。

Ruby 付属の YAML モジュールは、下のような動作をする。文字列を直接 to_yaml した時だけでなく、配列やハッシュの値だった場合も同じ。 "\r"をto_yamlしてloadするとnilになる。 "010\r"をto_yamlしてloadすると8になる。 "010\n"をto_yamlしてloadすると"…

Twitterのエスケープ処理について。

入力 http://twitter.com/koseki/status/12141558975 <"&hearts;&&hearts;"> 表示 <"♥&♥"> HTML &lt;"&hearts;&&hearts;"&gt;&"はエスケープされない!APIが返すテキストも同様。<>だけエスケープされる。Twitterを信じて、与えられたテキストをそのままHTML…

SWFObjectを使ったFlashの貼り方。

documentation - swfobject - Embedding Adobe Flash Player content using SWFObject 2 - SWFObject is an easy-to-use and standards-friendly method to embed Flash content, which utilizes one small JavaScript file - Google Project Hosting SWFObj…