2009-10-03
■ [ruby][memo] gem戦闘力362
ちょっとgem環境整理しなおすんでメモ
BlueCloth-1.0.0 GraphvizR-0.5.1 ParseTree-2.2.0 ParseTree-3.0.2 RedCloth-4.1.9 RedCloth-4.2.2 Remarkably-0.5.2 RubyInline-3.8.2 ZenTest-4.1.3 aaronp-frex-1.0.1 abstract-1.0.0 actionmailer-2.3.3 actionmailer-2.3.4 actionpack-2.3.3 actionpack-2.3.4 activerecord-2.3.3 activerecord-2.3.4 activeresource-2.3.3 activeresource-2.3.4 activesupport-2.3.3 activesupport-2.3.4 acts_as_paranoid-0.3.1 acts_as_versioned-0.2.3 addressable-2.0.2 addressable-2.1.0 amalgalite-0.7.7 archive-tar-minitar-0.5.2 arrayfields-4.7.2 autocode-1.0.0 bacon-1.1.0 bluecloth-2.0.5 bones-2.5.1 builder-2.1.2 camping-1.5 capistrano-2.5.5 case-0.5 cgi_multipart_eof_fix-2.5.0 cheat-1.2.1 chipmunk-ruby-4.1.0 choice-0.1.2 chriseppstein-compass-0.6.5 classx-0.0.5 coderay-0.8.312 colored-1.1 columnize-0.2 commonwatir-1.6.2 configatron-2.2.1 configuration-0.0.5 constructor-1.0.2 crate-0.2.1 croc-1.0.0 cucumber-0.3.101 cursesx-003 cutagem-0.0.7 daemons-1.0.10 darkfish-rdoc-1.1.5 data_mapper-0.9.8 data_objects-0.10.0 data_objects-0.9.12 datamapper-0.10.1 datamapper-0.9.11 defunkt-github-0.3.4 diamondback-ruby-0.20090421-x86-darwin-9 diff-lcs-1.1.2 dm-adjust-0.10.1 dm-adjust-0.9.11 dm-aggregates-0.10.1 dm-aggregates-0.9.11 dm-ar-finders-0.10.1 dm-ar-finders-0.9.11 dm-cli-0.10.1 dm-cli-0.9.11 dm-constraints-0.10.1 dm-constraints-0.9.11 dm-core-0.10.1 dm-core-0.9.11 dm-ferret-adapter-0.9.11 dm-is-list-0.10.1 dm-is-list-0.9.11 dm-is-nested_set-0.10.1 dm-is-nested_set-0.9.11 dm-is-remixable-0.10.1 dm-is-remixable-0.9.11 dm-is-searchable-0.10.1 dm-is-searchable-0.9.11 dm-is-state_machine-0.10.1 dm-is-state_machine-0.9.11 dm-is-tree-0.10.1 dm-is-tree-0.9.11 dm-is-versioned-0.10.1 dm-is-versioned-0.9.11 dm-is-viewable-0.10.1 dm-is-viewable-0.9.11 dm-migrations-0.10.1 dm-migrations-0.9.11 dm-more-0.10.1 dm-more-0.9.11 dm-observer-0.10.1 dm-observer-0.9.11 dm-querizer-0.10.1 dm-querizer-0.9.11 dm-rest-adapter-0.10.1 dm-rest-adapter-0.9.11 dm-serializer-0.10.1 dm-serializer-0.9.11 dm-shorthand-0.10.1 dm-shorthand-0.9.11 dm-sweatshop-0.10.1 dm-sweatshop-0.9.11 dm-tags-0.10.1 dm-tags-0.9.11 dm-timestamps-0.10.1 dm-timestamps-0.9.11 dm-types-0.10.1 dm-types-0.9.11 dm-validations-0.10.1 dm-validations-0.9.11 do_sqlite3-0.10.0 do_sqlite3-0.9.12 echoe-3.1.1 english-0.3.1 erubis-2.6.5 eventful-1.0.0 eventmachine-0.12.8 extensions-0.6.0 extlib-0.9.12 extlib-0.9.13 facets-2.5.2 faker-0.3.1 fakeweb-1.2.1 fastthread-1.0.1 ferret-0.11.6 filebase-0.3.6 firewatir-1.6.2 flexmock-0.8.4 functor-0.5.1 gamebox-0.0.6 gem_plugin-0.2.3 gembox-0.2.0 gemcutter-0.1.2 gemi-0.0.3 gemify-0.2.4 genki-cutagem-0.0.8.3 gettext-2.0.0 git-1.1.1 git-1.2.4 graph-1.1.0 haml-2.2.2 highline-1.5.0 hoe-2.3.2 hpricot-0.8.1 icalendar-1.0.2 ifchanged-1.0.0 innate-2009.07 innate-2009.10 irb_rocket-0.1.2 jackdempsey-sequel_polymorphic-0.0.1 jake-1.0.0 jbarnette-johnson-1.0.0.200808062111 jbarnette-johnson-1.0.0.20090402155420 jeremymcanally-pending-0.1 jeweler-1.0.2 jeweler-1.2.1 johnson-1.1.0 json-1.1.3 json_pure-1.1.6 langalex-culerity-0.2.3 launchy-0.3.3 less-1.1.12 linecache-0.43 live_console-0.2.0 locale-2.0.4 locale_rails-0.1.0 lockfile-1.4.3 logging-0.9.6 mack-0.8.2 mack-active_record-0.8.2 mack-asset_packager-0.8.2 mack-caching-0.8.2 mack-data_factory-0.8.2 mack-data_mapper-0.8.2 mack-distributed-0.8.2 mack-encryption-0.8.2 mack-facets-0.8.2 mack-haml-0.8.2 mack-javascript-0.8.2 mack-localization-0.8.2 mack-markaby-0.8.2 mack-more-0.8.2 mack-notifier-0.8.2 mack-orm-0.8.2 mack-pdf_writer-0.8.2 mailfactory-1.4.0 mame-simpletrace-1.0.0 manalang-bdoc-0.2.2 markaby-0.5 maruku-0.5.9 mechanize-0.9.3 meow-2.1.0 merb-1.0.12 merb-action-args-1.0.12 merb-assets-1.0.12 merb-auth-1.0.12 merb-auth-core-1.0.12 merb-auth-more-1.0.12 merb-auth-slice-password-1.0.12 merb-cache-1.0.12 merb-core-1.0.12 merb-exceptions-1.0.12 merb-gen-1.0.12 merb-haml-1.0.12 merb-helpers-1.0.12 merb-mailer-1.0.12 merb-more-1.0.12 merb-param-protection-1.0.12 merb-slices-1.0.12 merb_datamapper-1.0.12 metaid-1.0 methodphitamine-1.0.0 mime-types-1.15 mislav-will_paginate-2.3.11 mocha-0.9.5 mongrel-1.1.5 moro-open_id_authentication-1.0.0 moro-repim-0.1.7 mspec-1.5.12 ncurses-0.9.1 net-scp-1.0.2 net-sftp-2.0.2 net-ssh-2.0.11 net-ssh-gateway-1.0.1 newgem-1.2.3 nokogiri-1.3.3 ocra-1.1.1 oniguruma-1.1.0 opencv-0.0.6 openid_fu_generator-0.0.1 openid_login_generator-0.1 oyster-0.9.2 packr-3.1.0 passenger-2.2.2 pit-0.0.6 plist-3.0.0 polyglot-0.2.5 polyglot-0.2.9 publisher-1.1.1 quality_extensions-1.1.4 r18n-core-0.2.1 r18n-desktop-0.2.1 racc-1.4.6 rack-0.9.1 rack-1.0.0 rack-cache-0.2.0 rack-test-0.5.0 radiant-0.8.0 rails-2.3.3 rails-2.3.4 rails_datamapper-0.10.1 rak-0.9 rake-0.8.7 rake-compiler-0.5.0 rake-compiler-0.6.0 rakegen-0.6.6 ramaze-2009.05 ramaze-2009.07 ramaze-2009.10 randexp-0.1.4 rcodetools-0.8.1.0 rcov-0.8.1.2.0 rdiscount-1.3.5 rdoc-2.4.3 rdtool-yhara-0.0.0 reagent-simple-gem-0.4.1 red-4.1.7 redparse-0.8.0 reposh-0.1.6 resh-0.0.4 rexical-1.0.4 rmail-1.0.0 rocketstarter-0.1.0 rr-0.10.0 rspec-1.2.8 rspec-rails-1.2.7.1 rtask-010 rubigen-1.5.2 rubigraph-0.2.0 ruby-debug-0.10.3 ruby-debug-base-0.10.3 ruby-graphviz-0.9.0 ruby-growl-1.0.1 ruby-openid-2.1.4 ruby-station-0.1.1 ruby-station-0.1.3 ruby-station-runtime-0.0.4 ruby-treemap-0.0.3 ruby2ruby-1.2.1 ruby_parser-2.0.4 rubyforge-1.0.4 rubygame-2.5.3 rubygems-update-1.3.5 rubylexer-0.7.2 rubypython-0.2.7 rubyscript2exe-0.5.3 rubysdl-2.1.1 rubytter-0.8.0 rubyzip-0.9.1 rushcheck-0.8 s4t-utils-1.0.4 scrubber-scrubyt-0.4.16 scrubyt-0.4.06 sequel-3.2.0 sequence-0.2.0 sexp_processor-3.0.0 shotgun-0.4 sinatra-0.9.4 sinatra-r18n-0.2.1 sources-0.0.1 spork-0.5.7 sproutcore-0.9.20 sqlite3-ruby-1.2.5 sup-0.8.1 swdyh-gisty-0.0.11 syntax-1.0.0 systemu-1.2.0 taka-0.0.1 technicalpickles-gemstalker-0.4.0 templater-0.5.0 tenderlove-frex-1.0.1.20090313144615 term-ansicolor-1.0.3 termcolor-0.3.1 termios-0.9.4 termtter-1.3.1 test-unit-2.0.2 textpow-0.10.1 thin-1.2.2 thor-0.9.9 thoughtbot-factory_girl-1.2.1 ticketmap-0.2.0 tickets-0.1.0 tlsmail-0.0.1 treetop-1.3.0 treetop-1.4.2 trollop-1.13 ultraviolet-0.10.2 unroller-0.1.3 user-choices-1.1.6 uuidtools-1.0.7 vegas-0.0.3.1 visionmedia-bind-0.2.6 visionmedia-commander-3.2.9 visionmedia-jspec-2.0.3 waves-0.8.2 webrat-0.5.3 why-bloopsaphone-0.4 win32-api-1.4.2 wirble-0.1.3 wx_sugar-0.1.21 wxruby-1.9.9-universal-darwin-9 xml-simple-1.0.12 yard-0.2.2 yhara-ruby-sl-0.11 yhara-tickets-0.1.0.3
■ [arc] Arc 3.1はいかにしてset-car!を実装したか
pg「MzSchemeの最新版はset-car!がないから古いやつを入れてね」 ↓ pg「パッチ貰ったんで最新のMzSchemeでも動くようになったよ」
えっ、それってset-car!するたびにリストを作り直すってこと?と思ってパッチを見たら:
+(define (set-ca/dr! offset who p x) + (if (pair? p) + (let ([p* (get-ptr)]) + (ptr-set! p* _scheme p) + (ptr-set! (ptr-ref p* _pointer 0) _scheme offset x)) + (raise-type-error who "pair" p)))
ptr-set!ってなんだwww
■ [ruby-station] Windows対応
2時間ほど試行錯誤したあげく、「Open3がない」というオチ。今回は諦めるか…。
RubyStationで外部プロセスを起動したい場面は2つある。
- アプリケーションの起動。stdout, stderrは取れなくてもいい(起動に失敗した時のことを考えると取れてほしいけど…)。できれば終了を検知したい。
- gemコマンドの起動(インストール、アンインストール)。stdout, stderrが必須、できればリアルタイムに。終了の検知は必須。
で、Rubyでどうやるかというと:
- 前者
- Process.spawn (○windows対応 ×1.9のみ)
- Thread + system (○windows対応, 1.8でも)
- 後者
- Popen3 (×windows非対応)
- PTY (○リアルタイム、×windows非対応)
- そもそもgemコマンドを使うのをやめる (GemのAPIを叩く) (○リアルタイム, windows対応 △gemのバージョン間の差異を踏まないか)
という感じ。
さて、「windowsで」「1.8で」「起動したプロセスのstderrへの書き込みを取得する方法」ってあるのかな。
Windowsに限らず、プロセス生成前に$stderrをパイプでreopenしておけば可能です。<br><br>origerr = $stderr.dup<br>r,w = IO.pipe<br>$stderr.reopen(w)<br>t = Thread.new do<br> system("ruby -e '$stderr.puts 12345'")<br>end<br><br>sleep 0.5 # 厳密には、ここで実際にプロセス起動されるのを待つ<br>w.close<br>$stderr.reopen(origerr)<br><br>t.join<br>p r.read
ありがとうございます。普通の方法でできたんですね。