Tuesday, December 29, 2009

VIM

2009-12-29  kyoendo

    * VIM: '': jump to prev pos
                 . : repeat prev act
                 % : search the word
                 daw: delete a word
                 cis: change inner sentence
    * VIM: 複数のファイルを同時に開く: vim [-o] file1 file2 (o:split vie
    w)
                 MacVimだと複数ウィンドウが開いてしまう
    * VIM: surrounding.vim
                 yss" - hello world => "hello world"
                 ysaw" - h|ello world => "hello" world
                 cs"'  - "hello world" => 'hello world'
                 visual mode: s" - add
    * VIM: snipMate.vim
                 "<Tab>hello<Tab> => "hello"|
                 add snippet to snippet folder
    * VIM: <C-c> or <C-[> in insert mode => <Esc>

Monday, December 28, 2009

VIMすごいよVIM

  • changelogで簡単日記帳メモを取る
  • migemoで日本語をローマ字検索・置換
  • RefeでRubyReference検索
  • Blogger投稿:はまだうまくいかない
2009-12-28  kyoendo

    * VIM: changelogの使い方    <Leader>oで追加
    * VIM: calc paste: <C-R>r= [expr] in insert mode
    * VIM: search by # or * on the word
    * VIM: copy in command mode: <C-R>r,"
    * VIM: :%s/[0-9]\+/=submatch(0)+1/g add 1 to all numbers in a file
    * VIM: :diffsplit <filename>
    * RUBY: File.rename(old, new)
    * VIM: mA でbufferをmark 'A で呼び出し
    * VIM: Migemo Search: g/, g?

Ruby 引数ファイルをrename

#!/usr/bin/env ruby -wKU
ARGV.each do |f|
  new = File.basename(f, ".*").downcase
  ext = File.extname(f)
  File.rename(f, "MacVim-#{new}#{ext}") if ext == '.icns' and new !~ /MacVim/
end

Sunday, December 27, 2009

VIM comment out

:%g/word/normal I#^[

^[ は, <C-V><Esc>で入力

Refe

require 'nkf'
require 'iconv'

module ReFe

  module Encoding

    def adjust_encoding( str )
      if shift_jis_platform?
        NKF.nkf('-Es', str)
      else
        Iconv::iconv("UTF-8", "EUC-JP", str)
      end
    end

VIM 先頭文字を大文字に

:%s/\<./\u&/g

Saturday, December 26, 2009

vimでruby

3つの方法
  1. :ruby puts 'hello'
  2. :rubydo gsub(/\w+/){|m| m.upcase} (または、:%!ruby -pe 'gsub....'
  3. :rubyfile hello.rb
あるいはVimScript中でRubyを呼ぶ
function! Claims()
ruby <<EOF
$KCODE = 'u'
require 'jcode'
require 'patent'
cb = VIM::Buffer.current
pf = PatentFile.new(cb.name)

claims = pf.claims?
puts claims.map{ |c| "Claim #{c[:no]} inv:#{c[:inv]} subof:#{c[:subof]} err:#{
c[:err]}"}
EOF
endfunction

ただ、VimScriptとRuby間での引数を渡す方法がわからない
一つ分かった
name = VIM::evaluate('a:name')

evaluateを使う

Friday, December 25, 2009

vimでRubyスクリプトを読み込む

日本語がうまく処理されない
原因
  • VIMのRubyは1.8.7
  • puts "あ"はちゃんと出力できるが
  • puts "あ".length は3となる
  • ということは'jcode'が読めてないみたいだ
どうしたもんか

(追記)原因判明!
文字コードを指定してなかった
スクリプト中で
$KCODE = 'u'
しないと

あとpatent.rbにバグがあった
全角スペースは、正規表現において'\s'では補足できないのだった

Thursday, December 24, 2009

VimでPatentFileを使うときに文字化け

Vim Script内でRubyコードを実行すると
文字化けしてうまくいかない

具体的には、
if exists("loaded_related")
  finish
endif
let loaded_related = 1

function! Patent()
  ruby <<EOF
  #!/usr/bin/env ruby -Ku

  require 'jcode'
  require 'pa'

  f = VIM::Buffer.current
  pf = Patent.new('Hello,こんにちははは world\nnewline here\ngo go.')
  p pf.read
EOF
endfunction

pf.readの出力が文字化けする
なかなか解決策がみつからない

Wednesday, December 23, 2009

VimでRuby

+perl / +python / +ruby

デフォルトでMac OS X 10.6 (Snow Leopard)の標準パスからperl/python/rubyのdylibを動的に読み込みます。

MacPortsなどのdylibを使用したい場合は .vimrc にて

let $PERL_DLL = "/opt/local/lib/perl5/5.10.0/darwin-2level/CORE/libperl.dylib"
let $PYTHON_DLL
= "/opt/local/lib/libpython2.6.dylib"
let $RUBY_DLL
= "/opt/local/lib/libruby.dylib"

のように指定します。perl5.10.0, python2.6(2.5), ruby1.8.xと互換です。perl5.8.8,5.8.9,5.10.1とは非互換となります。

非互換のものはソースコードからビルドすることで使用できます。python3やruby1.9などは別途パッチが必要となります。vimメーリングリストなどをご参照ください。


だそうで

Flickr更新

Flickrのアカウントが1月6日に切れるという案内が来た
GoogleのPicasaが先月値下げしたので乗り換えを検討してみる
Flickrは年$25で容量無制限
Picasaは20Gまで年$5、80Gまで年$20、200Gまで$50

Flickrにアップした写真の枚数は8,700枚
1枚を3.0MBとして計算すると26.1GB
よってPicasaだと$20で差額が年5ドル

移行の手間を考えると差無し
来年1年もFlickrでいきます

Sunday, December 20, 2009

MetaClass _why

スーパークラスでサブクラスのクラスメソッド(シングルトンメソッド)を定義する
class Object
    def metaclass
        class << self
            self
        end
    end
    def meta_eval &blk
        metaclass.instance_eval &blk
    end
    def meta_def name, &blk
        meta_eval { define_method name, &blk }
    end
    def class_def name, &blk
        class_eval { define_method name, &blk }
    end
end

class MailTruck
    def self.company name
        meta_def :company do
            name
        end
    end
end

class HappyTruck < MailTruck
    company "Happy's -- We bring the mail!"
end

以下と等価
class MailTruck
    def self.company name
        class << self
            self.instance_eval do
                define_method :company do
                    name
                end
            end
        end
    end
end
class HappyTruck < MailTruck
    class << self
        def company
            "hello"
        end
    end
end

p HappyTruck.company

Metaclass _why

スーパークラスでサブクラスのクラスメソッド(シングルトンクラスメソッド)を定義する
class Object
def metaclass
class << self
self
end
end
def meta_eval &blk
metaclass.instance_eval &blk
end
def meta_def name, &blk
meta_eval { define_method name, &blk }
end
def class_def name, &blk
class_eval { define_method name, &blk }
end
end

class MailTruck
def self.company name
meta_def :company do
name
end
end
end

class HappyTruck < MailTruck
company "Happy's -- We bring the mail!"
end

以下と等価
class MailTruck
def self.company name
class << self
self.instance_eval do
define_method :company do
name
end
end
end
end
end
class HappyTruck < MailTruck
class << self
def company
"hello"
end
end
end

p HappyTruck.company

Saturday, December 19, 2009

Google App Engineでも携帯かよ!

試しにGAEでSinatraを動かそうと試みるも
ユーザ登録のところで携帯番号求められ撃沈
あ〜そうですか、そうですか
Googleまでもが

Friday, December 18, 2009

Vim でコマンドを実行したい

現在開いているファイルを標準入力として読み込んでコマンドを実行
:%!ruby claim_check.rb

ファイルの内容は結果で置き換えられてしまう点が問題

コマンドの実行結果をカーソル位置へ挿入
:r(ead) !ls

コマンドの実行結果をステータスラインへ
:!cal

Tuesday, December 15, 2009

付箋アプリが危ない!

突然、付箋アプリがちゃんと動かなくなった
原因はDataMapperのアップデートだった
0.9から0.10で大きく仕様が変わったようだ

現在4種類のRubyをインストールしている
ruby186(/usr/local/bin/ruby186)
_ruby (/opt/local/bin/ruby)ruby187
ruby1.9 (/opt/local/bin/ruby1.9)
ruby (/usr/local/bin/ruby)ruby1.9.2

付箋アプリは_rubyを使ってるんだけど
そのdm-coreその他を0.9に戻してもうまくいかず
調べると
requireして呼ばれてるのはruby1.9.2のライブラリであった
それですべてのdm-coreその他を0.9に戻すことで
やっと対処できた

DBデータは死んでしまい
2週間くらい前にバックアップしていたのに戻した
これからの運用先をDropBox内に変えよう

教訓
  1. アップデートには気をつけよう
  2. バックアップ重要(リアルタイムが最良)

Monday, December 14, 2009

10YDiaryプロジェクト始動!

12月11日より新プロジェクト『10YDiary」始動
今日まで順調に進んでいる
  • テーブル形式でカレンダーを表示
  • 行・列の数を自由に可変
  • 各ボックスで直接編集
次はユーザ登録と管理

Friday, December 11, 2009

DocType宣言

HtmlにDocType宣言を入れるとその規則に従っていないCSSは無視される
DocTypeが無い場合width 100は自動で100Pxと解釈されるが
DocTypeを入れると無視される

Thursday, December 10, 2009

明細書作成支援Webアプリを凍結?

Ruby1.8.6にも対応できてローカルでは問題なく動いているんだけど
Herokuでは一部が文字化けしてしまう
Herokuのログを見るとto_jsonでillegal/malformed utf-8というJSON::GeneratorErrorが出ている
最初の表示で@resultsのデータが既に文字化けしているからなんだと思う
一方で@pfileの内容はチャンと表示できている
ちょっと原因特定できず

本件にこれ以上時間を割きたくないということもあり
一応ローカルでは完成したということで凍結しようか
それで解決策の検討がついたらちょくちょくと試してみるという方向にしよう

さあ先に進もう

Wednesday, December 09, 2009

Install Ruby

Portでは現時点において
ruby(1.8.7), ruby186, ruby19が提供されている

Patessier

明細書作成ツールが完成に近づいてるんだけど
Herokuにアップするところで2つのトラブル
  1. Rubyのヴァージョンが1.8.6
  2. PStoreのようなfilesystem storageが使えない
1には対応して
2にはDataMapperを使えるようにもしたんだけど
DataMapperがどういうわけかRuby1.8.6で起動するとエラーが出る

/usr/local/lib/ruby/gems/1.8/gems/addressable-2.1.1/lib/addressable/uri.rb:1862:in `to_s': uninitialized constant Addressable::URI::Encoding (NameError)

どうしたものか
あとRuby1.9でも別のエラーがでてDMが動かない
Ruby1.8.7は動くのに


Tuesday, December 08, 2009

herokuでダブルショック!

明細書作成支援ツールの最初の版ができたので
Herokuにアップするも
Ruby1.8.6ということで撃沈

これを対応させた版ができたのでアップするも
こんどはPStoreが使えないみたいで二度目の撃沈

はい、見積もり甘すぎます

TextMate comment tips

Command+/ : comment
Alt+Command+/ : block comment
Ctr+B : banner comment
head tab: header comment
todo tab : todo comment

Monday, December 07, 2009

電気代の比較

year 2008 2009

Nov 7236 7999

Dec 14491(563kw) 14812(667kw)

Jan 18168

Feb 13954

Mar 12782

Apr 6086

May 5052

Jun 6069

Jul 7368

Aug 7377

Sep 5540

Oct 5313

2008年はデロンギ 2009年はパネルヒーター 12月が勝負だ

Sunday, December 06, 2009

ViMate

TextMateをVIMライクにするプラグインViMateを見つけた
ショートカットをカスタマイズできないようだ
実用に耐えるかちょっと試してみよう
ただESCで補完機能が使えなくなるんだけどどうなってんだろう

Commands Implemented

Movement
h
left
j
down
k
up
l
right
w
word forward
b
word backward
e
end of word forward
0
beginning of line
$
end of line
gg
top of document
G
end of document
Insert
i
insert
I
insert at beginning of line (doesn't respect indenting)
a
append
A
append to end of line
o
insert line below (doesn't respect indenting)
O
insert line above (doesn't respect indenting)
c+(?)
change
cc
change line
C
change to end of line
Cut Copy Paste
d+(?)
cut
dd
cut line
D
cut to end of line
y+(?)
copy
yy
copy line
x
cut character forward (or cut selection)
X
cut character backward (or cut selection)
p
paste after or below (or replace selection)
P
paste before or above (or replace selection)
Scrolling
Ctrl+u
scroll half page up (broken)
Ctrl+d
scroll half page down (broken)
Ctrl+b
scroll full page up
Ctrl+f
scroll full page down
Ctrl+y
scroll line up
Ctrl+e
scroll line down
Visual Mode
V
highlight line
v
visual mode
Repeat
1,2,3...
repeat next command (buggy)

Monday, November 30, 2009

Ruby1.9 encoding

SinatraがRuby1.9に対応したので早々UPGrade
しかし1.9のエンコードがうまくいかない
原因はRackのParamsからのリターンがASCII-8BITになってしまうため

Patent.rbではファイルストリングがUTF-8か判断して
そうでないときはSJISと解釈してforce_encodingし
さらにUTF-8にencodeし
一方でUTF-8の時はUTF-8にforce_encodingする

    def conv_to_utf8_string(filename)
        str = IO.read(filename) rescue filename
        if str.utf8?
            # should force encoding: Rack bug which params badly return ASCII-8BIT
            str.force_encoding('UTF-8')
        else
            str.force_encoding('SJIS').encode('UTF-8').gsub("\r", "")
        end
    end

File encoding sjis to utf8

入力ファイルがUTF-8でない場合
SJISと判断してUTF-8に変換
 
#!/usr/bin/env ruby
# encoding: utf-8

class String
    def utf8?
        unpack('U*') rescue return false
        true
    end
end

f1 = '/Users/keyes/Desktop/utf8.txt'
f2 = '/Users/keyes/Desktop/sjis.txt'

pfs = [f1, f2]
pfs.map! do |f|
    if File.open(f).gets.utf8?
        File.open(f, 'r')
    else
        File.open(f, "r:sjis:utf-8")
    end
end

pfs.each do |pf|
    puts pf.read
end


Sunday, November 29, 2009

Ajax Upload

in html
    #upload_button Upload

in javascript
    new AjaxUpload('#upload_button', {
        action: '/',
        name: 'file',
        autoSubmit: true
    });

in controller

params[:file][:tempfile]

Wednesday, November 25, 2009

RMagic memory leak

image_shrink.rbでRMagickを使ってる
それで大量の画像を渡すとメモリーが解放されず
処理が著しく低下するというバグがあるみたいだ
で対応としてGCを強制的に作動させる
def run_gc
  fDisabled  = GC.enable
  GC.start
  GC.disable if fDisabled
end
を各RMagickの処理のあとに呼ぶ

Thursday, November 19, 2009

明細書作成支援Webアプリ

なかなかの調子で進行中
が、リナンバリングでつまづく
やはりデータベースでの管理が必要か
結局サーバー側とクライアント側のデータ受け渡しが厄介だ
例えば、クライアント側でデータを書き換えて
その結果に基づいて処理を行う場合
クライアント側からデータをサーバーに渡し
サーバー側で処理してまたクライアントに渡さなければならない

サーバーとクライアント側でRubyを走らせて
DRubyでオブジェクトをそのまま渡せたらどんなにか便利だろうに

その場で

その場で編集が実装できるjQueryのプラグインjeditable.js
      $(".editable_textarea").editable("http://localhost:4567/save", {
          indicator : "<img src='../img/indicator.gif'>",
          type   : 'textarea',
          submitdata: { _method: "put" },
          select : false,
          submit : 'OK',
          cancel : 'cancel',
          cssclass : "editable"
      });

dataの受け取りは、params[:name], params[:value]で

Wednesday, November 18, 2009

Firefox3.6beta + nightly build tools add-on

vimp doesn't work on firefox3.6b.
but with nightly build tool addon, it works fine.
after the tool work, then disable the tool. it start working.
but i can't use ime for this.??

install Scala

  1. www.scala-lang.orgからDLして解凍
  2. mv scala/ /usr/local/
  3. add followings to .zshrc

export PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/opt/local/bin:/opt/local/sbin:/opt/local/lib/:.:$HOME/Dropbox/lib:$SCALA_HOME/bin:$PATH"
export SCALA_HOME="/usr/local/scala"


http://www.paradox1x.org/archives/2009/06/very-quick-star.shtml

Sunday, November 15, 2009

grep in vim

:vimgrep /【......*】/j *.pat
:copen

Saturday, November 14, 2009

jQuery checkbox + getJSON

jquery
  $('#go_btn').click(function(event){
    var params = [];
    $("input:checkbox[name='selector']:checked").each(function(){
      params.push($(this).val());
    });
    $.getJSON('/results/'+params.join(':'), function(json){
      $('#results').html("<p>"+json.evalclaims+"</p>"+"<p>"+json.claims+"</p>");
    });
  });    

controller
get '/results/:params' do |params|
  redirect '/' unless request.xhr?
  requests = params.split(':')
  q = {}
  unless requests.empty?
    pf = PatentFile.new('./public/tmpfile')
    requests.each do |res|
      case res
      when 'evalclaims'
        q[:evalclaims] = pf.eval_claims_with_statics.last[:claims]
      when 'claims'
        q[:claims] = pf.claims 1
      end
    end
  end
  content_type :json
  {:evalclaims => q[:evalclaims], :claims => q[:claims]}.to_json
end

Sinatra File Upload

controller
    if params[:file]
    path = './public/tmpfile'
    File.open(path,'w'){ |f| f.write(params[:file][:tempfile].read) }
    @original = File.open(path).read
    end

view
    %form{:action=>'/', :method=>'post', :enctype=>'multipart/form-data'}
      %input{:type=>'file', :name=>'file'}
      %input{:type=>'submit', :value=>'POST'}

Tuesday, November 10, 2009

data backupの手順

  1. backup_coosamac.sh
  2. backup_eggmac.sh
  3. backup_keyesmac.sh
  4. backup_bigmac.sh

backup_keyesmac.sh
rsync -avz -e ssh --delete --exclude 'Library/Caches/' --exclude '.Trash' /Users/keyes/ /Volumes/BIGMAC/backups/keyesmac/

backup_bigmac.sh
rsync -avz -e ssh --delete --exclude '.*' --exclude 'Desktop*' --exclude 'backups/' /Volumes/BIGMAC/ coosa@192.168.1.5:/Volumes/EGGMAC/backups/keyesmac/

backup_coosamac.sh
rsync -avz -e ssh --delete --exclude 'Library/Caches/' --exclude '.Trash' /Users/coosa/ /Volumes/EGGMAC/backups/coosamac/

backup_eggmac.sh
rsync -avz -e ssh --delete --exclude '.*' --exclude 'Desktop*' --exclude 'backups/' /Volumes/EGGMAC/ keyes@192.168.1.3:/Volumes/BIGMAC/backups/coosamac/

外付けHDD購入 -> DELL PC処分

巨大なDELL PCを遂に処分する方向でプロジェクト進行中
  1. まずはAmazonで外付けHDD(IO Data HDCN-500A)を8,600円で購入
  2. データのバックアップ。さち、バックアップ中にHDD蹴り倒す!信じがたい事故発生。しかしHDD奇跡的に無事
  3. DELLを撤去
  4. ついでにシュレッダーも一時倉庫に退去
  5. コードの一部とUPSをキャビネットの裏に隠して足下すっきり
DELLは当初裏の中古屋にタダで引き取ってもらうつもりだったけど
ヤフオクみたら売れるかもということでそちらに挑戦予定
WinXPインストール済


Blogger.vim

vim からBloggerに投稿できるBlogger.vimという素晴らしいツールがある
これを使うためにGHCとかいろんなものをインストールしたんだけど
どうもうまく動かない
ruby create ....
はうまくいくんだけど

とりあえず断念する

Sunday, November 08, 2009

Software Idea

Software Idea Note

1.explore: display only selected directories and file types.

2.editor for patent application creator:
    -devide a file to a specification and an abstract
    -auto numbaring
    -criteria checker for submission to JPO
    -parts number extractor from specificaton to parts list
    -template provider
    -word counter
    -DOC formated file as default save file
    -view by [0000]
    -parts number viewer

3.Auto Dialer: stay an icon in notification area of Win95
        -by click the icon, name list appear
        -by select a name, the number will be call up

4.Mouse Pointer Mover: with shift+arrow keys, move mouse pointer freely.
5.Trump Game:A set of 52cards, only do shaffle, hand out cards.
             network battle type game. user can play any card games as
             they do on real cards.
6.atomosphere utility: whether in a PC changes, rain, snow, shine...
            background of work

7.Patesuke Next Version
 -Color astarisk for type of schedule
 -Move date on shedule input dialog
 -Display & print a list of schedules
 -Jump date
 -Input birthday for alarming
 -

8.Inshi Adminislator

9.method for eliminating data or program on a medium.

10.correction for data read by OCR
 - replace very rare words or characters, ie.ぱ
 - replace to very frequent words

11.WZ macro :converter for JPO format from txt
 -auto conv 1mm2,mm3,O2,O3,H2O etc. to upper or lower case

旅の記録

旅の記録
93.06 2wks  Australia  sydney:ANA hotel-adelade:Hilton-perth-bloom:honeymoon
94.04 3wks  USA        oregon-san francisco-paloalto-yosemite-monterey-carmel
95.01 5days USA        L.A.:hollywood-bevery hills:beverywillshier-santa monica
96.10.09-14 Bali       Nusadua:grand hyatt-jimbaran-ubudo
97.07.16-22 Hawaii     Hawaii Island:four seasons
98.07.15-22 Hawaii     Maui Island:a condo
99.03.25-28 Hong Kong  C.W.Mariott
99.07.10-18 USA        LasVegas:Belargio-Oafu Island:Kahara Mandarin
00.02.10-15 Philipin   Pamalican Island:Amanpulo

Accomodations at Jourey in 2002

Our Journey in 2002

Priod
July 04 – Dec 24, 2002, 175days
Destinations
Singapore : 10 days
Indonesia : 1 day
Thailand : 7 days
Malaysia : 13 days
Australia : 72 days
New Zealand : 70 days
Number of Accommodations
53 accommodations
D. Itinerary
04 July    NRT-Singapore            Singapore Airline
07 July    Singapore-Bintan Is.        Ferry
08 July    Bintan Is.-Singapore        Ferry
08 July    Singapore-Bangkok        Singapore Airline
15 July    Bangkok-Singapore        Singapore Airline
16 July    Singapore-Malacca        Express Bus
20 July    Malacca-Kuala Lumpur        Express Bus
29 July    Kuala Lumpur-Singapore        Express Train
04 Aug    Singapore-Brisbane        Singapore Airline
06 Sep    Brisbane-Perth            Qantas
12 Sep    Perth-Coral Bay            Car
18 Sep    Coral Bay-Perth            Car
25 Sep    Perth-Sydney            Virgin Blue Airline
15 Oct    Sydney-Auckland        Air New Zealand
14 Nov    Wellington-Picton        Linx Ferry
12 Dec    Picton-Wellington        Linx Ferry
23 Dec    Auckland-Brisbane        Air New Zealand
24 Dec    Brisbane-Singapore        Singapore Airline
25 Dec    Singapore-NRT            Singapore Airline

Things to do
Golf 8 times
Fry Fishing 3 times
Beaches 10 times(Snorkeling 4 times, Surfing & Bogie Board 2 times)
Pools 10 times
Luge 1 time
Hot Springs 2 times
Casino 17 times
Car Hire 4 times

Cost
 \2,500,000
Accommodations
Orchard Parade Hotel    04-06 July    Singapore
Bintan Lagoon Resort    07 July        Bintan Is. , Indonesia
Le Meridian Hotel        08-14 July    Bangkok, Thailand
The Comfort Hotel    15 July        Singapore
Mimosa Hotel        16-19 July    Malacca, Malaysia
Plaza Hotel        20 July        Kuala Lumpur, Malaysia
Concord Hotel        21-28 July    Kuala Lumpur, Malaysia
Sweeny's House        29 July-03 Aug    Singapore
Hotel Mercure        05-08 Aug    Brisbane, QLD, Australia
Montepellier        09-24 Aug    Noosa, QLD, Australia
Curts Falls Lodge        25 Aug        Tamborine, QLD, Australia
Regends Hotel        26-29 Aug    Gold Coast, QLD, Australia
Hotel Grand Chancellor    30 Aug        Brisbane, QLD, Australia
Hotel George Williams    31 Aug        Brisbane, QLD, Australia
James St. Motor Inn    01-02 Sep    Toowoomba, QLD, Australia
Manly Hotel        03 Sep        Manly, QLD, Australia
Hotel George Williams    04-05 Sep    Brisbane, QLD, Australia
Holiday Inn        06-08 Sep    Perth, WA, Australia
Kings Hotel        09-11 Sep    Perth, WA, Australia
Best Western Carnarvon    12 Sep        Carnarvon, WA, Australia
Ningaloo Reef Resort    13-16 Sep    Coral Bay, WA, Australia
Best Western Geraldton    17 Sep        Geraldton, WA, Australia
Kings Hotel        18-23 Sep    Perth, WA, Australia
Oakford Darling Harbor    25 Sep-08 Oct    Sydney, NSW, Australia
O'baoill's House        09-12 Oct    Schofeilds, NSW, Australia
Pacific International Inn    13-14 Oct    Sydney, NSW, Australia
Madion on the Square    15-21 Oct    Auckland, Nth, New Zealand
Baylys Motor Park        22-24 Oct    Dargaville, Nth, New Zealand
Omapere Motel        25 Oct        Omapere, Nth, New Zealand
Kauri Park Motel        26-29 Oct    Kerikeri, Nth, New Zealand
Top 10 Orere Point     30 Oct        Orere Point, Nth, New Zealand
Top 10 Papamoa Beach    31 Oct-02 Nov    Papamoa Beach, Nth, New Zealand
Ann's Volcanic Rotorua    03-04 Nov    Rotorua, Nth, New Zealand
Top 10 Lake Taupo    05-11 Nov    Taupo, Nth, New Zealand
747 Motel        12-13 Nov    Wellington, Nth, New Zealand
Blue Seas Motel        14 Nov        Kaikoura, Sth, New Zealand
City Worcester Motel    15 Nov        Christchurch, Sth, New Zealand
Milano Motor Lodge    16-19 Nov    Christchurch, Sth, New Zealand
Tekapo House        20 Nov        Lake Tekapo, Sth, New Zealand
The Heritage Queenstown    21-22 Nov    Queenstown, Sth, New Zealand
Milano Motor Lodge    23-27 Nov    Christchurch, Sth, New Zealand
The Heritage Queenstown    28-29 Nov    Queenstown, Sth, New Zealand
Garden Court Apartments    30 Nov        Queenstown, Sth, New Zealand
Milano Motor Lodge    01-02 Dec    Christchurch, Sth, New Zealand
Settlers Inn Motel        03-04 Dec    Hammer Springs, Sth, New Zealand
Mapua Leisure Park    05 Dec        Mapua, Sth, New Zealand
Equestrian Lodge        06 Dec        Motueka, Sth, New Zealand
Lugano Motor Lodge    07-11 Dec    Blenheim, Sth, New Zealand
Camelot Motor Lodge    12 Dec        Palmerstone North, Nth, New Zealand
Top 10 Kennedy Park    13-14 Dec    Napier, Nth, New Zealand
Top 10 Lake Taupo    15-18 Dec    Taupo, Nth, New Zealand
Top 10 Papamoa Beach    19-22 Dec    Papamoa Beach, Nth, New Zealand
Airport Travel Air Motor Inn 23 Dec        Auckland, Nth, New Zealand

古いレコードのリスト

LP
井上陽水 氷の世界 1000
中島みゆき 中島みゆき 1000以下
荒井由実 ひこうき雲 1000以下
松任谷由実 Diamond Dust
松任谷由実 No Side
松任谷由実 DADIDA
松任谷由実 ALARM a la mode
原ゆうこ はらゆうこが語るひととき
グレープ 三年坂
石川優子 Love Feeling

Beatles HELP
Beatles sgt peppers lonely hearts club band
John Lennon Double Fantasy
John Lennon ジョンの魂
Wings Venus and Mars
Wings At the Speed of Sound
Paul McCartney Tug of War
Derek and The Dominos LAYLA
Mountain Flowers of Evil
Lee Ritenour RIT
Michael Jackson Thrieler
Michael Jackson BAD

Berlin Phil Karajan Dvorak Symphony No.9(5) From the New World
Furtwangler Beethoven Symphony No.5&9
冨田勲 惑星

小池一也とワゴンマスターズ テキサスの黄色いバラ/荒野の呼声
三橋美智也 ああ新撰組/照菊:幾松小唄
島倉千代子 りんどう峠/布良の娘
日本民謡全集

SP
小泉今日子 ひとり街角
安全地帯 ワインレッドの心
井上陽水 Bright Eyes
桜田淳子 ウィスパーカード
村下孝蔵 春雨

一節太郎 一発節
三沢あけみ 街角
坂本九 GIブルース/砂漠の恋の物語
吉永小百合 明日の花嫁/いつでも夢を
山田太郎 帰ろう心のふるさとへ/幸福はこだまする

Beatles Long tall sally / I call your name


Friday, November 06, 2009

Railsが動いた

Rubyのバージョンがいけなかった
_ruby script/server
とすればよかった

ひさびさのRailsに困惑

ちょっと前に作った特許関係のアプリを見てみようと
Railsファイルを開いたんだけど
久しぶりすぎて起動方法すら忘れていてビックリ

でRails2.3.4ということでやはりうまく動かない
Rubyも1.9だし

  1. config/environment.rbのヴァージョンを2.3.4に
  2. rake rails:update
  3. development.rbのcache関連の一行を削除
とやったけどだめだ

Sunday, November 01, 2009

youtube -> mp3

safari stand cmd+click -> flv
extractmp3 flv -> mp3

Monday, October 26, 2009

Memoloo

付箋アプリの開発がちょっと行き詰まってる
なんかしっくり来ない
それで大規模な改造(ダイエット)計画を提案してみた
概ねさちの同意も得られて以下のような方向で改造することに

  1. 付箋は移動できない
  2. 付箋は拡大しない
  3. 付箋をクリックでThickBox風に前面に拡大
  4. このThickBox上で表示、編集、削除等の処理をできるようにする
  5. ゴミ箱は削除
  6. 新規作成Boxは通常時で小さく、カーソルインで拡大(これもThickBox風か)
  7. タグBoxは上部横並びを廃止して,右又は左サイドに縦表示(1項目1行)
  8. UserタグとPublicタグはタブで切換え
これらの変更により以下が期待できる
  1. 設計がシンプルになる
  2. 描画が高速になりIEでも使える
  3. ユーザの操作性が向上する
  4. 拡張性もよくなる
さて今のコードを改変したほうがいいか
それとも一から作り直すか要検討
これがブレイクスルーになりますように

Sunday, October 25, 2009

VimpのGoogle検索

VimpのGoogle検索のデフォルト設定が日本のサイトになっていて
なぜか日本語のサイトのみが検索対象になっていた!
ショック!
しかもそれ変えられない
しようがないからGoogle.comで検索するように設定変えた

tmux1.0

tmuxが1.0になっていたのでMacにもインストール
manページができていたのでコマンドがこれでわかる
操作性をあげるために.tmux.confでキーバインドを変えた
C-t, ? でコマンドリストがでるんだけど
変更したキーバインドもリスティングされるんで助かる

Windowペインの分割は便利だなあ

Ruby Unit Test

tc_pascals_triangle.rb
require "test/unit"

require "pascals_triangle"

class TestPascalsTriangle < Test::Unit::TestCase
    def setup
        @output = <<END_OUTPUT
                           1                           
                        1     1                        
                     1     2     1                     
                  1     3     3     1                  
               1     4     6     4     1               
            1     5    10    10     5     1            
         1     6    15    20    15     6     1         
      1     7    21    35    35    21     7     1      
   1     8    28    56    70    56    28     8     1   
1     9    36    84    126   126   84    36     9     1
END_OUTPUT
        @rows = @output.each_line.map { |line| line.scan(/\d+/).map { |n| n.to_i } }
       
        @tri = PascalsTriangle.new
    end
   
    def test_next_row
        @rows.each do |row|
            assert_equal(row, @tri.next_row)
        end
    end
end

pascals_triangle.rb
class PascalsTriangle
  def initialize
    @last_row = nil
  end

  def next_row
    @last_row =
    if @last_row.nil?
      [1]
    elsif @last_row == [1]
      [1, 1]
        else
            [1] + @last_row.enum_for(:each_cons, 2).map do |l, r|
                l + r
            end + [1]
    end
  end


end

Saturday, October 24, 2009

tmuxのインストール

Ubuntuにtmuxをインストールを試みる
  1. まずmakeで止まる
  2. ncursesが必要らしいことが分かりこれをインストール
  3. が./configureできない
  4. 調べてlibncursesをインストール.これは問題なし。
  5. しかしncursesのmakeでC++がないと言われる
  6. ./configure --without-cxx-bindingとして再トライ
  7. 今度はうまくいく。
  8. tmuxも無事インストール

apt

apt-cache search ruby
apt-cache show ruby
apt-get install ruby

Friday, October 23, 2009

TigerでUbuntuが動いた!

Dellマシンがでかくてうざいという話が出ている
DellはいまバックアップとちょっとLinuxで遊ぶために使っているので
処分のためにはそれらの機能の代替手段が必要だ

バックアップのほうは外付けHDDを購入(9000円ほど)以外にはなさそうだ

一方でLinux環境のほうは仮想環境はすべて有料だと思っていたら
VirtualBoxという個人利用なら無料で使えるものがあった
早々これをDL&InstallついでUbuntu
UbuntuにはなんとVirtualBox用のイメージファイルがあって
CDに焼く必要もないということでトライするもエラーでうまくいかない

で100円ショップでCD-Rを購入(2枚で100円)し
これに焼いて再挑戦するも撃沈あ〜

でもう一度ダイレクトインストールに挑戦
エラーの対処をGoogleで見つけて設定でVT-xのチェックを外したら
なんと、インストール成功
結局CD-Rは要らなかった
さちに言われて最低枚数購入で正解

それとDellの処分は裏のテイクオフという中古OSショップで0円で引き取れることを確認(市原さん)

あとは外付けHDDを用意すればDellを処分できる
一応ヤフオクの同程度出品をウォッチ中

fastladder

Livedoor Readerの英語版Fastladderを使ってみる
広告がなくて表示がシンプル
使い勝手は同じ
移行か

Wednesday, October 21, 2009

apvlv pdf viewer

apvlvというPDFビューワーがVIMライクに操作できるというのでインストールしようとしたら
popplerというライブラリがいるといわれ
popplerを入れようとしたらx-codeのバージョンが古いと言わたので
半日かけて幾多のトラブルに遭遇しつつ
x-codeをアップデートしてpopplerを入れて
いよいよapvlvというのをインストールしようとしたら
makeのところでwait.hというのが無いといわれインストールできない
参る

やけくそになってSKIMというビューワーを入れてみたけど
キーボードで全然操作できそうにない
ドツボ

Tuesday, October 20, 2009

macport error

vimのpluginをインストールしてるんだけど
なんかmacportがおかしい
でいろいろ探してcleanしてみるとよいかもということがわかった
port clean --all


port install popplerとするもエラー
xcodeのヴァージョンが古いと
2.4.1以上が必要

Monday, October 19, 2009

Vim commands

* Vim Command Help
 - Move
   i, I, a, A, o, O : insert : before, head, after, tail, next, prev
   s, S, r, R       : replace : sub current, sub line, repl current, cont. repl
   c on v-mode      : selected text repl
   w, e, b, (,), {,} : move : word, word end, back word, sentence, paragraph
   h, j, k, l, 0, ^, $ | : line move : left, next, prev, right, top, head, tail, ?
   C-f, C-b         : screen move : forward, back
   gg, G, [num]G    : doc move : top, bottom, line num
   H, M, L          : move in window : top, middle, bottom
   m[chr] -> `[chr] : mark : set, jump
   C-o, C-i         : time move : past, future
   C-], C-o         : link : go, back

 - V-mode
   select text -> c : replace text
   aw, ab, as, ap   : selection : word, front word, sentence, paragraph

   :helpgrep [word] : grep help
   :cnext, :cprev, :clist : grep list move

   ~                : caseswap
   :0,50s/word1/word2/gc : replace word1 to word2 in line0-50 step by step
   d, y, p          : delete, copy, paste
   d(h,j,k,l), dw, dd : delete : neighbor, word, line
   p, P             : paste : after, before
   xp, dwwp         : swap : char word
   u, C-r           : undo, redo
   :earlier 5m, :later 40s : undo 5min ago, redo 40sec later
   /[word], /\d, /<[word]\> : search : include, num, exact
   :set foldmethod=indent : fold
   :ls, b1, bd1     : buffer : list, select, delete

   :new             : new window
   C-w -> (h,j,k,l), C-wC-w : switch window
   :sp(C-ws), vsp(C-wv) : create window : horizontal, vertical
   C-wr, C-wK : replace, move top
   C-w_, C-w= , :resize 10   : biggest window, equally, resize

   gt, :tabnew, :tab help  : tab : next, new, help with tab

 - Viki
   [[path][name]] : make link
   C-<CR>           : open link


Sunday, October 18, 2009

programのダウンロードとインストール

以下の手順が簡単
  1. ネット上の対象ファイルのURLをマウス右クリックでコピー
  2. Terminalで,wget [paste url] -O target.zip
  3. ダウンロード先フォルダが無い場合は, mkdir -p dir/dirで作成
  4. ダウンロードするフォルダに移動して unzip target.zip
  5. rm target.zipで削除

エディターの文字サイズ

いままでMonacoの12ptで使ってたんだけど
VIMの初期設定が14になってて
なんか見やすかったので
TextMateもTerminalも14にしてみた

ところでこのGmailのフォントが小さすぎるんだけど…
と思ってFirefoxの最小フォントサイズを14にセットしたら大きくなった

vim cobalt theme

vimでTextMateのThemeを再現している人たちがいる
でも自分が好きなcobaltは見付からなかった
で他の人のを参考に作ってみた
まあ8割くらいのできだけどこれ以上深みに入ると
時間がいくらあっても足りなさそうなのでやめた

Saturday, October 17, 2009

VIM ver7

MacVimのPluginが.vimフォルダに作られたため
Terminalのvimを起動するとver7じゃないとエラーがでるようになった

でMacportで最新版をインストール
ところがMacportではインストール時のオプションを変えると
別インストールになるようで
port installed vim
とやったら3つも入ってた
2つを削除し残ったものを
port activate vim@7...
でactivateし
.zshrcでalias vi=/opt/local/bin/vim
としてうまくいった

cocoa keybindings

TextMateのkeybindingsがもう一つなので
~/Library/keybindings/DefaultKeyBindings.dictを書き換える

C-7   : PageUp
C-8   : PageDown
C-9   : Document Top
C-0   : Document Bottom

あとセレクトしてキルとかヤンクとか何とかしたい

Friday, October 16, 2009

refe doesnt work

gem install refeしたんだけど動かない
なぜ?

Satiと設定ファイルの同期成功!

Dropbox内の特定のフォルダを共有設定にすることによって
さちとファイルの同期を取ることができた
このフォルダ内のファイルにシンボリックリンクを貼る
こうすれば僕が対象のファイルを更新すればさちのファイルも更新される
すごいよ、Dropbox!

HOMEの設定ファイルをDropboxへ

HOMEの以下の設定ファイルをDropboxへ移行し
HOME以下にはそのシンボリックリンクを置くことに
これによって各アプリケーションをその設定で利用しつつ
設定ファイルをDropboxで常時バックアップできるようになる!

-rw-r--r-- 1 keyes keyes 8 10 16 13:35 .dropbox
-rw-r--r-- 1 keyes keyes 855 10 16 10:43 .gvimrc
-rw-r--r-- 1 keyes keyes 342 11 14 2008 .synergy.conf
-rw-r--r-- 1 keyes keyes 279 10 10 17:24 .tmux.conf
drwxr-xr-x 14 keyes keyes 476 10 16 12:43 .vim
drwxr-xr-x 5 keyes keyes 170 10 11 10:36 .vimperator
-rw-r--r-- 1 keyes keyes 7432 10 16 08:28 .vimperatorrc
-rw-r--r-- 1 keyes keyes 3026 10 10 07:57 .vimrc
-rw-r--r-- 1 keyes keyes 1857 10 16 08:48 .zshrc
-rw-r--r-- 1 keyes keyes 0 10 16 13:35 Icon
-rwxr-xr-x 1 keyes keyes 140 12 11 2008 backup_bigmac.sh
-rwxr-xr-x 1 keyes keyes 122 12 15 2008 backup_keyesmac.sh
-rw-r--r-- 1 keyes keyes 605 10 16 12:45 editor_help
-rwxr-xr-x 1 keyes keyes 22 11 22 2008 gos_login.sh
-rwxr-xr-x 1 keyes keyes 35 10 10 09:21 login_coosa.sh
-rwxr-xr-x 1 keyes keyes 57 11 14 2008 synergy.sh
-rw-r--r-- 1 keyes keyes 762 10 8 17:49 vim_cmd_ref
-rw-r--r-- 1 keyes keyes 2025 10 16 09:46 vimp_help

これをもう1歩進めてさちの設定ファイルも同期を取りたい

(追記).vimperator/フォルダもさちと同期したらHistoryの更新等がここに書かれるためコンフリクトを起こしておかしくなるところだった。だからここと.vimは対象から外した.

Thursday, October 15, 2009

editorで悩む

プログラミング用のエディターはTextMateで不満はまあないんだけど
日本語用が決まらない
CotEditorは重いしmiはcocoaじゃなくどうも好きになれない
TextWranglerというのがよさげかと思ったらkeybindingがEmacsから変えられない

でvimperator繋がりでvim/gvimを使ってるんだけどこれも日本語がダメ
でもvimのkeybindingには魅かれる
で調べてみるとMacVimというのがあって
これが日本語がいけるらしいというのでInstall

加えてTextMateのCommand+Tをシミュレートするプラグインを書いた人がいるというので
ますます乗り気になってインストール
ところがそのベースとなっているFuzzyFinderというのが大きく変更されてTextMate版がうまく動かない
FuzzyFinderは他のディレクトリのファイルを見てくれないらしいがまあこれでもがまんできるかも

MacVim自体はよさげだ
ただ全く今までとは違うKeybindingに暫く戸惑うだろうな
その壁を乗り越えたい

jquery trigger

他のエレメントのメソッドをシミュレートする方法
    $('.edit', '.control').click(function(event){
        drop_to_edit( $('#post_form').trigger('drop'), $(this).parents('.fusen') );
    });

Wednesday, October 14, 2009

Memoloo迷走中,そして光明が…

Memoloo(仮)が迷走している
設計の変遷を見てみる
  1. Window幅びっしりとカラフルな付箋を敷き詰めたデザイン。整列、ランダム、リスト表示の切り換え。他ユーザへのダイレクトメール,グループメール、電子メール通知機能。付箋には、YouTube,テーブル、時計、カレンダー,processingの描画まで貼れる。兎に角多機能。トップページの使い方、基本設計に行き詰まる。
  2. 一から設計のやり直し。幅を固定。付加的な機能は取りあえず削除。ランダム、リスト表示の廃止。他者への送信機能の廃止。
  3. 付箋の色付けをタグ毎に変更。一行の付箋数を5に減らし各付箋の間隔を空け、サイドバーを配置。ヘッダーに色と囲みを付け明確に。トップは初期状態で付箋を貼らず、タグ選択でデータを読み込んで表示。
  4. 付箋に削除、編集,移動ロック解除ボタンを配置。付箋の拡大・縮小をダブルクリックに。Trashを廃止。付箋の色を無してみる。
  5. 実用重視に偏りすぎに気付く。使う楽しさが失われつつあった。今ここ。
そこで次のことを決定
  1. 実用性と使う楽しさのバランスの取れた設計を目指す。女子大生やOLや草食系男子が喜んで使ってくれるようなもの。
  2. そのために各付箋毎にランダムに色をつけることを復活。ただし色はコンピュータに任せるのではなくKulgarから気に入った色を多数(100とか)ピックアップして使う。
  3. タグもそれぞれ色を持っており、タグ選択で表示したときにはその色が付箋の色になる。これは要検討.
  4. 付箋の各種ボタンを廃止。編集・Trashボックスへドラッグする方式のみへ。Trashボックスはそこに捨てるのが楽しくなるようなデザインを。例えば丸形で大きくなるとか。
話し合い重要

Memoloo

付箋アプリの名前がなかなか決まらない

postme
Foosend
Kolors
Hana
TiLe
Brick
Dragee

などと変遷してきた

ところがここに来て
さちの夢の中から突如有力候補現れる

Memoloo

要はメモるなんだけど
意外と盲点なのか使われていないみたいだ
(whoisでも出てこない)
語感も可愛い

最終的にはどうなるかはまだわからないけど

TextEditor

日本語を編集するための良いエディターが見つからない
現在はmiという日本製のものを使っているが
cocoaアプリじゃなくちょっとMacのエディターぽくないのが好きじゃない
vimとかはやっぱり日本語がダメだ
TextMateで日本語が扱えるようになれば最高なんだけど
なかなか対応してくれない

今日試しにTextWranglerというのをDLしてみた
ちょっとみたところよさげだけど少し使ってみないとわからない
よければいずれさちに勧めよう

Tuesday, October 13, 2009

ImageMagick

Yahoo Auctionに投稿するときに
撮った写真の画像サイズを小さくする必要があり
そのために今までImageWellというツールを使ってたんだけど
これがSharewareになってしまった

でRubyで作ることにした
RubyにはRMagickという画像処理ライブラリがあって
それはImageMagickというCのライブラリのインタフェースを提供する
ImageMagickとRMagickのインストールはこの辺を参考に

Installing RMagick on OS X using MacPorts
http://rmagick.rubyforge.org/install-osx.html

使い方はこの辺を

RMagickの使い方のメモ | 山本隆の開発日誌
http://www.gesource.jp/weblog/?p=198

取り急ぎ簡単なサイズ変換ツールを作った
とりあえず縮小サイズは30%固定…
引数に画像ファイルを与えると
同じフォルダに_newという接尾を付けて保存する

#!/usr/bin/env ruby
# encoding: utf-8
require "RMagick"

PERCENT = 0.3
files = ARGV

num = files.each do |file|
    path = File.join(File.dirname(file), File.basename(file, ".*")+"_new"+File.extname(file))
    img = Magick::ImageList.new(file)
    puts "Original image: #{img.entries}"
    puts "processing on shrinkage to #{PERCENT*100}%..."
    width, height = img.columns.to_f*PERCENT, img.rows.to_f*PERCENT
    img = img.resize(width.to_i, height.to_i).write(path)
    puts "Done! New image: #{img.inspect}"
end.length

puts "All Done! #{num} images processed."

プログラムは簡単だけど
さちのmacにruby環境を作るのに時間が掛かる

Monday, October 12, 2009

秤の電池交換

秤の使用頻度が異常に高い
電池の消耗ペースを記録しておこう
今回は福太郎で198円にて購入

Adiumでチャットするとき

  1. QuickSilverでAdiumを選択(ContactListが表示される)
  2. 先頭の人ならそのままリターン
  3. それ以外は矢印キーで選んでリターン

Dragee error

postを削除すると
undefined method bytesize for #<tag ....> とでるエラー
siatra ではget method で返される値をStringにキャストするらしい
だからgetのreturn値をstringにすればいい

What is problem? when undefined method `bytesize' for #. - Stack Overflow
http://stackoverflow.com/questions/1123666/what-is-problem-when-undefined-method-bytesize-for

Sunday, October 11, 2009

vimperator commands

      1 h, l : 戻る・進む
      2 H, L : タブ移動
      3 <-, -> : 同上
      4 S-<-, S--> : タブ位置変更
      5
      6 C-1, C-2, C-3 : ツールバー表示切換
      7 qm : QuickMarkをセット
      8 qa : QuickMark一覧
      9 A : social bookmark

tmux default keybindings

        { ' ',              0, &cmd_next_layout_entry },
        { '!',               0, &cmd_break_pane_entry },
        { '"',               0, &cmd_split_window_entry },   
        { '%',               0, &cmd_split_window_entry },   
        { '#',               0, &cmd_list_buffers_entry },
        { '&',               0, &cmd_confirm_before_entry },
        { ',',               0, &cmd_command_prompt_entry },
        { '-',               0, &cmd_delete_buffer_entry },
        { '.',               0, &cmd_command_prompt_entry },
        { '0',               0, &cmd_select_window_entry },
        { '1',               0, &cmd_select_window_entry },
        { '2',               0, &cmd_select_window_entry },
        { '3',               0, &cmd_select_window_entry },
        { '4',               0, &cmd_select_window_entry },
        { '5',               0, &cmd_select_window_entry },
        { '6',               0, &cmd_select_window_entry },
        { '7',               0, &cmd_select_window_entry },
        { '8',               0, &cmd_select_window_entry },
        { '9',               0, &cmd_select_window_entry },
        { ':',               0, &cmd_command_prompt_entry },
        { '=',               0, &cmd_scroll_mode_entry },
        { '?',               0, &cmd_list_keys_entry },
        { '[',               0, &cmd_copy_mode_entry },
        { '\'',              0, &cmd_select_prompt_entry },
        { '\032', /* C-z */      0, &cmd_suspend_client_entry },
        { ']',               0, &cmd_paste_buffer_entry },
        { 'c',               0, &cmd_new_window_entry },
        { 'd',               0, &cmd_detach_client_entry },
        { 'D',              0, &cmd_choose_client_entry },
        { 'f',               0, &cmd_command_prompt_entry },
        { 'i',              0, &cmd_display_message_entry },
        { 'l',               0, &cmd_last_window_entry },
        { 'n',               0, &cmd_next_window_entry },
        { 'o',               0, &cmd_down_pane_entry },
        { 'p',               0, &cmd_previous_window_entry },
        { 'q',              0, &cmd_display_panes_entry },
        { 'r',               0, &cmd_refresh_client_entry },
        { 's',               0, &cmd_choose_session_entry },
        { 't',               0, &cmd_clock_mode_entry },
        { 'w',               0, &cmd_choose_window_entry },
        { 'x',               0, &cmd_confirm_before_entry },
        { '{',              0, &cmd_swap_pane_entry },
        { '}',              0, &cmd_swap_pane_entry },
        { '\002', /* C-b */      0, &cmd_send_prefix_entry },
        { '1' | KEYC_ESCAPE,      0, &cmd_select_layout_entry },
        { '2' | KEYC_ESCAPE,      0, &cmd_select_layout_entry },
        { '3' | KEYC_ESCAPE,      0, &cmd_select_layout_entry },
        { '4' | KEYC_ESCAPE,      0, &cmd_select_layout_entry },
        { KEYC_PPAGE,           0, &cmd_scroll_mode_entry },
        { 'n' | KEYC_ESCAPE,       0, &cmd_next_window_entry },
        { 'p' | KEYC_ESCAPE,       0, &cmd_previous_window_entry },
        { KEYC_UP,           0, &cmd_up_pane_entry },
        { KEYC_DOWN,           0, &cmd_down_pane_entry },
        { KEYC_UP | KEYC_ESCAPE,  1, &cmd_resize_pane_entry },
        { KEYC_DOWN | KEYC_ESCAPE,  1, &cmd_resize_pane_entry },
        { KEYC_LEFT | KEYC_ESCAPE,  1, &cmd_resize_pane_entry },
        { KEYC_RIGHT | KEYC_ESCAPE, 1, &cmd_resize_pane_entry },
        { KEYC_UP | KEYC_CTRL,    1, &cmd_resize_pane_entry },
        { KEYC_DOWN | KEYC_CTRL,  1, &cmd_resize_pane_entry },   
        { KEYC_LEFT | KEYC_CTRL,  1, &cmd_resize_pane_entry },
        { KEYC_RIGHT | KEYC_CTRL, 1, &cmd_resize_pane_entry },
        { 'o' | KEYC_ESCAPE,      0, &cmd_rotate_window_entry },
        { '\017', /* C-o */      0, &cmd_rotate_window_entry },

Saturday, October 10, 2009

tmux commands

" : new pane
h,v,f : split direction
o: change pane
!, exit : kill pane

,: rename window
d : detach
w: list of windows
tmux a : attach

t: time

tmuxのsession

  • tmuxを立ち上げると1つのSessionができる
  • 1つのSessionの中には複数のWindowを持てる
  • 1つのWindowは複数のPaneに分けられる
  • tmux list-sessions(ls)で全セッションをみることができる
  • tmux detachで現在のセッションをデタッチできる
  • tmux attachで最後?のセッションにアタッチできる
  • tmux attach -t [session num]
  • tmux new-windowで別のWindowを持てる
  • tmux splitw -> kill-windowでWindowを複数のペインにできる

TMUX

command list

    "attach-session", "attach",
    "bind-key", "bind",
    "break-pane", "breakp",
    "clear-history", "clearhist",
    "confirm-before", "confirm",
    "copy-buffer", "copyb",
    "delete-buffer", "deleteb",
    "detach-client", "detach",
    "display-message", "display",
    "display-panes", "displayp",
    "down-pane", "downp",
    "find-window", "findw",
    "has-session", "has",
    "if-shell", "if",
    "kill-pane", "killp",
    "kill-window", "killw",
    "last-window", "last",
    "link-window", "linkw",
    "list-buffers", "lsb",
    "list-clients", "lsc",
    "list-commands", "lscm",
    "list-keys", "lsk",
    "list-sessions", "ls", "",
    "list-windows", "lsw",
    "load-buffer", "loadb",
    "lock-server", "lock",
    "move-window", "movew",
    "new-session", "new",
    "new-window", "neww",
    "next-layout", "nextl",
    "next-window", "next",
    "paste-buffer", "pasteb",
    "previous-layout", "prevl",
    "previous-window", "prev",
    "refresh-client", "refresh",
    "rename-session", "rename",
    "rename-window", "renamew",
    "resize-pane", "resizep",
    "respawn-window", "respawnw",
    "rotate-window", "rotatew",
    "save-buffer", "saveb",
    "select-layout", "selectl",
    "select-pane", "selectp",
    "select-window", "selectw",
    "send-keys", "send",
    "server-info", "info",
    "set-buffer", "setb",
    "set-environment", "setenv",
    "set-option", "set",
    "emacs", "vi", NULL
    "left", "centre", "right", NULL
    "none", "any", "current", NULL
    "set-password", "pass",
    "set-window-option", "setw",
    "emacs", "vi", NULL
    "12", "24", NULL
    "show-buffer", "showb",
    "show-environment", "showenv",
    "show-options", "show",
    "show-window-options", "showw",
    "source-file", "source",
    "split-window", "splitw",
    "start-server", "start",
    "suspend-client", "suspendc",
    "swap-pane", "swapp",
    "swap-window", "swapw",
    "switch-client", "switchc",
    "unbind-key", "unbind",
    "unlink-window", "unlinkw",
    "up-pane", "upp",

scp file転送用のruby scpript

scp_coosa.rb
#!/usr/local/bin ruby
addr = "coosa@5.1.168.192.in-addr.arpa"
file = ARGV[0]
dir = ARGV[1] ? ARGV[1] : "Desktop"

system "scp #{file} #{addr}:#{dir}"

使い方
% ruby scp_coosa.rb [filename] [targetdir]

targetdirを省略するとDesktopへ

Friday, October 09, 2009

vimperator commands

     1 move:
      2   j,k:上下
      3   C-d, C-u:上下半頁
      4   C-f, C-b:上下一頁
      5   gg, G:頁トップボトム
      6   H,L(C-o, C-i):戻る進む
      7   C-p, C-n(gT,gt):前後のタブ
      8   d:タブ閉じる
      9
     10   f[num/word]:リンクハイライト
     11   gi,[num]gi:インプットにカーソル
     12   /[word]:頁中検索ワードへ移動
     13
     14 search:
     15   t,o:検索モード
     16
     17 bookmark:
     18   a(:bma):ローカルブックマーク
     19   :sbm [tag]comment:ソーシャルブックマーク
     20   M[char] -> gn[char],go[char]:クイックマーク登録・移行
     21   m[char] -> '[char]:カーソル行登録・移行

sati Mac mini Memory交換

さちのMacが最近重いということで
512から1Gにメモリーを交換
2007年7月に同じものを勝ったときは8000*2=16000だったのが
なんと1500*2=3000円と5分の1
これじゃメモリーメーカーは厳しいな
1500円のクーポンがあったので支払は1,500円

今回もアマゾンで
アマゾンは部品安いな

Amazon.co.jp: BUFFALO ノートPC用増設メモリ PC2-5300 (DDR2-667) 1GB 2枚組 D2/N667-S1GX2/E: 家電・カメラ
http://www.amazon.co.jp/%E3%83%8E%E3%83%BC%E3%83%88PC%E7%94%A8%E5%A2%97%E8%A8%AD%E3%83%A1%E3%83%A2%E3%83%AA-PC2-5300-DDR2-667-D2-N667-S1GX2/dp/B00243GS3Y/ref=wl_it_dp_o?ie=UTF8&coliid=I3KMI0LCLSRILE&colid=2QZRZAWC2HJ25

scp file転送

coosa_macに.zshrcファイルを転送するとき
scp .zshrc coosa@5.1.168.192.in-addr.arpa:Desktop

Wednesday, October 07, 2009

VIM commands

vimperatorに触発されてvimを使ってみる
まずはチュートリアルをやってみた
これはすごいいいかも
move
h,j,k,l
0,$
w,e,b
gg, G

enter exit
:q!
:wq

delete
x
dw
d$
d [num] w,e,$..
dd

put
p,P

undo undo
u,U
c-r
insert
i, a, I, A
o, O

replace
r [char]
R
cw,c$
c [num] l,w,$..
:s/old/new/g
:%s/old/new/g
100,200s/old/new/g

search
/[word], then n or N
?[word]
% : parentheses

status
c-g

command
:!ls, :!rm TEST

explore
:E

file operations
:w TEST
:100,200 w TEST
:r TEST

set option
:set ic
:set hls is

help
:help w
window
c-w, s :split window
, n :new
, q :quit a window
, o :close other windows
, c-w :switch window
, +, _ :window resize
read file
:e

line number
:set number
:[number] :jump to number

Sunday, October 04, 2009

vimperatorがやばい

Firefox(flock)の操作をVim化するアドオンvimperatorがすごい
マウス要らず

j/k: line down/up
c-d/c-u: half page down/up
c-o/c-i: previous page/next page
c-n/c-p: next tab
d:tab close
gi : go input textarea
[[, ]] : previous next page

y, Y, p : yank url, selected area & append
:copy : copy title url.. to clipboard

o: google search
f: hint link -> type target char or number

:help gt: help of gt
:viusage

c-z: pass through

bookmark
:bma : add local bookmark
:bmarks : list all local bookmarks
:sbm [tag] : add hatena bookmark:
:hb :list hatena bookmarks
M[chr] -> go[chr], gn[chr] : quickmark and go

c-c :escape

:emenu : firefox menu
:sb, sbclose :sidebar

:! system command

Saturday, October 03, 2009

Ruby Pit

Pit: ソースコード中にIDとかパスワードを直接書きたくない場合に
これを.pit以下のyamlで一元管理しコードから読み出せるようにしたライブラリ

以下のように使う
require 'rubygems'
require 'pit'

config = Pit.get('flickr.com', require => {:api_key => 'your flickr api key', :secret => 'your flickr secret'}
Flickr.new(config[:api_key], config[:secret])

データが.pitに保存されていない場合(初回)は$EDITORにセットされたエディタが立ち上がり入力できるようになる
しかしTextMateはだめみたいだ
=>pitでは ruby のsystem(env[EDITOR], t.path)を使ってて
env[EDITOR]に'mate -w'とオプションを指定してあるのが問題のようだ
しようがないのでvimをセットした

% pit set flickr.com
としてエディタを立ち上げて設定を入力してもいい

Wednesday, September 30, 2009

BarBar Sati

昨日さちに髪の毛を切ってもらった
所要時間40分
細かいところで手を抜かないのがすごいな
100円ショップで買ったまことちゃんカラーの敷物は
髪の毛が張り付かないので使えている

Ruby flickrup.rb

食事の写真をFlickrにアップするのが大変なので
exifの情報に基づいてタイトルを生成し
FlickrにアップするRubyのクラスFlickrPhotoを書いた
使い方は以下のようにする

まずアップするための認証がいるので
API_KEY = '****'
SECRET = '***'
token = 'flickr.dat'

FlickrPhoto.new(token, API_KEY, SECRET)
API_KEYとSECRETはflickr/base.rbにセットすればここでは省略できる

次いでアップロード
photo = FlickrPhoto.new(ARGV)
photo.title = "Tokyo tower on #{photo.mon} #{photo.day} #{photo.year(:short)}"
photo.tags = ['tokyo', 'travel']
photo.only_friend

photo.upload

これで写真のアップが楽になる

Friday, September 25, 2009

DataMapper filter

one to manyのフィルタは
Post.all('user.name' => 'merborne')
のように簡単に行くけど
many to manyの場合はちょっと面倒
Post.all(:conditions => {:id => PostTag.all(:tag_id => 3).map { |pt| pt.post_id }})
つまりRelationTableを使ってやる必要がある

Thursday, September 17, 2009

Git command

設定
> git config --global --list #listing config
> git config --global user.name "melborne"
> git config --global user.email "p@gmail.com"
> git config --global color.ui "auto"

状態を見る
> git status
> git diff # see only not staged changes
> git diff --cached # see only staged changes
> git diff HEAD # see all changes
> git log -1 #check last log

ファイルの追加・変更
> git add myfile.rb # change staging area
> git add -i # interactive mode
> git commit -m 'initial commit' # apply stage data to repo
> git mv a.txt b.txt #only required is commit
gitignore or git/info/exludeファイルに追跡しないファイルを追加(*.dbとか)
> git commit -C HEAD -a --amend #amend most recent commit with same comment
> git revert #revert a commit
> git revert -n HEAD # only revert head without commit
> git checkout #discard changes in working dir

ブランチ
> git branch RB_1.0 master # create RB_1.0 branch for release
> git checkout RB_1.0 # change working branch to RB_1.0
> git tag 1.0 RB_1.0 # tagged 1.0 to RB_1.0's current status
> git checkout master
> git rebase RB_1.0 # rebase master with RB_1.0
> git branch -d RB_1.0 # delete RB_1.0 branch
> git branch -m oldname newname # rename branch
> git branch RB_1.0.1 1.0 # create branch RB_1.0.1 for tag 1.0
> git archive --format=tar --prefix=mysite-1.0/ 1.0 | gzip > mysite-1.0.tar.gz

マージ
>git merge RB_1.0 # merge RB_1.0 to master(when cuurent branch is master)
競合が生じた場合はソース上に表示される
修正して解消したのちcommitする必要がある
> git cherry-pick 321d.. #merge only 321d.. commit to master
> git mergetool #use when merge conflict

プル
> git pull #fetch repo and merge
> git pull origin RB_0.1 #merge RB_0.1 branch
> git fetch #only fetch
> git remote add # alias name
> git remote #list aliases
> git remote show #show info of alias

> cd /work
> git clone git://github.com/....

Wednesday, September 16, 2009

Tile: Bookmarklet with AJAX

hatena bookmarkletを参考にして
対象サイトにフォームをアペンドしてブックマークする方法を模索
いい線まで行ってると思うけどポストがうまくいかない
404がでる
bookmarklet
%a#booklet{:href=>"javascript:(function(){var%20d=(new%20Date);var%20s=document.createElement('script');s.charset='UTF-8';s.src='http://192.168.1.3:4567/javascripts/let.js';(document.getElementsByTagName('head')[0]||document.body).appendChild(s);})();"} Brick+

let.js
$(document).ready(function(){
$('body').append("<form id='bookmark-form' action='/' method='post' style='position: absolute; top: 10px; right: 10px;z-index: 10002';><textarea name='body' rows='6' cols='25'></textarea></br><input type='submit' value='New'><p id='ip'>POST!</p></form>");
$('#ip').click(function(){
$.post('http://192.168.1.3:4567/', $('textarea:name').text(), function(){
alert('posted!');
});
});
});

Tuesday, September 08, 2009

ruby mapreduce

module Enumerable
def mapreduce(init=0, blk)
self.map { |elm| blk[elm] }.inject(init) { |mem, var| yield(mem, var) }
end
end

a = [17, 14, 21, 21, 24]
b = a.map { |elm| elm**2 } # =>
b.inject { |mem, elm| mem + elm } # =>

p a.mapreduce(0, lambda { |elm| elm**2 }) { |mem, elm| mem + elm } # =>

p a.mapreduce("", lambda { |elm| elm.to_s(36) }){ |mem, elm| mem << elm } # =>

意味なさそう

Monday, September 07, 2009

ruby mapreduce

Google MapReduce

# docID, value  => wordID, docID:docPos
WDIC = {101 => 'Page', 102 => 'of', 103 => 'School', 104 => 'Sakura', 105 => 'Kaede'}.invert

web = {1 => "Page of Sakura School", 2 => "Page of Kaede School"}

mapped = web.map do |doc_id, content|
  content.scan(/\w+/).map.with_index { |word, i| [WDIC[word], [doc_id, i]] }
end.flatten(1)

p mapped.inject(Hash.new([])) { |h, (word_id, v)| h[word_id] += [v]; h }

# => {101=>[[1, 0], [2, 0]], 102=>[[1, 1], [2, 1]], 104=>[[1, 2]], 103=>[[1, 3], [2, 3]], 105=>[[2, 2]]}

Sunday, September 06, 2009

Ruby UDP Broadcast

require "socket"
require "timeout"

port = ARGV[1] || 'echo'
sock = UDPSocket.open

sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)

begin
  sock.send('message', 0, '<broadcast>', port)
  timeout(5) {
    loop do
      msg, addr = sock.recvfrom(20)
      p addr
    end
  }
rescue TiemoutError
  
end
sock.close

Ruby UDP sample

echo_srv.rb
require "socket"

port = ARGV[1] || 'echo'
sock = UDPSocket.open
sock.bind('', port)

loop do
msg, (afam, port, host, ip) = sock.recvfrom(1024)
sock.send(msg, 0, ip, port)
end

Server側はClient毎にスレッド化する必要がない
recvfromしたデータにはClientのアドレス情報が入ってる
エコーバックするときにそのアドレス情報を指定する

echo_cln.rb
require "socket"

host = ARGV[0] || 'localhost'
port = ARGV[1] || 'echo'

sock = UDPSocket.open

while msg = STDIN.gets
sock.send(msg, 0, host, port)
print sock.recvfrom(1024)[0]
end
sock.close

Client側はsendするとき自アドレスを一緒に送る

Monday, August 31, 2009

Ruby id to Object

'hello'.object_id #=> 12345

ObjectSpace._id2ref 12345 #=> 'hello'

Sunday, August 30, 2009

Ruby Curry

is_weekday = lambda { |week_day, time| time.wday == week_day }.curry

sunday = is_weekday[0]
monday = is_weekday[1]
tuesday = is_weekday[2]

case Time.now
when sunday
  puts 'Day of rest'
when monday, tuesday
  puts 'work'
else
  puts 'maybe work..'
end

TinyUrl - URL shotener

#tinytiny.rb
# My first Ruby/Sinatra app, a URL shortener.
# by Leah Culver (http://github.com/leah)
require 'rubygems'
require 'sinatra'
require 'dm-core'

# Base36 encoded
BASE = 36

class Tinytiny
  include DataMapper::Resource
  property :id, Serial
  property :url, String
end

DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/tiny.sqlite3")

configure do
  DataMapper.auto_upgrade!
end

get '/' do
  # Form for entering a fatty URL
  <<-end_form
  <h1>Tiny tiny URLs!</h1>
  <form method='post'>
    <input type="text" name="url">
    <input type="submit" value="Make it tiny!">
  </form>
  end_form
end

post '/' do
  # Put the fatty URL in the database and display
  tiny = Tinytiny.new(:url => params[:url])
  if tiny.save
    url = request.url + tiny.id.to_s(BASE)
    "Your tiny tiny url is: <a href='#{url}'>#{url}</a>"
  end
end

get '/:tinyid' do
  # Resolve the tiny URL
  tiny = Tinytiny.first(:id => params[:tinyid].to_i(BASE))
  redirect tiny.url
end