タグ

ブックマーク / mixiengineer.hatenablog.com (32)

  • YAPC::Asia Tokyo 2012で発表してきました - mixi engineer blog

    こんにちは。今年新卒で入社した五嶋@たんぽぽグループです。 先日行われたYAPC::Asia Tokyo 2012で自作Perl処理系について発表してきましたので、参加経緯や発表内容、感想などについて書きたいと思います。 YAPC::Asiaに参加するのは、実は今回が初めてでした。 というのも、今までPerlを触ったことがあまりなく、興味もありませんでした。 弊社の内定を頂いてから、勉強のために書き始めたくらいです。 ですので初めに、そんな自分がYAPC::Asiaに参加するに至った経緯について簡単に触れようと思います。 ● 参加経緯 Perlは記述性に優れ、迅速な開発ができる一方、実行時の速度はそれほど速くありません。一般に、インタプリタで実行する多くのLL言語(Lightweight Language)には、JIT(Just in time)Compiler等で高速化した別実装が存在し

    YAPC::Asia Tokyo 2012で発表してきました - mixi engineer blog
  • Sinon.JS を使った JavaScript のテスト - mixi engineer blog

    初めましてこんにちは。ソーシャルクライアント開発の tanabe と申します。 今回は?Sinon.JS を使った JavaScript のテスト方法を紹介したいと思います。 Sinon.JS って何? Sinon.JS はノルウェーのエンジニア Christian Johansen さんが書かれた、JavaScript 用のライブラリです。スタブやモック、フェイクオブジェクトの提供に特化していて、QUnit などのテスト用のフレームワークや実行環境に依存しない所が特徴です。Christian Johansen さんは?Test-Driven JavaScript Development の著者でもあり、こちらは近々翻訳版 が登場するようです。 では早速、Sinon.JS を使ったテスト手法をご紹介していきたいと思います。稿ではテストフレームワークは QUnit を採用しています。 時間

    Sinon.JS を使った JavaScript のテスト - mixi engineer blog
  • キーボードとアジャイル開発 - mixi engineer blog

    やぁ、たんぽぽグループの森だよ。 先日の昼休みにnaohiro.ohgataから「キミのblogは文章が短すぎるんだよ。もっと読者を楽しませなきゃ」と言われたんだ。naohiro.ohgataは皆が一目置いているJavaScriptのスペシャリストで、僕も尊敬 している。だから今日は翻訳シリコンバレーっぽい口調で書いてみようと思う。 僕が初めてキーボードというモノを触ってから30年以上たっていると思う。その時はキーボードには何の興味も無くて、コンピュータに命令を伝えるためのただの付属品だった。もちろんタッチタイピングなんかできなくて、自己流でポチポチとキーボードを打ってたんだ。今思い返すと笑っちゃうんだけど自分ではそれなりに早いつもりでいまさらタッチタイピングを覚えるなんてバカらしいとか思ってた。実際まわりの人も似たようなポチポチタイピングで、その中では一番早くてちょっとしたもんだと勘違

    キーボードとアジャイル開発 - mixi engineer blog
  • mixi Engineers' Blog » スマートフォンブラウザのWebInspectorをリモートで実現するweinreが凄い

    こんにちは、寝過ごして長野まで行きそうになったソーシャルクライアント開発のtakimoこと瀧です。 先週弊社数名がアメリカで行われていたVelocity 2011 - O'Reilly Conferencesに参加しました。 そこではモバイル端末のテストやパフォーマンスについての講演やLTがあったようです。 自分もお土産話を色々聞きたいので詳しくは誰かが書いてくれるはず...です。 その中で気になったプロダクトがあったので紹介したいと思います。 weinre - Web Inspector Remote weinreはFirebug(Firefox)やWebKitのWebInspectorのようなデバッグ機能をリモートで提供してくれるプロダクトです。 iPhoneAndroid(2.1以上)には一応コンソール機能のようなものがありますが 基的には出力だけ ソフトキーボードでデバッグ用

    mixi Engineers' Blog » スマートフォンブラウザのWebInspectorをリモートで実現するweinreが凄い
  • 理想の開発環境 - mixi engineer blog

    たんぽぽグループの森です。 一日の半分近くを机に座ってすごすエンジニアにとって、快適な開発環境は切実な問題です。 外界からうけるストレスを極力排除し、効率よくフロー状態にはいることと、フロー状態を長く維持することはとても重要です。 お前は今までに購入したキーボードの数をおぼえているのか?と突っ込まれてもしかたが無いキーボード遍歴を重ねましたが、KINESISに出会い キーボードに関してはまぁまぁ満足することができました。 机・椅子・マウス・ディスプレイとまだまだ欲望は果てしないのですが、今回のミクシィ社の引越しに伴い、エンジニアの机と椅子にオカムラ社のクルーズ&アトラスが選定され、机と椅子に関してもかなりの満足度を得ることができたので自慢報告します。 クルーズ&アトラスの御紹介 クルーズ&アトラスはオカムラ社が販売している低座・後傾姿勢を特徴としたパーソナルワークステーションです。 2

    理想の開発環境 - mixi engineer blog
  • mixi Engineers' Seminar #1の報告 - mixi engineer blog

    Nitendo 3DSで遊ぶのは戦国無双クロニクル、PS3で遊ぶのは真・三国無双6と、なにかを断ち切るかのように敵を切りまくっているmilanoです。 お気に入りは甄姫です。 もうずいぶんと前のことな気がしてしまいますが、3/3の雛祭りの日に行われたmixi Engineers' Seminar #1にお越しいただきましたみなさま、どうもありがとうございました。 当日使われた資料と動画を公開します。 ちなみに、今回のテーマはスマートフォン周りのお話しあれこれでした。 Objective-C一巡り Objective-Cひとめぐり View more presentations from Kenji Kinukawa ミクシィの衣川憲治より、WebエンジニアがObjective-Cを学習するメリット、Objective-Cの特徴などについて話しました。 GREEHTML5とiOS+Andr

  • Flash?いいえ、HTML5です: ファイルのドラッグ&ドロップによるフォトアップロード機能について - mixi engineer blog

    はじめまして。コミュニケーションサービス開発部の澤と申します。コーヒーカレーをこよなく愛する新卒2年目の新米エンジニアで、弊社Webのフロントエンドを主に担当しています。最近はmixiスマートフォン版(mixi Touch)の開発にも精力的に取り組んでいます。 さて、日はPC版のmixiで1つの機能をリリースいたしました。ファイルをWebブラウザにドラッグ&ドロップするだけで写真をmixiフォトにアップロードできるもので、HTML5 File API※1を採用しています。記事ではこの機能について色々とお話をしたいと思います。 なにこれ? 以下では、ドラッグ&ドロップによるアップロード機能を「機能」と呼びます。 百聞は一見にしかずです。機能のプロモーションムービーがありますので、まずはこちらをご覧ください。 動画では下記を説明しています。 従来のアップロード方法からドラッグ&ドロッ

    Flash?いいえ、HTML5です: ファイルのドラッグ&ドロップによるフォトアップロード機能について - mixi engineer blog
  • Buildbot で継続的インテグレーション - mixi engineer blog

    こんにちは。パートナーサービス部の加藤和良です。 前回、mixi における開発者テスト について説明しました。だいぶ間があいてしまいましたが、今回は、そのテストを定期的に実行する 継続的インテグレーション の仕組みを紹介したいと思います。 テストが遅い 実は、mixi のテストは「遅い」という大きな問題を抱えています。 Micheal Feathers は『レガシーコード改善ガイド』のなかで、単体テストが高速に実行できることの重要性を解き「単体テスト」を厳しく定義します。 次に当てはまるものは単体テストではない。 データベースとやり取りする ネットワークを介した通信をする ファイルシステムにアクセスする 実行するために特別な環境設定を必要とする (環境設定ファイルの編集など) 上記に該当するテストが悪いというわけではない。多くの場合において、そのようなテストを書く価値はあり、しばしばテスト

    Buildbot で継続的インテグレーション - mixi engineer blog
  • 転置インデックスを実装しよう - mixi engineer blog

    相対性理論のボーカルが頭から離れないmikioです。熱いわっふるの声に応えて今回はTokyo Cabinetのテーブルデータベースにおける検索機能の実装について語ってみたいと思います。とても長いのですが、最後まで読んだあかつきには、自分でも全文検索エンジンを作れると思っていただければ嬉しいです。 デモ モチベーションをあげていただくために、100行のソースコードで検索UIのデモを作ってみました。Java 6の日語文書を対象としているので、「stringbuffer」とか「コンパイル」とか「倍精度浮動小数」とかそれっぽい用語で検索してみてください。 インデックスがちゃんとできていれば、たった100行で某検索エンジン風味の検索機能をあなたのデータを対象にして動かすことができます。ソースコードはこちら(テンプレートはこちら)です。 でも、今回はUIの話ではないのです。ものすごく地味に、全文検索

    転置インデックスを実装しよう - mixi engineer blog
  • 100行のCプログラムでWebチャットを実装する方法 - mixi engineer blog

    例の冷却ファンを修理してもらいに秋葉原に行ったのですが、最近の同人ゲームのクオリティはすごいなあと感心していたら、その二階はもっととんでもないことになってて、ひとつ大人になってしまったmikioです。今回は、Tokyo Cabinetのテンプレート直列化機能を駆使して、たった100行のCプログラムでWebチャットシステムを実装してみます。 古式ゆかしいWebチャットシステム 10年くらい前にCGIスクリプトでチャットシステムを作るのが流行していたのを覚えている方も多いと思います。チャットログは現在のようにデータベースサーバに転送して格納するのではなく、ローカルファイルシステム上のファイルにCSVやTSVなどのフォーマットで格納したり、同じくローカルのDBMファイルに格納するのが主流でした。2ちゃんねるの「datファイル」もそのようなデータファイルの一種と言えるでしょう。 その頃から、CGI

    100行のCプログラムでWebチャットを実装する方法 - mixi engineer blog
  • mixi Engineers’ Blog » Introducing the Drizzle Project

    ここしばらく、水面下でBrian Akerを代表とするMySQL/SUNのエンジニアたちや、業界のオープンソースハッカーたちとMySQLをスリムダウンさせたマイクロカーネルRDBMSを開発していたのですが、日アナウンスされたので、日語でご紹介させていただきたいと思います。 Drizzleとは? Drizzleとは必要のないものは一切存在しない、最低限でパフォーマンス重視な「MySQLよりシンプルで、軽く、安定して、高速な」 MySQLのforkです。マイクロカーネルアーキテクチャを採用したので、必要のないものは後付けできる構成です。こういった目標もあり、現在、Drizzleの開発チームはMySQLをドラスティックにリファクタリングしています。 コミュニティベースのプロジェクト Drizzleで大事な事は、Drizzleはコミュニティベースのプロジェクトであるという事です。Montyのブ

    mixi Engineers’ Blog » Introducing the Drizzle Project
  • PerlとRubyで省メモリなハッシュを使おう - mixi engineer blog

    サボっていた早朝ジョギング@駒沢公園を再開して2週間たち、やっと抜かれる数より抜く数の方が増えてきたmikioです。今回は、PerlRubyのハッシュの代用としてTokyo Cabinetを使うことでメモリ使用量を激減させられることを説明します。 抽象データベースAPI Tokyo Cabinetには抽象データベースという機構があり、先日、そのPerlRubyのバインディングをリリースしました。それを使うと、各種言語のハッシュとほぼ同じような共通したインターフェイスで、以下のデータ構造を利用することができます。 オンメモリハッシュ:各種言語に標準のハッシュと同じく、メモリ上でkey/valueの関係を表現する。 オンメモリツリー:メモリ上の二分探索木としてkey/valueの関係を表現する。 ファイルハッシュ:いわゆるDBMとして、ファイル上でkey/valueの関係を表現する。 ファ

    PerlとRubyで省メモリなハッシュを使おう - mixi engineer blog
  • TCのHaskellバインディングとODF繰り越し制度の紹介 - mixi engineer blog

    はじめまして。ミュージック開発チームのtomと申します。名前はtomですが純日人です。(名も"tom"でちゃんと漢字があります。) 今回は、"オンラインコーヒーメーカー萌香たん"を作ったりできることでおなじみのODFをちょっとお得に使うための、「ODF繰り越し制度」の紹介と、その制度を利用して私が作っているTokyo CabinetのHaskellバインディングを紹介させていただければと思います。 ODF繰り越し制度 弊社のエンジニアは、ODF(One Day Free)という制度を使って、毎週金曜日に自分が好きなことに取り組むことができます。このODF制度、四半期ごとに実施する or しないを申告するのですが、このときになんと「繰り越す」という選択肢が用意されているのです。 普通のODFでは、四半期(3ヶ月)の間、週1日を自由な時間として確保することができます。とは言っても忙しい時期

    TCのHaskellバインディングとODF繰り越し制度の紹介 - mixi engineer blog
  • Pure JavaScript Template Engine その弐 - mixi engineer blog

    どうも、こんにちは。hirokiです。前回は、HTML::Template::ProのJavaScript実装を紹介させていただきました。今回はその実装部においてのちょっとした工夫についてと、Webフロントエンドのパフォーマンスチューニングについて簡単にまとめさせていただきます。 正規表現の話 通常、テキストベースのDSL評価系を作成する際にはyacc/lexなどで文法記述を行うのが定石なんですが、 シンプルな文法であること 構文木の評価からコードジェネレートに方向性を転換した テキストマッチングの回数や高速化のための制御がしやすい などの理由から、HTML Template(JavaScript)では正規表現ベースの文法解釈を行っています。( HTML::Template::Proのyacc文法ファイルをそのまま使えば記述は楽だったのですが...)以下に実際に利用している正規表現を示しま

    Pure JavaScript Template Engine その弐 - mixi engineer blog
  • Pure JavaScript Template Engine - mixi engineer blog

    はじめましてhirokiです。こんにちは。新卒で弊社に入って一年が経過しようとしているので、そろそろエンジニアブロガーの仲間入りをしてみようかと思っています。 今回はJavaScriptのお話です。ハードボイルドなバックエンド側技術のご紹介が多い当ブログですが、スイーツ(笑)なフロントエンド技術おもしろいんだよ!ということをアピってやろうという魂胆です><。 HTML.Template(JavaScript) 弊社では、サーバサイドによるHTMLの出力テンプレートエンジンにCPANモジュールであるHTML::Template::Proを使用しています。今回はそのJavaScript実装をオープンソースとして開発しましたので、紹介をさせていただきます。 HTML::Templateは貧弱で、冗長で、洗練されていないシンタックスでお馴染みのテンプレートエンジンですが、高速で必要以上のロジック

    Pure JavaScript Template Engine - mixi engineer blog
  • DBMによるテーブルデータベース その五 - mixi engineer blog

    ついに発売されたスト4のコンシューマ機版をやりたくてしょうがないけど筐体を買ってもらえないので、駅前のゲーム屋のディスプレー前で垂涎するばかりのmikioです。今回は連載の最終回で、各種スクリプト言語を使ってお手軽にテーブルデータベースを操作する方法について説明します。 TokyoCabinet::TDB まずは、TCのPerlバインディングとRubyバインディングの最新版を入手してください。それぞれテーブルデータベースを扱うための TokyoCabinet::TDB というクラスが加わっています。以下のようなIDLによるガイドラインに準拠したインターフェイスが提供されますので、使い方は言語にかかわらず同じようになるはずです。 module TokyoCabinet { interface TDB { boolean open(in string path, in long omode);

    DBMによるテーブルデータベース その五 - mixi engineer blog
  • DBMによるテーブルデータベース - mixi engineer blog

    正月早々インフルエンザにかかって寝込んだmikioです。電車に乗る時や繁華街などに出る時はマスク着用が必須ですね。さて今回は、Tokyo Cabinetで実装したテーブル方式のデータベースについて紹介します。意外にどうして強力な機能なので、このネタは連載することを予告します。 テーブルデータベースとは 簡単に言えば、リレーショナルデータベースのテーブルのように、複数の列からなるレコードを格納できるデータベースです。SQLや表結合などの複雑な機能はサポートしませんが、そのぶん高速に動作します。つまり、DBMの速度で動くリレーショナル風データベースです(厳密にはリレーショナルデータベースではありません)。 TCの基となるハッシュデータベースは、単純なkey/value型のデータベースであり、つまりキーにも値にもスカラ(数値や文字列などの特に構造を持たない単一の値)しか格納することはできません

    DBMによるテーブルデータベース - mixi engineer blog
  • mixi Engineers’ Blog mixi有料サービス ~ payment.mixi.jpの知られざる裏側 ~

    はじめまして。開発部アプリケーション開発グループの向田(むかいだ)です。今回は、mixiの中では珍しいmixi有料サービスについて紹介したいと思います。堅い内容かもしれませんが、最後までお付き合いいただければと思います。また、今回の内容はPC版の有料サービスに限定させていただきますのでご了承ください。 ■はじめに mixi有料サービスと言っても、以前よりmixiプレミアムは存在していました。しかし、当時はお支払い用に登録していただいた決済情報が、mixiプレミアムのサービスだけでしか利用できず、今後有料サービスを追加したい、様々なサービスを提供したいという思いのさまたげになっていました。そこで、下記コンセプトを元に課金処理部分を再構築し、2008年4月1日より新たにスタートしました。 ◇コンセプト クライアントサービスとの疎結合 セキュリティリスクの軽減 利便性の向上 1. クライアントサ

    mixi Engineers’ Blog mixi有料サービス ~ payment.mixi.jpの知られざる裏側 ~
  • かんたん友人検索 その弐 - mixi engineer blog

    朝のジョギング生活を絶賛継続中ですが、あまり体重が減らなくてショボンヌなmikioです。さて今回は、Tokyo Dystopiaを使った検索機能「かんたん友人検索」の設計と実装についてお話しします。 全体の戦略 Tokyo Dystopia(TD)は単なる全文検索用のインデックス管理ツールです。多数の文字列の中から特定のパターンを含んだ文字列を特定する処理を高速化することはできますが、逆に言えばそれしかできないのです。住所を市区町村単位で限定して結果を絞り込むとか、ログイン時間が近い順に並び替えるとかの高機能は備えていません。Hyper Estraierにはそういったアプリケーション寄りの機能を持たせていましたが、逆にコードベースが肥大化して保守や最適化がしにくくなってしまいました。その反省を踏まえて、今回は、「全文検索による対象の絞り込み」だけはTDにやらせて、その他の機能は全て専用に書

    かんたん友人検索 その弐 - mixi engineer blog
  • YAPC::Asia 2008の資料公開します - mixi engineer blog

    開発部・システム運用グループの長野です。5月15日・16日に東工大大岡山キャンパスで開催されたPerlのカンファレンス、YAPC::Asia 2008に参加してきました。2日目にはセッションの時間を2つ頂いて、発表をしてきたのでその資料を公開します。 ■memcached in mixi [pdf] memcachedはmixiのシステムでも重要なアプリケーションの1つになります。発表ではmemcachedの基から、弊社でのmemcachedの事例、そして分散方法の改善、TokyoTyrantの活用事例について説明させて頂きました。発表の最後時間が足りなくなり説明できなかったスライドも含まれていますのでご覧下さい。 memcachedについては、研究開発グループのtmaesakaによる記事が、またTokyoTyrantの活用事例については、こちらの記事にもありますので参考にして頂けたら幸

    YAPC::Asia 2008の資料公開します - mixi engineer blog