タグ

ブックマーク / techblog.karupas.org (14)

  • gitで新しくブランチを切るベストプラクティス - 時計を壊せ

    普段から普通にやっている方法です。 git fetch git checkout -b $BRANCH_NAME origin/master git push -u origin $BRANCH_NAMEgit fetchでoriginを最新にして、origin/masterからブランチを切ります。 これで、プロジェクトの最新の状態からbranchを切る事が出来ます。 現在どのbranchに居るかを気にせずとも、branchを切る元を間違える事がないので安心です。 (例えばうっかり関係ないtopic branchから切ってしまう。といったことを気にしなくて良くなります。) また、git push -u origin $BRANCH_NAMEすることにより、 リモートブランチがupstreamとして紐付く為、いちいちgit pull origin $BRANCH_NAMEとかしなくて良くなり

    gitで新しくブランチを切るベストプラクティス - 時計を壊せ
  • Amon2で非同期レスポンスを使う方法と、非同期WebAppのハマりどころ - 時計を壊せ

    この記事はPerl Advent Calendar 2013の15日目の記事です。 Amon2とは @tokuhirom さんが開発しているPerl製のWAF*1です。 Plackを軽くwrapしたような軽量でシンプルなWAFです。 現在、Version 6.00がリリースされていますが、Version 3.50からwebsocketのサポートが入り、 その関係でPSGIの遅延レスポンス/ストリーミングレスポンスのインターフェースに対応しています。 Amon2で非同期レスポンスを使う Amon2::Plugin::Web::Streamingを使う事により非同期でレスポンスを返す事が出来ます。 例えば、index.txを5秒後にrenderして返す場合は以下のようになります。 use strict; use warnings; use utf8; use Amon2::Lite; use

    Amon2で非同期レスポンスを使う方法と、非同期WebAppのハマりどころ - 時計を壊せ
  • state変数は初期化のタイミングで例外が発生しても二度と初期化が行われる事は無い - 時計を壊せ

    タイトルの通り。 まあ、初期化は1度しか行われないので、あたりまえといえばあたりまえですがハマったのでメモ。 以下検証コード。undef,2,2となるかと思いきや初期化は1度しか行われないのでundef,undef,undefとなる。 static variable be undef if throw when initialize ...

    state変数は初期化のタイミングで例外が発生しても二度と初期化が行われる事は無い - 時計を壊せ
  • #chibapm いってきたたたたた - 時計を壊せ

    #1も#2も行ったけど#1のレポ牡蠣忘れてたのでついでにかく。 #1 内容は他の方々が既にしっかりまとめてくださってるのでそれに頼らせていただくとして、 Perl初心者な人とある程度がっつり使ってる人の両方がいて、 Perl初心者な人はこういうのやりたい!もっとうまいやりかた教えて!みたいなかんじで、 懇親会でも他の言語と比べてみてどうだとか、突き詰めれば手続き型でちゃんとロジック分割して疎結合に書けなければ他のパラダイムでも酷いコード書きがちだよねとか、 そんな感じの事をゆるふわに語ってた記憶があります。たのしかったー Chiba.pm#1でLTしました。 - arveltの技術メモ Chiba.pm#1に行ってきた。 - ほっけの足あと Chiba.pm #1 に行ってきた ( #chibapm ) - WebService::Blog->new( user => ’hide_o_55

    #chibapm いってきたたたたた - 時計を壊せ
  • #isucon2 で惨敗してきました - 時計を壊せ

    潔く。 思った事 ソースを見て DB重そう 参照系クエリでJOINしまくってるなー recunt_soldとか 更新系重そうだなー IS NULL ORDER BY RAND appがstatic file返してるの無駄だなー front endがapacheなのはやめたほうがよさそう 最終的にはmemcachedにレスポンス突っ込んでnginxのmemcachedモジュールで返せればいいなー recunt_soldは別パスにしてSSIで分離出来るとキャッシュの寿命分けられていいなー 負荷を見て やっぱりDB重いなー これいっそRedisとかで書き換える方がいいのでは でもRedis普段使ってないし怖いなー ベンチ直後のappが重い? いろいろ疑ってみたが原因わからず DBIをdisconnectしてみたが、遅くなった いつの間にか解消されててなぞ rev負荷あんま無いなー appたててし

    #isucon2 で惨敗してきました - 時計を壊せ
  • .gitconfigにinclude書くと捗る - 時計を壊せ

    2012-08-20一部訂正 githubにdotfile上げてる人は結構多いですが、 github.tokenなど、一部の設定は公開されると困りますね。 そんなときはincludeディレクティブを使うとローカル用の設定を別ファイルに出来るので捗ります。 [include] path = .gitconfig.local [core] editor = emacs pager = lv whitespace=fix,-indent-with-non-tab,trailing-space,cr-at-eol excludesfile = .gitignore こんな感じでやると.gitconfig.localを読み込んでくれるので、 github.tokenなどは.gitconfig.localに書いておくといい感じになって捗ります。 参考: http://stackoverflow.com

    .gitconfigにinclude書くと捗る - 時計を壊せ
  • Data::Validator::Managerなるものを書いてみた。 - 時計を壊せ

    メソッドや関数の引数をバリデーションするときにData::Validatorを使わせて貰っているのですが、 低レベルAPIと高レベルAPIで同じバリデーションルールを適用したい事があって、 そういうときに複数箇所にコピペして使ったりしていると、 低レベルAPIのインターフェースを変えたくなったときにそれに依存している高レベルAPIのバリデーションルールも変える必要があってだるかったり、 そもそもクローンとも言えるオブジェクトが複数ヶ所で静的変数に保持されているのは無駄なのではないか。 あと、そもそも5.10未満では静的変数は使えないので5.8しか使えない環境とかで使いたくなったとき困るのではないか*1とか、そんな事を思ったので、 そんな問題を解消するモジュールを書いてみました。 PrePAN: http://prepan.org/module/429En4oFcf Github: http

    Data::Validator::Managerなるものを書いてみた。 - 時計を壊せ
    hisaichi5518
    hisaichi5518 2012/07/01
    こういうの!ほしいと!おもってた!
  • Mouse::Util::TypeConstraints等を使って新しい型を定義するときのベストプラクティス - 時計を壊せ

    更に追記 MouseX::Typesですが、その後検証してみたかんじ、 要素を「=>」で繋げてしまうと左辺が文字列として認識されてしまうようなので、 要素を「,」で繋げなければいけないようです。 等価だと思っていましたが微妙に違うんですね。 package HogeProject::MouseType; use strict; use warnings; use utf8; use MouseX::Types -declare => [qw/UInt/]; use MouseX::Types::Mouse qw/Int/; subtype UInt, as Int, where { $_ >= 0 }; 1; 追記 id:gfxさんによるとMo[ou]seX::Typesがまさにそんな機能を持っているとの事。知らなかった! http://search.cpan.org/~gfuji/Mou

    Mouse::Util::TypeConstraints等を使って新しい型を定義するときのベストプラクティス - 時計を壊せ
  • blessed (?:array|hash|scalar)refに関して某IRCにて - 時計を壊せ

    blessed arrayrefは色々と悪いのでblessed hashrefか、カプセル化したいならblessed scalarref使いましょうというお話。 12:11:00 tkhrm> あとあれ 12:11:05 tkhrm> ArrayRef を object にすると 12:11:15 tkhrm> 気軽に拡張できなくなる 12:11:27 tkhrm> あとから「やっぱこのアトリビュートいらないや!」ってなったときとか 12:11:29 tkhrm> しぬ 12:11:51 gfx> まあね。 12:12:03 tkhrm> からつかうなって damian っておじさんがいってた 12:12:07 tkhrm> ような気がする 12:12:09 gfx> ぼくもなんだかんだといろいろ試した挙句HashRefでいいや、ということになりました。 12:12:14 karupane

    blessed (?:array|hash|scalar)refに関して某IRCにて - 時計を壊せ
  • 間接オブジェクト記法の怪 - 時計を壊せ

    怖い話 友人がこんなコードがうまく動かなくてハマっていました。 擬似コード use strict; use warnings; # ... sub hogemethod { # ... try { A; } catch { die $_; #(comment out) # ... }; # ... } # ... 1; このコードはtryの中で死ぬかもしれない処理Aをして、catchでエラーを受け取ってそのままdieする処理に見えます。 しかし、実際はtryを実行し終わったあと、catchも実行されてしまいます。 tryの中の処理が成功した場合はcatchは実行されない筈ですよね? なぜ実行されてしまうのでしょうか。 答えは、Try::Tinyをuseしてなかったからです。 「じゃあ当たり前じゃん」と思った人はそのままブラウザバックするか、こんな時間にこんな記事読んでないで寝ると良いでしょ

    間接オブジェクト記法の怪 - 時計を壊せ
  • 初YAPCで初LTしてきました - 時計を壊せ

    YAPC::Asiaってなに_ 今日はYAPC::Asiaでした。 YAPC::Asiaは技術的なトークを中心としたカンファレンスです。 Rubyで言うRuby会議みたいなものでしょうか。(行ったこと無いですが) YAPC自体は世界中で行われていて、今回はそのアジア版という位置づけみたいです。 海外からのゲストスピーカーの方も多数いらっしゃいました。 YAPC::Asia今日もやるので興味のある方はぜひ! 感想 見ていたトークの感想はだいたいTwitteにつぶやいていたので幾つか抜粋してまとめてみました。 今後のPerl: 互換性をあまり意識せずに最新の機能を使ってプログラミング出来るようになる。凄い。 Carton: 開発しているタイミングで依存しているモジュールとそのバージョンをコアモジュールかどうかを開発者が意識する事なく管理出来る。凄い。 はてな: JavaScriptフリーで

    初YAPCで初LTしてきました - 時計を壊せ
  • ApacheBenchを使いたいけどApacheを入れるのがだるかったのでベンチマークツール書いた - 時計を壊せ

    なんでこんな事をしたんですか?*1 昨日、コンソール開いたんです。コンソール。 そしたらなんかabコマンド打ってもApacheBench使えないんです。 で、よく見たらなんかApacheが入ってなくて、"command not found: ab"とか書いてあるんです。 もうね、アホかと。馬鹿かと。 お前らな、ApacheBench如きで普段使ってないApache入れるかよ、ボケが。 Apacheだよ、Apache。 なんか沢山モジュールとかも付いてるし。1台何役だよ。おめでてーな。 よーしついでだからこれもこれも使うといいぞー、とか言って色々いれてくるの。もう見てらんない。 お前な、ApacheBenchだけよこしてさっさと消えろと。 サーバーってのはな、もっと殺伐としてるべきなんだよ。 ネットワーク越しのイカれた奴といつ喧嘩が始まってもおかしくない、 落ちるか落ちないか、そんな雰囲気が

    ApacheBenchを使いたいけどApacheを入れるのがだるかったのでベンチマークツール書いた - 時計を壊せ
  • 社会人になりました - 時計を壊せ

    新卒準備カレンダー2011春 04/03分エントリです。 割とゆるく書いてみます。ゆるくないかも。 で、お前誰だよ? かるぱねるらと申します。略して「かるぱ」とか「かるぱす」とか呼んでください。 4/1付けで某モバイルWEB系ベンチャー企業に入社しました。 新卒準備カレンダーで数少ない新卒です。現在20歳。 学生時代は趣味MySQLのO/R Mapper*1書いてみたり、UNIXシステムコールのsocketまわりのWrapper*2書いてみたり、PICマイコンのIOとタイマのWrapper*3書いてみたり、WindowsのSpeech APIのWrapper*4書いたりしてました。(思えばWrapper書いてばっかですね!) なんでIT系に行ったの? 一言で言ってしまえば「面白そうだったから」です。 特にWebは次々と新しいサービスが生み出されていました。 小学生の頃はWorldWide

    社会人になりました - 時計を壊せ
  • Memoize::Class::Constructor作った - 時計を壊せ

    GitHubに上げました。 名前のとおりクラスのコンストラクタをメモ化するモジュールです。 前回の反省*1を踏まえてもうちょっとIFやらなんやら煮詰めてみようって言う目論見です。 How to use こんな感じで使います。 use HeavyClass; use Memoize::Class::Constructor qw(HeavyClass); もちろん複数指定することも出来ます。 use HeavyClass; use FatClass; use Memoize::Class::Constructor qw(HeavyClass FatClass); 他にもコンストラクタを明示的に指定したり、 use HeavyClass; use FatClass; use RikishiClass; use Memoize::Class::Constructor ( 'HeavyClass',

    Memoize::Class::Constructor作った - 時計を壊せ
  • 1