事前にパスの調整をする。Macでは 、/etc/pathsで定義した方が楽だ。どのシェルを使っても、デフォで入るパス設定だ。以下のようにするといいかな。

   1  $ cat /etc/paths
   2  /usr/local/bin
   3  /usr/bin
   4  /bin
   5  /usr/local/sbin
   6  /usr/sbin
   7  /sbin
パスがこうなる:
   1  echo $PATH
   2  /usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/X11/bin
/usr/X11/bin/etc/paths.d/X11から設定されている。詳しくはman path_helperで。

MacではReadlineのかわりにBSD系Editlineを使っているけど、これは日本語などとの相性が悪くいためMac標準のRubyのirbが使いものにならない。なので、まずは最新のReadlineを入れる。

   1  curl -O ftp://ftp.cwru.edu/pub/bash/readline-6.0.tar.gz
   2  tar xzf readline-6.0.tar.gz
   3  cd readline-6.0
   4  ./configure --enable-multibyte --enable-shared
   5  make
   6  sudo make install

Readlineの用意ができたら、Rubyを入れる。Ruby 1.9でもいいけど、まだ自信がないので1.8.7にする。

   1  curl -O ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p174.tar.gz
   2  tar xzf ruby-1.8.7-p174.tar.gz
   3  cd ruby-1.8.7-p174
   4  ./configure --enable-shared --enable-pthread --with-readline-dir=/usr/local CFLAGS=-D_XOPEN_SOURCE=1
   5  make
   6  sudo make install

しめとしてRubyGems

   1  curl -O http://files.rubyforge.vm.bytemark.co.uk/rubygems/rubygems-1.3.5.tgz
   2  tar xzvf rubygems-1.3.5.tgz
   3  cd rubygems-1.3.5
   4  sudo /usr/local/bin/ruby setup.rb

はい、カンタンですね。これくらいなら、まだまだMacPortsは要らない。

posted by Face lchin on Mon 7 Sep 2009 at 17:49

Rubyのwin32/processの話。ちょっとWindowsでデーモン的に動いてもらいたいスクリプトをProcess#Createとかで作って親が勝手に子を殺そうと思ったんだけど。子供が断末魔を上げてくれない。SIGINTでも同様。

さいわいdrubyで通信してので、子プロセスで Thread.main.kill して事を無きを得る。

posted by Png bopper on Sun 6 Sep 2009 at 08:12

Jukebox4Skype。一年ほど前につくったSkypeの通話会議にBGMを流すためのソフト。当時はWindowsのWaveOut系関数をRubyで扱う辺りで挫折して、再生する側でプチプチ音が途切れていたのを修正した。過去のソースをテキトウにいじったので、ちょっと不安な部分があるが、まぁおおむね動きはする。

J4S_0.0.3.zip

解凍後、jukebox4skype.exeを起動してSkypeにattach.exeが~を許可すると起動する。リストに追加はmp3とかをd&d。多少遅延が生じたり(特に曲が変わる瞬間)。ソフトを終了時にマイクが機能しなくなるかもしれない(もし発生した場合通話いったん切れば直ります)。あとWindowsOnly。それでもよかったら遊んでみてー

posted by Png bopper on Sun 6 Sep 2009 at 07:54

前からソースコードとかキレイに表示されてるようで気になってたs21gのblogを使わせてもらう。 どんなもんかなー

   1  File.unlink __FILE__

インデントしないと面白くないか

   1  def kill_me
   2    undef kill_me
   3  end
   4  kill_me

こりゃ、便利だー

posted by Png bopper on Sun 6 Sep 2009 at 07:32

まずは地図を表示して、現在位置にピンを立てるところまで。
MKMap-1.png

via

http://blog.objectgraph.com/index.php/2009/04/02/iphone-sdk-30-playing-with-map-kit/

MapKit.frameworkを追加する

MapKit.png

Controller.hでMapKit/MapKit.hをImport

MapKit/MapKit.hをImportして、MKMapViewをプロパティに持つ:

   1  #import <UIKit/UIKit.h>
   2  #import <MapKit/MapKit.h>
   3  
   4  @interface MapTutorialViewController : UIViewController {
   5  	MKMapView *_mapView;
   6  }
   7  
   8  @end

Controller.mでMKMapViewを初期化

showsUserLocationをTRUEにすることで、現在の居場所にピンを立ててくれる。

   1  - (void)viewDidLoad {
   2      [super viewDidLoad];
   3  
   4  	_mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
   5  	_mapView.showsUserLocation=TRUE;
   6  	[self.view addSubview:_mapView];

実機でやると、地図は出るが現在位置に近い地図でないので??ですが、それはまた次で。

posted by Png satoko on Thu 3 Sep 2009 at 16:37

このtutorialから派生しました。かっこいいし、参考になるので是非!:

http://pinkzap.com/?p=390

パターンを作ってコピー

320の幅で作ろうとしたので、割り切れる20x20とか40x40で作った。そしてクリップボードにコピー。
dot_pattern.png

Bucket FillでPattern fill

Bucket FillのFill TypeでPattern fillを選択。パターンの中からClipboardを選ぶ(先に作成したパターンが選ばれていることを確認)。塗る、終わり。
blue_dots.png

posted by Png satoko on Tue 1 Sep 2009 at 22:25

MuPADが有料になっていたので、Maximaを試してみました。 Maximaは、MathematicaやMaple, MuPAD等のような数式処理を行うソフトウェアです。 MacOS環境ではportを使えば以下の1行でインストールできます (ちょっと時間がかかりますが)

   1  % sudo port install maxima

readlineが恋しいので、maximaを起動するには以下のようにrlwrapを使います。

   1  % rlwrap maxima

基本的な使い方は以下の通り。

微分

   1  (%i) diff(f(x), x);

積分

   1  (%i) integrate(f(x), x);

因数分解

   1  (%i) factor( ..式.. );

多項式に展開

   1  (%i) expand( ..式.. );

単純化

   1  (%i) ratsimp( ..式.. );

求根

   1  (%i) solve(f(x), x);
   2  (%i) solve(f(x) = a, x);

終了

   1  (%i) quit();

posted by Png genki on Tue 1 Sep 2009 at 08:52
posted by Png satoko on Tue 1 Sep 2009 at 01:26

gitリポジトリに間違って追加してしまったファイル等を完全に消去する方法を紹介します。

   1  % git filter-branch -f --index-filter 'git update-index --remove "filename"' HEAD
   2  % git push --force

ディレクトリを削除したい場合は、ディレクトリの中身のファイルを1つずつ全て削除します。

ポイント

  • 上記のコマンドはワーキングディレクトリのROOTで実行する必要があります。
  • "filename"はワーキングディレクトリのROOTからの相対パスで記述します。
  • "-f" オプションはつけておいた方が良いです。
posted by Png genki on Sun 30 Aug 2009 at 08:47

WWW::Mechanize::Page#images

WWW::Mechanize::Page は、forms, links メソッドでそれぞれの要素の配列が取得できるが、画像(img)を取得するメソッドはまだないので簡易実装。

   1  require 'mechanize'
   2   
   3  WWW::Mechanize::Page.class_eval do
   4    def images
   5      @images ||= search('img').map do |img|
   6        case src = img['src']
   7        when %r{^https?://}
   8          src
   9        else
  10          (uri + src).to_s
  11        end
  12      end.uniq
  13    end
  14  end

forms, links では Page::XXX オブジェクトが返るので、 同様に Page::Image オブジェクトを作成するのが正しい姿であるが、 今はページの画像のURL一覧が欲しいだけなので、割愛。 そこは誰かに任せた。

   1  agent = WWW::Mechanize.new
   2  page  = agent.get('http://blog.s21g.com/')
   3  page.forms.size  # => 1
   4  page.links.size  # => 109
   5  page.images.size # => 17

とりあえず快適!

posted by Png maiha on Fri 28 Aug 2009 at 09:47