タグ

ブックマーク / blog.64p.org (37)

  • なぜ Teng は良いものなのか - tokuhirom's blog

    なぜ Teng は良いものなのか、を YAPC で再考させられたのでここにメモしておく。 Teng は自社開発のウェブアプリケーションを作ってる人たちが作っていて、それがうちのニーズにあってるのでいいっていう話であって、どこでもすごい最高!! と主張したいわけではないです。まあ、個人の感想ですね。 ソースが読みやすい ソースがよくモジュール化されていて、読みやすい。自身で書いている部分が多いという贔屓目を抜きにしても読みやすいんじゃないかなーと。 僕らのような自社開発のウェブ屋では、なにか無茶な要望を受けた時にささっと対応するということが求められるシーンが多いので、ソースの読みやすさというのはかなり重要なファクターとなっています。 複雑な SQL を発行できないように機能が制限されている SQL ビルダーを使って JOIN やサブクエリを駆使したウェブアプリケーションを開発してしまうと、運

    aki77
    aki77 2014/09/02
  • Web Application の validation はどのレイヤーでかけるべきか - tokuhirom's blog

    数年前にも同じことかいた気がするけど、最近の状況にあわせてかいてみる。 途中で面倒になってきて説明が雑になっている点をご容赦ください。 言いたいことは「結局、昔はサーバサイドで懇切丁寧なエラーメッセージを出すためにModelではなくControllerでバリデーションに関する知識が必要だったけど 今はJavaScriptでやるから不要だよね111」ってことです。 この表題は、よく話題にあがるところなのだが、理想論としては Model, Controller, Client side のいずれにおいてもきっちりと validation を行うことがのぞましい。 しかし、実際にはなかなか面倒である。ということで、どこをはぶくかというと Controller における Validation であろう。 ユーザーに対する親切なメッセージは JS の側でだすのが理想的。model の validat

    aki77
    aki77 2013/11/26
  • Node.js で重い処理をしてしまったときにタイムアウトするの法 - tokuhirom's blog

    (この記事は Node.js アドベントカレンダー不参加記事です) チャットサーバー的な使い方とか意外とみんな興味なくて、普通のウェブアプリケーションなどをかく、という用途にちょっと node.js がつかえたらいいのにな、とおもっている人がおおいようにかんじています。Node.js が人気なのは、v8 をうまくパッケージングしているのが node.js ぐらいで、そして v8 をうまくパッケージングするのが結構めんどくさいから、というところが大きいのです。ぶっちゃけ node.js が〜 とさわいでる人のうち8割は I/O multiplexing だからとかそういう理由で支持しているわけではなかったりするのです(偏見)。 さて、普通の web application のようなものを書こうとしたときに Node.js って基シングルスレッドだし、なんかうっかり重い処理したときにどうした

  • サーバーのセットアップは perlbrew とかじゃなくてよくね? という時のライフハック - tokuhirom's blog

    https://metacpan.org/module/TOKUHIROM/Perl-Build-0.06/bin/perl-build perl-build というコマンドをつかうと便利。 perl-build 5.16.2 /opt/perl-5.16/ とかで管理するとよい。 perl-build 5.16.3 /opt/perl-5.16/でのアップグレードもうごいている様子。 おためしあれー。 FAQ./configure -d -Dprefix=$path でよくね?それでもいいのですが、PatchPerl によるパッチがあたるので、古いバージョンも確実にはいるのが嬉しいところです。 あと、tar ball のフェッチとかまで自動的にやってくれるのも便利。

    aki77
    aki77 2013/03/19
  • 安定的な Perl アプリケーション運用のための perlbrew 運用テクニック - tokuhirom's blog

    前提知識Perl5 は minor version 間ではバイナリ互換性が保証されているPerl5 の minor update では、bug fix しか基的に行われないPerl5 Porters の保守的さ度合いは信用できるperlbrew でセットアップするときに気をつけることインストール名をデフォルトの perl-5.16.3 などとせず、perl-5.16 と minor version を含めないようにする。 例: perlbrew install perl-5.16.2 --as perl-5.16セキュリティフィックスがでた場合の処理chromaticの記事で知ったのだが、perlbrew には upgrade-perl というコマンドがあり、最新のバージョン(マイナーアップデートのみ)にアップグレードすることが簡単にできる。 perlbrew upgrade-perl

    aki77
    aki77 2013/03/13
  • Google Chart で Imp と Click のグラフとかをうまいこと書く - tokuhirom's blog

    たとえば広告システムがあるとして、Impression 数と Click 数をそれぞれ数字としてもってたとして、普通に Google Chart でグラフを書くと以下のようになります。click 数が imp 数にくらべて非常にちいさいので、このグラフは役にたちません。 が、Google Chart では targetAxisIndex というのがあるので、これをもちいて以下のように指定すれば OK でした。 options = { series: { 1: {targetAxisIndex: 1} } }; あたらしいグラフは以下のようになります。2012-10-16 が Imp のわりにすげー click 数のびててなにこれ!! っていうのがわかります。 以上のグラフは以下のようなコードで描画することができます。 <html> <head> <script type="text/jav

  • 画像が img タグでよみこまれてるかどうかをなんとなく判定する - tokuhirom's blog

    Accept ヘッダをみるといい。 Accept: text/html,....みたいにブラウザで普通にひらくとでるけど、img タグでひらくと Accept: */*になるので、これをみていいかんじにするといい。 と、はせがわさんにきいた。 さっそく mdpad にとりこんだので <img src="./er-diagram.png">とか、mdpad でみれるようになった。

  • まともに node.js でつかえる ago.js - tokuhirom's blog

    なんか npm にアホみたいにたくさんあがっているが、just now の処理がおかしかったり、アホみたいに巨大だったり、まあそんなかんじなんで、ejresig の実装をもとにちょっと改変したやつをおいておきますね。 具体的には引数を Date にして、デフォルトの値を %Y-%m-%d にしてある。 /* * Based on: * JavaScript Pretty Date * Copyright (c) 2011 John Resig (ejohn.org) * Licensed under the MIT and GPL licenses. * * And modified by tokuhirom, license is same as above. */ module.exports = function prettyDate(date){ var diff = (((new

  • shell script を書くときの tips 2つ(初心者向け) - tokuhirom's blog

    shell script は普段さけて通りたいと願ってやまないわけですが、たまには書かないといけないことがあるので、そういうときは覚えておくと便利な tips を2つ。 autodie っぽくするset -eとすると、コマンドの実行に失敗したときにそこで実行がとまるので便利。 #!/bin/sh set -e perl -e 'die' echo SHOULD NOT REACH HEREとすると % ./hoge.sh Died at -e line 1. % echo $? 255となって、最後までいかずに死にます。 複数のコマンドを順番に実行するときに便利。 なお、以下のような挙動をするんだそうです。 ただし失敗したコマンドが until または while ループの一部である、 if 文の一部である、 && または || リストの一部である、 コマンドの返り値が ! で反転されてい

  • micro-location.js がいかす - tokuhirom's blog

    https://github.com/cho45/micro-location.js URL のクエリをいいかんじに書きかえる処理を JS でするためにいいかんじのライブラリをさがしていたのだが、URI.js はなんか大仰なかんじなので micro-location.js をつかってみた。 jQuery#extend と組みあわせることで、目的の処理は達成された模様。 l = Location.parse("http://example.com/?foo=bar&baz=boz"); # → Location l = l.params($.extend(l.params(), {lat: 4, foo: "hoge"})) # → Location l.href # → "http://example.com/?foo=hoge&baz=boz&lat=4"

  • cron の実行ログをすてさせないライフハックできたよー - tokuhirom's blog

    昨今、cron のログにかんする話がちょいちょいありますが、問題点をまとめると stdout or stderr に1バイトでも書くとメールがとぶインタープリタのだす warnings や printf デバッグの名残りなどでもメールがいちいちとんでめんどくさいめんどくさいから出力を /dev/null にほうむりがちログを /dev/null にすてると運用にさしつかえるといったところかとおもいます。 これにたいする一般的なソリューションとして、かずほさんの cronlog というのがあって、これは exit status をみて stdout/stderr の出力を /dev/null または任意のファイルにおくってメールをとばさせないというソリューションです。 cronlog は便利なのだけど、毎行設定するのだるいという問題があるので、設定が簡単なように cron に以下のようなパッ

    aki77
    aki77 2012/06/16
  • 最速な JavaScript のリファレンスマニュアルサイトをつくった - tokuhirom's blog

    JavaScript のリファレンスマニュアルといえば MDN(Mozilla Developers Network) が有名ですが、MDN の資料は探索がめんどくさいし、表示が遅いということで使い勝手がわるいという問題がありました。 そこで、jQuery のリファレンスマニュアルサイトとして有名な jqapi.com とおなじよような使い勝手のサイトがあったらいいのになーとおもいました。 なので、つくりました。 サイト自体はすべて static なデータで構成されているので、github からデータを取得すれば、イントラや自分のマシン内で閲覧することも可能となっています。 なお IE での動作確認はしていないので、うまくうごかない場合は pull-req してください。

  • jsdom と libxmlext のベンチマークとったよ! - tokuhirom's blog

    node.js において jquery-ish な css selector をもちいた検索をしたい、という場合、jsdom がオススメされることがおおいのだが、jsdom は pure-js で実装されているせいか、あまり高速ではない。体感速度からして、あきらかにおそい。 どのぐらい遅いのかということを、libxmlext と jsdom のベンチマークをとることによりためしてみる。 jsdom x 6.43 ops/sec ±7.28% (17 runs sampled) libxmlext x 168 ops/sec ±2.93% (55 runs sampled) Fastest is libxmlextlibxmlext の方が 26倍はやいようだ。 利点と欠点の比較jsdom の利点は jquery っぽい操作ができるjquery 互換の css selector がつかえる人

  • 電子書籍における内外格差について - tokuhirom's blog

    最近は電子書籍について語る前に、とりあえず Kindle を買うべし(Fire 以外)ということを最近つよくおもう。 iPad や、その他のタブレットと Kindle ではだいぶえられる体験がちがう。 K3G 回線に対応してないとはいえ、家で wi-fi につなげば、かなり良好な体験がえられる。電子書籍amazon.com で購入したら、wi-fi 経由でダウンロードされて超便利である。 Kindle は e-ink なので電池の持ちもいいし、非常にかるいので、旅行にいく際などに「荷物にいれるかどうか」を悩む必要がそもそもない。僕は常時鞄に Kindle をいれている。ごくたまに充電すればいいので非常に便利である。 Kindle をつかってると PDF とか糞! ってなるという体験もえられる。書籍のサイズでつくられた PDF は、たいがい Kindle だとよみづらい。読者のデバイスの

    aki77
    aki77 2012/01/05
  • node.js で人気のあるライブラリ10選 - tokuhirom's blog

    node.js というか npm で依存されているライブラリの上位10個ぐらいがどういうものがはいっているのかをまとめます! 具体的には serach.npmjs.org の Most depends on にのっているリストに註釈をつけただけです! http://search.npmjs.org/ 1位 underscore.js 392個http://search.npmjs.org/#/underscore クライアントサイド JS で人気のたかいユーティリティーライブラリの underscore.js が堂々の第1位。 クライアントサイドでつかってるからそのままつかってる人が多いのかな、とおもっています。

  • web application 開発における git のブランチ運用ルール - tokuhirom's blog

    俺は普段こういう運用でやっているが、君はどうか。 社内の trac にドキュメントをかいたので、コピペしておく。git についてはカジュアルにつかってるだけなので、もっとこうしたほうがいいんじゃねえのというのがあればおしえてください。 ブランチ命名規則master 番の deploy 用。誰かに deploy されてこまるものはいれない。stg ステージングの deploy 用iss(\d+) チケット$1 用の topic branch。master から分岐させるその他、キャンペーン関係など、おいやすくしたい者は別途名前つけてもよし。 stg の運用基的に、開発はチケットにひもづく topic branch でおこなうので、以下のような作業フローとなる git co master git co -b issXXX # トピックブランチをきる ... # development gi

    aki77
    aki77 2010/12/15
  • PHP5 __destruct() and unserialize() function - TokuLog 改メ tokuhirom’s blog

    http://co3k.org/diary/12 このへんみておもったこと。 unserialize() 関数はオブジェクトの unserialize もできるのだが、5 以後では __destruct() が導入されているので、その unserialize したオブジェクトの __destruct() がよばれてしまう。この際に、たとえば cache の処理などで __destruct() でファイルにデータをかきこむ、などの処理をしていると、そのファイルが汚染されてしまったりするということがおきうる。 で、実際に cakephp ではそういう状況になって、任意のコードが実行可能になった、と。 まとめると 5 以後では unserialize() をユーザーからの入力にたいしてはかならず検証してからおこなうようにするべき。 っていうか、ユーザーの入力にたいしては unserialize(

  • Gearman の使いどころについて - tokuhirom's blog

    「Gearman って gearmand がおちたら、キューにはいってるジョブがふっとんじゃうんでしょ?」とか「ワーカーがしんだらジョブきえちゃうんでしょ?」とかいう話があるわけですが、そもそもそういう風にきえてこまる用途につかうものじゃないのかな、とおもってます。 gearman はそもそもが、distributed remote function call server なので、ジョブキュー的なつかいかたは、「たまたまできる」程度にとらえるのが妥当ではないかとおもいます。 remote function call が主用途だから、基的にはリアルタイムに処理して、caller は処理がおわるのを待つのが基です。だから、処理が失敗したら、caller 側でエラー処理をすればいいという設計思想なのかなーとおもってる。 もともと gearmand って「gearmand - Gearman

  • mac ports やめました! ー homebrew で快適 OSX 生活! - tokuhirom's blog

    http://mxcl.github.com/homebrew/ 昨日 mac mini を購入しまして、「さて、mac ports いれなきゃなあ。でも mac ports での環境構築って時間かかるし、CPU パワーもくうし、電気代かかるしエコじゃないし」とかおもっていたところ、そういえば hsbt さんが homebrew ってのをオススメしてたなーとおもって、いれてみたところ、非常に快適。 mac ports は、システムにもともとはいっている perl とか ruby とかもいちいちコンパイルするので、序盤の環境構築が非常に時間がかかるのが難点です。 しかし homebrew は、system にもともとはいっているものはそのままつかうので、初動がはやい。自分の場合、macbook の調子がわるくって、mac mini にかいかえたので、すぐにでもつかいはじめたかったので、非常に

  • リアルタイムWebのためのPubSubHubbub の Subscriber を構築する方法 - tokuhirom's blog

    PubSubHubbub(以下PuSH)は、フィードの更新をリアルタイムに通知するためのプロトコルである。 ウェブ上にころがっている"PuSH"の情報は、"Pub" の部分を実装する方法か、「PubSubHubbub の家GAE実装を手元でうごかしてみたよ」という記事しかなくて、"Sub"を実装する方法について解説しているブログなどはみあたらなかったので、ここに記す(英語だといくつかあった)。 基的に、ほとんどの人が興味あるのは "Pub" の部分である。自分のブログの更新情報等をリアルタイムにおくりつけたいと考えるからである。実際、ほとんどのブログソフトウェアではすでに PuSH 対応がすんでいる。see MT-PuSH, etc. しかし、私は今まさに Subscriber をつくりたいとおもったのである。なぜならば、"friendfeed.com/cpan" の更新情報を PuS