tag:blogger.com,1999:blog-284621792024-03-16T18:08:26.945+11:00James CrispRuby on Rails, C#, .NET, book reviews, film reviews, mind hacks, Wing Chun and the occasional personal bit.James Crisphttp://www.blogger.com/profile/00769345740252337538noreply@blogger.comBlogger3125tag:blogger.com,1999:blog-28462179.post-78135485107053740922007-06-05T19:52:00.000+10:002007-06-05T19:49:18.842+10:00Is .NET or Java dying?Are C# and .NET losing ground as <a href="http://martinfowler.com/bliki/RubyMicrosoft.html">Martin Fowler</a> suggests? Or is <a href="http://www.businessweek.com/technology/content/dec2005/tc20051213_042973.htm">Java's market share dropping</a>? What about Ruby? And what about the Australian market in particular?<br /><br />Here's what I've been able to find.<br /><br /><br /><span style="font-weight: bold;">Job Trends</span><br />Which technologies have the most demand for people?<br /><br />From <a href="http://www.indeed.com/jobtrends?q=.net%2C+java%2C+c%23%2C+ruby&l=">Indeed.com</a>, which claims to search "millions of jobs from thousands of job sites", but I suspect may have a USA focus:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj70kMOZEAAHZDAUfQOfQjaz7pXTQyU7ZYcdTzmgdVqscznGAFsKjoIEPPMYpp96t9DMnI8n1GL7hM9Zl6rxTv_SAl9X10LeUuOhJ3VHi1u4_SPXSSYPmG8hTQaIl49l9oqODOW/s1600-h/indeed.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj70kMOZEAAHZDAUfQOfQjaz7pXTQyU7ZYcdTzmgdVqscznGAFsKjoIEPPMYpp96t9DMnI8n1GL7hM9Zl6rxTv_SAl9X10LeUuOhJ3VHi1u4_SPXSSYPmG8hTQaIl49l9oqODOW/s400/indeed.png" alt="" id="BLOGGER_PHOTO_ID_5072397284993317698" border="0" /></a><br /><br /><br /><a href="http://www.vision6.com.au/ch/dx8s7z/236720/f5785zrx3.pdf">"Best Talent Index May 2007"</a> from <a href="http://best-international.com.au/">Best People Solutions</a> gives an Australian perspective:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1gnDzbdQWtUru8X_WwkhNSV5EXu4v64ABpRkJAJOfh0AWa5YW9OBH_ArCHjalDAHPyx-XCv4JuoNAmKKaBML7qVyqsG-hODssrCeyY2cu7cuGlyqDc0DoB_mADteKHCIpUfMA/s1600-h/best.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1gnDzbdQWtUru8X_WwkhNSV5EXu4v64ABpRkJAJOfh0AWa5YW9OBH_ArCHjalDAHPyx-XCv4JuoNAmKKaBML7qVyqsG-hODssrCeyY2cu7cuGlyqDc0DoB_mADteKHCIpUfMA/s400/best.JPG" alt="" id="BLOGGER_PHOTO_ID_5072435381353233234" border="0" /></a><br /><br />Here's job counts from the (largest?) primarily Australian job search site <a href="http://www.seek.com.au/">Seek</a> on 5 June 2007, 3pm (today):<br /><table class="ttable" bordercolordark="#003366" bordercolorlight="#c0c0c0" id="Table2" align="center" border="1"><tr><td><b>Keyword(s)</b></td><td><b>Number of positions found</b></td></tr><tr><td>Java</td><td>3,414</td></tr><tr><td>".NET" or "dot net"</td><td>2,744</td></tr><tr><td>"c#" or "c sharp"</td><td>1,722</td></tr><tr><td>ruby</td><td>100</td></tr></table><br />As an aside, I remember doing a search on Seek for "ruby" about 6 months ago, and getting under 20 jobs mentioning it.<br /><br /><br /><span style="font-weight: bold;">Search Engine Number of Hits</span><br /><br />Extract from the <a href="http://www.tiobe.com/tiobe_index/index.htm">TIOBE Programming Community Index for June 2007</a>:<br /><br /><table class="ttable" bordercolordark="#003366" bordercolorlight="#c0c0c0" id="Table2" align="center" border="1"><tbody><tr><th align="center"> Position<br />Jun 2007</th><th align="center" >Position<br />Jun 2006</th><th align="center" >Delta in Position</th><th align="center" >Programming Language</th><th align="center" >Ratings<br />Jun 2007</th><th align="center" >Delta<br />Jun 2006</th><th align="center" >Status</th></tr> <tr> <td align="center">1</td> <td align="center">1</td> <td align="center"><img src="http://www.tiobe.com/tiobe_index/images/Same.gif" border="0" /></td> <td><a href="http://www.tiobe.com/tiobe_index/Java.html">Java</a></td> <td align="center">20.025%</td> <td align="center">-1.10%</td> <td align="left"> A</td> </tr> <tr height="25"> <td align="center">2</td> <td align="center">2</td> <td align="center"><img src="http://www.tiobe.com/tiobe_index/images/Same.gif" border="0" /></td> <td><a href="http://www.tiobe.com/tiobe_index/C.html">C</a></td> <td align="center">15.967%</td> <td align="center">-2.29%</td> <td align="left"> A</td> </tr> <tr height="25"> <td align="center">3</td> <td align="center">3</td> <td align="center"><img src="http://www.tiobe.com/tiobe_index/images/Same.gif" border="0" /></td> <td><a href="http://www.tiobe.com/tiobe_index/C__.html">C++</a></td> <td align="center">11.118%</td> <td align="center">+0.45%</td> <td align="left"> A</td> </tr> <tr height="25"> <td align="center">4</td> <td align="center">4</td> <td align="center"><img src="http://www.tiobe.com/tiobe_index/images/Same.gif" border="0" /></td> <td><a href="http://www.tiobe.com/tiobe_index/%28Visual%29_Basic.html">(Visual) Basic</a></td> <td align="center">9.332%</td> <td align="center">-0.85%</td> <td align="left"> A</td> </tr> <tr height="25"> <td align="center">5</td> <td align="center">5</td> <td align="center"><img src="http://www.tiobe.com/tiobe_index/images/Same.gif" border="0" /></td> <td><a href="http://www.tiobe.com/tiobe_index/PHP.html">PHP</a></td> <td align="center">8.871%</td> <td align="center">-0.72%</td> <td align="left"> A</td> </tr> <tr height="25"> <td align="center">6</td> <td align="center">6</td> <td align="center"><img src="http://www.tiobe.com/tiobe_index/images/Same.gif" border="0" /></td> <td><a href="http://www.tiobe.com/tiobe_index/Perl.html">Perl</a></td> <td align="center">6.177%</td> <td align="center">+0.17%</td> <td align="left"> A</td> </tr> <tr height="25"> <td align="center">7</td> <td align="center">8</td> <td align="center"> <img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border="0" /> </td> <td><a href="http://www.tiobe.com/tiobe_index/C_.html">C#</a></td> <td align="center">3.483%</td> <td align="center">+0.25%</td> <td align="left"> A</td> </tr> <tr height="25"> <td align="center">8</td> <td align="center">7</td> <td align="center"> <img src="http://www.tiobe.com/tiobe_index/images/Down.gif" border="0" /> </td> <td><a href="http://www.tiobe.com/tiobe_index/Python.html">Python</a></td> <td align="center">3.161%</td> <td align="center">-0.30%</td> <td align="left"> A</td> </tr> <tr height="25"> <td align="center">9</td> <td align="center">10</td> <td align="center"> <img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border="0" /> </td> <td><a href="http://www.tiobe.com/tiobe_index/JavaScript.html">JavaScript</a></td> <td align="center">2.616%</td> <td align="center">+1.16%</td> <td align="left"> A</td> </tr> <tr height="25"> <td align="center">10</td> <td align="center">19</td> <td align="center"> <img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border="0" /><img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border="0" /><img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border="0" /><img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border="0" /><img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border="0" /><img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border="0" /><img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border="0" /><img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border="0" /><img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border="0" /> </td> <td><a href="http://www.tiobe.com/tiobe_index/Ruby.html">Ruby</a></td> <td align="center">2.132%</td> <td align="center">+1.65%</td> <td align="left"> A</td></tr></tbody></table><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWNLWLRaYaUcUnImv8BcB-l_tjIKmayBLr0ihdyIbcalbHRd-1dLNaCnnWougB9ljr0TZj1KvcfUhLJXAxDAsb31QfkN0Bg2lAs-MLMYVzV6cpSSobF3lB-0X_SjUnSKreUB8w/s1600-h/tpci_trends.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWNLWLRaYaUcUnImv8BcB-l_tjIKmayBLr0ihdyIbcalbHRd-1dLNaCnnWougB9ljr0TZj1KvcfUhLJXAxDAsb31QfkN0Bg2lAs-MLMYVzV6cpSSobF3lB-0X_SjUnSKreUB8w/s400/tpci_trends.png" alt="" id="BLOGGER_PHOTO_ID_5072444821691349858" border="0" /></a><br />I think this gives a good idea of web buzz, but suggest that most non-IT companies do not publish information about their projects and chosen technologies and languages on the web.<br /><br /><br /><span style="font-weight: bold;">Conclusion</span><br />The data collected suggests that:<br /><ul><li>Both .NET and Java are major players in the job market with thousands of positions advertised, implying wide industry adoption of both.</li><li>Neither .NET nor Java seem to be undergoing any significant decline in jobs.<br /></li><li>Java has much more information about it on the internet, although .NET is slowing gaining ground and Java slowly losing it.<br /></li><li>Ruby is comparatively tiny but growing rapidly in terms of jobs and information on the internet.<br /></li></ul><br /><br /><span style="font-weight:bold;">Thanks</span><br />Thanks to <a href="http://jchyip.blogspot.com/">Jason Yip</a> and <a href="http://binkysilhouette.blogspot.com/">Suzi Edwards</a> for their help finding/sourcing information.James Crisphttp://www.blogger.com/profile/00769345740252337538noreply@blogger.com146tag:blogger.com,1999:blog-28462179.post-32530037924732969822007-02-27T15:59:00.000+11:002007-02-27T22:54:23.127+11:00JRuby SetupRecently got a JRuby/Rails system with Java integration up and running. Unfortunately, it took quite a few hours, as most of the docs and code you find through Google are out of date.<br /><br />If you use JRuby 0.9.2 from Codehaus, you will get an error similar to this when you try to access a rails application:<br /><br />[2007-02-26 17:54:59] INFO WEBrick::HTTPServer start: pid=22540508 port=3000<br /><ArgumentError: Anonymous modules have no name to be referenced by><br />["c:/jruby-0.9.2/lib/ruby/gems/1.8/gems/activesupport-1.4.1/lib/<br />active_support/dependencies.rb:402:in `to_constant_name'...<br /><br />If you're stuck in this rut, fear not! <a href="http://blog.nicksieger.com/">Nick Sieger</a> has written <a href="http://trac.caldersphere.net/projects/main/wiki/JRubyQuickStart">very helpful instructions</a> which outline how to get and set up the latest development snapshot. Please note that in addition to the instructions, you need to set your JRUBY_HOME environment variable. Under Windows, do something like this:<br /><br />set JRUBY_HOME=c:\jruby<br /><br />If you'd prefer not to use the snapshot, you can get the source code through subversion from: <br /><br /><a href="http://svn.codehaus.org/jruby/trunk/jruby">http://svn.codehaus.org/jruby/trunk/jruby</a><br /><br />but at the time of this post, you need to run svn checkout or update with "--ignore-externals" to avoid the following error:<br /><br />Error: URL 'svn://rubyforge.org/var/svn/bfts/bfts/trunk' doesn't exist<br /><br />Many thanks to <a href="http://blog.nicksieger.com/">Nick Sieger</a> and the <a href="http://archive.jruby.codehaus.org/user">JRuby user mailing list</a> for their help.James Crisphttp://www.blogger.com/profile/00769345740252337538noreply@blogger.com25tag:blogger.com,1999:blog-28462179.post-84724766647007173302007-02-25T21:59:00.000+11:002007-02-25T22:36:48.787+11:00Using floating point variables to represent money => not a good idea!I was reading through some code the other day and was surprised to find that it was using doubles to represent dollar amounts. Reason for the alarm bells is that doubles and floats cannot accurately represent many decimal fractions (<span class="blsp-spelling-error" id="SPELLING_ERROR_0">eg</span>, 0.1), since doubles and floats internally work with powers of 2 rather than powers of 10. These inaccuracies are likely to lead to significant errors, especially when performing arithmetic (<span class="blsp-spelling-error" id="SPELLING_ERROR_1">eg</span>, adding up a table of dollar amounts). See this <a href="http://www2.hursley.ibm.com/decimal/decifaq1.html#inexact">IBM article</a> for a more <span class="blsp-spelling-corrected" id="SPELLING_ERROR_2">in depth</span> explanation and examples. The solution is to use types that work with powers of ten internally. In C#, you can use 'decimal' and in Java or Ruby, '<span class="blsp-spelling-error" id="SPELLING_ERROR_3">BigDecimal</span>', to avoid these problems.James Crisphttp://www.blogger.com/profile/00769345740252337538noreply@blogger.com11