2016年11月20日

iOSで動くPython「Pythonista3」を使ってみた

iPhoneやiPadの上で動作する「Pythonista」というアプリがあります。
これはスクリプト言語「Python」をiOSの上に移植したもの・・・と思っていたのですが、実はよくできたエディタ、デバッガ、iOSのためのライブラリなどが合わさったものです。
評判が良いらしいので、なんとなく入手してみました。

iOS上で動作する革命的ものづくり環境「Pythonista 3」の魅力をとくと語る

Pythonはver.2系とver.3系があり、互換性が完全ではないので、過去の資産を重視するならver.2、より高機能・洗練を重視するならver.3系になります。
今回はver.3系である「Pythonista 3」を購入しました(1200円です)。

付属のサンプルを動かしてみると、Pythonそのものの資産の豊富さと、Pythonistaというアプリの出来の良さに驚きました。
こんなスクリプトで
pythonista02.jpg

こんなグラフが描けてしまいます。
pythonista03.jpg

ドキュメントとしては「The Python Tutorial − Python 3.5.2 documentation」が内蔵されています。
また、それとは別にゲームを作るチュートリアルが付属しており、PythonistaがiOS用に用意したライブラリの能力を垣間見ることができます。
pythonista04.jpg


Pythonistaで用意されているライブラリはこちらに一覧があります。

Pythonista Modules − Pythonista Documentation

ゲームやアニメーションを作成できる「scene」、iOSネイティブのGUIをデザインできる「ui」のほか、Bluetooth LEのモジュール「cb」もあります。
これを使って、Genuino101と通信をさせている方を見つけましたので、私も試してみました。

iPad + Pythonista(iOSで動くPython) + BLEで、Genuino101のLチカをしてみた。 - robo8080のブログ
Genuino101BlinkLED.py ・ GitHub

スクリプトはver.2で書かれているらしく、print '..'をprint('..')に修正する必要がありましたが、あとは問題なく動作しました。

pythonista01.jpg


Pythonistaのコミュニティもあります。(当然英語ですが)

Pythonista | omz:forum

全般的に、IDEとしてよく出来ていますし、電車の中で使えるプログラミング環境としてはプチコン以上かもしれません。

posted by boochow at 13:41| Comment(0) | Pythonista | このブログの読者になる | 更新情報をチェックする

2016年11月13日

Arduino based game console "Arduboy" first impression (August 17, 2016)

arduboy01.jpg

I got an "Arduboy" at the venue of Maker Fair Tokyo 2016.

This is a portable game machine combining Arduino Leonardo equivalent CPU and 180 mAh battery, SSD1306 OLED display, piezoelectric buzzer, operation buttons.
The selling price at the venue was 5,000 yen.
Even buying parts individually will not be so cheap.
Anyway I bought it because the making of the casing was very good.

Although the appearance is a game machine style, it is a wonderful Arduino compatible machine.
Since the USB connector is built in, all you need is just connecting the cable.
Of course, you can write programs in Arduino IDE and run it normally.


arduboy0.jpg


For the setup etc of the development environment, the following page is detailed.

【Kickstarter】Arduboyレビュー、インストール手順、面白いゲーム紹介など - t-miyajima blog

However, one thing that needs attention is "It will not work with Arduino 1.6.10."
During compilation I got an error saying
-fno-fat-lto-objects are supported only with linker plugin.
and it stops.
(8/19 update: Arduino 1.6.11 has been released, it works fine.)
This seems to be caused by inconsistency of Arduino IDE and Arduboy library.
Arduino 1.6.9 works without problems.

Cannot Compile or Upload an Example Game: cc1.exe: error [SOLVED] - Arduboy / Issues - Community


As the first step, I tested some games and samples attached to the Arduboy library.

*Hello, World!
A Sample displays characters on the OLED. The code is here .
arduboy02.jpg


*ArduBreakout
A breakout with button operation. The code is here.
arduboy03.jpg


*GLOVE
A " Gauntlet " style game. Well done.
The compiler reported "Sketch uses 28,612 bytes (99%) of program storage space. Maximum is 28,672 bytes. Global variables use 1,682 bytes (65%) of dynamic memory, leaving 878 bytes for local variables." which means that the author stuffed code and data in as much as he can.
arduboy04.jpg


*伊for Arduboy
A side scrolling shooter. I impressed that it can move objects much more than I had thought.
arduboy05.jpg


Looking at the community site , it seems that 27 games are currently registered in the wiki.
There were also various demos that were not games including a demonstration of RPG similar to the Legends of Zelda.

Arduventure
[WIP] Arduventure (RPG) - Arduboy / Development - Community

arduboy06.jpg


An introduction of various works is in the following article.

11 Arduboy Games worth Playing - Retro Gaming Magazine | Retro Gaming Magazine

Original post in Japanese: ゲーム機型Arduino「Arduboy」を動かしてみた: 楽しくやろう。
タグ:english Arduboy
posted by boochow at 13:46| Comment(0) | Arduino | このブログの読者になる | 更新情報をチェックする

I will translate this blog into English by Google translation

Recently, it has become a hot topic that Google translation has improved considerably due to machine learning.

Google unleashes deep learning tech on language with Neural Machine Translation | TechCrunch

Perhaps, it may be possible to use Google translation for English translation of this blog.
Therefore, in order to investigate the performance of Google translation, I will translate the previous articles in English using Google Translate and post them.

The article translated into English is tagged "English".
Those articles are translated into English by Google translation, and then I corrected the translation error manually.

Google翻訳でこのブログの英訳を行います

最近、Google翻訳が、機械学習のおかげで大幅に品質向上したと話題になっています。

Google、ニューラルネットワーク機械学習を検索翻訳に適用―第一陣は中国語/英語 | TechCrunch Japan

もしかすると、このブログの英訳にGoogle翻訳が使えるかもしれません。
そこで、Google翻訳の性能を調べるため、Google翻訳を使って以前の記事を英訳してポストしていきます。

英訳した記事には"English"タグが付けられます。
それらの記事は、Google翻訳で英訳した後、翻訳ミスを人手で修正しています。
タグ:english
posted by boochow at 12:46| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2016年11月12日

Arduboy用画像作成ツール for Mac

abImagerMac.png

以前作ったArduboy用の画像データ作成ツールをMac上でもビルドしてみました。
XCodeは5年以上前にちょっと使ったまま放置でしたが、AppStoreから配布されるようになってから一度インストールだけはしてありました。
以下のガイドにあるようにコマンドラインツールの設定をするだけで、他には特に追加の作業は必要ありませんでした。

xcode | openFrameworks

openFrameworks自体はクロスプラットフォーム環境なので、基本的にはOS X版をダウンロードしてくるだけです。
openFrameworksのプロジェクトの雛形は、ダウンロードしたファイルの中にあるProject Generatorを使いますが、これはAppStoreから配布されたソフトではないので、起動するにはCTRLを押しながらアイコンを選択し、メニューから起動を選ぶ必要があります

以前公開したソースコードをコンパイルしたところ、型チェックで少し引っかかったところがあってので、修正しました。
また、ついでにBMPファイルも読み込めるようにしました。

GitHubのソースは修正してあります。
テストは(いまだに)Yosemiteで行いました。

また、コンパイル済みのバイナリは以下に置いておきます。

ArduboyImager-Mac.zip

posted by boochow at 18:25| Comment(0) | Mac | このブログの読者になる | 更新情報をチェックする

2016年11月06日

FM音源をArduboyで動かしてみた の続き


前回の続きです。
やはり16ステップのシーケンスが1つ使えるだけでは物足りないので、シーケンサー周りをグレードアップしました。
具体的には

・シーケンスは16個(個々のシーケンスは16ステップで変わらず)
・シーケンスの連続演奏
・シリアルポート経由でのシーケンスのインポート/エクスポート
・EEPROMへの保存

といった機能を実装しました。
そのほか、

・直前の音を消さない「タイ」と直前の音を消す「休符」を分けて実装
・1ステップを四分音符から八分音符へ変更

などの拡張も行っています。
以下のGitHubリポジトリも更新しました。(前回のものはリリースv1.0として保存してあります。)

boochow/abSynth-FM: FM Synthesizer with step sequencer for Arduboy

前回からコードを整理せずにそのまま拡張したので、相変わらず中身はきれいではありません。
行数は現時点でインベーダーゲームより多い1700行超になっていますが、ビットマップやプリセットで用意した曲データ、Protonで開発するためのシリアルポート入力の代替コードなどを含んでいます。

プログラミングとしては、シーケンスの選択や通信を行うユーザーインタフェースと、シリアルポートからの入力のパーサが主な追加部分です。
データの受信中は、誤ったデータや通信の中断によってArduboy側がロックされてしまわないように、メインループから呼ばれて通信バッファが空(Serial.available()がゼロ)だった場合は必ずメインループへ戻ってボタン入力の処理を行うようにしています。

GUIは今回かなりたくさん書いた結果、ある程度スタイルができてきました。
コードはどう考えても現在のスタイルではなくOOPで書き直したほうが良いと思われますので、時間と意欲があればクラスライブラリ化したいところです。

現在重要な役割を担っているのは「process_button()」という関数で、ボタンの状態管理を行います。
引数は

・bool *state ・・・ 現在のボタンのオンオフ
・uint8_t *repeat_count ・・・ 長押し判定のためのカウンタ(処理不要の場合はNULL)
・uint8_t keycode ・・・ 処理対象のボタンの指定
・void(*release_func)() ・・・ ボタンを離したときの処理を行う関数
・void(*repeat_func)()) ・・・ 長押しのときの処理を行う関数
・返り値(bool) ・・・ 画面更新をする必要があるときはtrue

となっています。
例えば、Aボタンの処理はメインループの中で
process_button(&g_keystat.a, &g_keystat.a_repeat, A_BUTTON, a_released, a_long_press);

というようにコールしています。
a_releasedにAボタンが押されたときの処理、a_long_pressはAボタンが長押しされたときの処理を書きます。

ゲームと違って、GUIでは、ボタン操作への反応は押された時ではなく離された時に行うのが基本です。
反応の速さよりも、最後の最後までユーザに選択肢を残すことが重要だからです。
タグ:Arduboy
posted by boochow at 18:53| Comment(0) | Arduino | このブログの読者になる | 更新情報をチェックする
人気記事