2012-01-15
cloudprint パッケージの中身を覗いてみる(その1)
長らくつまらないエントリーにお付き合いいただきましたが、今日が最終回でございます。いや、ブログエントリー自体はちょこちょここれからも書くつもりですが、毎日と縛りを付けて書くのはオシマイということで……。のつもりだったけど、このエントリーがあまりにも中途半端なので明日も書くでしょう。なんとまあ。
さて今日は、先日のエントリーで書いた Ubuntu の cloudprint パッケージの中をちょっと覗いてみましょうというお話。といっても自分、Python はあんまり得意じゃないので、そこんところはご容赦。
/usr/bin/cloudprint
短いので中身を全部転記しちゃってもいいですね。
#!/usr/bin/python # EASY-INSTALL-ENTRY-SCRIPT: 'cloudprint==0.5','console_scripts','cloudprint' __requires__ = 'cloudprint==0.5' import sys from pkg_resources import load_entry_point if __name__ == '__main__': sys.exit( load_entry_point('cloudprint==0.5', 'console_scripts', 'cloudprint')() )
これはまぁ setuptools でパッケージ化したスクリプトはこんなかんじになるらしくて、名前の通り load_entry_point で条件を満たすエントリーポイントを持ってきてそれを実行してるんでしょうねえ。適当。
ホントは pkg_resources のリファレンスを確認しようと思ったんだけどなんか繋がらないのでここらへんはフィーリングで。
/usr/share/pyshared/cloudprint/cloudprint.py
んで、持って来られる実体はこちら。
とりあえずクラスは
- CloudPrintProxy(object):
- PrinterProxy(object):
- App(object):
の三つです。というか CloudPrintProxy の責務が巨大すぎるってば……。
あとトップレベル関数が、
- sync_printers(cups_connection, cpp)
- process_job(cups_connection, cpp, printer, job)
- process_jobs(cups_connection, cpp, printers)
- usage()
- main()
の五つ。とりあえず main() から見て行きますかね。
main()
最初に起動オプションの確認をして、それから pycups ((system-config-printer の付属成果物として作られた CUPS ライブラリの Python バインディング) を使って CUPS とコネクションを張り、CloudPrintProxy() のインスタンスを cpp という変数に格納します。
それから必要なら Google Cloud Print の認証を取って、sync_printer() で CUPS の共有プリンターと Google Cloud Print サーバーに登録されているプリンターを sync して、最後に daemon モードの場合は python-daemon を使ってデーモン化し、そうでない場合はそのときに Cloud Print に投入されているジョブだけ処理したらその場で終了するようですね。
終わり?
うわー中途半端。でも今日はここで切ります。明日は sync_printers と process_job/process_jobs を読んだ後、CloudPrintProxy() の中に入っていきたいなと。
2012-01-14
Dynabook AZ の Lubuntu 化その後
昨日日記かかずに(訂正、飲み会の帰りに書こうと思ってたら爆睡してて)寝てしまったので一日落としてしまいました。ので、今から慌てて保管します。しょぼネタで。
まえにも書いたとおり Dynabook AZ に Ubuntu 化したのですが、アレから少しチューニングしました。完璧ではありませんが、まあ参考になれば。
Lubuntu 化
これはもう単純で:
$ sudo apt-get install lubuntu-desktop $ sudo apt-get purge ubuntu-desktop
だけです。
ディスプレイが割れちゃった一号機は LightDM を使ってたんですがなんか遅い気がしてたので lxdm にしました。関係があるのか分かりませんが、前よりは軽い気がします。
キーマップの変更
やっつけですけど……。
まずは:
$ sudo setxkbmap -model jp106 -layout jp
してから、これだと | や _ が入力できないので、.Xmodmap に:
みたいな記述を追加しました。メニューキーに Super_L を割り当てたりしたんですが、いまんとこ使ってませんのでこのやり方であってるかは分かりません (^^;
あとこの記事書いてる途中にフリーズしてリブートしたんですがそしたら元に戻っちゃった……なんでや? まあ、それは今後の課題。
12.04 にする
まぁあんまりむずかしいことを考えずに /etc/apt/sources.list を:
# /etc/apt/sources.list deb http://ports.ubuntu.com/ubuntu-ports/ precise main restricted universe deb http://ports.ubuntu.com/ubuntu-ports/ precise-security main restricted universe # deb http://ports.ubuntu.com/ubuntu-ports/ precise-updates main restricted universe
と書き換えて apt-get update ; apt-get upgrade ; apt-get dist-upgrade しただけです。いまんところは大きな不具合はないですね。
Twittering-mode の導入
なにせイオンSIMで使うことがメインのつもりなので、あまり重量級のクライアントは辛い。ので、Twittering-mode を使ってみようと思いました。
やったことは:
$ sudo apt-get install emacs twitterling-mode
して、 ~/.emacs.el に:
(require 'epa-file) (epa-file-enable) (require 'twittering-mode) (setq twittering-use-master-password t) (setq twittering-icon-mode t) (setq twittering-timer-interval 300)
って追加したんですが、これは Emacs Wiki 丸パクリなのであってるか不明。
Twittering-mode 超よくできてるので非常に気に入ってます。
Emacs-w3m の導入
Twittering-mode で URL つっつくとおもむろに Web ブラウザが起きるのうざったいなーと思って Emacs-w3m を入れることにしました。これも何も考えずに apt で入れます。特に設定してないけど使えてるからまあいいや。でもときどき文字化けするのはなじょして?
終わりに
中途半端ですみませんが、まぁかなりいい感じになった気がします。ちょっと翻訳したり文章書いたりするだけならこれで十分じゃんみたいな。なんといっても劇遅とはいえスタンドアロンでFOMA網が使えるというのは大きい。
後はメーラーだなー。Sylpheed 試しに使ってみたんですが、これですらまだちょっと重い気が。
さて、明日(もう今日だ)は最終回。原点に帰って印刷ネタ&プログラミングネタですかねー。
2012-01-13
Ubuntu を Google Cloud Print のサーバーにしてみる
本当は Google Cloud Print の中を覗いてみたかったんですが、今日中に調べて記事をかけるとは思えなかったので、ただ使うだけ。スミマセン。
Google Cloud Print とは
これ読め、で終わってしまうんですが……。
要は、クラウドの向こう側にあるアプリケーション (例えば Google Docs とか) から、クラウドの向こうにあるサーバーに対して印刷リクエストを投げると、サーバーに登録してあるプリンターからネットワーク上で作られたデータが降ってくるというものです。
というと、パーソナルコンピューティングではイマイチよさがわかんないんですけど、モバイルとの組み合わせで強さを発揮するんですよね。
例えば、スマートフォンから印刷するってシチュエーションを考えたときに、スマートフォンでわざわざ印刷したいリッチなドキュメントを作ってそれを印刷するっていうより、クラウドの向こう側にあるドキュメントをスマートフォンの画面から覗き込んで印刷するってシチュエーションの方がずっとありえると思いますし、そのときに、資源が少ないモバイルデバイスで印刷データを作るより、そこよりはずっと豊富な資源があるネットワークの側で印刷データを作ったほうがいいですよね。
ということで、私自身は iOS や Android から直接印刷するソリューションはどっちかというとタブレット系端末向けで、スマートフォンについては Google Cloud Print の方が面白いんじゃないかと思ってます。そもそも Google 依存なのはどうなのよとか、それ以外にも面白くするためのアイディアもいくつかあるんですが、それはまたの機会に。
Google Cloud Print と Ubuntu のステキな関係
Apple AirPrint もそうなんですが、Google Cloud Print は本来、サポートしたプリンターを必要とします。ネットワークから降ってくる印刷データを受け取れる機能を持ってなきゃいけないんですね。
例えば我が愛用の HP Photosmart Wireless B110a
HP Photosmart Wireless B110a インターネット直接接続・無線対応・黒顔料・4色独立インク A4インクジェット複合機 CN248C#ABJ
- 出版社/メーカー: ヒューレット・パッカード
- 発売日: 2010/08/05
- メディア: Personal Computers
- 購入: 11人 クリック: 237回
- この商品を含むブログ (26件) を見る
なんかだと、ePrint という「プリンターごとに割り当てられたアドレスに電子メールを送るとメールの内容と添付ファイルを印刷してくれる」サービスがあるんですけど、この機能と Google Cloud Print をヒモづけることで、Google Cloud Print 対応を実現しています。
もちろん Google さんも、プリンターベンダーがサポートしてくれないと自分たちのサービスが使えないってのは困るので、PC を「プロキシー」にして、PC に接続されたプリンターを使う仕組みを提供してます。これ、Google Chrome のプラグインとして提供されてるんですけど、Linux 版ではまだサポートされてないんですよねー。というか、サポートするかどうかも怪しい。
ですが、実のところ Google Cloud Print は REST API でサーバーとお話ができ、PDF を印刷データ形式として食えればいいので、技術的には Linux マシンをプロキシーにするのはさほど困難ではありません。といってたら 作っちゃった人 がいて、これは Ubuntu 11.10 のときに標準化されたんですよね。
ソース見れば分かりますけど Python スクリプトで書かれてて、一個は Python で REST をサポートする API を提供するスクリプトで、本体はそれほど難しくないです。ので、いつかは中を読みといてみようかと。今日は使うだけ。
使ってみよう
説明するまでもなく簡単です。
$ sudo apt-get install cloudprint
$ cloudprint -d Google username: naruoga@gmail.com Password: Added Printer Ricoh-Aficio-MP-C4501A Added Printer Generic-PostScript-foomatic Added Printer Generic-PostScript Added Printer HP-Photosmart-B110-series Added Printer Ricoh-Aficio-SP-4100NL Added Printer Generic-PCL-6-PCL-XL $ started with pid 9176
ここで追加されてるプリンターたちは、CUPS で共有設定されてる奴です。それを Google Cloud Print のサーバーに登録してるというわけ。
んで Android から Google Docs アプリを開けて「Print...」を押すと、上記で登録したプリンターがぞろぞろって出てきて、それを選ぶとおもむろに CUPS にジョブが投入されて印刷されます。本来ならスクリーンキャプチャ撮って載せればよかったんですがめんどうだったので……あとで気が向いたら載せます。
投入された印刷ジョブを確認してみよう
d:id:naruoga:20120101:1325421043 のように foomatic のデバッグオプションを使って印刷ジョブの情報を確認してみましょう。
foomatic-rip version 4.0.9.241 running... called with arguments: '78', 'naruhiko', 'terms-new', '1', 'ColorModel=FromPrintoutMode Duplex=None InputSlot=Default PageRegion=A4 PageSize=A4 PrinterResolution=FromPrintoutMode PrintoutMode=Normal.Gray xsrf_token=AIp06Dhimkcn7TCoD4aOkLaZc_DT4ssThg:1326459650523 job-uuid=urn:uuid:deffe527-eaa0-3327-66d4-46399f5a8336 job-originating-host-name=localhost time-at-creation=1326459657 time-at-processing=1326459657'
あんまり大したことはわかりませんが(をい)、第三引数に Google Docs の文書名がそのまま渡されていること、用紙サイズなどのデータはオプションで引き渡されること、などは見て取れますね。PrintoutMode=Normal.Gray なのはなんでだっけな。
終わりに
今回もやっつけエントリですみません。
明日は今日の続きで、外部から解析するか、/usr/share/python/pyshare/cloudprint/cloud.py の中を読むか、Google Cloud Print を叩く簡単なアプリを書くか、そのどれかをやってみようかと思います。……けど明日お出かけなんだよなー
2012-01-12
いまさらながらUbuntu 11.10でAndroid
今更なネタですみませんね。
何度か書いているように私はあんまり創造的な人間ではないので、Android についてもアプリを作りたいなーというのはあんまり思わなかったのですが、前から書いている通りエンドユーザーコンピューティングにおいて、開発者とエンドユーザーをつなぐ仲介役として技術を発揮できればなーなんてことを思っているわけでして、そうなると Android についても最低限のことはやっておかなきゃダメだよねということで……。
ところで、私のメインの環境は Ubuntu なんですけど、ついこないだ、Oracle のライセンス改訂によっていわゆる sun-java の Ubuntu コミュニティによる配布が止められてしまいました。Android は Java 6 なわけですが、OpenJDK 6 はいろいろ地雷だと聞いているので、まぁそこらへんから解決しないといけない。
そんなわけで、超今更ではありますけどまとめておくことにします。
基本的には Android SDK のインストール方法に従うだけではあるんですけどね。もしかしたら勘違いしてたりすることもあるかもしれません。そしたらコメントとかついったで教えてくださいね。
必要なもののチェック
まずは System Requirements をチェックしましょう。
OS の要件
最初に OS についての条件が書いて有ります。Linux の場合 は以下の通り
私の場合は 32bit PAE なので問題ないです。デスクトップ環境で 64bit を使うと、こういうことを考えなきゃいけないのでちょっとめんどくさいですね*1。まあそれが楽しいという意見はありますが :)
サポートしている開発環境
Eclipse 必須じゃないらしいですが、いろんなドキュメントは Eclipse を想定して書かれてるので、ここは長いものに巻かれます。
- Eclipse 3.6 (Galileo) 以降
- Eclipse JDT plugin
- JDK 5 or JDK 6 (JRE alone is not sufficient)
- Android Development Tools plugin (recommended)
Eclipse は apt-get で入れると 3.7 (Indigo) が入るのでそのまんま使うことにします。また JDT も依存関係で勝手に突っ込まれるので問題なし。問題はさっきも書いたけど、 JDK 6 なんですよねー。しょうがないので Oracle のを入れることに。
Oracle 謹製 Java 6 のインストール
これはもう @chonan さんのエントリーをさくさくっとパクります。ごく単純にいえば:
- /opt/jvm にファイルを置くことにして
- Oracle のサイトから配布パッケージを取ってきて
- 自己展開スクリプトを --noregister 付きで*2 実行して
- 環境変数を ~/.profile で設定
ってことですね。まぁそれ以外のやり方でもいいんですが、@chonan さんのいうとおり「こういうやり方をする会社とはそれなりに付き合う」ようにしたほうがよろしいと私も思います。
Android SDK の導入
これはもう手順に書いてあるままで、
- SDK の配布サイト から .tgz を取ってきて
- ~/android-sdks に展開
- ~/.profile を編集して ~/bin/android-sdk-linux/tools にパスを通す
ってな感じで。
ADT Plugin のインストール
これも ADT Plugin のインストール説明の "Downloading the ADT Plugin" 以下に書いてあるとおりやればいいはず……なんですが、なんかハマった気がする。なんだっかなー。確かエラーが出て
怒られた気がする。記録取ってなかったので覚えてないんですが、確か出たエラーでぐぐってそこの指示に従えばよかったと思います。役に立たないレポートですみません(^^;
Android SDK のインストール
さっき導入した SDK は一種のコアパッケージとでもいうものらしく、実際に例えば Android 2.3 とか Android 4 とかの開発を行うには、そのための SDK をインストールする必要があります。
そのためには Eclipse で Windows > Android SDK Manager を起動してやります。
んで、必要な SDK をぽちぽちっとクリックして入れると。私の手持ちの IS11CA は 2.3.3 なので、とりあえず 2.3.3 の SDK を入れておきましたが、あとで学びたいスキルに依っては追加したりなんだりするかもしれませんね。そこらへんは適当に。
AVD のインストール
AVD = Android Virtual Device で要はエミュレータのこと。これも Eclipse で Windows > AVD Manager で起動します。
んで、さっきインストールした SDK と同じバージョンのエミュレータを入れておけばおけ、と。
動作確認
まぁとりあえず Hello World なチュートリアルでもひと通りやってみて、ちゃんと開発できることは確認しました。ふぅ。
終わりに
なんかマトモなエントリをぜんぜん書けてなくてごめんなさいです……orz
とりあえず開発環境は作れたんで、なんかチュートリアルでもぼちぼちやっていこうかねーとは思ってます。Java とかぜんぜん書いたことないけど〜
明日のネタ、どうするかなぁ……印刷ネタに戻ってなにか書きたいところではありますね。
2012-01-11
Dynabook AZをLubuntu化
今日はネタがないので……というか、ネタを仕込むべき時間を他のことに使ってしまったので、そのことについて。
Dynabook AZ とは
TOSHIBA dynabook AZ クラウドブック Android2.1搭載 10.1型ワイド PNAZ05MNA
- 出版社/メーカー: 東芝
- メディア: Personal Computers
- 購入: 3人 クリック: 323回
- この商品を含むブログ (21件) を見る
Android 搭載機のくせに Android Market は使えず、「本製品は Windows OS 搭載機ではありません」のロゴが燦然と輝くこの機械、昨年末からアキバの IOSYS にて 19,999 円で売ってるんですよね。それでもバカ売れしてるってわけじゃないのがまたポイントという、一種鬼っ子なマシンなわけですが……。
AZ を買いました
これがですね、今の Ubuntu には Dynabook AZ 用の公式イメージがあるんですねー。ということで今ナウなヤングな Ubuntu ユーザーは AZ を買って Ubuntu を入れるというのが常識になっておりまする。
さらに IOSYS の AZ は SIM がついてないんですが、超トロいけれども低価格で有名なイオン SIM が使えると言うじゃないですか。おー、ということは FOMA 3G しかつかえない田舎にいってもネットがいちおうつなげるということではないか。カヤックなり山なりで田舎に行くことが多いぼくとしては結構嬉しい。
つーことで買ったわけですよ。年末に。
んで、さっそく Ubuntu 化して、イオン SIM も買って、でもあれー、なぜか認識しないぞー?? まぁポケファイで通信はできるし、週末スキーにいくから、そのときにちょこちょこいじろうって思ってカバンに詰めてもっていったら、見事に滑って転んでカバンの上に見事に着地してですね……液晶が割れちゃって悲しいことになりましたとさ。orz
そんなわけでもう一台今日買ってきましたとさ。アホだね私は。
今までやったこと
まずはイオン SIM ですが、最初差してもやっぱり認識しなくて、くそーこいつ使えねーって思って、ダメもとで抜いて挿したら認識しましたw
んで、ついったで教えてもらいつつ AZ 付属の Android で通信できることを確認。うーん、たしかに死ぬほどトロいわこれ……。
ここまでやったら次は Ubuntu 化であります。といってもこのページのとおりやっただけ。
前回は問題なかった記憶があるんだけど、今回はなぜかキーボードレイアウトをインストール時に変更すると固まってしまったので、一旦 US キーボードでインストールして、インストール後に JP106 にしました。といっても AZ のキーボードは JP106 ともぜんぜん違うので、ちゃんとキーボードレイアウト作ってあげないといけません。
んでさすがに Unity 重たいので Lubuntu 化を今やってるところ。ここまでは液晶が割れた前の子でやったことと同じです。
この先の予定
まずはちゃんとキーマップ書いてあげないとツラすぎですよね。Lubuntu なので原始的に xmodmap で。というか、誰か書いてたりしないかな。
あとやっぱりイオン SIM ツラすぎるので、Twitter とか Gmail みたいなのは Web UI じゃないほうがよさそう。ということで、適当なクライアントを探さないと。Twittering-mode と Wanderlust でいいのかなー? いや、私は別に Emacs 教徒じゃーないですよ。
それから、手元にある唯一の ARM マシンなのでいろいろいじらないとつまらない。ので、やっぱり Precise にすべきかしらねぇ〜。
そうそう、ディスプレイが死んだだけで一応動いてる初代も活用を考えてあげないとなー。常時電源ONにしてなんか面白いことできないだろうかねー。アイディア募集です。
終わりに
あー今日もダラダラ日記になってしまった。よくないなー。
明日こそはちゃんと技術ネタを。いまのとこ Microtech ePrint Free の Android 版 について調べてみようかなって思ってます。
あと、仮エントリのまま放置してある二つの記事もなんとかしなきゃね。




