2014年11月24日月曜日

【なでしこ】Win32APIを使ったGUI(案) その2

で、色々と検討した結果、ResEditを使うと、VisualStudioライクなRAD環境で
リソース生成が出来て、且つ、これをリソースDLLに変換できることが分かりました。
ってことで、なでしこのGUI用DLLを作成し、ここから上記のリソースDLLを読み込んで
やれば、なんとかなりそうかなあ…。ただ、この方法にはいくつか問題がありまして…

・リソースDLLと同時に、各リソース(ボタンとか、テキストエリアとか)のIDを定義した
 ヘッダファイルを同時に生成し、これをなでしこ用DLLで読み込んだ上でなでしこ側の
 スクリプトと共有しないといけない。

・DLL側でGUIを生成したとしても、おそらくWin32のメッセージ処理用キューは
 なでしこ(gnako)が持っているメッセージキューと同じになる。これを回避するために
 なでしこ用DLL内でスレッドを生成して、そこでメッセージを受ける様にすれば、
 「母艦」のメッセージとは区別できるが、メインスレッド(つまりなでしこ本体)との
 通信方法は考える必要がある。

・gnakoの場合、立ち上げた時点で「母艦」フォームが表示されてしまっていて、
 これを消すとgnako自体消えてしまいそうな気がする。

上記ResEditでリソースを作る方法以外にも、Tcl/Tkを用いてなでしこ/Tkみたいな
ラッパーを作る、wxWidgetsのラッパー、Qtなどなど色々考えたけどやっぱり母艦が
自動で生成されていることで相性がイマイチ。vnakoの方は重そうなので、そもそも
却下、GUI(フォーム)が生成されないcnakoなら…と思ったけど、コマンドラインの
DOS窓が消せない…ってことでいずれも破綻しました( ̄□ ̄;。う~む。

ってこでなでしこのGUI環境をいじる別の方法を考えた分けですが、可能性としては
以下の二つ。

・nako.dllにはインタプリタ本体も入ってそうなので、自分でwnako.exeみたいなのを
 作って、無理やりResEdit+リソースDLLに対応してみる。

・Win32は諦めて、別の汎用GUI的なものを目指す。

自分でexe作るのも面倒ですし、そもそもインタープリタ部の使い方も説明はない
ため破綻しそう…ってことで後者を考えます。より汎用的ってことで、ローカル
WEBサーバを用いたブラウザ上でのGUIとの連携を考えることにします。

2014年11月3日月曜日

【なでしこ】Win32APIを使ったGUI(案) その1

なでしこには「積み木デザイナー」と言うRADツールが付いてるんですが、
これはあくまでちょっとしたGUIプログラムを作るためのもの。複雑な、
GUIのパーツがイッパイ付いてるものを作ると、それを読み込むだけで
「積み木デザイナー」が重くなり、ロードされるのに結構時間がかかり
ます。

なでしこのGUI部分は\lib以下の「gnako.nako」「windows.nako」がその定義。
windows.nakoがWin32APIのラッパーで、gnako.nakoにはそれらを使った
なでしこの関数、グループなどの定義があります。

このやり方でも全く問題ないんですが…

・gnako.nakoに定義されたグループや関数のコールは、なでしこベースに
 なるので結構遅い(Win32APIをコールするより、なでしこのコールが
 入る分、一段遅い)

・windows.nakoのラッパーに定義されているメッセージ定数は、グローバル
 として定義されているので、イッパイメモリ食ってる。

・積み木デザイナーは「簡易」RADツールなので、複雑なものは作れない。

ってことで、もうちょっと複雑なGUIアプリを、実行速度も考慮しながら
作れる様に考えます。

2014年9月29日月曜日

【Quartz】数式

数式は大体はC言語と一緒です。

------------------------------------------------------------
a = 1 + 2 * 3 / 4        #四則演算
b = (1 + 2) * 3           #( )付き演算
c++                         #インクリメント、デクリメント
a = 1 << 2                #ビットシフト
b = a & 0x00000001   #ビット論理演算
c = "moji" + "retsu"  #文字列連結
------------------------------------------------------------

ビットの論理演算は数値に対してのみ有効で、結果は16進に
なります。文字列の連結は便利そうなので入れておきます。
文字列と文字列意外の連結は…どうしようかなあ。文字列として
返す様にしようかな。

2014年9月26日金曜日

【Cubieboard2】コンパイル備忘録 その2

Buildrootのmakeができたら、これをSDカードにます。4GBぐらいあれば
いいみたいですが、8GBのものを使いました(実際、イメージはそんなに
大きくないので、2GBとかでもいけるかもしれません)。

■書き込み用のスクリプトを起動

# sudo ./board/cubietech/cubieboard/mkcubiecard.sh output/images/ /dev/sdd

Buildrootのフォルダ直下で、上記を実行。最後の/dev/sddの部分は環境に
ことなります。mountされてるとエラーになる可能性があるので、あらかじめ
umountしておきます。

mount時、/dev/sdd1とかなってますが、引数師弟の場合は/dev/sddとします。
これを実行すると、SDカードにすべて書き込んでくれます♪。

■起動!

microSDカードをCubieboard2に挿入して起動!。シリアルポートで動作確認
できますよ~。ちなみにシリアルポート接続はFTDIのUSB接続タイプのを使って
ますが、Cubieboad2のシリアルポート(USB1/2ポートのすぐ後ろくらいにある
4pinヘッダのコネクタ)には

GND...黒
VCC...×
RX...緑
TX....白

の様に接続。VCCに赤のラインをつなぐと動きませんので、ここはNCです。

■シリアルコンソール

Ubuntuの場合、「Serial port terminal(シリアルポート端末)」と言うソフトがあるので、
ソフトウェアセンターでインストールできます。ただし、これを普通に動作させると
「許可がありません」とか言われるので、コンソール(端末)から

# sudo gtkterm &

でOK。シリアルポートはボーレートが115200、8bit、stop:1bit、パリティーなし、で
動作してます。

やってみたら意外と簡単でした♪。Buildrootすげー。



2014年9月21日日曜日

【Cubieboard2】コンパイル備忘録 その1

Cubieboard2を買ってほったらかしになっていたので、それ様のBootイメージを
作ってみようかと思います。

公式サイトではYocto使う様に書かれてたり、Debianイメージが配布されていたり
するんですが、ウチの非力なPCではYoctoのコンパイルには時間がかかりすぎるし
Debianは色々入りすぎてる感じ…。ってことで 割とお手軽そうなBuildrootを選択。

■Tool Chain

Ubuntuの場合はapt-getで取れます。


# apt-get install gcc-arm-linux-gnueabihf

 
■U-Boot

gitで取ってきます。

# git clone https://github.com/linux-sunxi/u-boot-sunxi.git

取ってきたらu-boot-sunxi/に入って、まずはConfigを作ります。

# make CROSS_COMPILE=arm-linux-gnueabihf- Cubieboard2_config 

U-Boot本体を作ります。

# make CROSS_COMPILE=arm-linux-gnueabihf-

■ツール類

gitで以下の2つを取ってきます。

# git clone git://github.com/linux-sunxi/sunxi-tools.git
# git clone git://github.com/linux-sunxi/sunxi-boards.git

sunxi-tools/に入って、ツールをまず作ります。

# make fex2bin

sunxi-boards/sys_config/a20に入ります。ここに目的のcubieboard2.fexファイルが
あります。これはボードのハード設定諸々を記述したもので、これをコンパイルしてbin
ファイルにした後、U-bootからKernelに引き渡す様です。

# ../../../sunxi-tools/fex2bin cubieboard2.fex script.bin

生成されたscript.binが目的のファイルです。

※Buildrootを取ってくると、上記も一緒に入っててAutoでコンパイルしてくれてました。
 なので、Buildroot使う場合は必要ないです。

■Buildroot

gitでも取れますが、今回は

  http://buildroot.uclibc.org/download.html

からtar.gzファイルを取ってきて展開。

# tar  zxvf  buildroot-2014.08.tar.gz

buildroot-2014.08/に入ってコンパイル。まずはconfig作ってから本体のmake。

# make cubieboard2_defconfig 
# make

今日はここまで♪。



2014年9月1日月曜日

【Quartz】変数について

コメントには"#"を使います

------------------------------------------------------------

#コメント

a = 123 #コメントは文の後ろでも可

#複数行コメント書きたいときは
#各行の先頭に"#"が必要です

------------------------------------------------------------
変数はCっぽい感じにしますが、型宣言による初期化は必要としない
ことにします。

------------------------------------------------------------
a = 123             #整数
b = "mojiretsu"  #文字列
c = 0.123          #浮動小数点
d = 0x123         #Hex値
e = [00112233]  #データ列
------------------------------------------------------------

変数の型は代入する値で決まります。言い換えれば、代入する
毎に型が決定されます。演算による型の変更は…まだ考えて
ません(^^;。

Hex値は内部でunsigned longで扱われます。データ列はHex値の
"0x"を省いた16進値を連続で書き込むと、そのデータがバッファに
記述されるようにします。MAX値は16byteまでです。通信フレーム
とか扱ってると、連続値入力したいときが良くあるので、この型を
設けます。

ポインタはどうしようかなあ…。複雑になるからとりあえず止めとくか。

2014年8月18日月曜日

【Quartz】プログラミング言語を作…りたい話

組み込み環境のLinuxでドライバを作る場合、ドライバ自体は割りと
簡単に作れるけど、一番面倒なのがテスト。ドライバはGPIO使って
LEDとかスイッチとか制御するだけでも、そのテスト用のアプリは
意外と面倒なんですよね~。

あと、特定機能のライブラリとか作る場合も一緒。ライブラリをコール
するためのサンプルアプリとかって、網羅的に機能を試そうとすると
結構複雑な構成になるわけです。

今まではしょぼ目のコマンドセットを使っていて、まあこれでも大体
目的は果たせてたんだけど、色々欲張るうちにIF文やループの機能が
増えていって、字句解析、構文解析を端折ったような構成だったから
内部がどんどん複雑に…。テスト用なのでしっかり作る必要性も
ないっちゃないんだけど、ここらでちゃんとしたものを作っておいても
いいかなあ…と言うのが動機です。

Luaを使っても良かったんだけど、簡素に出来てるLuaであっても
目的にはちょっとオーバースペック。オブジェクト指向っぽいもの
とか全然必要ないし( ̄ー ̄)。BASICのサブセットでもいいぐらい。

■名前:Quartz
 ・まだ実装もしてないけど名前だけは決まってると言う…(^^;。
  プログラム言語の名前は飲料系(コーヒーかな)とか宝石系とか
  動物系が多いんだけど、「組み込んで使えるちょっとしたもの」
  が良かったので石英(Quartz)としてみました。

■機能・特徴
 ・C言語のライブラリとして提供される。
 ・アプリケーションに組み込んで使う
 ・機能的には最低限の言語機能だけ提供し、その他の必要な機能は
  ユーザーがQuartz上で使える関数を(C言語で)実装するような
  イメージ。
 ・最低限…とはいいつつ、自分が良くつかうのでスレッドとソケットは
  扱えるようにする。

【NAS】最終的に

HDDがぶっ飛んだり、BuffaloのNASが使い物にならなかったり…ってことで
最終的にはウチのNAS環境は以下の様な感じに落ち着きました(^^;。

■無線ルータ:Buffalo WZR-600DHP2
 ・USB-HDDを接続して簡易NASを実現する場合、ファイルシステムがXFSに
  なり、しかも古いBuffaloのルータがフォーマットしたXFSと互換性が微妙
  なので、USB-HDDの接続は却下

 ・でも、ちょっとだけファイル共有がしたいので、余っていたSDHC 32GBを
  つないでおく(^^;。これだけでも割と便利♪

■サーバ:Acer Revo3610
 ・メモリは4GBに増設。でも3GBまでしか認識しないんだけどね(T∇T)。
 ・HDDはSSHDにしてあるけど、Windows7が入っているので、東芝の64GBの
  USBメモリ買ってこれにUbuntu12を入れる。ファイルサーバとして動作
  させる場合にはUbuntu起動にしておく。USB-HDDをext3でフォーマット
  して接続。この領域はSAMBAで公開

■RAID
 ・上のUbuntu + USB-HDDのHDDフォーマットをNTFSにして、UbuntuとWindowsの
  両方からマウントして共有!とかやってたら、HDDがぶっ飛んだ!Σ( ̄口 ̄;;。
  多分、MBRとかPBRとかその辺りが破壊された様子。WindowsのHDD復旧ソフト
  買って、1TBぐらいあった写真やらを1週間かけて復元(24時間連続運転で7日
  間…( ̄ω ̄; )。それでも壊れてる写真、結構あったなあ。

  復旧したはいいけど、1個のフォルダに全部復旧したファイル入れてくれるもん
  だから、軽いスクリプトをなでしこで書いてファイル振り分け。これも数日かかる。

 ・これはいかん!!ってことでラトックのRS-EC32-U3Rと言うRAID組めるHDD
  ケースを買って、2TB x 2でRAID1構成。これでまあ、バックアップは暫くは
  安心か…。RAIDの方はネットワーク共有はしないことに(^^;。

Revo3610はCPUがATOM330(1.6GHz)なので、ちょっと遅いなあ。Windowsは
そこそこ快適に動作するんだけど、UbuntuはUSBメモリからの起動なので
ちょっと遅く感じる。クロス環境でARMなCPUのボードで遊んだりしたいので
もうちょっと速いマシン欲しいところ。

2014年3月28日金曜日

【Buffalo】無線ルータと簡易NASの話 その2

以前使用を開始したBuffaloの無線ルータWZR-600DHP2と、その
簡易NAS機能ですが…結局使用中断しました( ̄ω ̄;。

600DHP2の簡易NAS機能、最初は調子よく動いてたんですが、
時々ファイルが全く見えなくなる症状が発生。見えた!と思っても
特定のディレクトリの下のファイルがなくなってたり…再起動したり
してると復活するんだけど…

ってことで結局USBにUbuntuをインストールして、それをPCに接続。
普段はLinuxのサーバとして動作してもらって、使いたいときはHDDに
入ってるWin7を使う様にしました。

600DHP2、無線部分についてはいんだけど、オマケ機能のNAS
は全然だめ。且つ、この無線ルータに変えてからVNCが繋がらなく
なるし…無線ルータのオマケ機能は宣伝ほどはしっかり実装されて
ないと言うのが結論です(^^;。

2014年3月12日水曜日

【MSX】MSX3を実現するとしたら

MSX3を実現するとしたら、どんな感じがいいか…

■やっぱりキーボード型のがいいなあ…

 テレビにMSXつなげて、カタカタやってたあのスタイルが好きだった
 ので、やっぱりキーボード型のがいいなあと思う。で、調べてみると



 Cybernetと言う会社のZPC-D5ってのがあって、あ、もうこれで
 いいかも(^^;とか思っちゃいます。いやいや、これじゃただのPC
 なんだけど。

■安価であること
 PanasonicのMSX2、FS-A1は割りと安価で、これが普及の一翼を
 担ったんだなあと思われます。安けりゃいいわけではないけど、
 安価で入手性がいいことは重要かなあ。

■性能
 PCの、たとえばIntelのCPUを使えばそれなりにエミュレータも
 動くけど、やっぱりそれはただのPCだしMSXとは違う気はする。
 「あえて」CPUの性能は抑えて、ゲームなんかを個人でプログラム
 する楽しみを味わえる環境が良いかな?。

こう考えていくと、ARMの組み込みボードを使って、MSX3(っぽいもの)
を作ると面白そう。最近はARM Cortex-A8の乗ったボードが5000円
ぐらいで入手できますから!。

Raspberry PiもなかなかいいんだけどARM11なのはちょっと将来性
を感じないので、ターゲットとしてはBeagleBoneBlackがいいかも。
OSはLinuxで、ここにBASIC…かそれに変わる言語でプログラム
出来るライブラリが揃ってれば、それがMSX3(っぽいもの)になり
そうだなあ。

MSX1、2はエミュでカバーして、周辺機器はUSBに統一。ディスプレー
・サウンドはHDMI接続。MSX2,Turboからはかけ離れたCPU性能
(ARM Cortex-A8 1GHz!)になるし、OSもLinuxになるけど、
ある程度現代のPCシステムにあった形にすると、色々いじれる
Linuxがいいかな。

2014年2月16日日曜日

【なでしこ】マニュアルの話

今年で日本語プログラミングは30周年、なでしこは10周年ですか(^^)。
プログラミング言語と言えば、手続き型、関数型、オブジェクト指向
などなど色々あるけど、ほぼ英語。日本語プログラミングはMindとか
先駆的なものもあるけど、なかなか広まらないですね。

「なでしこ」はそんな中でかなり自然な日本語で書けるプログラミング
言語。ただ、あまり日本語っぽさにこだわると、プログラミングっぽく
なくなっちゃうんだけど(^^;。なでしこからプログラミングに入門すれば
その他の言語にも割りとスムーズに移行できそうだけどなあ。Cや
Javaやってからなでしこイジってるからそう思うだけ?

普及には何かしらマニュアルが必要かな~と思って、なでしこの
基本的な部分のマニュアル書こうかと計画中。最近はAmazonが
Kindle Direct Publishing(KDP)なんてサービスもやってるし、販売
してみても面白いかも(ё∇ё)。…気長にやろう!。

------

そういえば、MSXも祝30周年。ヒマがあればMSXのエミュとか作って
みたいし、MSX3の妄想もしてみたいけどなかなか時間が…。今、
STMicroとかが出してる格安のARM Cortex-M4なLSIとか使えば
結構面白いハード作れそうなんだけどなあ。PlayStation4など、
最新のハードでHDバリバリのゲームもいいけど、おっさん世代は
軽いハードで、頑張って動く昔ながらの「ゲーム性の高い」ヤツが
好きなんです(^^;。ああ、ワクワクするO(≧∇≦)O。