タグ

ブックマーク / tagomoris.hatenablog.com (18)

  • 業務とオープンソース活動の話 (日本OSS奨励賞 受賞報告にかえて) - たごもりすメモ

    先日書いたエントリでも触れたけど、日OSS奨励賞、というものをいただくことになりました。ご推薦いただいた方がいるということで、当にありがとうございます。 「第9回 日OSS貢献者賞・日OSS奨励賞」受賞者を選定 | 日OSS推進フォーラム で、せっかくの機会だし、普段思っていることを書いておこうと思う。この内容はほとんど将来の自分に対する自戒だ。アレな内容になることを申し上げておきます。先日に引き続いてアレですが、まあせっかくの機会なんですよ。ねえ。 ちなみに、ちょー長くなりました。あっはっは。 業務としてのオープンソース活動 自分はフルタイムのオープンソースコミッタではない。オープンソース活動に貢献すること、などという文言は自分の業務内容にはひと言も含まれていないし、自分が所属する部署の目標にも無い。自分の業務はあくまで自社サービスに貢献すること、自社サービスの開発および運用を

    業務とオープンソース活動の話 (日本OSS奨励賞 受賞報告にかえて) - たごもりすメモ
    tsucchi1022
    tsucchi1022 2014/02/28
    かっこいい
  • 4年前、おれがSIerの片隅で、何者でもなかった頃 - たごもりすメモ

    今からちょうど4年前の2010年2月、某巨大SIerの片隅でExcelPowerPointばかりを眺めて過ごしていた頃、おれは仕事でも仕事以外でもコードなんかまったく書いていなかったし、GitHubのアカウントも持ってなかった。毎日見積書とWBSと納品書と請求書と、Excel方眼紙の詳細設計書と格闘してた。 当時おれは30歳だった。一度はプログラマとして生きるのは自分には無理だと思って入社したSIerで数年やってて、そこそこ成功した数年を送っているとは思っていたけど、でもやっぱり、そんな毎日に飽きていた。 技術力を重視とか言いながらプロパー社員にコードを書かせようとしない会社の方針にも、svnもgitも閉じられててガチガチに監視されたネットワークに繋がせておいてオープンソースがどうのと言う文化にも、手順や履歴を重視とか言いながらロクにバージョン管理システムを使おうとしない一部の同僚にも、

    4年前、おれがSIerの片隅で、何者でもなかった頃 - たごもりすメモ
    tsucchi1022
    tsucchi1022 2014/02/25
    いい話
  • 本番環境でのperl/ruby/nodeのセットアップ - たごもりすメモ

    番環境にperlとかrubyとかnodeを入れるんだけど、もちろん system perl じゃやってられないので指定したバージョンのものを一般ユーザの管理下に突っ込みたい。 で、そういうのをこれまで perlbrew とか rvm とか rbenv とか nvm とか nodebrew とかでやってたんだけど、さすがに色々疑問が湧いてきた。バッチで単発実行するために eval "$(rbenv init -)" とかさすがにおかしくね? みたいな。 ということで tokuhirom method 的にインストール用の簡単コマンドを使って実行、あとはパスを通せばいいじゃん、ということにしようかと思う。 参考: サーバーのセットアップは perlbrew とかじゃなくてよくね? という時のライフハック - blog.64p.org これ、今朝までは Perl::Build をどうにかしてC

    本番環境でのperl/ruby/nodeのセットアップ - たごもりすメモ
    tsucchi1022
    tsucchi1022 2013/03/27
    確かに、*env とか *brew 便利だけど、本番環境には必要なくて、こういうやつのほうがシンプルでいいのかも
  • Perlでコマンドラインオプションの解析に Getopt::Long を使う時、絶対に忘れてはいけない引数 - たごもりすメモ

    Perlでコマンドラインオプションをparseしようと思うと組込みモジュールとしては Getopt::Std と Getopt::Long がある。が、long style option *1 つまり --option-name のようなオプションを解釈してくれるのは Getopt::Long だけだ。なので普通はこちらを使おう。 ただし 絶対にデフォルト、つまり以下のようにして使ってはいけない。 use Getopt::Long; my (@primary, @secondary, $silent); GetOptions( "server-primary|p=s" => \@primary, "server-secondary|s=s" => \@secondary, "silent|S" => \$silent ); これダメ! 絶対ダメ! 死ぬ! 最初に結論を書く 必ず以下のように

    Perlでコマンドラインオプションの解析に Getopt::Long を使う時、絶対に忘れてはいけない引数 - たごもりすメモ
    tsucchi1022
    tsucchi1022 2012/09/19
    Getopt むずいなー。デフォルトが罠満載だったなんて知らなかった。。。
  • UserAgent判定器 Project Woothee はじめました - たごもりすメモ

    UserAgent判定ライブラリはCPANに数多くあるし他の言語でも似たようなものだと思うが、ライブラリや言語をまたがって一致した結果を返してくれるようなものは存在しない(と思う)。が、特にHadoopを使うようになってJavaの事情をある程度無視できなくなってくると、これがたいへん問題に思えてきた。Javaで書かれたUserAgent判定ロジックが欲しいが、普段書くコードはJavaではない*1ので、他の言語でも全く同じように判定してくれるライブラリが欲しい。結果がい違っていたり、新しいUserAgentを判定したいときに片方だけ対応されて片方は置き去りになったりすると大変困る。 ということで、作った。v0.1.0。現状ではJavaPerlの実装がある*2。 https://github.com/tagomoris/woothee https://github.com/tagomori

    UserAgent判定器 Project Woothee はじめました - たごもりすメモ
  • Hadoopとscribedの組合せ・2011年夏 - たごもりすメモ

    Hadoopクラスタを組み直す機会がやってくるのでこの際だからHadoopのバージョンを上げるべくあれこれテスト中。で、それにあわせて scribed のビルドもやったのでせっかくだから記録を残しておく。 なお以前(2011年当初)の状況については以下のエントリを参照のこと。 scribedのセットアップ手順ひと通り(hdfs書き込み有効版) - tagomorisのメモ置き場 Hadoop(libhdfs)各バージョンとscribeの微妙な関係 - tagomorisのメモ置き場 手順などについては上記エントリを起こしたときのものから変わってないので再掲はしない。そちらを参照のこと。 各ソフトウェアのバージョンについて 以前調べたときは CDH3b3 使えねえ!ということになっていたが、既に CDH3u1 が出ているのでそちらで試してみた、ら、使えた! やっほう! 現状のソフトウェア・ラ

    Hadoopとscribedの組合せ・2011年夏 - たごもりすメモ
  • #isucon を支えた技術: ベンチマークmaster/agentの構造とnode.jsの話 - たごもりすメモ

    支えた技術ってほど大層なものでもないんだけど、なんとなくカッコいいのでシリーズ名にしてみようと思った。 で、表題の件。 #isucon のベンチマークツールは1台のmasterと複数台のagentという構造になっていて、agentはベンチマークツールの負荷を複数台のサーバに分散させるために存在する。各agentは交換可能で、仮にagent用サーバが1台壊れたら、別のagentに負荷を振り向けるよう設定を書き換えるだけでいい。役割としてはだいたいこんな感じ。 master 各チームのスコア表示、およびベンチマークの起動・停止操作の提供、agentへのベンチマーク実行状況の問合せ、agentへのベンチマーク起動・停止指示、ベンチマーク実行結果の受け取りと保存 agent ベンチマーク処理の起動・停止、ベンチマーク実行状況の提供 (すべてJSON RPC) masterとagentは両方とも n

    #isucon を支えた技術: ベンチマークmaster/agentの構造とnode.jsの話 - たごもりすメモ
  • #isucon ベンチでいかにチートするか: その1 - 敵はhttp_load - たごもりすメモ

    チート対策とhttp_loadに仕掛けた罠の話 #isucon - blog.nomadscafe.jp このエントリに刺激されたので、自分でも事前に大丈夫かなーと思っていたものの最終的には対処しなかったチート穴の攻略を今朝明確に思い付いたので書いてみる。 その2以降を書く予定は今のところありません。 isuconベンチの構造 ベンチマークとチェックツールを含めた全体的な構造については前出のエントリの通りだが、更に加えると、isuconのスコアは http_load によるリクエストの処理数のみによって決まる、という特徴がある。Node.jsで書かれたチェッカなどからもそこそこ(少なくとも秒間3リクエスト)のGETが来るが、最終的なスコアから考えると誤差と言っていい数値。 ということで、チェッカへのレスポンスを確実に返すこととhttp_loadのリクエストに高速に応答することが重要だ。 h

    #isucon ベンチでいかにチートするか: その1 - 敵はhttp_load - たごもりすメモ
  • isucon終了に寄せて - たごもりすメモ

    ISUCon が終わりました。さっき、懇親会を終えて帰宅し、イベントで使用した仮想マシンすべてをシャットダウンしました。 しばらく前、あるきっかけがあったあとで「こんなイベントにすれば楽しいはず! 少なくとも自分は楽しめそう! やりたーい!」とTwitterに放流し、その後に社内のIRCでも同じようなことを言った結果「やればいいんじゃない?」的な反応を社内からもらい、何人かの人に協力をお願いしながら進めてたら、いつの間にかすごいイベントになってました。会場の手配もネットワークの手配も名札の手配も飲の手配もトロフィーや副賞の手配も、すべて自分以外の社員が、こうしたら良いイベントになるはず、とやった結果です。すげー会社で働いてるんだなあ俺、とか今更思いました。 レギュレーションの検討・作成から実際のコード・サーバ環境の作成まで、いっしょにやってた kazeburo さんはもとより、超多忙な同

    isucon終了に寄せて - たごもりすメモ
  • MySQL Casual Talks Vol.2 に行ってきた - たごもりすメモ

    MySQL Casual Talks Vol.2 - PARTAKE に行ってきたのでその感想。各Talkの細かい内容は既にグレートにまとめてる人がいるのでそちらをどうぞ。 個人的には @nippondanji さんのPerfomance Schemaの話を聞きに行ったといっても過言ではないのだが、基的には 5.6 待ち + 「カジュアルに使う方法は? → 残念ながらそんなものはない」ということで、あああ orz しかし有効時のオーバーヘッドは2割強ということで、かなりいい感じ。普段は負荷の低いサービスとかだと常時有効でいいんじゃねーのと思うくらい。いいなあ。 その他、各セッション面白かった。みんないろいろと試行錯誤してるなあ。オブジェクトの永続化先としてMySQLをとりあえず使うのはもうやめてもいいんじゃねーのという気がしなくもないが、とはいえレプリケーションとかバックアップとかいろい

    MySQL Casual Talks Vol.2 に行ってきた - たごもりすメモ
  • Node.jsなWebアプリでJobQueueなしにラクラク巨大処理を実行 - たごもりすメモ

    Node.jsでWebアプリを書いてるんだけど別に大量のリクエストをさばくわけでもないしWebSocketも使ってないし、じゃあなんでそんなことしてんの、という話。 まず結論だけ書くと、 並列度が低くてよいが長時間かかることが確定的な処理を非同期的に走らせる必要がある場合、普通はそのような用途でもJobQueue/Workerを使って構成するがそういうのは管理も面倒だしインストールも面倒くさくなるのであんまりやりたくない。Node.jsなら普通のWebアプリケーションフレームワークだけでラクに書けていいんじゃね? というひとつの提案です。 同期実行のケース 普通Webアプリケーションフレームワークというのは、一連の処理はクライアントにレスポンスを返すことで完了する。そしてひとつのプロセス/スレッドはリクエストをディスパッチされてからレスポンスを返すまでがそのリクエストに占有される。 ここで

    Node.jsなWebアプリでJobQueueなしにラクラク巨大処理を実行 - たごもりすメモ
  • OpenLDAPサーバを介してActiveDirectoryに接続する際の注意点ふたつメモ - たごもりすメモ

    Windows ServerのActive DirectoryをLDAPサーバとして使用している人は多いと思うが、様々な事情によりWindows Serverに直接繋ぐのはアレなのでOpenLDAPサーバ(slapd)を立てて ldap backend を使用して中継サーバとしている人はそれなりにいると思う。いるよね。いるかなあ。 そのような構成にした場合、以下の2点に注意する必要がある。のでまとめてみた。 また 前のエントリ で書いた perl backend を使用した構成をとる場合にも影響する。 AD特有の属性値の扱いについて ActiveDirectory上のデータではアカウント名が sAMAccountName フルネームが displayName という属性に入っていることが多い*1。したがってこれらの属性が使えないといろいろと不便だ。 しかしOpenLDAPに含まれているスキ

    OpenLDAPサーバを介してActiveDirectoryに接続する際の注意点ふたつメモ - たごもりすメモ
  • OpenLDAPサーバ(slapd)のperl backendを使う - たごもりすメモ

    長いよ! 社内Webアプリケーションの認証基盤としてあちこちでデファクトになっているのではないかと思われるLDAPだが、その管理は主に人事部がやっていたりして*1中身に迂闊に手を出せず歯がゆい思いをしているエンジニアに捧げるエントリ。俺得。 社内サービスのために認証をやりたいがパスワードの管理は別途LDAPがあるのでそっちに任せたい。しかしLDAPのディレクトリ構造のままだと権限情報がうまい具合に切り分けられず、ああああパスワードは持ちたくねえが権限情報は管理したり変更したり増やしたり減らしたりしたいよおおおおおお、という思いを抱いている人は多いと思う。 そこである日にOpenLDAPのオンラインドキュメントの目次を上から下までだらだらと眺めていると、なんと Perl Backend というものがあるらしい。サーバに来た問合せを任意のPerl moduleに移譲できるという。なんだって。す

    OpenLDAPサーバ(slapd)のperl backendを使う - たごもりすメモ
  • xargs を使ってカジュアルに並列処理 - たごもりすメモ

    シェルからでも重い処理というのはちょこちょこあって、例えば超デカいログファイルを移動して圧縮したりというお仕事は世界中のあらゆる場所で毎日行われていたりする。コマンドラインからでも大量の圧縮済みログファイルをいっぺんに展開したい、とか。 あるディレクトリ以下に存在するたくさんのファイルを(圧縮済みのものを除いて)全部 bzip2 圧縮したい!と思ったら、とりあえずさくっと次のようにコマンドラインで叩けばいい。 $ find . -not -name '*.bz2' | xargs bzip2 これで、まあそんなに問題なく効率的にbzip2圧縮ができる。だがしかし。 最近は複数コアのCPUが普通に転がってるし、あまつさえHyperThreadingが有効になってたりしてOSから見える論理CPU数がハンパない。普通に8とかある。その一方で複数コアを使用してくれるコマンドというのはあんまりなくて

    xargs を使ってカジュアルに並列処理 - たごもりすメモ
  • RAIDレベルの話: 各レベルのアレイのビルド/リビルド速度について - たごもりすメモ

    RAIDアレイをなんらかの指標をもとに設計するとき、容量、性能および安全性と価格が最初に来るのはともかくとして、それに付随する重要な要素としてディスクがfailしたときのリビルドの所要時間およびリビルド中のパフォーマンス低下具合についても注意は必要だ。ほぼ切れ目なく高負荷がかかり続けるような用途ならそれを前提としてパフォーマンスの最低ライン(つまりRAIDアレイのリビルド中のスループット)をそこに合わせる必要があるし、日中のみ高負荷がかかるが夜間はほとんどI/Oが発生しないような用途であれば、夜間帯のうちにリビルドが終わることがわかっていればリビルド中のパフォーマンス低下が大きくても許容できる。用途を考え、数値を計測することがなによりもはじまりとなる。 リビルド中のパフォーマンスを正確に見積もるのは難しい。ストレージの性能特性は様々な要因によって左右される。read/writeの比率の想定

    RAIDレベルの話: 各レベルのアレイのビルド/リビルド速度について - たごもりすメモ
  • 16TBを超えるサイズのファイルシステムを作る - たごもりすメモ

    無事20TBのRAID-6ボリューム /dev/md0 ができたので、ファイルシステムをどうしようかなー、まあext4でいいか安定路線で、と思って調べてみたら ext4 の最大サイズは 1EB らしい。素敵! ということで作ろうとしてみたら、なんかうまくいかない。 # mkfs -t ext4 /dev/md0 mke4fs 1.41.12 (17-May-2010) mkfs.ext4: Size of device /dev/md0 too big to be expressed in 32 bits using a blocksize of 4096.ブロックサイズってext4で4096より大きくしないといけないの? と思ったが4096より大きいサイズには対応してないと言われるし、inode割り当てを増やせばと思ったけど、それでもやっぱりコケる。あれー? とか思ってたら、こんなページ

    16TBを超えるサイズのファイルシステムを作る - たごもりすメモ
  • Linux Software RAIDでmdをベリファイする - たごもりすメモ

    RHEL系OSでmdadmを入れていると cron.weekly にraid-checkというスクリプトが入る。これは作成済みのmdすべてに対してベリファイをかけるもので、何も考えていないLinux Software RAID利用者でも実は既にベリファイは行われていたんだよ! なんだってー! というものでたいへんありがたい。 設定は /etc/sysconfig/raid-check にあるので適当にいじるよろし。 複数mdがある場合 しかしこのスクリプト、実はちょっと困る。複数のmdが構成されているときにそのすべてに "check" を実行してしまうため、2つ以上のアレイがある場合に一時的にものすごく負荷がかかって他の処理に影響が出かねない。また各々のアレイのチェックの所要時間も延びてしまう。こういう場合は raid-check の対象から各mdを外してやった上で自分でcronでベリファ

    Linux Software RAIDでmdをベリファイする - たごもりすメモ
  • RAIDレベルの話: 1+0と6はどっちが安全か? - たごもりすメモ

    仕事でちょっくら12台のHDDを使ったRAIDアレイを組むんだけど、その折にちょうどTwitterで「RAID-1+0にしないとRAID-6とか怖くて使えませんよ!」というウソ八百な内容のWebページのURLを見掛けたので、いいかげんそのような迷信が消え去ってもよかろうと思って書くことにした。 1重ミラー設定のRAID-1+0は安全性においてRAID-6に劣る。ただし、正しく運用されている場合に限る。*1 知っている人はずっと前から知っている事実ではあるんだけど、某巨大SIerなんかでも高い方が安全に決まってる的な残念な脳味噌の持ち主がいっぱいいて「いやあデータの安全性を考えるとRAID-1+0」とか考えもなしにクチにし、そっちの方がディスクがいっぱい売れて嬉しいストレージベンダーもニコニコしながら否定せず売りつけて去っていくといううわなにをす(ry まあそんな感じで。ちなみに正しくない運

    RAIDレベルの話: 1+0と6はどっちが安全か? - たごもりすメモ
  • 1