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

投稿

8月, 2009の投稿を表示しています

PythonのワンライナーでTwitterを使う

Twitterでつぶやいたり、タイムラインを取得したりするPythonのワンライナー(1行プログラム)を作ってみた。取り敢えずWindowsで動作は確認した。Pythonさえ入っていればどこでも動くと思う。シェルやcronに組み込んだり、ウェブアプリや自作プログラムで利用したり、Python以外に必要なものがないから手軽に使えるんじゃないかな。ただ、ユーザ名とパスワードは生テキストなのでその辺は気をつけるべきかも。

まず、Twitterでつぶやくワンライナー。

python -c "import urllib,urllib2;pm=urllib2.HTTPPasswordMgrWithDefaultRealm();pm.add_password(None,'twitter.com','username','password');urllib2.install_opener(urllib2.build_opener(urllib2.HTTPBasicAuthHandler(pm)));urllib2.urlopen('http://twitter.com/statuses/update.xml',urllib.urlencode({'status':'つぶやき'.decode('cp932').encode('utf-8')}))"

次に、タイムライン取得。simplejsonを使っている。

python -c "import sys,urllib,urllib2,xml.sax.saxutils,simplejson;pm=urllib2.HTTPPasswordMgrWithDefaultRealm();pm.add_password(None,'twitter.com','username','password');urllib2.install_opener(urllib2.build_opener(urllib2.HTTPBasicAuthHandler(pm)));sys.stdout.write(''.join(['%s: %…

Windows PowerShellを便利に使うための10のミニテクニック

Microsoftが提供していてWindows 7では標準搭載になるWindows PowerShellがもっと広まって欲しいこともあって、CodeZineWindowsのコマンドプロンプトを便利に使うための10のミニテクニックのPowerShell版を書いてみた。

まず、Windows PowerShell 2.0 CTP3をダウンロードして、インストールする。さらに便利に使うためにPowerShell Community ExtensionsからPSCX 1.2をダウンロード・インストールする。

さて、これで準備が整った。因みに以下のテクニックは、Windows XP、Vista、Windows 7のどのOSでも使えると思う(ただし、確認したのはXPのみ)。

コマンドプロンプトからエクスプローラに移動する

以下のように起動するだけ。

ii .

エクスプローラからコマンドプロンプトに移動する

これは標準では難しいと思う。自分はエクスプローラの使い勝手には非常に不満を持っているので、ずいぶん前からWindowsではFileVisorを使っている。FileVisorであれば以下のコマンドをホットキーに登録しておくことで、現在のディレクトリをカレントディレクトリとして一発でPowerShellを開くことができる。

C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -NoExit -Command Set-Location $P

カレントディレクトリを記憶し、あとで戻ってくる

これはそのまま、pushd .とpopdが使える。

2つのディレクトリを行ったり来たりする

これもほとんど一緒。

doskey /exename=powershell.exe d1=cd $pwd

一時的にネットワークドライブを割り当てる必要はない

PowerShellではcdでそのままネットワークをまたげるので必要ないと思う。

cd \\computer1\project1\program1

処理結果をクリップボードにコピーする

ocb (Out-Clipboard)を使う。

dir | ocb tree | ocb

因みに、gcb (Get-Clipboard)を使うことで、PowerShell上に貼り付けもできる。

gcb

ずれたイン…

Google App Engineを利用してmixiアプリを作成する

最近、mixiアプリの正式版がリリースされたらしい。以前、オープンベータが始まったときにちょっと興味を抱いたのだが、そのまま忘れてしまっていた。しかし、この正式版リリースでまた興味が湧き、Google App Engine (GAE)と絡めてちょっといじってみたので、GAEを利用したmixiアプリの作成方法を説明してみようと思う。

まず、GAEを初めて利用する場合は、Google App Engine - Google Codeでアカウントを取得する。SDK一式を落としてきて使えるようにしておくこと。次に、mixiアプリを申請できるように、デベロッパー登録をしておこう。

さて、ここから本格的にmixiアプリを作成するわけだが、誰でも(自分を含めて)簡単に理解できるように「はじめてのmixiアプリ」の「Hello, world!」アプリケーションを元に作成することにした。

ところで、GAEを単なるファイル置き場として使うだけであれば、次のように設定すればいい。まず、作業ディレクトリにgadgetsディレクトリを作成して、そこにGadget XMLファイル(ここではhello.xmlとする)を置き、app.yamlのhandlersに以下の設定を追加する。

- url: /(.*\.xml) static_files: gadgets/\1 upload: gadgets/(.*\.xml)

これを、そのまま以下のコマンドでアップロードする。そして、mixiアプリ登録で、Gadget XMLファイルのURLを、http://アプリケーション名.appspot.com/hello.xmlのように指定するだけだ。

appcfg.py update アプリケーション名

しかし、ファイル置き場にするだけならば、GAEである必要はないわけで、ここではちゃんとGAEを利用した使い方を説明する。

Google App Engineを利用したmixiアプリ「Hello, world!」

GAEを利用するということで、「Hello, world!」アプリケーションの表示を「Hello, ユーザ名!」から、時間に応じた挨拶に変更してみる。朝なら「おはよう, ユーザ名!」、昼なら「こんにちは, ユーザ名!」、夜なら「こんばんは, ユーザ名!」という具合に。

まず、時間による挨…

HTTP CookieとFlash Cookieとで同期を行う

前回に引き続き、今回もCookie関連の記事だ。ITmediaユーザーが制御できない「秘密cookie」、半数強のサイトが利用という記事で、「ユーザーが削除したHTTP cookieを、Flash cookieを使って復活させているケース」があると書かれているが、技術的には簡単だ。

まず、HTMLのhead内にJavaScriptでdocument.cookieを設定・取得する関数を定義する。Flash (ActionScript 3.0)側では、flash.external.ExternalInterfaceを利用してHTTP Cookieを取得する。もし、取得できなければFlash Cookie (Local Shared Object, LSO)の取得を試みる。両方とも取得できない場合は、初めての利用と判断される。どちらか一方を取得できたのなら、もう一方に対して取得した値を渡す。これにより、どちらかが削除されたとしても再読み込みした際に、HTTP CookieとFlash Cookieとで同期され、削除されたデータは復元する。

異なるCookieの同期はデータの永続性を強固にする利点があるが、削除したつもりのデータが実は消えていないということも起こり得るわけで、セキュリティの面からするとあまり良くないかもしれない。これを防ぐためには、Cookieの制御に関する正しい知識を持つしかないだろう。前回の記事でも書いたが、Flash Cookieについてはグローバルストレージ設定パネルの「今後表示しない」を選択することで禁止することができる。既に書き込まれているFlash Cookieは、Webサイトの記憶領域設定パネルから、削除や禁止、ディスク容量の調整などが行える。また、HTTP Cookieについてはブラウザの設定で削除できる。

最後に、「ActionScript 3.0でFlash Cookieを利用する」で作成したプログラムを、HTTP CookieとFlash Cookieとで同期させるように変更してみたので、そのソースコードを以下に示しておく。赤字は前回からの修正箇所となる(クラス名などは除く)。使用する際は、HTMLのhead内に、

<script language="JavaScript" type="te…

ActionScript 3.0でFlash Cookieを利用する

ユーザーが制御できない「秘密cookie」、半数強のサイトが利用というITmediaの記事を読んで、実際どの程度のものかを理解するためにActionScript 3.0でFlash Cookieを利用してみた。因みに、ここで言う秘密CookieやFlash Cookieはローカル共有オブジェクト(Local Shared Object, LSO)と呼ばれるもので、Flash PlayerがユーザーのPCに保存するデータのことだ。

早速、ActionScript 3.0でLSOを利用したFlashコンテンツを作成してみた。作成するに当たって、ActionScript 3.0コンポーネントリファレンスガイドSharedObjectを参考にした。

プログラムはコンテンツを読み込んだ回数をLSOに保存する。初めてコンテンツを読み込んだ場合は、「初めてお会いしますね」と表示され、2回目以降は「お会いするのは2回目ですね」のように表示される。また、LSOの保存領域が保存するデータよりも小さい場合は「ここは狭すぎます…」、保存が禁止されている場合は「私を拒絶するのですか?」と出力される。保存したデータを削除する場合は、エスケープキーを押すことで「さよなら…」と出て削除される。

LSOの制御方法だが、グローバルストレージ設定パネルの「今後表示しない」を選択することでLSOを禁止することができる。また、ディスク容量を0KBにすると、禁止はされないが容量不足により書き込みができなくなる。既に書き込まれているLSOについては、Webサイトの記憶領域設定パネルにより、削除や禁止、ディスク容量の調整などが行える。

Flash Cookie、そこまで騒ぎ立てるほどのものではないと思うが、気になる人は設定で禁止なり削除なりすればよいと思う。コンテンツ制作者側からすれば便利なのは確か。

以下、ソースコード。

SharedObjectTest.as

// SharedObjectTest by nox, 2009.8.14 package { import flash.display.Sprite; import flash.text.* import flash.events.*; import flash.net.SharedObject; …

Scratchで素数を求めてみた

小学生にプログラミングの楽しさを伝えてみた」を読んで、プログラミング言語Scratch(スクラッチ)にとても興味を覚えた。そこで、子供たちに使わせて、その様子でも見てみようかと思ったんだけど、使わせる前にまず自分で試すべきだと考え、簡単なプログラムを作ったところ、これがまた面白い。どういう面白さかというと、小さい頃に遊んだレゴブロックみたいな感じ。ブロックで巨大ロボットを作ったあの感覚。それに、プログラムの要素がタイルになっていて、それをピタピタと貼り付けるんだけど、これもかなり気持ちいい。

で、単なるお試しのつもりで100までの素数を求めるプログラムを作ったんだけど、前回のエントリ「4ビットマイコンで素数を求めてみた」との対比が面白くて、思わずブログ記事にしてしまった。一方は機械が透けて見えるアセンブリ言語によるLED表示で、もう一方はコンピュータと言うよりレゴブロック(?)に近いScratchによるYouTubeライクなアニメーション。同じ素数を求めるプログラムと言っても、ここまで違うと何だか妙な感じだ。

ネコのキャラクターをクリックすると開始。※音が出るので注意このプロジェクトについてもっと知る

ところで、素数を求めるプログラムを作った理由だけど、自分にとってそれがHello worldプログラムのようなものだから。"Hello, world!"なんて画面に出しただけじゃその言語のことはほとんど分からないからね。因みに、Scratchのプログラムの方では、ちょっとだけ遊びを入れてみた。ナベアツプログラムを真似て、一の位が 9 の時だけネコがちょっとリアル(?)になる。

また、Scratchでは作成したプログラムをYouTubeのように簡単にウェブ上で共有できる。しかも、Scratch上からボタン一つという手軽さだ。さらに、そのプログラムをブログなどに貼り付けることもできる。ただ、Scratch上で日本語を表示するのは問題ないのだが、ウェブにアップロードしたものは文字化けをしてしまうようなのでこの点だけ注意して欲しい。あと、この記事に作成したプログラムを貼り付けておいた。実行するにはネコのキャラクターをクリックすればいい。音が出るので注意すること。

ところで、現時点での最新版であるScratch 1.4では、剰余の計算のところが間…

4ビットマイコンで素数を求めてみた

最近、大人の科学マガジン4ビットマイコン(GMC-4)が付いていると聞いて早速購入してみたのだが、ここまで面白いものだとは思わなかった。本物のコンピュータが付いて2,500円というのもの非常にリーズナブルだ。自分は純粋に楽しめたが、教育用に使うのも良さそうだ。雑誌自体はかなり薄い作りだが、内容はとても興味深いものだった。コンピュータの歴史から、ハードの仕組み、インタビュー、4ビットマイコンの説明など。読んでいるだけでワクワクする。

付録の4ビットマイコンにはGMC-4という名前が付いているが、これはGakken Micro Computerの略なんだそうだ。メモリはかなり貧弱で、プログラムメモリで00~4F番地まで、データメモリで50~5F番地までしかない。しかも、それぞれの番地は4ビットしか情報量を持たない。つまり1バイトを8ビットとすると、プログラムメモリで40バイト、データメモリで8バイトしかない。また、レジスタは補助レジスタをあわせて8種類あるが、同時に扱えるレジスタはAレジスタとYレジスタしかない。しかし、これだけの制約があると逆に挑戦してやろうと思ってしまうから不思議だ。

そこで、今回は素数を求めるプログラムを作ってみることにした。最初に考えた方法は、求めた素数をメモリに保存し、その素数を使って新たな素数を求めていくものだった。しかし、当然のように除算命令などないし、メモリが貧弱のため、求めた素数を取り置くのも難しい。そこで、求めた素数は使わずに、素数候補の数値を奇数で割っていき、その奇数が素数候補となるまで割り切れなければ素数とした。ここでは「割る」と書いたが、プログラム上では素数候補から奇数を引いていき、0になれば割り切れるとしている。このようにして求めた素数は数字LEDにそれぞれ一秒間表示される。今回は3~15(F)までの素数を求めた。それほど難しいプログラムであるわけでもないのに、数字LEDに3, 5, 7, b(11), d(13)と順次表示されるのを確認したときには妙に嬉しくなった。

久々のハンドアセンブルであったが、非常に楽しいものだった。当時もこのようにして夢中になったことを思い出した。もっとも、今回の4ビットマイコンは当時のZ80と比べてもかなり貧弱な環境だったが。素数を求めるプログラムもプログラムメモリ領域ぎりぎりの40バイ…