orangain flavor

じっくりコトコト煮込んだみかん2。知らないことを知りたい。

Webサイトのクローラビリティをチェックする

これはクローラー/スクレイピング Advent Calendar 2014の18日目の記事です。 Webサイトをクローリング、スクレイピングしたいと思ったとき、はじめに何をするでしょうか? 私はとりあえずブラウザの開発者ツールでDOMを覗きますが、その後robots.txtや利用…

クローラーをデーモンとして動かす ― Scrapyd

この記事はクローラー/スクレイピング Advent Calendar 2014の12日目の記事です。 ScrapyはPythonにおけるクローリング・スクレイピングのフレームワークとして有名ですが、Scrapydという興味深い機能があるので今日はこれを紹介します。 Scrapydはその名の…

Pythonでクローリング・スクレイピングに使えるライブラリいろいろ

2016-12-09追記 「Pythonクローリング&スクレイピング」という本を書きました! Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド-作者: 加藤耕太出版社/メーカー: 技術評論社発売日: 2016/12/16メディア: 大型本この商品を含む…

#isucon 2014予選の延長戦をやってみた

予選の時間内では足りてないことばかりだったので、もう少し試行錯誤することにしました。 #isucon 2014の予選をほぼ一人で戦うハメになった話 - orangain flavor 目標は50000点、できれば60000点出したい。 予選終了時 Python実装 DBはRedisのみを使う Cook…

#isucon 2014の予選をほぼ一人で戦うハメになった話

AMI提出した!2人目が起きたのが14時、3人目は17時という厳しい状況の割には頑張ったと思う。10位には入れなかったけど。めっちゃ楽しかったー!運営の方、ありがとうございました #isucon— かと (@orangain) 2014, 9月 28 まとめ リモートでタイムゾーンが…

プロフェッショナルのための実践Heroku入門 の紹介

以前公開した、 The Twelve-Factor Appの日本語訳が書籍に収録されるということで、一冊頂けました。ありがとうございます。せっかくなので簡単に紹介します。 Herokuの哲学 私が初めてHerokuを触ったとき*1に感動したのはそのオープンさです。Heroku独自の…

PyCon JP 2014に参加しました

2014年12月23日 編集:資料・動画の埋め込みは重かったのでリンクにし、いくつかの資料へのリンクを追加しました。 毎回行きたいと思いながらも用事があって行けなかったPyConに初めて参加しました。 感想 Kenneth Reitzさんによる1日目の基調講演は、言語、…

RequireJSを始めて戸惑ったこと

公式のGetting Started単純すぎでは? 自作のhelper/util.jsをAMD使って書いてるような意識高い人は、今さらGetting Startedを読まないと思うのです。。 Examplesからリンクされている以下のサンプルを眺めるのがオススメです。 Simple one page app Multipa…

Amazon S3のUS Standardリージョンって何?

aws

EC2などのサービスでは US East (Northern Virginia) というリージョンが存在しますが、S3だけは US East の代わりに、US Standard というリージョンが存在します。何故なのか気になるのでちょっと調べてみました。 AWS公式資料から US Standardへのリクエス…

Heroku上のDjangoアプリで静的ファイルをS3から配信する(後編)

前編 までで静的ファイルをS3から配信することができました。しかし、実際にHerokuにpushしてみると、毎回全ファイルがアップロードされてしまい、非常に時間がかかります。 原因はこうです。collectstaticはファイルのタイムスタンプを比較してファイルが変…

Heroku上のDjangoアプリで静的ファイルをS3から配信する(前編)

HerokuにDjangoアプリケーションを置いて、静的ファイルもHerokuから配信した場合、USまでのレイテンシがあるので1ファイルごとに結構な時間がかかります。 試しに同じアプリケーションをさくらVPS(大阪)と、Heroku(US)に置いた場合、さくらでは 30ms〜1…

Rubyによるデザインパターンを読んだ

恥ずかしながら10年以上プログラミングをやっていて、今までちゃんとデザインパターンを勉強したことがありませんでした。 それぞれのパターンはなんとなく知っているけど、ちゃんと理解できてはいないという状態でした。 デザインパターンを勉強しようとし…

Mac OS X 10.9.2でGitHubにアクセスするとサーバー証明書のエラーが発生する場合の解決策

問題 Mavericks の最新のアップデート(10.9.2)をインストールした後、Google ChromeでGitHubにアクセスした時に、SSLサーバー証明書のエラーが表示されるようになりました。 このように「実際の github.com に接続できない」と表示されます。 アドレスバー…

Python/FlaskアプリからOAuthでGitHub APIを使う

このようなサンプルが意外と見つからなかったので作りました。 GitHub API GitHubはWeb API を提供しており、リポジトリやユーザーなどをAPI経由で取得・操作することができます。 執筆時の2014年2月現在では、v3とbetaの2つのバージョンがあり、デフォルト…

unattended-upgradesはインストールしただけでは動かない

ということを知らなかったので、Debian/Ubuntuでの自動アップデートについて改めて調べてみました。 動作を確認した環境は、Ubuntu Server 12.04 LTS x86_64です。 自動アップデートを有効にする 結論から言うと、以下のようにインストールすれば有効になり…

iTerm2でSolarizedを使うと一部の色が灰色になってしまう問題の対処法

iTerm2でSolarizedの配色を使う場合、以下の記事が参考になります。 のびーの食っちゃね~だらだらな日々。食っちゃ寝生活してても意外と平気だったりする。 : ターミナル (iTerm2) な Vim を Solarized カラースキーマで! ターミナルをiTerm2に換えた: 黄…

Ruby製アプリじゃなくてもTurnipで自動受け入れテストがしたい

Python製のWebアプリケーションの自動受け入れテストをしたくて、調べてみました。 Ruby界隈だと、最近ではCucumberに代わってTurnipというツールが流行っているみたいなので試してみました。 (c) .foto project 自動受け入れテスト用のライブラリ Rubyで自…

PythonとかScrapyとか使ってクローリングやスクレイピングするノウハウを公開してみる!

2016-12-09追記 「Pythonクローリング&スクレイピング」という本を書きました! Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド-作者: 加藤耕太出版社/メーカー: 技術評論社発売日: 2016/12/16メディア: 大型本この商品を含む…

HerokuにDjangoアプリケーションをデプロイしてもcollectstaticが実行されないことがある

【2014年6月3日追記】この後、ビルド時にデフォルトで環境変数を参照できるようになったため、現在この問題は発生しません。 user-env-compileも廃止されました。 See: App environment available in all builds | Heroku Dev Center はじめに Heroku では、…

2013年を振り返って

2013年が終わるので、振り返っておきます。今年は以下の点が良かったです。 サービスの開発を継続できた 継続的デリバリを実践できた ブログ記事の執筆、翻訳ができた 良かったこと1:サービスの開発を継続できた 以前から趣味でWebサービスを作ったりしてい…

はてなブログでソースコードの配色をSolarizedにする

はじめに 以前から自分のブログに書いたソースコードが読みにくいと感じていました。他所のソースコードが読みやすいブログを眺めていたところ、 Solarized という有名な配色があることを知りました。 良さげだったので、このブログのソースコードの配色をSo…

Chef SoloでFluentd + Elasticsearch + Kibana3をインストールする

はじめに Fluentd + Elasticsearch + Kibanaが良いという話をよく聞くので、Chef Soloでサクッと環境を作ってみようと思ったら意外と苦戦したので記録を残しておきます。 結論 Kibana 3を簡単にセットアップできるChefリポジトリを作成しました。 https://gi…

Dockerを使ってJenkinsのジョブごとにテスト実行環境を分離する

はじめに JenkinsでJVM上で動かない言語(PythonやRubyなど*1)を使っていると、ジョブごとに環境が分離されていないことが問題になる場合があります。 Pythonにおける virtualenv やRubyにおける Bundler を使えば、ジョブごとに利用するライブラリを分離す…

Djangoでメモリに乗らないサイズのDBを扱うときに気をつける点

はじめに Djangoでメモリに乗らないサイズのデータベースを扱うときに、気をつけるべきポイントをまとめます。メモリを大量に消費していつまで経っても処理が終わらなかったり、OOM Killerに殺されたりといった悲しい結末を回避できたら幸いです。 データ量…

Groongaで複数のトークナイザを使い分ける方法

はじめに 全文検索エンジン Groonga を使っていると、トークナイザによる検索結果の違いを比較したくなる時があります。 しかし、検索時に利用するインデックスを明示的に指定する方法は、現時点ではドキュメント化されていないようです。 4.7.2. インデック…

Opscode Community Cookbookをオーバーライドする方法

はじめに Chefを使っていてOpscode Community Cookbookに不満がある場合、フォークするのではなくオーバーライドすべきだと言われています。 ChefのCookbookのベストプラクティス | Ryuzee.com ChefConf 2013: Beginner Chef Antipatterns しかし、オーバー…

Herokuの中の人が書いたWebアプリケーション構築の方法論「The Twelve-Factor App」の日本語訳

2016-01-14追記: 日本語版は随分前に本家にマージされたので、記事中のURLも変更しました。 The Twelve-Factor App はHerokuの中の人 Adam Wiggins氏によって書かれた、モダンでスケーラブルかつ継続的デプロイ可能なWebアプリケーションを構築するための方…

FabricとCuisineを使って簡単に永続的なSSHトンネルを設定する

はじめに インターネット越しにサーバー間で通信する際、通信内容を暗号化する方法としてSSHのトンネル(ポートフォワーディング)があります。autossh を使うと簡単にSSHトンネルを作れますが、サーバー間で 常時使う トンネルを作るための設定作業は意外と…

さくらVPSでLXCを使って安価に複数台構成を実現する

2013年6月7日 22:04更新: Upstartのデフォルトの設定ファイルを書き換えない方法に変更しました。hitoさんありがとうございます。 lxcなどのバージョンを記載しました。 はじめに Chefを使っていると、役割やサービスごとに環境を分離したくなります。 しか…

金融機関の口座集約アプリを少しでも安全にするために

はじめに 金融機関の口座集約アプリの危険性について - プログラマになりたい という記事が話題になっていたので、日頃からアカウント・アグリゲーション系のサービスについて考えていることをまとめておきます。 アカウント・アグリゲーション・サービスの…