スキップしてメイン コンテンツに移動

投稿

2015の投稿を表示しています

Android端末をサーバにしてPyramidフレームワークを利用する

しばらく前に、PythonのWebフレームワークであるPyramidを利用した。これがなかなか良くできており、Android端末上でも動かしてみたくなったので載せてみた。

ところで、自分が利用しているキャリアはドコモなんだけど、spモードだとグローバルIPが割り振られないので外部から端末にアクセスできない。なので、spモードを契約せずに、mopera Uを利用している。mopera UであればグローバルIPが割り振られるのでアクセスすることができるからだ。このためだけに、spモードにせず、mopera Uにしていると言っても過言ではない。

閑話休題。まず、Pyramidを動作させるにはAndroid端末用のPython環境であるSL4Aを入れる必要がある。次にPyramidを入れるのだが、必要なモジュールなどが複数あるのでそれも一緒に入れる。一応、Hello Worldプログラムを動かすのに必要なものはすべて挙げたが、もし足りない場合は実行時に何が足りないかエラー表示が出るので、それを参考に入れて欲しい。また、Android SDKが導入されていることを前提にしている。

まず、Android端末にシェルで入ってプログラムを展開するディレクトリを準備する。環境に合わせてディレクトリは読み替えて欲しい。

> adb shell * daemon not running. starting it now on port 5037 * * daemon started successfully * $ cd /sdcard/sl4a/scripts $ mkdir pyramid $ exit

適当なディレクトリで以下のプログラム・モジュールをPC側で展開する。

pyramid-master.ziptranslationstring-1.3.tar.gzvenusian-1.0.tar.gzWebOb-1.4.tar.gzzope.deprecation-4.1.2.tar.gzzope.interface-4.1.2.tar.gzrepoze.lru-0.6.tar.gz
PC側からAndroid端末にプログラム・モジュールをコピーする。

> adb push pyramid /sdcard/sl4a/scripts/pyramid/pyramid/ &g…

IRCボットの作成

久々のブログ更新。書きたいときに書くというスタンスです。最近、会社でも技術ブログを立ち上げたので、そちらで書いても良いかも。

今回はIRCボットの作成について書いてみる。しばらく前から社内IRCで技術関連の雑談用チャンネルを利用している。技術系のメーリングリストもあるのだけど、わざわざメールで話題にするようなことでもない、軽い内容を気軽に議論できる場が欲しかったので有志で立ち上げた。IT企業にとって技術的な雑談をできる場はとても大事だと思う。

素のIRCの場合、発言内容がサーバに保存されず、途中から参加しても話題についていけないという問題が出たので、適当なボットで対応することにしたが、やはりエンジニアがメインの会社なのだからボットも自作が基本でしょ、ということでPythonで作ってみた。まあ、作ったといっても「Python でシンプルな IRC クライアントを作成する」のサイトを参考にさせてもらったのでスクラッチから作成したわけではない。

コマンド techlog: を入れると、その日の発言がボットからのtalkで返される。ただ、最初は1日分の発言しか取れない仕様だったので、日を跨ぐとその前の発言が取得できないし、一時的にチャットを抜けた分のログが欲しいだけでも強制的に1日分の発言を取得してしまう。

そこで、SQLite3を使ってユーザ毎にログイン・ログアウト時刻を管理して、ログアウトしてからログインするまでの発言を取得できるように変更することにした。新規に参加したメンバーでも自動的にデータベースに登録される。せっかくユーザの時刻情報があるのだから、techtime:, techtimeall: というコマンドを作って、それぞれ自分の滞在時間、ユーザ全員分の滞在時間も取得できるようにしてみた。

IRCサーバ上で以下のコマンドを実行すると、IRCにボットが常駐する。

$ ./irc_bot.py > irc_bot.log &

ソースコードは以下の通り。

そこそこ社内IRCも使えるようになったのだが、最近、別プロジェクトで利用を始めたSlackがかなり便利だったので、そこに技術系チャンネルを作ったところ、ほとんどのメンバーがSlackに流れてしまった…。次はSlackでボット作成かなぁ。