Saturday, August 28, 2010

The 2nd day of RubyKaigi 2010 (Afternoon)

In this afternoon, I attended these sessions:

  • If the session has a movie in English, I just write summaries of the article. Please see that movies if you want more details.
  • If the session has a movie in Japanese, I write the article with translating and little-summarizing.
  • If the session has no movies in any languges, I try to write the article with little-summarizing.
  • But, for Ceremonies and Lightning Talks, I only put the link of movies.
  • And I don't translate Q&As in the article because these are the gift for attendees in there.
  • Keynote (JRubyKaigi)
    Title: JRuby Pony Show
    • by Charles O.Nutter
    • by Tomas Enebo
    • The first idea for JRuby: [ruby-talk:13703] Ruby on a JVM - good or bad idea?
    • Jan Ame Peterson, the first developer of JRuby
    • Java One 2006 JRuby 0.9.0 rails runnning barely
    • Charles and Tom are hired to work full-time JRuby development by Sun
    • JavaOne 2007 JRuby 1.0
    • Normal Rails application run ok
    • 2008 Jan. JRuby 1.1 : Very Stable / Production OK
    • 2009 Aug. Chalres and Tom and NickSieger move to EngineYard
    • 2009 Oct. JRuby 1.4
    • 2009 Nov 1st JRubyConf
    • JRuby 1.5.2 in this week : 100% green Rails test runs
    • 4 demos
      • RUBOTO
        • JRuby on Android
        • Using ruboto-irb
        • Using ruboto-core
        • Using NexusOne presented by Tim Bray
        • Develop the irb suggestion for less key-typing because cell's key is quite small.
        • You can find ruboto-irb in Marlecplace
        • gem install ruboto-core
        • Build horizontal GUI and vertical GUI at once by writing DSL
        • Calling Tom's Android: 3 dollar for 1 minute because of under the international roaming, it's expensive demo :-)
      • Native C Extensions
        • Ruby SoC
        • C Extension wrapped by JNI
        • Available from JRuby 1.6
        • Manage the gem having Native C Extension from JMX
      • Win32OLE
        • Demo for operating IE8 on WindowsXP on MacOSX's VirtualBox
        • Compatible for Ruby 1.9 mode
      • Performance
        • Dynamic optimizations: -J-DJRuby.compile.dynopt=true
        • Available from JRuby 1.6
    • We continue porting C-only libs/exts to Java
    • Ad for our book : "Using JRuby"
      • Now writing 2 years, still in beta.
  • Want to use Ruby from Java? RedBridge makes it pretty easy! (JRubyKaigi)
    • by Yoko Harada
    • I'm coming from Michigan
    • I was a specialist of Java Servlet in Japan at several years ago.
    • There are many cases using Java from JRuby.
    • I this theme: using JRuby from Java
    • This demo is my first rails application on GAE
    • I'm the commiter of pure-Java porting of nokogiri
    • JRuby is just Java application
    • Most valuable case for "Write Once Run Anywhere"
    • You can write one-liner with launching from jruby.jar
    • You can give JVM command options.
      • Giving bootclasspath argument improves performance of JRuby so much
    • You can est Java application using Cucumber via JRuby
    • RegBridge: A part of JRuby
      • embed-core
      • BSF on embed-core
      • JSR223 on embed-core
    • Why I create RedBridge despite JSR223 is already there?
      • The API of JSR223 is not friendly for Ruby
      • VariableType is Global
      • At that time, JSR223's license was not redistributable
    • RedBridge Demo
      • Spawn .rb program file from Java class
      • Load Ruby class from Java class
    • Run DataMapper from another JVM language(closure) Demo
    • More about embed-core, See the JRuby Wiki!
  • Rubyist, it's time to develop your Rails app on Google App Engine (JRubyKaigi)
    • by Takeru SASAKI
    • What is GAE?
      • Google' cloud, PaaS
      • At 2008, Python available
      • At 2009, Java available
      • Scalable
      • Used in frontend of Google services
      • Datastore is BigTable
      • Mail environment is GMail
      • No need to consider server administration
    • In Java development
      • HTTP tier: Servlet
      • Datastore tier: JDO / JPA
      • cron tier, taskqueue tier and mail/xmpp tier: HTTP Handlers
    • Dashboard
      • Default UI that is good-enough and good-looking
      • fee free until 5 million page views per month
    • Things we cannot do
      • write native codes
      • multithread
      • socket
      • daemon
      • write to any filesystems
      • streaming
      • full ACID
    • Only handling simple KVS
    • How do we them on JRuby?
      • gem install google-appengine
      • dm-appengine
      • rails-appengine
      • rails-dm-appeigine
      • etc.
    • Applications what are working on Rack work also on GAE
      • Sinatra, Ramaze and so on
    • Datastore: It is one and only important matter
      • KVS
      • Entity: there are no schema
      • Query & index: manipulate many entities at once
      • EntityGroup : Automatic shareing by handling prefix of the entity
        • Same EntityGroup guarantees ACID fully
        • Another EntityGroups don't guarantees ACID
    • It's NOT compatible with ActiveRecord
      • TinyDS: ActiveRecord-looking library I develop
      • dm-appengine
      • Create your own library with low-level API by yourself
  • Ruby API is Improved Unix API
    Movie(Japanese)
    • by Akira Tanaka
    • Ruby's IO APIs are almostly base on stdio from Ruby 1.4
    • These are relied on Unix and its atomosphere
    • So Ruby belongs to Unix atomosphere
    • Ruby is useful for Unix users
    • EOF
      • feof() : befavior of C : have read EOF already?
      • Ruby's eof? : behavior of Pascal : Will next be eof?
      • In fact, feof() is almostly not required, that is written in FAQ of C
      • In fact, There are not any EOF check methods in Python
      • From Ruby 1.9, we have stopped relying stdio in somewhere
      • So we don't implement any EOF flags
    • IO.select
      • Unix's select does not consider any inner buffers of stdio.
      • Ruby 1.8's IO.select had been implemented with considering inner buffers of stdio.
      • Ruby 1.9's IO.select implements original inner buffers instead of stdio.
    • read
      • For stdio, It is difficult to read what amount we need, like streaming.
      • We can do it by IO#sysread (behavior of Perl).
      • This Goes mostly.
      • But this is not considered about NIO because that stdio is not so.
      • Ruby 1.8's IO#sysread behaves diffrently in combination of [blocking, non-blocking] and [singlethread, multithread]
        • We hesitate to use it because we have to know what library is using backgroud thread at all.
        • This behavior is more worsen than Unix' one.
        • In Ruby 1.8, the combination using IO#sysread with method using inner buffers of stdio occures error: For instance, SSL Proxy on HTTP CONNECT
      • Use IO#readpartial
        • Blocking if non-blocking IO is used while data are empty
        • Able to combine with method using inner buffers of stdio
      • IO#read_nonblocking, IO#write_nonblocking
        • Non-blocking IO, and never block while data are empty
    • find -depth
      • Unix's find command includes 'depth' option
      • Ruby's find library does not have the feature corresponding 'depth' option
      • But, Unix's 'depth' option is also wrong because of not searching by depth
      • So we keep current find behavior and oppose to 'depth' feature as searching by depth
    • We will define PID as object
  • Lightning talks

    Movie(Japanese) 01

    Movie(Japanese) 02

    Movie(Japanese) 03

    Movie(English) 04

    Movie(Japanese) 05

    Movie(Japanese) 06

    Movie(Japanese) 07

    Movie(English) 08

    Movie(Japanese) 09

    Movie(Japanese) 10

    Movie(Japanese) 11
N.B. These summaries may be imprecise.

I surprised that I can write one-liner with launching from jruby.jar:
$ java -jar /opt/local/share/java/jruby/lib/jruby.jar -e "puts 'Hello World'"
Hello World 

No comments:

Post a Comment