えっ、Pythonプログラム書いて実行できる、完成度高いアプリ!?

iPhoneとかiPadでもプログラム書いて実行できるアプリが増えてきたんですが、ここまで完成度高いのがあったとは知りませんでした!

Pythonista 1.4(¥700)App
カテゴリ: 仕事効率化, 教育
販売元: omz:software – Ole Zorn(サイズ: 39.4 MB)

このPythonistaはすごいっす!エディタは色付けしてくれるし、多少の補完はきいてくれますし、なんてったって描画もできるんです。

いままであったアプリは、せいぜいREPL的な対話コンソールで、コードはかけるものの大したことはできませんでした。でもPythonistaはPythonistaライブラリが使用できるようになってて、描画系やサウンドも使えます。

サンプルプログラムが普通に完成度高くて、えっ!?これ作れるの?って思っちゃいました。

mzl.qqtzspez.320x480-75

これ、こういうゲームアプリなんじゃなくて、プログラム書けるアプリ上でうごかしてるんですから。。。
コードエディタはこんな感じで完成度高いし。。

mzl.kigptspa.320x480-75

アプリにしてはちょっと高いんですが、iPhone, iPadのユニバーサルだし、それだけの価値はあると思います!!

mzl.xsrptozn.320x480-75

iPadなら本気で書くこともできちゃいそう。。。
mzl.nmdirtdg.480x480-75

ちょっと四角形をシーンというPythonistaライブラリの描画オブジェクトに描画したプログラムです。

20130419-200429.jpg

ヘルプにはリファレンスもあるし、コードサンプルからすぐにエディタを起動できるので捗ります。

ちょっと触ってみて、「なにこれ!」って思っただけで紹介しちゃったんですが、これからドンドン試していこうと思います。

Pythonista 1.4(¥700)App
カテゴリ: 仕事効率化, 教育
販売元: omz:software – Ole Zorn(サイズ: 39.4 MB)


chrome.socketでのbroadcast送信について 後日談

Chrome Packaged Appのsocket apiで、UDPのbroadcastでの送受信を行なって、IP Messenger的なものを作ってみようと思ったのですが、どうもできなくて受信までにとどまっていたのが、前回(勉強会)までのお話。ソースコード(https://github.com/civic/chrome-app-udpsocket

その後Choromiumのソースや、issuesをみてたらいろいろと情報があったので追加報告しておきます。

UDPの送信はできるが、broadcastでできないのは、setsockoptがないため?

勉強会の時も、そんなことをチラッと話したのですが、やっぱりそれが原因らしいです。

Chromeのsocket api にはsetsockoptがなくて今後も追加されなそう

Issue 125586 – chromium – Socket API doesn’t have setsockopt and getsockopt – An open-source project to help move the web forward. – Google Project Hosting

We decided not expose this low level socket API. So close it as WontFix.

ためしにsetsockopt相当のことがないままにブロードキャストアドレスを指定して送信すると、chrome.socket.writeのcallbackで、
Object {bytesWritten: -10}

というオブジェクトが渡される。bytesWrittenが負の値の時にエラーという仕様らしいのですが、エラーコードがよくわからない!!

chrome.socketのエラーコードについて

chromiumのソースを探したらこれっぽい。現状のドキュメントでは、chrome.socketのerrorコードを知るには、このヘッダーファイルを常にリファレンスとして見ておかないといけませんね。。

src.chromium.org/chrome/trunk/src/net/base/net_error_list.h

// Permission to access a resource, other than the network, was denied.
NET_ERROR(ACCESS_DENIED, -10)

Permission ACCESS_DENIEDということで、やっぱりsetsockoptしてない時と同じエラーです。
同梱のpythonの送信プログラムでも、送信するときにsetsockoptしてないとPermission deniedだったし。


Traceback (most recent call last):
File "sender.py", line 7, in
clientsock.sendto(msg, ("", 12345));
socket.error: [Errno 13] Permission denied

ということで、ブロードキャストで送信するIP Messenger的なアプリを作るのは仕様的に無理っぽい感じになりました。おしまい。


第31回 NDSに参加してきました

今回は開催を迷っていて、4/6にやらねば6月以降になりそうだったので急きょ1週間前に開催決定しました。それにも関わらず11人も集まったので良かったと思います。スピーカーもたくさんいたので安心しました。テーマが新入生・新社会人向けな「はじめての〜」という設定だったのですが、あまりフレッシュな感じではなくて「今日参加の皆さん向けとはターゲットが違った!」と嘆く発表者続出でしたw

私の発表「はじめてのChrome App」

Chrome Packaged Appについての解説をしました。

動かしたサンプルコード:https://github.com/civic/chrome-app-udpsocket (packaged appでudpの送受信のクライント/サーバを目指したもの)

正直、サンプルはもっと面白い感じのものを作りたかったのですが、socket apiに分からないところが多くて大したものができませんでした。もう少し深いところまで追って更新して行きたいと思います。

はじめてのテスト技法 (@two_packさん)

テスト技法についての紹介。ソフトウェアテストについてのキーワード紹介、資格制度について。
はじめてのテスト技法

はじめてのmac用ビューアアプリ (@piras4さん)

xcodeを使ったライブコーディング的なアプリの作成紹介。

はじめてのPerl (@hayajoさん)

Perlの環境構築について。アプリケーション用の環境を構築する手法について。perlbrew, cpanm, Carton
NDS#31

はじめてのWindowsストアアプリ (@AILightさん)

Windowsストアアプリの作成方法解説。ストアアプリのイベントについて。

新潟スピリチュアル専科・または恋は言ってみりゃアウトプット/はじめてのメタプログラミング (@neko_gata_sさん)

あのプロセスさんによる「あなたの話を聞かせてください!」って話。Perlでのメタプログラミングの話。

わたしのRubyとの出会い (@kasacchifulさん)

Rubyの学習について、自分の歩んだ道や書籍紹介など。

「はじめての〜」ってつけたことで初参加してくれた方が多数いたので良かったです。
NDSは「発表の場を提供する勉強会」です。どんな内容でも「やってみた」「わたし、こんな勉強始めました」「ITに詳しい人に聞きたいことがあります(10秒)」みたいな発表でもなんでもOKですので、ぜひ発表してください。

hayajoさんの発表で、perlbrew, cpanm, Cartonの話が出た時に、


ってツイートして、「pythonの場合のCartonてどうなんだろうなー」ってその場で検索して分からなかったんです。

で飲み会の席で「bundlerみたいなののpythonのはないの?」って言われて、「ないんじゃないかなー」って言ったんですが、あとでゆっくり検索してたらpipでできるっぽいです。(というかまだbundlerもよくわかってないからコレがそうなんだって言えるのか自信ないところもあるんですが)
$ pip freeze > requirements.txt
で依存パッケージの情報を出力して、
$ pip install -r requirements.txt
で実行環境つくれます。

execが(またよく分かってないかもなんですが)、virtualenvの–no-site-packagesで作った環境下で使うから、その状態でpythonコマンド使うことがシステム非依存にできるってことになるんじゃないかなと思いました。「そうじゃないんだ、bundlerっていうのはなー!」ってのがありましたらぜひ教えてつかぁさい。

まとめると、

  • システム非依存なpython環境=>pythonbrew + virtualenv
  • モジュールのインストール=>pipなど
  • アプリ実行環境の構築=>pip

って感じになるのかなー。