<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-22223302</id><updated>2024-10-04T20:59:20.883-05:00</updated><category term="java"/><category term="jini"/><category term="osgi"/><category term="scala"/><category term="spring"/><category term="x10"/><category term="AJAX security upload fileupload javascript"/><category term="android"/><category term="bill-venners"/><category term="bruce-eckel"/><category term="classloader"/><category term="eben-moglen"/><category term="felix"/><category term="functional-programming"/><category term="get-smart"/><category term="getter"/><category term="gpl"/><category term="gpl-v3"/><category term="gplv3"/><category term="grid"/><category term="hpc"/><category term="jean-philippe-retaillé"/><category term="julien-dubois"/><category term="lex-spoon"/><category term="license"/><category term="linus-torvalds"/><category term="martin-odersky"/><category term="maxwell-smart"/><category term="mayflower"/><category term="multi-core"/><category term="newton"/><category term="open-source"/><category term="otug"/><category term="private[this] scala object-private access-modifier get-smart cone-of-silence"/><category term="property"/><category term="richard-stallman"/><category term="rod-johnson"/><category term="sapna-kumar"/><category term="sca"/><category term="scala-user-group"/><category term="setter"/><category term="shoe-phone"/><category term="spring modules"/><category term="sun"/><category term="ted-neward"/><category term="thierry-templier"/><title type='text'>Open Component</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://opencomponent.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22223302/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://opencomponent.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Casey Bowman</name><uri>http://www.blogger.com/profile/06004964294568558404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqZoTNLkKQvR_DOuKUtee2b2_vFFLeLJ9mHJdzyhNOFjpt-yq7P9viuZ9xkqlN3htF8UNdmXhrbPN8v6_9QB9dz4AbOTFZiby0uW0LCI6v3zzl5jkqpPuydHxK3yEXoVA/s1600/*'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-22223302.post-6267096882903919692</id><published>2008-05-12T15:14:00.016-05:00</published><updated>2008-05-23T15:49:46.400-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="get-smart"/><category scheme="http://www.blogger.com/atom/ns#" term="getter"/><category scheme="http://www.blogger.com/atom/ns#" term="maxwell-smart"/><category scheme="http://www.blogger.com/atom/ns#" term="property"/><category scheme="http://www.blogger.com/atom/ns#" term="scala"/><category scheme="http://www.blogger.com/atom/ns#" term="setter"/><category scheme="http://www.blogger.com/atom/ns#" term="shoe-phone"/><title type='text'>Get smart with properties in Scala</title><content type='html'>Properties are easy to declare in Scala&lt;blockquote&gt;&lt;code&gt;class ShoePhone&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var vibrateOn = false&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var volume = 8&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;What does this really mean?&lt;br /&gt;&lt;br /&gt;Here is the same code, written in a more cluttered way, illustrating the setters and getters which are automatically generated above&lt;blockquote&gt;&lt;code&gt;class ShoePhone&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private[this] var _vibrateOn: Boolean = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private[this] var _volume: Int = 8;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def vibrateOn: Boolean = _vibrateOn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def volume: Int = _volume;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def vibrateOn_=(on: Boolean)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_vibrateOn = on;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def volume_=(vol: Int)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_volume = vol;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/code&gt;&lt;/blockquote&gt;Here the private fields are given names with an added underscore prefix.  These names could be anything.  &lt;span style=&quot;font-style: italic;&quot;&gt;This is just a convention I&#39;d like to see.&lt;/span&gt;  I don&#39;t like seeing a lot of one-off names (such as the ones I used for the setter method parameters, &lt;code&gt;on&lt;/code&gt; and &lt;code&gt;vol&lt;/code&gt;).  If there is a simple way to eliminate the one-off names akin to what one finds in the Java idiom &lt;blockquote&gt;&lt;code&gt;this.volume=volume;&lt;/code&gt;&lt;/blockquote&gt;please let me know.&lt;br /&gt;&lt;br /&gt;The getter methods are defined without parentheses so they appear in code just as if they were fields.  See &lt;a href=&quot;http://opencomponent.blogspot.com/2008/04/gaga-over-scala.html&quot;&gt;previous post&lt;/a&gt; on the Uniform Access principle.&lt;br /&gt;&lt;br /&gt;The setter methods are defined by adding &lt;blockquote&gt;&lt;code&gt;_=&lt;/code&gt;&lt;/blockquote&gt;  This suffix creates the method used when a variable is assigned using &lt;blockquote&gt;&lt;code&gt;=&lt;/code&gt;&lt;/blockquote&gt;  Say we have a ShoePhone instance &lt;code&gt;shoePhone&lt;/code&gt; and set its volume&lt;blockquote&gt;&lt;code&gt;shoePhone.volume = 0&lt;/code&gt;&lt;/blockquote&gt;You could write to the same effect&lt;blockquote&gt;&lt;code&gt;shoePhone.volume_=(0)&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;For an explanation of the access modifier &lt;code&gt;private[this]&lt;/code&gt; see &lt;a href=&quot;http://opencomponent.blogspot.com/2008/05/scala-cone-of-silence.html&quot;&gt;The Scala cone of silence&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;embed src=&quot;http://www.brightcove.tv/playerswf&quot; bgcolor=&quot;#FFFFFF&quot; flashvars=&quot;initVideoId=471470195&amp;amp;servicesURL=http://www.brightcove.tv&amp;amp;viewerSecureGatewayURL=https://www.brightcove.tv&amp;amp;cdnURL=http://admin.brightcove.com&amp;amp;autoStart=false&quot; base=&quot;http://admin.brightcove.com&quot; name=&quot;bcPlayer&quot; allowfullscreen=&quot;true&quot; allowscriptaccess=&quot;always&quot; seamlesstabbing=&quot;false&quot; type=&quot;application/x-shockwave-flash&quot; swliveconnect=&quot;true&quot; pluginspage=&quot;http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash&quot; height=&quot;339&quot; width=&quot;400&quot;&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;----------------&lt;br /&gt;Now playing: &lt;a href=&quot;http://www.foxytunes.com/artist/yeasayer/track/2080&quot;&gt;Yeasayer - 2080&lt;/a&gt;&lt;br /&gt;via &lt;a href=&quot;http://www.foxytunes.com/signatunes/&quot;&gt;FoxyTunes&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:78%;&quot;&gt;Version 1.1 (correction)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Update (May 22, 2008):&lt;/span&gt;  Using the Java Class File disassembler javap on the ShoePhone class file, you can see what Scala does behind the scenes in the Java bytecode&lt;blockquote&gt;&lt;code&gt;javap -private ShoePhone&lt;br /&gt;&lt;br /&gt;Compiled from &quot;ShoePhone.scala&quot;&lt;br /&gt;public class com.control.equipment.ShoePhone extends java.lang.Object implements scala.ScalaObject{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private int volume;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private boolean vibrateOn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public com.control.equipment.ShoePhone();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void volume_$eq(int);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public int volume();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void vibrateOn_$eq(boolean);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public boolean vibrateOn();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public int $tag();&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;There are private fields and public getter methods which use the same name.  The setter method adds the suffix&amp;nbsp; &lt;code&gt;_=&lt;/code&gt;&amp;nbsp; cryptically rewritten as&amp;nbsp; &lt;code&gt;_$eq&lt;/code&gt;&amp;nbsp; to comply with &lt;a href=&quot;http://java.sun.com/docs/books/tutorial/java/nutsandbolts/variables.html&quot;&gt;Java naming rules&lt;/a&gt;.  &lt;br /&gt;&lt;br /&gt;If your setter method needs to do something special, you can always define it explicitly&lt;blockquote&gt;&lt;code&gt;class ShoePhone&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var _vibrateOn = false&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private[this] var _volume = 8&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def volume = _volume&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def volume_=(__volume: Int)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;assert(__volume&gt;=0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;assert(__volume&lt;=8)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_volume = __volume;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/code&gt;&lt;/blockquote&gt;where I&#39;ve used an underscore prefix to distinguish the private variable from the public getter method, again to avoid one-off names.  I&#39;ve used two underscores for the explicit setter method parameter.  The use of underscores at the beginning of names is discouraged in Java.  If anyone knows a better, less discouraged, more aesthetic way to do this, &lt;span style=&quot;font-style:italic;&quot;&gt;please&lt;/span&gt; let me know.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Update (May 23, 2008):&lt;/span&gt;  If you need your ShoePhone available as a JavaBean, it&#39;s easy.  Just use the annotation &lt;code&gt;@scala.reflect.BeanProperty&lt;/code&gt;.  &lt;blockquote&gt;&lt;code&gt;class ShoePhone&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@scala.reflect.BeanProperty&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var vibrateOn = false&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@scala.reflect.BeanProperty&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var volume = 8&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;The setters and getters will then be generated automatically for you by the Scala compiler.&lt;blockquote&gt;&lt;code&gt;javap ShoePhone&lt;br /&gt;&lt;br /&gt;Compiled from &quot;ShoePhone.scala&quot;&lt;br /&gt;public class com.control.equipment.ShoePhone extends java.lang.Object implements scala.ScalaObject{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public com.control.equipment.ShoePhone();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void setVolume(int);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public int getVolume();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void setVibrateOn(boolean);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public boolean isVibrateOn();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void volume_$eq(int);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public int volume();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void vibrateOn_$eq(boolean);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public boolean vibrateOn();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public int $tag();&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomponent.blogspot.com/feeds/6267096882903919692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/22223302/6267096882903919692' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22223302/posts/default/6267096882903919692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22223302/posts/default/6267096882903919692'/><link rel='alternate' type='text/html' href='http://opencomponent.blogspot.com/2008/05/get-smart-with-properties-in-scala.html' title='Get smart with properties in Scala'/><author><name>Casey Bowman</name><uri>http://www.blogger.com/profile/06004964294568558404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqZoTNLkKQvR_DOuKUtee2b2_vFFLeLJ9mHJdzyhNOFjpt-yq7P9viuZ9xkqlN3htF8UNdmXhrbPN8v6_9QB9dz4AbOTFZiby0uW0LCI6v3zzl5jkqpPuydHxK3yEXoVA/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22223302.post-7037682177382026516</id><published>2008-05-09T18:01:00.009-05:00</published><updated>2008-06-24T21:20:54.190-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="private[this] scala object-private access-modifier get-smart cone-of-silence"/><title type='text'>The Scala cone of silence</title><content type='html'>I&#39;ve been waiting so long for this.  Now with Scala you can restrict access to your classes by package name, allowing only a package &lt;span style=&quot;font-style: italic;&quot;&gt;and its nested packages&lt;/span&gt; access.  Say you had the packages,&lt;blockquote&gt;&lt;code&gt;com.control&lt;/code&gt;&lt;br /&gt;&lt;code&gt;com.control.agent&lt;/code&gt;&lt;br /&gt;&lt;code&gt;com.control.agent.special&lt;/code&gt;&lt;/blockquote&gt;Then the access modifier &lt;code&gt;private[agent]&lt;/code&gt; would limit access to the last two packages only.&lt;br /&gt;&lt;br /&gt;You can also define members as &lt;span style=&quot;font-style: italic;&quot;&gt;object-private&lt;/span&gt; with the access modifier &lt;code&gt;private[this]&lt;/code&gt;.  This restricts access to the specific instance.  In Java, other instances of the same class can access private fields.  Did you realize that?&lt;br /&gt;&lt;br /&gt;What a wonderful &lt;span style=&quot;font-style:italic;&quot;&gt;cone of silence&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;&lt;object height=&quot;334&quot; width=&quot;400&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/uqcSWI6Ppks&amp;amp;hl=en&quot;&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/uqcSWI6Ppks&amp;amp;hl=en&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; height=&quot;334&quot; width=&quot;400&quot;&gt;&lt;/embed&gt;&lt;/object&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomponent.blogspot.com/feeds/7037682177382026516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/22223302/7037682177382026516' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22223302/posts/default/7037682177382026516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22223302/posts/default/7037682177382026516'/><link rel='alternate' type='text/html' href='http://opencomponent.blogspot.com/2008/05/scala-cone-of-silence.html' title='The Scala cone of silence'/><author><name>Casey Bowman</name><uri>http://www.blogger.com/profile/06004964294568558404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqZoTNLkKQvR_DOuKUtee2b2_vFFLeLJ9mHJdzyhNOFjpt-yq7P9viuZ9xkqlN3htF8UNdmXhrbPN8v6_9QB9dz4AbOTFZiby0uW0LCI6v3zzl5jkqpPuydHxK3yEXoVA/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22223302.post-3697610217547046198</id><published>2008-04-02T15:39:00.024-05:00</published><updated>2008-05-13T20:41:09.711-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bill-venners"/><category scheme="http://www.blogger.com/atom/ns#" term="bruce-eckel"/><category scheme="http://www.blogger.com/atom/ns#" term="functional-programming"/><category scheme="http://www.blogger.com/atom/ns#" term="lex-spoon"/><category scheme="http://www.blogger.com/atom/ns#" term="martin-odersky"/><category scheme="http://www.blogger.com/atom/ns#" term="otug"/><category scheme="http://www.blogger.com/atom/ns#" term="scala"/><category scheme="http://www.blogger.com/atom/ns#" term="scala-user-group"/><category scheme="http://www.blogger.com/atom/ns#" term="ted-neward"/><category scheme="http://www.blogger.com/atom/ns#" term="x10"/><title type='text'>Gaga over Scala</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.artima.com/shop/forsale&quot;&gt;&lt;img style=&quot;border-color: white; margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 100px;&quot; src=&quot;http://www.artima.com/images/scalafrontcover.jpg&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.scala-lang.org/&quot;&gt;Scala&lt;/a&gt;, scala, scala....&lt;br /&gt;&lt;br /&gt;I&#39;ll try to comment more once I collect myself, if I ever do.&lt;br /&gt;&lt;br /&gt;Scala blends functional and object-oriented programming into one language, which runs on a JVM, interoperably with Java.  Why functional programming (FP)?  What&#39;s functional programming?  Here&#39;s an interesting summary - &lt;a href=&quot;http://www.defmacro.org/ramblings/fp.html&quot;&gt;Functional Programming for the Rest of Us&lt;/a&gt;.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;Update (Apr 9, 2008, 10:40 am Central):&lt;/span&gt; Here&#39;s an excellent audio overview by one of the authors of the book &lt;a href=&quot;http://www.artima.com/shop/forsale&quot;&gt;Programming in Scala&lt;/a&gt; (whom I had the privilege of mountain biking with in August 2001 at Crested Butte, Colorado, while attending a week-long seminar on Design Patterns he and Bruce Eckel taught) This introduction, which I just listened to, includes most all the key points I mentioned to a friend of mine in an enthusiastic conversation yesterday evening.  Venners captures much of the unrest in the Java community that I have sensed over the past several years.  He captures well my own hesitation to jump into Ruby, Python, and Groovy as solutions to this angst and my immediate determination that Scala is &lt;span style=&quot;font-style: italic;&quot;&gt;it&lt;/span&gt;, the language we&#39;ve been waiting for - &lt;a href=&quot;http://www.javaworld.com/podcasts/jtech/2007/120607jtech007.html&quot;&gt;Bill Venners on the rise of Scala&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Update (Apr 28, 2008, 2:10 pm Central):&lt;/span&gt;  I&#39;ve read &lt;span style=&quot;font-style: italic;&quot;&gt;Programming in Scala&lt;/span&gt; cover-to-cover, and I&#39;m still gaga.&lt;br /&gt;&lt;br /&gt;My guess is that Scala is &quot;it&quot;, the language that will supercede Java, more speedily if it markets itself like Spring, by putting forward the Actor library as the entry point and not forcing people to adopt everything all at once, given its interoperability with Java.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://x10.sourceforge.net/x10home.shtml&quot;&gt;X10&lt;/a&gt; is also &lt;a href=&quot;http://opencomponent.blogspot.com/2007/11/ground-is-shaking-beneath-java.html&quot;&gt;interesting&lt;/a&gt;.  Might Scala adopt x10&#39;s notion of a clock?  Perhaps there&#39;ll be some sort of interoperability between X10 and Scala, or even a hybrid.  I imagine Lex Spoon has some things to say on this matter, having been involved with both projects.  Indeed, I see from &lt;a href=&quot;http://www.lexspoon.org/spoon-vita.pdf&quot;&gt;Spoon&#39;s CV&lt;/a&gt; that he &quot;assisted with the ongoing design of X10, a language for high-performance computing, both in its pure form and &lt;span style=&quot;font-weight: bold;&quot;&gt;with a Scala-like front-end&lt;/span&gt;.&quot;&lt;br /&gt;&lt;br /&gt;I have questions about Scala&#39;s classloading and security.  Do they differ from Java&#39;s?&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Update (May 9, 2008, 1:50 pm Central):&lt;/span&gt;  Odersky, Spoon, and Venners published a new version of their Pre-Print edition this last Sunday, May 4.  And what do you know?  &lt;span style=&quot;font-style: italic;&quot;&gt;They added a new section on &lt;span style=&quot;font-weight: bold;&quot;&gt;clocks &lt;/span&gt;in chapter 30 &quot;Actors and Concurrency&quot;. &lt;/span&gt;  I&#39;d like to think one of the comments I had submitted to them online sparked this addition, but I don&#39;t know.  I read it yesterday.  It&#39;s great.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Update (May 9, 2008, 5:52 pm Central):&lt;/span&gt;  Here&#39;s one small example of some code in Scala that speaks to its power.  It&#39;s based on an example from the book.&lt;blockquote&gt;&lt;code&gt;val name = &quot;Agent 99&quot;&lt;br /&gt;     val nameHasDigit = name.exists(_.isDigit)&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;Here the &lt;code&gt;String&lt;/code&gt; type is implicit in the first line, but it could be spelled out explicitly, along with a semi-colon at the end of the line&lt;blockquote&gt;&lt;code&gt;val name: String = &quot;Agent 99&quot;;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;In the second line, the method &lt;code&gt;exists&lt;/code&gt; applies a boolean function to a sequence of objects, returning &lt;code&gt;true&lt;/code&gt; if at least one of the results is true.  Since &lt;code&gt;name&lt;/code&gt; is a string not a sequence, it&#39;s implicitly converted to a sequence of characters.  The function is described by a &lt;span style=&quot;font-style:italic;&quot;&gt;function literal&lt;/span&gt;, but it could have been defined using the symbol &lt;code&gt;f&lt;/code&gt; with some code like this&lt;blockquote&gt;&lt;code&gt;def f(ch: Char): Boolean = ch.isDigit();&lt;br /&gt;val nameHasDigit: Boolean = name.exists(f);&lt;/code&gt;&lt;/blockquote&gt;or alternatively&lt;blockquote&gt;&lt;code&gt;def f(ch: Char) = ch.isDigit&lt;br /&gt;val nameHasDigit = name.exists(f)&lt;/code&gt;&lt;/blockquote&gt;Notice how clean the code becomes, how much more readable it is, when obvious things can be removed.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-size:130%;&quot; &gt;Details, details, details...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A function literal, by the way, is also known as a &lt;span style=&quot;font-style: italic;&quot;&gt;predicate &lt;/span&gt;when it returns a Boolean, as &lt;code&gt;_.isDigit&lt;/code&gt; does above.&lt;br /&gt;&lt;br /&gt;One detail.  If you already know Scala, can you find the error in my expanded pedagogic code for defining the function &lt;code&gt;f&lt;/code&gt;?&lt;br /&gt;&lt;br /&gt;In Scala, there is a coding convention for differentiating between commands and queries (see Bertrand Meyer&#39;s &lt;a href=&quot;http://www.amazon.com/Object-Oriented-Software-Construction-Prentice-Hall-International/dp/0136291554&quot;&gt;writing &lt;/a&gt;on the &lt;span style=&quot;font-style:italic;&quot;&gt;Command-Query Separation principle&lt;/span&gt;).  Queries return information without causing &quot;side-effects&quot;.  Commands change objects.  The convention in Scala is to only include empty parentheses when the method has side-effects.  When it returns information without changing things, returning say a conceptual property of an object, then it&#39;s a query, and, again in the spirit of Bertrand Meyer&#39;s writing, in this case on the &lt;span style=&quot;font-style:italic;&quot;&gt;Uniform Access principle&lt;/span&gt;, the parentheses are removed.  That&#39;s the Scala convention.&lt;br /&gt;&lt;br /&gt;If the code defining the method specifically omits parentheses however, then this isn&#39;t optional.  It&#39;s enforced, as in the case of &lt;code&gt;isDigit&lt;/code&gt;.  You&#39;ll see a compile-time error if you try to call the method with empty parentheses.  &lt;br /&gt;&lt;br /&gt;I also didn&#39;t mention that &lt;code&gt;scala.Char&lt;/code&gt; is implicitly converted to &lt;code&gt;scala.runtime.RichChar&lt;/code&gt;, behind the scenes.  Implicit conversion makes for more intuitive, succinct code.  It also allows you to wrap code from pre-existing libraries using &lt;code&gt;trait&lt;/code&gt;s.  Traits are akin to Java interfaces, however they can include concrete implementations, and so they&#39;re mixins.&lt;br /&gt;&lt;br /&gt;Another detail - the implicit conversion for &lt;code&gt;exists&lt;/code&gt; actually requires an &lt;code&gt;Iterable&lt;/code&gt;.  A sequence is, more precisely, a &lt;code&gt;Seq&lt;/code&gt;, a subtrait of &lt;code&gt;Iterable&lt;/code&gt;.  The conversion is made from &lt;code&gt;String&lt;/code&gt; to a &lt;code&gt;RandomAccessSeq&lt;/code&gt;, a subtrait of &lt;code&gt;Seq&lt;/code&gt;, by one of the implicit conversion functions in a singleton object called &lt;code&gt;Predef&lt;/code&gt;, where many such common conversions are defined.  &lt;br /&gt;&lt;br /&gt;In Scala, by the way, in addition to defining a &lt;code&gt;class&lt;/code&gt;, you can &lt;span style=&quot;font-weight:bold;&quot;&gt;define&lt;/span&gt; an &lt;code&gt;object&lt;/code&gt;, which is just a singleton.   You can define a &lt;code&gt;class&lt;/code&gt; and an &lt;code&gt;object&lt;/code&gt; using the same name, in which case the &lt;code&gt;object&lt;/code&gt; is the &lt;span style=&quot;font-style:italic;&quot;&gt;companion object&lt;/span&gt; to the class.  So every Scala class can have an associated singleton object.&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;&lt;br /&gt;Update (May 13, 2008, 8:15 pm Central):&lt;/span&gt;  I noticed &lt;a href=&quot;http://www.nabble.com/Calling-bay-area-Scala-users-tt17180083.html#a17180083&quot;&gt;an announcement&lt;/a&gt; for the first meeting of a new Scala User Group for the San Francisco Bay Area.  It&#39;s scheduled to meet at this very moment.  Wish I were there.  Maybe their next meeting, or the meeting after that....&lt;br /&gt;&lt;br /&gt;Here in Minneapolis, I hope to meet other Scala users at the &lt;a href=&quot;http://otug.org/&quot;&gt;OTUG meeting&lt;/a&gt; next week, where Ted Neward is making a presentation - &lt;span style=&quot;font-weight:bold;&quot;&gt;The Busy Developer&#39;s Guide to Scala&lt;/span&gt;&lt;blockquote&gt;The Java platform has historically been the province of object-oriented programming, but even Java language stalwarts are starting to pay attention to the latest old-is-new trend in application development: functional programming. In this lecture, Ted Neward introduces Scala, a programming language that combines functional and object-oriented techniques for the JVM. Along the way, Ted makes the case for why you should take the time to learn Scala — concurrency, for one — and shows you how quickly it will pay off.&lt;/blockquote&gt;So far I only know one other programmer in the Twin Cities who&#39;s interested in Scala, and I had a coffee klutch with him yesterday evening on the subject.  It&#39;d be great to get a Scala User Group going here, starting with some of the attendees of Neward&#39;s talk.</content><link rel='replies' type='application/atom+xml' href='http://opencomponent.blogspot.com/feeds/3697610217547046198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/22223302/3697610217547046198' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22223302/posts/default/3697610217547046198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22223302/posts/default/3697610217547046198'/><link rel='alternate' type='text/html' href='http://opencomponent.blogspot.com/2008/04/gaga-over-scala.html' title='Gaga over Scala'/><author><name>Casey Bowman</name><uri>http://www.blogger.com/profile/06004964294568558404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqZoTNLkKQvR_DOuKUtee2b2_vFFLeLJ9mHJdzyhNOFjpt-yq7P9viuZ9xkqlN3htF8UNdmXhrbPN8v6_9QB9dz4AbOTFZiby0uW0LCI6v3zzl5jkqpPuydHxK3yEXoVA/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22223302.post-3352876888536083423</id><published>2007-11-20T15:36:00.000-06:00</published><updated>2007-11-26T15:09:04.497-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="classloader"/><category scheme="http://www.blogger.com/atom/ns#" term="felix"/><category scheme="http://www.blogger.com/atom/ns#" term="grid"/><category scheme="http://www.blogger.com/atom/ns#" term="hpc"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="license"/><category scheme="http://www.blogger.com/atom/ns#" term="multi-core"/><category scheme="http://www.blogger.com/atom/ns#" term="open-source"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi"/><category scheme="http://www.blogger.com/atom/ns#" term="x10"/><title type='text'>The ground is shaking beneath Java</title><content type='html'>The ground is shaking beneath Java on two ends.  On one end is Android, on the other X10.  &lt;br /&gt;&lt;br /&gt;As &lt;a href=&quot;http://opencomponent.blogspot.com/2007/08/java-and-dangers-of-gpl.html&quot;&gt;previously discussed&lt;/a&gt;, I&#39;m attracted to the Harmony implementation of Java because of its Apache licensing.  &lt;a href=&quot;http://code.google.com/android/what-is-android.html&quot;&gt;Android&lt;/a&gt; fits into this strategy nicely as it incorporates much of Harmony.  Openness wins.  Distributed computing and onerous licensing are inimical.  Android has been released under the Apache v.2 license.  &lt;br /&gt;&lt;br /&gt;As the world moves towards multi-core, IBM&#39;s experimental concurrent programming language &lt;a href=&quot;http://x10.sourceforge.net/x10home.shtml&quot;&gt;X10&lt;/a&gt;, an offshoot of Java (shy generics for now&lt;sup id=&quot;_ground_is_shaking_ref-1&quot; class=&quot;reference&quot;&gt;&lt;a href=&quot;#_ground_is_shaking_note-1&quot; title=&quot;&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;), is poised for action.  According to Vijay Saraswat&#39;s &lt;span style=&quot;font-style:italic;&quot;&gt;Report on the Experimental Language X10&lt;/span&gt;, Version 1.1, June 30, 2007, &lt;blockquote&gt;X10 may be thought of as (generic) Java less concurrency, arrays and built-in types, plus places, activities, clocks, (distributed, multi-dimensional) arrays and value types. All these changes are motivated by the desire to use the new language for high-end, high-performance, high-productivity computing.&lt;/blockquote&gt;X10 is licensed under the Eclipse Public License 1.0.    &lt;br /&gt;&lt;br /&gt;Licensing, that&#39;s a go.&lt;sup id=&quot;_ground_is_shaking_ref-2&quot; class=&quot;reference&quot;&gt;&lt;a href=&quot;#_ground_is_shaking_note-2&quot; title=&quot;&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;  Java-based security.  Shall we assume that&#39;s a go?&lt;sup id=&quot;_ground_is_shaking_ref-3&quot; class=&quot;reference&quot;&gt;&lt;a href=&quot;#_ground_is_shaking_note-3&quot; title=&quot;&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;  Now it&#39;s time to delve in.&lt;br /&gt;&lt;br /&gt;I&#39;m sure Java will come out of all this tumult strengthened, though perhaps reincarnated.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Names&lt;/span&gt;  &lt;br /&gt;&lt;br /&gt;I hope both of these movers and shakers do come up with better names.  Android??  It&#39;s a bit embarrassing to put on your resume, like Groovy.  And the name X10 makes it difficult to do Google searches due to the ubiquitous information about that &lt;span style=&quot;font-style:italic;&quot;&gt;other&lt;/span&gt; X10.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Notes&lt;/span&gt;&lt;ol&gt;&lt;li id=&quot;_ground_is_shaking_note-1&quot;&gt;&lt;a href=&quot;#_ground_is_shaking_ref-1&quot; title=&quot;&quot;&gt;↑&lt;/a&gt; Generics, that &lt;a href=&quot;http://www.amazon.com/Java-Generics-Collections-Maurice-Naftalin/dp/0596527756/&quot;&gt;revolution&lt;/a&gt; with which Java shook itself, is expected anytime soon in X10&#39;s next release.  Android includes generics.&lt;/li&gt;&lt;li id=&quot;ground_is_shaking_note-2&quot;&gt;&lt;a href=&quot;#_ground_is_shaking_ref-2&quot; title=&quot;&quot;&gt;↑&lt;/a&gt; Maybe not.  See the 4th bullet in the update and errata section at the end of &lt;a href=&quot;http://www.betaversion.org/~stefano/linotype/news/110/&quot;&gt;Dalvik: how Google routed around Sun&#39;s IP-based licensing restrictions on Java ME&lt;/a&gt;.&lt;/li&gt;&lt;li id=&quot;ground_is_shaking_note-3&quot;&gt;&lt;a href=&quot;#_ground_is_shaking_ref-3&quot; title=&quot;&quot;&gt;↑&lt;/a&gt; Maybe not completely with Android, but perhaps enough for working with distributed code.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Update (Nov 26, 2007):&lt;/span&gt;  Interesting post on Android, OSGi, and classloading - &lt;a href=&quot;http://blog.luminis.nl/luminis/entry/osgi_on_google_android_using&quot;&gt;OSGi on Google Android using Apache Felix&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomponent.blogspot.com/feeds/3352876888536083423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/22223302/3352876888536083423' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22223302/posts/default/3352876888536083423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22223302/posts/default/3352876888536083423'/><link rel='alternate' type='text/html' href='http://opencomponent.blogspot.com/2007/11/ground-is-shaking-beneath-java.html' title='The ground is shaking beneath Java'/><author><name>Casey Bowman</name><uri>http://www.blogger.com/profile/06004964294568558404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqZoTNLkKQvR_DOuKUtee2b2_vFFLeLJ9mHJdzyhNOFjpt-yq7P9viuZ9xkqlN3htF8UNdmXhrbPN8v6_9QB9dz4AbOTFZiby0uW0LCI6v3zzl5jkqpPuydHxK3yEXoVA/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22223302.post-4901371814125744186</id><published>2007-08-23T17:00:00.000-05:00</published><updated>2007-10-07T08:17:41.939-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eben-moglen"/><category scheme="http://www.blogger.com/atom/ns#" term="gpl"/><category scheme="http://www.blogger.com/atom/ns#" term="gpl-v3"/><category scheme="http://www.blogger.com/atom/ns#" term="gplv3"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="linus-torvalds"/><category scheme="http://www.blogger.com/atom/ns#" term="richard-stallman"/><category scheme="http://www.blogger.com/atom/ns#" term="sapna-kumar"/><category scheme="http://www.blogger.com/atom/ns#" term="sun"/><title type='text'>Java and the dangers of GPL</title><content type='html'>Don&#39;t get me wrong.  I am a GPL fan in spirit when it&#39;s combined with a &lt;a href=&quot;http://en.wikipedia.org/wiki/GPL_linking_exception&quot;&gt;linking exception&lt;/a&gt;.  Initially I applauded Sun&#39;s choice for Java&#39;s open-source license.  I am also grateful for the monumental efforts of Richard Stallman and Eben Moglen in helping move the world of software forward.  However, GPL version 3, released two months ago, suffers from 2 flaws, fatal flaws, fatal not only to the healthy evolution of GPL but also to that of Java.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;font-size:larger;&quot;&gt;Flaw #1&lt;/span&gt; - The anti-tivoization clause for consumer hardware is a limitation inimical to free software.  I agree with Linus Torvalds that this clause is a critical mistake.  I may write about this in more detail later, but for now, consider only how this stunts development of security for distributed applications.  My objection is not merely practical.  My objection is in principle.  Freedom in bits, freedom in property, no control over how I use bits in my own property or how others use them in theirs, that&#39;s where this world is heading.  Dictating what I can or can&#39;t do with the software in certain hardware smells of controlliness (yes, that&#39;s a word I just made up, but I bet you know what I mean), inimical to the type of flexibility we need to move this world ahead... fast.  &lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;font-size:larger;&quot;&gt;Flaw #2&lt;/span&gt; - Here&#39;s the clincher, a flaw that even shows a high degree of, dare I say, hypocrisy (&lt;a href=&quot;http://www.informationweek.com/blog/main/archives/2007/07/linux_creator_c.html&quot;&gt;&lt;span style=&quot;font-size:smaller;&quot;&gt;Torvalds dared&lt;/span&gt;&lt;/a&gt;).  The license itself is not open to changes.  You will be punished if you use a license with flaw #1 corrected.  Richard Stallman and Eben Moglen will not let you fork it.  I was shocked to find this out.  No free-software heretics welcome.  You&#39;re locked in for the ride no matter how arbitrary the car driver.  This is the &lt;a href=&quot;http://www.gnu.org/philosophy/java-trap.html&quot;&gt;GPL trap&lt;/a&gt;. (See the video below.)  &lt;br /&gt;&lt;br /&gt;What to do?  Sun currently licenses Java under GPLv2 with the linking exception.  I do hope that Sun adds another open-source license for Java and does not merely move to GPLv3 unthinkingly.  I also hope that the Creative Commons adds another open-source software license to its repertoire.  In the meantime, I&#39;ll continue to use Java as is, but I&#39;ll be keeping my eye on Apache Harmony, though it&#39;s currently lacking a Mac version.  In the grid world to come, the freedom to securely ensure that software be accountable is essential, no matter where it runs.&lt;br /&gt;&lt;br /&gt;I find it sad since I find exciting value in the GPLv3 apart from these 2 dissuasive defects.&lt;br /&gt;&lt;br /&gt;Here is an excellent, informative presentation on GPLv3 given by Sapna Kumar in June to the Triangle Linux Users Group.  According to Kumar (1:13:03), Stallman will not let you modify the GPL license on your own &lt;span style=&quot;font-style:italic;&quot;&gt;even if you call it by another name&lt;/span&gt;.  The Free Software Foundation enforces this through copyright.&lt;br /&gt;&lt;br /&gt;&lt;embed style=&quot;width:400px; height:326px;&quot; id=&quot;VideoPlayback&quot; type=&quot;application/x-shockwave-flash&quot; src=&quot;http://video.google.com/googleplayer.swf?docId=-6598454972182370835&amp;hl=en&quot; flashvars=&quot;&quot;&gt; &lt;/embed&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomponent.blogspot.com/feeds/4901371814125744186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/22223302/4901371814125744186' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22223302/posts/default/4901371814125744186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22223302/posts/default/4901371814125744186'/><link rel='alternate' type='text/html' href='http://opencomponent.blogspot.com/2007/08/java-and-dangers-of-gpl.html' title='Java and the dangers of GPL'/><author><name>Casey Bowman</name><uri>http://www.blogger.com/profile/06004964294568558404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqZoTNLkKQvR_DOuKUtee2b2_vFFLeLJ9mHJdzyhNOFjpt-yq7P9viuZ9xkqlN3htF8UNdmXhrbPN8v6_9QB9dz4AbOTFZiby0uW0LCI6v3zzl5jkqpPuydHxK3yEXoVA/s1600/*'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22223302.post-5983567318221956545</id><published>2007-01-15T12:00:00.000-06:00</published><updated>2007-01-16T12:57:52.762-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jini"/><category scheme="http://www.blogger.com/atom/ns#" term="newton"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi"/><category scheme="http://www.blogger.com/atom/ns#" term="sca"/><title type='text'>Newton Discovery</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://newton.codecauldron.org/images/newton.gif&quot;&gt;&lt;img style=&quot;float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px;border-color:white;&quot; src=&quot;http://newton.codecauldron.org/images/newton.gif&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;I&#39;ve discovered &lt;a href=&quot;http://newton.codecauldron.org/&quot;&gt;Newton&lt;/a&gt;, and now Newton&#39;s downloading on my Apple.&lt;br /&gt;&lt;br /&gt;Newton uses &lt;a href=&quot;http://en.wikipedia.org/wiki/Osgi&quot;&gt;OSGi&lt;/a&gt; for local components and &lt;a href=&quot;http://en.wikipedia.org/wiki/Jini&quot;&gt;Jini&lt;/a&gt; for remote components, combining them both into a distributed component framework, with some &lt;a href=&quot;http://en.wikipedia.org/wiki/Service_component_architecture&quot;&gt;SCA&lt;/a&gt; thrown in for good measure to describe how to assemble the components all together.&lt;br /&gt;&lt;br /&gt;A good starting point to learn about Newton is &lt;a href=&quot;http://newton.codecauldron.org/The+Newton+Component+Model&quot;&gt;The Newton Component Model&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Newton is available under a GPL or commercial license. &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.jini.org/wiki/10th_JCM_Sessions#Towards_SCA_-_the_Newton_Approach&quot;&gt;Here&lt;/a&gt;&#39;s a presentation on Newton from the 10th Jini Community Meeting last year.&lt;br /&gt;&lt;br /&gt;Hat tip:  &lt;a href=&quot;http://osgifun.blogspot.com/2006/06/newton-open-source-project.html&quot;&gt;Fun with OSGi&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;See also: &lt;a href=&quot;http://www.eclipsezone.com/eclipse/forums/t87966.rhtml&quot;&gt;OSGi in a dynamic service grid&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomponent.blogspot.com/feeds/5983567318221956545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/22223302/5983567318221956545' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22223302/posts/default/5983567318221956545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22223302/posts/default/5983567318221956545'/><link rel='alternate' type='text/html' href='http://opencomponent.blogspot.com/2007/01/newton-discovery.html' title='Newton Discovery'/><author><name>Casey Bowman</name><uri>http://www.blogger.com/profile/06004964294568558404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqZoTNLkKQvR_DOuKUtee2b2_vFFLeLJ9mHJdzyhNOFjpt-yq7P9viuZ9xkqlN3htF8UNdmXhrbPN8v6_9QB9dz4AbOTFZiby0uW0LCI6v3zzl5jkqpPuydHxK3yEXoVA/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22223302.post-5823340803047377515</id><published>2006-12-03T11:04:00.000-06:00</published><updated>2006-12-03T12:40:39.140-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jean-philippe-retaillé"/><category scheme="http://www.blogger.com/atom/ns#" term="julien-dubois"/><category scheme="http://www.blogger.com/atom/ns#" term="rod-johnson"/><category scheme="http://www.blogger.com/atom/ns#" term="spring"/><category scheme="http://www.blogger.com/atom/ns#" term="thierry-templier"/><title type='text'>French Roast</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.amazon.fr/gp/product/2212117108/&quot;&gt;&lt;img style=&quot;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;border-color:white;&quot; src=&quot;http://ec1.images-amazon.com/images/P/2212117108.01._AA240_SCLZZZZZZZ_V50851555_.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Well, I&#39;ve ordered my first French book on Java, &lt;a href=&quot;http://www.amazon.fr/gp/product/2212117108/&quot;&gt;Spring par la Pratique&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In &lt;a href=&quot;http://www.eyrolles.com/Chapitres/9782212117103/Preface_Dubois.pdf?xd=b9d7236663801b3cf974912ccd15c71a&quot;&gt;his preface to the book&lt;/a&gt;, Rod Johnson, the founder of Spring,  writes,&lt;blockquote&gt;The content is not only up to date, but broad in scope and highly readable. Enterprise Java is a dynamic area, and open source projects are particularly rapidly moving targets. Spring has progressed especially rapidly in the last six months, with work leading up to the final release of Spring 2.0. The authors of this book have done a remarkable job of writing about Spring 2.0 features as soon as they have stabilized.&lt;/blockquote&gt;&lt;br /&gt;According to &lt;a href=&quot;http://www.amazon.fr/gp/cdp/member-reviews/A28YQASF9RHFS0&quot;&gt;one Amazon review&lt;/a&gt;, &quot;&lt;span style=&quot;font-weight:bold;&quot;&gt;un must have !&lt;/span&gt;&quot;  The reviewer, Levy, writes,&lt;blockquote&gt;Excellent ouvrage, clair, précis, pédagogique et très complet.&lt;br /&gt;Non seulement ce livre expose de manière simple les principaux concepts de Spring (conteneur léger, IOC, AOP, Spring MVC, Acegi security...) mais il aborde également, avec des exemples précis de mise en oeuvre, des thèmes plus rarement abordés dans les autres ouvrages : support d&#39;AJAX et DWR, d&#39;XML et des web services, de JMS, JCA et JMX.&lt;br /&gt;A possèder absolument dans sa bibliothèque si on ne veut pas passer à côté de la révolution technologique qui s&#39;opère autour des architectures J2EE.&lt;/blockquote&gt;&lt;br /&gt;Here&#39;s my translation of Levy&#39;s review,&lt;blockquote&gt;Excellent work, clear, precise, instructive, and very complete.  Not only does this book explain simply the principle concepts of Spring (lightweight containers, IOC, AOP, Spring MVC, Acegi security...), but it also tackles, with specific implementation examples, some topics rarely addressed in other works:  AJAX and DWR support, support for XML and web services, and support for JMS, JCA, and JMX.&lt;br /&gt;&lt;br /&gt;Definitely a book to have in your library if you don&#39;t want to be passed by in the technological revolution sweeping the world of J2EE architectures.&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomponent.blogspot.com/feeds/5823340803047377515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/22223302/5823340803047377515' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22223302/posts/default/5823340803047377515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22223302/posts/default/5823340803047377515'/><link rel='alternate' type='text/html' href='http://opencomponent.blogspot.com/2006/12/french-roast.html' title='French Roast'/><author><name>Casey Bowman</name><uri>http://www.blogger.com/profile/06004964294568558404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqZoTNLkKQvR_DOuKUtee2b2_vFFLeLJ9mHJdzyhNOFjpt-yq7P9viuZ9xkqlN3htF8UNdmXhrbPN8v6_9QB9dz4AbOTFZiby0uW0LCI6v3zzl5jkqpPuydHxK3yEXoVA/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22223302.post-6987124027947462348</id><published>2006-10-13T18:20:00.000-05:00</published><updated>2006-12-02T22:26:08.283-06:00</updated><title type='text'>Jini - a new book and a clear interview</title><content type='html'>Do you want to learn about Jini?  Here are two resources for you.&lt;br /&gt;&lt;br /&gt;First of all, there&#39;s a new book, &lt;span style=&quot;font-style:italic;&quot;&gt;Foundations of Jini 2 Programming&lt;/span&gt; by Jan Newmarch, based on his &lt;a href=&quot;http://jan.netcomp.monash.edu.au/java/jini/tutorial/Jini.xml&quot;&gt;online tutorial&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.amazon.com/Foundations-Jini-Programming-Jan-Newmarch/dp/1590597168&quot;&gt;&lt;img src=&quot;http://ec3.images-amazon.com/images/P/1590597168.01._AA240_SCLZZZZZZZ_V39352743_.jpg&quot; style=&quot;border-color:white; &quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Second, at &lt;a href=&quot;http://www.javaposse.com&quot;&gt;Java Posse&lt;/a&gt; there&#39;s a 3-part podcast interview with Van Simmons, leader of the &lt;a href=&quot;https://computecycles.dev.java.net/Welcome.html&quot;&gt;ComputeCycles&lt;/a&gt; project.  Van talks about his grid-computing project and, along the way, gives a particularly clear summary of Jini and how a cabal on Wall Street is preventing you from knowing just how powerful it is.  &amp;nbsp;:)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://media.libsyn.com/media/dickwall/JavaPosse082.mp3&quot;&gt;Van Simmons interview - Part 1&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://media.libsyn.com/media/dickwall/JavaPosse084.mp3&quot;&gt;Van Simmons interview - Part 2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://media.libsyn.com/media/dickwall/JavaPosse086.mp3&quot;&gt;Van Simmons interview - Part 3&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Update:&lt;/span&gt; Here&#39;s &lt;a href=&quot;http://developers.sun.com/learning/javaoneonline/2006/coolstuff/TS-3714.html&quot;&gt;another presentation&lt;/a&gt; by Van Simmons from JavaOne 2006 that goes into more detail on ComputeCycles.</content><link rel='replies' type='application/atom+xml' href='http://opencomponent.blogspot.com/feeds/6987124027947462348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/22223302/6987124027947462348' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22223302/posts/default/6987124027947462348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22223302/posts/default/6987124027947462348'/><link rel='alternate' type='text/html' href='http://opencomponent.blogspot.com/2006/10/jini-new-book-and-clear-interview.html' title='Jini - a new book and a clear interview'/><author><name>Casey Bowman</name><uri>http://www.blogger.com/profile/06004964294568558404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqZoTNLkKQvR_DOuKUtee2b2_vFFLeLJ9mHJdzyhNOFjpt-yq7P9viuZ9xkqlN3htF8UNdmXhrbPN8v6_9QB9dz4AbOTFZiby0uW0LCI6v3zzl5jkqpPuydHxK3yEXoVA/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22223302.post-7340862477074111082</id><published>2006-09-26T18:28:00.000-05:00</published><updated>2007-06-20T14:41:02.451-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AJAX security upload fileupload javascript"/><title type='text'>Can AJAX Clean You Out?</title><content type='html'>If you have Javascript turned on, can a website upload files from your computer without your knowing it?  Try any AJAX-based email website, such as &lt;a href=&quot;http://mail.google.com/&quot;&gt;Google&lt;/a&gt; or &lt;a href=&quot;http://www.zimbra.com&quot;&gt;Zimbra&lt;/a&gt;.  Attach a file using the textbox, no dialog, and send the email.  If this code can upload a file, then why can&#39;t AJAX do the same internally, without the usual social amenities such as asking for your &lt;span style=&quot;font-style:italic;&quot;&gt;approval&lt;/span&gt;?  &lt;br /&gt;&lt;br /&gt;Zimbra is open source.  Whatever they do, anyone can do.&lt;br /&gt;&lt;br /&gt;Does this mean that for any website you visit with Javascript on, that website has a wide open straw to your computer?  It can&#39;t browse (or can it?), but, when it guesses correctly where you have certain files, if I&#39;m not mistaken, it could suck them right up.  I hope I am mistaken.&lt;br /&gt;&lt;br /&gt;This shocks me.  You can install &lt;a href=&quot;https://addons.mozilla.org/firefox/722/&quot;&gt;NoScript&lt;/a&gt;, which allows you to turn on Javascript for those websites you trust and those websites only.  But still, for those you trust, you must trust them utterly.  There&#39;s no middle ground.  There&#39;s no sandbox, such as Java has.  &lt;br /&gt;&lt;br /&gt;Is this a wide open security hole on the client side for AJAX?          &lt;br /&gt;&lt;br /&gt;AJAX is seductive.  Like Paris Hilton, her beauty and riches have gotten her far.  But what&#39;s this?  A &lt;a href=&quot;http://www.showbuzz.cbsnews.com/stories/2006/09/26/people_hot_water/main2040802.shtml&quot;&gt;DUI&lt;/a&gt;?&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;&lt;br /&gt;Update:&lt;/span&gt;  (20 Jun 2007)  &lt;a href=&quot;http://java.sys-con.com/read/389381.htm&quot;&gt;Paris and AJAX jostle for attention&lt;/a&gt;.  :-)</content><link rel='replies' type='application/atom+xml' href='http://opencomponent.blogspot.com/feeds/7340862477074111082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/22223302/7340862477074111082' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22223302/posts/default/7340862477074111082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22223302/posts/default/7340862477074111082'/><link rel='alternate' type='text/html' href='http://opencomponent.blogspot.com/2006/09/can-ajax-clean-you-out.html' title='Can AJAX Clean You Out?'/><author><name>Casey Bowman</name><uri>http://www.blogger.com/profile/06004964294568558404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqZoTNLkKQvR_DOuKUtee2b2_vFFLeLJ9mHJdzyhNOFjpt-yq7P9viuZ9xkqlN3htF8UNdmXhrbPN8v6_9QB9dz4AbOTFZiby0uW0LCI6v3zzl5jkqpPuydHxK3yEXoVA/s1600/*'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22223302.post-114902721542313034</id><published>2006-05-30T16:43:00.000-05:00</published><updated>2006-10-13T18:15:59.617-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jini"/><category scheme="http://www.blogger.com/atom/ns#" term="mayflower"/><category scheme="http://www.blogger.com/atom/ns#" term="spring"/><category scheme="http://www.blogger.com/atom/ns#" term="spring modules"/><title type='text'>The Mayflower sails - Spring meets Jini</title><content type='html'>&lt;p&gt;Tom and Chris Cellucci &lt;a href=&quot;http://download.java.net/general/podcasts/j1-2k6-mtT15.mp3&quot;&gt;discuss&lt;/a&gt; Mayflower at JavaOne 2006.  Mayflower is a new open-source project bringing together the worlds of Spring and Jini (and Rio).  Last October at the 9th Jini Community Meeting in Chicago I had the privilege of hearing the Cellucci brothers give a &lt;a href=&quot;http://www.jini.org/meetings/ninth/Spring.pdf&quot;&gt;presentation&lt;/a&gt; on the subject.  &lt;/p&gt;&lt;p&gt;Watch this boat.  It may settle a continent.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Update&lt;/span&gt; - &lt;a href=&quot;https://springmodules.dev.java.net/&quot;&gt;Spring Modules&lt;/a&gt; has superceded Mayflower.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://opencomponent.blogspot.com/feeds/114902721542313034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/22223302/114902721542313034' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22223302/posts/default/114902721542313034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22223302/posts/default/114902721542313034'/><link rel='alternate' type='text/html' href='http://opencomponent.blogspot.com/2006/05/mayflower-sails-spring-meets-jini.html' title='The Mayflower sails - Spring meets Jini'/><author><name>Casey Bowman</name><uri>http://www.blogger.com/profile/06004964294568558404</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqZoTNLkKQvR_DOuKUtee2b2_vFFLeLJ9mHJdzyhNOFjpt-yq7P9viuZ9xkqlN3htF8UNdmXhrbPN8v6_9QB9dz4AbOTFZiby0uW0LCI6v3zzl5jkqpPuydHxK3yEXoVA/s1600/*'/></author><thr:total>0</thr:total></entry></feed>