ifもcaseも使わずに条件分岐

再び、λ楽しいよラムダの時間がやってまいりました。 true=λx.λy.x false=λx.λy.yそうすると、変数bがtrueかfalseをとるとしてb(0)(1)とすると、bがtrueのとき0、falseのとき1を返します。λで条件分岐ができた! 2009-04-09 - きしだのはてな というわけで、…

やってしまったことをなかったことにしたい

git

人生はresetやrevertできないけど、gitなら1行でできるよ! 色々方法があるようなのでメモ。ごちゃごちゃとやってみたけどダメでしたー!戻したい!でも手動じゃ無理!みたいな時に使いましょう。 ファイルはそのままに、コミット記録だけ消す hash のコミッ…

MacでVimを使ってみる

春なのでemacsからvimに乗り換えてみました - ふぃふmemo に刺激されて、Vim を用意してみた。 インストールメモ。 Macports でインストール sudo port install vim-app +cscope +ruby +python +gdb +cocoa/Applicaation/MacPorts/Vim.app で起動できる。 メ…

リテラルの %(percent) 記法

よく忘れる上にググりにくいのでメモっておく。 文字列や正規表現、リテラルを簡潔に記述できる。 %(hoge #{foo} bar) # => "hoge Foo bar" %Q(hoge #{foo} bar) # => "hoge Foo bar" %q(hoge #{foo} bar) # => "hoge \#{foo} bar" %x(echo hoge #{foo} bar)…

define_method ってなんぞや

railsのプラグインを覗いてたら、eval系メソッドがもっさり出てきてわけのわからないことになったので、色々復習。まずはdefine_method。 インスタンスメソッド name を定義します。ブロックを与えた場合、定義したメソッドの実行時にブロックがレシーバクラ…

Struct

Rubyにもstruct があるということを教えてもらったので、早速使ってみる。 Struct って? いわゆる構造体。語弊はあるけれど、メソッドの無いクラスのようなものと理解している。 Rubyの場合、Struct.new でstruct型のサブクラスを作り、それをさらにnewする…

Objectに動的にプロパティを追加する

php

object 生成後に、宣言とか関数とか使わずにプロパティを追加できるらしい。 by PHP 5.2.6 (Mac OSX) foo = 'bar'; // add property print_r(get_class_vars('Test')); print_r(get_object_vars($test)); // 実行結果 Array ( [a] => default ) Array ( [a] …

Passenger をアップデート

Redmine を svn up してアップデートしてみたが、 504 エラーが出た。 なにかと思ったら、先日Passengerのバージョンが上がったのを放置していたせいらしい。Passenger をアップデートすると、apache module を再インストールする必要がある。 $ sudo passen…

Project Euler - Problem 2

1分間でなんてとても解けません。 Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...Find the sum of all the even-…

Project Euler - Problem 3

素因数分解 - Wikipedia The prime factors of 13195 are 5, 7, 13 and 29.What is the largest prime factor of the number 600851475143 ? Ruby には便利なライブラリがありますね。 singleton method Integer.prime_division #!/usr/bin/env ruby require…

ついでにカリー化

カリー化 - Wikipedia 複数の引数をとる関数を、引数が「もとの関数の最初の引数」で戻り値が「もとの関数の残りの引数を取り結果を返す関数」であるような関数にすること。 クロージャよりもさっぱりだよ!! サンプル 書いてみたはいいけどいまいち良さが…

Ruby でクロージャ

クロージャってブロックとしてよく使っているが、何者なのかよくわかってなかった。 急に気になったので調べてみた。ただし Wikipedia。 クロージャ - Wikipedia 典型的には、クロージャはある関数全体が他の関数(以下、エンクロージャ)の内部で宣言された…

Rails 2.3.2 がリリースされた

rails 2.3 系の安定版がリリースされたようだ。 Riding Rails: Rails 2.3: Templates, Engines, Rack, Metal, much more! Ruby on Rails 2.3 Release Notes 目玉機能としては、 Templates: 新アプリのスケルトンを作ることができる Engines: アプリケーショ…

Macportsでnon-activeなものをアンインストールする

mac

1行でいいらしい。 $ sudo port uninstall inactive

Ruby で Singleton

Ruby で Singleton を実装してみる。 モジュールなし 生成したオブジェクトをクラス変数へ保存しておく。 #!/usr/bin/env ruby class Singleton @@instance = nil; def initialize puts "MyInitialize" end def self.instance @@instance = new if @@instanc…

public なメソッドを private でオーバーライドした場合

Java だと確か、アクセス制限を弱める方向でオーバーライドできた覚えがある。 PHP と Ruby で同じことを試す機会があったのでメモ。 PHP の場合 Error になる。public なメソッドは public でないといけないらしい。 Java と似た方式。

Rubygemsがhomeディレクトリに入ってしまう

現象 gem list で表示されるのに、gem uninstall してもエラーになってしまう。例えばgrowlnotifierを抜こうとする。 $ sudo gem uninstall growlnotifier [~] ERROR: While executing gem ... (Gem::InstallError) Unknown gem growlnotifier >= 0 原因 イ…

Capistrano のメイン開発者が燃え尽きたっぽい

お疲れ様でした。 ゆっくり休養して、また新しいアイデアを形にして欲しいですね。 But I’m burning out, and I have to drop these before things get worse. the { buckblogs :here }: Net::SSH, Capistrano, and Saying Goodbye ってよく見たら Capistran…

Rubyの誕生日

昨日、2月24日が Ruby の誕生日だったようです。 Rubyは1993年2月24日に生まれました。その日同僚とオブジェクト指向 言語の可能性について話していました。 FAQ::一般的な質問 - Rubyリファレンスマニュアル 1993年2月24日は「Rubyの誕生日」ということにな…

Twitter4rのエラーを追って見る

普段、twitter には twitter4r を使った投稿用のスクリプトで投げている。仕事中にぼやきたい時などにターミナルから直接投げれるのでちょっと便利*1。 そんなわけでタイムラインはあまり見ていない。投稿時に10行だけ表示されるようにしているので、チラっ…

CSVを読み込む&新規CSVファイルに書き込む

RubyでCSVファイルを読み込んで、新規のCSVファイルに書き込む。 FasterCSVというgemを使った方が速いらしいが、あえてスルー。 新規CSVファイルに書き込む CSVファイルを読み込んで、一部を置換したものを新規CSVとして保存する。 File.openはファイルオブ…

改行コードLFをCR+LFに変換する

Macでテキストファイルを保存すると、改行コードがLFで保存される。 ただ、Windowsに渡さなければ行けない時にちょっと面倒。 dos2unix というコマンドもあるらしいが、あえてRubyで変換してみる。 正規表現でいけるかと思ったが、なんかうまくいかないので …

Ruby on Rails 2.3 RC1 で Application Template を使ってみる

まずはインストール $ gem install rails --source http://gems.rubyonrails.org $ rals -v Rails 2.3.0 Application Template を作ってみる Templates are simple ruby files containing DSL for adding plugins/gems/initializers etc. has_many :bugs, :t…

Ruby1.9.1がリリースされた

2009/01/31, Ruby1.9の歴史が始まったようです。 1.9系統初の安定版、Ruby 1.9.1がリリースされたそうな。 http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/45836 Ruby 1.9はRubyの新しい系統です。近代的に、高速に、文法も明確に、多言語化 …

Passenger2.0.6とRails2.2.2でRouting Error

Passenger (mod_rails) セットアップ でPassengerを動かしてみたものの、root 以下にアクセスするとエラーが発生していた。 http://example2.com/rails/hoges Routing Error No route matches "/rails/hoges" with {:method=>:get} mod_rewrite と干渉すると…

Makefile を書いてみる

C

いちいちgcc のオプションとか叩くのが面倒なので、Makefileを作ってみた。 参考: Makefileの書き方 - スキルアップ輪講 Makefileの基本的な構文は依存関係を表す依存関係行です。依存関係行はこんな感じです。ターゲット名: 依存ファイル名1 依存ファイル名…

Cでcatもどきを書く

C

ふつうのLinuxプログラミングに載っていた練習問題を書いてみた。 お題は、 ファイルを読み込み、\t を"\t"に、改行 を "$"+改行 に置き換えた文字列を出力するコマンド #include <stdio.h> #include <stdlib.h> int main (int argc, const char *argv[]) { FILE *f; int c; if </stdlib.h></stdio.h>…

Passenger (mod_rails) セットアップ

環境 Ubuntu 8.10 Server Edition Rails 2.2.2 Rubygems 1.3.1 Passenger 2.0.6 Apache 2.2.9 まずはインストール $ sudo gem install passenger $ sudo passenger-install-apache2-module Welcome to the Phusion Passenger Apache 2 module installer, v2.…

Picasa for Mac がリリースされた

mac

Official Google Blog: Introducing Picasa for Mac (at Macworld!) Google Photos Blog: Announcing Picasa for Mac PicasaのMac版がリリースされていた。ただしβ。 他OS版と同じように、補正や編集、Webアルバムへのアップロードなどを備えている。 また、…

2008年アクセスの多かったエントリ トップ5

Firefox3で必要になるアドオン11個 VBでDateTime型にNothingがセットできる理由 UbuntuにもRuby On Railsをセットアップする Mac OSX でパスワード付きZIPファイルを作成・解凍する GridViewでページングした時の行内の値の取得 - その2 - ブクマは気にしな…

Daemon動作時のファイル出力と標準出力

プログラムをdaemonで動作させた時のログ出力ができない。 プログラムのカレントにある'test.log'というファイルに書き込むとすると・・・サンプルコード def daemon &bl exit!(0) if fork Process.setsid exit!(0) if fork Dir::chdir("/") File.umask(0) S…

Merb, Rails3にマージされる

MerbはRails3にマージされる事になった - Hello, world! - s21g Riding Rails: Merb gets merged into Rails 3!何気なくgoogle reader を見ていたら、同じニュースが同時に飛び込んできた。 マージによって何が起こるかは上記リンク先のgenkiさんの方がよっ…

1981s忘年会#2に行ってきました

100人もいるとさすがにカオス。 というわけで、今年も行ってきました1981s忘年会。 エンジニアはもちろん、馬を広めたいという人から広告の人まで色々な人と 出会えて楽しかったです。 はいはい、カオスカオス 去年も良い刺激を受けたのだけど、今年はさらに…

あとで触る

Appcelerator Titanium™ makes building desktop rich applications easy http://titaniumapp.com/ あとRubyCocoaで作りたいものがあるけれど、Xcodeの使い方がいまいちわからん。 Projectの種類大杉。

Titanium 触ってみた

というわけで、チュートリアルやってみた。 http://titaniumapp.com/documentation/starting-your-first-titanium-project Appcelerator Titanium ってなによ? Appcelerator Titanium is an open source platform for building rich desktop applications u…

楽天テクノロジーカンファレンス2008に行ってきた

Rails勉強会もあるというし、楽天も見てみたかったので行ってきました。 結局スタミナ切れで、懇親会も出ずに帰ってしまったわけですが・・・ あまりメモしてなかったので、ざっとメモした概要だけレポート 基調講演 まつもとさん 通信コストが低下し、国境…

調べもの

調べたら追記していく。 11/29 追記終了。 Process.fork == fork 組み込み関数 - Rubyリファレンスマニュアル子プロセスを作る。 parent = Process.pid fork { puts Process.pid # >> 587 } child = Process.wait puts "Parent: #{parent}, Child: #{child}"…

Daemonにするとcallbackが効かない

あるプログラムをDaemon化して常時動かしたいのだが、callbackを受け付けなくなってしまう。 $ ruby -v ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9] 1.8.6までは正常に動いてたと思ったのになあ・・・ WEBrick::Daemonでも、Process.forkもダメ。…

Ubuntu 8.04 ServerからUbuntu 8.10 へのアップグレード方法

失うものはセットアップ時間くらいなので、不具合も恐れずにアップグレード。 何度もアップグレード方法を忘れているので、いい加減にメモ。参考: Ubuntu 8.10へアップグレードを行うには | Ubuntu Japanese Teamまずは8.10へのアップグレード実行 $ sudo ap…

Safariで超快適にブラウジングするために

普段はFirefoxを使っているけど、MacBookで使っているとFirefoxの起動が遅いことが多い。 がっつり使うなら最初の起動が遅いくらいはかわいいものだけど、ささっと調べものだけしたい時なんかは待ち時間が惜しい。 そんなときにはSafarifがおすすめ。 以前は…

Mac OSX でパスワード付きZIPファイルを作成・解凍する

mac

忘れそうなのでメモ。 Archive Utilityじゃできないようなので、コマンドラインからzipcloakというツールを使う。 標準で入っている様子。 # ZIPファイルにパスワードを設定する $ zipcloak hoge.zip # ZIPファイルのパスワードを解除する $ zipcloak -d hog…

SSHを使いやすくする

といっても、hack的なものではなく・・・ 不便に感じていた点が設定で解消できることがわかったのでメモ。 ssh接続のタイムアウトを防ぐ ServerAliveIntervalを設定すると、指定した秒数ごとにサーバの生存確認をしてくれるらしい ssh接続でタイムアウトが嫌…

Net::SMTP::TLSを入れる

web

Net::SSLeay のテストがこける。 ごちゃごちゃと調べてみたら、libssl-devが足りなかった。 $ sudo apt-get install libssl-dev $ sudo cpan -i Net::SMTP::TLS ああ、これでようやくPlaggerが入る。

XML::Parserも入れる

似たような要領。 XML::Parser::Expatに怒られるらしい。 $ sudo apt-get install expat $ sudo apt-get install libexpat1-dev cpan > install XML::Parser で完了。

UbuntuにXML::LibXMLを入れる

CPANに接続して入れようとしてみるが・・・ cpan > install XML::LibXML libxml2がないよ!と怒られる。 $sudo apt-get install libxml2 libxml2を入れてやってみるが、ダメ。 エラーメッセージをよーくみると、 「RPMパッケージなら -devel ってやってね!…

Macでスクリーンセーバーを壁紙にするコマンド

mac

RSSなんかを設定しておくと面白そうなのでメモ。Macでスクリーンセーバを壁紙にする方法 - sta la sta $ /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background あんまり動くと…

wassrで翻訳BOTを公開しました

web

手習いに、Rubyで翻訳BOT(β)を作ってみました。 Replyで受け取った発言を翻訳します。 英和 http://wassr.jp/user/en2ja 和英 http://wassr.jp/user/ja2en 利用方法 BOTに向かって@で発言してください。 Replyで翻訳内容を返します。 @en2ja hoge @ja2en ほ…

Gitサーバを作る

git

serverでこんなディレクトリを作成すればOKみたい。 my-githubみたいに使えそう。 mkdirが1回で通らなかったので、コマンドを分割。 $ mkdir /var/git_rep $ cd /var/git_rep $ mkdir myapp.git $ cd myapp.git $ git --bare init

Gitリポジトリにポートを指定してSSHで接続する

git

$ cd ~/myapp $ git remote add origin ssh://user@hostname:port/path/to/git_repository.git $ git push origin master

DiCE導入

ダウンロード http://www.hi-ho.ne.jp/yoshihiro_e/dice/linux.html 展開 $tar -xvzf diced01914.tar.gz $sudo mv -r DiCE /usr/local/bin 注意 ターミナルの文字コードをEUC-JPに変更しないと、文字が見えない 実行 対話式で設定していく。 DynDNS.orgを使…