タグ

ブックマーク / kazuhooku.hatenadiary.org (18)

  • OSSの開発モデルを、そのまま社内に持ち込むのは止めたほうがいい(もしくはコードレビューの話) - kazuhoのメモ置き場

    以前以下のようにツイートした話だけど、OSSの開発モデルを社内開発にそのまま持ち込むのは危険。 チーム開発の場合、簡単にコメント返せないようなPR送られた時点で負けだと思ってる。無駄なコードが生産されないよう事前に設計を詰める作業をすべき / “雑なレビュー - ✘╹◡╹✘” http://htn.to/by5or1 https://twitter.com/kazuho/status/431602421068877824 今日一般的に想定される「OSSの開発モデル」はEric S. Raymondの有名なエッセーである「伽藍とバザール」によって解説されたところの「バザール」である。 「バザール」モデルにおいては、多くの改善提案の中から最善と考えられる実装が取り入れられ、コミュニティで共有されるようになる。同エッセーから引用するなら、 ふりかえってみると、Linux の手法や成功の前例は G

    OSSの開発モデルを、そのまま社内に持ち込むのは止めたほうがいい(もしくはコードレビューの話) - kazuhoのメモ置き場
    tinsep19
    tinsep19 2014/03/13
    OSSでは数多あるブランチやpull-requestの中から最良のものが選択される。社内開発においては、限られたエンジニアリングリソースをできるだけ効率よく活用することが求められバザールモデルとは相反する
  • テストファーストなGitワークフローについて - kazuhoのメモ置き場

    Gitのワークフローに関する話題が、また盛り上がっているようなので、僕が好んで使っているワークフローについて書きます。 対象としているソフトウェアは、GitHubGitHub Enterprise等を使って開発されている、リリースブランチを切らずにmasterにリリースタグを打っていくだけで十分な程度の、ウェブサービス(の部品)やオープンソースプロジェクトです。 まず、以下の2点を原則として考えています。 origin masterを壊さない origin masterの(1st parentをたどるツリー)にテストを通らないcommitを入れないよう努めます 変更の主題を常に明確にする 前者の理由は、masterをいつでもリリース可能な品質に保つためと(←12:44追記)git bisectするときに困らないようにするため。そして、これらの原則から、以下のようなワークフローで作業するこ

    テストファーストなGitワークフローについて - kazuhoのメモ置き場
    tinsep19
    tinsep19 2014/02/04
  • WebSocket(RFC 6455)上で使用するプロトコル設計についての備忘録 - kazuhoのメモ置き場

    一般論として、全二重の通信プロトコルを実装するにあたっては、いくつか注意すべき点があって、具体的には、到達確認と切断シーケンスについて定めておかないと、送達されたはずのメッセージがロストしていたり、切断タイミングによってエラーが発生*1したりする。 具体例をあげると、たとえばTCP/IPにおいてshutdown(2)を用いずに、いきなりclose(2)を呼んでいると、read(2)やwrite(2)がエラー(ECONNRESET)を返す場合がある。 翻って、WebSocket (RFC6455)の場合はどうなってるか? だいたい以下のような感じっぽい。 ws.close()が呼び出されるとWebSocketをCLOSING状態に変更し、Closeフレームを送信する ws.onmessageはWebCosketがCLOSING状態にある間も呼ばれるかもしれない*2 相手からCloseフレーム

    WebSocket(RFC 6455)上で使用するプロトコル設計についての備忘録 - kazuhoのメモ置き場
    tinsep19
    tinsep19 2014/01/28
  • 自社サービスからエコシステムへ進化する話 (Re: UI変更批判バトルと複数のバージョンのウェブサービスを同時に配信することについて - hitode909の日記) - kazuhoのメモ置き場

    ウェブサービス,UI変えると,改悪とか,元に戻してとか,そういう意見が出る. サービス提供する側の立場では,新しいUIのほうが使いやすかったり,機能が増えたり,収益が増えたりするので,新しい方を多くの人に提供することに価値がある.使いやすいかとか,儲かるかとかは,リリースまでに調べておく必要があり,リリースの結果使いにくくなったり収益減ったりしたら,失敗ということになる. UI変更するたびに怒られるのは大きな問題で,ユーザーの心情を考えるみたいな気をつけてやるみたいなのじゃなくて,仕組みで解決しないといけない. (中略) APIとクライアントという形に完全に分離して,オープンソースにすればましになるかとか考えてたけど,いろいろある. なんかいいプランがあったら教えてください. UI変更批判バトルと複数のバージョンのウェブサービスを同時に配信することについて - hitode909の日記 お

    自社サービスからエコシステムへ進化する話 (Re: UI変更批判バトルと複数のバージョンのウェブサービスを同時に配信することについて - hitode909の日記) - kazuhoのメモ置き場
    tinsep19
    tinsep19 2013/12/24
    ウェブサービス,UI変えると,改悪とか,元に戻してとか,そういう意見が出る. サービス提供する側の立場では,新しいUIのほうが使いやすかったり,機能が増えたり,収益が増えたりするので,新しい方を多くの人に提
  • 「今日使われているプログラミング言語の多くは、なぜ1990年前後に誕生したものなのか」に関する一考察 - kazuhoのメモ置き場

    若い人たちは、「文字列型」があるプログラミング言語しか知らないかもしれない。だが、汎用的な文字列型が一般的になったのは、プログラミング言語の歴史の中でも比較的最近のことである。 たとえば、1972年に誕生したC言語には文字列型がない。1980年代に良く使われていたPascalの文字列型は最大255文字しか格納できなかった。 なぜか? それはメモリが貴重なリソースだったから。 1980年代のPCの搭載メモリは多くて数メガバイト。これに対し、長編小説の長さは1MB程度に達する*1。 当時、メモリはとても貴重な資源であり、テキストを処理するプログラムを開発するにあたっては、文字列をどのようにメモリ内に展開するかプログラマが細かくコーディングする必要があった。 だから、汎用的な「文字列型」というのは「夢」にすぎなかった。CあるいはPascalにおける文字列(CのASCIIZ文字列あるいはPasca

    「今日使われているプログラミング言語の多くは、なぜ1990年前後に誕生したものなのか」に関する一考察 - kazuhoのメモ置き場
    tinsep19
    tinsep19 2013/12/22
  • ソフトウェアのアップデートとウェブサービス運用における継続性リスクについて - kazuhoのメモ置き場

    Webサービスのようなプロダクトについての議論について教えて下さい - Kentaro Kuribayashi's blog で呼ばれたような気がしてたけど放置してた。でも今日、express という node.js 上で動作するメジャーなウェブアプリケーションフレームワークを作っているチームが、次世代の製品に取り組み始めたと聞いたので、メモを以下に貼ります。 ------------------------------ ✂ ------------------------------ ソフトウェア技術の配布手法のトレンドは以下のように推移してきた。 プロプライエタリ(仕様も実装もベンダー固有) オープンシステム(仕様は共通、実装はベンダー固有) オープンソース(実装を皆で共有) ハードウェアにしても、プロプライエタリから業界標準主導なアプローチにかわってきている。 つまり、時代とともに、

    ソフトウェアのアップデートとウェブサービス運用における継続性リスクについて - kazuhoのメモ置き場
    tinsep19
    tinsep19 2013/12/19
  • [JSX] JavaScriptバインディングの書き方 - kazuhoのメモ置き場

    ※この記事はJSX Advent Calendar 2013の一部です。 JSXでは、JavaScriptで定義されているオブジェクトをJSXのクラスとして簡単に取り込めるようになっています。やりかたは簡単。「native」属性を付与してクラス定義を書くだけです。たとえばJavaScriptの組み込みオブジェクトであるRegExpのバインディングは、以下のように定義されています。 native final class RegExp { function constructor(pattern :string, flags :string); function constructor(pattern :string); function constructor(pattern :RegExp); function exec(str :string) :string[]; function t

    [JSX] JavaScriptバインディングの書き方 - kazuhoのメモ置き場
    tinsep19
    tinsep19 2013/12/04
    ※この記事はJSX Advent Calendar 2013の一部です。 JSXでは、JavaScriptで定義されているオブジェクトをJSXのクラスとして簡単に取り込めるようになっています。やりかたは簡単。「native」属性を付与してクラス定義を書くだけです
  • オレオレ認証局の適切な運用とName Constraints - kazuhoのメモ置き場

    オレオレ認証局が忌避されるべきものとされてきた理由は、X.509 PKIが保証する安全性は、最も信頼性が低い認証局(trusted root)のそれに等しいからです。 しかし、X.509 v3以降ではName Constraintsが導入され、「特定のドメインに対してのみ証明書を発行可能な認証局」を定義できるようになっており、同constraintをcritical key usage extension*1として宣言したルート証明書を安全な経路で配布、インストールすることができれば、上記のようなX.509 PKIの系全体に対する影響は発生しないことになります*2。 ここで問題になるのは、どの程度のウェブブラウザがName Constraintsに対応しているのか、という点になりますがhttps://news.ycombinator.com/item?id=5194103によると、Chro

    オレオレ認証局の適切な運用とName Constraints - kazuhoのメモ置き場
    tinsep19
    tinsep19 2013/11/26
    オレオレ認証局が忌避されるべきものとされてきた理由は、X.509 PKIが保証する安全性は、最も信頼性が低い認証局(trusted root)のそれに等しいからです。 しかし、X.509 v3以降ではName Constraintsが導入され、「特定のドメイン
  • パスワードをソルトつきハッシュ化してDBに保存するのがベストプラクティス…とは限らないという話 - kazuhoのメモ置き場

    フレームワークの責務とセキュリティ - MugeSoの日記についての感想文です。 世の中にはたくさんの通信プロトコルが存在し、中には、特定の条件でパスワードを含む文字列をハッシュ化した値を検証しなければならないものも含まれています。 例えば、HTTP Digest認証の場合は、MD5("realm:user:password")を保存しておく必要がありますし、APOPの場合は生のパスワードを、CRAM-MD5の場合はMD5("password")を保存しておく必要があったはず。 で、こういった様々なプロトコルに対応可能な認証データベースを準備しようとすると、パスワードを復号可能な方式で保存しておく必要があります*1。 ただ、パスワードを復号可能な方式で保存するとか、開発者あるいは管理者としてやりたくないというのはもちろんそうなので。で、長期的には世の中どこへ向かってるかというと: 選択肢a

    パスワードをソルトつきハッシュ化してDBに保存するのがベストプラクティス…とは限らないという話 - kazuhoのメモ置き場
    tinsep19
    tinsep19 2013/11/19
  • サーバサイドからクライアントサイドのJavaScriptを呼び出す際のベストプラクティス - kazuhoのメモ置き場

    JavaScript文字列のエスケープ – yohgaki's blog に対して、 最近だと id="hoge" data-foo="<% bar %>" しておいて $("#hoge").data('foo') でとりだすのが主流かと思います。 はてなブックマーク - JavaScript文字列のエスケープ – yohgaki's blog のように、 そもそもJavaScriptコードを動的生成すべきでない JavaScriptコードに渡す変数はHTMLノードを経由すべきだ というような反論がついています。 が、はたしてそうでしょうか。 僕には、元の記事の手法も、HTMLノードを経由する手法もあまり好ましくない*1ように思えます。 そもそも、HTML生成時にXSS脆弱性が発生しがちなのは、 タグや静的な文字列と動的に生成される文字列が混在し 埋め込まれる多数の文字列を正しくエスケープ

    サーバサイドからクライアントサイドのJavaScriptを呼び出す際のベストプラクティス - kazuhoのメモ置き場
    tinsep19
    tinsep19 2013/11/07
    JavaScript文字列のエスケープ に対して、 最近だと id=”hoge” data-foo=”&lt;% bar %&gt;” しておいて $(”#hoge”).data(’foo’) でとりだすのが主流かと思います。 はてなブックマーク - JavaScript文字列のエスケープ のように、 そも
  • mmapのほうがreadより速いという迷信について - kazuhoのメモ置き場

    @ITに以下のような記事が出て、 今回からしばらくの間は、まったく逆の例、つまり使うとプログラムの処理性能が上がるというシステムコールを紹介していく。システムコールを呼ぶ回数は少ない方が処理性能は高くなるという原則は変わらないが、呼び出しておくと処理性能が向上するシステムコールというものが存在するのだ。こうしたシステムコールを使わないでいることは、とてももったいない。 今回紹介するシステムコールは「mmap(2)」だ。ここでは詳しく仕組みを解説しないが、mmap(2)は、プログラムの処理性能に必ず良い影響を与える。 やはりあった? 高速化に効くシステムコール (1/2):知ってトクするシステムコール(3) - @IT それを真に受けたのか、「Go言語でmmapシステムコールを使ったファイル読み込みの高速化検討とC言語のコンパイラの話 - ryochack.blog」のようなブログエントリも

    mmapのほうがreadより速いという迷信について - kazuhoのメモ置き場
    tinsep19
    tinsep19 2013/10/10
  • 30秒でわかるオープンソースライセンスまとめ - kazuhoのメモ置き場

    「よくわかるFOSSライセンスまとめなんてないよねー」と煽られたので3分で書く。 オープンソースライセンスは、以下の3種類に大別される。 代表的なライセンス 改変部分のソースコードの開示が必要 リンクして使う、他のソフトウェアのソースコード開示が必要 GPL (コピーレフト型) ○ ○ LGPL /MPL (準コピーレフト型) ○ × BSDL / MITL (非コピーレフト型) × × 自作のソフトウェアをオープンソースで公開する場合、 コピーレフト型にする場合は「GPLv2以上」 準コピーレフト型にする場合は「LGPL兼MPL」 とするのが無難。非コピーレフト型はMITLのほうがBSDLよりも明確だと言われることが多い(そしてどちらを選んでも問題ない)。 ※表の出典は OSS ライセンスの比較および利用動向ならびに係争に関する調査 より詳しく知りたい方へ: ライセンスの解釈については、

    30秒でわかるオープンソースライセンスまとめ - kazuhoのメモ置き場
    tinsep19
    tinsep19 2013/10/04
    「よくわかるFOSSライセンスまとめなんてないよねー」と煽られたので3分で書く。 オープンソースライセンスは、以下の3種類に大別される。 代表的なライセンス改変部分のソースコードの開示が必要リンクして使う、他
  • Monoceros雑感 - kazuhoのメモ置き場

    Monoceros は @kazeburo さんが開発してる Plack 用ウェブサーバ。prefork型だけど、待機中の接続をイベントドリブンのマネージャで管理することで、同時接続10,000とか行ける(ソケットの受け渡しは SCM_RIGHTS とか使う)。 で、雑感 大好き!!! Starletより遅い問題は、以下のようにすれば解決できると思う listen するソケットに TCP_DEFER_ACCEPT つけて、accept(2) は worker でのみ実行する worker は HTTP レスポンス送信後に read(2) してみて、後続のリクエストが来てない場合にのみ、マネージャプロセスにソケットを返還する (追記) 「返還」ではなく、マネージャプロセスが管理しているソケットのいずれかにデータがきている場合のみ、そのソケットとworkerのソケットを「交換」する、とすれば

    Monoceros雑感 - kazuhoのメモ置き場
    tinsep19
    tinsep19 2013/04/25
  • もふったーのコンシューマシークレット問題について、鍵はプログラム中に安全に埋め込めるはず。だが… - kazuhoのメモ置き場

    超軽量Twitterクライアント「もふったー」コンシューマシークレットキー難読化最後の挑戦 - GIGAZINE もふったーコンシューマシークレットキー難読化最後の挑戦 ・ω・ - Windows 2000 Blog あたりの話について。記憶に頼って書いてるので間違ってたらごめんなさい。 問:鍵を隠すことができるか 答:以下の理由から可能なはず。 HMACのキーは前置型でハッシュ関数のブロックサイズ SHA-1*1はMerkle-Damgaard法で構築される ブロックをまたぐ際のステート値はファイナライズ処理を除けば最終的なハッシュ値と同じ 以上より、鍵のハッシュを演算後の内部ステートをもつ、鍵ごとに特化したHMAC関数(正確に言うと、鍵ごとに特化したハッシュ値同様の安全性をもつ(つまり鍵を回復することのできないステート値)を生成し、鍵のかわりに、そのステート値を埋め込んだ専用HMAC

    もふったーのコンシューマシークレット問題について、鍵はプログラム中に安全に埋め込めるはず。だが… - kazuhoのメモ置き場
    tinsep19
    tinsep19 2013/03/29
    これはシークレットから署名関数がつくれるから鍵は削除していい?ってこと
  • TwitterやFacebookのURLには、なぜ#!が含まれるのか (SEOとAjaxのおいしい関係) - kazuhoのメモ置き場

    Ajaxを使うためにはページ内リンク (hash fragment=URLの#以降) を使うのが一般的*1 hash fragmentはサーバに送信されないから、JavaScript非対応のブラウザだと動作しない 特にサーチエンジンのクローラ等で問題になる*2 そこで Google は、#! が含まれる URL を hash を含まないものに読み替える仕組みを提唱している。例えば「www.example.com/ajax.html#!key=value」のサーチエンジン用URLは「www.example.com/ajax.html?_escaped_fragment_=key=value」になる。 TwitterやFacebookはこの仕様に従うことで、Ajax な UISEO を同時に実現している、というわけ。ということを調べたなう。 参照: Getting Started  | 

    TwitterやFacebookのURLには、なぜ#!が含まれるのか (SEOとAjaxのおいしい関係) - kazuhoのメモ置き場
    tinsep19
    tinsep19 2010/10/15
    そこで Google は、#! が含まれる URL を hash を含まないものに読み替える仕組みを提唱している。
  • FastCGI プロトコルってなんのためにあるのかわからない - kazuhoのメモ置き場

    どういう場合に便利なんだっけ。てか HTTP プロトコルでいいじゃんみたいな。 たとえば httpd とアプリケーションサーバを分割するような環境なら、apache + fastcgi external server みたいな構成よりも、apache (mod_proxy + mod_proxy_balancer) + apache (mod_perl) とかのほうが柔軟だし。 あるいは、apache + fastcgi external server みたいなのを組むよりも、apache (mod_proxy + mod_proxy_balancer) + HTTP::Server::Simple (Net::Server::Prefork) でいいんじゃないかみたいな。 unix socket を動的に作成して通信、みたいたことをする場合でも、独自プロトコルな必要ってないんじゃないのか

    FastCGI プロトコルってなんのためにあるのかわからない - kazuhoのメモ置き場
    tinsep19
    tinsep19 2010/05/04
    HTTPサーバーを書くのはメンドイけど、アプリケーション層をC/C++で書いちゃった人むけじゃないかな。Tokyo promnadeみたいな。あとは、いまは組み込みのHTTPサーバーのライブラリもあるけど昔はなかったからじゃないかな
  • ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない - kazuhoのメモ置き場

    タイトルは煽り入ってますが。 仮に動的ページを生成するのにかかる時間が1秒、そのうちデータベースやmemcached等リモートサーバへの問い合わせ時間を除くいたCPUの処理時間が0.1秒とする。また、ピークのリクエスト処理量は、平均の2倍とする。 そうすると、クアッドコアのアプリケーションサーバで処理できるリクエストは、 4 core * 10 reqs/sec * 86,400 sec/day * 30 day/mon / 2 = 51,840,000 reqs/mon と、約5,000万PV/月を1台で捌けることになる。 CPUが動いている時間は全処理時間の10倍と仮定したわけだから、アプリケーションサーバの最大同時接続数は 4 core * 10 = 40 程度あればいいことになる。実際には、安全係数を2倍かけて 80 とか。リクエストの処理に必要なメモリ量を 100MB とすると、

    ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない - kazuhoのメモ置き場
    tinsep19
    tinsep19 2009/12/28
    ピークと平均ロードの差が大きいサービスの場合はクラウドって言うかユーティリティコンピューティングを使うことでコストパフォーマンスが高められるよね、という話が現実的になってきているわけで
  • 海外のクラウド環境と国内のVPSを比較検討してみた - kazuhoのメモ置き場

    Amazon EC2 や Rackspace Cloud Servers を色々調べていて分かったこと。 国内の比較対象は、仕事や個人で使っている WebARENA SuitePRO と CPI VPS スケーラブルプラン。 まず、価格について。国内の VPS は、転送量に関わらず価格が一定なのに対して、EC2 や Cloud Servers は、サーバ代金の他に、従量制のネットワーク使用量がかかる。なので、運用するサービスによっては、海外勢の方が割高になる *1。一方、通信量が少ない場合は、割安。 では、海外のクラウド環境でしか得られないサービスとは何なのか。 L3 ロードバランシング サーバレンタルが月単位か1時間単位か*2 借りた仮想サーバ間の通信を前提としているか の3点っぽい。逆に言うと、これらの機能を必要としないなら、国内 VPS でいい。 3点目は、国内の VPS サービスで

    海外のクラウド環境と国内のVPSを比較検討してみた - kazuhoのメモ置き場
    tinsep19
    tinsep19 2009/08/05
    S3を使う場合、S3とEC2間のトラフィックがタダ>そうなんだ。
  • 1