タグ

ブックマーク / blog.nekokak.org (21)

  • Redis の SortedSets 同点問題について - blog.nekokak.org

    WEB+DBのRedis特集をひろせまさあきさんと共同で執筆しました。 WEB+DB PRESS Vol.73posted with amazlet at 13.03.05設樂 洋爾 白土 慧 奥野 幹也 佐藤 鉄平 後藤 秀宣 mala 中島 聡 堤 智代 森田 創 A-Listers はまちや2 大和田 純 松田 明 後藤 大輔 ひろせ まさあき 小林 篤 近藤 宇智朗 まかまか般若波羅蜜 Mr. O 技術評論社 売り上げランキング: 335 Amazon.co.jpで詳細を見る 買ってください。 このRedis特集の第五章では、Redisを使ったリアルタイムランキングについて取り上げたのですが、 記事中にある同点問題について、執筆時から状況が変わりましたのでupdateします。 記事中では、RedisのSortedSetsはスキップリストというアルゴリズムを使っている特性上、 同じス

  • blog.nekokak.org

    App::MadEyeとはPerlでかかれた監視フレームワークである。 基ドキュメントを見ても一切使い方がわからないであろう このモジュールをちょっと解説してみる。 ちなみにYAPC::Asia 2010の省サーバ運用の発表の際、 「監視とかどうしてますか?」 という質問があったが、私はこのApp::MadEyeを使っている。 使用理由としては、基的に監視したいと思う項目が網羅されている事、 使ったことがあること、nagiosとかめんどくさそう(使ったこと無いだけです) ということ、そして最大の理由はそれがPerlで書かれていることであろう。 早速解説というか使い方 App::MadEyeを起動するスクリプトを用意する。 今回は指定のサーバにpingを打ってみる例である。 #! /usr/bin/perl use strict; use warnings; use App::MadEy

    kazeburo
    kazeburo 2012/06/04
    Google Chrome では
  • Clutchの仕様と構想と(その1) - blog.nekokak.org

    Clutchを作ってる上で、やり残しの部分だったり、懸念点だったりもろもろが頭の中に残っているので 現状の仕様等をまとめつつ書きだしてみる。 長くなりそうだからその1としている。 なぜGearmanではないのか ClutchはGearmanのように中間daemon(gearmand)を基持たない。 Gearmanの場合はclientは実際に処理を行うworkerがどこにどれだけ居るかを知る必要はなく、 gearmandの居場所さえ知ればよい。 clientがgearmandにリクエストを投げれば、あとはgearmandが対象となるworkerにrequestを回す。 自分としてはこのgearmandという存在がうっとおしく思えた。 例えばちょっとしたツールでjob queueを使いたい場合、workerプロセス以外にもgearmandを起動する必要がある。 別にそれくらい起動しとけばいい

    kazeburo
    kazeburo 2012/01/10
  • RENAME TABLEでカジュアルな運用 @mysql-casual#15 - blog.nekokak.org

    やぁ。可愛いアイコンでお馴染みの@nekokakだよ。 mysql-casualとか言ってるけどカジュアルな記事が@oinumeさんくらいしかないよね。 ドン引きだね'`,、('∀`) '`,、 ということでガクンと敷居を下げようって感じで超絶カジュアルな話をしてみようと思うんだ。 カジュアル運用していると、「あれなんかこのテーブルまじレコード数おおすぎね?」 とかあるあるですよね。 そこでカジュアルにcountして見るわけです。 InnoDBのテーブルになのにそれもmsaterに対して。 カジュアルですね。 mysql> select count(*) from accesslog; +----------+ | count(*) | +----------+ | 11676738 | +----------+ 1 row in set (1 min 36.99 sec)1分半くらいかか

    kazeburo
    kazeburo 2011/12/15
    nrhd
  • DBIx::Handler#queryというjust idea - blog.nekokak.org

    ほんとjust ideaですが DBIx::Handlerにquery methodを足して見ました。 my $handler = DBIx::Handler->new(@connect_info); my $sth = $handler->query('select * from query_test where name = :name', +{name => 'nekokak'}); m $row = $sth->fetchrow_hashref; # +{name => 'nekokak'}; bindで渡す引数の形に応じてnamed_placeholderしてくてたり、 prepare / executeまでやってsthをかえすだけなんですが。 また { package Mock::Result; sub new { my ($class, $handler, $sth) =

    kazeburo
    kazeburo 2011/10/18
  • Hokkaido.pm#5に参加した - blog.nekokak.org

    7/16(土)に行われたHokkaido.pmにJPA様の支援により行くことができました。 3連休ということでフライト料金が凄いことになってるので、 前日の金曜日の午前中に北海道に到着する感じで入りました。 金曜日の夜にだれか北海道で飲めるヒトーとtwitterで募集したら @lapis_twさん @techno_nekoさん @aloelightさん が来てくださって北海道名物のジンギスカンをたらふくべることができました。 うまかったです。でも当分ジンギスカンはいりません。 ほんちゃんの発表資料は http://nekokak.org/presen/hokkaido05/ こちらになります。 スライドにも書いてますが、特定のプロダクトを話すよりも、 エンジニアとしての意識の持ち方的な話をしてみました。 いかがでしたでしょうか。 今回のHokkaido.pmでは高校生の@akiymさんが

    kazeburo
    kazeburo 2011/07/19
    ツボを売っていたと聞いて!
  • OrePANがcoolすぎる - blog.nekokak.org

    みなさんCPANモジュールの管理どうしてますか? rpm? deb?いやーメンドクサイですね。 メンドクサすぎて日がくれます。 それにそんな一元管理の方法したらコンポーネントが複数ある場合、 簡単にmoduleのバージョンがupでいないじゃないですか。 so badですね。 いまだとperlbrewとextlibでコンポーネント毎にcpanモジュールを管理することが 大分と楽にはなりましたが、OSの差はどう仕様も無い! 実際にサービスに撒くmoduleに関してはサービスのosで作ったperlbrew+extlibで管理していいとおもいますが、 localの開発環境が、MacOSとかだとすると激しくメンドクサイですね! さらにextlibとかに入れてるバージョンと全く同じバージョンのモジュールを 手元のmacに入れるとか実は結構むずかしいんですよね。 Makefile.PLでバージョンを指定

  • DBIx::Handler的なものをでっちあげた件 - blog.nekokak.org

    最近はORMを一切使わず生なDBIでもりもりコードかいてます。 ORMを使うと隣の人に刺されるのでェ で、です。生のDBIを使うとforkする処理を書く時に面倒だったりします。 現在のところDBIx::Connectorとかつかってて基問題ないんですが、 どうしてもこのDBIx::Connectorのインタフェースが気に入らなくてイライラしてました。 隣の人はそうでもないみたいですが で、です。ついカッとなってDBIx::Handlerというのを書きました。 実はこいつは今年の初め頃に一度軽く書いたんですが、その時はDBIx::Connectorよりも低機能だし おれおれコネクター書くのはよくないよなーとおもって自重してたんです。 でもついカッとなったのでしかたないです。 個人的なDBIx::Connectorの嫌な部分を列挙すると、 - トランザクションのかけ方がcodeblockでし

    kazeburo
    kazeburo 2011/06/30
    https://github.com/nekokak/p5-DBIx-Handler これか RT @nekokak: blogged / DBIx::Handler的なものをでっちあげた件 - blog.nekokak.org
  • yokohama.pm#7 で喋ってきたよ! - blog.nekokak.org

    皆様お疲れさまでした。 そしてLivedoor++でしたね! LivedoorさんはYokohama.pmのようなカンファレンス支援を行い始めたようで、 スポンサー集めるの大変だーとか、 スポンサー集めるにはニッチすぐる会だーとか そういうのを積極的にサポートするつもりらしいので、 いろいろやりたいことがあるなら一度相談してみるといいとおもいますよ! 今回自分はMySQLのHandlerSocket Pluginについて話してきました。 こういうカンファレンスで自分のプロダクト以外を話すのは久々ですが、 いい緊張感をもって話せました。 http://nekokak.org/presen/yokohama07/ ちょっと補足をすると スライド中にある既存のWAFを使わないと書いているのは すべてのケースに当てはまるわけではなく、 今私が見ているシステムに関してはそうだと言ってるだけです。 普

  • MySQueue

    またか!って感じなんですが、MySQL前提で動作するJobQueueをかるく実装してみました。 https://github.com/nekokak/MySQueue よくあるJobQueueは1つのjobをdequeueして処理しますが、 今回作ったMySQueueは自分の指定したボリュームのjobをまとめて取得して処理する感じです。 workerをタンマリ用意してマシンガンのようにバシバシjobを処理するというよりも 大砲のようにどかーんどかーんとjobを処理する感じです。 なのであんまり並列性はいらないかんじ。(当然ある程度はいるけど) わかりやすい説明ですね。 Schema: CREATE TABLE job ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, arg MEDIUMBLOB, status VARCHAR(10) DE

    kazeburo
    kazeburo 2011/04/18
    RT @nekokak: blogged / MySQueue
  • 退職のお知らせ

    2月28日をもって現在勤めている会社を退職致します。 日2月25日が最終出社です。 現在の会社に勤めだして1年ほどですが 今までの単なるwebアプリ開発だけでなく データセンターの選定、 サーバの選定、 などインフラ面にも携わることができ とても勉強になりました。 その成果が昨年のYAPCの発表に繋がっています。 来週月曜日は有給を利用してちょっと休養させていただき、 3月1日から新しい会社で働きます。 どうぞ今後とも宜しくお願い致します。

    kazeburo
    kazeburo 2011/02/25
    お疲れさまでしたー
  • released Jonk-0.10_01

    先ほどJonkをdevリリースしました。 今までのJonkと異なり大幅にクラス構成を変更し、 またapiをガッツリ変えました。 新生Jonkでは以下のように使います Jobの登録: use DBI; use Jonk my $dbh = DBI->connect('dbi:mysql:test','user','pass'); my $jonk = Jonk->new($dbh); my $job_id = $jonk->insert('worker_key', 'job_data_here');Jonの実行 use DBI; use Jonk use Your::Worker; my $dbh = DBI->connect('dbi:mysql:test','user','pass'); my $jonk = Jonk->new($dbh, {functions => [qw/wor

    kazeburo
    kazeburo 2011/01/28
  • Tengについて

    先ほどTengという新しいORMをリリースしました。 TengはDBIx::Skinnyの後継バージョンと捉えていただいて結構です。 DBIx::Skinnyはおおよそ3年前ほどに一人でつくりはじめたORMで 現在に到るまでに様々な仕様変更を繰り返し、 結構秘伝のタレ的なコードが目立つようになってきました。 元々はDBIx::Skinnyをリファクタリングすることで済まそうと思っていたのですが、 後方互換を残したままのリファクタリングに限界を感じました。 多くの人に使っていただいている現状で後方互換を簡単に捨ててしまうのは 宜しく無いとの判断から別プロジェクトとしてリリースするに至りました。 DBIx::Skinnyは現状、バクレポートも特別なく 問題なく継続してご利用頂けると思いますので、ご安心ください。 また、なにか大きな問題点があれば、サポートしますのでpatches&testsウエ

    kazeburo
    kazeburo 2011/01/18
  • Sub::Argsで存在しないキーにアクセスしたらエラーに

    前回Smart::Argsを紹介したときに、 http://blog.nekokak.org/show?guid=YOPjaCIM4BGd0gUxMSAp_g use strictしててもhashのキーを間違った場合、普通に処理できてしまい 間違いに気づかないわけです。 use fieldsつかえば回避できるんですが、 いまどきuse fieldsを使ってるのはbradだけという噂もあるので、 Smart::Args使っとけって感じです。と、書いたわけですが、Sub::Argsの0.05をつかえば package Your::Class; use Sub::Args; sub foo { my $class = shift; my $args = args( +{ fh => 1, bucket => 0, ext => 0, } ); $args->{exf}; # oops } p

    kazeburo
    kazeburo 2010/12/22
  • Smart::Argsの素晴らしいところ

    Sub::Argsというものを作っていながら、 Smart::Argsを紹介します。 一言でいうとSmart::Argsの良さは型チェックができるとかそんなことではなく、 argumentsをhashと同じキー名の変数でうけとれることでしょう。 サンプルコード use strict; use warnings; package Your::Class; use Smart::Args; sub foo { args my $self, my $fh, my $bucket => {optional => 1}, my $ext => {optional => 1}, ; } package main; foo(fh => $fh, bucket => $bucket, ext => $ext); # or foo({fh => $fh, bucket => $bucket, ext =>

    kazeburo
    kazeburo 2010/12/20
    strictなるほど RT @nekokak: blogged / Smart::Argsの素晴らしいところ
  • released Jonk-0.01

    http://search.cpan.org/~nekokak/Jonk-0.01/ 先ほどリリースしたのでお知らせしておきます。 http://blog.nekokak.org/show?guid=tFbq8B723xGnPyxB1pTnqQ こちらで紹介したインタフェースから若干のインタフェースの変更がありますが、 基的な方針に変更はありません。 use DBI; my $dbh = DBI->connect(...); # enqueue job { use Jonk::Client; my $jonk = Jonk::Client->new($dbh); $jonk->enqueue('MyWorker', 'arg'); } # dequeue job { use Jonk::Worker; my $jonk = Jonk::Worker->new($dbh, {funct

  • Jonkという名のJobTankingミドルウエア

    JobQueueManagerについて で書いていたシンプルなjob管理の仕組みを作ってみました。 https://github.com/nekokak/p5-Jonk 使い方はこんな感じ。 use Jonk; my $dbh = DBI->connect(...); # enqueue job { my $jonk = Jonk->new($dbh); $jonk->enqueue('MyWorker', 'arg'); } # dequeue job { my $jonk = Jonk->new($dbh, {funcs => ['MyWorker']}); my $job = $jonk->dequeue; print $job->{func}; # MyWorker print $job->{arg}; # arg }Jonkはなにもやりません。jobをRDBMSに貯める以外は。

    kazeburo
    kazeburo 2010/11/22
  • App::MadEye

    App::MadEyeとはPerlでかかれた監視フレームワークである。 基ドキュメントを見ても一切使い方がわからないであろう このモジュールをちょっと解説してみる。 ちなみにYAPC::Asia 2010の省サーバ運用の発表の際、 「監視とかどうしてますか?」 という質問があったが、私はこのApp::MadEyeを使っている。 使用理由としては、基的に監視したいと思う項目が網羅されている事、 使ったことがあること、nagiosとかめんどくさそう(使ったこと無いだけです) ということ、そして最大の理由はそれがPerlで書かれていることであろう。 早速解説というか使い方 App::MadEyeを起動するスクリプトを用意する。 今回は指定のサーバにpingを打ってみる例である。 #! /usr/bin/perl use strict; use warnings; use App::MadEy

  • CloudForecastでqudoのworker状態を見る

    Qudo::Parallel::Managerをつかえばscoreboradをみれるので、CloudForecastでグラフ化してみた。 package CloudForecast::Data::Qudo; use CloudForecast::Data -base; use IO::Socket::INET; =head1 NAME CloudForecast::Data::Qudo =head1 SYNOPSIS host_config) resources: - qudo[:port] eg) - qudo # 監視ポート9000 - qudo:9005 # ほかのportで起動 =cut rrds map { [$_,'GAUGE'] } qw/busy idle/; graphs 'status' => 'Qudo worker status';

  • blog.nekokak.org

    {NDA}というところから、{NDA}.cgiというファイルを渡されました。 このcgiファイルをwebでアクセスできるところに置いてね! っと言われたわけですが、このcgiはcかなんかでかかれており、バイナリファイルでした。 まぁ、それはいいんですが、普段apacheとか使ってないし、これだけの為にapache立ち上げるワケにはいかないので何とかした時のお話。 まぁ、なんてことはないんですが use strict; use warnings; use CGI::Emulate::PSGI; use Plack::Builder; my $app = CGI::Emulate::PSGI->handler(sub { system('./NDA.cgi'); }); builder { enable 'Plack::Middleware::ReverseProxy'; $app; };