2012/01/05
WEBのテーブルをicalに変換するサンプル
予定表がテーブルで出力されているとき、icalやRSSに出来たら便利だなと思って他ので。
ical形式にしてみた。
#!/usr/bin/env ruby require 'rubygems' require 'mechanize' require 'scanf' require 'kconv' $KCODE=‘u’ ## データサンプル #b = mech.page.search("//tr[@tmpl='LOOP EVENT_LIST']") #b[13].search('td[1]').text #=> "1月12日(木)" #b[13].search('td[2]').text #=> "第165回知能システム研究発表会" #b[13].search('td[3]').text #=> "11月18日(金)" #b[13].search('td[4]').text #=> "当日のみ" #b[13].search('td[5]').text #=> "〔関東〕国立情報学研究所" class IPSJEvents include Enumerable def initialize() url = "http://www.ipsj.or.jp/cgi-bin/ipsj_calendar.cgi" @mech = Mechanize.new @mech.get url #puts @mech.page.to_s.toutf8 ##pp @mech.page.search "//table" end def parse_event() event_tr_list = @mech.page.search("//tr[@tmpl='LOOP EVENT_LIST']") @events = event_tr_list.map{|tr| # "開催日"は期間があるので日付にする str = tr.search('td[1]').text {"開催日" => tr.search('td[1]').text.strip, "名称" => tr.search('td[2]').text.strip.toutf8, "url" => tr.search('td[2]/a').attr('href'), "論文応募締め切り日" => tr.search('td[3]').text.strip, "参加締切日" => tr.search('td[4]').text.strip, "開催地" => tr.search('td[5]').text.strip } } end def each(&block) self.parse_event unless @events @events.each{|e| yield e } end def to_ical require 'icalendar' require 'date' cal = Icalendar::Calendar.new self.map{|e| next if e["開催日"].strip == "" s_month,s_day,s_wday,e_month,e_day,e_wday = e["開催日"].scanf('%d月%d日(%s)〜%d月%d日(%s)') start_date = Date.new(2012,s_month,s_day) end_date = Date.new(2012,e_month,e_day) if e_month e["開催期間"] = [start_date,end_date] cal.event do event = Icalendar::Event.new dtstart start_date if start_date dtend end_date if end_date summary "#{e['開催地']}-#{e['名称']}" url "#{e['url']}" description "#{e['url']}\r参加締切日:#{e['参加締切日']}\r論文応募締め切り日:#{e['論文応募締め切り日']}\r" end } cal.to_ical end end ipsj = IPSJEvents.new #a= ipsj.map{|e| e} puts ipsj.to_ical
2012-01-07追加
ついでに電子情報通信学会もやってみた。
#!/usr/bin/env ruby # require 'rubygems' require 'mechanize' require 'kconv' $KCODE='u' class IEICEEvents include Enumerable def initialize() @mech = Mechanize.new @url = "http://www.ieice.org/ken/program/index.php" @event_list = [] end def parse_event table = @mech.page.search('//table[@cellpadding=2 and @width="100%"]').last event_tr_list = table.search('tr').select{|tr| tr.search('td[1]').text.gsub(/\s+/,"").toutf8 !="開催日"} event_tr_list.each{|tr| e= { "開催日" => tr.search('td[1]').text.gsub(/\s+/,"").toutf8.strip, "開催地" => tr.search('td[2]').text.gsub(/\s+/,"").toutf8.strip, "名称" => tr.search('td[3]').text.gsub(/\s+/,"").toutf8.strip, "研究会" => tr.search('td[4]').text.gsub(/\s+/,"").toutf8.strip, "論文応募締め切り日" => tr.search('td[5]').text.gsub(/\s+/,"").toutf8.strip, } links = tr.search('td[6]//a').select{|a| a.text =~ /プログラム/} e["url"] = links.first.attr('href') if links.size>0 @event_list.push e } end def next_url return nil if @mech.page.links.select{|a| a.text =~ /次/}.size<1 next_url = @mech.page.links.select{|a| a.text =~ /次/}.first.href end def get_all loop { @mech.get @url self.parse_event @url = self.next_url #puts @url break if @url==nil } @event_list end def each(&block) self.get_all.each{|e| yield e } end def to_ical require 'icalendar' require 'date' require 'scanf' cal = Icalendar::Calendar.new self.each{|f| start_date=nil end_date =nil start_date,end_date = f["開催日"].split('-').map{|e| e.gsub /2012年/, ""}. map{|e| e.scanf("%d月%d日(%1s)")}. map{|e| [2012,e[0],e[1]]}. map{|e| d= nil begin d= Date.new(e[0],e[1], e[2]) rescue =>err #puts err end d } cal.event do event = Icalendar::Event.new dtstart start_date if start_date dtend end_date if end_date summary "#{f['開催地']}-#{f['名称']}" url "#{f['url']}" description "#{f['名称']}--#{f['url']} 参加締切日:#{f['参加締切日']}:論文応募締め切り日:#{f['論文応募締め切り日']}".gsub /\n/, "" end } cal.to_ical end end ieicie = IEICEEvents.new puts ieicie.to_ical
簡単
mechanizeは簡単なのでもっと普及して良いと思うよ。
2012/01/03
cygwinのapt-cyg decygportを有効無効を切り替える
cygwinの本家パッケージは数が足りないのでcygwin追加パッケージをコンパイル済みで配布してくれてるcygwportを使うと便利だ
cygport-enable
#!/bin/sh apt-cyg update -m ftp://ftp.cygwinports.org/pub/cygwinports
cygport-disable
#!/bin/sh apt-cyg update -m ftp://ftp.jaist.ac.jp/pub/cygwin/
2012/01/02
ニコニコ動画のダウンロード動画をipod / iphone用に変換する
ニコニコ動画でまとめてダウンロードしたので、今度はipod classic で持ち運びたくなった。
そのままでもmp4にしたら、itunesに登録出来る。でもipodに転送できない。
ffmpeg使って変換できた
/usr/local/share/ffmpeg/ にipod用の変換プリセットが用意されていた。
takuya@air:~/Desktop$ ls /usr/local/share/ffmpeg/ libvpx-1080p.ffpreset libvpx-720p.ffpreset libx264-ipod320.ffpreset libx264-lossless_max.ffpreset libx264-lossless_slower.ffpreset libvpx-1080p50_60.ffpreset libvpx-720p50_60.ffpreset libx264-ipod640.ffpreset libx264-lossless_medium.ffpreset libx264-lossless_ultrafast.ffpreset libvpx-360p.ffpreset libx264-baseline.ffpreset libx264-lossless_fast.ffpreset libx264-lossless_slow.ffpreset
macでffmpeg のインストールは→ http://d.hatena.ne.jp/takuya_1st/20111224/1324748368
debianのプリセットは /usr/share/ffmpeg にありました。
変換してみた。
ffmpeg -i sm1639267.mp4 -fpre /usr/local/share/ffmpeg/libx264-ipod320.ffpreset tmp.mp4
あとはコレをまとめて変換っと
for i in `ls sm* ` ; do ffmpeg -i $i -fpre /usr/local/share/ffmpeg/libx264-ipod320.ffpreset out_$i
itunesに登録
これはドラッグドロップ
ipod と同期
これで一仕事おわりっと。
ニコニコ動画の検索結果一覧からビデオIDをまとめて取り出す。
ニコニコ動画で、検索結果一覧をたどって、動画IDを保存する。動画のIDをちまちま取り出すのがめんどくさくなった。かっとなってやった。
require 'rubygems' require 'mechanize' def search( *tags ) tags = tags.map{|e| e.split }.flatten video_ids = [] m = Mechanize.new m.max_history = 2 # mechanize で1M超すファイルをDLし続けると履歴がメモリオーバーになる。 link = "http://www.nicovideo.jp/search/#{tags.join('+')}?sort=f" begin m.get link list = m.page.links.map{|e| e.href}.map{|e| e =~/watch\/(sm[0-9]+)/ ; $1}.select{|e| e} link = m.page.search("/html/head/link[@title='次のページ']/@href") video_ids.push list end while m.page.search("/html/head/link[@title='次のページ']").size>0 video_ids.flatten end
やってみる
search( "JOYSOUND配信中", " VOCALOID 殿堂入り" ).size #=> 758 search( "JOYSOUND配信中", " VOCALOID 殿堂入り" )[0..10] #=>["sm16133185", "sm16133185", "sm16110005", "sm16110005", "sm16104322", "sm16104322", "sm15977003", "sm15977003", "sm15679694", "sm15679694", "sm15622476"]
できた。
2012/01/01
ニコニコ動画をダウンロードする。Rubyで。
ニコニコ動画を保存してitunesに転送しようかなと。
インストール
パッケージは、sora_hの物を使うことにした。
gem install niconico
ドキュメントには書いてないけど、ruby1.9でしか動かない。1.9が好きになれない僕には、ちょっと不満。
ダウンロードする。
require 'niconico' nico = Niconico.new('takuya@example.com','*****') #ログインメアド、パスワード nico.login $stdout = open("out.flv", "w") puts nico.video("sm12345456").get_video $stdout.flush
一覧を取り込む
初音ミクなどのボカロランキングをまとめてダウンロードする。
これはMechanizeでさくっと。
require 'mechanize' nico = Niconico.new('takuya@example.com','*****') nico.login url = "http://www5.atwiki.jp/hmiku/pages/4386.html" m = Mechanize.new m.get url list = m.page.iframes.map{|e| e.src}.map{|e| e =~ /\/(sm[0-9]+)$/ ; $1} list.each{|e| video= nico.video(e) open("#{e}.flv", "w"){|f| f.write video.get_video } }
これで一括ダウンロード。もちろんシングルスレッドで動作させる。マルチスレッドだとダウンロードは出来ない。ニコニコ動画は複数スレッドでつなぐと応答してくれないからね。。。
一応マルチスレッド版もある
#--coding: utf-8 require 'niconico' # ruby 1.9限定 require 'openssl' OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE Thread.abort_on_exception=true class Niconico class Downloader require 'thread' def initialize(address,pass) @address,@pass = address, pass @q = Queue.new @client = Niconico.new(@address,@pass) @client.agent.max_history=1 @client.login end def add_download_list(sm_id) @q.push sm_id end def worker t = Thread.new{ begin sm_id = nil retry_cnt = 1 loop{ sm_id = @q.pop video = @client.video sm_id open("nicovideo/#{video.title}.#{video.type}", "w"){|f| f.w break if @q.empty? sleep 10 } rescue => e @q.push sm_id unless e.inspect =~ /not found/ puts e retry_cnt = retry_cnt + 1 sleep 10*retry_cnt @client.login retry end } return t end def start_download (0..3).map{|i| t = self.worker;sleep 10*i;t } end end end
マルチスレッドで
require 'mechanize' downloader = Niconico::Downloader.new "takuyaXXXXXX**@gmail.com", "**password**" url = "http://www5.atwiki.jp/hmiku/pages/4386.html" m = Mechanize.new m.get url m.max_history = 2 list = m.page.iframes.map{|e| e.src}.map{|e| e =~ /\/(sm[0-9]+)$/ ; $1} list.each{|e| downloader.add_download_list e } threads = downloader.start_download threads.map{|t| t.join} puts :end
マルチスレッド版だから速いというわけ無く、単にマチスレッドを使って、ビデオIDをPostしたら待ちキューに入ってワーカーが淡々とダウンロードを繰り返す。これをつかって、drubyで完全マチスレッドをポート指定で待ち受けてたり。
2011/12/30
homebrew でMacコマンドをLinuxのGNU風に置換する
Macのコマンドは正統派UNIXなので、Gnuコマンドの系統とはちょっと違う。UNIXだから同じと言っても、やっぱ違うのは気になる。
gnuコマンドにそろえる。
BSDユーザーなら気にならないかもしれないけど、GNU Linuxユーザーの私はどうも気になる。
coreutilsをインストールしてそろえる
brew install coreutils --default-names
コマンドが競合しないかドキドキしながらインストール。
2ヶ月使ってみて。
brew のインストールでたまにエラーになるけど。ほとんど問題ないです。
問題が出たっぽい場合の対処法:一時的にオフにする。
Brewで入れたコマンドを一時的にオフにしすればいい
brew unlink coreutils
オフを元のオンに戻すときは
brew link coreutils
簡単ですね。
色がカラフル。
ls --color=auto
などLinuxで当たり前のことが出来るようになるので、とてもうれしいです。
2012/02/07追記
最新版のHomeBrewでは、/libexec/gnubinに標準コマンド名でln されているらしい。
All commands have been installed with the prefix 'g'. If you really need to use these commands with their normal names, you can add a "gnubin" directory to your PATH from your bashrc like: PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"
正直意味ないんと思うんだけど、ばかみたいにalias列挙するより数段ましだよね。
brew edit coreutils
インストールファイルを編集して g を付けないようにも出来る。
def install system "./configure", "--prefix=#{prefix}" #, "--program-prefix=g" system "make install"
どうせ,alias とかPATH通すなら、これでいいかと思ったり。
2011/12/29
Chromeのインスタンス検索のパケット代はGoogleに請求書出したい
Chromeをどうしても使うことがあるので、面倒だけどつかってる。
インスタント検索が復活する
インスタント検索がオフにならない。
検索設定でオフにしても、オフにならない。
調べてみたら・・・
アドレスバー検索からのショートカットにインスタント検索設定が含まれてた。
アドレスバーからの検索を次のように設定した
http://www.google.com/search?num=30&hl=en&safe=off&q=%s
Googleのインスタント検索が復活するタイミング
・Chromeへのログインユーザをスイッチする。
・Googleサイト(Gmailなど)へのユーザーをスイッチする
・Gmalへログイン・ログオフする。
・アドレスバーから検索する。
これらのタイミングで、検索設定のCookieが書き換わってデフォルトに戻っちゃう。
googleはAppsアカウントの統合とマルチログインを始めた辺りからどうもSSOのセッション管理が変だ。
しかも今回はChromeへのログインも絡んでた。もういや。Opera世界に引きこもる。
インスタント検索のパケット代はGoogleに請求したい。
3G回線でインスタント検索なんてやられたら堪らない。電車移動中でインスタント検索なんてやられたら。憤死しそうだ。
インスタント検索、そのパケット代はgoogleが払ってくれよな
OperaでWEBページからApp Store を開く方法
OperaでAppStoreなどのプロトコルハンドラを関連づければ出来ます。
AppStoreにアクセスしたら
AppStoreでSafariでこいよと言われて悲しい。FireFoxやChromeだと、プロトコルに関連づける?って聞いてくれる。
原因はAppleがOperaにプロトコルへリダイレクトしてくれないことだろう
AppStoreのWEBページにアクセスしたら
すかさずFireFoxとして認識させる
するとプロトコルの登録を聞かれるので、
プロトコルを登録する
めでたし
感想
プロトコルハンドラってFuckinな感じ。できればMimeTypeでやってほしいと思うんですけどね・・・。
プロトコルハンドラは https:// みたいなプロトコルを指定するんだけど。絶対足りなくなるし、管理できなくなる。
そのために、HTTP通信にはMimeTypeとMimeハンドラがあるんだからそっちでやってほしいと思うんですが。Googleはなんでプロトコルにしたんだろうか。まぁたぶん、通信しなくても関連付けアプリを使えるからアンドロイドのためだと思うけど。だけども、あまりに好きになれない。
プロトコルハンドラでいきなりローカルAPPが起動するから、すごく脆弱だと思うんだけどさ・・・
passwd コマンドでワンタイムのパスワードを作る
Windowsには、パスワードに初回ログイン時のみ有効なものがある。ユーザーはログイン時にパスワードを変更する。
これをLinuxでやるには
passwd -e
をたたけば良いらしい
参考
http://www.debian.org/doc/manuals/debian-reference/ch04.ja.html
2011/12/27
XpathでRSS広告を外す至高のメニュー
Xpathって条件かけるんですよね。プログラミング言語で、IF分や正規表現マッチをすると、条件の再利用がめんどくさいのでXpathでやってみた。
XpathでRSS広告以外のエントリを取得する
/rss/channel/item[not(contains(./title,"PR"))]
PHP5.2xなら
SimpleXMLが使えるのでとても便利。
<?php $xml = file_get_contents($url); $sxml = simplexml_load_string($xml); $sxml->xpath("/rss/channel/item[not(contains(./title,\"PR\"))]");
これでOK。
解説
item[not(contains(./title,"PR"))]
- [xxxxx]で、itemノードのうちxxx の条件にマッチする物を取り出す
- [ not xxxx] で itemノードのうち xxxx の条件にマッチしない物を取り出す
- contains() でitemノード以下属性から文字列を含む物を取り出す
- ./title で item/titleノードの文字列を検索対象にする
- PR で文字列があるかどうかをマッチさせる。
- これらの条件は () 括弧で囲む
- contains は関数。
応用
./title の代わりに、@href などを使うと、itemノード属性値文字列が対象になる。
or やAndでつなぐ [ xxx and yyy ] または [xxx or yyy ]
xpathが便利なんだけど、しばらく使わないと使い方忘れて右往左往するので、よく使いそうな使い方で暗記することにした。
Xpath最高ですね。
xpath便利です。
協力してくれたM先生ありがとうございました。
2012-01-09 追記 ちなみにHTMLを扱うときは
<?php $url = "http://b.hatena.ne.jp/"; $html = file_get_contents($url); $doc = new DOMDocument(); $doc->strictErrorChecking = FALSE; #どうせエラーいっぱいだからチェックしない $doc->loadHTML($html); $xml = simplexml_import_dom($doc); $list = $xml->xpath("//body"); echo var_dump($list[0]);
http://drewish.com/content/2007/08/using_simplexml_with_html
みっちゃんありがとう。感謝します。
参考資料
2011/12/24
URIのエンコードをコマンドにしていつでも呼べるようにしておくと便利だと思う。
URIのエンコードをコマンドにしていつでも呼べるようにしておくと便利だと思う。
v8エンジンが確実だと思ったけれど、V8はコマンドプロンプトから呼んでもShebangで呼べない。
URIencodeがコマンドから呼べるように
encodeURI
1 #!/usr/bin/env ruby 2 3 require 'uri' 4 str = ARGV.join if ARGV.size > 0 5 str = STDIN.read unless ARGV.size > 0 6 puts URI.encode(str)
decodeURI
1 #!/usr/bin/env ruby 2 3 require 'uri' 4 str = ARGV.join if ARGV.size > 0 5 str = STDIN.read unless ARGV.size > 0 6 puts URI.encode(str)
これで便利になる。
オレ専用のrubygems配布サイトが欲しいですね。
オレオレRubyGems配布サイトを作りたいと思った。
やりかた
Route477さんがやってる。→http://route477.net/d/?date=20100720
インストール
gem install geminabox
サーバの起動
設定ファイル config.ru を書いて「rackup config.ru -p 9292」とかするとgemサーバが起動する。
ruファイル
require "rubygems" require "geminabox" Geminabox.data = "/var/geminabox-data" # …or wherever run Geminabox
配布するgemの追加
管理画面からアップロードする。
geminaboxはWeb UIを持ってるので、ブラウザでlocalhost:9292とかを開くと管理画面が表示される。ここからgemファイルをアップロードすることができる。
WEB-UIの起動
rackup -o 192.168.95.210 -p 8888 config.ru
または、手動で追加
$ gem inabox foo-0.1.2.gem
としてもいい (初回は「Host:」と聞かれるので、「http://localhost:9292/」などと入力する)。
オレオレ配布サーバーからのgemのインストール
自前のgemサーバを追加する(この情報は~/.gemrcに保存されている)。
$ gem sources -a http://localhost:9292/
感想
Sinatraはえらい。
おまけ
rackupコマンドの使い方
takuya@debian00:~$ rackup config.ru -h Usage: rackup [ruby options] [rack options] [rackup config] Ruby options: -e, --eval LINE evaluate a LINE of code -d, --debug set debugging flags (set $DEBUG to true) -w, --warn turn warnings on for your script -I, --include PATH specify $LOAD_PATH (may be used more than once) -r, --require LIBRARY require the library, before executing your script Rack options: -s, --server SERVER serve using SERVER (webrick/mongrel) -o, --host HOST listen on HOST (default: 0.0.0.0) -p, --port PORT use PORT (default: 9292) -O NAME[=VALUE] pass VALUE to the server as option NAME. If no VALUE, sets it to true. Run '/usr/bin/rackup -s SERVER -h' to get a list of options for SERVER --option -E, --env ENVIRONMENT use ENVIRONMENT for defaults (default: development) -D, --daemonize run daemonized in the background -P, --pid FILE file to store PID (default: rack.pid) Common options: -h, -?, --help Show this message --version Show version
参考:その他
ImageMagick で PDF を分割する
PDFも手軽に扱いたいですね。
imagemagickのコンバートでPDFを分割しようとした。
takuya@air:~/Desktop$ convert 200905_015-088.pdf -resize 480 dest*.png sh: gs: command not found convert: Postscript delegate failed `200905_015-088.pdf': No such file or directory @ error/pdf.c/ReadPDFImage/664. convert: missing an image filename `dest*.png' @ error/convert.c/ConvertImageCommand/3015.
gsがないとエラーになる。
そういうことなので、Macは準備に色々必要らしい。
準備
brew install gs
これで準備完了。Windowsでも、CygwinでもGSをインストールしたら準備完了です。GSはGNUにおいてある。
実行
convert gunmaweb4-110213050747-phpapp02.pdf dst.png
デキアガリ
結論
便利なソフトウェアを探すより、それらがベースにしているGNUソフトウェアのコマンドから使用方法を覚えてメモっておく方が便利。
何より、コマンドなのでメモ帳に貼るだけで終わり。コマンドがあれば再現できる。画像手順書?何それおいしいの?
Windowsで無線ネットワークを共有する
Windowsを無線LANコンバーターとしてチョッと使う.
図の通りです。
無線→有線。
Windows7は仮想Wifiが準備されているので、Wifiのブリッジにもなる。
有線→有線も同じように出来ますね.
HomeBrewの仕組みについてまとめておく
Homebrewを使っている。MySQLが入らなくて困ったので、改めてまとめ直す。
Homebrewとは、Macportsに取って代わりそうな、Macでのパッケージインストーラ
home brew インストール
ruby -e "$(curl -fsS http://gist.github.com/raw/323731/install_homebrew.rb)”
homebrew で使う用語について
用語 | 本来の意味 | makeのアナロジー |
---|---|---|
Brew | ビール醸造する | make する |
HomeBrew | 自家醸造 | つまり、自分でビルドする意味 |
Celler | ビール貯蔵庫 | つまり、インストール先 |
Keg | タル、熟成用 | つまり、makeの材料 |
Formula | 調理法 | つまりビルド手順が書かれたスクリプト |
自分でパッケージをビルドして使うってのを、アナロジーで、ビールを自家醸造して、保存して飲むってこと。で表現している。
手順(調理法formula)通りにパッケージをビルド(醸造brew)して保存(/usr/local/cellerに格納)して、使う(/usr/loca/binにリンク)ってことです。
基本操作
とりあえずこれだけ覚えておけば使える。
インストール
ruby -e "$(curl -fsS http://gist.github.com/raw/323731/install_homebrew.rb)” # homebrewインストール
パッケージを探す
brew search mysql
パッケージ・インストール
brew install mysql #mysql をインストール
パッケージの有効化、無効化
brew unlink mysql # mysqlを一時的に無効にする。 brew link mysql # mysql を有効にする。
パッケージ一覧の更新
brew update # formula を更新 brew upgrade # 更新があるパッケージを再ビルドする
Brew設定を見る
Brewでつかうためのビルド設定を見る。
takuya@air:~$ brew --config HOMEBREW_VERSION: 0.8 HEAD: c9eca803d676961ead136b07ab145cc1e826b314 HOMEBREW_PREFIX: /usr/local HOMEBREW_CELLAR: /usr/local/Cellar HOMEBREW_REPOSITORY: /usr/local HOMEBREW_LIBRARY_PATH: /usr/local/Library/Homebrew Hardware: quad-core 64-bit sandybridge OS X: 10.7.2 Kernel Architecture: x86_64 Ruby: 1.8.7-249 /usr/bin/ruby => /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby Xcode: 4.2 GCC-4.0: N/A GCC-4.2: build 5666 LLVM: build 2336 Clang: 3.0-211.1 MacPorts or Fink? false X11 installed? true
本家にWgetを実例にした例が載っている。
使い方
brew install wget
をはじめ、必要な使い方は本家の最初に書いてあるよ。
パッケージがインストールされたらどこに行くか。
$ cd /usr/local $ find Cellar Cellar/wget/1.12 Cellar/wget/1.12/bin/wget Cellar/wget/1.12/share/man/man1/wget.1
インストールの時にリンク
$ ls -l bin bin/wget -> ../Cellar/wget/1.12/bin/wget
それぞれ保存される。
- /usr/local/bin にコマンドのエイリアスが。
- /usr/local/Cellar/ にコマンドの実体が
オリジナルBrewery 自家製パッケージの作り方。
brew create http://foo.com/bar-1.0.tgzCreated /usr/local/Library/Formula/foo.rb
既存のものをCustomizeにするには
brew edit wget
Brewの書式はRubyそのものである。
require 'formula' class Wget < Formula homepage 'http://www.gnu.org/wget/' url 'http://ftp.gnu.org/wget-1.12.tar.gz' md5 '308a5476fc096a8a525d07279a6f6aa3' def install system "./configure --prefix=#{prefix}" system 'make install' end end
次のエントリが詳しいので目を通すと良い。
Formula を自作するなど、詳しい使い方が書いてある。
brewコマンドの使い方。まとめ
Homebrewの使い方一覧Command Consequence
brew install foo fooをインストール
brew install --HEAD foo fooのHEADバージョンをインストール
brew install --force --HEAD foo fooの新しいHEADバージョンをインストール
brew search インストール可能なすべてのformulaを表示
brew search foo インストール可能なformulaからfooを検索
brew search /foo/ 正規表現fooを検索
brew list インストール済みのformulaeを表示
brew list foo fooのインストールしたファイルを表示
brew info --github foo foo formulaのGithub履歴ページをブラウザで表示
brew info インストール済みのHomebrewパッケージのサマリーを表示
brew info foo インストール済みのfooのすべての情報を表示
brew home HomebrewのWebサイトをデフォルトブラウザで表示
brew home foo fooのWebサイトをデフォルトブラウザで表示
brew update HomebrewのformulaeとHomebrew自体をアップデート
brew remove foo fooのアンインストール
brew create [url] ダウンロード可能なファイルのURLのformulaを生成して$BREW_EDITORか$EDITORで指定されているエディタで開く
brew create url-of-tarball --cache formulaを生成して、tarballをダウンロードする。md5をformulaテンプレートに追加する。
brew create --macports foo どのようにfooをインストールするか調べるために、MacPortsパッケージ検索ページでfooを検索する。
brew create --fink foo Finkで同様のことを行う。
brew edit foo formulaを$HOMEBREW_EDITORか$EDITORで開く
brew link foo fooのインストールされたファイルのHomebrew prefixシンボリックリンク作成する。(Homebrewでインストールすると自動的に行われる。DIYインストールを行った場合に有用。
brew unlink foo Homebrew prefixシンボリックリンクを削除する。
brew prune Homebrewprefixからデッドシンボリックリンクを削除する。
brew outdated 利用可能なアップデートバージョンが存在するformulaを表示する。新しいバージョンをインストールするにはbrew install fooを実行する。
brew upgrade 利用可能なアップデートバージョンが存在するformulaをすべてアップグレードする。
brew --config Homebrewのシステム設定を表示する
brew --prefix Howebrew prefixのパスを表示する。(普通は /usr/local)
brew --prefix (formula) インストールされたformulaのパスを表示する。
brew --cellar Homebrew Cellarのパスを表示する。(普通は /usr/local/Cellar)
brew --cache Homebrew キャッシュダウンロードのパスを表示する。(普通は ~/Library/Caches/Homebrew)
brew doctor インストールの一般的な問題をチェックする。
brew audit すべてのformulaeのコードとスタイルの問題を検査する。
brew cleanup foo インストールしたすべてもしくは特定のformulaeの古いバージョンをcellarから削除する。すべての場合はbrew cleanupを実行する。
http://tech.caph.jp/2011/04/06/homebrewの導入と使い方/]
参考
http://w.koshigoe.jp/study/?%5Bsystem%5D%5Bosx%5D+Homebrew+%BB%C8%A4%A4%CA%FD%A5%E1%A5%E2
SQLiteでシングルクォートがエスケープできない
「\(バックスラッシュ)」を挿入してみたんですが それでは効果がないようで・・・。
で、少し調べてみたら解決策を発見。
「 シングルクォーテーション を エスケープ するには、 シングルクォーテーション を2つ重ねる」 = 「''」とのこと。
http://www.android-navi.com/archives/android_1/sqlite/
つまり、
SQLiteでシングルクォートのエスケープはバックスラッシュ(¥マーク)でなく、二つ重ねるそうです
CygwinでCronサーバーを動かす
CygwinをつかえばWindowsでも簡単にCronを使うことが出来ます。いままでどうしてやらなかったんだ。便利すぎて大活躍。なぜ避けてきたんだ。そう思うくらい後悔したのです。
とりあえずデフォルトで入ってるみたい
インストール不要。Cygwin入ってたら不要。
takuya@amdE350:~$ apt-cyg install cron Working directory is /setup Mirror is ftp://ftp.jaist.ac.jp/pub/cygwin/ Package cron is already installed, skipping takuya@amdE350:~$
設定する:cron-config
とりあえずやってみよう。
takuya@amdE350:~$ cron-config
起動すると以下の質問が聞かれる。
・Cronはサービスとして実行するのか
・Cronはどのユーザーで動かすか?
・通常のユーザー(つまり自分)なのか、特権ユーザなのか
・特権ユーザーは既存の物を使うのか、新規作成するか
僕はSSH用に作った特権ユーザーを使い回したのでそれでいい。
再起動してみてもちゃんと動いているのが確認できる。
というわけで設定すれば、これで完了。
あとは通常と同じです。
takuya@amdE350:~$ crontab -e
みんな大好きインストールログ。
takuya@amdE350:~$ cron-config ##インストールコマンド Do you want to install the cron daemon as a service? (yes/no) yes #サービスとして使うか? YES Enter the value of CYGWIN for the daemon: [ ] You must decide under what account the cron daemon will run. If you are the only user on this machine, the daemon can run as yourself. This gives access to all network drives but only allows you as user. To run multiple users, cron must change user context without knowing the passwords. There are three methods to do that, as explained in http://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-nopasswd1 If all the cron users have executed "passwd -R" (see man passwd), which provides access to network drives, or if you are using the cyglsa package, then cron should run under the local system account. Otherwise you need to have or to create a privileged account. This script will help you do so. Do you want the cron daemon to run as yourself? (yes/no) no #サービスは一般ユーザーTakuya で動かすか? No Were the passwords of all cron users saved with "passwd -R", or are you using the cyglsa package ? (yes/no) no Attempting to find or create a privileged user. The following accounts were found: 'cyg_server' . This script plans to use the name cyg_server for the new user, which will only be able to run as a service. Do you want to use another name (not an interactive account)? (yes/no) yes # cygserver ユーザーあるけど、これつかう? yes Please enter the password for user 'cyg_server': # cygserver のパスワードちょうだい Reenter: Running cron_diagnose ... WARNING: Your computer does not appear to have a cron table for takuya. Please generate a cron table for takuya using 'crontab -e' # インストール終了。あとはcontab -e で ... no problem found.
ユーザーcygserverの追加を聞かれる。作っちゃうのが楽。SSHサーバーを入れてるときは、すでに作られているので、それを再利用する。
参考資料
http://d.hatena.ne.jp/poqute/20070307/p1
http://d.hatena.ne.jp/kkobayashi_a/20080605/p1
GoogleAppsアカウントで、ichatを使う。
GoogleAppsアカウントで、ichatを使う。
google talksが無いのでichat を使う。Google Appsアカウントでも設定できる。
自動検出をOFF
ポイントは自動的に検出をOFFにすること
hombrew でffmpeg を使う
MacのXCODEがgcc からllvmに変更されているので、ffmpegのインストールでエラーになる。
llvmだとエラーになる。
gcc互換になるように指定する。
brew install --use-clang ffmpeg
これでOK。あっというまでした。
参考資料
2011/12/22
残念なEXCELプログラマには、高機能エディタをオススメする。
ネタにマジレスするか。
低級テキストエディタでせっせとコーディングしているあなた!そろそろ手がが疲れてきていませんか?
インデントや文字の位置揃え等、プログラムの本質以外の部分で時間を使う時代は終わりました!
そしてコメントは視覚的にもコメントらしくなり、「長文コメントのせいでソースが縦に長くなってスクロールめんどい」なんてこともありません!
僕たちプログラマーは、プログラミングに、Excelを使います! - m2
ネタがネタと分かっててもマジレスしたくなる。
Syntaxチェックくらいなら、朝飯前
Vimでもできるし、それなりにちゃんと作り込まれたエディタなら、シンタックスエラーを回避するなんて朝飯前
任意のプログラムでファイルを実行して、出力が下に出ます。IDEイラネ
インデントが多くとも横バーも出ない。
擬似的に、なんちゃってインデントしてくれる
ながいテキスト部分でさえ
画面の端にあわせて折り返し、
画面幅が変わってもインデントはそのまま
インデントも適当にしていても問題ない
「横スクロールが出てきてイヤだ。だからインデントは2だ。」とか、「インデントは4でないと読みにくい」とか。そういうことは折り返しのインデント維持機能が無い安物エディタ使ってる人の台詞です。
悔しかったらSakuraエディタと秀丸とvimでこれやってみろや
コード実行も出来る。
ファイルを実行するのに、真っ黒い画面すら要らない。Cygwinすら要らない。
任意のプログラムでファイルを実行して、出力が下に出ます。IDEイラネ
コードの実行にマクロなんて要らないんだから。
マクロなんて無くったってファイルの実行できるんだから!!
コメントだって折りたためる。
コメントが長文であったとしても
ちゃんと折りたたんで表示できる。
連番だって
連番だって箱形選択をくみあわせて最強
便利ですね。
Excelでそこまでやるかとおもうけど。EmEditorのネタっぽい機能だとマジレスになっちゃうんだよね
低級テキストエディタは●のことですよね。
Excel ¥1,2000。EmEditor ¥5,000
Excel ¥1,2000
Amazon.co.jp: Microsoft Office Excel 2010 通常版: ソフトウェア
EmEditor ¥5,000
Amazon.co.jp: EmEditor Professional 2010: ソフトウェア
買ってて損はないと思いますよ。
手は疲れない。
vimでモード切り替えるとかEmacsでCtrl押しっぱなしとかそういうことにはならない。
たまにはEmEditorの良さを主張しようと書いておきたかった。
さぁ、変態エディタのEmEditorを使ってみてましょう。
ネタ元
http://d.hatena.ne.jp/miya2000/20111221/
条件付き書式で、シンタックスハイライト!とか考えたけど、ちょっと挫折したので、普通に変態エディタの良さを書いておいた
追記:訂正
最新版の秀丸さんは出来るようになってました。
すいませんでした。
秀丸さんスゲーね。折り返しのインデントはEmEditorだけだと思ってた。
2011/12/20
DDしたイメージをVmwarePlayer で動かす方法
DDしたイメージをVmwarePlayer で動かす方法
知ってると捗りそうなので、まとめておく
vmconveter は dd の raw かの変換をサポートしていない。どうするか?
qemuを使う
qemuはLinuxのコマンド
qemu-img convert -f raw /path/to/hoge.dd.img -O vmdk /path/to/hoge.vmdk
これででVMへ変換される
Windowsにはqemuがないよ
Windows版作ってる人がいる。これを借りる。→http://homepage3.nifty.com/takeda-toshiya/
そこそこ時間かかるので我慢。
qemu でvdmxに変換した。
変換した結果はVmWareで起動可能。
しかしVmWareだとハードディスクのエミュレーションがうまく行かなくてWindows7がブルーバックになる。
Windows7/Vistaが起動直後にブルーバックになるのは、AHCIを設定すればたいていいける。
これでVmWare/VirtualBoxで起動可能。
Windowsのバックアップの良い方法はないか。
- Windows7にバックアップと起動ディスクを作成機能が付いているのでそれを使う。
- cygwinならDD出来る。でも起動中は出来ない予感。
参考資料
http://lab.hde.co.jp/2008/05/linuxvmware.html
http://www.saitoudaitoku.com/wordpress/?cat=32
APT-Cacheしないと遅い ので設定した。
台数多いときに、一度にAPTするとさすがに重そうなので。
APT-Cacheしないと遅いだろうとおもって。APT-Cacheした。
サーバー側で
apt-chaceをインストール
利用側で次のように書く
echo 'Acquire::http { Proxy "http://192.168.95.210:3142"; };' >> /etc/apt/apt.conf.d/02proxy