<?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: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-8897313596295779905</id><updated>2012-02-16T11:18:50.827-08:00</updated><title type='text'>Notes on Code</title><subtitle type='html'>by Robert Godfrey</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://notesoncode.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8897313596295779905/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://notesoncode.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Rob</name><uri>http://www.blogger.com/profile/14415212750679687783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8897313596295779905.post-4631672755329213264</id><published>2007-03-19T07:07:00.000-07:00</published><updated>2007-03-19T08:43:24.190-07:00</updated><title type='text'>QCon - Friday</title><content type='html'>I made it down to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;QCon&lt;/span&gt; on Friday, and was really impressed. The content was really good, with virtually no sales fluff in sight. I would have really liked to get down on Wednesday and Thursday as well since the program looked full of good stuff. Hopefully the video presentations will be made available online at some point.&lt;br /&gt;&lt;br /&gt;I went down specifically on an Ajax fact hunting expedition for a project I'm currently working on, and wasn't disappointed with the Ajax track. I attended 3 Ajax sessions, and learned quite a bit from each of them.&lt;br /&gt;&lt;br /&gt;The first was "&lt;span style="font-weight: bold;"&gt;Ajax and Design Patterns: Do we need a client tier?&lt;/span&gt;" presented by Dave Crane.&lt;br /&gt;&lt;br /&gt;The simple answer to the question is yes if your application is complex enough to warrant it. Initially Dave did a good job of explaining how Java and Javascript differ, specifically looking at Closures (which aren't easy to describe)! This led into examining the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;MVC&lt;/span&gt; and Strategy patterns applied in the client tier and looked at some Javascript implementations.&lt;br /&gt;&lt;br /&gt;My session notes:&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;MVC&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Model maintained in client (possibly XML or &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;JSON&lt;/span&gt; data &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;sctructure&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;Multiple views registered as model listeners with controller&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Views access model state&lt;/li&gt;&lt;li&gt;Controller invokes view callback functions to update views on model change events&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Javascript allows dynamic reflection on callback functions by function name, i.e. if controller can find a function with a name on a listener it will be invoked.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Strategy:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Since functions can be referenced as variables and passed around, strategy implementations can be implemented as functions with a closure.&lt;/li&gt;&lt;li&gt;Function objects in Javascript are a bit like anonymous inner class in Java.&lt;/li&gt;&lt;li&gt;Example use of a closure to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;pre&lt;/span&gt;-register lunch activities (devour sandwich, clean ear with pencil, ...) when person comes into office in the morning, with objects to interact with (e.g. sandwich).&lt;/li&gt;&lt;/ul&gt;I asked about how the server side domain model should be exposed to / kept in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;synch&lt;/span&gt; with the client side domain model. Dave answered by suggesting a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;DTO&lt;/span&gt; approach and Facade patterns as one possibility, although &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;remoting&lt;/span&gt; potentially seems more attractive from a maintenance standpoint.&lt;br /&gt;&lt;br /&gt;I found the talk interesting, but on reflection feel a little disappointed that Dave only covered two patterns. I personally would have preferred a higher level view of pattern usage in the client tier, and looked at more patterns without spending as much time on Java v Javascript, syntax, and closures. There's obvious scope for future work in this area.&lt;br /&gt;&lt;br /&gt;Next came "&lt;span style="font-weight: bold;"&gt;Google Web Toolkit: What, Why and How&lt;/span&gt;" by Bruce Johnston.&lt;br /&gt;&lt;br /&gt;Whilst &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;GWT&lt;/span&gt; has been on my radar for a while, I haven't had a chance to look at it at all. From what I saw &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;GWT&lt;/span&gt; looks pretty cool.&lt;br /&gt;&lt;br /&gt;I really liked the slides about the pitfalls / risks of rich web interface development.  I'm experiencing many of the issues highlighted on my current project. It just seems too hard / unproductive hand crafting HTML, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;CSS&lt;/span&gt; &amp; Javascript (even with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;dojo&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;et&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;al&lt;/span&gt;). Fortunately it's still early days, and the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;UI&lt;/span&gt; framework is not set in stone yet.&lt;br /&gt;&lt;br /&gt;My session notes:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Hosted mode customer browser allows Java debugging of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;UI&lt;/span&gt; without opening IE / &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;firefox&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Widgets are styled with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;CSS&lt;/span&gt;&lt;/li&gt;&lt;li&gt;History support looked well implemented&lt;/li&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;RPC&lt;/span&gt; support allowed for Java &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;refactoring&lt;/span&gt; of client and server code together&lt;/li&gt;&lt;li&gt;Read the "Making &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;GWT&lt;/span&gt; Better" document&lt;/li&gt;&lt;li&gt;No support for reflection / class loading. The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;tradeoff&lt;/span&gt; was for aggressive performance optimisations in the compiler.&lt;/li&gt;&lt;li&gt;Native javascript can be embedded in Java source&lt;/li&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;GWT&lt;/span&gt; can be integrated into existing apps&lt;/li&gt;&lt;li&gt;Several options for automated test support using hosted browser.&lt;/li&gt;&lt;/ul&gt;Overall, really impressed with what I saw, definitely something to play with this week :)&lt;br /&gt;&lt;br /&gt;After lunch I ended up at the "&lt;span style="font-weight: bold;"&gt;Rich Internet Apps with Flex &amp; Apollo&lt;/span&gt;" presentation. I had thought of going over to the agile track but am glad I didn't. Flash applications can definitely score in the "wow" factor stakes, the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;demo'ed&lt;/span&gt; applications built with Flex looked pretty slick. The presentation was mostly demos focusing mostly on a table data grid, and various ways that data can be fed into it including &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;xml&lt;/span&gt; over http, web service, and a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;remoted&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;pojo&lt;/span&gt; collection. Nice to see spring integration catered for out of the box. Other interesting things include&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the performance test comparing flex to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;xml&lt;/span&gt; &amp;amp; javascript. Flex outperformed XML / Javascript by a factor of 10 when rendering 20000 records in a tabular grid (3 seconds v 30 seconds).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Live in table data editing&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Real time collaboration demos showing 2 client sessions being kept in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;synch&lt;/span&gt; via the server, i.e. updates in one session, were shown in 2&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;nd&lt;/span&gt; session.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Again really impressed with Flex, I'll be trying the test drive demo soon.&lt;br /&gt;&lt;br /&gt;The final presentation I went to was "&lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;Synaesthesia&lt;/span&gt; - Listening to test smells&lt;/span&gt;" by Nat Pryce and Steve Freeman. Another good session highlighting how smells in test code often highlight design issues in code. Particularly liked the description of how the objects that an object collaborates with can be classified into:&lt;ul&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;Dependencies&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Policy&lt;/li&gt;&lt;li&gt;Parts&lt;/li&gt;&lt;li&gt;Notifications&lt;/li&gt;&lt;/ul&gt;and how a constructor only really needs to accept dependencies as parameters to setup an object in a valid state. The policy, parts and notifications can typically be defaulted.&lt;br /&gt;&lt;br /&gt;It was interesting to see how some of the audience thought that "logging is an interface" was really contentious. An example was shown of a class with a static Logger, with Nat and Steve highlighting how static stuff is hard to test, yet there was some incredulity that maybe a logging object could be passed / injected as a constructor argument instead.&lt;br /&gt;&lt;br /&gt;Got an unofficial update on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;JMock&lt;/span&gt; 2 which Nat reckons will be released before the SPA conference next week.&lt;br /&gt;&lt;br /&gt;I ended up in an open space session about People Stuff which has been blogged about &lt;a href="http://qcon.editme.com/PeopleStuffIsHard"&gt;here&lt;/a&gt;. Had intended to go to another session but it was nice to talk to others for a change.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8897313596295779905-4631672755329213264?l=notesoncode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notesoncode.blogspot.com/feeds/4631672755329213264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8897313596295779905&amp;postID=4631672755329213264' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8897313596295779905/posts/default/4631672755329213264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8897313596295779905/posts/default/4631672755329213264'/><link rel='alternate' type='text/html' href='http://notesoncode.blogspot.com/2007/03/qcon-friday.html' title='QCon - Friday'/><author><name>Rob</name><uri>http://www.blogger.com/profile/14415212750679687783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
