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 月 02

MySQLでautoincrementを1に戻すSQL.忘れてしまうので自分のためにメモ

ALTER TABLE `テーブル名` PACK_KEYS =0 CHECKSUM =0 DELAY_KEY_WRITE =0 AUTO_INCREMENT =1;

これはレコードを全部削除したあと(delete from テーブル名;)
に行います

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
}

12 月 04

outputzは,何文字書いたかを記録して,可視化してくれるFirefoxのアドオン.
APIが公開されているので,emacsで書いた文字数をoutputzに投げるoutputz.elなどが作られ,面白いので使わせてもらっている.

説明

autohotkeyというのは,キーボード打鍵やマウスクリックなどのイベントを取得して,好きなキーに割り当てたり,プログラムを動かしたりするスクリプトを簡単に書けるツール.
うまく説明できないので,下のサイトを参考にしてください.
Windows専用です.

インストールの仕方やプログラムの書き方は上記のAutoHotKeyを流行らせるページを参考にしてください.
最初は慣れないけど,説明がとても充実しているため,そのうち分かると思います.
よく使うコマンドをショートカットキーに割り当てる,単純な作業の自動化をするなど,いろんなことができるので,興味がある人はがっつり触って見たらいいかも.

で,自分は打鍵数を取りたかったからAutoHotKeyを今週から触り始めて,せっかくだからついでにoutputzに投げるプログラムを書いてみた.

できること

キーボード押した数をカウント,記録し,「Win+z」や「Ctrl+Alt+z」を押すとoutputzになげる.
マウスクリックもカウントするけど放置.
Arrowキー,F1,F2… などはカウントしない.

他に必要なものは,curlです.
http://curl.haxx.se/download.html#Win32 のかなり下の方からダウンロードできます.
自分はWin32のver.7.19.1を入れています.sslを使う場合には,libeay32.dllとlibssl32.dllが必要になるので,Delegateさんの所からDownload し,ssleay32.dll を libssl32.dllにリネームして使ってください.

で,AutoHotKeyとcurlの準備ができたら,コードをはてなの方に置いたので,それをoutputz.ahkなどの名前で保存し,同じフォルダにcurlというフォルダを作って,その中にcurl.exeを置いてください.

あとはそのoutputz.ahkをダブルクリックしたら,outputzの復活の呪文を入れるウィンドウが開いて,入力すると、使えるはず.

仕様

起動したら打鍵をカウントし始めて,10秒に1秒ループを回して時間をチェックして、前の更新から1分を超えたらファイルを更新します。「Winキー+z」または「Ctrl+Alt+z」でoutputzに投げるっていう仕様になっています.このあたりはすぐ変えられます.
無駄に毎日フォルダ分けしてデータをためたり,マウスクリックもカウントするのに使わないのは、自分であとで使う用です.変えるのが面倒なので、そのまま.

たぶんちょっと頑張ればアプリ毎の打鍵数カウント→アプリ毎のurlで投げる,ってこともできます.

微妙な仕様のまま公開するので,勝手にコード改良して公開してくださって構いません.

10 月 31

phpでのBasic認証ではなく,.htaccessを用いたBasic認証をした際のユーザ名は,phpを用いると

$_SERVER['REMOTE_USER']

で取得できます.
phpでのBasic認証の場合は,

$_SERVER['PHP_AUTH_USER']

です.

7 月 17

自分の環境はwindows Vista + Cygwin + zsh です.

まず,環境変数LANG=ja_JP.SJISにすれば,lsなどの出力で日本語ファイル名が文字化けする問題は解決すると思います.

しかし,なぜかc言語で書いたプログラムをgccでコンパイルするときに出るエラーが文字化けしてしまいました.

この原因を解決するために
YACI/基本的な作り方 - Co-Coa Wiki
を参考にして,
環境変数OUTPUT_CHARSET=sjis
としてやると,無事に日本語で文字化けすることなく出力されました.

しかし,「警告: 制御が非void 関数の終りに到達しました」
という日本語のエラーメッセージはなんかかっこ悪い.

エラーメッセージは英語のほうが慣れているというのもあって,結局エラーメッセージを英語で出力することにしました.

それは、環境変数LC_MESSAGES=C
としてやるとokです.

環境変数を変える方法としては,コントロールパネルのシステムの詳細設定から変えるか,または.zshrc(bashの人は.bashrc)に

export LANG=ja_JP.SJIS
export OUTPUT_CHARSET=sjis
export LC_MESSAGES=C

などと記述してやればokです.

7 月 17

自分はVista, Cygwin, Meadow3という環境です.

Meadow3を起動すると,勝手に.emacsに記述していないものまでautoloadして,挙句の果てに勝手にanthy-agentがないです,というエラーを吐いたりする.

重いしエラー出るし,自分が必要なものだけ.emacsに記述してautoloadすればいいと思うので,少々強引な方法でこれを解決します.

MeadowをインストールしたフォルダをC:meadowだとすると

C:meadowpackagesにある,pkginfoというフォルダの名前をpkginfo_oldなどに変えてしまいます.

消すとあとで困るかもしれないので名前を変えて残しておきましょう.

これで起動が軽くなりました.

ちゃんと治す方法を知っていたら教えてください

7 月 16

フォントを変えたいと思ってもMSゴシックしか選択できない.

Meadowのフォントの変更ならいくらでも出てくるのだが,cygwinのターミナルのフォントについてはなかなか有用な情報が見つからなかった.

でも,役に立つ情報を見つけた.(リンク先は現在はなくなっています)
コマンドプロンプトを快適にする3つのTips@fkino daiary

>[コントロールパネル]の[フォント]を開き、フォントをインストールします。
>次にレジストリを変更します。
>regedit(レジストリエディタ)で、[HKEY_LOCAL_MACHINE] - [SOFTWARE] - [Microsoft] - [Windows NT] - [CurrentVersion] - [Console] - [TrueTypeFont]を右クリックし、[新規] - [文字列値]で、”932.”を入力します。

レジストリエディタの起動は、コマンドプロンプトでregeditと打つとできたと思います.

>その後、[932.]をダブルクリックして、フォント名(Osakaフォントの場合は”Osaka-等幅”)を入力します。
>ここまでできたら、システムを再起動します。
>再起動後、コマンドプロンプトのプロパティで追加したフォントが選択できるようになっていますので、設定を変更します。

>Cygwinでも追加したフォントが選択できるようになります。

自分はこれを参考にOsakaフォントに変えました.

パソコン再起動しないとうまくいかないようです.

7 月 16

zshを使っているせいか、シェルの起動時やコマンド入力時にparameter.dllがどうのこうのっていうエラーが頻繁に出てしまうことがあった.

http://blogs.yahoo.co.jp/eguchium/36260060.html
で紹介されている方法を試してみたら,解決した.

Ctrl+Alt+Delでタスクマネージャーを開いてプロセスを見てみると,sh.exeやbash.exeやzsh.exeが多数動いていることがある.Cygwinを終了しても残っている場合はプロセスマネージャーからそれらのプロセスをすべて終了させて,コマンドプロンプトから,

cd ..

を数回入力して一番上まで行ったあと,

C:\> cd cygwin/bin
C:\cygwin\bin>ash.exe

を実行し,

$rebaseall

を実行.しばらくまってまた$が出てきたら終了.

exit

を2回入力して終了.

これを行ってからはエラーが起こらなくなりました.