タグ

ブックマーク / koseki.hatenablog.com (16)

  • Git の仕組み (1) - こせきの技術日記

    目次 はじめに Git を使ったことがない方へ 生のデータが見たい方へ Git の全体像 .git の中身 Git オブジェクトデータベース 4種類のオブジェクト リファレンス リファレンスのリファレンス 大きなツリー Git オブジェクトの ID と 中身 ハッシュ関数 SHA1 の簡単な説明 tree と blob オブジェクト tree と blob の参照関係 ルートツリーの ID でツリー全体を識別する commit オブジェクト リファレンスとブランチランチランチ先頭を指すリファレンス HEAD リファレンス detached HEAD 2種類のタグ 一時待避 (stash) インデックス キャッシュとしての役割 マージ Fast-Forward マージ non Fast-Forward マージ rebase reset 2種類のブランチ 各リポジトリが自分のブランチ

    Git の仕組み (1) - こせきの技術日記
  • GitHub の公開鍵で暗号化する ghcrypt の処理内容 - こせきの技術日記

    GitHub のユーザ名を指定してファイルを暗号化するツール ghcrypt を作った - こせきの技術日記 の続き。甘い物のことは忘れて、もうちょっとちゃんと書きます。 いくつかバージョンアップを行いました。暗号化はAESで行い、AES のパスフレーズを公開鍵で暗号化するようにしました。現在のバージョンは 0.5 です。 https://github.com/koseki/ghcrypt ghcrypt ファイル名 githubユーザ名(受信者) ghcrypt ファイル名.enc.tar githubユーザ名(送信者)で、暗号化・復号化を行います。 動作環境 OpenSSH の 5.6 以降が必須です。OpenSSL は 0.9.8 あたりで動作確認をしてます。 OpenSSH 形式の公開鍵を OpenSSL で使える PKCS#8 にエクスポートするために、 OpenSSH 5.6

    GitHub の公開鍵で暗号化する ghcrypt の処理内容 - こせきの技術日記
  • GitHub のユーザ名を指定してファイルを暗号化するツール ghcrypt を作った - こせきの技術日記

    鳩舎さんで、GitHub の公開鍵を簡単に取得できるのを知りました。 Github があると VPS のセットアップが楽 - 鳩舎 で、ファイルにちょっとした暗号化をかけたいことありますよね。パスワード付き zip よりは、もうちょっとマシなのを使いたい。でも GPG はなんかむつかしいし(印象)、相手がインストールしてない気がする (自分もインストールしてない)。 というわけで。 GitHub の公開鍵を使って簡単にファイルを暗号化するスクリプトを書きました。 https://github.com/koseki/ghcrypt 暗号化したいファイル名と送りたい相手の GitHub ユーザ名を指定して、暗号化と署名を行います。 $ ghcrypt loveletter-to-koseki.txt koseki --2013-02-14 00:00:00-- https://github.c

    GitHub のユーザ名を指定してファイルを暗号化するツール ghcrypt を作った - こせきの技術日記
  • Sinatra でアプリケーションログをファイルに書く方法。 - こせきの技術日記

    Sinatra はじめて触ったんだけど、ログをファイルに書く方法がなかなかわからなかった。 ログを、ただファイルに書きたいのです。 結論 独自のミドルウェアで env['app.logger'] を設定し、アプリケーションのloggerメソッドをオーバーライドする。 参考 ruby - Use Rack::CommonLogger in Sinatra - Stack Overflow これに書いてある通りだった。面倒くさいー。 サンプル 以下でログがファイルに出力される。アクセスログとアプリケーションログを別のファイルに出力することもできる。 config.ru Loggerを作ってミドルウェアに渡す。 require 'logger' require 'sampleapp' require 'applog' logdir = File.dirname(__FILE__) + "/log

    Sinatra でアプリケーションログをファイルに書く方法。 - こせきの技術日記
  • はてなIDがクッキーで約50サイトに送られていた話 - こせきの技術日記

    (追記) 要点を整理をした記事を書きました。こっちのほうが、余計なこと書いてない分、わかりやすいかもしれません。 はてなブックマークに、マイホットエントリーという大変すばらしい機能があって、毎日見ている。 マイホットエントリー機能のご紹介 - はてなブックマーク開発ブログ 自分のマイホットエントリーのURLはこう。 http://b.hatena.ne.jp/koseki/ マイホットエントリーを見ていると、はてなID koseki を含むリファラが各サイトに送信される。 リファラは Google アナリティクスの __utmz に記録される。 Firefox には、全クッキーの値を横断検索する機能がある。 設定 > プライバシー > Cookieを個別に削除 > 検索 自分の環境では、およそ50個*1のクッキーに koseki という文字列が含まれていた。 あんなサイトやこんなサイトを、

    はてなIDがクッキーで約50サイトに送られていた話 - こせきの技術日記
  • 英語で 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みたいな感じ。以下のような出力が得られる。 : it "accepts a URL as the path" do it "accepts a block to change output" do it "accepts a block" do it "accepts a body" do it "accepts a class as argument with a task to invoke" do it "accept

    英語で RSpec を書くために例文一覧を出力する - こせきの技術日記
  • 地雷だらけのrsyncを理解する。 - こせきの技術日記

    rsync -avz --exclude-from=pattern-file --delete SRC/ DEST SRCの末尾に/をつける。たいてい必要。 SRCスラッシュの有無は、mv SRC DEST と mv SRC/* DEST の違いと一緒。スラッシュの後ろに*が省略されているものと考える。 DESTのスラッシュの有無は関係なし。 --dry-run(-n)をつけて試す。 SRC、DESTともローカルのディレクトリを指定して試す。 DESTはまず空ディレクトリで試す。DESTが同期済みだと何が更新されるのか正確にわからないので。 --list-onlyをつけてファイル一覧を得る。 DESTを省略してファイル一覧を得る。 --list-onlyと同じ? --deleteはDESTのファイルを根こそぎ削除する可能性がある。注意。 --delete-excludedは使わない。--d

    地雷だらけのrsyncを理解する。 - こせきの技術日記
  • screenを使ってファイルを転送する。 - こせきの技術日記

    「いま、sshで見えてるこのファイルが手元にほしい」という時に、scpは手間がかかりすぎる。 接続するホスト = sshで接続しているこのホスト 欲しいファイル = いまlsで見えてるこのファイル なのに、なぜscpにコマンドラインオプションを渡さなければならないのか。そもそも踏み台サーバを経由している場合など、単純にscpできないこともある。 目の前のssh接続を利用して、ファイルを手軽に転送したい。できることならリモートのコマンドラインで $ get file.tar.gz $ put file.tar.gz としたい。が、実現する方法が思いつかないので、screenを使う方法を考えた。 以下、Ctrl-Aはscreenの設定にあわせて読みかえてください。 Screen User's Manual GNU 404 - エラー: 404 JM 原始的な方法。 uuencodeされたファイ

    screenを使ってファイルを転送する。 - こせきの技術日記
  • 地獄のようによくわかるSQLテーブル結合 - こせきの技術日記

    テーブルのJOINが苦手でしたが、この例を思いついてからは、すっきりくっきり理解できるようになりました。むしろ頭から離れません……。 ※ INNER、OUTERは飾り。省略できる。 INNER JOINJOIN LEFT OUTER JOIN → LEFT JOIN RIGHT OUTER JOIN → RIGHT JOIN ※ ON ...=... をまとめて USING(属性) と書ける。 ※ 何で結合するか言うまでもない時は、NATURALを指定すると勝手にJOINしてくれる。NATURALにJOINして……。 ※ WHEREは結合した結果に作用する。 ※ 現実には上図のように1対1で結合しません。 ※ おまけ。CROSS JOIN。 こんなの使いません。 ブクマ用画像。

    地獄のようによくわかるSQLテーブル結合 - こせきの技術日記
  • Apacheのアクセス制御をちゃんと理解する。 - こせきの技術日記

    Apacheの設定で Order deny,allowとか Satisfy anyとか、なんだか意味わからん人のために。僕はずっとわかってなかった。 基 Apacheのアクセス制御には、 ホストによる制御 (Order,Allow,Deny) ユーザ認証による制御 (Auth*, Require) の2通りがある。 Satisfyは、2通りあるアクセス制御の両方を満たす必要があるかどうかを決定する。デフォルトはSatisfy all。Satisfy anyなら、どちらか片方満たせばよい。 Order http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#order Order deny,allowは、全てのホストからのアクセスを許可する。 Order allow,denyは、全てのホストからのアクセスを拒否する。 Order d

    Apacheのアクセス制御をちゃんと理解する。 - こせきの技術日記
  • Twitterのエスケープ処理について。 - こせきの技術日記

    入力 http://twitter.com/koseki/status/12141558975 <"&hearts;&&hearts;"> 表示 <"♥&♥"> HTML &lt;"&hearts;&&hearts;"&gt;&"はエスケープされない!APIが返すテキストも同様。<>だけエスケープされる。 Twitterを信じて、与えられたテキストをそのままHTMLで出力していいものか。 一方、URLとか@、#なんかをリンクにする処理はAPIユーザが自前でやらなければならない。不安。 HTMLが壊れる例 http://twitter.com/koseki/status/12141510877 上と別の話。以下の入力は、 http://www.example.com/(@koseki)以下のように表示される。 koseki)" class="tweet-url web" rel="nofol

    Twitterのエスケープ処理について。 - こせきの技術日記
  • GPLメモ - こせきの技術日記

    配布とソースコード GPLの派生物を渡した相手が希望するなら、ソースコードを渡さなければならない。 不特定多数にソースを公開する義務はない。 AさんがBさんにGPLのソースから作ったバイナリを渡すとき、Bさんに要求されたらソースも渡さなければならない。 BさんがAさんから受け取ったバイナリを100人に売ったとき、その100人に要求されたらソースも渡さなければならない。 顧客の100人がバイナリを購入せず、BさんやAさんにソースを要求しても渡す必要はない。 オープンソースで行こう!: 第2回 オープンソースライセンス事情を俯瞰する 「特にGPLのソフトウェアをビジネス用途などで第三者に販売・提供する場合、その第三者からソースコードの開示要求があればそれに応じなければなりません」 ソースを渡した相手に、再配布を許可しなければならない。 渡された相手が「再配布しなければならない」わけではない。

    GPLメモ - こせきの技術日記
  • gitのユーザ名やメールアドレスをコミット後に書き換える。 - こせきの技術日記

    gitのユーザ名は、 git config --global user.name koseki git config --global user.email koseki@example.comのように設定しますが、設定を忘れてコミットしてしまった場合。さっきデフォルトの漢字のフルネームでコミットしてしまい、しかもgithubに出してから気づきました。ちょっと恥ずかしい。 どうせ始めたばっかりだったのでリポジトリを作り直してもよかったんですが、調べたらgit filter-branchで過去を書き換えることができました。 404 Not Found git filter-branch -f --env-filter 'export GIT_AUTHOR_NAME="koseki"' git filter-branch -f --env-filter 'export GIT_AUTHOR_E

    gitのユーザ名やメールアドレスをコミット後に書き換える。 - こせきの技術日記
  • 実行中のアプリケーションを外から観察するコマンド。 - こせきの技術日記

    strace システムコールをトレース。カーネルと何を話しているか。 strace -p PID でプロセスにアタッチ。実行中のプロセスをトレース。 straceを使ったデバッグ - SourceForge.JP Magazine : オープンソースの話題満載 Linuxカーネルの作り出す世界 − @IT自分戦略研究所 - ふつうのLinuxプログラミング 青木峰郎 システムコールとライブラリ関数 − @IT自分戦略研究所 システムコール・ライブラリルーチン - UNIX の部屋 ltrace 共有ライブラリの呼び出しをトレース。*.soと何を話しているか。 ltrace -p PID でプロセスにアタッチ。実行中のプロセスをトレース。 ltrace で共有ライブラリの関数呼び出しをトレースする - bkブログ 404 - エラー: 404 - Linux JF ƒ‰ƒCƒuƒ‰ƒŠ‚ÌŠ

  • Github APIメモ - こせきの技術日記

    Github API (version 2)のメモ。主に情報取得系のAPIについて。 概要 ドキュメント http://develop.github.com/ フォーマットにxml,yaml,jsonを指定できる。以下ではXMLを指定する。ブラウザで見やすいので。 http://github.com/api/v2/:format (URLのベース) 取得系のURLパターン。 ID不要 repos/search/キーワード …… リポジトリ検索 repos/show/ユーザ …… ユーザのリポジトリ一覧 repos/show/ユーザ/リポジトリ …… リポジトリ情報 commits/list/ユーザ/リポジトリ/ブランチ …… 最近のコミット(コミットID、ルートツリーIDが得られる) commits/list/ユーザ/リポジトリ/ブランチ/パス …… 最近のコミット (コミットID、ルート

    Github APIメモ - こせきの技術日記
  • TimeとDateTimeと2038年問題 - こせきの技術日記

    現在の Unix システムでの最大時刻は、協定世界時の2038年1月19日午前3時14分7秒です。 http://www.ruby-lang.org/ja/man/?cmd=view;name=Time Timeは2038/1/19以降がエラーになる。 >> Time.gm(2038,1,19).strftime("%Y-%m-%d %a") => "2038-01-19 Tue" >> Time.gm(2038,1,20).strftime("%Y-%m-%d %a") ArgumentError: time out of range from (irb):7:in `gm' from (irb):7 from :0DateTimeはもっとずっと先まで大丈夫。 >> require 'date' => true >> DateTime.civil(2038,1,19).strftime(

    TimeとDateTimeと2038年問題 - こせきの技術日記
    Naruhodius
    Naruhodius 2009/07/22
    ∑(。・д・。)b ナルホディウス!
  • 1