Showing posts with label AJUG. Show all posts
Showing posts with label AJUG. Show all posts

Wednesday, December 7, 2011

DevNexus 2012 - Registration is Open

The Atlanta Java Users Group is delighted to announce that registration for DevNexus 2012 is now open. In order to reserve your ticket, please go to:
DevNexus 2012 will be held on Wednesday, March 21st and Thursday, March 22nd at the Cobb Galleria Centre in Atlanta, GA. We already confirmed many amazing presenters covering a wide array of crucial technology topics.

In addition to providing great content for Java developers, DevNexus is a very valuable networking opportunity. This event attracts Java/JVM talent from diverse backgrounds, be it large corporations, consulting organizations or independent technology connoisseurs. You will have an opportunity to discover what other development teams are using as their favorite tools and practices.

Why should you attend DevNexus 2012:
  • Best Value: $185 Early Bird price (until Feb 1) for two full days of technology immersion and comaraderie.
  • Ask questions to world-class experts and fellow developers
  • Learn how to move your applications into the cloud (covering Cloud Foundry, Heroku, Google App Engine, OpenShift)
  • Learn Agile Best Practices & Tools
  • Learn more about core Java topics as well as other languages on the JVM
  • Learn more about building rich (mobile) web-application applications, e.g. using HTML5
  • Hear about the latest developments from JBoss and SpringSource
We have already lined-up some impressive speakers, with many more to be announced in the upcoming weeks:
  • Tim Berglund - Covering NoSQL topics
  • Patrick Curran - Chairman of the JCP, keynote speaker
  • Hans Dockter  - Founder of Gradle
  • Ben Evans - Covering various core Java topics including Java 8
  • Mark Fisher - Spring Integration Lead, covering Enterprise Integration Patterns (EIP) and Cloud Foundry
  • Barry Hawkins - Covering Agile Methodologies
  • Josh Long - Spring Developer Advocate
  • Pratik Patel - Mobile/Web, Java
  • Rossen Stoyanchev - Spring MVC Lead
  • James Ward - Covering Heroku and Play framework
Fore more details on speakers please visit:

http://www.devnexus.com/s/speakers

We also would like to thank our sponsors for their support in making DevNexus a success:

Gold Sponsors
Silver Sponsor
We hope to see you all at DevNexus, and please register for this incredibly valuable event at:


Thursday, March 3, 2011

Advanced Java, JRuby, Spring, Google, JBoss and DevNexus 2011

DevNexus 2011 - March 21st & 22nd (www.devnexus.com) - Registration will be closing soon.

Several large teams have already registered and this is the best event to have your team attend - the injection of new technologies, techniques and ideas from some of the world's best technologists as well has having other professional software developers to mingle with. We will soon hit max capacity for the event so please complete your registrations today.

The DevNexus organizing committee looks for the best speakers and hottest topics in the software development industry and this year we have had a tremendous response from notable presenters. The following are just a few of the DevNexus speakers:

  • Jevgeni Kabanov - the founder and CTO of ZeroTurnaround (JRebel) will be addressing JVM memory management and classloading - these are excellent sessions for your most hardcore Java coders
  • Dick Wall - of the JavaPosse will dive into functional languages and overall best practices for software practitioners
  • Bob McWhirter - the prolific founder of open source solutions such as Codehaus.org, Drools and Groovy will address Ruby/JRuby on his new project TorqueBox - the power of Ruby raised to the power of JBoss
  • Claus Ibsen - the project lead for Camel and co-auther of the "Camel in Action" book will focus on enterprise integration
  • Mark Fisher - the project lead for Spring Integration will address AMQP and the "Cloudy Future of Integration"
  • Hans Dockter - the founder and project lead for Gradle will focus on automated build systems
And many more notable speakers discussing great topics...http://www.devnexus.com/s/speakers
  • Hadoop 
  • Git 
  • Scala 
  • Arquillian 
  • Flex
  • jQuery 
  • Sproutcore
  • Selenium 
  • Gradle 
  • Apache Camel 
  • Spring Integration, Mobile, Social 
  • JBoss
  • TorqueBox 
  • Apache Shiro 
  • GWT 
  • Google App Engine 
  • NoSQL 
  • The Future of Java
  • ...
If you wish to subscribe to future Atlanta Java Users Group Announcements, please visit
http://www.ajug.org/confluence/display/AJUG/MailingLists

We look forward to seeing you at future AJUG Events and DevNexus 2011.

Sincerely,
Burr
770-714-3292

Tuesday, January 25, 2011

Marshal Json data using Jackson in Spring MVC with Jaxb Annotations

The title is quite a mouthful but let me explain...For the DevNexus.com website I want to provide the website's data not only via XML but also via JSON in order to provide maximum flexibility for other consuming services. E.g. Pratik Patel pinged me the other day that he intends building an IPad client and Charlie Collins is planning to update his DevNexus Android client, which he originally created for the 2010 conference (The pressure is on gentleman ;-).

The DevNexus website is based on Spring MVC 3.0 and provides RESTful Urls that render Html views of the data (Targeting traditional browser clients as well as mobile client using Spring Mobile and jQuery Mobile).

Thus, I configured Restful endpoints as described in my last blog post. The easiest way to marshal JSON in Spring MVC is via the Jackson Java JSON-processor. Spring has a few documentation pointers regarding that. Theoretically, the setup is fairly simple and in its simplest forms means to just put the Jackson jar file onto your class path and adding mvc:annotation-driven to your Spring Xml Context file (See Chapter 15.12.1 of the Spring documentation). No sweat.

To get started more specifically with Jackson, here are some blog entries that I came accross while diving deeper into it:
While the tutorials may make you think that serializing JSON is happening defacto automatically, it turned out, that I had to fine-tune my domain model for Jackson. My domain model objects have bi-directional relationships and and I was getting a ton of errors of type:

java.lang.StackOverflowError - org.codehaus.jackson.map.JsonMappingException: Infinite recursion (StackOverflowError)

You can configure Jackson's marshalling behavior by annotating your domain model objects. However, those annotations are Jackson specific and I already was annotating my obejects with Jaxb annotations for the Xml marshalling of data.

Well - cool beans - , it turns out, Jackson can indeed use Jaxb annotations to renders Json data (added with version 1.1 of Jackson).

But how do I configure Jackson? How do I make it work in my Spring environment? I came across 2 blogs, that combined, provided the necessary solution.

The first example I found here, which provides a really nice example.

Furthermore, I not only wanted to configure Jackson to use Jaxb annotations, but I also needed to make it work for my Spring environment. For that Kyrill Alyoshin has some good information on his blog (
He also details how to make Jackson work better with Hibernate, which sounds interesting and I may return to his blog entry more specifically for that.).

Basically the best way to integrate Jackson and Spring is to create a custom ObjectMapper class that enables Jaxb support and which can then be injected into Spring's MappingJacksonJsonView.

Here are the things that were needed to get things going for my project -

First, add the following Maven Dependencies (jackson-xc provides the additional Jaxb support):
<!-- Jackson JSON Mapper -->
 <dependency>
     <groupId>org.codehaus.jackson</groupId>
     <artifactId>jackson-core-lgpl</artifactId>
     <version>1.6.4</version>
 </dependency>
 <dependency>
     <groupId>org.codehaus.jackson</groupId>
     <artifactId>jackson-mapper-lgpl</artifactId>
     <version>1.6.4</version>
 </dependency>
 <dependency>
     <groupId>org.codehaus.jackson</groupId>
     <artifactId>jackson-xc</artifactId>
     <version>1.6.4</version>
 </dependency>

The custom ObjectMapper:
import org.codehaus.jackson.map.AnnotationIntrospector;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.xc.JaxbAnnotationIntrospector;

public class JaxbJacksonObjectMapper extends ObjectMapper {

 public JaxbJacksonObjectMapper() {
  final AnnotationIntrospector introspector
      = new JaxbAnnotationIntrospector();
  super.getDeserializationConfig()
       .setAnnotationIntrospector(introspector);
  super.getSerializationConfig()
       .setAnnotationIntrospector(introspector);
    }

} 

The SpringContext configuration that wires everything together:
    <bean class="org.springframework.web.servlet.view
        .ContentNegotiatingViewResolver">
        <property name="order" value="1" />
        <property name="ignoreAcceptHeader" value="true" />
        <property name="mediaTypes">
            <map>
                <entry key="xml"  value="application/xml"/>
                <entry key="json" value="application/json"/>
            </map>
        </property>
        <property name="defaultViews">
            <list>
                <bean class="org.springframework.web.servlet.view
          .xml.MarshallingView">
                    <property name="marshaller" 
                      ref="jaxbMarshaller"/>
                </bean>
                <bean
                    class="org.springframework.web
.servlet.view.json.MappingJacksonJsonView">
                    <property name="objectMapper"
 ref="jaxbJacksonObjectMapper"/>
                </bean> 
            </list>
        </property>
    </bean>

Tuesday, January 4, 2011

Spring Mobile, jQuery Mobile and SiteMesh

I just realized that I haven't published a blog entry in a while. Time just flies by. Anyway, I am in the midst with several other volunteers to prepare for the Atlanta-based DevNexus developer conference which will take place March 21-22.

For this year's conference I reworked the conference website application using Spring (MVC) 3.0, JPA 2.0 etc. In addition to standard clients, I started looking into supporting mobile clients as well.

My requirement was to provide a decent looking mobile interface in a reasonable amount of time (heck, it is all done during my spare-time afterall). Plus, I wanted to support multiple mobile devices at once. Out of that reason I ruled out a native client implementation (at least for now).

Another option, would have been to look at other development frameworks such as PhoneGap and Appcelerator, something I may still have to do down the road.

As I have been using jQuery quite a bit, I started exploring it using either jQTouch or jQuery Mobile. I opted into looking at jQuery Mobile as it is the official jQuery sanctioned project.

As it turns out, you can easily create create some nice looking UIs using jQuery Mobile. As an example, just point, your mobile browser, e.g. Android to http://www.devnexus.com/. This is pretty impressive considering that I have been using an Alpha 2 version with just standard theming and functionality.

I still have to work on the detail pages, but the main landing page looks fairly nice out of the box using minimal amounts of code.

On the server-side, I am using Spring Mobile, which currently is available as a M2 release. What Spring Mobile allows you to do is to detect from within your Spring MVC controllers, whether the incoming request originates from a mobile device or not.

If you need to detect specific device capabilities, you can even use a WurflDeviceResolver, but for my use case I simply need to know whether a mobile device request is coming in or not. If so, forward to a mobile version of the respective controller's jsp page.

One, question I had to solve was how to make everything work with SiteMesh, which I use for templating purposes. As I use the same Urls for mobile and standard clients (No site-switching), I ended up needing to create a custom SiteMesh DecoratorMapper extending AbstractDecoratorMapper.



public class SpringMobileParameterDecoratorMapper extends AbstractDecoratorMapper {
    private String decoratorName = null;

    public void init(Config config, Properties properties, DecoratorMapper parent) throws InstantiationException {
        super.init(config, properties, parent);
        decoratorName = properties.getProperty("decorator.name", "mobile");
    }

    public Decorator getDecorator(final HttpServletRequest request, final Page page) {

        final Device device = DeviceResolverHandlerInterceptor.getCurrentDevice(request);

        if (device != null && device.isMobile()) {
         return getNamedDecorator(request, decoratorName);
        } else {
         return super.getDecorator(request, page);
        }

    }
} 

It may not be the bestapproach to have a hard dependency onto Spring Mobile in my SiteMesh DecoratorMapper...but it works nicely so far.

Wednesday, August 18, 2010

Google, Oracle and JUGs

One might think that developing software (web-applications in my case) is a pretty involved endeavor. It is a constant learning experience: from understanding the business domain of your customers for each and every project, to figuring out which frameworks to choose (How many web-frameworks to we have?), all the way to understanding the broader IT landscape.

Thus, in a nutshell life as a developer is busy...and then Oracle sues Google, adding just a tad more complexity to the mix (Things were also much easier back when it was all about Microsoft versus he rest of the world :-). Additionally, as the leader of the Atlanta Java Users Group, I wonder what kind of implication this development will have for our community of Java developers.

Following the various information sources, there is certainly no black-and-white battle going one, albeit Google seems to be certainly in a more favorable position among developers. A good source for gauging the mood within the Java community is to follow the mailing list of the global JUG community. Sentiments there have been ranging from surprise to shock.

Bruno Souza, THE Java advocate in Brazil (he also spoke at AJUG in Atlanta in May 2007) made probably the most balanced statements regarding the just started litigation process between Oracle and Google. Thus, from a technical/legal perspective you may very well argue in either direction, in favor of Google or in favor of Oracle.

However, I am concerned about the impact this may have in regards to our community and the leading edge open-source developers, that may again increasingly look elsewhere (Remember the wave of developers that left for Ruby on Rails a few years back?). 

I will cautiously follow the developments over the next couple of months and I hope that the negative impact to our community can be minimized. I mean, there is certainly the hope that Oracle and Google come to a quick agreement and maybe make Android an official part of the Java platform (too overly optimistic?)

Here are some pointers for further information:

InfoQ had a short article summarizing the latest developments: http://www.infoq.com/news/2010/08/oracle_sues_google

Javalobby has an insightful article regarding Oracle's open-source activities, e.g. essentially shutting down OpenSolaris: http://java.dzone.com/articles/oracle-and-open-source-list

JavaWorld takes it even a step further and ask whether SpringSource should be worried as well: http://www.javaworld.com/community/?q=node/4919

Many high-ranking Java advocates left Oracle in recent months, and Java inventor James Gosling is becoming increasingly outspoken. His blog provides some interesting insights:

http://nighthacks.com/roller/jag/entry/the_shit_finally_hits_the
http://nighthacks.com/roller/jag/entry/quite_the_firestorm
http://nighthacks.com/roller/jag/entry/cynical_chuckles

(Interestingly, looks like too many people were trying to read read James Gosling's blog on 2010-08-16 because his blog was not accessible for a good portion of the day)

The following link points to an official statement by Oracle regarding its patent policy in 1994. Things seemed to have changed since then, unfortunately:

http://www.bustpatents.com/articles/oracle.htm

Thursday, April 29, 2010

Martin Fowler in Atlanta - DSLs, Agile, CI

I went to Martin Fowler's talk last night night at the Crowne Plaza Hotel next to Perimeter Mall. Martin Fowler is the Chief Scientist at ThoughtWorks and it has been a great experience to finally hear him speak personally. He have three mini presentations:

His first talk was about domain specific languages (DSL) covering all the different variation of DSLs - external DSLs (XML, custom language) and internal DSLs (e.g Ruby). Martin Fowler also had a slide about Language Workbenches - I saw an article on his website covering that subject, which I need to look at in the next few days.

An interesting point I thought he raised was, to focus on making codified business concerns "readable" through DSLs rather than making the DSL available to business people to write rules, business logic etc. as this would be so much harder to achieve.

In his second presentation segment, Martin Fowler answered questions, that were submitted by the audience prior to his presentation, which covered various aspect of agile software development. He mentioned that the British newspaper The Guardian, is releasing software changes into production every 2 weeks.

The way to achieve this is through total test automation. He mentions that at Thoughtworks manual QA is reduced to exploratory testing and that any test plans etc. are part of the automated build process (More details about this at the end of this blog post)

A popular question these days also seems to be whether Java has peaked and whether also languages shall be considered. Martin Fowler, stated that "Java stalled" but it is not going away. However, he  also pointed to the fact, that you should consider more productive languages (especially for new projects). He mentioned an internal and informal Thoughtworks survey in which developers on average attested a 0.5-2.5x increase in productivety when using alternative languages (Ruby, Groovy, Scala, Clojure etc.). Martin Fowler himself expressed his preference for Ruby.  

His last talk was about continuous integration and continuous delivery. He talked a bit about different approaches regarding managing your source code in your respective source repository (e.g. Subversion). Specifically he talked about having feature branches versus just a single trunk (for the most part). It was interesting to hear him talk about that as at work we recently had that same discussion and we finally settled on having just a single trunk for all our regular development efforts. He said feature branches are just too painful when doing merges.

Moving on, he suggested to commit your code at least once a day, preferably even more often.

He then talked about continuous delivery, meaning to continuously push code into production in a controlled fashion. He mentioned a Suisse Insurances company that would deploy code into production once a day. As far as I remember he said that at Thoughtworks they typically deploy into production every two weeks to once a month.

In order to achieve that you must have really good automated testing at which point Martin Fowler talked about having a "build pipeline" which consists of the following phases:
  1. Commit Stage - Build project run tests (unit-tests), execution shouldn't take longer than 10 minutes. Deploy artifacts to artifacts repository
  2. Acceptance Stage - Deploy the application, run smoke tests, run acceptance tests. This stage may take much longer (e.g. 1-2 hours)
  3. Performance Stage - Run Performance Tests - This may take a very long time
  4. Deployment Stage - Deploy the application into production - It is important to be able to deploy by just  pressing one button. However, have a rollback option
Then he talked a little bit about Cruise, Thoughtwork's product to help implement that kind of continuous delivery. There is also a book coming out from Addison Wesley called Continuous Delivery.

That basically conclded his talk - there was one further question from the audience that caught my attention. Chris Curtin (CTO of Silverpop) asked him about the Devops movement. Personally I was unaware of that term. In my understanding, this fairly new concept brings developers and operation teams closer together.

Martin Fowler found that concept to be a very positive thing saying that if a production issue was caused by a developer, he should carry the pager for that and fix it. I have to learn more about the Devops movement - here is an interesting blog entry that seems to summarize it quite well: http://www.jedi.be/blog/2010/02/12/what-is-this-devops-thing-anyway/.

A great evening - learned a lot.


Tuesday, March 9, 2010

DevNexus Day One

Alright, this is just a super quick update on day one of our DevNexus conference. Day 1 went very smoothly with no major hick-ups. We have around 340 attendees (Incl. sponsors, speakers etc.), which constitutes a 40% growth compared to last year!!! Thanks to all that attended!

I attended the following sessions:
  1. "Better Software with Java and Flex" (James Ward)
  2. "Next Generation Development Infrastructure: Maven, M2Eclipse, Nexus & Hudson" (Jason van Zyl)
  3. "Google App Engine: Cloud vs Cluster" (Toby Reyelts)
  4. "The 90-Day Startup with Google AppEngine: A Case Study" (David Chandler)
  5. "Effective Java" (Venkat Subramaniam)
  6. "Smithing in the 21st Century" (Neal Ford)
The day finished off with a cocktail hour and I met some nice folks from The Home Depot and I spent the rest of the eventing chatting with the hard core of the crowd which involved mostly speakers such as Toby Reyelts, Charlie Collins, Barry Hawkins, James Ward, Pratik Patel and Greg Luck. After dropping Greg off at his hotel, I finally made it home right around midnight.

This has been a very good day. Time to get some sleep. See you all tomorrow at day 2!

Monday, March 1, 2010

DevNexus has its own Android App

Pretty cool - Charlie Collins created the first Android phone app for the DevNexus conference. Check it out at: http://code.google.com/p/and-conference/. Thanks Charlie!

Also, in case you haven't registered for DevNexus, yet. Please sign-up because registration is closing March 3rd.

Tuesday, February 2, 2010

Atlanta DevNexus 2010 Conference - Status

We at AJUG are humming along preparing for DevNexus (March 8-9, 2010). Today we got confirmation that Jason van Zyl from Sonatype is speaking at our event. He is the founder of Apache Maven and Sonatype. I added his bio and abstract to the website tonight. Thus, check out our presentation line-up for details.

Also, we got our very own Twitter account (Many thanks to Barry Hawkins for organizing this!!). Over the next few day I will add it to the DevNexus website and we will post noteworthy updates through that channel.

Thus, start following us at: http://twitter.com/devnexus/

Thursday, January 14, 2010

Registration Opens for DevNexus 2010

Here is an annoucement that I would like to get out regarding the Atlanta Java Users Group's (AJUG) professional developer conference:

The DevNexus conference will be held in Atlanta March 8–9, 2010 and registration is now open. DevNexus covers a wide range of the most exciting topics related to the Java™ platform.
This year, our sophisticated line-up of speakers covers dynamic programming languages such as Scala and Groovy, as well as Rich Internet Applications (RIA) such as Adobe Flex and Google Web Toolkit (GWT). Furthermore, we have a dedicated track on Google technologies, which not only covers GWT but also Google App Engine and Google Wave. Additionally, DevNexus has sessions covering popular open source projects such as Spring, Maven and HtmlUnit, as well as presentations on software architecture, agile software development methodologies and much more!
Please join us for this exceptional event.
The organizers of DevNexus are focused on making sure the conference provides the best possible educational value by offering attendees a special early bird rate of $150 if they register between now and February 16. Regular admission for the two-day conference is $185, a group discount is also available. The ticket price includes the two-day conference pass as well as meals.
This is the second DevNexus event, which is the continuation of the annual AJUG developer conferences that started in 2004.
For further information: http://www.devnexus.com/

Tuesday, January 12, 2010

DevNexus 2010 Conference Updates

I have spent a few late nights lately, to get the preparations for the Atlanta DevNexus conference into the final stage. The line-up of speakers is getting fuller by the day. I am personally really excited that James Ward (Adobe), Keith Donald (SpringSource) and Lex Spoon (Google) are presenting and we have many, many more presenters covering a ton of material.

I will try my best to update the website (http://www.devnexus.com) with the current list of speakers and presentations, soon.

Which also reminds me to finalize our press-release to announce the conference...I hope to get all that done within the next 2 days. Thus, watch http://www.devnexus.com/ for updates. And please sign-up!
For that price, you won't get a better educational value (...brought to you by your friendly Atlanta Java Users Group)

Friday, December 4, 2009

Great Time at the Scala Meeting

I had a great time at the Scala meeting here in Atlanta, tonight. This was the first time for the Scala group to meet in a central location (Same place as the AJUG meetings) and the group was able to double their attendance to almost 20 attendees.

For me it was also very nice to meet Lex Spoon, co-author of 'the book' on Scala 'Programming in Scala'. Also, this is a small world - As a Java Posse fan, it was interesting to realize that John Weathers, the organizer for the Scala Meetup Group and Dick Wall worked together in Atlanta. Besides being a big advocate for Java, Dick is also very involved with the Scala scene in the Bay Area.

Anyway, seeing the potential of Scala combined with the talent we are having here in Atlanta, there is a great bright future for the Scala community, and with it the larger JVM community. These are exciting times!

Wednesday, November 25, 2009

Scala Meetup in Atlanta (3 Dec 2009)

Just updated the AJUG website. recognizing that various JVM languages are gaining popularity, we will be starting to sponsor the Atlanta Scala Meetup (With meeting space). The next meeting is on December 3rd, 2009 at the usual AJUG location (Holiday Inn Select)

For more details, please visit: http://www.ajug.org/ and http://www.meetup.com/atlanta-scala/.

¡Viva La JVM!

Friday, November 20, 2009

Oracle, Flex and MOS - a sign for Java FX?

Ok, while we are still waiting for the Oracla/Sun purchase to go through, there is also lots of speculating about what might happen with Sun's technology portfolio moving forward.

Since the world is moving towards richer UI interfaces for the browser, I am always in the struggle to assess which technology stacks are most appropriate to learn (GWT, Flex, plain HTML + your choice of JavaScript library such as JQuery, YUI etc.). Thus, particularly as a Java developer I am of course interested in the outlook of JavaFX - I certainly "wish" it be successful, but it still seems to be lacking in various areas (Component libraries, JVM modularization, 'community'). Furthermore, there has not been any Oracles/Sun statements about the future of JavaFX as far as I know (Please comment if I am wrong)

There was a higher-level article in InfoWorld yesterday discussing the future of Sun's technologies:
http://www.infoworld.com/d/developer-world/java-what-does-its-future-hold-978

Oracles involvmen into Flex

This brings me to the main trigger point that caused me to this blog entry. A few days back, I read a news article at Heise Online, a large German IT news portal, stating that Oracle has some major issues while switching over to their new support system 'My Oracle Support' (MOS):  


http://www.heise.de/ix/meldung/Oracles-neues-Support-Portal-aergert-Kunden-856450.html

You can read more the issues here:
The more interesting fact, though, is that their entire new support system is implemented in Adobe Flex. Unfortunately, I was unable to find more technical details via Google, but that is a fairly substantial deployment.

I found another interesting little piece of information on stackoverflow:

http://stackoverflow.com/questions/1601444/flex-oracle-open-world-2009

According to James Ward (Flex evangelist at Adobe), Oracle showed more Flex-based applications this year at Oracle OpenWorld 2009 including: My Oracle Support, Social CRM, Siebel Gadgets and Enterprise Manager.

Can you draw any conclusions out of this regarding the future of JavaFX? Probably (hopefully) not, but it shows that Oracle has already made a significant investment into Adobe Flex. 


Adobe Flex and JavaFX in Atlanta

To give you some idea of how the market looks like here in Atlanta, Ga:

At the last meeting of the Atlanta Java Users Group (November 2009), Burr Sutter our group's president asked the group (80+ attendees) whether they use Adobe Flex and a considerable amount of hands went up (I guess at least 1/3).  Nobody in the rooms did anything with JavaFX...

* * * *

PS: On a more frustrating side-note: While writing this blog post I visited http://www.javafx.com/ and my browsers froze (FF on Mac), causing me to re-type a good portion of my blog entry (Sigh). 

Friday, October 23, 2009

How to Teach CS to Children

At the Atlanta Java Users Group (AJUG) we had an awesome presentation by Barbara Ericson on how to inspire children to learn more about computer science (CS). It was a really informative session. As director of Computing Outreach at Georgia Tech University she helps prepare curricular materials for high schools.

As such, she gave us a detailed overview of the state of CS teaching in Georgia and the nation as a whole. Furthermore, she gave us an overview of all the cool software tools that help teach CS concepts including:
She also talked about some interesting robotic toys that help in her efforts:
I wish I had had the stuff when I grew up...

There is even a website out there that provides free information on activities that teach CS concepts without a computer: http://csunplugged.org/

Lastly, if you have children of your own, you should certainly check out Barbara Ericson's presentation and you can also find many more resources on her website: http://coweb.cc.gatech.edu/ice-gt

Sunday, August 30, 2009

jRecruiter is deployed and live

Finally...it took ways to long. Last Sunday I finally made a new production deployment (Version 2.0) of jRecruiter). jRecruiter is the job posting service of the Atlanta Java Users Group (AJUG). This version was a long time in the making. I hope that from now on I can make new feature deployments more swiftly. The new version is accessible at: http://www.ajug.org/jrecruiter/

Here is a list of changes:
  • (Almost) No more Struts XML-configuration files. jRecruiter uses the Struts 2.1 convention plugin for annotation based configuration.
  • Many Spring Beans dependencies are now configured using annotations (Spring 3.0)
  • Sophisticated data-grid support using jMesa
  • Google Maps integration (web (Javascript), Pdf (Image) and Flex (Flash))
  • Hibernate Search support
  • RSS feeds for the latest 20 jobs using ROME
  • Social bookmarks on the job posting list
  • Application is now Struts 2.1 based
  • Using jasypt for password digesting
  • Administrative pages are SSL encrypted
  • Improved charting (JFreeCharts)
  • Using reCAPTCHA for the registration page
  • Implemented email account verification
  • Now job postings and updates are send to Twitter (http://twitter.com/ajug_jobs/)
  • PDF Export of Job Posting Details (using iText)
  • Switched from username-based logins to an email-based system (usernames are still supported on the backend (e.g. administrative logins)
  • Some performance improvements --> CSS and JavaScript files are now merged, minified and GZipped using JAWR)
  • XML web services for providing job posting data to Indeed.com (Still need to do the actual integration but the XML feed is there)
  • Using jQuery for most Javascript needs
  • Maven project consists of multiple modules now (web, server, flex)
  • I18N: Added partial support for German
  • Extra bonus: Added a simple Adobe Flex front-end using Spring Blaze DS for server integration

Wednesday, July 29, 2009

Integrate Twitter and bit.ly into your Java App

I am in the final stage of developing towards the 2.0 release of jRecruiter. It is the job posting service of the Atlanta Java Users Group (AJUG) and as such I devote some of my spare-time towards it. It is a great way to explore all kinds of different technologies. Thus, last weekend I had the idea that it might be a cool idea to let the system "tweet" about job posting additions and updates. Here are my findings.

First I looked at available Twitter libraries for Java:
After some considerations, I chose Twitter4J. To me, it seemed to be the most active of the three projects. Even better, it has a BSD-style license. Using Twitter4J is super simple:

Twitter twitter = new Twitter("username", "password");

try {
twitter.updateStatus("My tweet");
} catch (TwitterException e) {

}

There is so much more you can with Twitter4J. Check out its documentation for further details.

Secondly, as each tweet contains a link back to the job detail page in the main application, I was looking into ways to shorten URLs. That way, I can store more job posting related data within the only 140 characters available for each Twitter status update.

The original service for this is TinyURL. However, it looks like bit.ly has more traction these days and is also used directly by Twitter itself. The nice thing about bit.ly is that they have developer accounts and are offering a web service API for doing URL shortening.

Even better, there is already a Java library available for using bit.ly called bitlyj. Using bitlyj is actually almost as equally simple to use as Twitter4j:

final Bitly bitly =
BitlyFactory.newInstance("username", "your_bitly_api_key");
try {
BitlyUrl bUrl = bitly.shorten("http://www.google.com/");
URL url = bUrl.getShortUrl();
} catch (IOException e) {

}

Unfortunately, you have to build bitlyj yourself, but thanks to Maven it is a piece of cake. One thing I noticed, is that the error handling of the library could be more robust. Accidentally, I was using my bit.ly password, initially. However, bit.ly provides an API Key. By the way if you ever wonder where you can get that API Key-It is right in your account page. Anyway, the library needs some attention but for my simple use-case it worked fine.

Thursday, July 23, 2009

MapReduce, Hadoop and Cascading at AJUG

Yesderday Chris Curtin, CTO at Silverpop, gave an awesome presentation on MapReduce, Hadoop and Cascading. I really enjoyed his wealth of real-world practical examples.

His presentation is available at: http://www.slideshare.net/chriscurtin
Thanks to John Willis, there is also a video recording available at: http://www.johnmwillis.com/ec2/hadoop-and-cascading-ajug-072109/

Wednesday, June 3, 2009

Book Review: Learning Flex 3

Learning Flex 3 by Alaric Cole is a great introductory book for Adobe Flex 3. If you have some basic experience with HTML, JavaScript and CSS, then you will learn the basics of Flex rapidly using this book as a guide. Some of the areas that are taught are:
However, if your professional background is in web-application development using Java or other OO languages, then you are probably more likely to skip or cross-read sections of the book. This is because the book starts out with practically no initial pre-requirements, and thus you might be familiar with some of the discussed areas.

The book gave me an excellent overview of Flex's capabilities, and they are all explained thoroughly and are easily understandable. Also, this may sound silly, but I particularly liked the refreshing fact that the book is in color, unlike most other IT books.

Furthermore, the book explained Data Binding (Chapter 7) very well. This is something I was not familiar with coming from the Java world. The chapter illustrates the concepts of one-way binding, two-way binding and making your own variables “bindable” using a metadata declaration, which is basically an annotation in Java parlance.

Another feature I liked a lot was View States (Chapter 12), which allows you to rearrange, group and reuse components within your application.

I wish the book provided more information for further reading. I understand that certain concepts are beyond the scope of this book, but it would have been nice if those had been mentioned and links or recommendations for further reading were provided.

For example, while AMF is mentioned on page 8 and on page 157 the book briefly talks about the Webservice and RemoteObject component, the book should have also mentioned BlazeDS as one of Flex's core technologies for communicating with back-end servers.

And for more complex applications, the book could have at least pointed out some of the available MVC frameworks for Flex and some pointers of where to read more about them (E.g. Cairngorm and PureMVC). Well, and then there is Degrafa, the declarative graphics framework…

While the author explains the aspects of using CSS in Flex applications very well, he could have further stressed that Flex uses a subset of CSS, which in certain areas behaves differently compared to CSS you more typically use in HTML pages. He should have enumerated some of those pitfalls.

Having said all this, these issues mentioned above are minor in nature. Overall, the book was a fun read! And particularly to Java web-developers, Flex may very well be THE contender for application user interfaces moving forward. One of the great things about Flex is that even the standard components look very good (and should be good enough to please your boss), and your application looks and behaves consistently across various browsers. Oh, and yes you can run the same application on the desktop as well (Chapter 15).

This book will definitely help you learn and master Flex, and you should be able to produce functional user interfaces quickly. In order to learn more about integrating Flex with your Spring powered back-end you may want to also consider looking at “Pro Flex on Spring”.

Saturday, March 28, 2009

DevNexus Report Part 2

In part one I provided an overview of attended DevNexus sessions. Here are some more details I took away from the presentations. The first days of the conference started out with Neil Ford, who always seems to provide those excellent but more high-level-off-the-beaten-path-type presentations (The presentation certainly contained an interesting Angelina Jolie picture). In his presentation he talked mainly about a quality work environment and how to be more productive as a developer. In his opinion giving developers their own office would be the best as it allows them to fully concentrate on the given development tasks. If that is not feasible and you're not working for Joel, then an open room configuration is the next-best compromise. And finally the worst solution: cubicles. Those suckers simply slurp your brain dry…



Well, afterward I headed over to Ari Zilka's talk about Terracotta. He gave an overview/introduction of Terracotta's capabilities. The presentation was quite similar to the talk we had at our monthly AJUG meeting last year but since then Terracotta published a new reference web application (Examinator) that really looks sharp and consist of a very good technology stack besides the fact that it uses Terracotta:
  • Spring MVC
  • Spring Webflow
  • Spring Security
  • JPA (Hibernate)
  • FreeMarker
  • SiteMesh
  • MySQL
One example he gave that stuck with me quite well, was the typical email registration process, when signing up for a new user account. You provide an email address, but before the account can be activated, you need to verify the email address using a verification email. However, using Terracotta, you're able to defer saving the email to the database until verification is complete and thus you can keep "state" information out of the database.

Afterward, I listened to Charlie Hubbard's talk on GridGain. This was an interesting talk in that GridGain is tackling distributed computing from a different angle than Terracotta. You are basically using it to farm out little chunks of data that are then processed by those nodes. It feels very reminiscent to using JMS with Publish/Subscribe with some processing logic bolted on.

After this talk I attended Bill Burke's talk on REST. It is interesting how various frameworks converge to a common point these days - RestEasy looked like Spring MVC 3.0 :-)

The last talk I visited was on Jared's Richardson's talk on 'using agile to optimize' which was a good talk. It reminds me that I still need to read his book Ship It!

At the end of the day we all headed down to the bar and had a few drinks. I met a former colleque of mine and chatted a while with Charlie Hubbard and Lance Gleason. A long good day…