Ruby と Python

どちらもInterpreter Languageだが、ひとつを選べと言われたらどちらを覚えたほうがよいのだろう。 
日本ではRubyがかなり人気があるようだが、WorldwideのUser BaseではPythonのほうが多い。 多いと言ってもPHPとかに比べるとかなり少ない。

Ruby

# Old "coke" program from 80's Basic programming book in Ruby
answer = Random.rand(1..100)
count,guess = 0,0
puts 'I am thinking about number between 1 and 100. Can you guess?'
while (answer != guess) 
  guess = gets.to_i
  count += 1
  if guess > answer 
     puts "#{guess} is too high"
  elsif guess < answer
     puts "#{guess} is too low"
  else 
    puts "you got it right in #{count} try!"
  end
end

Python

"""Old "coke" program from 80's Basic programming book, in Python"""
import random
answer = random.randrange(1,100)
print ("I am thinking a number between 1 and 100. Hope you can guess")
guess, count = 0,0
while (answer != guess ):
    guess = input ("what number am I thinking? ")
    guess = int(guess)
    count += 1
    if answer < guess:
        print ( guess, " is too high, try again")
    elif answer > guess:
        print ( guess," is too low. Try again")
    else:
        print ("Bingo! you guessed it right in ",count," tries!")

とりあえず調べて見えてきた部分で大昔、Basicで初期に書いた練習用プログラムを移植してみたが、ごらんのとおり、これくらいのサイズのプログラムなら、どちらで書いてもほとんど差がない。言語のパワフルなところを使ってみないとその差がわからない、という感じだが、 ルーズに行くならPythonかな?インデントでブロックを明示している、つまり単なる書式ではなく、言語の一部になっているのが、なんとも割り切っているところ。 これで{}も"End"も必要ない。 個人的には好きである。 どちらの言語も読み解きやすいのはまちがいなく、これをC++ で書こうとすると、

#include <iostream>
#include <cstdlib> //need this to use rand() 
#include <ctime> //need this to use time() 
using namespace std;

int main(){
    int answer, guess=0, count=0;
    srand(time(NULL));
    answer = rand()%100 + 1;
    cout << "I am thinking about the number between 1 and 100. Can you guess?";
    while (guess != answer) {
        ++count;
        cin >> guess;
        if (guess > answer) 
            cout << guess << "is too high";
        else if (guess < answer) 
            cout << guess << "is too low";
        else
            cout <<"You have it right in " << count << "  times!";
        cout << endl;
                    
    }
    return 0;
}

これよりは楽ですよ。

Raspberry Pi に頭をつけてみる。

RasPiにキーボードとモニターを接続しようと思ったとき、キーボードはUSB接続のキーボードで20ドルくらいからあるし、昔のキーボードがどこかに転がっていればそれを転用するので大したことはないが、困るのはモニターである。 RCA入力端子のある中古のTVというのも選択肢としてはあるわけだが、せっかくならHDMIで高解像度を楽しみたいわけである。 AmazonやNewEgg,Tigers Directなどで探してみても100ドルくらいはする。 するとキーボードと合わせると120ドルから150ドルくらいの出費になってしまう。
ところが世の中よくしたもので、RasPiにぴったりのガジェットがある。 Motorola が出しているLapdockというスマートフォーン用のドッキングステーションなのだが、これが液晶モニター、キーボード、タッチパッドとUSBハブ付きで充電バッテリ内蔵なのだが、本来は400ドルくらいするはずのものが、あまりにも売れなかったらしく、安売りになっている。 自分は”Lapdock for AT&T Atrix 4G”というモデルを80ドルでアマゾンから入手。ネットの情報では50ドルくらいで手に入る、ということだったが、みな同じことを考えて購入するらしく、市場の原理が働いたようで、残念ながら50ドルというのは見つけることができなかった。

RasPiとの接続だが、コネクタがやや特殊である。 クレードルにはHDMIのミニコネクタとUSBのマイクロコネクタがついていて、これに接続すればよいのだが、それぞれオスのコネクタなので、ケーブル側にメスのソケットが必要になる。よって、HDMI D-Female からHDMI Maleというケーブルまたはケーブルとアダプタの変換をしないとRasPiにはつながらない。 またUSBのほうだが、これはクライエント側(下流)のコネクタではあるのだが、同時にスマートフォーンをチャージする機能を持っているので、+5Vが供給されている。 本来ならば、パワーライン(4本の心線のうち赤い線)を切断して、データラインだけ、USBホストコネクタ(RasPiの大きいほうのUSBソケット)と接続し、 ラップドックから電源供給を行う場合パワーラインのほうはここからマイクロUSBソケットに赤(5V)と黒(グランド)の心線をスプライスして供給する、あるいはUSBハブからのホストコネクションを使うべきなのだが、実はRasPiに関していえば、全部のラインをホスト側に差し込んでもOK。回路図を見ると、RasPi内部でフューズをかましているだけなので、5Vが保障されればどちらから供給されても問題ない設計になっている。 (きちんとパワーマネジメントICが入っているBeagleBoneでは恐ろしくてできない)
ラップドック自体はHDMIの接続と画面を開けた二つの信号を見て電源をオンする構造になっているようだ。 自分の環境ではHDMIケーブルのソケットの勘合が緩いようで、ショックなどで接触が悪くなると電源が落ちてしまう。 写真では電源を別に取ってあるのはそういうわけである。20130727_122330

参考にしたサイトは以下。
英語

http://rpidock.blogspot.com/
http://www.instructables.com/id/The-Raspberry-Pi-Lapdock-Connection/
http://www.raspberrypi.org/phpBB3/viewtopic.php?t=31416&p=272789
上記3つのサイトは写真が豊富 コネクタ・ケーブルなどの小売サイトへのリンクなどもある。
http://www.element14.com/community/groups/raspberry-pi/blog/2012/09/27/raspberry-pi-lapdock-hdmi-cable-work-around
このサイトはHDMIがRasPiをセンスしないと電源がONにならない、というところから議論をはじめていて、非常に参考になった。またHDMIが接続しっぱなしだと、センス電流が常時流れる状態になる、ということで、これをカットするためのスイッチを組み付ける方法の紹介がある。