Java


Wow! SyncIpswich’s second meetup and around 80 people crammed into the Eastern Enterprise Hub in the James Hehir Building at University Campus Suffolk. Many of the attendees were working for local behemoths like BT but there were also a good mix of bootstrappers, Start Ups and tech entrepreneurs with all kinds of backgrounds (even spotted a Chartered Accountant).

Organisers Carl Farmer (@CarlFarmer), supported by Anders Fisher (@atleastimtrying) and others have done a great job with SyncIpswich, which we are proud to sponsor. The focus of this meetup was on building software quickly with good practices as well as a nice introduction to the Windows Azure Cloud.

Talk no 1. Continuous Delivery

The first presentation by Chris O’Dell from 7digital (@ChrisAnnOdell) described how Agile practices (CI, Kanban, etc) combined with their architectural evolution to SOA have reduced code to deploy times to half a day  at 7digital.  And, by the sound of it, makes their developers more productive by getting away from “DLL Hell” that used to be the bane of any Microsoft Windows developer’s life towards a loosely-coupled set of services and a public API.

7Digital Logo

Chris raised some really interesting points around developing small fine-grained service components – not being that familiar with .Net myself this seemed to be similar to what we are doing in the Java world with OSGi and Service Component Architecture. I do like the policy of developing new features on the trunk (no feature branches) but making good use of feature flags rather than old-fashioned branch & merge.

They are also using Git for the code version control and Chris showed the inversion of the classic Unit Test, Acceptance Test, QA triangle. Some in our own organisation are raising question marks about the usefulness of very granular unit tests so the approach taken by 7digital of increasing the number of Unit tests is interesting.

There were a lot of questions from the floor, I was particularly interested in how the small kanban teams (about 6 or 7 members in 5 or 6 teams I think) interact when there are common services. This is a key problem that us SOA architects need to get right to get the best value on services. Feature Flags is something that we’ve also thought about in the context of simplifying application testing by, for example, switching off authentication for functional testing.

It’s great to see a company like 7digital competing successfully with iTunes and Amazon in the digital music space. I’ll be checking out their API (and their JLS back catalogue !) in more detail this weekend.

Richard Astbury AzureTalk no 2. Starting out in Azure

The second talk of the night was by Richard Astbury (@richorama) of Two10 Degrees ( @two10degrees). Richard gave a nice introduction to Cloud computing and in particular using Microsoft Windows Azure, showing a picture of a MS data centre under construction, which was something I haven’t ever seen before. I think it really brought home the sheer scale and commodity nature of the Cloud and these facilities being full of containers of kit that is just thrown away or recycled when it stops working.

Building a website on Windows Azure from scratch can use a few main pre-canned routes like the obvious “Website”, “Virtual Machine” and “Cloud Service”.

And it now includes a “Mobile Service” which is of particular interest to me. Sadly, I didn’t have time to chat to Richard about this but it’s on my “To Do” list to get a Hello Smartie mobile service up and running. In fairness, Richard did do two masterful demos for Website, including a node.js based site which he even launched from his home computer (a Raspberry Pi no less). As Carl tweeted:

Deploying to Azure from a remote RaspberryPi at home… Impressive stuff from @richorama !

— SyncIpswich (@SyncIpswich) April 25, 2013

Well done to the people of Ipswich for turning out and drinking all the sponsored free beer!
SyncIpswich will run and run.

Please Rate and Like this blog.  If you can, please leave a Comment.

Alloys

Which Essex boy doesn’t want Titanium Alloys?
Photo © Maxpro Dreamstime Stock Photos & Stock Free Images

Introduction to Appcelerator

I’ve had my eye on Appcelerator and their Titanium mobile development platform product for some time. So I grabbed the opportunity to venture north of the [Suffolk] border to the “SyncFocus” a SyncNorwich spin-off event that was held in the Garden House Pub, upstairs room, in Norwich last night (20th March).  So, reflecting on my rough notes, I’m posting this blog with a few random thoughts thrown in and some links to further information for those interested in javascript-based mobile developments.

This SyncFocus featured as guest speaker non other than Boydlee.  For those who haven’t heard of Boydlee, he is a mobile application development guru and specialises in the Titanium platform who, like Beyoncé, is now so famous he doesn’t need to use his surname :-) .

My “executive summary” is that Titanium is a serious productivity tool for people who can write “well written” javascript code. It is in competition with the HTML5-based approach of PhoneGap, and does not (yet) have as many surrounding services as IBM Worklight which is squarely aimed at the big Enterprise market and is not as broad in its coverage of operating systems and devices (yet). It does however, have a thriving developer community and a very attractively priced (i.e. “FREE” cloud service). It does appear to be very easy for a moderately skilled javascript developer to create apps but it’s probably just as easy to create a horrendous mess so the newest approach is to supply a framework as the well-known MVC pattern through “Alloys” – which Essex boy doesn’t want Titanium Alloys on their racer?

Main points:

  • Titanium is purely JavaScript library coding against the Titanium api, the platform compiles the source to native Objective-C or Java code for the iOS and Android Apps and can easily be linked with the Xcode or Android SDK to complete the builds.
  • Links with emulators for iPhone, iPad and Android
  • Appcelerator has over 400,000 registered developers worldwide (a counter on their home page tells me it is just under 430,000 today)
  • The libraries themselves are “Free and open source”, available on GitHub
  • However, the Titanium studio is not free, and you can take the Appcelerator Paid support
  • An estimated one third of cross- platform apps are built on titanium
  • Claims to also support BlackBerry 10, but Windows 8 is not available until later this year

One really nice feature is a very large “Module marketplace” which is mostly compiled binary code aimed at one native operating system or the other that can be downloaded and incorporated into the build – for example something to integrate to native libraries, plugins, e.g. Barcode scanning

A lot of those modules also have their source code on GitHub, building the community even more and improving the eco-system. This appears to be thriving and also includes some javascript extensions as well as the compiled native iOS and Android libs.

Appcelerator Mobile Service (ACS)

ACS is an interesting move to give a free level of Mobile (application) Back-end as a Service (MBaaS) to developers of services, running on AWS.

This includes 20GB storage, 5m push, 5m api and 20 pre built common services, including key-value pairs (similar to AWS Simple DB), Ratings, Geo services, media, including thumbnails, Social integration (Facebook) and storage of custom objects, which I think was based on Mongo DB as a service. There is certainly capability to link directly with Node and Mongo backends and simple stuff like SMTP integration (again similar to AWS’s Simple Email Service “SES”).

Coding practices

Boydlee recommended looking into Common.js best practice for relative newbies to Javascript. Other frameworks are available, like backbone, require.js and one of his blog posts has recommended the javascript patterns book by Stoyan Stefanov.

There are also free books online available on styling, including best practices to cascade for tablets so you don’t just get an enlarged phone experience that sucks.

The CSS approach also over-rides for different devices, so it’s not always best to stick with pure javascript for everything, however, for those who really are blinkered by javascript there is a CSS to JSON converter library.

Boydlee’s books are on PACKT or there are kindle versions. Boydlee’s best practices book is one I will be getting for sure.

Finally, the newest developments in Appcelerator will probably be using Alloy which includes full Model View Controller (MVC) frameworks (again, all built on well-known javascript frameworks) that claims to speed up App development by another order of magnitude.

Comparing it with the IBM Mobile First offering the coverage of mobile O/S is much wider in Worklight (Windows 8 and BB 10 were available very soon after launch), the adaptor environment, the upgrade management and enterprise app centre seem more developed and you have the whole extra wrappers of security, analytics and so on within IBM’s Mobile offering. The customer list on Appcelerator’s website is mighty impressive for consumer-oriented Apps but the ability to integrate with Enterprise back-ends is less of a focus, which is why in our case we’re focusing on IBM for Enterprise mobility but Appcelerator is certainly worth considering.

Please Like and Rate this post.  If you can, please leave a Comment.

Old record player

Photo: Old record player by Grafphotogpaher (c) Dreamstime Stock Free Images

Those of you accustomed to developing android application will be familiar with the mechanism used for building android apps, such as having the IDE do the work for you, which is somewhat limited, or breaking out and writing ant scripts to orchestrate a build. Some of the adventurous amongst you may be using the maven-android-plugin.

It appears that the Google Android build tools team has come to terms with the fact that ant probably isn’t the best option these days, and are moving towards replacing ant with gradle in the SDK in the future.

Last night I was fortunate enough to attend a Meetup.com event with the London Android Group (@londroid) at the SkillsMatter (@skillsmatter) HQ, where Hans Dockter (@hans_d), the CEO of gradleware gave a presentation on what gradle is, and how it can be used for building android projects, enabling developers to manage their builds with groovy based scripts rather than XML.

What is a build framework anyway?

As Hans put it so well, in short, a build framework will “compile stuff, copy things around, and drop out an archive“.

Whats so limiting with the current options?

Ant can be considered imperative, simply meaning that you have to spoon feed it with instructions via tasks; compile these files that reside here, copy them to this directory, jar it up etc, its not really capable of figuring things out for itself.

Maven on the other hand is considered declarative, meaning that you can focus more on the outputs of a task, such as “I want a web application”, providing you have your source in the right place, maven is smart enough to figure out where to find it, how to compile it, and what the output for a web application should look like. Essentially you tell maven what the inputs are, and what you expect to get out of it, and maven figures out the bit inbetween, thus avoiding the need for scripting tasks as you would have to if using ant.

Sounds great, so what does gradle bring to the android party?

Free beer! If only…but we get the next best thing.

Gradle attempts to take the best parts of ant and maven, by using it for building your android projects you can benefit from:

  • Very light and easy to manage build files, no trawling through humungous XML files. (gradle vs maven).
  • Gradle follows convention over configuration like maven. It knows where your source is for a java project (unless you decide to override it), you can read more about convention over configuration here.
  • Flexible dependency management, integrate with existing maven/ivy repositories. Different versions of dependencies for different build tasks? No problem.
  • It gives you the freedom and flexibility to define your own custom behaviour without needing to write plugins as you would if using maven. Groovy is your friend here.
  • Support for multiple projects. You don’t need to have separate projects for production code and integration tests, you can have keep them within the same project and define different source sets. This greatly reduces parent/child projects that can be a chore to maintain.
  • Don’t have gradle installed? Can’t install gradle easily? No worries, there is gradle wrapper for that. This is particularly useful on CloudBees Jenkins environments where you don’t have access to install gradle directly.
  • You have a free and paid for version of the app, with some common shared library between them? Gradle handles this perfectly via product flavours
  • In addition to free and paid for flavours, you also have builds for different architectures such as ARM and x86? Flavour groups will help you there.
  • You’re not tied to an IDE, the build scripts should be IDE independent so your team can choose their own flavour of IDE, or build from the command line as you would on a jenkins environment.
  • Don’t want to use Eclipse, prefer IntelliJ instead? No worries, apply the idea plugin and run gradle cleanIdea idea. Boom, idea project is setup and ready to go, no messing around with project settings.
  • Easily run instrumentation tests on multiple virtual devices, no need for manual testing each time you make a change.

Getting started?

  1. Watch the presentation
  2. Read through the android build tools page, plenty of information here on how to use the android gradle plugin
  3. Have a read of the gradle documentation, its very well documented.
  4. Checkout the samples on github
  5. Have a browse of the groovy documentation so you can understand the basic syntax of the language.
  6. code, code, code!

Make sure you join the London Android group on meetup.com and look out for future events like this, they’re free and well worth the train ticket. For those in the south east, be sure to checkout SyncIpswich and SyncNorwich for free technology meetups.

It’s just passed that time of year again….not Christmas…not thanksgiving…but DroidCon! Being one of many enthusiastic mobile geeks that we seem to cultivate of late, I was able to sneak off from my project work for 2 days to see what is happening in the world of android mobile development. Here are some of my highlights from the conference.

Android for a Vending Machine

Paresh Patel (@DrPareshPatel) from Vendscreen gave an inspiring talk regarding how his company are thinking outside the box, and bringing android to everyday devices that we wouldn’t typically associate with mobile computing, such as vending machines. Vending machines can no longer be dumb service machines that refuse most of the coins you have in your pocket, and when it eventually accepts it you’ll be praying the mars bar does actually drop and doesn’t get stuck half way.

One of the fundamental gaps in the vending machine model, is that once the manufacturer has shipped the product, they have no realtime visibility of the retail flow to the user, however, if the vending machine was smart enough to recognise the purchases, this data could be fed back directly to the suppliers so they can see that a given vending machine likes to sell mars bars at 3pm on a Friday afternoon.

This is where Vendscreen come into play, they have developed a device that can be installed into the machine, that uses the android operating system to enable product resale information to be gathered and fed back to the supplier, of course, being an android powered device, there are many other benefits such as cashless payments via NFC, and servicing info that can be relayed to the operating company should there be a fault with the vending machine, or alarms being set off at head office on Friday at 3:01 pm as the chocolate crisis begins.

Additionally, vending machines could then be clustered; to offer more alternative products, not to combine computing power in a Skynet attempt to bring down humanity. If you have vending machines on all 10 floors of your office block, you no longer need to have the same 40 product lines in each one, you can have a core set of 15 products, and 25 varying products, totalling over 100 various items in the building. Users can then be notified of which floors a particular packet of crisps may reside using the on screen menus.

Android for a Car

Another interesting talk came from the guys at Parrot, regarding their new range of android powered in-car systems named “Parrot Asteroid“. These devices allow users to expand their regular hands-free system to incorporate media players, GPS navigation, and a wireless hotspot. Whilst the products were marketed well, I’m not convinced they provide anything more than what you could do on a regular android powered smartphone.

Fragments

This talk discussed what fragments are, and why we should be using them. In short, using fragments makes your life less painful when it comes to making your application usable on varying sized devices. One way of describing fragments are sub-activities, whereby you can have many fragments in a single activity that have simple and well defined purposes. You can then display fragments at runtime dependant on the device, so a phone may have a nested list whereas a table would have enough space on the screen to display a contents pane, and a detail view. This image from the fragments documentation sums it up reasonably well.

Have a look at the GMail app for the phone and a tablet and you’ll see a good example of this, iOS has a similar UI component called MasterDetail. One quote from the presenter was “If you’re not using fragments, you’re writing legacy code“, I must admit I disagree with this statement, since there are times where it is either overkill, or inappropriate to be using them, such as developing games which would require a fixed canvas, so as good as fragments are, they’re not the silver bullet.

Continuous Integration using Jenkins

Using Jenkins on a daily basis, I’m already aware of how awesome it is, and having several of my own android projects on the go I’m aware of how much benefit it brings to the android development life-cycle, but I wanted to hear this from other people to ensure it wasn’t just me that had a secret loving of the butler. One of the best things you can do with the android-emulator-plugin, is to define a set of emulators that you’d like to instantiate, deploy your app to, and then run your integration tests on.

Not only can you select multiple versions of the emulator, but you can also select multiple locales, device screen sizes, memory sizes, and more. This enables you to deploy your app to the most common device configuration, but also for weekly jobs you could deploy to less common devices, and varying locales to ensure your internationalization is working as intended. Combine this emulator plugin along with a little research onto the popular device combinations of your target audience, and you’re well on your way (provided you actually write the tests of course).

Following the TDD principles early can reduce the amount of time you’ll spend trawling through the logcat later on when you introduce some obscure bug that your missing regression tests could have detected:

Using the Facebook SDK

If you want publicity for your app, Facebook is a very viable option, with a user base of 1 billion active monthly users, there are potentially a lot of likes that you can earn, but not only that, downloads! Having recently developed a gamification app for one of our clients, I was well versed in the Facebook SDK for iOS and some of the pains it brings with asynchronous requests to the open graph, and authentication, however for the latest android SDK it seems a lot of these have been addressed. Session management is now handled automatically, various manual parsing of JSON is now reduced to handling Java objects, integration with the OpenGraph has been made a lot easier, so you can post detailed actions to your timeline, a lot of the UI components that you’d otherwise have to create manually are now available out of the box, such as friend and location pickers, and deep linking is provided so when users click on a link to your Facebook app, it will open the app on the device if it is available, otherwise direct them to the market to download it.

NFC With Mark Murphy

OK, so his live demo didn’t actually work, but he’s the celebrity of the android world so I’m sure we can all forgive him for that. A fantastic public speaker, Mark gave us an entertaining overview of how easy it is to get started using NFC, you can have a look at his sample on Github here. Mark discussed how you can easily read and write data to tags, however current tags are limited to around 1kb of data, so don’t expect to be seeing Kindle books delivered on the back of a postage stamp any time soon. There were a handful of other talks around the NFC technology, and the vendors had NFC tags in posters, and some were even giving out free NFC tags if you pleaded nicely.

Write less, do more

Yes, very appealing, this discussion was around some of the useful, free, open source libraries that are available to make android development easier by removing the need for developing your own boilerplate code; some interesting libraries that cropped up :

Overall another fantastic year, I’ve completed the “droidcon hat trick” now and each year I can see that more people are becoming serious about mobile development. It was clear that NFC is going to be taking off and as the technology is reasonably new, the market isn’t too saturated with ideas, thinking caps need to go on!

This video was played many times by the DroidCon organisers on the big screens, it’d only be fair to pass it on!

Watch this space, I have some thoughts around IBM Worklight, NFC, and some of the other technologies mentioned here that may be hitting your RSS readers soon…

I hadn’t expected quite what would happen next.

Just imagine, It was late on a raining Wednesday afternoon… there was I – a tech sector marketer – wanting to verify a simple problem.

Can anyone tell me what 421 is in binary, please?    Is it 110100101   ?

Now, you need to know that I work on the principle that if you want to know something, always ask a specialist. One thing we’re not short of here is specialists. So I took a punt and put a question out to members of our Java practice and Microsoft practice.

A veritable tsunami of replies came in. Here’s an abbreviated list for us all to enjoy (no names have been changed, they are really not that innocent)

Thread

^JS:   Quick question: Can anyone tell me what 421 is in binary, please?    Is it 110100101   ?

^BN: Yes: 110100101  Used http://acc6.its.brooklyn.cuny.edu/~gurwitz/core5/nav2tool.html

^DT: The OS X calculator application has a ‘programmer’ interface, which confirms the below: I was surprised. I just thought I’d look and see if it did binary conversion like my old scientific calculator used to …

Screenshot so you can see the other neat features.

Yes that funny ‘ƥ’ character is what the decimal code 421 in unicode is. In ascii it looks like a Yen symbol (‘¥’). base 16 ‘421’ (1057 in base 10) in ascii Is ‘!’, and ‘C’ in unicode:  now I’m gonna write ‘fanboi’ before anyone else does…

^MW: 421 in octal is 100010001 in binary, which has a nice symmetry about it! :-)

^SS: Well it’s a step up from microsofts unix kernel effort of x0B16B00B5 I suppose

^JN:  Have to include the fact that this isn’t just in OSX there is a programmer interface on the calc in Windows 7   :-)   [see screenshot]

^MA: 421 (decimal) is indeed 110100101 (binary). On the other hand it’s much easier to represent the same using the BCD (Binary Coded Decimal) way, as: 0100 0010 0001

^SS: Joseph, are you going to start advertising in the pure Matrix now then? I heard a rumour that Morpheus Robin required the new PCs to take a red pill to join, so that would explain everything…also Robin – when can I stop taking these blue pills you gave me ? it is getting quite embarrassing in the office when I have to get up and walk around…

^AC: So if the 1 is NEO (an anagram of ONE ;) ) from the matrix, then the 42 must be the answer =D

^RM: I’m really glad you started that Joseph.  You’ve set Stuart off now ;-)

^AC: Isn’t it the number 4 and the number 21? Which should be represented differently? Or is it now ‘Smart four hundred and twenty one’

^AS: My binary watch tells me that 4:21 is 100:10101 (what pills are these – obviously must be “smarties”?)

^DA: Joseph – I think you need some practice with this http://forums.cisco.com/CertCom/game/binary_game_page.htm

Robin – If there are pills going spare we need more in Leeds.

^JS: Stu – Our marketing takes place in several paradigms – you know that! I know of no pills red, blue or otherwise, are you sure it’s not just a tube of Smarties left over from one of our Gartner events ?

Robin – It was a basic question, er no, not basic, binary, errr.. ascii, octal, unicode, base 16, base 10, fibonacci,  – whatever!

^PI:  AC and AS are correct. Smart Solutions 1002 the 101012st Century

^AS (a different one): Speaking of pills, this thread makes me want another Soma.

^CF:  Ouch…

^JS: A big thank you to all who inputted. I have what I needed (and more than expected – Stu, we’re looking at you). Thread now closed.

Being relatively new to the IT profession, I wasn’t really too sure what to expect from JAX.  Over the years, I’ve been to plenty of other non-IT conferences; some of them great, some of them awful.
However, JAX 2012 did not disappoint.
Located in the depths of Park Plaza, Victoria, the venue was pretty ideal.  Spacious conferences rooms that easily accommodated any interested attendees (and then some) with plenty of communal seating areas to mingle with the other conference-goers.  Plus, it’s directly opposite a Pret and, as any regular London commuter will tell you, that is no bad thing.  The event staff were very efficient and helpful and there wasn’t a single hiccup in organization over the entire two days, which is a huge indication of the amount of effort that went into the planning of such a big event.
After a brief welcome by one of the conference’s organizers, the first session was a keynote by Brian Goetz (@BrianGoetz ), a language architect from Oracle, centered around Java 8, in particular, Lambda expressions.  It was a really eye-opening insight into the evolutionary forces in play that drive forward Java as a language and a technology to adapt to the fast-moving technological landscape whilst, at the same time, maintaining backwards compatibility with legacy code.  The new features of the language, due for release in Summer ’13, have definitely captured my attention.  There are definitely a lot of features ‘borrowed’ from Scala, in particular the use of parallelism in iterating over Collections, but these can only work to Java’s advantage.  Overall, a fantastic talk and has genuinely excited me over the future of Java.
Next up, a live coding session with Sandro Mancuso ( @sandromancuso ) as he showed us his philosophy on testing and refactoring legacy code.  Whilst endorsing the traditional test-driven development (TDD) approach and the manta of always leaving the code in a better way than you found it, quite a few hints and tips that he gave, such as start testing from the shortest branch of code and refactoring from the deepest branch, are small changes that can make working with legacy code that much easier.  A useful session overall.
I’d never really had much exposure to the Big Data world before so I jumped at the opportunity to attend a few of the Big Data lectures available.  First up was a lecture on Apache Cassandra by Tom Wilkie ( @tom_wilkie ).  Amongst the frequent plugging of Acunu, a reporting tool that sits on top of Cassandra, it gave me a decent understanding of the way that Cassandra works and the advantages, such as providing realtime analytics, and the disadvantages, such as having to declare your queries up-front, that the technology has to offer.
The second Big Data lecture I attended was regarding Hadoop and its evolution.  Similarly to the previous talk, this gave me a good basic understanding of the workings of Hadoop and how it has progressed over the years.   Very interesting indeed.
Having worked on mainly Agile Scrum projects at Smart421, I was quite keen to attend Roman Pichler’s ( @romanpichler )lecture, entitled ‘Choosing the Right Agile Innovation Practices: Scrum vs. Kanban vs. Lean Startup’.  It was really interesting to see Roman’s take on when each of these agile processes are relevent depending on the level of risk and uncertainty in the product.  Having never had any really exposure to Kanban and Lean Startup, this was a great session to get more of a feel for these paradigms.
Next up, was Heiko Seeberger’s ( @hseeberger ) ‘Scala In Action’ talk.  I was very excited about this talk because I’ve heard great things about Scala and had been meaning to experiment with it for a while.  I was not disappointed.  This live coding session showed the basics of the Scala programming language, as well as its interoperability with Java projects.  Whilst the syntax may take a bit of getting used to for existing Java developers, the readability of the code drastically increases, condensing what may take several lines of Java code into a single line of Scala.  As well as this, there are a plethora of features, such as parallel collections and lazy values that make this language very appealing.  A fantastic presentation and I’ll definitely be coding some Scala of my own very soon.
The second of Roman Pichler’s lectures I attended was about his concept of the Product Canvas.  The Product Canvas, in a nutshell, is a document for a new piece of product functionality that captures the stakeholder’s needs, user journies and UX design, constraints and developer stories all in one document.  It was suggested that, once created, this document is displayed for anyone in the business to see.  This is perhaps quite handy for ensuring that all parts of the business are, quite literally in this case, on the same page, but in reality, I’m not sure if this would really be feasible in a fast-moving Scrum team where the requirements are constantly changing.  Definitely an interesting concept though and provides much food for thought on how development teams can work more closely with the rest of the business.
‘Rock Arts and Rockets’ was the title of the next keynote from IBM’s Steve Poole.  This talk was a captivating insight into the Java community as a whole and was a cry of help to encourage us, as Java developers, to get more involved to help drive the future of the programming language.  An eye-opening talk that was very thought-provoking.
At conferences, I’ve always found that there is usually one talk where someone has a good whinge.  Russel Winder’s ( @russel_winder ) talk on Closures didn’t let that hypothesis down.  A lot of the content in this talk was material that had been covered by Brian Goetz’s keynote and the rest seemed to be a long rant about how Java isn’t object-oriented(!) and slides of squirrels.  The wasn’t really much to take away from this talk, which was a pity, as it sounded quite interesting.
Next, was a high-energy and entertaining talk by Holly Cummins ( @holly_cummins ) and Martijn Verburg ( @karianna @diabolicaldev ), which seems odd for a lecture about Software Complexity.  Covering a range of areas concerning software complexity, such as dependency management, issues with classloading and modularity principles, there was plenty to take away from this talk and apply to my day-to-day development with Java, which was fantastic.
Another keynote followed, given by Patrick Debois of Atlassian, regarding DevOps, in particular the importance of sharing in such a development methodology. Patrick took us through the 6-phases of implementing the DevOps way-of-thinking into a pre-existing workspace.  The key theme throughout showed that improved communication can do wonders for development and operational teams working in harmony.  I see this methodology getting a lot more attention over the coming years.
Having recently been involved in helping out with the performance testing for a client, I thought it would be good to attend a couple of talks relating to that area that could perhaps give me some useful skills to apply.  First up was a FAQs about Performance talk by Trisha Gee ( @trisha_gee ).  Aimed at the beginner performance tester, Trisha covered a wide range of different types of performance tests that can take place, as well as considerations and common pitfalls.  A very down-to-Earth session and gave me some very useful advice to apply day-to-day.
The second performance-related talk I attended was by Kirk Pepperdine on the topic of garbage collection logs.  I must admit, I’ve never really thought of analyzing garbage collection logs, purely because I wouldn’t really have a clue where to start.  However, this session showed that it’s not quite a scary as it first appears.  Kirk talked us through a few different garbage collection algorithms and how these can be applied to the heap, complete with practical examples.  Whilst one would need to do a lot more research to become fully comfortable delving into the logs themselves, this lecture gave a great overview of how to tweak the garbage collection mechanisms to make your code more high-performance.  Highly enjoyable!
The final lecture of the conference that I attended was entitled ‘Multi-tenancy in a Platform-as-a-Service’ and this was given by Paul Fremantle ( @pzfreo ). This talk seemed like a ‘shameless plug’ for a product called Stratos but it also highlighted the issues that Stratos came across when building their PaaS solution, which made for an interesting final session.  It’s also made me keen to get more exposure to cloud-based solutions.
Overall, this was a fantastic conference, both is organization and in content.  It’s a great opportunity for any developer to keep up to date with the latest goings on in the Java ecosystem.  It’s given me plenty of mind-food to munch on for the coming year.  The JAX 2012 team deserve a big pat on the back.

© Jameswimsel | Stock Free Images & Dreamstime Stock Photos

Having arrived at the Park Plaza Hotel early, I was the first attendee and got to chat with the girls on reception. Then I sat sipping coffee, alone, reading the gumpf in the goodies bag. Not much really, so I go check out the t-shirts and chat with some of the sponsor dudes: Mr Git-Hub has the best t-shirts.

I’m starting to get excited. Hey, there’s someone else. Looks like a geek.

Starting to get really excited now: “Lambda, Lambda, Lambda”, goes the chanting in my head.

Lambda Under the Hood

Here’s Mr Brian Goetz ( @BrianGoetz ): “It’s a cool time to be in Java in London”, he says.

An engaging speaker, he talks about the choices made to implement closures in java. One of the biggest headaches has been retaining Serialization; backwards compatibility is mandatory.

Key words: invokedynamic, MethodHandle, LambdaFactory.

The point about closures is that they allow iteration (and more) to be delegated to the library (“client says what, library decides how”), allowing library developers to implement, in particular, parallelism in new Collections methods.

For example, a “filter(…)” method (among others) will be added to java.util.Collection so that the following code can be written:

    List<People> adults = people.filter( p -> p.getAge() >= 18 );

Default methods on interfaces (new in Java 8) allow interfaces to be evolved, extended so they won’t break existing code.

Mr Goetz encourages us to download the Java 8 early access releases and start playing around with this stuff. He highly recommended the following read: “How to talk about parallel programming – Not”.

http://www.infoq.com/presentations/Thinking-Parallel-Programming

Cassandra: Realtime Analytics

The Acuna guy Tom Wilkie ( @tom_wilkie ) was in a hurry. I could tell that straightaway because he was breathing fast and heavily.

“Know anything about Cassandra?”, he began: a few hands went up.

“How many attended the previous session on Cassandra?”, he continued: most hands went up but not mine, I had been in the session about Lambda.

“Weren’t she that greek bird what told the truth but no-one believed her?”, someone said, presumably to develop the ambience.

“Erm…, I don’t know”, said the Acuna guy.

What we needed to know was that Cassandra is really good at:

  • Writing random inserts
  • Range queries

And, that all the work is moved to the data ingest phase so all the queries must be pre-defined.

Acuna does realtime analytics, approximate analytics; one can pick no more than two from: “realtime”, “large-scale”, “exact”. The acuna guy then showed us an algorithm for computing an approximate (probablistic) number of distinct values based on hashing values and counting the number of their leading zeroes.

Origin of Hadoop

Bit disappointing, we learnt:

There are 2 components

  • HDFS: storage
  • MapReduce: compute

Moreover:

  • Its scalable: affordable, distributed, reliable
  • Its style of use: schema on read
  • It started as batch only, with Hbase the first non-batch component.

The speaker strongly recommended reading the following paper from Google:

http://research.google.com/archive/spanner.html

Back to Basics: Codemanship

This was an entertaining talk by Jason Gorman, essentially debunking the methodologies mire. The speaker walked us through his 11 hype free principles of software development.

Pretty obvious stuff really, but worth it for the following:

“No developer ever suggested using a waterfall model, nor ever would”.

“In software, perfection is so close to ‘good enough’ that we might as well aim for perfection”.

http://www.codemanship.co.uk/backtobasics.pdf

The Scrum Hangover

Two guys from UBS,  Mashooq Badar ( @mashooq ) and Sandro Mancuso ( @sandromancuso  ) talked through their company’s experiences over the past few years participating in projects with offshore/onshore teams.

Key items:

  • Focus on quality – reserve time for improvements (developers make the call on what to improve and when)
  • Quality is a team concern
  • Stop and fix attitude – no broken windows
  • Boy scout rule – leave the campsite cleaner than you found it.
  • Continuous and frequent delivery to production.
  • Emphasis on TDD – automated tests at all levels.
  • Business domain reflected in the code and design – readability, maintainability.
  • Simple design.
  • Healthy intolerance of bad code – develop an allergy for bad code smells.
  • DO NOT satisfy your need to use a pattern.

Connected Data

Mr Ian Robinson at Neo Technology (@iansrobinson ) gave the best talk of the conference. I could immediately see how I could use this stuff in my genealogy project.

He explained that:

  • Semi-structured data in RDBMS leads to sparse tables and lots of null-checking logic.
  • Highly connected data in RDBMS leads to lots of join tables.

Graph databases (such as Neo4j) address semi-structured, highly connected data.

It’s property graph data models are volatile and easy to evolve. They are constructed from nodes, relationships between nodes, and properties (of nodes and relationships).

Neo4j provides a language for:

  • describing graphs
  • creating nodes, relationships and properties
  • querying data
  • pattern matching

Neo4j is ready to go!

Day 2

We start, all together, in the plenary room.

Go join a JUG

“Lower your reverence levels and get involved in OpenJDK”, we are requested by Mr Steve Poole.

“Does java stay in a dark cave guarded by acolytes, or do we reignite the java flame?” he asked us.

“Reignite the flame”, I could just manage to lipread on someone’s lips.

Mr Steve Poole gave us a brief overview of the language jungle, and the key java ethos: compete on implementation, collaborate on specification.

Closures

Having had his thunder stolen by Mr Goetz the previous day, Mr Russel Winder ( @russel_winder ) still gave a talk on closures. He suggested that closures would bring the opportunity to: “stop using 70’s techniques and use 30’s ideas and maybe finally do some OO programming (in java).

Key observation: “Its about how your data evolves. Its not about the flow of control”.

Spaghetti

No more noodling with code!

A vaguely humorous talk about dependency management and the Liskov Substitution Principle (http://en.wikipedia.org/wiki/Liskov_substitution_principle).

The perpetual problem is getting hold of an implementation; factories (factories (factories…)), and home-rolled frameworks. Dependency injection externalises the factory problem; be strict about dependency management we are advised.

Jar Hell – jars are transparent: classes encapsulate data, packages contain classes, jars contain packages, but there are no jar-scoped access modifiers.

  • There is no means for a jar to declare its dependencies, no versioning, no modularization charactistic.
  • At runtime a jar is just a collection of classes on a classpath.
  • In a normal jar, an implementation is as easy to use as an interface.
  • In fact its easier as there are no worries about factories, encouraging the breaking of encapsulation.
  • Don’t think jars, think modules!
  • Understand dependencies: What other code does my code touch?, when does it connect?
  • Retro-fitting modularity is hard.

We are advised to check out OSGi, it’s a lot easier than we might think.

NB: project jigsaw (modularity in Java) will not appear in java 8.

Complexity Theory & Software Development

Mr Tim Berglund ( @tlberglund ) gave an entertaining review of simple complexity theory and a demonstration using golly (game of life: http://golly.sourceforge.net/)

There was very little to do with development other than that we have super-huge complex projects and should be aware and look for emergent behaviours.

He used the excellent term “afferent coupling” (the number of classes and interfaces from other packages that depend on me), and I intend to use it myself sometimes.

Stinkin’ Locks

Not for the first time we began a talk with a schematic of a processor. Mr Mike Barker explained what actually happens in the processor when locks are invoked in code. Lines of cache memory get binned, forcing the re-retrieval of data (that may just be unlucky enough to be in the same line of memory).

He introduced us to the processor memory model, and compared its brevity with the java memory model (NB: this arrived in Java 1.5 and is a big, although underrated, thing).

We walked through some simple algorithms using the Atomics classes, and he explained why “hard-spinning” screws up hyper-threading.

Hmm… I’m not sure I want to use a class whose name is “Unsafe”.

http://stackoverflow.com/questions/5574241/interesting-uses-of-sun-misc-unsafe

Microsoft 8 and HTML/Javascript

I rounded out my conference by attending a talk on building Metro apps for MS8 using HTML and javascript.

Pretty slick, if you want to do that sort of thing. You have to have Windows 8, and you have to have Visual Studio or it just can’t be done.

Not sure I’ll be doing this myself though.

I also had the opportunity to attend the    Websphere User Group (WUG) meeting on 23rd March 2011 at Bedfont Lakes. The WUG is a very popular topic amongst colleagues at Smart421 as its a great community

As someone who doesn’t have much direct WebSphere experience on a day-to-day basis, I was wondering if I would struggle to follow the content. However, I can say that I was pleasantly surprised as the tracks were designed for a variety of skills levels. There were several talks that any Java developer would find interesting. There were actually 13 streams running over the course of the day. Many focused on specific IBM products (as you’d expect) but also some focused on more general topics such as Java, and OSGi.

The first session I attended was the WebSphere Foundation Update and Technical Direction in the WAS 1 stream. This session by Ian Robinson gave an overview of forthcoming features in WAS v8. While this was a very WAS specific session it also provided useful updates on several areas in the J2EE space. To download the slides, click here.

The second session I attended was in the WAS 2 stream on JAX-WS 2.2 and JAX-RS 1.1 support in WebSphere Application Server Version 8.0 Beta . The presenter, Katherine Sanders, a software engineer at IBM Hursley,  gave a very good introduction to these two technologies without being tempted to delve into a lot of overly-heavy WAS-specific details. To download the slides, click here.

The third session I attended was given by Simon Cashmore, a Lead Engineer within the Global Middleware team at Barclays Bank.  This talk, Changing the way Java Application Hosting is delivered at Barclays Bank , stood out by a mile as it was the only session in the Customer stream (c’mon WUG Committee, more like this please). It was informative because it focused on Barclays’ new approach to hosting Java applications. Barclays have essentially built their own collection of virtualised WAS instances that can be made available in days rather than weeks or months. Previously, projects would buy brand new hardware that was not shared or reused, so costs and timescales were sky high. Now they have a shared resource that can be used and reused much more efficiently – and more cost effectively. I’m sure Barclays shareholders will be very pleased to hear that  ;o)

The fourth and final session I attended was a talk in the Java stream on Generational Garbage Collection: Theory and Best Practices. This was focused on how the IBM JVM works, but Chris Bailey, a technical architect in the Java Technology Center (JTC) team at IBM Hursley, gave a very detailed description of it which applies to any JVM that implements Generational Garbage Collection. To get a copy of Chris’ slides, click here.

So if you’re in doubt whether you should attend a WUG meeting because you feel don’t have enough WebSphere experience then let me reassure you that any Java developer will find something of interest. There were also suggestions of adding a more business focused stream to future meetings to widen the potential audience even more.

Details of all WUG activities and events can be found here.

WUG 10th Birthday Celebrations, IBM Bedfont 23 March 2011

Members of the WUG Board, past and present, cut the birthday cake. From left to right: Nigel Gale (founding Chairman), Simon Maple (IBM Representa tive), Alan Chambers (WUG founder and Board member), Chris Mason (Treasurer throughout the WUG's 10 years), and Jonathan Marshall (IBM Representa tive). Photo by kind permission of Alan Chambers.

On 23 March, over 200 members of the WebSphere User Group UK (WUG) and members of the WebSphere Integration User Group UK  descended on IBM Bedfont Lakes, Feltham, UK for the WUG’s spring-time gathering (2 annual meetings; March at Bedfont, September at Edinburgh). Smart421 was there with one or two of our bigs guns. More on that in a moment.

As longstanding members of the WUG, we get a lot out of these meetings – perhaps ‘cos we also put  lot in. A significant number of our customer engagements require deep Java skills and several depend on WebSphere technologies in some way or another. Most speakers are IBM-ers, many out of Hursley, or sometimes further afield. Delegates from IBM, end-users of WebSphere and IBM business partners make up the remainder of the rich ‘ecosystem’ that is today’s WUG.

Smart421 Lead Consultant, Stu Smith, had his proposal selected by the Committee, which carried the catchy little title ‘Software Development Life-cycle with Message Broker in end-to-end SOA’ [Download the slides]. Nevertheless, Stu pulled a bigger crowd than usual with his piece and people seemed to appreciate his content and the very good Q&A session he triggered; for the last session of the day, it was a lively interactive exchange among attendees, who by then probably had their minds on the drinks reception or what they had to do to catch the early train home.

Alan Mangroo, one of our elite tekkies, attended for the educational tracks and was last seen diving in and out of sessions he has pre-selected. Knowing him, he’ll have made copious notes, so try to make a point of reading his separate blog [posted 08 April, click here].

The WUG has been running for ten years in the UK (yeah…I know !) and the Committee didn’t run past the opportunity to celebrate with drinks and two rather impressive cakes to mark the occasion. I’ve included a photo, courtesy of Alan Chambers, so you can share the moment with us. Proof –  if ever you needed it – that even tekkies have soul, so long as you bring the candles ;o)    Actually, I only remember cute miniature marzipan figures: developers with laptops.

As is often the case, Smart421 ran a on-stand prize draw for a bottle of Bollinger and appropriately Nigel Gale, the WUG’s first chairman (pictured, far left), was the one who swooped the 1st prize. Good timing I’d say. Hope you enjoy that, Nigel.

This years Autumn JAX conference was actually two conferences in one. The OSGi DevCon shared two days with the main JAX event. Conference delegates were then free to attend sessions from either conference. This meant that developers with little experience of OSGI really benefited from gaining insight across sessions. This years event was very well attended, the huge conference room in the London Novotel was packed, with people standing. The sessions were only 50 mins each which meant they were kept concise and to the point, so no chance of getting bored. The smaller rooms were intimate and made asking questions much less intimidating. You could feel the enthusiasm of everyone during the breaks, people were chatting and networking rather than hiding away behind their laptops. Lets not forget the lunches, the food was excellent, a great choice of dishes to cater for all tastes.

The first session I attended was Ted Newards keynote speech entitled ‘Rethinking Enterprise’. Last year Ted spoke about developers needing to find their unique selling point in world of cheap developers. His speech this year started off along the same lines. He asked the question that all developers would like answered… “What do I do to ensure I don’t get replaced by a cheaper developer?” What does this have to do with rethinking the enterprise, I wondered?

We are all programmed to jump to the most obvious solution to a problem. When at school we learn a single subject then get tested on that subject. We learn another subject then get tested on that subject. Even if the questions in our test are different to what we are used to it is a good bet that they are related to the subject we have just learnt about. As adults we attend training courses. After attending a course we return to work with our newly gained knowledge and our boss assigns us a new project. We automatically assume that the new technology we have just learnt about is going to be what we should use to implement this new project. Why else would we have been sent on the course? The same goes for enterprise applications. When someone asks us to design or implement an enterprise application we automatically think J2E and more often than not EJB . Admittedly this is a highly simplified and contrived example, but there is no doubt that we have pre-programmed solutions to problems that we are asked to solve. We may think that we are choosing the ‘Best practice’ solution, however ‘Best practice’ suggests that we have finished and there is no room for improvement. Ted challenged us to rethink this and not settle on the first solution that comes to mind. We should really look for ‘Good practice’ as this allows us room for improvement. This kind of thinking allows us to design solutions that others may not think of and therefore give us that advantage and unique selling point that we need. Don’t just settle on the obvious solution, explore the less obvious and you never know what you may find.

Another interesting and more technical session was on the subject of RESTful services. This session was run by Neil Ford from Thoughtworks. SOAP based web services have been around for a while now and are widely used. This session started off with a brief introduction to REST and its benefits over SOAP style web services. SOAP based web services are often orchestrated using a heavyweight BPEL engine. This often couples together the application providing the SOAP service and the BPEL engine. The BPEL engine must maintain the state of the process, the applications involved in the process may also maintain knowledge of the process state. This is where HATEOAS provides a mechanism to manage the state in the applications that are involved in the process. At its most basic level a REST service request is simply an HTTP request using one of the four HTTP verbs, GET, POST, DELETE, and PUT. These requests are always resource based, so you GET an order, or DELETE an order etc. The parameter string of the request URL contains all the relevant input data. REST and HATEOAS provides the ability for the application providing the service to return the set of potential next links, ie state transitions. The state transitions of the process are stored in the links rather than a heavyweight BPEL engine. A simple example of this idea that we have all seen is a search engine result page. You submit a query to a search engine and are then presented with an HTML page of results. If this were a BPEL process the BPEL engine would know which page of the results you are viewing. If you click ‘next page’ the BPEL engine would know what page is coming next and return that for display. With HATEOAS the links on the page contain the actual next page number in the URL. So if we are viewing page 2 the next page link would request page 3 and the previous page link would request page 1. There is no need for the search engine to know what page you are viewing. The state of your search process is implied by the possible transitions stored in the links, therefore encouraging a stateless approach. HATEOAS may well be the future of SOA that provides an alternative to the usual SOAP based web services.

The final area that I’m going to write about was a session entitled “Software Quality – you know it when you see it” by Erik Dörnenburg. We all want to write quality software, but how do you spot quality software? We often have to work code that was written by someone else, or code that has been around for years evolving as requirements change. If we are working on a new project or legacy code we need to quickly determine problem areas and issues that exist. We need a view of the application. Our introduction to the applications will probably be a diagram consisting of some boxes with lines joining them together, the 30,000 feet view. If we are lucky a detailed design document may tell us what the application should look like, but these are often out of date and lacking in real detail so little use when looking at code quality. Lastly we have the code itself, the 0 feet view. Far too much detail when it comes to understanding an application. What we need is the 1,000 feet view that is generated from the code itself. Erik took us through several visualisation techniques that provided a very fast way of understanding an application. The “Code City ” was probably the most interesting visualisation.

This is essentially a 3D map of the application that allowed us to quickly understand the structure of application. In the above example classes are represented as buildings, while packages are represented as districts. Problem areas are easily spotted. For example a huge building may highlight a huge hard to maintain class. Dependencies between packages could be drawn onto the city allowing us to spot problem areas very quickly. These kinds visualisation give us that 1,000 feet view where we can see potential issues very quickly. As with all these new techniques it is the initial setting up the visualisation that is the time consuming part, but as tools mature this could be the future of metrics and tools such as Checkstyle.

Smart421 normally attend the Websphere User Group, however this is a very specialised event that may not interest many Java developers. I would certainly recommend the JAX conference to any Java developer no matter what level of experience you have. In our day jobs we often concentrate on a just few technologies for several months while working on a project. We don’t get the time to explore technologies, frameworks etc that give us the inspiration to ‘Rethink the Enterprise’ or just give us a head start on our next project This kind of conference is a good way to find out about cutting edge Java technology at a useful level of detail.

Next Page »

Follow

Get every new post delivered to your Inbox.

Join 1,122 other followers