6 月 16 2008

弊社の動画が米GIZMODOに掲載された

Published by haga under 日記

僕がつとめている会社で作った動画が米GIZMODOに掲載されますた。

http://gizmodo.com/5016555/r2+d2s-in-ur-serverz-monitoring-ur-packetz

R2D2のプロジェクタをサーバ監視に使ってるよ~♪っていう動画です。おいらもちょろっと出てます。

No responses yet

6 月 03 2008

Apple Keyboard Wireless購入と、caps lock遅延問題。

Published by haga under mac, 日記

Apple Keyboard Wirelessを購入しました。

最近会社用のHHKが経年劣化のせいで、キーを押しづらくなったせいで 腱鞘炎になりそうな気配がしたので、買い替えました。

で、emacserなのでcapslockはキーボード設定の修飾キーのところで ctrlに切り替えて使っていますが、巷で言われているcapslockの遅延問題が起こりません。 うちの環境だと、ライトがずっと消えたまま、普通に使えています!!

環境はMacOS10.5.3です。

ということで、遅延問題で購入を思いとどまっていた方々、じゃんじゃん買いましょうよ!

個人的にはHHKLite2よりも良い感じなので、家も会社もApple Keyboard Wirelessにしたいと思ってます。

No responses yet

6 月 02 2008

Macに繋がるテプラが発売される

Published by haga under mac, 日記

テプラが欲しい。
テプラでMacの美しい書体が使えればなぁと、かなり本気で考えていたところに発表されたのが

Macにつながり、Macの内蔵フォントが使えて、Macにあわせてオシャレな筐体をもった新生テプラ「SR3700P」だ。

http://news.kakaku.com/prdnews/cd=kaden/ctcd=2076/id=2640/
http://www.rakuten.co.jp/officeland/624321/995786/

2万円は高いな。10,000円くらいならすぐ買うのに。。

No responses yet

5 月 28 2008

[linux]自宅サーバ

Published by haga under linux, 日記

久しぶりに投稿します。 最近自宅サーバを買いました。DellのPowerEdge。送料込みで3.5万くらい。

Railsでアプリを大量生産するような場所が欲しかったんですが、 経済的なアレでは、とても専用サーバを借りたりとかはできませんので。

HDDがカリカリいうのが気にはなりますが、ファンは静かで、寝室に置いても気にならないかも。

LAN用にDNSを立てたのだけど、nslookupでは正引きできるのに、pingやtracerouteでは名前解決できない状態でハマってる。 BINDは難しくて嫌だなぁ。

No responses yet

5 月 07 2008

[メモ]日本 Ruby 会議 2008 チケット購入について

Published by haga under 日記

Ruby会議のチケット購入の情報が出てた

日本 Ruby 会議 2008 チケット購入について~ http://jp.rubyist.net/RubyKaigi2008/?BuyTicket

No responses yet

4 月 16 2008

[Ruby]Array#eachの変な挙動

Published by haga under ruby, 日記

結構Rubyに慣れて来たと思う。でも久々にRubyこえーと思った。

[1,2,3].each do | i |
  printf "%s ", i
end
#=> 1 2 3


これは問題ない。Array#eachのブロックが受け取る引数は配列の要素そのものだけ。

しかし恐ろしいことに、配列の要素がさらに配列で、ブロックの引数が2つ以上だと挙動が変わる。

[['a',1],['b',2]].each do | n,m |
  printf "%s=>%d ",n,m
end
#=> a=>1 b=>2


ネストされた配列の要素を展開して引数に渡している・・・。この挙動はリファレンスに載っていない。

ちなみに引数を1つにすると

[['a',1],['b',2]].each do | n |
  printf "%s ",n.class
end
#=> Array Array


やっぱり要素をそのまま受け取る。

こえーーRubyこえーー。

参考: 天泣記#2008-08-16

[ruby-dev:29616] を実装したとき、最初は上のように括弧で括ればいいと考えて、配列の展開は行わなかった。 しかし、テストを通すために必要なところに括弧を挿入していったところ、最終的に rss でめげたのである。 多すぎてあきらめたのである。めげてしまい、また、配列の展開は使い勝手がいいということを認めざるを得なかったため、配列の展開は行うことにした。

No responses yet

4 月 12 2008

Ruby会議2008

Published by haga under ruby

Ruby会議2008

6/20~22の3日間。チケットの詳細は未定。

最近Rubyの勉強会に行きたいなぁと思ってるんですが これは是非行きたい。 今年はデブサミ行かなかったから、こっちに行こうかね。

なんかロックフェスに行くみたいな感覚だな。 今年はフジロック行かなかったから、朝霧行くか?みたいな。 子供が大きくなったら朝霧行きたいなぁ。

No responses yet

3 月 17 2008

D.I.YとGoogle SketchUp

Published by haga under DIY, 日記

いつものプログラミング話とは毛色が変わりますが、最近D.I.Yを始めました。押し入れ用に棚を作ります。

だいたいサイズは決まっていて後はいかに簡単で、低コストで、丈夫に作れるかという話。俺的DIYの標語は「楽しく作ろう適当に」の3Tさ。

手描きでスケッチしていると精密さが足らず、製図も書けないのでモチベーションが低下してきたから、Macで使える無料のCADツールを探したんだけど、そもそもCADなんて使ったことないし、「簡単」というコンセプトから外れる。

そこでGoogleのフリーソフトSketchUpで棚をモデリングしてみた。

shelf_01.jpg

結果はこのとおり。はっきりいってDIYerはみんなこぞってSketchUpを使うべき。簡単すぎだし、DIY向けな感じがする。

まず木材をサイズ通りに切り出すところから初めて、それを組み上げて・・って実際に作るのと同じじゃん?ってことに気付く。コンピューターでシミュレーションしながら作れるのはいいねぇ。

3Dソフトに触った事もない僕が小1時間で目的を達成できるんだから、どんだけ簡単か想像に固くないはず。 ちなみにRubyを使って作業もできるのでRubyistな僕にはウマウマだよ。

shelf_02.jpg

shelf_03.jpg

--

モデリングしてみた棚は、おそらく横の衝撃に弱いぽい。 背面に補強を入れるか、組み方をもうちょい考えてみる。

--

ちなみにこのくらいの棚だと、材料費は2000円掛からないはず。 2つ作って3000円くらいかなぁ?

-- shelf_04.jpg

背面補強案。 前面の丈夫さがちょっと不安かも・・。そんなに気にしなくても大丈夫かなぁ。

No responses yet

3 月 12 2008

[works]eyeVioのリニューアル

Published by haga under actionscript2.0, flash, works

ソニーの動画共有サイト「eyeVio」がリニューアルされました。 動画のプレイヤー部分を引き続き担当しています。 それからHTMLコーディングとCSSも、ベース段階でやっています。

今回のリリースから、フリーランスでやってます。

No responses yet

3 月 04 2008

Rails::Initializer ロードパス系の処理を見る

Published by haga under ruby, ruby on rails, 日記

Rails::Initializerまだまだ続くよ

processメソッドで呼ばれるメソッドで

  • set_load_path
  • require_frameworks
  • set_autoload_paths
  • add_plugin_load_paths
  • load_environment

名前からして全部ロード系ですから、一気に行きますよ。

set_load_path

def set_load_path
  load_paths = configuration.load_paths + configuration.framework_paths
  load_paths.reverse_each { |dir| $LOAD_PATH.unshift(dir) if File.directory?(dir) }
  $LOAD_PATH.uniq!
end


configrationで設定したロードパスとフレームワークパスの配列を結合して、$LOAD_PATHにディレクトリかどうかのチェックと、ユニークのチェックをして追加しています。

require_frameworks

def require_frameworks
  configuration.frameworks.each { |framework| require(framework.to_s) }
rescue LoadError => e
  # re-raise because Mongrel would swallow it
  raise e.to_s
end


Configration#frameworksで指定されているフレームワークを読み込みます。 読み込みに失敗した場合、Mongrelでは「飲み込まれる」らしいのでもう一度エラーをraiseしています。

set_autoload_paths

# Set the paths from which Rails will automatically load source files, and
# the load_once paths.
def set_autoload_paths
  Dependencies.load_paths = configuration.load_paths.uniq
  Dependencies.load_once_paths = configuration.load_once_paths.uniq

  extra = Dependencies.load_once_paths - Dependencies.load_paths
  unless extra.empty?
    abort <<-end_error
      load_once_paths must be a subset of the load_paths.
      Extra items in load_once_paths: #{extra * ','}
    end_error
  end

  # Freeze the arrays so future modifications will fail rather than do nothing mysteriously
  configuration.load_once_paths.freeze
end


いきなり登場したDependencies。名前からして「依存」を表すモジュールなんでしょう。 ドキュメントも特にありませんので、今のところ無視します。

configurationのロードパスと、一度だけロードするパスをDependenciesにコピーしています。 load_pathsにload_once_pathsに加えるべきパスがあった場合は強制終了。 configuration.load_once_pathsもfreezeで凍結しています。

add_plugin_load_paths

# Adds all load paths from plugins to the global set of load paths, so that
# code from plugins can be required (explicitly or automatically via Dependencies).
def add_plugin_load_paths
  plugin_loader.add_plugin_load_paths
end

# 中略

def plugin_loader
  @plugin_loader ||= configuration.plugin_loader.new(self)
end


読みにくくなってきたなぁ。 ちょっと割愛させてもらいますが、 configuration.plugin_loaderはPlugin::Loaderを指しています(デフォルトで)。 Plugin::Loaderがどこにあるのかは、ちょっとわからなかったです。 とにかくプラグインのパスをロードパスに追加していると・・。

load_environment

# Loads the environment specified by Configuration#environment_path, which
# is typically one of development, test, or production.
def load_environment
  silence_warnings do
    return if @environment_loaded
    @environment_loaded = true
   
    config = configuration
    constants = self.class.constants
   
    eval(IO.read(configuration.environment_path), binding, configuration.environment_path)
   
    (self.class.constants - constants).each do |const|
      Object.const_set(const, self.class.const_get(const))
    end
  end
end


なんかすげー書き方してますね・・。わかりづらすぎて憎しみすら覚えます。 指定されたenvironmentファイルを読むと。productionとかdevelopmentとかtestとかの例のアレを読み込む処理がここという事ですね。今日読む中では一番親しみ深い部分かもしれませんね、書き方以外は。

silence_warningsはrails apiで検索すると、ActiveSupportでKernelにたいして拡張されたメソッドだという事がわかります。 警告を出さずにブロックを実行するためのメソッドのようです。

self.class.constantsはトップオブジェクトが持つ定数を配列で返します。

eval式を使ってconfiguration.environment_pathの内容("#{root_path}/config/environments/#{environment}.rb")をRuby式として評価する前と後で、トップオブジェクトが持つ定数の差をeachで回してObjectに定数を代入している。 って、正直よくわかんないです。次回もうちっと踏み込んでみよう。

実際のソースにトレースを仕込んで挙動を確認したりしないと、もう無理だな・・。

参考

http://d.hatena.ne.jp/walf443/20060707/rails_initializer
http://rubyist.g.hatena.ne.jp/muscovyduck/20060528/p1
http://d.hatena.ne.jp/rubyco/20060311/constants

No responses yet

« Prev - Next »