パスワード受け渡し用の Heroku アプリ、 Keydrop というのを作りました

Keydrop は、遠隔にいる方からパスワードを (比較的) 安全に受け取るための Heroku アプリケーションです。 https://github.com/koseki/keydrop 必要な時だけ起動して、使い終わったら消す、という使い方を想定しています。 Keydrop がやること Keydrop はパ…

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

マインクラフトを使って、記憶の宮殿を作る試みを行っています。 いまは主に英単語を覚えようとしています。 動画 記憶の宮殿とは 記憶の宮殿は、非常に古くからある記憶術です。 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接続時は標準…