Macを見に行ってきた。

Mac欲しい。

Linuxに移行して4ヶ月。多少不満も出てきた。Linux最大の弱点は、

"Photoshopが動かない"

Gimpではデザインする気が起きないので。選択肢として、Macというのもアリかなぁと思って調査してきた。

ビックカメラでターミナル起動。色々試してみる。

$ zsh
%

うっほ。漢のzshが標準で入ってる!vim,emacsも標準で入ってる。Ruby,Perlも標準で入ってる。残念ながらgccは入ってなかった。バージョンはかなり古め。+Photoshopがあれば充実したLL開発環境となるだろうと思う。

しかし、Mac本体+Adobe製品だけで20〜50万円・・・迷う。

買った本

Perl Hacks ―プロが教えるテクニック & ツール101選

Perl Hacks ―プロが教えるテクニック & ツール101選

1章のエディタカスタマイズが激しくお勧め。目から鱗のハックがたっぷり載っているので、Perlユーザーでなくても買いの一冊。オライリーのHackシリーズは見ているだけで楽しいので、大好きです。

珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造

珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造

アルゴリズムとデータ構造の定番書。重要なのは、問題から答えをどう導き出していくのか。練習問題の量がとんでもなく多いので、何年にも渡って読んでいきたい本。

その他色々。

Amazonで買った本

GW前に注文してやっと届いた・・・遅いよ!!

プログラミングRuby 第2版 言語編

プログラミングRuby 第2版 言語編

ライブラリ編だけ持っていたので、言語編も購入。今はライブラリ編の方が有用かも。

Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)

Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)

第2版が出たようなので購入してみました。日々進化を続けている.vimrcの管理に使おうかと思います。訳者はDebianチームの豪勢な顔揃え。ちとレベルが高そうな気が・・・。

新ANSI C言語辞典

新ANSI C言語辞典

困ったときに開く本。残念ながら、unistdとか入ってない(笑

少し固めの本を選んでみた。何年も読める本を中心に買い進めたいと思います。

たのしいRuby 第16章 FileクラスとIOクラス

昨日の事

昨日、本屋でRailsの本を立読みしたらびびった。

% irb -r rubygems -r active_support
irb(main):001:0> p 1.minute
60
=> nil
irb(main):002:0> p 1.hour
3600
=> nil

なんじゃこらぁぁぁ!!!!!!!

RailsRubyを採用した理由がわかったような気がする。Rubyでなければ出来ない。

Railsをやりたいけど、基本重要。今日は第16章、Fileクラスと、IOクラスに突入する。

ディレクトリのトラバース

再帰を使ったディレクトリのトラバースが面白かったので、treeコマンドに改造してみた。

#!/usr/bin/ruby

def tree(path, del)
  if FileTest.directory?(path)
    puts  del + "|--" + path.sub(/.*\//, '')
    dir = Dir.open(path)
    while name = dir.read
      next if name == "."
      next if name == ".."
      tree(path + "/" + name, del + "|  ")
    end
    dir.close
  elsif FileTest.file?(path)
    puts del + "|--" + path.sub(/.*\//, '')
  else
    puts "not found."
  end
end

if ARGV.empty?
  tree(".", "")
else
  tree(ARGV[0], "")
end

実行結果は・・・

% ./tree.rb ../../
|--
|  |--c
|  |  |--normal
|  |  |  |--head
|  |  |  |  |--head
|  |  |  |  |--tags
..(略
|  |  |  |--lex.yy.c
|  |  |  |--number.y

本物。

% tree ../../
../../
|-- c
|   |-- ls
|   |   |-- Makefile
..(略
|   `-- wc.awk
`-- zim
    `-- Home.txt

ソートもないし、最後のディレクトリ処理も甘い。しかも、一段深い。色々課題が残ってるなぁ・・・。

treeは案外難しい。

気になったので修正。

やはり、気になったので修正を加えた。

#!/usr/bin/ruby

def tree(path,del)
  dirs = Array.new
  files = Array.new
  
  dir = Dir.open(path)
  dir.sort.each do |name|
    next if name == "."
    next if name == ".."
    newpath = path + "/" + name
    if FileTest.directory?(newpath)
      dirs.push(newpath)
    else
      files.push(newpath)
    end
  end
  dir.close
  
  files.sort.each_with_index do |file, i|
    if i == files.length - 1
      puts del + "`--" + file.sub(/.*\//, '')
    else
      puts del + "|--" + file.sub(/.*\//, '')
    end
  end
  dirs.each_with_index do |name, i| 
    if i == dirs.length - 1
      puts del + "`--" + name.sub(/^.*\//, '')
      tree(name, del + "   ")
    else
      puts del + "|--" + name.sub(/^.*\//, '')
      tree(name, del + "|  ")
    end
  end
end

if ARGV.empty?
  path = "."
else
  path = ARGV[0]
end
if FileTest.directory?(path)
  puts path
  tree(path,"")
elsif
  put "not found."
end

実行結果は・・・。

% ./tree.rb ../../
../../
|--c
|  |--ls
|  |  |--Makefile
...(略
|  `--wc.awk
`--zim
   |--.zim.cache
   |--.zim.history.cache
   `--Home.txt

tree -aしたときと、ほぼ同様の結果になった。まだまだ課題は残る。正規表現より、File.basenameを使った方がいい。

便利そうなメソッドいっぱい

ひとつひとつ確認した。Findクラスが便利!!Ruby版Bloxsumとか面白そう。

練習問題。

簡単だった。参考になったのは、コレ。

du(ARGV[0] || ".")

ナルホド。