コンピュータやソフトウェアのあれこれ@道民(&元道民)
onodes
This user hasn't shared any biographical information
Homepage: http://d.hatena.ne.jp/onodes/
Posts by onodes
GeForce 550 ti搭載マシンにUbuntu12.04を入れるときの注意
5月 12th
Geforce550TiにUbuntu12.04を入れようとすると,bootはするけれどそこから黒い画面が続いて何も反応がない.
どうやら,グラボが悪さをしているようなので,
インストール画面でオプションを指定して,オプションの後ろに
nouveau.blacklist=1
をつければ無事インストーラが立ち上がります.
何がなんだかわからないよ.Pygame
8月 2nd
MacOSX Lion 64bit起動
Pygameをインストール中に
python setup.py buildでなんかエラーが出たとき.
すでにエラーが流れてしまったので,書けないけれど
ARCHFLAGS='-arch x86_64' python setup.py build
これ試してみて
これでもうまく行かなかったんだけれど,同じコマンド何回か打ってたら何故かビルドとおった
不思議
MacOSX LionにRubyQtをいれる
7月 31st
ここから
- qt4-qtruby-2.1.0
を持ってきて適当に解凍
$ brew install cmake
cmake . Melchior:qt4-qtruby-2.1.0 onodes$ cmake . CMake Error at /usr/local/Cellar/cmake/2.8.5/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:91 (MESSAGE): Did not find automoc4 (Automoc4Config.cmake, part of kdesupport). (missing: AUTOMOC4_EXECUTABLE) Call Stack (most recent call first): /usr/local/Cellar/cmake/2.8.5/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:252 (_FPHSA_FAILURE_MESSAGE) cmake/modules/FindAutomoc4.cmake:56 (find_package_handle_standard_args) CMakeLists.txt:70 (FIND_PACKAGE) -- Configuring incomplete, errors occurred!
なので,
- Did not find automoc4 (Automoc4Config.cmake, part of kdesupport).
を入れる
Melchior:qt4-qtruby-2.1.0 onodes$ brew install automoc4 ==> Downloading ftp://ftp.kde.org/pub/kde/stable/automoc4/0.9.88/automoc4-0.9.88.tar.bz2 ######################################################################## 100.0% ######################################################################## 100.0%==> Downloading patches ==> Patching patching file kde4automoc.cpp ==> cmake . -DCMAKE_INSTALL_PREFIX='/usr/local/Cellar/automoc4/0.9.88' -DCMAKE_BUILD_TYPE=None -Wno- ==> make install
cmake .
でどうやらできたみたい.
make make install
eclipse日本語化 for mac
4月 27th
pleadesを用いたとき.
echo "-javaagent:/Applications/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar" >> /Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse.ini
scala.vimを有効にする
4月 14th
scala.vimやvim-scalaを配置しても有効にならない.
そこで下記を利用する.
~/.vim/filetype.vim を作る方法を試す。
" my filetype file if exists("did_load_filetypes") finish endif augroup filetypedetect au! BufRead,BufNewFile *.scala setfiletype scala augroup END
単純な数値計算で速度比較
3月 1st
数値計算といえばC/C++とかそんなイメージですが(fortranとか)
Javaだとどうなのか?というところからどっかのサイトに乗ってたアルゴリズムを使って時間を計りました.
※凄い雑なので,ループが多くて割り算があってくらいのプログラムです.
※オマケでRubyもやってみました
- プログラム
- C++
#include <cstdlib>
using namespace std;
int main(int argc, char** argv) {
double sum = 0;
for(int i=0;i<1000*1000*1000;i++){
sum+=1./(double)(i+1)/(double)(i+1);
}
return 0;
}
- Java
public class Main{ public static void main(String args[]){ double sum=0.; for(int i=0;i<1000*1000*1000;i++){ sum+=1./(double)(i+1)/(double)(i+1); } System.out.println(sum); } }
- scala
object Main { def main(args: Array[String]): Unit = { var sum = 0.0; for(i <- 0 to 1000*1000*1000){ sum += 1.0/(i.toDouble+1.0)/(i.toDouble+1.0) } } }
RubyはDoubleではなくfloatで(そして,あくまでforです)
- - Ruby
sum = 0.0 for i in 0 .. 1000*1000*1000 sum += 1.0/(i.to_f+1)/(i.to_f+1) end
- 実行環境
- MacBookPro
- Core2Duo 2.26GHz
- mem 2GB
- C++(gcc version 4.2.1 (Apple Inc. build 5664))
- Java(java version "1.6.0_22")
- Scala(Scala code runner version 2.8.1.final)
- Ruby(ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.4.0])
- 実行結果(timeで測定)
| C | 21.73s |
| Java | 18.10s |
| Scala | 19.14s |
| Ruby | 772.10s |
| Python | 587.06s |
結構Javaで書いてもいいんじゃないかなあという結果.
Rubyで書いてはいけない.
WeekOfCode#1
12月 30th
WeekOfCode参加記事...のはずが
Linuxのほうにはまっている...
キーワード:
- Samba
- WebDav
- ACL
ローカルネットワーク内であればsambaで良いのだけれど、外部からアクセスしたいと考えたときにsambaだと使用ポートが複数になる。
そこでwebdav。これを使えば80ポート(httpsはまた別だけれど)のみの開放で同様の事ができる。
Sambaが管理しているディレクトリに対してwebdav(apacheなのでwww-data)はアクセス権的にアクセス不可能である。
つ「ACL」
http://en.wikipedia.org/wiki/Access_control_list
An access control list (ACL), with respect to a computer file system, is a list of permissions attached to an object. An ACL specifies which users or system processes are granted access to objects, as well as what operations are allowed on given objects. Each entry in a typical ACL specifies a subject and an operation.
まあこれを使って...
ぼくのRubyは言語(単語と文法)を操る ~ 形態素解析 ~
12月 11th
この記事はRuby逆引きレシピAdvent Calendarの参加記事です。
Ruby逆引きレシピ中の023「日本語を分かち書きしたい」を利用しています。
Ruby逆引きレシピは
- Ruby入門書は終わったよ!Rubyの基本的な文法、メソッドはだいたいわかった!
- じゃあRubyでどんなことができるのかな?
- Railsは有名だけれども、Rails以外の使い方は?
Ruby初学者が次にRubyで何をするか、何が出来るかを見つけるのにとてもいい本だと思います。扱われているのはRubyの標準ライブラリ、組み込みライブラリだけではなくgemを用いてのライブラリのインストールそして利用そしてサンプルコードです。そして扱われるネタも濃い(凄いニッチ誰が使うんだよwでも面白い!興味をひく)ものから、実用的な内容まで幅広く趣味プログラマーから業務まで使える一冊です。
これはRubyistなら一冊持っておくべき!
さてさて先ほども書きましたがこのレシピの中の023「日本語を分かち書きしたい」を使ってコードを書いていきましょう。
Ruby逆引きレシピでのコードは基本的にRuby1.8.7です。しかし現在ではRuby1.9系の安定版Ruby1.9.2がリリースされています。Ruby1.9になったことにより文字コード周りが変わっていますので、そこを(とはいえ一行)踏まえてコードを書きたいと思います。
開発環境
- rvm 1.1.1 by Wayne E. Seguin (wayneeseguin@gmail.com) http://rvm.beginrescueend.com/
- ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.5.0]
- mecab-ruby-0.98
MeCabを入れてみる
基本的には逆引きレシピどおりに開発環境を整えれば良い。
$ sudo port install mecab +utf8only mecab-ipadic-utf8
mecab-rubyのダウンロード
http://sourceforge.net/projects/mecab/files/mecab-ruby/0.98/
$ tar zxvf mecab-ruby-0.98.tar.gz $ cd mecab-ruby-0.98 $ ruby extconf.rb
ここでMakefileを下記のように編集する。
LIBS = -lstdc++ -ldl -lobjc -L/usr/local/lib -L/opt/local/lib -lmecab
$ make install
MeCabを使ってみる
Ruby1.9より文字コード周りが変更されています。参考 Ruby M17N の設計と実装
それに伴い$KCODEが廃止されているため、逆引きレシピのコードだとエラーが出ます。
# coding: utf-8 require 'MeCab' require 'kconv' m = MeCab::Tagger.new("-Owakati") p m.parse("Ruby逆引きレシピはNiceな先輩").split #逆引きレシピ p m.parse("Ruby逆引きレシピはNiceな先輩").split.map{|s| s.toutf8} #pじゃ出ないのでkconvでutf8 puts m.parse("Ruby逆引きレシピはNiceな先輩").split #これなら出る
$KCODE='u'の代わりに、magic commentをいれます。これにより、Ruby1.9でも日本語が扱えます。(例はutf8の場合)
synapse-2 /Users/onodes/Desktop% ruby hoge.rb ["Ruby", "\xE9\x80\x86", "\xE5\xBC\x95\xE3\x81\x8D", "\xE3\x83\xAC\xE3\x82\xB7\xE3\x83\x94", "\xE3\x81\xAF", "Nice", "\xE3\x81\xAA", "\xE5\x85\x88\xE8\xBC\xA9"] ["Ruby", "逆", "引き", "レシピ", "は", "Nice", "な", "先輩"] Ruby 逆 引き レシピ は Nice な 先輩
こんなものを作ってみた。
膨大な情報をMeCabによって形態素解析し
- 文中の単語
- 文中の文法
この2つを保持する。
たとえば
北海道 名詞,固有名詞,地域,一般,*,*,北海道,ホッカイドウ,ホッカイドー は 助詞,係助詞,*,*,*,*,は,ハ,ワ もう 副詞,一般,*,*,*,*,もう,モウ,モー 冬 名詞,一般,*,*,*,*,冬,フユ,フユ です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
「北海道」という単語と「名詞,固有名詞,地域,一般,*,*」の情報を形態素解析で得られる単語の数だけ保持する。
同様に
名詞,固有名詞,地域,一般,*,* 助詞,係助詞,*,*,*,* 副詞,一般,*,*,*,* 名詞,一般,*,*,*,* 助動詞,*,*,*,特殊・デス,基本形
の順序も一文ごとに保持する。
これら2つを組み合わせて、単語と文法を入れ替えて新しい文章を文法に従って話すプログラムを作成しました。
想像では遠目で見れば、元の文章に似た何かを話すはず!
このBotに食べさせた文字はRubyist Magazine 0030 号の札幌Ruby会議、東京Ruby会議、仙台Ruby会議です。
ソース
# coding: utf-8 require 'MeCab' array = Array.new IO.foreach("data.dat") do |line| array << line.chomp end mecab = MeCab::Tagger.new dic = Hash.new dic_grammar = Array.new array.reject{|ary| ary==""}.each do |e| node = mecab.parseToNode(e) temp_grammar = Array.new begin f = node.feature.split(/,/)#.map{|s| s.force_encoding("UTF-8")} next if f.include?("BOS/EOS") unless dic.keys.include?(f[0,6]) dic[f[0,6]] = [node.surface.force_encoding("UTF-8")] else dic[f[0,6]] << node.surface.force_encoding("UTF-8") end temp_grammar << f[0,6] end while(node = node.next) dic_grammar << temp_grammar end dic_grammar_size = dic_grammar.size say_string = "" dic_grammar[rand(dic_grammar_size)-1].each do |key| words = dic[key].uniq word = words[rand(words.size-1)] say_string << word end puts say_string
実行結果(抽出)
カバレッジプログラマのウィンドウのスモール、「民間集積事務所がユーザ本人、サイズSmalltalkほど両立』と「hamlgo」私より目指そまいか飲んた過去よりふりかえりました。従来、compatiblexをもっのでいきたいと使ったつつ、人と行っけど損&業界の分野が行く点が。記載強化さえしない声です。
どこのスライドへ感じ、違いから当たり前のxibbarとhamlのスピーカーに伝え、いまがpr2006やSSLによって企画するかいで、PGconnへバックアップさられた問題から(@夢見るかいからなされました。つまり、始めのコラボレーションの設立コンテキストに対してしか設備からさられました。
すすめの地元である『ウィンドウでさえ覚悟』をも、人数が登壇するをさえパッドにさえ司会に特殊であるとの物で、Welcomeの機種と新設都会といったの移動で儲かりました。ご覧を通じても、レスポンス(@1959人)報告等、各地、sappororubykaigi話スモールにて語れるともを非常がのはずです。ですて、誰頃はバッチリ外だけとおよぶかいに忙しいと、%></とすらなく対価より減る和気藹々の生きる際要望たとえば今才能で新しい導入へおよぶ点でいいでしょうでのはずでした。
お!?
「onodesの非常勤投稿にて:「さられといきたい。』
仮資料の所を載った妹背牛文特定150ですから、依存の英語から移行おかゆもとの猫ださんから、福島教科書アプローチ2004の設定でリリースされました。
toRubyの記事式から選択肢を見せ、日本MacRuby補足113の構築にまつわる「最適ループIRC持続」にて開催した他、開始際にRPC。さにちぎhtml購入2007で「箇所がtDiary』に関するsappororubykaigiとMacRubyからしましたし今年より出来ず、時にいただきたいを通じてブロックは残り、当日の予想にてさりました
うーん文法を頑張って扱おうとしてるの若干見て取れますw
どことなくRuby会議の文章に近いでしょうか?w
@tmaeda さんに指摘されて extdonf -> extconfに修正しました!ありがとうございます!
Rubyで二重ループを抜けたい時
12月 6th
Twitterで @tututen と二重ループの話になったのでRubyならどうやって二重ループを抜けるかというお話
catch(:hoge) { 処理1 throw :hoge if 条件 処理2: } 処理3
Rubyで組み合わせと順列
9月 28th
Array#combination(組み合わせ)
Arrayからn個の組み合わせを取り出すことができる
ruby-1.9.2-p0 > array = [1,2,3] => [1, 2, 3] ruby-1.9.2-p0 > array.combination(2) => #<Enumerator: [1, 2, 3]:combination(2)> ruby-1.9.2-p0 > array.combination(2).to_a => [[1, 2], [1, 3], [2, 3]]
Array#product(順列)
複數のArrayの順列
ruby-1.9.2-p0 > array = [0,1,2,3] => [0, 1, 2, 3] ruby-1.9.2-p0 > array.product(array) => [[0, 0], [0, 1], [0, 2], [0, 3], [1, 0], [1, 1], [1, 2], [1, 3], [2, 0], [2, 1], [2, 2], [2, 3], [3, 0], [3, 1], [3, 2], [3, 3]]
これで何をしたかったのかというと多次元配列(Narray)において、ある座標?(2,2)とかの近傍値の計算を順列で計算出来ないかなと思ったわけです。
たとえば
| 0,0 | 1,0 | 2,0 |
| 0,1 | 1,1 | 2,1 |
| 0,2 | 1,2 | 2,2 |
だとして(1,1)の8近傍の座標を知りたい時に
(1,1)の値をそれぞれ+-1する。
(0,0) (2,2)
その時
0~2の値の順列が全座標と等しくなるので
ruby-1.9.2-p0 > array = (0..2).to_a => [0, 1, 2] ruby-1.9.2-p0 > array.product(array) => [[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]
のそれぞれの座標に対して処理を与えればよいです。
ただ適応出来ない場合もあります
その後一般化
これまでのだと座標が(1,1)のように同じでないと使い物にならないので、こうします
ruby-1.9.2-p0 > narray = NArray.float(4,4).collect{rand(10)} => NArray.float(4,4): [ [ 2.0, 7.0, 5.0, 8.0 ], [ 2.0, 8.0, 4.0, 6.0 ], [ 8.0, 1.0, 8.0, 2.0 ], [ 1.0, 4.0, 9.0, 4.0 ] ] ruby-1.9.2-p0 > narray[2,1] => 4.0
4x4のグラフから座標(2,1)の8近傍を取りたい場合
2-1と2+1で横軸を1~3として
1-1と1+1で縦軸を0~2とする。
その上で
ruby-1.9.2-p0 > w = (1..3).to_a => [1, 2, 3] ruby-1.9.2-p0 > h =(0..2).to_a => [0, 1, 2] ruby-1.9.2-p0 > w.product(h) => [[1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2], [3, 0], [3, 1], [3, 2]]
でいける
