79
I Use This!
High Activity

News

Analyzed about 11 hours ago. based on code collected about 11 hours ago.
Posted about 18 years ago by Charles Oliver Nutter
$ jruby -J-Djruby.compat.version=ruby1_9 -vruby 1.9.1 (2007-11-29 rev 4842) [i386-jruby1.1b1]
Posted about 18 years ago by Charles Oliver Nutter
WiiHear - Streaming audio for the Wii. Very cool. It was a little spotty for me, but your results may be better. And in related news: Super Mario Galaxy is the best Mario ever. I'll post a review later.Easy(?) JRuby bugs from Rubinius specs - ... [More] Vladimir Sizikov has been contributing new/fixed specs to Rubinius while running all the specs against JRuby. He's reported several new bugs as a result, which could potentially be easy API edge cases. Give them a shot. I'll try to post an "easy bug round-up" soon too.File IO in Different Languages - A quick comparison of (very) basic file I/O in TCL, Python, PHP, Ruby, Groovy, Scala, and JavaScript. The poster then goes on to compare startup times for the Java implementations of these languages, showing an area JRuby has some issues (slowest startup time, at around 1.6s). We know about the problem, and hopefully NailGun plus other improvements in the future will help. Largely, it's a JVM issue; classes are slow to load and verify, and we create literally hundreds of tiny classes.Minneapolis - I live in Richfield, an "urban suburb" of Minneapolis (often dubbed Minneapolis Junior), but I generally just say I'm from Minneapolis, since most people recognize it. The Wikipedia article on Minneapolis is excellent (as is the one on the Twin Cities area). A few choice facts:Minneapolis has more per-capita theater seats than any US city other than New YorkThe Twin Cities is one of the warmest places in Minnesota, with an average annual temperature of 45.4 ºF. Monthly average daily high temperatures range from 21.9 °F (-5.6 °C) in January to 83.3 °F (28.5 °C) in July; the average daily minimum temperatures for the two months are 4.3 °F (-15.4 °C) and 63.0 °F (17 °C) respectively. So it gets cold in the winter and hot in the summer, not too hot nor too cold. It's nice to have four seasons.Every home in Minneapolis is no more than six blocks away from a wooded park. In the summer, Minneapolis from the air looks like a bunch of skyscrapers surrounded by a bed of trees.It's a nice place to live. I'd be hard pressed to find somewhere better.Oniguruma Regular Expression Syntax version 5.6 - This is the library Marcin ported. I believe all of this is supported in Joni. Of course we wrap it so normal Ruby regular expressions work exactly as they would under Ruby 1.8, but Marcin will release Joni as a standalone library too.Dr. Nic Installs Mingle with Capistrano - A nice walkthrough.JavaPolis 2007 - I will be attending and co-presenting a JRuby/NetBeans tutorial with Brian Leonard and a JRuby/Rails session with Ola Bini. Only two weeks and I'll be in the land of beer, chocolate, and diamonds.acts_as_conference 2007 - I will be attending and presenting something JRubyish and Railsy. Perhaps my last Rails presentation before handing such things off to people who actually know Rails? This conference also wins my vote for "most cumbersome title".RailsConf 2008 CFP - I haven't decided if I plan to present anything this year. There are many, many other folks doing real-world JRuby on Rails work that could probably do a better job.FOSDEM 2008 - I have been invited and will be attending. Back to the land of beer, chocolate and diamonds. [Less]
Posted about 18 years ago by Charles Oliver Nutter
As Ola reported earlier today, we've merged Joni, Marcin Mielczynski's port of Oniguruma, to JRuby trunk. Here's the description from the Oniguruma home page:Oniguruma is a regular expressions library.The characteristics of this library is that ... [More] different character encodingfor every regular expression object can be specified.The benefit for us is avoiding the encode/decode we previously had to do for every regular expression match, since Ruby uses byte[]-based strings and all Java regular expression engines work with char[]. You can imagine the overhead all that array churn introduced.After running through a series of basic optimizations, most of the key expressions we worried about were performing as well as or much better than JRegex, so Ola went through with the conversion over the past couple days. Marcin is continuing to work on various optimizations, but both Ola and I have been playing with the new code. And it's looking great.You may remember I reported recently about how the regexp bottleneck impacted XML parsing with REXML. Here's the numbers run against JRuby immediately before merging Joni:read content from stream, no DOM3.362000 0.000000 3.362000 ( 3.362000)1.232000 0.000000 1.232000 ( 1.232000)0.887000 0.000000 0.887000 ( 0.887000)1.009000 0.000000 1.009000 ( 1.010000)0.801000 0.000000 0.801000 ( 0.801000)read content once, no DOM9.869000 0.000000 9.869000 ( 9.869000)9.779000 0.000000 9.779000 ( 9.779000)9.786000 0.000000 9.786000 ( 9.786000)9.655000 0.000000 9.655000 ( 9.655000)9.601000 0.000000 9.601000 ( 9.601000)read content from stream, build DOM1.368000 0.000000 1.368000 ( 1.368000)1.297000 0.000000 1.297000 ( 1.297000)1.192000 0.000000 1.192000 ( 1.192000)1.131000 0.000000 1.131000 ( 1.131000)0.812000 0.000000 0.812000 ( 0.812000)read content once, build DOM10.595000 0.000000 10.595000 ( 10.595000)9.489000 0.000000 9.489000 ( 9.488000)9.947000 0.000000 9.947000 ( 9.947000)9.821000 0.000000 9.821000 ( 9.821000)9.414000 0.000000 9.414000 ( 9.415000)And here's the performance numbers today, with Joni:read content from stream, no DOM2.309000 0.000000 2.309000 ( 2.308000)1.217000 0.000000 1.217000 ( 1.217000)0.776000 0.000000 0.776000 ( 0.776000)0.825000 0.000000 0.825000 ( 0.825000)0.637000 0.000000 0.637000 ( 0.637000)read content once, no DOM0.370000 0.000000 0.370000 ( 0.369000)0.415000 0.000000 0.415000 ( 0.415000)0.288000 0.000000 0.288000 ( 0.288000)0.260000 0.000000 0.260000 ( 0.260000)0.254000 0.000000 0.254000 ( 0.254000)read content from stream, build DOM1.455000 0.000000 1.455000 ( 1.455000)0.916000 0.000000 0.916000 ( 0.916000)0.887000 0.000000 0.887000 ( 0.888000)0.827000 0.000000 0.827000 ( 0.827000)0.607000 0.000000 0.607000 ( 0.607000)read content once, build DOM0.630000 0.000000 0.630000 ( 0.630000)0.664000 0.000000 0.664000 ( 0.664000)0.680000 0.000000 0.680000 ( 0.680000)0.553000 0.000000 0.553000 ( 0.553000)0.650000 0.000000 0.650000 ( 0.650000)Marcin's being modest about the work, but we're all absolutely amazed by it.So finally the last really gigantic performance bottleneck in JRuby is gone, and it appears that JRuby's slow regexp era has come to a close. Next targets: the remaining issues with IO and Java integration performance. [Less]
Posted about 18 years ago by Ola Bini
Friends! ThoughtWorks is hiring Ruby developers all over the world, but right now San Francisco is the hottest place to be. So if you're located in the Bay Area and want to work with Ruby and Rails, don't hesitate to make contact.The time since I ... [More] joined ThoughtWorks about 6 months ago have been the best of my life, and of all our offices around the world, I like the San Francisco one best. ThoughtWorks is really the home for people passionate about development and people who love Ruby.If you have been following my blog, you know about Oracle Mix and other interesting things we have been doing out of the SF office. And there's more to come - exciting times!Could ThoughtWorks in San Francisco be your home? Take contact with recruiting here: http://www.thoughtworks.com/work-for-us/apply-online.html, or email me directly and I'll see to it that your information gets to the right place! [Less]
Posted about 18 years ago by Ola Bini
This is a glorious day! Joni (Marcin's incredible Java port of the Oniguruma regexp engine) has been merged to JRuby trunk. It seems to work really well right now.I did some initial testing, and the Petstore numbers are more or less the same as ... [More] before, actually. This is explained by the fact that I did the integration quite quick and tried to get stuff working without concern for performance. We will go through the implementations and tune them for Joni soon, and this will absolutely give JRuby a valuable boost.Marcin is also continuing to improve Joni performance, so over all this is a very nice approach.Happy merge day! [Less]
Posted about 18 years ago by Charles Oliver Nutter
I just stumbled across this little gem today:Landon Fuller's JDK 6 Port for OS XWho Landon Fuller is I don't know. But I find it incredibly impressive that he's managed to get the base JDK 6 ported to OS X and working. Talk about showing the value of ... [More] an open-source JDK...Landon Fuller FTW. Apple, are you hiring? Perhaps this guy can kick the Apple JDK process in the ass.So naturally when I'm confronted with a final JDK 6 release for OS X one thing immediately springs to mind: performance.We'd always suspected that the early preview version of JDK 6 on OS X was not showing us the true awesome performance we could expect from a final version.We were right.So I'll give you two sets of numbers, one that's specious and unreliable and the other that's a more real-world test.fib numbersYes, good old fib. A constant in benchmarking. It shows practically nothing, and yet people use it to demonstrate perf. And in the case of Ruby 1.9, they've specifically optimized for integer-math-heavy benchmarks like this.Ruby 1.9: 0.400000 0.000000 0.400000 ( 0.413737) 0.420000 0.010000 0.430000 ( 0.421622) 0.400000 0.000000 0.400000 ( 0.411591) 0.410000 0.000000 0.410000 ( 0.411593) 0.400000 0.000000 0.400000 ( 0.410080) 0.410000 0.000000 0.410000 ( 0.408836) 0.400000 0.000000 0.400000 ( 0.408572) 0.410000 0.000000 0.410000 ( 0.408114) 0.400000 0.000000 0.400000 ( 0.410374) 0.400000 0.000000 0.400000 ( 0.413096)Very nice numbers, especially considering Ruby 1.8 benchmarks at about 1.7s on my system. Ruby 1.9 contains several optimizations for integer math, including the use of "tagged integers" for Fixnum values (saving object costs) and fast math opcodes in the 1.9 bytecode specification (avoiding method dispatch). JRuby does neither of these, representing Fixnums as a normal Java object containing a wrapped Long and dispatching as normal for all numeric operations.JRuby trunk: 0.783000 0.000000 0.783000 ( 0.783000) 0.510000 0.000000 0.510000 ( 0.510000) 0.510000 0.000000 0.510000 ( 0.510000) 0.506000 0.000000 0.506000 ( 0.506000) 0.505000 0.000000 0.505000 ( 0.504000) 0.507000 0.000000 0.507000 ( 0.507000) 0.510000 0.000000 0.510000 ( 0.510000) 0.507000 0.000000 0.507000 ( 0.507000) 0.508000 0.000000 0.508000 ( 0.508000) 0.510000 0.000000 0.510000 ( 0.510000)This is improved from numbers in the 0.68s range under the Apple JDK 6 preview. Pretty damn hot, if you ask me. I love being able to sit back and do nothing while performance numbers improve. It's a nice change from 16 hour days.Anyway, back to performance. JRuby also supports an experimental frameless execution mode that omits allocating and initializing per-call frame information. In Ruby, frames are used for such things as holding the current method visibility, the current "self", the arguments and block passed to a method, and so on. But in many cases, it's safe to omit it entirely. I haven't got it running 100% safe in JRuby yet, and probably won't before 1.1 final comes out...but it's on the horizon. So then...numbers.JRuby trunk, frameless execution: 0.627000 0.000000 0.627000 ( 0.627000) 0.409000 0.000000 0.409000 ( 0.409000) 0.401000 0.000000 0.401000 ( 0.401000) 0.402000 0.000000 0.402000 ( 0.402000) 0.403000 0.000000 0.403000 ( 0.403000) 0.403000 0.000000 0.403000 ( 0.403000) 0.404000 0.000000 0.404000 ( 0.405000) 0.401000 0.000000 0.401000 ( 0.401000) 0.403000 0.000000 0.403000 ( 0.403000) 0.405000 0.000000 0.405000 ( 0.405000)Hello hello? What do we have here? JRuby actually executing fib faster than an optimized Ruby 1.9? Can it truly be?Pardon my snarkiness, but we never thought we'd be able to match Ruby 1.9's integer math performance without seriously stripping down Fixnum and introducing fast math operations into the compiler. I guess we were wrong.M. Ed Borasky's MatrixBenchmarkI like Borasky's matrix benchmark because it's a non-trivial piece of code, and pulls in a Ruby standard library (matrix.rb) as well. It basically inverts a matrix of a particular size and multiplies the original by the inverse. I show here numbers for a 64x64 matrix, since it's long enough to show the true benefit of JRuby but short enough I don't get bored waiting.Ruby 1.9:Hilbert matrix of dimension 64 times its inverse = identity? true21.630000 0.110000 21.740000 ( 21.879126)JRuby trunk:Hilbert matrix of dimension 64 times its inverse = identity? true14.780000 0.000000 14.780000 ( 14.780000)This is down from 16-17s under the Apple JDK 6 preview and a clean 25% faster than Ruby 1.9.So what have we learned today?Sun's JDK 6 provides frigging awesome performanceApple users are crippled without a JDK 6 port. Apple, I hope you're paying attention.Landon Fuller is my hero of the week. I know Landon will just point at the excellent work to port JDK 6 to FreeBSD and OpenBSD...but give yourself some credit, you did what none of the other Leopard whiners did.JRuby rocksNote: You have to be a Java Research License licensee to legally download the binary or source versions of Landon's port. That or complain to Apple about some dude making a working port before they did. Landon mentions on his blog that he plans to contribute this work to OpenJDK soon...which would quickly result in a buildable GPLed JDK for OS X. Awesome. [Less]
Posted about 18 years ago by Ola Bini
It's been some time since I wrote about what's happening in JRuby trunk right now, and what we're working on. The reason is I've been really boring. All my time I've spent on Regular Expressions and the REJ implementation. Well, that's ended now. ... [More] After Marcin got the Oniguruma port close enough, we are both focusing on that instead. REJ's implementation had some fundamental problems that would make it really hard to get better performance. In this regard, Joni is a better implementation. Also, Marcin is incredible at optimization so if everything goes as planned, we're looking at better general Regular Expression performance, better compatibility and a much more competent implementation.And boy am I bored by this now. =) I'd really like to get back to fixing bugs and get JRuby ready for the next release. That might happen soon, though - I've spent the weekend getting Joni integrated with JRuby inside a branch and today reached the goal of getting everything to compile. Also, easier programs run, like jirb. Our test suite fails, though, so there are still things to do. But getting everything compiling and ditching JRegex is a major point on the way of replacing JRegex in JRuby core. It shouldn't be too far off, and I think it will be fair to say we will have Joni in JRuby 1.1. Actually, 1.1 is really going to be an awesome release. [Less]
Posted about 18 years ago by Charles Oliver Nutter
I have a tendency to post intentionally inflammatory posts that usually end up evenly divided between "yea" and "nay". But this time, I've got Rich Manalang's post from the JRuby on Rails front lines to back me up.Rich is one of the primaries (Rich: ... [More] THE primary?) behind Oracle's new Mix site, the first highly-visible public site based on JRuby on Rails. And after the experience he's convinced that JRuby is "the best way" to deploy Rails.Read the whole article, but I think Rich's final paragraph sums it up pretty well:This was an amazing project to be a part of. And one thing I’ll say is that for anyone working in a Java EE environment where you have to use the stack that’s there, the future is bright and it’s all because of jRuby, Rails, and the speed and agility at which you can build applications on that framework. I’m convinced that jRuby is [the] best way to deploy a Rails app if you need performance and flexibility. My prediction: next year will be the year for jRuby’s rise into the mainstream. [Less]
Posted about 18 years ago by Charles Oliver Nutter
Roy Hayun presented his "JRuby on ME" talk this past JavaOne and got a pretty solid response. He ported a pre-1.0 JRuby to CDC by incrementally stripping out libraries and functionality that couldn't be supported. He succeeded, and yesterday ... [More] delivered to us a buildable version of his JRubME 0.1 (that name was a typo on his original JavaOne submission...but the missing 'y' produced a comically good name).In the JRuby download "research" area, you can find the results of his work plus some docs and a short presentation on JRubyME. As near as I can tell he based it on JRuby 0.9.8. The same work could probably be done to produce a stripped version of current JRuby, and with a bit more work we could probably tweak and reconfigure the source to support ME execution as a normal build target. Both are exercises for you all until there's more time (or Ruby on ME becomes a primary goal rather than performance and compatibility on SE :) )There you go! You wanted JRuby on ME, now you have a damn good start! Run with it! [Less]
Posted about 18 years ago by Ola Bini
Rich Manalang just posted a very nice entry on the Oracle AppsLab about the technology behind Oracle Mix, how we developed it and so on. Read it here.