コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

IchogoJam用シリアルキーボードアプリ

IchigoJam用のシリアルキーボードアプリ「IJKB for IchigoJam」を作ってみたので、紹介も兼ねてブログを書きます。
これはIchigoJamのシリアルポートにつなげて、Windows機をキーボードの代わりに使用するアプリです。
Mac版のシリアルツールはtitoi2さんがgithubIchigoJamSerialConsoleを公開されています。

ダウンロード

githubにあるIJKB for IchigoJamをダウンロードしてください。

インストール

インストールは特にありません。 IJKB.exe を実行するだけです。

使い方

シリアルポートをIchigoJamを接続したポートに合わせて接続を押すだけです。IchigoJamは標準でボーレートは115200bpsです。

あとは、キーを打てばIchigoJamの画面に文字が出ます。このプログラムの文字表示はIchigoJamの画面を表示しているわけではありません。単純に入力文字のエコーバックとIchigoJamかせシリアルポートに出力する文字を表示しているだけです。
Windows上でのキーボード操作が全てIchigoJamに送信されのるので、それがいやなときには「切断」キーをクリックしてIchigoJamとの接続を切ってください。

エコーバックを止める

エコーバックを止めたい場合は、右上の「エコーバック」ボタンをクリックしてください。

ファンクションキー

画面の二段目にファンクションキーの内容が表示されています。これはIchigoJamの内部実装のものではなくて、IJKBの独自実装です。ファンクションキーの内容を書き換えることで自由に変更できます。改行文字は \n としてください。例えば、100行目までのリストを表示したいときには「list100\n」としてください。書き換えた内容は書換え位置からカーソルを逃がすことで入れ替わります。

BASファイルの送信

IJKBの文字表示画面にBASファイルをドラッグすることにより、IchigoJamにプログラムを送信できます。以下はBASファイルを読み込んでいる様子です。ファイルの送信を途中でやめたい場合は「切断」キーをクリックしてIchigoJamとの接続を切ってください。

プログラムの貼り付け

Windowsでコピーした文字をIchogoJamに貼り付けることができます。文字をコピーしたら、画面下にある「貼り付け」ボタンをクリックしてください。プログラムに貼り付けを途中でやめたい場合は「切断」キーをクリックしてIchigoJamとの接続を切ってください。

上書き/挿入の切り替え

文字の「上書き」と「挿入」切り替えは、画面下の挿入ボタンをクリックするか、キーボードの「Insert」キーを押してください。

半角英数とカナの切り替え

「英数文字」と「半角カナ文字」の切り替えは、画面下のラジオボタンを選択するか、キーボードの「カタカナ/ひらがな/ローマ字」キーを押してください。

ローマ字入力をしたい場合は、カナ選択時の入力モードを「ローマ字入力」を選らんでください。すると画面下に入力ウィンドウが開きます。このウィンドウでは通常の入力方式が使えるので、ローマ字入力で日本語入力してください。

入力後、改行を押すと、入力文字が半角カナ文字になって、IchogiJamに入力されます。

プログラムのWindowsへの保存

もしプログラムをWindowsに保存したい場合は、listを表示した後、IJKBに表示されたプログラムリストをマウスで選択してコピーし、それをエディタに貼り付けてください。表示は内容はスクロールして戻すことができるようにしています。


以上が、IJKBの機能です。

実数の加減算

IchigoJamを一日触って、IchigoJamを体験するのとBASICのリハビリも兼ねて、プログラムを作ってみました。IchigoJamで実数計算をします。
とりあえず、一日かけて作成したプログラムを置いておきます。
たぷん、何をしているか、コメントも何も書いていないので、まったくわからないと思います。すいません。

IchigoJamプログラム

全てのプログラムを保存し終わった後、load 0してください。
そして、[99]=10としてください。
加減算を行いたい値を配列[0][1][2]と[3][4][5]に入力してください。

配列[0]→指数、[1][2]には4桁の数値をいれます。
2.3456789E1を入力したいときには、let [0],1,2345,6789 とします。
-2.3456789E1を入力したいときには、let [0],1,-2345,6789 です。
-2.3456789E-5は、let [0],-5,-2345,6789 です。
[3][4][5]も同様です。

下記は 100 - 10 = 90 を計算する例です。

[99]=10
OK
let [0],2,1000,0000:let [3],1,-1000,0000
OK
run
(1.0000000E2)+(-1.0000000E1)= 9.0000000E1
OK

プログラム 0です。save 0して保存してください。

1 goto[99]
10 'let [0],2,1087,5420
20 'let [3],1,1234,5678
30 ?"(";:[94]=0:[100]=200:[99]=40:[98]=0:lrun 2
40 ?")+(";
50 [94]=3:[99]=60:lrun 2
60 ?")= ";
70 w=0:v=3:[86]=80:goto 200
80 [94]=0:[100]=200:[99]=90:[98]=0:lrun 2
90 ?:[99]=10:end
200 [100]=500:[99]=210:[98]=0:lrun 2
210 [85]=[w]-[v]:if [85]>8 else goto 250
220 if f<0 then [w+1]=-[w+1]
230 goto [86]
250 if(f=1)+(f=-2)else goto 430
260 if[85]<4 else goto 310
270   q=[85]:gosub 700
280   m=[w+2]+([v+1]%r)*(10000/r)+[v+2]/r
290   l=[v+1]/r
300 goto 340
310   q=[85]-4:gosub 700
320   m=[w+2]+[v+1]/r
330   l=0
340 [w+2]=m%10000
350 if m>9999 then m=1 else m=0
360 [w+1]=m+[w+1]+l
370 if [w+1]>9999 else goto 410
380   [w+2]=[w+2]/10+([w+1]%10)*1000
390   [w+1]=[w+1]/10
400   [w]=[w]+1
410 if f=-2 then [w+1]=-[w+1]
420 goto [86]
430 [100]=200:[99]=440:[98]=0:lrun 1
440 goto [86]
700 r=1:if q=0 then return else for p=1 to q:r=r*10:next:return

プログラム 1です。save 1して保存してください。

100 goto[100]
110 lrun[98]
200 [70]=[w+1]:[71]=[w+2]:[72]=0:[73]=0
210 if[85]<4 else goto 240
220   q=[85]:gosub 700
230   [74]=[v+1]/r:[75]=([v+1]%r)*(10000/r)+[v+2]/r:[76]=([v+2]%r)*(10000/r):[77]=0
240 goto 270
250   q=[85]-4:gosub 700
260   [74]=0:[75]=[v+1]/r:[76]=([v+1]%r)*(10000/r)+[v+2]/r:[77]=([v+2]%r)*(10000/r)
270 m=0:for z=3 to 0 step -1
280   [70+z]=[70+z]-[74+z]-m
290   if [70+z]<0 then [70+z]=10000-[70+z]:m=1 else m=0
300 next
310 n=0:for z=0 to 7
320   if [70]/1000>0 then z=7:goto 380
330   [70]=([70]%1000)*10+[71]/1000
340   [71]=([71]%1000)*10+[72]/1000
350   [72]=([72]%1000)*10+[73]/1000
360   [73]=([73]%1000)*10
370   n=n+1
380 next
390 if n=8 then [w]=0 else [w]=[w]-n
400 [w+1]=[70]:[w+2]=[71]
410 if f=-1 then [w+1]=-[w+1]
420 goto 110
700 r=1:if q=0 then return else for p=1 to q:r=r*10:next:return

プログラム 2です。save 2して保存してください。

100 gosub[100]
110 lrun[98]
200 for y=0 to 1
210   [93]=[y+[94]+1]
220   if[93]<0 then ?"-";:[93]=-[93]
230   for z=3 to 0 step -1
240     q=z:gosub 700
250     ?[93]/r;
260     [93]=[93]-([93]/r)*r
270     if(z=3)&(y=0)?".";
280 next:next
290 if[[94]]<>0?"E";[[94]];
300 return
400 [92]=0:if([90]>8)+([90]<=0)then return
410 if [90]<=4 then [92]=[[91]+2]:q=[90]-1 else [92]=[[91]+1]:q=[90]-5
420 gosub 700:[92]=([92]/r)%10
430 return
500 h=0:f=0
510 if[w+1]<0then h=h+1:[w+1]=-[w+1]
520 if[v+1]<0then h=h+10:[v+1]=-[v+1]
530 for g=0 to 2
540   if[w+g]>[v+g]else goto 580
550     if h=1 then f=-1
560     if h=10 then f=0
570     g=2:goto 630
580   if[w+g]<[v+g]else goto 630
590     for s=0 to 2:t=[w+s]:[w+s]=[v+s]:[v+s]=t:next
600     if h=10 then f=-1
610     if h=1 then f=0
620     g=2
630 next
640 if h=11 then f=-2
650 if h=0 then f=1
660 return
700 r=1:if q=0 then return else for p=1 to q:r=r*10:next:return

TeraTermからIchigoJamにプログラムを書き込む

IchigoJamを一日触って、直接プログラミングするよりも慣れたエディタでプログラムを書いて出来上がったプログラムをIchigoJamに送信したほうが楽だと思ったので、その方法を備忘録として書いておきたいと思います。方法はIchigoJamのシリアルポートからプログラムを書き込みます。シリアル接続にはTeraTermを用いました。IchigoJamとTeraTermの接続は以前のプログ(2015/4/1)に書いています。

TeraTermの設定

TeraTermからIchogoJamに大量のデータを一気に送信するときに、送信タイミングを遅延させないとIchigoJamがデータを取りこぼす恐れがあります。そこで以下のような設定をしました。送信遅延を30msとりました。

他の設定は下記のようです。受信がAUTO、送信がCR+LF、ローカルエコー有りです。

TeraTermからの書き込み

IchigoJamの電源を入れたときの画像です。下がTeraTermで上がIchigoJamのビデオ信号のキャプチャです。

ここに、プログラムをコピーアンドペーストしてTeraTermからIchogoJamに送信します。送信するときに、TeraTermはローカルエコー設定をしているので、一瞬でプログラムを表示しますが、IchigoJamには遅延時間を入れながら送信しているので、ゆっくり送信されます。
この様子を動画で取ってみました。説明したいことがわかると思います。IchigoJamの起動からスタートします。

以上で説明終了です。

IchigoJamのファームを書き換える

IchigoJamを買いました。いじっているうちに暴走させてしまい、動かなくなったので、ファームを焼きなおしました。その方法を備忘録として書いておきます。
IchigoJamの回路図はこのページに載っています。

USB-シリアル変換基板の用意

IchigoJamにファームを書き込むために、IchigoJamとPCをシリアル接続する必要があります。ちょうど手元にあった秋月電子で600円で売っている超小型USBシリアル変換モジュールを使うことにしました。
図のように、IchigoJamのスライドスイッチをOFFにしておいて、USBシリアル基板とIchigoJamを接続します。

USBシリアル  IchigoJam
   TxD   -----   RxD
   RxD   -----   TxD
   GND   -----   GND
          ISP ----- GND
          RESET --- GND

IchigoJamのISPもGNDにつなぎます。そして、IchigoJamのRESETもGNDにつないでおきます。RESETはスイッチオンした後にGNDから抜きます。

Flash Magicをダウンロードします

Flash Magicをダウンロードします。サイトはhttp://www.flashmagictool.com/です。画面右のDownloadからFlashMagic.exeをダウンロードします。

Flash MagicをインストールしたらFlash Magicを起動します。USBシリアルポートが割り当てられているCOM番号を調べてFlash Magicに設定します。COMポートを調べるにはTeraTermを立ち上げるのが一番早いかもしれません。ここではCOM4です。

Flash Magicの設定をします

図のように、LPC1114/102を選択し、COM4、ボーレートを115200にします。Verifyにもチェックを入れておきます。

IchigoJam起動

IchigoJamの電源スライドスイッチをオンにします。その後、GNDに接続したRESETのコードをはずします。この状態でIchigoJamがファームの読み書きができる状態になっています。

ファームの書き換え

現在のIchigoJamのファームを読み出してみます。Flash MagicのDisplay Flash Memoryを選択します。下図の虫眼鏡のアイコンです。

下図のようにメモリの内容がダンプされます。ダンプされれば接続が成功しています。

次に、ファームの書き換えを行います。Browseで最新ファームのhexを選びます。

Startボタンを押します。書き込みが開始され、Finishedが出れば終了です。

IchigoJamを起動してみる

スライドスイッチをオフにしてISPのコードを外します。
TeraTermを起動します。COM4を選択し、USBシリアルと接続します。次に、シリアルポートの設定を開いてボーレートを115200にします。

次に、端末を設定します。32×24にすると、IchigoJam画面サイズになりますがキャラクタが違うのであまり関係ないかな。

受信はAUTOにして送信はCR+LFにします。後、ローカルエコーにしないと入力文字がわかりません。
この状態で、IchigoJamのスライドスイッチをオンすると下のような画面になれば、ファームの書き換えが成功しています。


これで、新規ファームにアップデートしていけるようになりました。ファームをアップデートしても、SAVEしたプログラムは消えていませんでした。

WindowsでVagrant ec2を試してみる(1) 事前環境作り

 最近、awsのec2を使い始めました。Vagrant ec2というVagrantでec2インスタンスをコントロールできるプラグインがあるので、Vagrantからec2インスタンスを作成してみるまでをまとめてみました。というか、このブログを書きながら試しています。

VagrantVirtualBoxのインストール

すいません。VagrantVirtualBoxはインストールされていて、WindowsVagrantが動く環境ができているというところからスタートしたいと思います。
WindowsVagrantを動かす方法などは、Windows7にVirtualBoxとVagrantをインストールしたメモサイトさん等を参考にしてください。

先ずは、事前準備です。WindowsコマンドプロンプトからVagrantを使うよりも、linuxのシェルから使ったほうが個人的には好きなので、bashが使える環境を作ります。

とりあえずGitをインストールする

何故、Vagrantとは全然関係ないgitをインストールするかというと、gitは便利だし覚えた方がいいと思うからです。すいません、それだけです。でもgitのMSYSからVagrantを使うことになります。
Windows用のgitとしてGit for Windowsをインストールします。ダウンロードはGit for Windowsから、下記のDownloadボタンを押します。

GitBashのインストール

ダウンロードしたインストーラーを起動します。Nextを押します。

Nextを押します。

Nextを押します。

Git Bash Hereを選択して、Nextを押します。

Nextを押します。

Use Git from the Windows Command Promptを選択します。

Checkout as-is, Commit as-isを選択して、Nextを押します。

Finishを押します。チェックをつけているとリリースノートが開きます。

これでGitBashのインストール終了です。

GitBashのショートカット作成

GitBashのショートカットを作っておきましょう。たぶん、スタートメニュにあると思います。

リンク先は、"C:\Program Files (x86)\Git\bin\sh.exe" --login -i
作業フォルダは、%HOMEDRIVE%%HOMEPATH%
です。
マウスの右クリックでペーストしたいので、簡易編集モードにチェックを入れます。

最近、目が悪くなって、大きな文字でないと辛いので、フォントも大きくします。

ウィンドウの高さも大きめにします。


プロパティの設定は、こんなもんでしょうか。

日本語ファイル名を表示できるように

GitBashはそのままだと日本語ファイル名が化けます。気持ちが悪いので見えるようにします。

$ cd ~;ls -al

上のようにコマンドを打って、.bashrcファイルが無ければ作成します。
.bashrcファイルの作成

$ touch .bashrc

.bashrcファイルに下記の一行を追記します。

alias ls='ls --show-control-chars'

追記した後、GitBashを再起動するか、

$ source ~/.bashrc

すれば、日本語ファイル名が見えるようになります。

その他のGitBashに関する設定方法などは、WindowsのGitbashで、Githubをssh経由で操作できるようにセットアップしたなどのサイトを参照してください。

Windowsへの必要なもののインストールは終了しました。次に、awsで事前に設定しておかなければならないことが有るので、それらについて書いていきます。

WindowsでVagrant ec2を試してみる(7) vagrant up --provider=aws

いよいよ、vagrant upして、awsのEC2インスタンスVagrantを用いて生成してみます。
起動は、--providerオプションをつけます。
GitBashを起動します。GitBashについては、WindowsでVagrant ec2を試してみる(1) 事前環境作りで説明しています。

vagrant up --provider=aws実行

実行するには、先ず、Vagrantを起動するフォルダを作成します。今回は ~/Documents/Vagrant/aws フォルダでVagrantを起動したいと思います。先ず、~/Documents/Vagrant/awsフォルダに先ほどのVagrantfileを置きます。そして、~/Documents/Vagrant/awsフォルダに移動します。
そして、vagrant up --provider=aws を 実行します。

$ cd ~/Documents/Vagrant/aws
$ vagrant up --provider=aws
Bringing machine 'default' up with 'aws' provider...
[fog][WARNING] Unable to load the 'unf' gem. Your AWS strings may not be properly encoded.
==> default: HandleBoxUrl middleware is deprecated. Use HandleBox instead.
==> default: This is a bug with the provider. Please contact the creator
==> default: of the provider you use to fix this.
==> default: Warning! The AWS provider doesn't support any of the Vagrant
==> default: high-level network configurations (`config.vm.network`). They
==> default: will be silently ignored.
==> default: Launching an instance with the following settings...
==> default:  -- Type: t1.micro
==> default:  -- AMI: ami-bddaa2bc
==> default:  -- Region: ap-northeast-1
==> default:  -- Availability Zone: ap-northeast-1c
==> default:  -- Keypair: VagrantEC2
==> default:  -- Security Groups: ["VagrantEC2SecurityGroup"]
==> default:  -- Block Device Mapping: []
==> default:  -- Terminate On Shutdown: false
==> default:  -- Monitoring: false
==> default:  -- EBS optimized: false
==> default: Waiting for instance to become "ready"...
==> default: Waiting for SSH to become available...
==> default: Machine is booted and ready for use!
==> default: Warning! Folder sync disabled because the rsync binary is missing in the host.
==> default: Make sure rsync is installed and the binary can be found in the PATH.

これでインスタンスが生成されているはずです。vagrant sshしてみます。

$ vagrant ssh
[fog][WARNING] Unable to load the 'unf' gem. Your AWS strings may not be properly encoded.
Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.13.0-24-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

  System information as of Sat Jun 21 19:26:23 UTC 2014

  System load:  0.81             Processes:           73
  Usage of /:   9.6% of 7.75GB   Users logged in:     0
  Memory usage: 11%              IP address for eth0: 172.31.23.210
  Swap usage:   0%

  Graph this data and manage this system at:
    https://landscape.canonical.com/

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.


ubuntu@ip-172-31-23-210:~$

無事、ログインできました。
awsのEC2を見てみると、インスタンスが生成されていることが確認できます。

TeraTermからログインしてみる

ここまで来ると、使い慣れたTeraTermからログインしたくなります。ということで、ログインしてみます。TeraTermのインストール方法は、TeraTermの最新版(4.82)をWindows7にインストールしてみました!サイトなどを参考にしてください。
TeraTermを起動します。EC2のIPアドレスは、awsのEC2インスタンスのConnectポタンを押して確認します。WindowsでVagrant ec2を試してみる(6) Vagrantfilesの作成のoverride.ssh.usernameのところで少し解説しています。

OKを押すと、セキュリティ警告がでるので、「続行」を押します。

User名に ubuntuを入れて、パスフレーズは無しでいいです。RSA/DSA鍵を使うを選択し VagrantEC2.pemファイルを選びます。

OKを押すと、TeraTermでEC2にログインできました。


以上でWindowsからVagrantaws EC2のインスタンスを生成する解説を終わります。

WindowsでVagrant ec2を試してみる(6) Vagrantfilesの作成

vagrant-awsプラグインもインストールしたので、最期にVagrantfilesを作成したいと思います。
とりあえず、下記のような感じです。それぞれ説明していきたいと思います。

# vagrant up --provider=aws
#
Vagrant.configure("2") do |config|
  config.vm.box = "aws-dummy"

  config.vm.provider :aws do |aws, override|
    aws.access_key_id = "アクセスキー"
    aws.secret_access_key = "シークレットアクセスキー"
    aws.keypair_name = "VagrantEC2"

    aws.instance_type = "t1.micro"
    aws.region = "ap-northeast-1"
    aws.availability_zone = "ap-northeast-1c"
    aws.security_groups = "VagrantEC2SecurityGroup"
    aws.ami = "ami-bddaa2bc"

    override.ssh.username = "ubuntu"
    override.ssh.private_key_path = "~/.ssh/VagrantEC2.pem"

    aws.tags = { 'Name' => 'VagrantTest' }

  end
end

config.vm.box

config.vm.boxは、vagrantのダミーボックスです。WindowsでVagrant ec2を試してみる(5) vagrant-awsプラグインインストールで作成したものです。

config.vm.box = "aws-dummy"

aws.access_key_id と aws.secret_access_key

aws.access_key_id と aws.secret_access_keyは、WindowsでVagrant ec2を試してみる(2) awsでのアクセスキー設定で取得したAccess Key Id と Secret Access Keyのことです。****は各自のコードになります。

aws.access_key_id = "********************"
aws.secret_access_key = "****************************************"

aws.keypair_name

aws.keypair_nameは、WindowsでVagrant ec2を試してみる(3) awsでのKey Pairs設定で設定したKey pair nameになります。今回は「VagrantEC2」と設定しました。

aws.keypair_name = "VagrantEC2"

aws.instance_type

aws.instance_typeは、作成するインスタンスのタイプを設定します。「t1.micro」は最も小規模なインスタンスです。

aws.instance_type = "t1.micro"

aws.region と aws.availability_zone

aws.region と aws.availability_zoneは、インスタンスを生成する地域を指定します。WindowsでVagrant ec2を試してみる(3) awsでのKey Pairs設定で、「Tokyo」を選択しており、「Tokyo」のリージョンは「ap-northeast-1」となり、アベイラビリティゾーンは「ap-northeast-1c」となります。

aws.region = "ap-northeast-1"
aws.availability_zone = "ap-northeast-1c"

aws.security_groups

aws.security_groupsは、WindowsでVagrant ec2を試してみる(4) awsでのSecurity Group設定で作成しています。今回は、「VagrantEC2SecurityGroup」というグループを作成しました。

aws.security_groups = "VagrantEC2SecurityGroup"

aws.ami

aws.amiは、生成するインスタンス上で動かすOSを指定します。今回はUbuntu Server 14.04 LTS 64bitのインスタンスを作成したいので、「ami-bddaa2bc」としました。

aws.ami = "ami-bddaa2bc"

override.ssh.username

override.ssh.usernameは、sshでログインするときのユーザー名です。選択したaws.amiによって決まっています。今回はUbuntu Server 14.04 LTS 64bitを選んだので、ユーザー名は「ubuntu」です。ユーザー名をインスタンスを作る前に調べる方法がわかりませんでした。一度、EC2でインスタンスを作れば、Running中にConnectボタンが押せるようになるので、Connectボタンを押せばユーザー名を確認することができます。

override.ssh.username = "ubuntu"

override.ssh.private_key_path

override.ssh.private_key_pathは、WindowsでVagrant ec2を試してみる(3) awsでのKey Pairs設定で保存したKey Pairsファイルのパスを指定するものです。今回は .sshフォルダにVagrantEC2.pemを保存しています。

override.ssh.private_key_path = "~/.ssh/VagrantEC2.pem"

aws.tags

aws.tagsはタグを指定するものですが、生成したインスタンスのNameをセットしてみました。インスタンスの名前にVagrantTestと表示されます。

aws.tags = { 'Name' => 'VagrantTest' }

ここで作成したVagrantfileをVagrantを起動するフォルダに置きます。