タグ

ブックマーク / gihyo.jp (25)

  • 第23回 Perlアプリケーションのテストと高速なCI環境構築術(1) | gihyo.jp

    連載では第一線のPerlハッカーが回替わりで執筆していきます。今回はmyfinderこと久森達郎さんで、テーマは「Perlアプリケーションのテストと高速なCI環境構築術」です。テストに利用するさまざまなモジュールから、CI(Continuous Integration、継続的インテグレーション)環境の構築、そして増えたテストを高速に実行する枠組みの構築までを紹介します。 なお稿のサンプルコードは、誌サポートサイトから入手できます。 テストの目的 まずはテストを行う目的を整理します。 コードを壊していないことを確認する 1人で開発するものであれば、どんな状況であれ責任を負うのは自分だけですが、チームや組織が複数にまたがる場合にはテストが重要になります。プロダクトが大きくなるにつれ、自分の開発によって想定外の機能にも影響を与えることが多くなります。逆にほかの開発者が行ったコミットによって

    第23回 Perlアプリケーションのテストと高速なCI環境構築術(1) | gihyo.jp
  • 第22回 Coroを使ったやさしいクローラの作り方(3) | gihyo.jp

    (1)はこちら、(⁠2)はこちらから。 並列・分散処理のためのクローラ ある程度大規模なクローラを作る場合は、一定時間内になるべく多くのURLから効率的にデータを収集する必要があります。接続先のホストごとに同時接続数やウェイトなどの配慮をしつつ、全体としては大量のリクエストを同時に処理する必要があります。検索エンジンのためのクローラ、定期的に同じURLにアクセスする必要がある更新チェックやフィードアグリゲータなどは、特に該当するでしょう。 Perlで高性能なクローラを書く場合の選択肢は2つあります。一つはforkによるマルチプロセスによるもので、Parallel::ForkManagerやParalell::Preforkを使うケースや、ジョブキューのためのフレームワークを使ったワーカがこれに該当します。もう一つはAnyEventやCoroを使ったI/O多重化によるアプローチです。筆者が好

    第22回 Coroを使ったやさしいクローラの作り方(3) | gihyo.jp
  • 第3回 MongoDBのクエリを使いこなそう | gihyo.jp

    はじめに 記事では、MongoDBのクエリを解説します。MongoDBはリレーショナルデータベース(以下"RDB"と略記)ではないため、SQLは使用できません。その代わり、MongoDB特有の「Mongoクエリ言語」を用います。Mongoクエリ言語のCRUD操作については公式ドキュメントに詳しい解説があります。 記事の構成は、最初にMongoクエリ言語の特徴について解説し、2ページ目ではSQLとMongoクエリ言語の比較を行います。3ページ目では、MongoDBクエリ言語の使い方を説明し、最後に、プログラミング言語からの利用の仕方の説明として、Rubyからの利用を説明します。 Mongoクエリ言語の特徴 Mongoクエリ言語には以下の特徴があります。 コレクションの各メソッドを用いてCRUD操作をします メソッドの引数にはJSON形式のデータを渡します 変数が使えます 制御構造が使えま

    第3回 MongoDBのクエリを使いこなそう | gihyo.jp
  • 第13回 [キャリアアップ編④]varnishを使おう③─便利な機能を使いこなす | gihyo.jp

    【例1】親子関係の定義 バックエンドサーバを172.20.1.1: 6081とし、30ms以内の返答を期待する。 backend default { .host = "172.20.1.1"; .port = "6081"; .connect_timeout = 30ms; } 【例2】URLからコンテンツ振り分け リクエストURLがwww.test.jpの場合、キャッシュ有無の確認、必要に応じてdefault定義に従ってbackendサーバへ接続する。それ以外のURLであった場合は、「⁠400 "Forbidden"」を返信する。 # backend server if (req.http.host == "www.test.jp") { set req.backend = default; } else { error 400 "Forbidden"; } 【例3】特定キャッシュの時間

    第13回 [キャリアアップ編④]varnishを使おう③─便利な機能を使いこなす | gihyo.jp
  • 本日12月1日より、プログラマ有志による2012年の技術系Advent Calendarが各所ではじまる | gihyo.jp

    日12月1日より、プログラマ有志による2012年の技術系Advent Calendarが各所ではじまる 日12月1日より、プログラマ有志による2012年の各技術系Advent Calendarが一日目を担当する人のblogではじまっている。定番化したと言っていいほどの、師走の風物詩になっている。 昨年は技術系Advent Calendarが多方面で行われたが、今年は昨年を超える技術系Advent Calendarが12月1日より行われそうだ。 一般的なAdvent Calendarは、12月25日のクリスマスを楽しみに待つために、12月1日から24日までのカレンダーの日付の部分(扉だったりする)を開けるようになっており、1日ずつその日の日付の部分を開くと天使や動物の絵などが見えるという仕組み(もちろん、様々なバリエーションがある⁠)⁠。 これに発想をえて、技術系Advent Calen

    本日12月1日より、プログラマ有志による2012年の技術系Advent Calendarが各所ではじまる | gihyo.jp
  • 第15回 Perl meets beats―鳴らして学ぶシンセサイザー入門(3) | gihyo.jp

    ビートの出力 (1)(2)までで単音の波形データが作れるようになりました。次は生成した波形データを任意のテンポとパターンで鳴らしてビートを刻みます。 発音タイミングの計算 ビートを刻むには、単音の波形データを間隔を置いて配置したチャンネルデータを作ります。間隔の計算には、BPM(Beats Per Minute、1分間に鳴る4分音符の回数)を決める必要があり、BPMが決まると配置先が決まります。この配置先のことを「発音タイミング」と呼び、図7の横軸の目盛りのことを指します。図7①は4分音符を配置するための間隔です。 図7 発音タイミング Perlによる実装 リスト10は、ビートを刻むのに必要なパラメータの定義です。(1)はビートを刻むテンポで、BPMで定義します。(2)はビートをどうやって刻むかを定義した発音パターンで、1つの音色につき1つ定義します。定義した配列の中で「1」のときだけ鳴る

    第15回 Perl meets beats―鳴らして学ぶシンセサイザー入門(3) | gihyo.jp
  • Gihyo Digital PublishingのEPUBをmobiに変換してKindleで読む | Gihyo Digital Publishing … 技術評論社の電子書籍

    Kindleファンの皆さん,こんにちは。技術評論社の高橋です。 大分経ちますが前回の終わりに,Gihyo Digital PublishingのEPUB3内部構造について説明するという話を振っていましたが,諸般の事情から先日『EPUB3用XHTML作成ガイド - Gihyo Digital Publishing版』を執筆し,こちらにEPUBで使用されるXHTMLの基の話をまとめてみました。ご興味あればご覧ください。コメントあればフォームや@k_taka宛にご連絡いただければ幸いです。XHTML以外については,そのうちということで。 E-ink型の電子書籍端末,Kindle さて,日AmazonKindleを現在販売していませんが,すでにKindleをお持ちの方もいるでしょう。わたしもそのような一人なのですが,E-ink型の電子書籍読書端末として先日発売されたKindle 4Gは,デ

    nkwhr
    nkwhr 2012/01/06
  • 第2回 Linux KVMで動かすWindows | gihyo.jp

    KVM+Windowsを高速化するVirtio Linux KVM(以下KVM)は、Linuxカーネルに組み込まれた仮想化環境ですが、KVM上の仮想マシンではLinuxだけでなくWindowsも動作させることができます。これはKVMが実現している仮想マシンが「完全仮想化」であるためです。 完全仮想化はOSに修正が必要ない点がメリットですが、I/Oなどの速度面ではOSに修正を加える「準仮想化」が有利な場合があります。そこで、I/Oを司るデバイスドライバを準仮想化で動作させることで性能を向上させる部分的な準仮想化の方式が、現在の主流となっています。このデバイスドライバを「パラバーチャル(準仮想化)ドライバ」と呼びます。 KVMでは、I/Oの準仮想化方式として「Virtio」が採用されています。VirtioはVirtualBoxなどでも採用されている実装になっています。今回は、VirtioのWi

    第2回 Linux KVMで動かすWindows | gihyo.jp
    nkwhr
    nkwhr 2011/07/26
  • 第6回 UNIXプログラミングの勘所(3) | gihyo.jp

    ネットワークプログラムとSIGPIPE 「私の書いたサーバが突然死するんです。どうしてでしょうか」という質問を受けることがあります。これは多くの場合、SIGPIPEの処理を忘れていることが原因です。SIGPIPEとは、切断されたネットワークソケットなどにデータを書き込もうとした際に送出されるUNIXシグナルです。特に設定しない限り、プロセスはSIGPIPEを受け取ると強制終了されます。そのため、通信が突然切断される可能性のあるTCPサーバにおいては、SIGPIPEを無視するよう設定する必要があります。 # デフォルトの動作(SIGPIPEの場合はプロセスの終了)に設定 $SIG{PIPE} = 'DEFAULT'; # SIGPIPEを無視するよう設定 $SIG{PIPE} = 'IGNORE'; # SIGPIPEを受信した際に実行するサブルーチンリファレンスを # 設定 $SIG{PI

    第6回 UNIXプログラミングの勘所(3) | gihyo.jp
  • 2日目レポート[随時更新] | gihyo.jp

    10月15日、16日、東京工業大学大岡山キャンパス (東京都目黒区) でYAPC::Asia 2010 Tokyoが開催されます。ページでは、2日目のレポートを随時掲載していきます。 電車遅延のため、日のプログラム開始を10分遅らせるとのことです(なお、休憩時間を利用して、すでに来予定しているタイムテーブルに修正されています⁠)⁠。 ※今回のレポートは全セッションを回れておりません。ご了承ください。 gfxさん「How Xslate Works - The next generation's template engine⁠」⁠ Text::Xslateの作者であるgfxさんによるXslateの内部構造を中心としたトークでした。 XslateはXSで書かれているテンプレートエンジンです。非常に高速に動作するように設計されていて、HTMLエスケープは自動で行ってくれる機能により安全性に

    2日目レポート[随時更新] | gihyo.jp
  • 前夜祭レポート[随時更新] | gihyo.jp

    明日、明後日(10月15日、16日)に、YAPC::Asia 2010が開催されます。それに先立ちPre-conference Meetupとして、日「YAPC::Asia 2010 前夜祭」が開かれます。 ページでは、このYAPC::Asia 2010 前夜祭を随時レポートしていきます! なお、yusukebeさんから、発表を聞かずに、ホールのビールを飲んで構いませんとアナウンスがありました(会場内では飲NGとのこと⁠)⁠。 yusukebeさん「イントロダクション」 「出張PerlCasual #04」と題して、yusukebeこと和田裕介氏さんから前夜祭開始の挨拶がありました。その後、ライブラリ利用者や日曜大工的にPerlを利用している方などを対象にした「PerlCasual」ができた経緯やこれまでの活動報告が説明されました。 その後、今回のプログラムである、WAF(Web A

    前夜祭レポート[随時更新] | gihyo.jp
  • 第2回 AnyEventでイベント駆動プログラミング (1) | gihyo.jp

    連載では第一線のPerlハッカーが回替わりで執筆していきます。第2回は、Japan Perl Association代表理事の牧大輔さんで、テーマはAnyEventです。 はじめに 昨今のPerl界で最も熱い話題がイベント駆動プログラミングです。イベント駆動プログラミングはいわゆる「リアルタイムWeb」などと呼ばれる、大量のデータや接続をさばきつつも更新通知の速さが重要となるアプリケーションでは必須技術で、今後のエンジニアにとって最も重要な知識の一つと言えるでしょう。 イベント駆動プログラミング自体はPerlでも以前からさまざまな用途に使われてきましたが、それがまた見直されているのは、従来のイベント駆動プログラミング用ツールキットの使いやすさをはるかに凌駕するAnyEventというモジュールが成熟期を迎えたためです。 イベント駆動プログラミングとは AnyEventの解説に入る前に、簡単

    第2回 AnyEventでイベント駆動プログラミング (1) | gihyo.jp
  • 第5回 APIの全体像とデータの投入 | gihyo.jp

    前回でCassandraへのアクセスするコードの基をおさえました。今回解説するのは以下の2点です。 CassandraのAPIの全体像 Cassandraにデータを投入するコードの詳細 3つの分類からAPIの全体像をおさえる 第1回でもご紹介しましたが、CassandraのクライアントAPIはThriftによって自動生成されます。APIは非常にシンプルなものが幾つかあるだけで、覚えるのもさほど難しくはありません。連載ではその中からよく使うものに特化してご紹介していきます。 以下にCassandraのAPIを、データ挿入系・データ検索系・認証/管理系の3つに分類してまとめてみました。まずはこれらにひと通り目を通してみてください。 データ挿入/更新/削除のAPI データ挿入、更新、削除のAPIは以下の表のとおりです。現実的によく使う中心的なAPIはbatch_mutate、removeの2

    第5回 APIの全体像とデータの投入 | gihyo.jp
  • 第12回 XMLHttpRequest入門 | gihyo.jp

    こんにちは、太田です。前回はJSONPについて解説しました。今回は、XMLHttpRequestについて解説していきます。 XMLHttpRequestとは XMLHttpRequestはブラウザ上でサーバーとHTTP通信を行うためのAPIです。 名前にXMLが付いていますがXMLに限ったものではなく、HTTPリクエストを投げてテキスト形式かDOMノードでレスポンスを受け取る機能を持っています。 仕様としてはW3CよりXMLHttpRequestとして定義されており、2010年8月3日にCandidate Recommendation(勧告候補)となったばかりです。また、XMLHttpRequest Level 2の策定も進められています。 XMLHttpRequestの機能と特徴 前回のJSONPと比べると機能的には大きな違いはありません。ただ、スキーム、ドメイン、ポート(これをまとめて

    第12回 XMLHttpRequest入門 | gihyo.jp
  • 第35回 DBI:生のSQLが散らばると言う前に | gihyo.jp

    Perldbm いまでは省みられることも少なくなりましたが、Perlには1989年にリリースされたバージョン3.0以降、dbmと呼ばれるシンプルなデータベースにアクセスする機構が標準で組み込まれています。このdbmは、いわゆるリレーショナルデータベースとは違ってキーと値の組み合わせをディスクに保存できるだけのものですが、ハッシュ(当時はまだ連想配列と呼んでいました)と結びつけることでタブ区切りファイルなどを読んでいくより高速に検索ができたため、ユーザ環境に永続的なデータを保存する手段のひとつとして重宝されていました。Perl 3/4の時代にはdbmopenというコマンドが使われていましたが、この機構はPerl 5になって一新され、いまではより汎用的なtieというコマンドを使うことになっています。この仲間としては古くからあるBerkeley DBやGDBMなどのほか、最近では平林幹雄氏のT

    第35回 DBI:生のSQLが散らばると言う前に | gihyo.jp
    nkwhr
    nkwhr 2010/08/09
  • 第3回 様々なデータ型を扱えるTokyoTyrant | gihyo.jp

    どんなところに使える? もっとも簡単な利用方法は、前回紹介したmemcachedの代替として利用するというものです。memcached互換プロトコルが実装されているため、memcachedを利用している場合ポート番号を変えるだけでTokyoTyrantに差し替えることが可能です。これだけで簡単にデータの永続性が得られます。 また、テーブルデータベースを利用すれば一つのkeyに対して複数のvalueを持たせることが可能であり、keyだけでなく任意のvalueを条件としてデータの検索を行うこともできます。JOINやGROUP BYといった処理は行えませんが、それ以外のほとんどの検索条件を扱えます。レスポンスはRDBMSに比べて高速なので、アクセス数が多いテーブルをTokyoTyrantのテーブルデータベースに載せ換える、といった利用方法も効果的かもしれません。 具体的な利用シーン memcac

    第3回 様々なデータ型を扱えるTokyoTyrant | gihyo.jp
  • 第3回 Cassandraのデータモデルを理解する | gihyo.jp

    前回までの説明でCassandraのインストールと動かすところまでいきました。今回はCassandraのデータモデルを理解して、実際にデータにアクセスしてみましょう。 データはすべて4次元または5次元の連想配列 Cassandraのデータは非常にシンプルなデータモデルを持っています。データはすべて4次元または5次元の連想配列のようになっています。 4次元の場合は以下の形で値にアクセスします。 [キースペース][カラムファミリ][キー][カラム] そして5次元の場合は以下の形でデータを特定します。 [キースペース][カラムファミリ][キー][スーパーカラム][カラム] Cassandraのデータモデルは以下の4つの概念で成り立っています。 カラム: データの最小単位。実際のキーと値、そしてタイムスタンプを持つ。 スーパーカラム: カラムの集合を扱う単位。 カラムファミリ: カラムまたはスーパ

    第3回 Cassandraのデータモデルを理解する | gihyo.jp
  • 第32回 Encode:日本語だけ扱えればよいのではなく | gihyo.jp

    一般的には推奨されないencodingプラグマ 前回取り上げたencodingプラグマは、簡単なjperl用のスクリプトを移植したい場合には便利ですが、perlunifaqというPerl付属のマニュアルにははっきり「Don't use it.」と書いてあるくらい、一般的には使えないプラグマと認識されています。 前回も見たように、encodingプラグマが対応しているのは、ソースコードに埋め込まれている文字列やそれに類する正規表現、そして標準入力からのデータを指定された文字コードからPerlの内部表現に変換し、標準出力へ出力する際には内部表現を指定された文字コードに変換することだけです。ほかのファイル入出力部分や、コマンドラインから受け取った引数、標準エラー出力などの変換は行わないので、ちょっと凝ったことをしようと思うと、結局「外から入ってきたものはデコード、外に出すものはエンコード」という

    第32回 Encode:日本語だけ扱えればよいのではなく | gihyo.jp
  • PSGI/Plack - [Perl Hackers Hub]

    連載では、第一線のPerlハッカーが回替わりで執筆していきます。記念すべき第1回は、WEB+DB PRESS誌ではVol.2から執筆しており、長らく連載も担当していた宮川達彦さんです。 はじめに PerlでWeb開発をするためのフレームワークは百花繚乱、人気を集めています。稿では、これらのフレームワークが共通して利用するためのインタフェース仕様であるPSGIと、そのエンジンとしての実装であるPlackを紹介します。 PSGIに至る道 PerlとWebアプリケーション開発の親和性 Perlは「インターネットのグルー(糊:のり)言語」とも言われ、CGIによる開発がメインだった1990年代から、Webアプリケーション開発に最も関わりのあるプログラミング言語の一つと言ってよいでしょう。2000年代に入っても、Ruby on RailsPHPなどの他言語からの影響も取り入れながら、Web開発

    PSGI/Plack - [Perl Hackers Hub]
  • ついに出た!最新Perlフレームワーク「Ark」徹底解剖:第1回 Arkって何だ? -Ark が生まれるまで|gihyo.jp ... 技術評論社

    はじめまして。面白法人カヤックの村瀬と申します。ArkというWebアプリケーション作成用のフレームワークを開発しました。今回から4回にわたって、このリリースしたばかりの「Ark」について紹介させていただきます。 Ark(アーク)とは Arkは、Perlで作られたWebアプリケーションフレームワーク(WAF)です。 Arkの特徴としては Catalystに似たインターフェース CGI/FCGI/mod_perlなどさまざまな環境で実用的に動作する CGI用モードの存在 日製であり、日語ドキュメントが充実している などが挙げられます。 Catalystに似たインターフェース Catalystは、Arkと同様にPerl製のWebアプリケーションフレームワークで、現在、Perlのフレームワークでは標準となりつつあるものです。 Arkは開発動機の1つが「CGIでも実用的に動作するCatalyst

    ついに出た!最新Perlフレームワーク「Ark」徹底解剖:第1回 Arkって何だ? -Ark が生まれるまで|gihyo.jp ... 技術評論社
    nkwhr
    nkwhr 2010/06/01