4 月 29
Apple iTunes 5.0
Image by cd.harrison via Flickr

iTunesサーバーがあれば、同じネットワークにあるPCがiTunesを起動すると、iTunesサーバーの持つ曲を自由に再生できるようになります。

つまり,自分が立てたiTunesサーバーに入れた曲を,家族がPCを付けてiTunesを起動するだけで再生可能になります.なかなか便利.

まずは余っているPCに,必要であればHDDを増設して,linuxを入れます.

で、mp3を再生できる環境を整えます.

で,iTunesサーバーはfirefly(mt-daapd)というものが使えます.

ubuntu,debianであれば

sudo apt-get install mt-daapd

で導入は終了.

もしかしたらmp3を再生するためにいくつかライブラリが必要かもしれません.

あとは,設定を行います.

sudo vim /etc/mt-daapd.conf

と,vim などのエディタで設定ファイルを開き,

音楽ファイルを置く場所を

mp3_dir = /home/music/

など好きなディレクトリに書きなおします.

iTunesから見える名前は,

servername = jun's music

など設定を変えられます.

設定を変えた後は

sudo /etc/init.d/mt-daapd restart

で,リスタートすると設定が反映されるかと思います.

曲がうまく認識されない場合は,

  • 曲を置いたディレクトリの場所の設定
  • 曲を置いたディレクトリのパーミッション
  • 曲(mp3)のパーミッション

などを確認してみる.

Reblog this post [with Zemanta]
1 月 13

なかなか苦労しました.

一番参考になったのは,

Ubuntu 8.04.1 に Ruby on Rails 2.1.0 を入れる - neconnect.net

です.

やること

$ sudo apt-get install ruby rdoc irb ruby1.8-dev rubygems libopenssl-ruby
$ sudo gem update --system
$ sudo apt-get remove rubygems
$ sudo ln -s /usr/bin/gem1.8 /usr/bin/gem
$ sudo gem install rails

で,Ruby on railsの環境ができます.古いgemを入れてからアップデートして,古いgemを削除して新しいgemへのリンクを作るようです.

自分はMysqlを使いたいので,

$ sudo apt-get install mysql-server libmysql-ruby1.8 libmysqlclient15
$ sudo gem install mysql

をやって,起動時には

rails -d  mysql

をやるとデータベースをmysqlにしてrailsを実行できます.

これを毎回やるのは忘れそうなので,~/.zshrc(bashなら~/.bashrc)に

alias rails="rails -d mysql"

を追加しました.

で,twitter4rを使うには,

$ sudo gem install json
$ sudo gem install twitter4r

たしかこんな感じでいけると思います.

1 月 09
Image representing Twitter as depicted in Crun...
Image via CrunchBase

Rubyの勉強をちょっと昨日から始めたので,練習にtwitterにギャグをPostするプログラムを書いてみました.

subetter

1日1回ということでそんなにうざくないので,せっかくだからフォローしてやってください.

これを作るためにやることは

  • 1行に1つギャグを書いたテキストファイルを作る
  • テキストファイルをランダムで1行読む
  • それをtwitterにポストする
  • それをcronで1日1度実行する

っていう簡単なお仕事.

まず,ギャグを書いたテキストを作ります.
これは,いい方法が思いつかなかったのでとりあえずネットで適当に集めてきて自分でテキストファイルを作りました.まだギャグが30くらいしかない.さびしい.

で,それをランダムで1行読むっていうのは勉強したから簡単だったんだけど,twitterにpostするにはどうすればいいのかなって思って調べてみると,

twitterでbotを作りたい.(2) - reverleveeの日記
という,ほとんど同じことをやっている方を見つけたので,それを参考にさせてもらった.というか,最初からこれを拝借すれば早かったな.

ということで,自分の汚いコードは捨てて,その人のプログラムをコピペしたプログラムがこちら.
subetter.rb

require('time')
require('rubygems')
gem('twitter4r','0.3.0')
require('twitter')

lines = 0

msg = nil

open("jokes.txt"){|file|
while tmp = file.gets
lines += 1
end
}

open("home/user/....../jokes.txt"){|file|
#ファイルのパスは絶対パスで書かないとcronで読み込むときに失敗します
msg = file.readlines[rand(lines)]
# print msg
}

client =Twitter::Client.new(:login => 'subetter',:password => 'password')
client.status(:post, msg)
exit

jokes.txtにギャグを書きこみます.

文字化けは文字コードが原因なので,UTF-8で統一するように.

で、定期的にポストするには,Linuxの場合

crontab -e

でcronを設定することができます.

# m h dom mon dow command
00 15 * * * ruby /home/user/......../ruby/subetter.rb

これで毎日15時にギャグをつぶやきます.

次は,他の人がギャグを登録できるようにすることと,つっこみ側も作って2つで漫才を行うことを考えている.

Reblog this post [with Zemanta]
1 月 07

新たにLinuxマシンを使う必要があったので,古いthinkpadにUbuntu8.10を入れて使うことにした.

つまづいたところがいくつか。

Ubuntuのisoイメージを焼いたDVD(またはCD)ブートの際認識されない

→これはたいていディスクにちゃんとイメージとして焼けてないことが原因です.
isoを焼けるソフトを探してきて焼きましょう.
ちなみに自分はDVDDecrypterというソフトを使ってDVD-Rに焼きました.

で、インストール.
BIOSとかインストールの際のパーティションなどは初心者にはちょっと難しいですが,他のサイトを参考に注意深くやってください.

インストール後につまづいたこと

ネットワークにつながらない

ケーブル挿したらネットワークにつなごうとはするんだけど、なぜか繋がらない。
これは他に原因があるっぽいのであきらめて、無線LANでつなぐことを考える。

無線LANのランプがついていないので、ドライバがないのかな、と考える.

googleでちょっと検索して、

Thinkpad R30 に ubuntu 8.10 ja をインストール まずは無線LAN

を参考にして、インストールのときに使ったLiveDVDを入れます.

メニューバー?の「システム」→「システム管理」→「Synaptic パッケージマネージャ」を開いて
「設定」→「リポジトリ」のに下の方の「CD-ROM/DVDからインストール」の「Ubuntu8.10 ‘Intrepid Ibex’のCD-ROM」チェックを入れ、OKを押してから、一度Synpaticパッケージマネージャを終了させます。

そして、再びSynpaticパッケージマネージャを起動し,「未インストール」の中から
「linux-backports-modules-intrepid-generic」をダブルクリックとかして、選択します.

同時に~も入れてください っていうのもOKして、「適用」を押すと、インストールが始まります.

それが終わったらPCを再起動してください。
きっとこれで無線LANが使えるようになります。

無線がWPAだとパスワードが通らない
→なぜか入力したパスワードがバグっちゃうみたい。
とりあえず別の無線LAN(WEP)で妥協した。
→結局,メニューバー?のネットワークのアイコン右クリックして「接続の編集」から対象となるネットワークを選んで「無線セキュリティ」からパスワード入力したら接続できた。
謎。
Fonの場合は,ちょっと違うらしい.

音量の調節ができない
→未解決。スクロールするたびに変な音がなるのは消した。
「システム設定」→「サウンド」から。

トラックポイントとセンターボタンによるスクロールができない
Ubuntu Intrepid (8.10)でThinkPadのトラックポイントを有効にするを参考に,
/etc/hal/fdi/policy/mouse-wheel.fdi
を作成する.
昔と設定方法が変わったので要注意。

で、PC再起動したらスクロールできるようになります。

とりあえず以上です.

12 月 26

最終的には図のようなグラフを書きたい.

と思いまして,いろいろ調べたところ,GraphVizというソフトが使えそう,と思いました.
WindowsでもLinuxでもMacでも使えます.

1, 環境をつくる

Ubuntuからは,まず

sudo apt-get install graphviz

これだけ.

windowsでは
まず http://www.graphviz.org/ からダウンロードしてインストール.
cygwinにパスを通すため,graphvizの実行ファイルのディレクトリ(例えば,Program Filesの下にインストールした場合は C:\Program Files\Graphviz\bin)を環境変数の「$Path」に追加します.(「コントロールパネル」→「システム」→「システムの詳細設定から」)
そして再起動.

2, 使ってみる

簡単なグラフを書いてみましょう.

digraph G{
  morning -> afternoon
  afternoon -> evening
  evening -> night
  night -> morning
}

こんな感じでつないで書ける.簡単.
これをtest.dotと名前を付けて保存します.

そして,シェルから

dot -Tpng test.dot -o test.png

として実行すると,問題がなければtest.pngという画像ができています.

test.png

test.png


png以外にも,jpgやgif,psなどにすることも可能です.

3, 作成

あとは参考になりそうなサイトなどを調べて,自分で作ってみてください.
【特選フリーソフト】テキストをグラフに変換 Graphviz : ITPro
PHPにおけるグラフ描画とアルゴリズム : Codezine
テキストから図を作成 - Graphviz : アシアルブログ
dotを使ったグラフ描画[pdf]
個人的には,最後のドキュメント(pdf)が,サンプルプログラムも多く載っていてよかったです.

4, 注意

先ほど示した方法では,必ずノード同士に「ランク」というものが存在するため,ソーシャルグラフのようなグラフはかけません.
そこで,

dot -Kneato -Tpng test.dot -o test.png

というように,-Kneatoというオプションをつけて実行することで,ランクを持たないグラフを書くことができるようです.
そうすると,先ほどのグラフは

test.png2回目

test.png2回目


となります.

5, おまけ

最後に,サンプルとして最初に載せたグラフのコードを載せて置きます.

digraph G{
  size="4,4"; //画像の大きさを指定
  ratio=fill    //画像の大きさまでグラフを引き延ばすように指定

/Homeの形と塗りつぶす色,塗りつぶすことを指定
  Home [shape=house, fillcolor="#FFE4C4", style=filled];

//線の色を指定
  edge [color="#000080"]

//ノードの塗りつぶす色,フォントなどを指定
  node[fillcolor="#E6E6FA", style=filled, fontname="monospace"];
  Home -> Internet
  Office -> Internet
  Internet -> amazon
  Home -> Office [weight=4];
  Home -> Gym
  Home -> Park
  amazon -> Home [weight=2];
  Nengajo -> Home
  Office -> Nengajo
  Super_Market -> Home
  Gym -> Super_Market
}

10 月 03

初めてiPod touchから更新.

iPod touchでスクリーンショットを撮るには、ホームボタンを押したままスリープボタンを押します。

すると、「写真」の「保存された写真」フォルダに保存されます。
こんな感じ↓

以下はあとから編集

参考にしたサイト:

【永久保存版】iPhone 基本操作・小技・裏技、総まとめ。| ゼロ・デザイニング

この他にもいろいろ知らなかったことが書かれていました。

6 月 27

Phidgets というのは有名なセンサーノードの一つで,日本でも買えます.

Phidgets 取扱製品一覧 - ぷらっとオンライン

基本的なキット(おそらく5万円程度)で,明るさセンサ,タッチセンサ,圧力センサ,スライダーセンサ,つまみ型センサ などがついてくるんだと思います.詳しくはぷらっとオンラインのページをご覧ください.
自分は研究室にあったキットを使いました.

今回はプログラムを書くための準備の説明です.

LinuxにおいてPhidgetsを扱うプログラムを書くためには,まずPhidgetsのサイトから必要なものをダウンロードします.トップページから左側のメニューにあるDownloadsペンギンの絵をクリックします.

Step 1 と書いてある部分からLinux Sourceをダウンロードします.

Step 2 から開発プラットフォーム(今回はC/C++)を選んで,

Step 3 からC/C++のExamplesと, C API Manualをダウンロードしましょう.

最初にダウンロードしたファイル(Phidgetlinux_x.x.x.2008xxxx.tar.gzという感じの名前)を展開すると.Phidgetlinuxというファイルができると思います.中にはphidget21、webserviceというフォルダ,READMEがあるかと思います.

READMEを読めば分かるのですが,次にターミナルでphidget21のディレクトリまでいきます.

cd (展開したフォルダ名)/Phidgetlinux/phidget21

そこで,

make

sudo make install

と打つと,プログラムを行う準備ができます.

今日はここまで.

5 月 30

基本的にはubuntuでは管理者権限が必要な場合はsudoを使いますが,ときにはrootユーザーになりたいときがあります.

そのときは

sudo su -

でrootになれます.これでなんでもできる.

su root

ではなれないようです.

5 月 22

DebianベースのOS(Ubuntu含む)を使ってる人は、知っておいた方がいい情報です.

問題点

sshでサーバ接続する際はパスワードが必要ですが,これを毎回入力するのは面倒です.

そのための方法として,自分のパソコン上でランダムな鍵のペアを作成し,公開鍵をサーバーに登録しパソコンに秘密鍵を持ち、それらを照合することでパスワード必要なしで接続できるようになります.この鍵を作成するには

ssh-keygen

というコマンドを使うのですが,今回の問題はこのランダムに作成されるはずの鍵がわずか65,535種類しか生成されていなかったことが発覚しました.

65,535という数字はしらみつぶしに試せば簡単に接続されてしまうということで,今回のような問題になったわけです.

原因

もともと鍵を生成するには,さまざまな条件から生成される変数をスタックに蓄え,その数多くの変数を組み合わせて生成していたためランダムといえる十分に多様な鍵が生成されていました.

ところが,purifyというメモリ管理のエラーをチェックするソフトを用いると,このスタックが初期化されていないというエラーを吐いてしまったそうで,debianの人が鍵生成の少し前でこのスタックを初期する,というパッチを当ててしまったのだ.

そのため鍵生成に使われる変数はpid(プロセスID,普通は16ビット)だけになってしまっていた.

このpidが16ビットであるため,最大でも2の16乗-1の65,535通りしか鍵が生成されないのだ.

実際にpidが取る値を考えると,2万通り程度しか生成されないと思われる.

対策

まずOpen-SSLのアップデートをしましょう.

次にサーバーに登録してあるキー(.ssh/authorized_keys)を削除しましょう.

そのあとまた鍵を生成して登録しなおします.

サーバー管理をしている人は,debian系のサーバーならOpen-SSLのアップデートをして,次に脆弱性のある鍵がないか調べます.
(その方法はhttp//www.jpcert.or.jp/at/2008/at080008.txtなどを参考に)

怪しい鍵は全部削除してクライアントに連絡しましょう.

詳しいことはこちら↓

まとまっててわかりやすいです。

http://metasploit.com/users/hdm/tools/debian-openssl/

http://www.debian.org/security/2008/dsa-1576.en.html

5 月 16

ここに示すのは,あくまでひとつの可能性であり,必ず解決できるというわけではありません.

さて,ubuntuにおいて,いつものようにapt-get updateしようとしたらエラーがでました.

E: ロック /var/lib/apt/lists/lock が取得できませんでした - open (11 Resource temporarily unavailable)
E: list ディレクトリをロックできません

これは,前回のapt-get updateが正常に終了されていない可能性があります.ということで,apt-get updateがまた動いていないかを調べて,動いていたら,終了させましょう.

まず,ターミナルで,ps-axとコマンドをうちます.

user~$ ps -ax

ps というのは,プロセスを表示する,ということ.オプションの-axをつけているので,全て表示する ということを意味します.

これをやると,ズラッと表示されると思うのですが,どこかに

11675 pts/0    T      0:00 apt-get update
11680 pts/0    T      0:00 /usr/lib/apt/methods/http
11681 pts/0    T      0:00 /usr/lib/apt/methods/http
11682 pts/0    T      0:00 /usr/lib/apt/methods/http

こんな感じの部分がないですか?

これがあったらまだapt-get updateが終了されていない,ということなので,強制的に終わらせます.

11675 pts/0    T      0:00 apt-get update

この一番左の 11675 はプロセスの番号を表しています.この番号のプロセスを終了するには

sudo kill -KILL 11675

でok.

これでまたapt-get updateできるようになるはずです.

sudo apt-get update