サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
災害への備え
rudi.hatenablog.com
エキスパート Python プログラミング読み終わりました。これは良本! エキスパートPythonプログラミング 作者: Tarek Ziade,稲田直哉,渋川よしき,清水川貴之,森本哲也出版社/メーカー: KADOKAWA/アスキー・メディアワークス発売日: 2010/05/28メディア: 大型本購入: 33人 クリック: 791回この商品を含むブログ (90件) を見る pythonは趣味のプログラミングで使っているだけで、業務で本格的に使ったことはありません。なので、ずっと適当に書いてました。それでも問題ないのがPythonの良いところなのですが、この本を読んでいろいろ勉強させてもらいました。 第二章 構文ベストプラクティス 実はリスト内包表記は使ったことがないんです。簡潔過ぎてわけが分からなくなるんです。でも、実行効率が上がると分かったのでこれからは積極的に使っていこうと思います。
文字列を指定の文字数ごとに改行で、nkfで禁則処理を考慮した改行ができることを知りました。ありがとうございます。 元の id:rx7さんの記事では具体的な禁則処理は英文だけでしたが、日本語でも禁則処理が出来るか試してみました。 %cat | nkf -f10 あいうえお、かきくけこ (^d を打つ) あいうえお、 かきくけこ %cat | nkf -f10 あいうえお」かきくけこ (^d を打つ) あいうえお」 かきくけこ %cat | nkf -f10 あいうえお、、かきくけこ (^d を打つ) あいうえお、、 かきくけこちゃんとできているみたいです。これはすごい。いろいろな下処理に使えそうです。 具体的には? ついでにどのぐらいまでの禁則処理が出来るのかを調べてみました。 禁則処理についてというページを見ると、禁則処理には以下の三種類があるそうです。 行頭禁則 句読点、区切りの記号、拗
前回の記事で報告したように、fluent-plugin-pghstoreでログをPostgreSQLに貯めることができました。 次は可視化と監視を行います。ここで、最近使ってみているPandora FMSを使います。 pluginを準備 まずは以下のスクリプトを保存し、pandora/etc/pandora/plugins以下に置きます。DBやTABLEは適宜書き換えてください。また、hostnameやportも適宜変更でお願いします。 上の方にあるSQLは過去5分間のcodeが2XXや3XXなどの割合を出してくれます。その後、PandraFMSでのplugin形式のXMLにするように整形します。 ちなみに、一つのSQLで複数を同時にcount()する方法については 複数同時にcount() をどうぞ。 #!/usr/bin/env sh DB=logdb TABLE=apache_log
fluentdをPostgreSQLのhstoreに書き出せるようにした、 fluent-plugin-pghstore というpluginを作成しました。 github: https://github.com/shirou/fluent-plugin-pghstore rubygems: https://rubygems.org/gems/fluent-plugin-pghstore hstoreについては 前記事 を参照してください。 install gem install fluent-plugin-pghstore apache_log 例えば、tail pluginを使ってapacheのaccess logをhstoreに出すようにする場合、こんなコンフィグを書きます。 <source> type tail path /var/log/apache/access_log_sym
それPostgreSQLでできるよ、第二弾。 PostgreSQLにはhstoreという拡張があります。 これはkeyとvalueの対の集合を単一のレコードに格納することが出来るものです。 つまり、Key-Value-Storeですね。 これを使うと通常のテーブルのようにキーを事前に定義しておく必要がありません。 hstoreについては以下の資料をみてください。特に後者は今回書いていない、いろいろな演算子・関数を紹介していますのですごく参考になります。 hstore ログ解析にhstoreを利用してみよう そして、今回の記事はherokuのこの記事を元にしています。 https://postgres.heroku.com/blog/past/2012/3/14/introducing_keyvalue_data_storage_in_heroku_postgres/ herokuはpost
keepassというパスワード保存ツールがあります。Windows/Linux/Mac/Androidと幅広いプラットフォームで使えるのが魅力です。 これのLinux版はkeepassxという名前であるのですが、ビルドにはQTが必要で、ターミナルからは使えません。というわけで、ターミナルから使えるツールが欲しいな、と思い、調査と実装をしてみました。 ヘッダの構造 ヘッダは124byte。 0123 4567 89AB CDEF 0123 4567 89AB CDEF +----+----+----+----+---------+----+----+ |sig1|sig2|flag|ver | seed_rand | +----+----+----+----+----+----+----+----+ | encription IV |gron|entn|checksum | +----+--
pyfesで「それPostgreSQLでできるよ」ってつぶやいた手前、ちゃんと試さなければなりません。 PostgreSQL 9.1から外部データラッパ(FDW) という規格がサポートされました。 またさらに、このFDWを使ってTwitterのAPIを叩いて結果をテーブルとして出 してくれる twiter_fdw という拡張が 公開されています。 準備 % sudo apt-get install libcurl4-openssl-dev (libjsonもいるかも) % curl -O http://api.pgxn.org/dist/twitter_fdw/1.0.0/twitter_fdw-1.0.0.zip % unzip twitter_fdw % cd twitter_fdw % make % sudo su # export USE_PGXS=1 # make install
MediaPlayerで mp.setDataSource(filePath) としてローカルのMP3ファイルを再生させようとしたら、 W/MediaPlayer( 738): info/warning (1, 26) I/MediaPlayer( 738): Info (1,26) Command PLAYER_SET_DATA_SOURCE completed with an error or info PVMFErrNotSupported E/MediaPlayer( 738): error (1, -4)というエラーが出た。 もちろん、filePathは正しいし、ちゃんとファイルの実体があることも確認済。 http://blog.pocketjourney.com/2009/12/27/android-streaming-mediaplayer-tutorial-updated-
最近fabricを使っていろいろ作業しています。 で、踏み台サーバごしにアクセスする必要があるマシンがあるのですが、fabricの中でトンネルを作って作業したいなと思いました、ちょっと調べてみると https://gist.github.com/856179 にcodeがありましたので、それを利用させてもらいました。ありがとうございます。 具体的には以下のような感じにしました。 #!/usr/bin/env python # -*- coding: utf-8 -*- from fabric.api import run, env # 事前にtunnel.pyを https://gist.github.com/856179 から入手 from tunnel import make_tunnel def staging(): env.hosts = ['example1'] def get_
TinkererはSphinxを利用して作られたblogツールです。Sphinxを使っていますのでreStructuredText形式で書くことができます。また、blockdiagをはじめとするSphinxの豊富な拡張機能を使うことができます。 今回はtinkererで作成したblogをbitbucketでホスティングしてみます。 bitbucketでのホスティング bitbucketでは .bitbucket.org という名前のレポジトリを作成し、そこにindex.htmlファイルを置くことでwebページのホスティングができます。これは普通のレポジトリですので、push/pullできますし、履歴管理も出来ます。 そして、実はこのレポジトリはprivateでも構わないのです。privateにすることで、draftなどを隠すことができます。あ、githubと違ってbitbucketはpri
今の会社に入ってからPostgreSQLを使い始めました。というわけで、初心者ですがPostgreSQL アドベントカレンダー 2011に参加してみます。 さて、PostgreSQL 9.1からSQL/MED規格の一部である 外部データラッパ (FDW:Foreign Data Wrapper) がサポートされました。すでに PostgreSQL アドベントカレンダー 12月3日分にて、板垣さんが WebAPIをfdwから叩いてます。この記事では www_fdw という既存のfdwを利用する方法でしたが、今回は実際に自分でfdwを作ってみます。 fdwはAPIを6個程度書くだけで良いのでそれだけでもかなり書きやすいのですが、いかんせんCで書く必要があります。そこで、 multicorn を使ってpythonでfdwを書いてみました。 なにを題材に書こうかなと思ったのですが、Pure Pyt
python2ではsetuptoolsやdistutilsがありますが、python3では "packaging"という新しいパッケージ用ライブラリが搭載されます。 pysetup3はこのpackagingを使うためのコマンドです。これは、setuptoolsやdistutilsを使うためのコマンドがpipやeasy_installである、という関係と同じです。 まとめるとこういう関係になります。(正確にはちょっとずれていますがまあこんなものかと) ライブラリ ツール python3.2まで distutils/setuptools/distribute easy_install/pip/buildout python3.3〜 packaging pysetup3 なお、packagingはpython2.4〜3.2ではdistutils2という名前でバックポートされ、サードパーティパッケ
SDK Tools r8とADT8.0.0から、Proguardを導入するのが簡単になりました。 しかし、Export Android applicationをしても、以下のようにクラスが見つからないよ、と出てきてproguardが実行できませんでした。 [2011-02-05 22:41:55 - ] Proguard returned with error code 1. See console [2011-02-05 22:41:55 - ] Warning: org.apache.http.entity.mime.FormBodyPart: can't find referenced class net.jcip.annotations.NotThreadSafe [2011-02-05 22:41:55 - ] Warning: org.apache.james.mime4j.c
Beautiful SoupはHTMLやXMLをparseしてくれるパーサーライブラリです。でも、Beautiful Soupは単なるパーサーじゃなくてちょっと賢い奴なんです。 今回、このBeautiful Soupのドキュメントを翻訳しました。 http://www.tdoc.info/beautifulsoup/ 下に軽く紹介していますが、詳しくはこのドキュメントをご覧ください。 Beautiful Soupをざっくり紹介 Beautiful Soupがどういうやつかって?例えばこんなHTMLがあったとしましょう。 <HTML> <body> 改行<br> したいよね <br/> <! --あれ、空白が入ってるちょっと変なコメント--> <p> bodyが閉じてないよ? </html> 結構変なHTMLですよね。でも、巷にはこういうのも結構あるんです。で、これをtest1.htmlだと
http://nookdevs.com/NookTouch_Rooting の通りです。詳しくは説明しません。あしからず。 特に問題はおきませんでしたが、VMWare上のUbuntuでやろうとしたらUSBカードリーダの認識がホストのWindowsと取り合いになったりとかがありました。最初からMacでやればよかった。 USBケーブルはUSBストレージモードでしかつながらないので、Wirelessでつなげます。 filesystem shellを取ってmountと打つと、 /dev/block/mmcblk0p5 /system ext2 ro,errors=continue 0 0とread-onlyなことが分かります。これは、 % mount -o rw,remount -t ext2 /dev/block/mmcblk0p5 /systemと打って、read-writeにします。これでい
Twitterで@voluntas さんがつぶやいていた landslide を使ってみると、結構いいことが分かりました。 サンプルを作りましたので、ここに置いておきます。 説明 左右の矢印キーでスライドを切り替えます 元ファイル 画像の扱いに問題があったりしますが、現在も開発されているようですので、解決していくのではないでしょうか。 インストールも簡単ですし、しばらくはこれでスライド作ってみることにします。 .... blockdiag directiveを追加してみるとか、いいかも?
本当はPython Mini Hack-a-thonでやろうと思ってたネタだったのですが、その前にちょっと準備しておくかーと思ってたらいつのまにか結構やっちゃってたんでまとめておきます。 Whooshとは whooshはPython純正の全文検索エンジンのライブラリです。Javaで書かれた全文検索エンジンであるLuceneの影響をかなり受けています。というか、はっきり言ってLuceneとほぼ同じです。 今回はこのwhooshを使って手元のMLを検索してみる、全文検索ツールを試しに作ってみました。 schemeの作成 Whooshでは検索するためにIndexを作成しますが、それにはまずSchemeを定義します。 Indexにはtitleとかurlとか、ドキュメントそのもの以外の情報も格納できます。Schemeとは、Index中のドキュメントに格納されてるフィールドの定義です。どんなフィールド
Honeycomb(3.0)から使えるというFragmentsですが、これを1.6以上でも使えるようにするstatic libraryが公開されました。 http://android-developers.blogspot.com/2011/03/fragments-for-all.html ぼくが持っているのはあのIS01で、(いろいろしない限り)1.6しか動きません。というわけで、このライブラリを早速使ってみることにしました。 libraryのインストール SDKのUpdate マネージャからダウンロードします。"Android Compatibility package, revision 1" です。 extras/android/compatibility/v4/android-support-v4.jar をbuild pathに追加します。 android.support.v
2011年1月29日に行われた、PyConMini JPにて、IanさんがSphinxのi18n機能の紹介をしてくださいました。(http://www.slideshare.net/IanMLewis/sphinx-11-i18n) というわけで、実際に試してみました。まずは英語->日本語をやってみます。 なお、環境は sphinx-1.1pre GNU gettext-tools 0.18.1 FreeBSD-8.1R で行いました。LinuxなどではLOCALEの扱いが違うかもしれませんが、おそらく同じです。 1. buildで.potファイルを作成 % make gettext # build/locale/index.pot ができる 2. poファイルを作る % cd build/locale/ % msginit --locale=ja --input=index.pot #
Sphinxを使って論文っぽい文章を書くときのtipsをまとめておきます。 追記: この内容は Sphinx逆引き辞典により詳細にして載っています。 用語を書く際はreplaceを使う .. |hoge| replace:: ほげらこう定義しておくと次からは |hoge| とするだけで、ほげらと自動的に展開してくれます。つまり、あとからこの用語名を変えたいな、と思ったときにはこの定義のところだけを変えれば勝手に全部入れ替えてくれる、というわけです。 ただし、複数のrstファイルに分けている場合には使えないので、別のファイル(例えばdefinition.txt)に replace を書いておき、 .. include:: definition.txtと各rstファイルの先頭に書いておきます。この時、.rstではなく.txtなど他の拡張子のファイルに書いていることに注意してください。そうしない
Androidでは、AnimationDrawableを使うことで複数の画像を組み合わせてアニメーションを作成することが出来ます。 しかし、onCreate()でアニメーションを開始しようとstart()を呼んでも、動いてくれません。 http://code.google.com/p/android/issues/detail?id=1818 によると、UIスレッドの問題ではなく、onCreate()が終わるまでLayout計算が終わらずActivityの初期化が終わらないために動かない、ということのようです。なので、Runnableを継承したクラスをpostすると初期化が行われた後に実行されるので動く、ということです。 具体的には、以下のように記述します。 @Override public void onCreate(Bundle savedInstanceState) { // ...
注意 この内容はすでに古くなっています。 pipの使い方 (2014/1バージョン) を参照してください。 pipとは、Pythonにおけるパッケージ管理システムです。easy_installというツールもあるのですが、pipはこのeasy_installを置き換えるものとして開発されています。rubyのgem、perlのcpan的な位置づけです。 同じパッケージ管理ツールとしてsetuptools置き換えのdistributeというものもあるのですが、こちらはsetuptools全体を置き換えるものとして開発されており、pipはsetuptoolsの一部であるeasy_installを置き換える形です。 なお、現在のpipのバージョンは0.8.2で、このエントリはこのバージョンを使っています。 なにかおかしい点があれば、ご指摘ください。 > 識者の方々 pipのinstall まずはea
http://sphinx-users.jp/cookbook/pdf/rst2pdf.html を参考にさせて頂きました。 準備 macportsでsphinxとrst2pdfを入れます。 % sudo port install sphinx % sudo port install rst2pdf今回使用したバージョンは sphinx v1.0.4 rst2pdf 0.16 です。 なお、参考にさせていただいたページではIPAフォントなどを使っていますが、Macなのでヒラギノフォントを使います。なので、フォントを別途インストールする必要はありません。 プロジェクトの作成 いつも通りに sphinx-quickstart コマンドを利用してドキュメントを作ります。 conf.pyの編集 前述のrst2pdfのページを参考にしてください。 extentionに追加するほかは、 pdf_doc
Python Web フレームワーク アドベントカレンダー2010のバトンが回ってきましたので、書いてみます。 Sphinx version 1.1から、WebSupportというものが入りました。これは、sphinxのドキュメントをWebサーバにつなぎ、コメントや変更の提案、投票といった機能を追加してくれます。 これ単体だとWebフレームワークとは言い切れませんが、まあ誤差の範囲ということで許してください。 概要把握: 動作している様子 WebSupport開発者のJacob Masonさんが提供しているデモサイトです。これを見て雰囲気を掴んでください。 http://www.jacobmason.com/demo/contents ちなみにこのソースはbitbucketで公開されています。 必要なライブラリ WebSupportはコメントなどをsqliteのDBに保存しますので、それを
文字列からDateを導き出すには、SimpleDateFormatを使うことが多いと思いますが、 英語圏でよく使われる、 Sun, 07 Nov 2010 05:24:39 +0000などの表現を "EEE, dd MMM yyyy HH:mm:ss Z"でparseしようとしたら、ParseExceptionが出てしまいました。 APIドキュメントを読んでも、EEEという表現で正しいし、AM/PMを意味するaaを使っても同じくParseExceptionが出ました。 結構悩んだのですが、結論から言うと、Localeを設定する必要があったようです。 SimpleDateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", Locale.ENGLISH); というようにしたら上手く動きました。 Javaの人にとっては常
Androidでは、Adnrdoid-scriptingを使ってPythonを実行できる環境をインストールできます。 サイトから.apkをダウンロードし、 % adb install ase_r25.apkしてインストールします。(Androidの設定で アプリケーション -> 提供元不明のアプリ のチェックをオンにしておく必要があります。) 最初はborne shellしかありませんが、Menuから View -> Interpreters をタップし、もう一度Menuを出して、Addを選択することでPythonなど他の言語をインストールできます。 Javaから呼び出してみる さて、ここからが本番。JavaではProcessBuilderを使って外部プロセスを呼び出すことができます。 import sys print sys.path というファイルをtest.pyという名前で作成し、S
IS01を買ったのをきっかけに、sheditor liteというAndroid用テキストエディタを開発し、公開しました。無料です。 sheditorでマーケットを検索してください。 sheditorは以下のような機能があります。 多様な文字コードに対応 UTF-8, shift-jis, euc-jp, iso-2022-jpなど 読み込んだ文字コードで書き込みます。文字コードの変更は今のところできません 新規作成時にはUTF-8を使います。 取り消し(Undo) インクリメンタルサーチ フルスクリーンモード 外観の変更 フォントサイズ フォントタイプ フォント色/背景色 Emacs風のキーマップに変更可能 Ctrlの代わりにAltを使い、Alt-X Alt-Fで開く、などができます。 注意: 日本語入力中は無効です (問題解決にむけて取り組み中) sheditorの特にキーマップ変更は、
全文検索エンジンLuceneをGoogle App Engine/Javaのslim3の上で動かしてみました。indexの作成には、N-gram を使っています。 準備 まずは、Luceneの最新版を取得します。今回は3.0.2を使用しました。 lib/lucene-core contrib/contrib/analyzers/common/lucene-analyzers-3.0.2 の二つのjarファイルをprojectの war/WEB-INF/lib にコピーし、build pathに追加します。 GAE特有の問題に対処 Luceneを使うだけであればjarをいれておけばよいのですが、GAE特有の問題がいくつかあります。 Indexの取り扱い Luceneはindexを保持し、このindexを元に文書を検索します。そのため、このindexをどこにどうやって保存するかが問題となります
ExpandableListViewを使うと、折りたためるリストを作ることができます。 しかし、通常のExpandableListViewでは、タップするごとにリストが開いていきます。これはこれでいいのですが、あまりにもリストが多いとせっかく折りたためるようにしたのに画面が埋もれてしまうようになります。 そこで、最後にタップしたリストだけを開き、他の場所は全部閉じるようにする場合にどうやるかというと、こうやるのが良いようです。 この例ではExpandableListActivityを継承しているので、getExpandableListView()を使っていますが、そこは適宜読み替えてください。 private int currentHourPosition = -1; // initial value @Override public void onGroupExpand(int grou
次のページ
このページを最初にブックマークしてみませんか?
『rudi.hatenablog.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く