読者です 読者をやめる 読者になる 読者になる

orangain flavor

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

Glance NewsというAndroidアプリを公開しました

Glance Newsはサッと見るだけで世の中の流れをつかむためのニュースアプリです。 NHK NEWS WEBのトップニュース7つを表示するだけの機能を持っています。 デフォルトでは毎日4回、朝8時、昼12時、夕方18時、夜21時に更新され、通知が表示されます。 Android…

Pythonクローリング&スクレイピングの増刷が決まりました

おかげさまで売れ行き好調のようで、Pythonクローリング&スクレイピングの増刷が決まりました。 scraping-book.com 現在Amazonでは新品の紙の本が品切れで、在庫のステータスも表示されない状態になっていますが、2月1日以降は順次在庫が復活するとのことで…

RequestsとBeautiful Soupでのスクレイピング時に文字化けを減らす

多様なWebサイトからスクレイピングする際、Webサイトによっては文字化けが発生することがあります。 RequestsとBeautiful Soupを組み合わせる場合に、なるべく文字化けを減らす方法を解説します。 Beautiful Soupはパーサーを選択できますが、ここではhtml.…

2016年を振り返って

2016年を振り返って 今年はやはり書籍「Pythonクローリング&スクレイピング」を出版できたのが大きかったです。お陰様で良い評価をいただけているようで、ありがたいことです。 scraping-book.com 2013年の振り返りの時点で、やりたいことの1つとして「ブロ…

PhantomJSとか使わずに簡単なJavaScriptを処理してスクレイピング

この記事はクローラー/Webスクレイピング Advent Calendar 2016 16日目の記事です。 JavaScriptが使われているWebページからスクレイピングする場合、PhantomJSなどのヘッドレスブラウザーを使うのが一般的です。 ただ、ちょっとしたJavaScriptを解釈できれ…

Pythonクローリング&スクレイピングの電子書籍版も12月16日発売です

Pythonクローリング&スクレイピングの電子書籍版も紙版と同じく12月16日発売となりました。 Gihyo Digital Publishing:PDF/EPUB(DRMフリー) Pythonクローリング&スクレイピング ―データ収集・解析のための実践開発ガイド― | Gihyo Digital Publishing … …

書籍を書きながらOSSに貢献した話

Pythonクローリング&スクレイピングでは、クローリング・スクレイピングやデータ解析のための様々なライブラリを紹介しています。 書籍でOSSのライブラリを紹介すると、そのライブラリに貢献する機会やインセンティブが生まれると考えています。 書籍で紹介…

Pythonクローリング&スクレイピングの見本が届きました

昨日Pythonクローリング&スクレイピングの見本が届きました。 表紙はきれいな青色と印象的なタイポグラフィで気に入ってます。 横から見ると、実際のWebサイトを対象としてデータを収集・解析する5章と、Scrapyを扱う6章に多くのページを割いていることがわ…

書籍執筆でお世話になったツール 〜Re:VIEW, textlint, prh, goemon, GitHub, CircleCI〜

「Pythonクローリング&スクレイピング」という書籍を執筆しました。執筆にあたって色々なツール・サービスのお世話になったので、記録を残しておきます。 大まかな流れは、以前の記事に書いたとおりです。ツールの選定は2015年1月頃(textlintとprhは2016年1…

「Pythonクローリング&スクレイピング」という本を書きました

2016-12-23更新: 電子書籍書籍版の情報を更新しました。電子書籍版も好評発売中です! Pythonを使ってクローリング・スクレイピングを行い、データを収集・活用する方法を解説した書籍です。 Pythonの基本から、サードパーティライブラリを使ったスクレイピ…

画像内の秘密情報をOCRでマスクするコマンドmasecretを作った

2017-02-05 更新 v0.2.0へのバージョンアップに伴って、使い方を更新しました。 スクリーンショットを撮影していると、しばしばマスクしておきたい値が存在します。数枚ならば手作業で塗りつぶしてもいいですが、手順書を作成するようなときは枚数が多くなっ…

Python 3をサポートしたScrapy 1.1が公開されました

2016-12-09追記 「Pythonクローリング&スクレイピング」という本を書きました!Scrapyについても1つの章を割いて解説しています。 Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド-作者: 加藤耕太出版社/メーカー: 技術評論社発…

Re:VIEWのDash用Docsetを作った

Re:VIEWはドキュメント作成のためのツールで、DashはOS Xでドキュメントを閲覧するためのビューアーです。 タイトルの通り、Re:VIEWのFormat Guideを閲覧できるDash用Docsetを作りました。 使い方 DashのPreferences > Downloads > User Contributedから検索…

2015年を振り返って

2015年を振り返って 今年はブログなどでのアウトプットが少なかったですが、一応活動していました。 昨年のMBSハッカソンで優勝したことで、ITを活用した30分のテレビ番組の企画に参加して、その中で使うアプリの開発を行いました。テレビ番組の撮影の裏側も…

PythonでブログのHTMLから本文抽出 2015

2015-12-20 19:14追記: readabilityの説明を追加・修正しました。 Webページをクロールした時に、ざっくりと本文 (ページ内の重要なコンテンツ) のみを抽出できると便利です。 Google検索すると、特に日本語だとExtractContent以外の情報があまり見つかりま…

JavaScriptレンダリングサーバーSplashでスクレイピング

これはクローラー/Webスクレイピング Advent Calendar 2015の9日目の記事です。 本記事では、Scrapinghub社*1が開発しているSplashというオープンソースソフトウェアを紹介します。 github.com JavaScriptを使ったページからスクレイピングする方法としては…

Scrapy 1.0が公開されました

Pythonの有名なWebスクレイピングフレームワークのScrapyがバージョン1.0になりました。*1 0.24からの主要な変更点は下記のとおりです。 SpiderでItemの代わりにdictを返せるようになった Spiderごとにsettingsを設定できるようになった Twistedのloggingの…

LinuxディストリビューションにおけるPython 3デフォルト化の流れ

2015年6月2日修正:henrichさんのコメントを受け、Debianの記述を修正しました。 最近のLinuxディストリビューションにおいてPython 3がデフォルトになってきているという話をチラホラ聞くので、状況を調べてみました。 結論 PEP 394にディストリビューショ…

Joel on Softwareを読んだ

元MicrosoftのJoel氏が書いたエッセイ集です。 自分の中で感じていてもうまく言語化できなかったことが明確に言語化されていて素晴らしかったです。 Joel on Software作者: Joel Spolsky,青木靖出版社/メーカー: オーム社発売日: 2005/12メディア: 単行本購…

ハッカーと画家を読んだ

Y Combinator創業者のポール・グレアム氏が書いたエッセイ集です。 ハッカーと画家 コンピュータ時代の創造者たち作者: ポールグレアム,Paul Graham,川合史朗出版社/メーカー: オーム社発売日: 2005/01メディア: 単行本購入: 109人 クリック: 4,884回この商…

UNIXという考え方を読んだ

もともとUNIXの考え方は理解しているつもりでしたが、ちゃんと言語化されているものを読んだことがなかったので読んでみました。新しい発見があった箇所や非常に頷ける箇所をピックアップします。 UNIXという考え方―その設計思想と哲学作者: Mike Gancarz,芳…

プログラミングしながら運動できるエアロバイク FitDesk X-2.0を買った

2016-01-16追記: 購入した当初は高いと思っていたサドルですが、座り方で多少改善されるようです。身長160cmの妻でも漕げています。 平日の家に帰ってご飯を食べてから寝るまでの時間はコードを書いていることが多いのですが、まったく運動しないことが気に…

Re:VIEWとDockerとCircleCIで原稿を継続的インテグレーション

Re:VIEW で執筆する原稿を継続的インテグレーションしたかったので、以下の図のような仕組みを作りました。 ローカル執筆環境の前提条件 Docker 1.3以降がインストールされている Re:VIEW形式の原稿のフォルダがある Re:VIEWやLaTeXはDockerイメージのものを…

2014年を振り返って

2014年を振り返って 2014年は対外的に評価される機会があって嬉しかったです。 IBM Bluemix Challengeで賞をもらった IBM developerWorks 日本語版 : IBM Bluemix Challenge: 概要 Webページには載ってませんが、美術館を探したり記録をメモできるモバイルア…

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 しかし、オーバー…