
システムの構築、新しい技術の習得、PythonやDevOpsなどに情熱を注ぐソフトウェア開発者です。現在はチューリッヒを拠点とするビッグデータのスタートアップで働いており、データ分析およびデータ管理ソリューションのためのPythonの技術を磨いています。 1 はじめに Python は開発時間を短縮できるという点で一般的に評価の高い言語です。しかし、Pythonを使って効率よくデータ分析をするには、思わぬ落とし穴があります。動的かつオープンソースのシステムであるという特徴は、初めは開発を容易にしてくれますが、大規模システムの破綻の原因になり得ます。ライブラリが複雑で実行時間が遅く、データの完全性を考慮した設計になっていないので、開発時間の短縮どころか、すぐに時間を使い果たしてしまう可能性があるのです。 この記事ではPythonやビッグデータで作業をする時に、最も時間を無駄にしがちな事柄につ
Zend Frameworkを利用したWebアプリケーションの構築の前に、開発環境を整えます。今回はZend Frameworkのインストールではなく、Zend Frameworkをインストールするための環境を整えます。 Linux/Windows/Mac OS Xでほぼ同じ環境で動作する構成を紹介します。Linux版(CentOS 5)のVMWareイメージは筆者のサイトで公開しています。これと同じ、環境の構築手順を紹介します。 本連載では基本的にLinux(CentOS 5)での環境を前提にZend FrameworkによるWebアプリ開発を紹介しますが、ここで解説する環境をWindowsやMacに構築すれば同じように開発できます。 Zend Frameworkの利用に必要な環境 Zend FrameworkはPHP5用のフレームワークです。当然、PHP5が必要です。Zend_Cont
Python で実装され、その後 Java にも移植されたソートアルゴリズムである TimSort が盛大にバグっていることが発見されました。 このバグがどのようにして発生するのかについては、以下のドキュメントを精査して下さい。 TimSort fails with ArrayIndexOutOfBoundsException on worst case long arrays OpenJDK’s java.utils.Collection.sort() is broken: The good, the bad and the worst case どんなことが起こるのか 通常の利用では想定しえない場所でArrayIndexOutOfBoundsExceptionが発生します。 例えば、以下のようなスタックトレースになります。 Exception in thread "main" jav
こんにちは。技術部の吉川です。 みなさんは、異常なデータを見つけたが、どうしてそのような状態になったのか追跡できず困ったという経験はないでしょうか。 今回は、そんなときにクックパッドで利用されているAuditログについてご紹介します。 Auditログとは クックパッドでのAuditログは特定のデータレコードに対して発生したイベントをコンテキストとともに記録するものです。 一般的に監査ログ、証跡ログといったものがありますが、それらとは多少異なっています。 ここでのイベントとは、あるデータレコードが 作成された 更新・変更された 削除された といったものです。またそれ以外にもログインした、ログアウトした、セキュアな情報が閲覧された、といったイベントも含まれています。 コンテキストは以下のようなものを記録します。 いつ どこで 処理が行われたホスト 何が イベント 何を 対象データの情報 スキー
Photo by Johan Bichel Lindegaard こんにちは。谷口です。 皆さんは、プログラミング教育が盛んになってきていることはご存知でしょうか? 日本でもすでに2012年の新学習指導要領により、中学校の「技術・家庭」において、従来選択科目であった「プログラムと計測・制御」が必修科目となっていますが、意外と知らない方も多いようです。 2020年には日本のWebビジネスの市場規模が2010年時点と比べて4.5倍に拡大すること、またそれによりWeb系企業の雇用者数も150万人増加をすることが見込まれています。(日本の成長を支える産業 「ウェブビジネス」P13、14) 業界が成長していく中で、より多くのエンジニアが必要とされ、その教育・育成は不可欠なものとなっています。 最近は、世界でも多くの国で早いうちからプログラミング教育が実施されており、少なからず国内企業の成長や利益拡大
どうやったら6歳の女の子に「ガベージ・コレクション」や「抽象化」というプログラミングの概念が分かるのか? 女性向けの無料プログラミング・ワークショップとして2010年に始まった「Rails Girls」創始者のリンダ・リウカス(Linda Liukas)さんは最近、子どもたちにプログラミングを教えるための絵本を描いている。主人公は、Rubyという名前の女の子だ。 「フィンランドでは2016年から学校でプログラミングが必修になります。7歳以上、男女問わずです。ですが、これまでは小さな女の子もプログラムをやるべきだ、と言う風になっていませんでした。私は女の子にもプログラミングをやってほしいと思っています。なぜなら、プログラミングやソフトウェアといったものは、もう世界中どこにもあるものですから」 リンダさんが描くのは、プログラミングの概念を日常生活にたとえた一種の喩え話だ。 プログラムの実行には
技評さんから理論から学ぶデータベース実践入門を頂きました。ありがとうございます。 著者の奥野さん 著者は、漢(オトコ)のコンピュータ道で有名な奥野さんです。直接の面識はないものの、データベース設計に悩み調べて行き着いた先が奥野さんが出している情報ということはよくありました。そんなこともあり、心のなかで勝手にデータベースの師匠として崇めています。そんな奥野さんが扱うテーマは、MySQLではなくデータベースです。個別の製品の話ではなく、データベース理論です。実践入門と銘打っているだけあり、データベース設計の具体的なやり方、考え方が随所にあります。 何について書いているのか? ポイントは、説明とやり方を集めたノウハウ集ではなく、設計の考え方の指針を示している点です。例えば、ID設計の話。永遠の論争であるナチュラルキーとサロゲートキー、どちらが適切かという命題があります。それぞれの利点と問題点を上
多くの関数型プログラミングに関する記事が教えてくれるのは、抽象的な関数型のテクニックです。つまり関数合成やパイプライン、高階関数などです。この記事では違います。ここでは、プログラマが毎日書く、命令型で非関数型のコードの例を示し、それを関数型の形式へ書き換えます。 最初のセクションでは、短いデータ変換のループを取り上げ、map関数やreduce関数に書き換えていきます。2つ目のセクションではより長いループを取り上げ、ユニットに分解し、それぞれのユニットを関数型に書き換えます。3つ目のセクションでは、連続した長いデータ変換のループを関数型のパイプラインに分解します。 ここではPythonでの例を取り扱います。というのも多くのプログラマはPythonを読むのは簡単だと思っているからです。多くの例では、mapやreduce、パイプラインなどの多くの言語に共通する機能を例示するため、Python的な
TLSは特定のアプリケーション層プロトコルに依存しないため、HTTP以外にも多くのプロトコルにおいて採用され、クレジットカード情報や個人情報、その他の機密情報を通信する際の手段として活用されている。 既存のアプリケーション層プロトコルでTLSを利用する場合、大きく2つの適用方式が考えられる。まずひとつは、下位層(通常はTCP)の接続を確立したらすぐにTLSのネゴシエーションを開始し、TLS接続が確立してからアプリケーション層プロトコルの通信を開始する方式である。もうひとつは、まず既存のアプリケーション層プロトコルで通信を開始し、その中でTLSへの切り替えを指示する方式である。切り替えコマンドとしてSTARTTLSが広まっているため、この方式自体をSTARTTLSと呼ぶこともある。 前者はアプリケーション層のプロトコルをまったく変更しなくてすむことが利点である。その反面、平文で接続を開始する
おさらい 第29回では、非同期処理を実現する方法としてReactorパターンを紹介しました。 一般的に非同期処理として使われているスレッド処理と違い、Reactorパターンはシングルスレッドで動作し、スレッド間のデータの共有に悩む必要はありません。しかしReactorパターンはコードが直感的ではなく、慣れていない人には取っつきにくいものであることも確かです。 そのため、Reactorパターンを意識せずに非同期処理を実現するためのライブラリがRubyにはたくさん用意されています。 今回は、その中でもよく使われているEventMachineについて簡単に説明します。 EventMachineとは EventMachineとは、Reactorパターンを利用して非同期処理を実現し、高レベルなネットワークインターフェースを提供するライブラリです。 複雑なReactorパターンによる処理はブラックボッ
先週に引き続き、今週はC言語以外の言語や開発をサポートするための、いくつかの機能を紹介します。 scratchバッファでEmacs Lispを使ってみよう ご存じの通り、Emacs LispはEmacsで使われているLispの方言です。EmacsはC言語で書かれたコア部分以外のほとんどがこのelispによって実装されており、ユーザはelispによってEmacsそのものを拡張することができます。 Emacsの設定ファイルである.emacsもelispのプログラムそのもので、Emacsは.emacsに書かれたコードを評価することで、設定を行っています。 といっても、そんなに難しいものではありません。Emacsを起動した時に、最初に開かれるバッファ *scratch* は、デフォルトでメジャーモードが lisp-interaction-mode になっており、このモードではelispの式をその場
こんにちは、太田です。今回はGoogle Chrome拡張に使えるHTML5関連技術の3回目をお送りします。 前々回はcanvas、ドラッグ・アンド・ドロップ、前回はECMAScript5やCSS3の一部を取り上げましたが、今回はHTML5関連APIのWeb Storageと、HTML5とは外れますが、Desktop Notificationsを紹介します。Web StorageはHTML5関連の中でもIE8でサポートされているなど、実装が進んでいるAPIの一つです。Desktop Notificationsはウェブページや拡張からユーザーに積極的な通知を出すことができるAPIです。MacではGrowlというアプリケーションが有名ですが、Growlに相当する機能をブラウザベースで実現しています。 Web Storage Web Storageはブラウザ上で動作するキーバリューストアです。J
SQLインジェクション脆弱性を狙った大規模な攻撃が繰り返し行われ、数万から数十万ページが改竄される事件が何度も発生しています。SQLインジェクションは簡単に対策できる脆弱性ですが、未対策のアプリケーションが多く利用されています。外部からの脆弱性の検出も容易であるため、現在でもWebアプリケーション脆弱性の代表的存在です。 SQLインジェクション脆弱性が無くならない理由には以下のようなものが考えられます。 過去のコードやアプリケーションの再利用 基本的なセキュリティ知識不足 セキュアコーディングプラクティスの未実施 コード監査の不在 SQLインジェクション脆弱性の発見だけを目的にコード監査を行うことはあまりありませんが、SQLインジェクション脆弱性のコード監査は比較的簡単です。MySQLモジュールまたはPostgreSQLモジュールを利用している場合を例に紹介します。 本題に入る前にSQLイ
本連載では第一線のPerlハッカーが回替わりで執筆していきます。第2回は、Japan Perl Association代表理事の牧大輔さんで、テーマはAnyEventです。 はじめに 昨今のPerl界で最も熱い話題がイベント駆動プログラミングです。イベント駆動プログラミングはいわゆる「リアルタイムWeb」などと呼ばれる、大量のデータや接続をさばきつつも更新通知の速さが重要となるアプリケーションでは必須技術で、今後のエンジニアにとって最も重要な知識の一つと言えるでしょう。 イベント駆動プログラミング自体はPerlでも以前からさまざまな用途に使われてきましたが、それがまた見直されているのは、従来のイベント駆動プログラミング用ツールキットの使いやすさをはるかに凌駕するAnyEventというモジュールが成熟期を迎えたためです。 イベント駆動プログラミングとは AnyEventの解説に入る前に、簡単
- + 最近の小学校では、「お父さん・お母さんの名前をグーグルで検索してみましょう」という、世にも恐ろしい授業があるらしい。・・・。 — 丹 洋介 (@yosuke_tan) January 25, 2015
一見Emailアドレスにマッチする正規表現を組み立てるのは簡単そうに思えますが、RFC 5322に厳密に準拠した正規表現を創りだそうとするととんでも無い努力が必要となるようです。 「Email Address Regular Expression That 99.9% Works」は、様々なプログラミング言語ごとに、Emailアドレスに99%マッチする正規表現を掲載したサイトで、例えばPerl 5.10より前のバージョンのPerl用として、掲載されている長大な正規表現を見れば、その難易度の高さを確認することができます。 正規表現にはなんの解説もなくどのような意図をもって作られたのか説明はありません(よって99%マッチするかどうかは本当のところは不明)。ちなみに日本語で読める貴重な情報「Perlメモ」では、「perl5.6.0以前の perl ではメールアドレスの正規表現を正確に記述すること
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く