2014/04/13

Raspberry Piのコンソールを日本語化した際のメモ

sudo dpkg-reconfigure locales
をして,
ja_JP.UTF-8 UTF-8
にチェックをつける.
フォントをググると以下がメジャーらしい.
sudo apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname 
これを実行した後にRictyフォントをインストールする. 私はdebianでコンパイルしたものをscpで~/.fontsにコピーした後,
fc-cache -f -v
を実行した.
日本語に対応するためにuimを入れる.
sudo apt-get install uim uim-anthy
anthyのオンオフのキーマッピングをC-<Space>に変更
sudo vim /usr/share/uim/generic-key-custom.scm

(define-custom 'generic-on-key '("zenkaku-hankaku" "<Shift> ")
(define-custom 'generic-off-key '("zenkaku-hankaku" "<Shift> ")

それぞれを↓のように変更。

(define-custom 'generic-on-key '("zenkaku-hankaku" "<Control> ")
(define-custom 'generic-off-key '("zenkaku-hankaku" "<Control> ")

ついでにcapsもctrlにする.
sudo vim /etc/default/keyboard
# XKBOPTIONS=""
XKBOPTIONS="ctrl:nocaps"            # CapsLock --> Ctrl
# XKBOPTIONS="ctrl:swapcaps"        # CapsLock <-> Ctrl 

と追加して
sudo dpkg-reconfigure -phigh console-setup
を実行する.
ググるとfbtermなるものがよいらしいのでapt-get
sudo apt-get install fbterm
試しにfbtermを実行するとなんかwarningぽいものが出るので
chmod u+s /usr/bin/fbterm
をやった.
最後に,ログインした段階でfbtermを自動起動させるために,.bashrcに以下を追加
case $TERM in
  linux)
    if [ -c /dev/fb0 ]; then
      jfbterm -q -e uim-fep -u anthy
    exit
   fi
   ;;
esac
rebootして,ログインするとfbtermで入ることができた.
参考にしたもの
http://ameblo.jp/mijyu-sakura/entry-11329029030.html
http://shiremono.com/?tag=fbterm
http://blog.michinari-nukazawa.com/2013_03_01_archive.html

2014/04/04

オンラインコンパイラで素敵なプログラミング生活


おはようございます、ただの平部員です。この春、プログラミングしてますか?

この記事では3つのオンラインコンパイラサービスを紹介します。オンラインコンパイラサービスとは、ブラウザから特定のサイトにアクセスすることで、様々なプログラミング言語のソースをコンパイル、実行することが出来るサービスです。
オンラインコンパイラを利用する最大のメリットは、面倒な環境構築を飛ばして手軽に多くのプログラミング言語を試せることです。gccを一晩かけてビルドしたり、依存関係に悩まされたりすることはもはや遠い過去なのです!

1.Wandbox(http://melpon.org/wandbox/)

Wandboxは比較的最近に作られたオンラインコンパイラサービスで、ここが一番のオススメです。Wandboxの一番の強みは各言語の最新のコンパイラを利用できることでしょう。随時更新されるコンパイラ群によって、言語やツールキットの新機能を即座に試すことが可能となります!
また対応している言語も多く、C/C++からD,Haskell,C#をはじめとするコンパイラ言語から、PythonやPerl,PHP,Rubyといったスクリプト言語、さらにはLispも実行することができます。
まずはアクセスして、試してみましょう。左のバーから言語を選び、中央のテキストボックスにソースを入力します。その後[Run]ボタンを押すか[Ctrl]+[Enter]で実行!実行した後はまたソースをいじって再実行することもできますし、パーマネントリンクを作成して公開することも可能です。
パーマネントリンクを作成するには、コードの実行後、結果が表示される所の上にある[Share This Code]ボタンを押しましょう。するとアドレスバーがこのような(http://melpon.org/wandbox/permlink/ky4QUJ4ShBsT6RTJ )URIに変化するのでそれによってあなたのコードを公開することが出来ます。

三へ( へ՞ਊ ՞)へ ハッハッ

2.Ideone(https://ideone.com/)

Ideoneはオンラインコンパイラサービスの中でも有名なところで、ここも多くの言語、環境に対応しています。まず、左下のドロップダウンボックスで言語を選択し、コードを書きます。コードを書き終わったら右の[Run]ボタンを押して実行!画面が遷移するのでそこで結果を確認、またソースをいじって再実行したり、URIを人に教えることでソースと結果を共有したり出来ます。
右上のRecent Codesに飛ぶと最近Ideoneに投稿されたコードを見ることが出来ます。案外ここに上達のヒントや新しいやり方が転がっているかもしれません。Recent Codesに自分の書いたコードを乗せたくない場合は、言語設定の欄の隣にあるボタンで公開設定を決められるので、そこを変更するのがよいでしょう。
ただ若干動作が重いのと、広告がうるさいのが難点です。

3.codepad(http://codepad.org/)

最後に紹介するオンラインコンパイラサービスは、codepadです。codepadは対応言語も少ないですが、シンプルで大変軽量なサービスです。
codepadを使うには左のラジオボックスで言語を選択して、コードを書き、[Submit]で実行です。
出先でも携帯電話でプログラミングしてやるぜーという情熱に燃えた人なんかには便利じゃないでしょうか。

これらのオンラインコンパイラサービスを利用して、いつでもどこでも(Write Anywhere,Run Anywhere)素敵なプログラミング生活を送りましょう!!!

2014/02/05

使っているマイコンのご紹介

高校物理部副部長です。
今回は部活で使われているマイコンを紹介したいと思います。

部活では、以下の三五(17/8/8/1 訂正)種類のマイコンが主に使われています。

・PICマイコン(マイクロチップテクノロジー)
・SHマイコン(日本ルネサス)
・AVRマイコン(アトメル)
・Arduino
・Raspberry pi

まずは、PICです。いくつかの種類が使われていますが、一番多いのはdsPIC30F4013です。
PIC18F1320は新入生が最初に作るライントレース機のマイコンに使われるので、うちの部活に入ったら一回は使うマイコンだったりもします。
ちなみに過去、PIC12F、PIC16F、PIC18F、dsPIC30F、dsPIC33Fがロボコンで使われたことがあります。

次にSH7125Fです。
たいてい、クロックは50Mhzで動かしており、処理速度は65MIPSだそうです。
部内のはんだ力は5くらい[要出典]なので、秋月の基板にくっついたやつ(1500円)を使います。
ただ、部内では最盛期は過ぎてしまいました。

そしてAVR。新興勢力です。
姉妹校・渋谷教育学園渋谷中高科学部の主力ですが、ぶっちゃけピン数とデータメモリ容量の少なさがネックになって、幕張中高ではあまり使われてないです。

Arduinoも使っている人はいるにはいる、の程度です。

そういえばArduino、みなさんなんて呼ぶのでしょうか。
部内では「アルディーノ」もしくは「アルデュイーノ」と呼ばれています。

2013/09/10

文化祭へのお誘い

再告知+αです。

知能ロボコン2013で活躍したロボットを見たいそこのアナタ!
2013/09/15(日)09:00-15:00、渋谷教育学園幕張高校/中学校の文化祭(槐<えんじゅ>祭)にて動きます!
ぜひ見に来てください!
なお、毎年電気部・物理部の展示は校舎の端っこという位置にもかかわらず大盛況となっており、
混雑が予想されます。ご了承ください。

展示予定のコーナー:
  • 知能ロボコンなどのロボット実演
  • ロボット展示・機構説明
  • 1円玉とばし(電磁誘導)
  • イライラ棒
  • 部員自作のゲーム展示
  • Kinectでクイズ!?
これらの他、部員が突然の思いつきで何かを始めるかもしれません。

企画紹介ページ:
www.shibumaku.jp/mk-student/event/enju/2013/prj.html?b=55

アクセスなど詳しくは文化祭公式HPをご覧ください。

ちなみに、パンフレットでは綴じの真ん中のページという、
パッと開くだけの非常にわかりやすい場所に掲載されております。

また、槐祭では今年から企画投票が始まります。展示部門はぜひとも私たちに投票をお願いします!

余談:実は物理部副部長が文化祭のパンフレット作り/公式HPづくりを担当していたりします。
タイムテーブルには当日になると見ることのできるある仕掛けが施されていますのでご注目ください。

=(2013/09/12 22:13 追記)=
文化祭公式HPのリンクが間違っていたため修正しました。
======================

2013/08/23

知能ロボコン2013レポート

6月15,16日に行われた第25回知能ロボットコンテストに参戦してきました!
あれ・・・?何ヶ月前だ・・・?あーそこ広報担当の怠慢とか言わないげふんげふん

去年に比べ2チーム少ない7チーム(+OBチームもいました)での参加でしたが、人数は逆に増えていて(70人規模(!))なかなか大変でした。


出発直前の調整風景
一路学校のある千葉県千葉市から会場のある宮城県仙台市へ。

貸切バス車内。東北自動車道を北へ

というわけで結果を列挙していきます。
※当部活では、知能ロボットコンテストのことを仙台と呼ぶ変な習慣があることをご了承ください。

アオバしぐなる(チーム しぶまく「霧」)


http://www.inrof.org/irc/score/rinfo/robot008.html
チャレンジコースに出場しました。
メンバーは中2だけで構成されています。
一次予選、敗者復活に出場しましたが、残念ながら自由ボールしか入れられず、二次予選進出なりませんでした。
しかしながら、中2にしてステッピングモーター等を確実に動かし、自由ボールを決められたのはなかなか将来有望です。
来年に期待です。

鈿(チーム しぶまく「雷」)


http://www.inrof.org/irc/score/rinfo/robot005.html
チャレンジコースに出場しました。
メンバーは中2と中3で構成されています。
このチームも自由ボールしか入らず、二次予選進出なりませんでした。
アームの機構がユニークだっただけに、しっかりと動作せず残念です。
こちらも来年に期待です。

シャイニング・ドドスコイ(チーム しぶまく「霙」)

http://www.inrof.org/irc/score/rinfo/robot009.html
チャレンジコースに出場しました。
史上最強の自由ボールガチ勢、最速で自由ボールを決めた後、即競技終了したロボットです。
ハード的には足回りが高速で、かっこいい貯め込み機構だった分残念です。
来年・・・(あれっ受験生

Old Sacred Kingdom(チーム しぶまく「雫」)


http://www.inrof.org/irc/score/rinfo/robot019.html
チャレンジコースに出場しました。
大きく、壮観なこのロボット、一次予選で14点得点し、見事二次予選進出!
色分け機構が間に合いませんでしたが、確実な動作をします。
残念ながら、二次予選ではミスが重なり、自由ボールのみの得点となり、決勝進出はなりませんでしたが、来年も頑張ってほしいものです。


あっきー☆SONIC(チーム しぶまく「霊」)


チャレンジコースに出場しました。
去年のあっきー☆JAPANの拡大版のロボット、なんと15個全てのボールを一気に運ぼうという壮大な野望を実現しようとしていました!
一次予選ではミスが重なり、8点でしたが、敗者復活戦で17点を決め、二次予選に進出!
二次予選でも、14点を決め、何とか決勝へ進出!
しかしながら、決勝では動作のミスが相次ぎ、結局自由ボールのみの得点となってしまい、涙をのむ結果となりました。

こんぺーとー(チーム しぶまく「霰」)

宿にて 左が探索・回収機、右が運搬機

http://www.inrof.org/irc/score/rinfo/robot004.html
チャレンジコースに出場しました。
一次予選17点(4位通過)、二次予選20点(3位通過)、決勝に進出しました。
そして、決勝では競技点41点を決め競技点だけでは同率一位でしたが、審査員点も加わって見事優勝しました!チャレンジコースの優勝は部活史上初です。
副賞として、ネットタンサー(今は販売していないもの!)・オリエンタルモーター社のステッピングモーター5万円分・USB3.0対応フラッシュメモリ・スマホ/デジカメなどを収納できる板(名称を失念)を頂きました。
ロボット・盾・カップ・副賞とともに
そしてエキシビジョンタイムのネタ。その場で高速回転して当てずっぽうでボールを相手のゴールにシュゥゥゥーッ!超エキサイティンエキシビジョン!
グリップ力のあるタイヤ、高性能なステッピングモーター、小型な車体の恩恵といえるでしょう。


きねじろうと回るジョン(チーム しぶまく「霞」)


テクニカルコースに出場しました。
このロボットの最大の特徴は、ボールと缶のセンシングにきねじろう=Kinect以外何も使っていないこと!
そのため、大会当日になってもなかなかうまくいかず、非常に苦労していました。
1次予選、敗者復活戦ともに自由ボールのみの得点でしたが、二次予選進出。
2次予選もなかなかうまく動きませんでしたが、つかみ損ねた青ボールがゴールに転がって・・・見事得点!
11点でしたが、決勝進出はなりませんでした。
しかしながら、地道な調整の結果、デモンストレーションではかなり正確に取れるところに到達しました。その甲斐あってか、2次予選では技術点を多くいただきました。

ぐりとぐら 4ier(チーム しぶまくOB「零」)


http://www.inrof.org/irc/score/rinfo/robot028.html
前年に優勝したぐりとぐら。前年の機体にハンドを追加してさらなる時間の短縮を図りました。ちなみにこの改造の作業時間わずか数日。本人曰く、カップを返還しにきたはずが、来年も持ってくる立場に。この人たちは大人げないです以上。


こんな感じでしょうか。
今年も去年に続けてかなりすばらしい成果となりました。(自画自賛)
もちろん、両部門優勝というのは部活史上初です。
ちなみに地元の新聞である千葉日報にも「"渋幕勢"2部門制覇」という見出し・カラー写真付きで掲載されました。
コツコツと技術が積みあがってきて、安定性も増し、これからはこの技術をいかに伝達していくか、そしてパフォーマンス性の強化・新技術の導入が課題になりそうです。


さて、仙台が終わった後、各部員たちはマイクロマウスやロボカップジュニア、そして来年の"仙台"に向けて、準備を始めています。
審査員さんのコメントのように飛行ロボットが登場するのか!?乞うご期待です。
今年もがんばれ物理部電気部。

★知能ロボコン2013で活躍したロボットを見たいそこのアナタ!
2013/09/15(日)09:00-15:00、渋谷教育学園幕張高校/中学校の文化祭にて動きます!
ぜひ見に来てください!
パンフレット・文化祭HP掲載の企画アイコンはこちらです:
こてはペンよりも強しなんて偉そうなこと言ってますが某日暮里男子校に喧嘩を売っている気はこれっぽっちもありません。




2013/04/22

【副部長の】はじめてのpolyglot【不定期連載】

言語はCとrubyとpython


#define p
#define M 0;k,j,b[600];main(i){for(;i++<24;)for(k=1;i*k++<600;)b[i*k]=1;for(;j++<542;)b[j]||printf("%d\n",j);}m
i=M=0;
#if 0
print"2\n3\n5\n7\n11\n13\n17\n19\n23"
'''a'
=begin
'a'''
p=7;
s='111@A\"1A1!a1A21@P1S02#2112a!aP2AA22PPA213AA34'
m='Y$s\x15\x15C*iV\'Tp\x0d'
P=[1if int(z)==1 else-1for z in list(''.join([y if len(y)==7 else'0'*(7-len(y))+y for y in[bin(ord(x))[2:]for x in list(m)]]))]
for c in [ord(x) for x in list(s)]:
 print p*4+P[i]
 p+=(c>>4)-2
 i+=1
 print p*4+P[i]
 p+=c&15
 i+=1
print p*4+P[i]
'''a'
=end
print"\n"
2.step(542,1){|a|$M=0;2.step(23,1){|b|if a%b==0then$M=1;break;end};if$M==0then p a end};
'a'''
#endif

解説は後で書く.

まず,C言語の説明からしたいと思います.
このソースをプリプロセスにかけると以下のようになります.

i=0;k,j,b[600];main(i){for(;i++<24;)for(k=1;i*k++<600;)b[i*k]=1;for(;j++<542;)b[j]||printf("%d\n",j);}m=0;

次に,整形して見やすくします.

k,j,b[600];
main(i) {
    for(;i++<24;) {
        for(k=1;i*k++<600;) {
            b[i*k]=1;
        }
    }
    for(;j++<542;) {
        b[j]||printf("%d\n",j);
    }
}

i=0;m=0は必要無いので削除してしまいました.
この時点のコードで,解説に入っていきたいと思います.
まず,変数宣言ですが,グローバル変数は型名を宣言しないとintになり,さらに0に初期化されることを利用して,型宣言,初期化の代入を省いています.
main(i)のiですが,main関数の引数にはint argcが入ることを利用し,また型宣言がないと型がintになることを利用して,int iを宣言しています.
初期化は,argcは引数を指定せずにプログラムを実行すると1が入ることを利用して,実行すると1が入る仕組みになっています.

アルゴリズムは単純なエラトステネスの篩です.

最初の二つのfor文でふるい分けをしています.
外側のfor文で2から24までの数をiに代入し,内側のfor文でi*2以降の全ての倍数にフラグを立てています.
高速化の面ではきちんと素数の倍数でフラグを立てるべきですが,倍数の倍数でも別に結果には変わりないので省いています.
外側のfor文の条件でi++<24となっているのは,プログラムを実行したときiに1が入ってしまうので,i<24を比較した後に後置インクリメントでi+=1をしています.
 このようにすることで,i<24を比較した後,内側のfor文に入る前にiが2になってくれます.
内側のfor文でiの倍数にフラグを立てています.
このfor文も比較の時はkの値をそのまま使って,中の文に入る前にk+=1をしています.
このようにしないと,iが素数の場合,for文のb[i*k]=1;がb[i*1]=1;となってしまい,iは素数であるにも関わらず,b[i]が1になってしまいます.

 次のfor文で素数の出力をしています.
for文の中身はb[600]を順番に542まで調べて,b[j]==0の時のみprintfしています.
C言語の論理積と論理和,つまり&&と||はそれぞれ次のような特徴があります.

論理積は (expr_1&&expr_2&&…&&expr_N) と書くとき,expr_nが偽ならそれ以降,つまりexpr_n+1以降は評価しません.

また,論理和は (expr_1||expr_2||…||expr_N) と書くとき,expr_nが真ならそれ以降,つまりexpr_n+1以降は評価しません.

このことを利用し,
if(expr_1==0) {
    expr_2;
}
を
expr_1||expr_2;
と書くことができます.
これを利用してフラグが立っていない添字のみを出力しています.