Thursday, September 29, 2011

I joined the Java Code Geek (JCG) Program


Just a short notice: I am honored to be a member of the JCG Program as of today. The JCG program builds mutually beneficial partnerships between Java Code Geeks and community bloggers whose articles are of interest to the Java developer community.
The program simplifies the process of publishing selected blog articles by JCG members onto Java Code Geeks site. Through this process, our JCGs enjoy substantially increased visibility and our audience enjoys great content. I am looking forward to my first post there and I am really happy to present awesome content to all the JCG readers!

Day 0: JavaOne, Oracle Open World and Oracle Develop 2011


As every year in September it finally is time for a series of blog posts about the happenings in San Francisco. September is the Oracle month. Beside the big Oracle Open World we also have the little sister Oracle Develop and finally the no 1 Java happening JavaOne going on in California. Three reasons to pack your stuff and visit the states.

A380 - Lufthansa's big bird
And that is what I am doing these days. First highlight of my trip was the A380. Lufthansa's newest family member with roughly 510 tons start weight and 80m wingspread and 835qm wing surface took me from FRA directly to SFO. As you can see on the right, they have some nice external cameras to capture the surroundings. That's a good reason to introduce this years flickr photoset which is going to be filled during the next few days.

ACED Briefing
You may ask, why am I here already? Good question. The conferences start on Sunday with a lot of User Group stuff. But as usual we have a two day pre conference briefing at the Oracle HQ to get the latest news and some confidential additional information beforehand. Exciting as every year we are joined by some big names! Thomas Kurian, Executive Vice President, Product Development will give the opening address, Ted Farrell, Chief Architect and Sr. Vice President will talk about Oracle Development Tools, Mark Townsend himself, Vice President Database Product Management is going to provide the latest in Database updates. My highlights will be WebLogic/GlassFish/EE 7 update by Mike Lehmann, Sr. Director of Product Management and Wim Coekaerts, Sr. Vice President, Linux and Virtualization. Further on some ACED will also present about what they are doing and I am really looking forward to some open and informative discussions. As you might guess, these two days are packed with information and stressful. And the worst part: Some of the stuff we will here is presented under NDA (at least until Monday), so I probably have to delay some information a bit.

Thank you OTN!
What seems to be normal and usual: It is not. The OTN Team is doing a great effort to put those two briefing days together to get their ACED exclusively updated. This is something we all do appreciate and a big "Thank you!" goes out to Justin, Vikki and Lillian and another one to the "big names" on our agenda. Without their ongoing support for the ACE Program and the complete, open and integrated discussions they support every single ACED a lot!  I am looking forward to some great days in SFO and I am excited to meet soooo many people in person I used to catch up online only! The upcoming week will rock!

Friday, September 23, 2011

Jfokus - Data analysis about speakers


It's been some time since I published a post in my data analysis series. Following WJAX and Devoxx it's finally time to look at Jfokus. As usual, this was compiled from the sources available (compare links at the end of the post).  The CfP for Jfokus 2012 is open until October 1st.

General Information
Jfokus is the largest annual conference for software developers held in Stockholm, Sweden. The focus is system development with Java and surrounding techniques like Scala, Groovy and other dynamic languages. Jfokus also covers Android, HTML5, Cloud and agile methodologies. Attendees travel to Jfokus from most countries in Europe and a few from the rest of the world. During three days in mid February, you will have an great opportunity to keep yourself updated with the latest development through numerous interesting sessions. Jfokus is the best way for you to get the latest trends and buzz from people who live and breathe technology.

Speaker Distribution
Let's start with a look at the general distribution of the speakers over the years:
Compared to Devoxx and WJAX this is probably the smallest conference in terms of attending speakers. Even in the nearer past they still don't reach the maximum of the other two.
The plain numbers per year

Top 10 - always on
The most interesting part in this analysis are the top 10 speakers. As you might remember, this was the true reason to start looking at the speakers of different conferences. I don't want to see the same people speaking over and over again. So let's look at how Jfokus handles this:
To be honest, there is not a single speaker who has attended all five Jfokus from the past. A single 4-timer is Erik Hellman (SonyEricsson). He has attended every Jfokus as a speaker except the 2010 one. Next to this you only find the ones attending three different Jfokus conferences:

Dan Bergh Johnsson
Henrik Kniberg
Jonas Bonér
Kirk Pepperdine
Martin Gunnarsson
Pär Sikö
Patrik Fredriksson
Thorbiörn Fritzon

One or two-Timer
What is true for the top speaker is also true for the general distribution of the speakers. Compared with both Devoxx (19%) and WJAX (25%) there is an awesome small amount of returning speakers at 7%. If you are looking for fresh faces you probably have found the conference to attend.
Complete speaker distribution 2007-2011
And this seems not to be an accident. Compared with a very stable high rate of returning speakers at other conferences I looked at, you can follow this pattern nearly since the beginning:
Breakdown by years

Conclusion
This seems to be a fresh conference. Very few returning speaker and always new topics to listen too. This isn't obvious from the plain numbers of course. You could also argue, it must be a bad conference for speakers. But looking at the speaker names attending year after year it's quite obvious that this is not true. Some of them clearly wouldn't attend a small and badly organized conference. So this is anything but an accident. Let's speculate, that this is volitional and there to embrace change and new topics. A very brave decision.

Links
Jfokus Speaker Listing 07
Jfokus Speaker Listing 08
Jfokus Speaker Listing 09
Jfokus Speaker Listing 10
Jfokus Speaker Listing 11
Thanks to @matkar for providing some additional information and logos!

Thursday, September 15, 2011

The Heroes of Java: Martijn Verburg


The third part in my recent interview series: "The Heroes of Java".

Martijn Verburg
herds Cats in the Java/open source communities and is constantly humbled by the creative power to be found there.He is the co-lead for London JUG (a JCP EC member), runs a couple of open source projects and you can find him online moderating at the Javaranch or discussing subjects on the Prgorammers Stack Exchange site. Most recently he's become a regular speaker at conferences on Java, open source and software development and has recently wrapped up his first Manning title - "The Well-Grounded Java Developer" with his co-author Ben Evans. And it already covers Java 7.

General
Who are you?
"I'm a Dutch born Kiwi living in London (pubs!) who loves travelling around the world with my wife to meet interesting people in strange places. On the technology front, I'm an open source and Java ecosystem advocate who believes strongly in the creative power of passionate technical communities. I speak at conferences, write books, consult/train and run several technical communities (such as the London JUG) and open source projects (such as PCGen - http://pcgen.sf.net). It's rumoured that I'm the Diabolical Developer, but you can't believe everything you hear.
Sorry, I used four sentences :("

Your offical job title at your company?
"It varies, but Director is a constant one I guess."

Do you care about it?
"Nope! I change my title to suit what the situation requires, I think that titles are like hats - but then again, I'm very much a generalist as opposed to a specialist."

Do you speak foreign languages? Which ones?
"Dutch - conversationally. I left the Netherlands when I was ~5 and so my Dutch is a curious mix of adult/child vocabulary"

How long is your daily "bootstrap" process? (Coffee, news, email)
"At least a good 2 hours - I think I spend longer than most because of the number of technical communities and open source projects that I'm involved with, there's always a lot to deal with first thing in the morning, but I _love_ the variety and the social nature of it all."

Twitter
You have a twitter handle? Why?
"I have 3! @karianna is my main one where I talk about Java, open source, software development and travel. @java7developer is for "The Well-Grounded Java Developer" title that I'm co-authoring with Ben Evans (@kittylyst) which focuses on OpenJDK and Java. @diabolicaldev is my disruptive account, where I challenge some of the accepted practices and ideas around software development."

Overall I have them because it's now the defacto way to keep up with my peers in the community."

Whom are you following in general?
"Mainly technologists in the Java and/or open source ecosystem - with a smattering of friends and of course Stephen Fry (doesn't everyone?)"

Do you have a personal "policy" for twitter?
"Not really - I'm occasionally careful with what I say, but I think that most people partly love twitter because they get genuine truthful insights. My @diabolicaldev account can be particularly brutal, deliberately so ;-)."

Does your company restricts or encourages you with your twitter ussage?
"I run my own company and so it's fully encouraged :-)."

Work
What's your daily development setup? (OS/IDE/VC/other Tools)
"It depends on what I'm working on! I use Mac OS X, MS Windows but also frequently ssh onto *nix boxes for development. My main two IDEs are Eclipse and more recently Netbeans, but I'll happily use Textpad or vi. I mainly use SVN but have recently started exploring Git in more detail. I'm a huge fan of Build and CI, so Maven and Jenkins are always there and I'm starting to explore Gradle."

Which is the tool providing most productivity to your work?
"Most recently Netbeans (7.0.1) - they got this one right. It handles Maven + Polyglot programming without freezing due to memory requirements every x seconds (sorry Eclipse)."

Your prefered way of interacting with co-workers?
"Face to Face with a whiteboard and/or pair programming"

What's your favorite way of managing your todo's?
"I funnel everything through Gmail and Google calendar. I'm still trying to find the best way to translate that to my Kanban board"

If you could make a wish for a job at your favorite company: What would that be?
"Developer outreach / community leader / development enabler at a place like Zero Turnaround, Atlassian or Google I guess. But I'd find it very difficult to be tied to one organisation. Liz Keogh made me realise some time ago about what I really wanted in my career, and that is to "make people happy and more productive". In my case that means helping creative, smart developers free themselves from their chains so they can get on and kick butt."

Java
You're programming in Java. Why?
"I started out with it because I had to teach it at university to the year below me. I was mainly doing C++ at the time and Java quickly convinced me that it was a more productive language due to its memory management. I've stuck with it because of the incredible ecosystem that's sprung up around it and the fact that it's easy to read (most developers spend more of their time reading code than writing it). I've recently picked up smatterings of Scala, Groovy and Clojure - I see some exciting trends in polyglot programming coming up."

What's least fun with Java?
"Some of its verbosity could be reduced whilst still maintaining readability and of course functional programming is difficult, but hey - it's an OO language :-). It's nice to see the language moving forwards again and hopefully Project Coin can bring about more reduced syntax and the lambda JSR can open up some limited but useful functional aspects to it.

Oh yeah, and XML processing is still pretty annoying."

If you could change one thing with Java, what would that be?
"Modularisation (which is actually going to happen in Java 8 in one shape or another) - the CLASSPATH is less than ideal and constantly trips up people trying to learn the language. It would also give developers more freedom and more choice and be a huge boost for 'Java everywhere' - the possibilities are endless!"

What's your personal favorite in dynamic languages?
"Groovy - I love it's implicit goal of making life easier for the developer and it's interop with Java combined with features like it's XML processing, make it a great instant productivity tool."

Which programming technique has moved you forwards most and why?
"KISS - having small, tested units/modules of code has saved me time and time again. Also naming things properly."

What was the biggest project you've ever worked on?
"In terms of architectural scope, the creation of an electronic case management system for the New Zealand department of courts + the other Ministry of Justice departments. At the time it was the largest J2EE/Java project in Australasia. In terms of LoC, it's still probably PCGen, I think we're ~750,000 lines of Java and counting :-), it's an incredibly complex piece of software."

Which was the worst programming mistake you did?
"It's rumoured that I took down all of the Comp Sci servers at my university when a networking/hard disk re-writing bot of mine went astray - I was _not_ a popular student that day.

I've made plenty of other mistakes, even self submitted to the dailywtf on one occasion! My motto is to have no fear when coding and to simply strive to improve every time you set down in front of your IDE."

Wednesday, September 14, 2011

What's new in Java 7? - Part three


The third part of my German article series on heise.de/developer went online this morning. The third part is about InvokeDynamic and Classloader changes with Java 7.

I tried my best to explain what the new bytecode instruction is all about and what it means for Java itself and the many other languages running on the proofen JVM. Again everything is packed with some examples and code in-between.

I'm looking forward to your comments and hope you enjoy it. Read it; for free, German and online. http://heise.de/-1340995

Tuesday, September 13, 2011

Response GZIP Compression with GlassFish in Production


A lot has been written about this and this basically should be common knowledge, but talking to different people out there and looking at the efforts Google takes to improve page speed it seems to me that the topic is worth a second and current look.

The basics
HTTP compression, otherwise known as content encoding, is a publicly defined way to compress textual content transferred from web servers to browsers. HTTP compression uses public domain compression algorithms, like gzip and compress, to compress XHTML, JavaScript, CSS, and other text files at the server. This standards-based method of delivering compressed content is built into HTTP 1.1, and most modern browsers that support HTTP 1.1 support ZLIB inflation of deflated documents. In other words, they can decompress compressed files automatically, which saves time and bandwidth.

But that's simple. What are the problems?
In order to get your stuff compressed, you have to do this somewhere between the responding server and the client. Looking into this a little deeper you find a couple of things to take care of:
It should:
1) ...be fast
2) ...be proven in production
3) ...not slow down your appserver
4) ...be portable and not bound to an appserver
Let's go and have a more detailed look at what you could do in order to speed up your GlassFish a bit.

Testpage
I am trying to run this with a simple test-page. This is the "Edit Network Listener" page in GlassFish's Admin Console (http://localhost:4848/web/grizzly/networkListenerEdit.jsf?name=admin-listener&configName=server-config). The basic response times (uncompressed) for this page on my little machine captured with Firebug:
Type# RequestsSize (kb)time (ms)
css11120125
js12460.7130
html3324.3727
all521126.41380

GlassFish built-in compression
If you are running a GlassFish 3.x server, the most obvious thing is to look what he has to offer. You could simply "Enable HTTP/1.1 GZIP compression to save server bandwidth" ("Edit Network Listener" => HTTP => middle). You simply add the compressible mime types (defaults plus: text/css,text/javascript,application/javascript) you would like and set a compression minimum size (in this case 1024bytes). You do have to restart your instance in order to let the changes take effect.
Type# RequestsSize (kb)time (ms)change
% size
change
% time
css1124.9185-79,2548,00
js12122,255-73,48-57,69
html322.61470-93,03102,20
all52272,42350-75,8270,29
-80,3940,70
Looking at the results you see, that you have an average of 80% to save on bandwidth using compression but you also see that it takes longer to serve compressed content in general. What I also realize is, that you have to play around with the settings for your mime types. It's helpful to check for single files what mime type they actually have.

Apache mod_deflate
If you are not willing to have additional load on your application server (which is quite common) you can dispatch this to someone who knows how to handle http. This is true for Apache's httpd. The module you are looking for is called mod_deflate and you can simply load it along with your configuration. I assume you have something like mod_proxy in place to proxy all the requests against GlassFish through your httpd. Comparing starts getting a bit tricky here. Having mod_proxy in place means your response times drop a lot. So it would not be valid to compare against a direct request onto GlassFish. In fact, what I did is, that I compare the average response time against a not deflated response via Apache, the size is compared against GlassFish compression.
Type# RequestsSize (kb)time (ms)change
% size
change
% time
css1124.9551-79,25-5,97
js12122,255-73,480,76
html322.61470-93,62-1,29
all52272,42350-75,97-5,65
-80,58-3,04
Not a big surprise, right? They are both using gzip compression and this is a quite common and well known algorithm. So I did not expect any changes in compression effectiveness. But what you see is, that you have an unlike faster compression compared to running it on GlassFish. With an average overhead of roughly 3% you hardly can feel any change. That's a plus! Another plus is, that you can change the compression level with mod_deflate. Setting it from Zlib#s default to highest (9) gives you an extra bit of compression but it's not likely you see this higher than 1% overall which also could be a measuring inaccuracy.

Google mod_pagespeed
Yeah. That would have been a good additional test. But: I only have a Windows box running and the binaries are still only supported on some flavors of Linux. So, I need to skip it today.

Compression Filter
There are a lot of compression servlet filters out there. Back in the days, even BEA shiped one with their WebLogic. I guess as of today I would not use anything like this in production for stability reasons. I strongly believe, that there is not a single reason to let your appserver do any compression at all. Compressing content on-the-fly uses CPU time and being on an application server this is better spend onto other workload. Especially because you usually don't have a bandwidth problem between your appserver and your DMZ httpd.

Monday, September 12, 2011

I'm speaking at EclipseCon Europe (Java7 Summit), 2nd-4th November 2011 in Ludwigsburg


Another short information for my fellow readers. I received confirmation that two of my submitted talks for EclipseCon Europe Java 7 Summit were approved. I'm proud to be part of the newly announced Java 7 Summit. The Java 7 Summit offers Java developers and architects an opportunity to gain in-depth technical education on the new innovations introduced into the recent Java 7 release. See it at lanyrd.com.

The complete schedule isn't available until now, so I can only tell you, what I know (UPDATE: Seems as if we have a little more than an indication about the schedule. Donald posted an update on his blog. I will be speaking about:

Thursday, November 3, 14:00-14:30
Java 7 - State of the Enterprise
With Java 7 being GA you can start thinking about putting it to work in the Enterprise. But what are the challenges? How does the adoption path look like? What are the reasons you should do it and...
Beginner, Standard Session (25min)

Thursday, November 3, 14:30-15:00
Practical Migration to Java 7 - Small Codeexamples
Java 7 is finally there. Time to look at what we have with Project Coin and where it could help. Imagine, you are using Java 7 in your daily work. Where do you start? Which are the parts you start...
Beginner, Standard Session (25min)

If you haven't done so, it's still time to register.

Thursday, September 8, 2011

The Heroes of Java: Charles Oliver Nutter


The second part in my recent interview series: "The Heroes of Java".

Charles Oliver Nutter
has been programming most of his life, as a Java developer for the past decade and as a JRuby developer for over four years. He co-leads the JRuby project, an effort to bring Ruby and the power of the JVM together. Charles efforts on JRuby will ensure the JVM remains the preferred managed runtime for many years to come. He's giving the HotSpot Team a hard and good time.

General
Who are you?
I'm Charles Oliver Nutter, co-lead of JRuby and JVM enthusiast. I work every day to make JRuby the best JVM-based Ruby possible while pushing JVM folks and other language authors to keep improving the platform.

Your offical job title at your company?
"I think it's JRuby Architect. As far as the world is concerned, though, I'm one of the "JRuby guys"."

Do you care about it?
"Not really. I tell most people I'm just a "programmer"."

Do you speak foreign languages? Which ones?
"I studied Spanish in highschool, and can fumble my way through it. Studied Mandarin Chinese at university, but most of it has faded away now. I feel good that I at least made an effort to learn a foreign language, but living in the US it's very hard to maintain anything but English."

How long is your daily "bootstrap" process? (Coffee, news, email)
"Most days, I wake up and grab my laptop from beside the bed. I'm trying to improve that though, since I get grouchy when hungry and stressed if I don't tear myself away from work often enough."

Twitter
You have a twitter handle? Why?
"Because I'm a shameless self-promoter. Your "personal brand" is as important as your career decisions and education, and I try to cultivate all three. I also have Twitter hooked up to Facebook (which I never use) so that non-tweeting friends and family can keep track of what I'm up to."

Whom are you following in general?
"I rarely pay attention to my followees' tweets anymore...there's too much traffic and too much noise. I have enough trouble keeping up with email, "JRuby" tweets, and twitter replies."

Do you have a personal "policy" for twitter?
"Not really. I share what I'm doing, what I believe, how I feel, and use Twitter to monitor people tweeting about JRuby and other facets of the Ruby world."

Does your company restricts or encourages you with your twitter usage?
"Most definitely encourages Twitter usage. Engine Yard is one of those rare companies that understands OSS funding is as much about giving back and maintaining thought leadership as it is about building useful tools. Maintaining a public presence is a big part of that. And luckily, JRuby is both good project and useful project, so we're not 100% overhead either."

Work
What's your daily development setup? (OS/IDE/VC/other Tools)
"I spend most of my time in OS X, at command-line or using NetBeans for JRuby development. My choice of IDE is mostly arbitrary; I used Eclipse before joining Sun Microsystems, NetBeans since then, and frequently I find myself in the Redcar editor (JRuby-based clone of Textmate) more and more.

I use git for all source control, but I find mercurial works well too when I need to use it to interact with e.g. OpenJDK.

When debugging, I use NetBeans for both Java and Ruby debugging. I use VisualVM and other JVM-related tools for investigating performance."

Which is the tool providing most productivity to your work?
"Probably NetBeans. Say what you will about IDEs in general or NetBeans specifically...it has really become a slick environment for developing JVM-based apps and libraries.

Of course NetBeans, JRuby, and most other things I deal with on a daily basis are all possible because of the JVM, so perhaps that's the most important tool of all. I know I could migrate my development environment en masse to pretty much any platform and the whole thing would work exactly as it does on OS X."

Your prefered way of interacting with co-workers?
"I never thought I'd say this, but I really do like being in-person more than being remote. However, I think a mix of remote and in-person is better than 100% of either. The work I do frequently requires me to lock myself in a dark room with no interruptions; that's difficult to get in an office environment. The schedule flexibility afforded a remote worker is also of tremendous help when you just plain need to work on some problem for 12 hours straight. Some things can't be solved in a day's work and can't easily be split across days."

What's your favorite way of managing your todo's?
"I wish I had a better system. The only system in place right now is "hope people I've forgotten about will ping me again" and then try to finish up those tasks before more arrive. I receive hundreds of emails per day, and probably 50-100 end up in the "important" inbox. It's a no-win situation at present...I either need an assistant or I need to reduce how many hats I wear."

If you could make a wish for a job at your favorite company: What would that be?
"I'm pretty happy at Engine Yard, and have no plans to make a move. That said, I feel like the work I've done on JRuby could help other JVM languages, and I've always wanted to be in a role where I could continue "research" on JVM language challenges while also helping the JVM language community coordinate and improve. If all that ever comes out of my work is JRuby, I'll be disappointed (but not *too* disappointed)."

Java
You're programming in Java? Why?
"Java is the best language for the work I'm doing. I define the work I'm doing as "bending the JVM to Ruby's whim's." I also freqently write in Ruby, and we have started transitioning more JRuby code from Java to Ruby recently."

What's least fun with Java?
"The amount of typing required to do pretty much everything. It could certainly be worse, though...it could be C/++."

If you could change one thing with Java, what would that be? "My two top features for the Java language would be closures and type inference. We should get the former in Java 8, but for the latter I will probably need a different language (like Mirah, my other language project)."

You might say that I want C# but with a Java sensibility (virtual-by-default, for example).

What's your personal favorite in dynamic languages?
"Ruby is my favorite dynamic langage. I also like Clojure from a design perspective, but I find the language itself (mostly the syntax) to be uglier than I would like."

Which programming technique has moved you forwards most and why?
"If I had to pick one I'd say "refactoring." Few problems I run into can't be solved by doing an in-place refactoring. That's one reason I use less Ruby than Java...all but the most trivial refactorings in Ruby are very difficult to do safely...or at least very difficult compared to pressing a button in a Java IDE."

What was the biggest project you've ever worked on?
"JRuby is the project I've put the most effort into...5 years full time now, and about a year part-time before that. Other than JRuby, the largest would be a migration of the Food and Nutrition Service's (division of the USDA) food stamp program from an old mainframe to a Java EE application. I oversaw three years of development on that project, and we managed to deliver it on time with nary a glitch. Something like 1M lines of code, not including generated code."

Which was the worst programming mistake you did?
"For a short time I was the lead developer of LiteStep (desktop replacement for Windows' "Explorer" environment), and helped orchestrate a large-scale refactoring and rewrite of its C codebase to be more modular and easier to extend. I made a good decision in pushing toward a set of pure-virtual C++ interfaces for key pluggable aspects, but I was wrong to try to go all the way to a COM-based solution with a team that barely understood C++ in the first place. Subsequent leads backed down that bad decision, but kept the overall structure...so I'm satisfied it worked out ok."

Configure Java EE applications or "Putting Bien into practice" ;)


A lot has been talked about application configuration in the past. I don't know who kicked off the debate but the most fundamental reading (with a look at future Java EE 7 and beyond) is Antonio Goncalves' posting [Debate] – And what about configuration in Java EE 7. Fact is, with vanilla Java EE we all do application configuration day by day. Without having any special mechanism in place. Having seen Adam's latest post from yesterday I would like to share a slight add-on to it, which I feel could fit to most of the projects out there.

Why this post?
The basics shown by Adam are really smart. You simply

@Inject
int yourConfigVariable;

and you are done. You don't have to care about properties or other configuration classes. But looking into it, you see, that you somehow need to fill your configuration from somewhere. And looking back at Antonio's post, you see that you have a lot of options doing this. The one we are most comfortable with is probably Java's Properties mechanism. Using this in combination with the code presented by Adam you end up having a Configuration.properties with an endless list of single word keys. That's not what I would call maintainable. So basically this is why the post has the title: "Putting Bien into practice" ..oO(sorry for that, Adam!) :-) Here are my approaches to the problem.

Fill your configuration from a properties file
The most basic part is to add a Configuration.properties file to your application (default package). Now we are going to modify the configuration holder a bit to make it a Properties type. Now modify Adam's fetchConfiguration() method to load it.

private Properties configData;

@PostConstruct
    public void fetchConfiguration() {
    String fileName = "Configuration.properties";
            configData =
                    loadPropertiesFromClasspath(fileName);
}

     /**
     * Load properties file from classpath with Java 7 :-)
     * @param fileName
     * @return properties
     */
  public static Properties loadPropertiesFromClasspath(String fileName) {
  try (InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(
                        fileName)) {
            if (in != null) {
                props = new Properties();
                props.load(in);
            }
        } catch (IOException ioe) {
            log.debug("Can't load properties.", ioe);
        }

Now you have to modify the @Producer methods accordingly. I'm only showing the getString() method here to show you the concept:

    /**
     * Get a String property
     * @param point
     * @return String
     */
@Produces
public String getString(InjectionPoint point) {
        String propertyPath = point.getMember().getDeclaringClass().getName()+ ".";
        String propertyName = point.getMember().getName();
        String propertyValue = configData.getProperty(propertyPath+propertyName);
        return (propertyValue == null) ? "" : propertyValue;
    }
For convenience reasons I added the name of the declaring class as propertyPath in order to have a bit more order within your property file. You use the producer methods as Adam has shown:
package net.eisele.configuration;
public class HitsFlushTimer {
    @Inject
    private String hitsFlushRate;
 }

In this case you end up accessing a property with the key net.eisele.configuration.HitsFlushTimer.hitsFlushRate in your Configuration.properties file. One quick warning. If it happens to you, that you have to package separate ejb and war modules within an ear you probably need the javax.annotation.security.PermitAll annotation at your Configuration singleton.

Then you end up with lots of duplicates
That's probably true. If you have the same configuration over an over again (e.g. httpProxy) this would force you to have the same value for different keys in your property file. The solution seems straight forward. We need our own Qualifier for that. Let's go:
@Retention(RUNTIME)
@Target({FIELD, METHOD})
@Qualifier
public @interface AppProperty {
    @Nonbinding
    public String value();
}

Now we have our own Qualifier for that. Next is to change the @Producer accordingly:
   @Produces @AppProperty("")
    public String getString(InjectionPoint point) {
    String property = point.getAnnotated().getAnnotation(AppProperty.class).value();
    String valueForFieldName = configData.getProperty(property);
    return (valueForFieldName == null) ? "" : valueForFieldName;
}

That's it. Now you can use something like this wherever you like:
    @Inject
    @AppProperty("net.eisele.configuration.test2")
    String test2;

I know, this isn't half that elegant like Adam's one @Inject annotation. But:You don't have to guess a lot to see what's happening and where your value is coming from. I consider this a big pro in projects with more than one developer.

Yeah. Still not very maintainable.
Ok. I know. You are still talking about refactoring property names. Right? What is left to do? You could think about using a CKey Enum which encapsulates all your property keys and use this instead of simply using the keys itself. But, I would prefer to simply use the plain String keys within my code. Happy configuring now. How are you configuring your applications? Let me know! Happy to receive comments :)

Wednesday, September 7, 2011

The Heroes of Java: Marcus Lagergren


The first part in my recent interview series: "The Heroes of Java".

Marcus Lagergren
holds an M.Sc. in computer science from the Royal Institute of Technology in Stockholm, Sweden. He has a background in computer security but has worked with runtimes since 1999. Marcus has been team lead and architect for the JRockit code generators and has been involved in pretty much every other aspect of the JRockit JVM internals. Since 2008 Marcus works for Oracle.

General
Who are you?
"I'm a software guy who lives in Stockholm, Sweden. I've been working with runtimes for more than ten years, but try to find time to do hobby hacks so I can understand all modern trends in computer science. I enjoy all areas of programming, and I'm not afraid to get my hands dirty with low level programming - kids these day seems to be afraid of that, which may in the long term doom us all. ;) As one of the guys who designed the JRockit JVM, I co-authored a book about JVM internals in 2010, which generated some attention."

Your offical job title at your company?
"Consulting member of technical staff"

Do you care about it?
"To the extent of the name - not at all. I can hardly even tell what it means - I am, for instance, not a consultant. I care about it to the extent that it defines a couple of responsibilities and how independent I can be and so on. And benefits. Probably. I'm not sure it matters. I've never really sat at my desk one morning and not having known what to do, regardless of title. The thing to do has usually turned out the be the right thing and people have rarely complained ;-)

I'm slightly skeptical to the whole thing of having titles and "contributor levels", the way it is implemented in any large corporation. People are not exactly World of Warcraft characters and titles in general convey little meaning to an outsider.

At BEA Systems I was a "Staff Engineer" but my business cards said "Senior Wizard"."

Do you speak foreign languages? Which ones?
"I am a native Swedish speaker. I speak English fluently and decent German. My German is great grammatically, but sadly lacking in nouns, slang and modern expressions. I need to get a German dictionary for my Kindle and start working my way through it from A to Z. (A Swedish dictionary would of course go from A to Ö, but Germans treat the umlauts as modifiers and not as separate letters ;-))
I'm quite good with languages, so I can usually figure out what stuff means in most latin based languages."

How long is your daily "bootstrap" process? (Coffee, news, email)
"It used to be pretty short. Coffee, read (but don't answer) new e-mail, done. Then social networks like Twitter appeared. I convince myself that they actually give me targeted and relevant information instead of just being time wasters. ;-)

Then the kids arrived. They are definitely the worst planning obstacle of all. (Yes let's just objectify them as time sinks in the Gantt chart for the sake of this discussion, I'm really a lovely father. I promise). Now my bootstrap process is interleaved with waking the kids up and getting them to school. This means rising at 06.30 and getting to work at 09.30. My most productive hacking time is in the mornings, so this is a bit of a handicap. I usually solve this with my wife so I can pick up the kids from school some days and leave them other days. If I have a "pick them up" day, I just swallow some coffee and leave the house at 07.00 and do the rest of the bootstrap at my desk.

Working at home is not possible with children at home, but once they are out of the house it saves the commute. As I'm going to be on a distributed team now for a while I suspect I'll be doing more work from home. The main problem there is that I have such a nice espresso machine so I usually turn into Cornholio at about 10.30 any given day at home.

I've experimented a bit with my bootstrapping - for example not doing any "catching up" as the first thing in the morning. For a period of time I tried getting up at 05.00, gulping down some coffee, hacking like a maniac for 2 hours and then getting the kids to school. Interestingly enough I was quite productive, but I don't think that's something any man should go through."

Twitter
You have a twitter handle? Why?
"I started using Twitter just by adding people so I could get a customized stream of news. This mostly contained work related topics at first, but now I'm including anyone that is fun or interesting. Twitter has provided me with links to interesting stuff I wouldn't had found in a wider search domain and has also let me get to know people who proved to be really important to talk to. I've used Twitter for job purposes, to exchange information with people I've not met in "real life", with useful results. Twitter is also a great news medium, such as when people tweet from the scene of an accident or similar event.

I had my Twitter account for about a year until I actually started posting stuff myself. I post tweets mostly about programming, but not exclusively."

Whom are you following in general?
"I follow people in the IT business, people in politics and people who make me laugh. These are not disjoint sets."

Do you have a personal "policy" for twitter?
"I try to keep my tweets in line with "my public character" and to be (mostly) polite. I keep more personal stuff in closed social networks instead, but of course there are always exceptions. For example: the world needed to know about my fight with the flesh eating bacteria in my arm this summer. THEY NEEDED TO KNOW! ;-)"

Does your company restrict or encourage you with your twitter usage?
"I'm encouraged to do things like tech evangelism, where appropriate, but it's not an explicit part of my role description.

There is a social networking policy, which involves inside information and stuff. To be honest I'm not 100% up to date with it, but in general on Twitter, regardless of corporate policy, if you've got nothing good to say, it might be better to say nothing at all. The whole world and all its search engines are listening. "

Work
What's your daily development setup? (OS/IDE/VC/other Tools)
"I tend to work mostly on Ubuntu and Windows on my workstation, depending on what is required. I use Mac OS on my MacBook. The MacBook is my own and not company property. My work-at-home setup is a fully loaded 27" iMac with lots of VMWare images.

My preferred IDE for C/C++ is Microsoft Visual Studio. When we developed JRockit we used Windows as the development platform because the IDE was so much more efficient than anything available on Linux. Visual Studio is truly excellent, both for development and debugging, with a compiler that produces tight code.

On Linux I do most things (except Java) in plain old Emacs with etags, old school style. GDB is the debugger.

For Java development I used to be an Eclipse guy, but I've recently been trying out the new Netbeans and find that I quite like it.

For native Mac/iOS projects I have little choice but Xcode, which is actually useable and not so painful after the release of 4.0, but it's still nowhere near Visual Studio.

The other tools I need are usually available from the prompt on any UNIX based system."

Which is the tool providing most productivity to your work?
"Hmm... Emacs? I don't think I ever close it."

Your prefered way of interacting with co-workers?
"Definitely face to face in a room with maybe four people working on the same thing. I have nothing against distributed work but it has a tendency to slow things down if you aren't careful. I guess I'm not the most patient guy in the world.

If you have to work in a distributed setting, e-mail lists is a horrible way of communicating information. Instant messaging is a little better. Video messaging, screen sharing over Skype etc, is quite good. But nothing beats being in the same room and having whiteboard discussions about things. When I was compiler lead for JRockit, we were all in one room and things like "all in favor of rewriting this complex subsystem from scratch - raise your hands" were totally possible. Doing things like that over a mailing list in six different time zones naturally gets a lot more complex, especially since you lose subtle nuances of the communication.

When working on a tightly coupled system you can also infer a lot more from the "convection currents" of information with people doing the same thing in the same room. You pick up a stray word in a conversation about some technical topic and your brain synthesizes this into part of the big picture without you having to think too much about it. To clarify, these kinds of work setups are not endless cubicle farms, but largish offices where 4-5 people share a room. I like that a lot."

The above should in no way imply that I think distributed projects suck, they are just harder to synchronize and you get less for free."

What's your favorite way of managing your todo's?
"Make a list. Prioritize it. Do the TODOs one after another. Always minimize context switches. They kill. I don't think anyone can juggle many tasks at the same time and be at their maximum level of productivity. For me "multitasking" usually just means figuring out in which order to execute the TODOs and not jumping back and forth between them.

Have your e-mail program check for mail every half hour. Not every two minutes. Half an hour is a pretty good time unit to concentrate on one problem."

If you could make a wish for a job at your favorite company: What would that be?
"I find runtimes and operating systems fascinating. I want some architectural say in where they go next and have discussions with industry and academia about technology. At the same time, a day without looking at assembly code is a bad day. I'm lucky to have a lot of this already in my job description.

Alternatively I'd like to be on the founding team of another startup. That's how I've spent some of the happiest time in my life. Naturally, it's harder with mortgage and kids. The startup would still have to involve some assembly language ;-)"

Java
You're still programming in Java. Why?
"I'm not just programming in Java. I'm programming in everything. I use the most appropriate tools that get the job done for any given situation. Why am I still programming in C? Because it gets the job done for certain problem sets. Why am I still programming in Haskell? OK - that one has more to do with personal sexual deviancy I guess.

When it comes to Java as a language it is not going to go away. It is ingrained in a lot of critical infrastructure in the world. The runtime is also definitely not going to go away - quite the opposite. If I may inject a blatant commercial plug here, my book "Oracle JRockit the definitive guide" talks a bit about how Java and the JVM became such a ubiquitous platform, and what the intrinsics of any such platform should be."

What's least fun with Java?
"Java code is extremely voluminous - it takes up so much space compared to Scala or Ruby or Clojure. Any line of Java that I write seems to want to break the 80 character boundary. Really simple things are missing as well, for example, there are no implicit ways of initializing a map or a collection, boilerplate getter and setter code for every field needs to be in place and so on.

My main language feature frustration is lack of lambdas. Also, religiously, I've always been strictly against camel case in any setting. This goes back to Smalltalk ;)

Type erasure can also be irritating. I guess one of the design rationales behind generics was that the implementation only needed to change the compiler. Surprisingly enough it also turns out that compiling certain type relationships in Java is undecidable. As someone who majored in theoretical computer science this is sort of like an itch in my brain that won't go away."

If you could change one thing with Java, what would that be?
"For the language: lambdas and more compactness a la project Coin. We are on the way there and I think Java 8 will get rid of a significant part of the frustrations.

For the JVM specification: replace bytecode with something that works better as a generic intermediate language for a multi language JVM. I think bytecode will, even despite invokedynamic, soon turn out to be a bottleneck between the program and the runtime. I rant a bit about it in my book. "

What's your personal favorite in dynamic languages?
"I like Ruby and Clojure lot. As I'm going to start contributing to Oracle's Nashorn project now, I guess I'll have to teach myself to like Javascript as well. I will put myself through the same proven brainwashing process as when I taught myself to appreciate country music, a skill that was necessary to acquire after marrying my wife."

Which programming technique has moved you forwards most and why?
"Being the nightmare of anyone who wants to define a "process" or "technique" in software, I must ask you to define "programming technique" better.

I'll give it a shot anyway - how do I quickly write code that works and is robust?

Any code that contains sanity checks turns out to be good code: get into the habit of doing things like putting assertions absolutely everywhere without thinking about it.

Make sure new features have tests. If you consider something "untestable" you are doing it wrong. Make it testable! You might even have to write some kind of whitebox API that exposes system internals for the test framework to get a test written. In that case, so be it. Do it!

If you fix a bug by painstakingly whittling a reproducer down to a small deterministic bit of code - make sure to turn it into a unit test, tag it with a bug number and get it into the test suite so you'll never have to do this again.

When programming, avoid explicit parallelism. Things like actors, the fork/join framework or NSOperationQueue:s in Cocoa help out.

Understand memory management.

Measure and understand where your application spends its time and why.

Finally, whenever you can: be stateless or use functional programming. This saves debugging time and produces fewer bugs."

What was the biggest project you've ever worked on?
"The JRockit Java virtual machine."

Which was the worst programming mistake you did?
"I've done my share of evil over the years, so it's hard to single out any one mistake. I've caused buffer overruns that crashed production systems, non deterministic function behavior and what not. However, one particular thing that had long term consequences comes to mind. At some point we decided that memory allocation in the JRockit compiler code should have no return value checks and just automatically bail on failure. I can't even remember why - reducing code mass, maybe, or a misguided attempt to trap malloc/free bugs in a global framework that was never written. Anyway, it sucked and turned into a maintenance nightmare. Always check your return values, kids. Always. That's another good thing in languages like Java - try/catch/finally. If you don't have them there is no shortcut. If the thing can return NULL, you must handle it."

The Heroes of Java


There are Rockstars out there. Ninjas or some other kind of guys been given or given themselves titles like famous and successful members of well know communities. Sometimes it all sounds like there is slightly more to it than communicating some kind of celebrity status, or even 'stardom'. Don't get me wrong. Most of them are an essential part of the Java ecosystem but to me, looking at the deeper meanings of the available titles, this all simply does not make sense. I don't want to read about celebrities. I want to read about people displaying courage and sometimes even self-sacrifice for the greater good. For Java. I want to read about Heroes rather than agents, fighters or solo artists. This is why I started interviewing Java people. Some I know. Some you might know. With this first post in a new series called "The Heroes of Java" I kick off the publishing. New interviews will appear on an irregular basis and I don't have a final list of people to ask for answering my questions. But I hope: Some will jump in. A big thanks to those who already did!

1st Part: Marcus Lagergren
2nd Part: Charles Oliver Nutter
3rd Part: Martijn Verburg
4th Part: Fabiane Bizinella Nardon
5th Part: Cay Horstmann
6th Part: Michael Hüttermann
7th Part: Andrew Lee Rubinger
8th Part: Eberhard Wolff
9th Part: Agnes Crepet
10th Part: Rod Johnson
11th Part: Trisha Gee
12th Part: Ward Cunningham
13th Part: Greg Luck
14th Part: Ola Bini
15th Part: David Blevins
16th Part: Werner Keil
17th Part: Bauke Scholtz
18th Part: Çağatay Çivici
19th Part: Stephen Colebourne
20th Part: Angelika Langer
21st Part: Coleen Phillimore
22nd: Kevlin Henney

Monday, September 5, 2011

Software Version Control Visualization - Gource


I've been playing around with visualizations since some time. You might remember my post about GlassFish City where I did a visualization with CodeCity. I came across another great visualization tool called Gource. It paints an animated tree of your projects repository history with the root directory of the project at its center.
Directories appear as branches with files as leaves. Developers can be seen working on the tree at the times they contributed to the project. The animation looks nice and you have a lot of options to configure the look and feel. The most interesting part is to generate short (or long :)) videos from the journey your team has taken through the project. And there is also a way to do this. Specifying the -o (aka --output-ppm-stream) option let's Gource write an uncompressed sequence of screenshots in PPM format which can then be processed by a video encoder to produce a video.
The most basic example could be done with SVN, because SVN support is build in with Gource since 0.29.

svn log -r 1:HEAD --xml --verbose --quiet > my-project-log.xml

Next is to run gource on this:

gource my-project-log.xml

Now you have a nice UI where you cann simply watch whats happening or even drag around a bit to see what your team members were doing. If you are looking into creating a video you have to simply run gource in streaming mode:

gource my-project-log.xml -f --hide usernames -o neutral.ppm


If you think about publishing it ... please hide the details (as shown above) and you could also think about tightening the timeline a bit.

--seconds-per-day 0.1 --auto-skip-seconds 0.1 


After you are done, you have a more or less big file on your hdd which needs to be processed with your video encoder of choice. The most simple approach is to run your PPM stream through ffmpeg.
ffmpeg -an -y -f image2pipe -vcodec ppm -i neutral.ppm -vcodec libx264 -s 800x600 -r 30.000 -vb 8000000 final.mp4


That's all. Enjoy!

Thanks @DZone!


You know, I don't often get gifts. And if I get some, I'm feeling sad about receiving them (Exception: Books and T-Shirts ;)). This weekend a special envelope was squeezed into my mailbox. Send from the DZone Team.
"In Appreciation for your Contribution to DZone". Wow. Thanks. Those guys know how to make me happy. Beside a nice, blue T-Shirt I got some of their latest RefCardz and two magnetic stickers. The stickers were acquired by my little ones shortly but the T-Shirt is mine. At last after the little photo-shooting we did for this blog post. I'm a DZone MVB since the beginning of the year and contribute to "The heart of the Java developer community", the Javalobby@DZone. Thanks Dzone for providing a great source of inspiration and information. It's an honor to be part of the MVB program and I am looking forward to the next years.

Friday, September 2, 2011

Use Java 7! I am not kidding!


What a month for Java 7. Articles about the new features all over and just at the release day, Apache issued a warning, not to use Java. That's a big meal for the press and German based S&S Media caught up on that quickly (Java 7 Causes Headaches for Lucene and Solr Users).
And even my 2c have been published (German). Nearly one month after the initial report, everything is back to normal. Mostly because of the fact, that the mentioned bugs ( 7070134, 7044738 and 7068051) are fixed with the latest jdk7u2-b04 (Changes, Download). And further on, there is another build b05 available since 31-Aug-2011 (Changes, Download).

Thoughts
A lot has been talked about weather it was appropriate. The process. The communication. Letting an "old" build become GA. You probably followed the buzz around it and I am not going to repeat it here. I strongly believe, that everybody involved did make some mistakes. The bugs should probably have been caught by a testcase (which obviously wasn't the case). The Apache community should probably have acted different with communication. Oracle should have done this differently, too. But, at the end of the day the results speak for themselves. The bugs are fixed. If you look at the table below you can see when this actually was the case. And the bleeding-edge Apache Lucene/Solr users are save again. And last but not least, we have the JDK 7 Updates Project where everybody "stubborn enough to dig into it can make a fix" on either JDK7 or JDK8. (For further details compare dalibor topics post on that). The only thing I am missing after all those exciting days is the revocation of the general warning. Hey, Uwe: That should be your part, right? Missed that? Or was it intentionally? ;)

What can you do to prevent future bugs?
Test. Test. Test. As with any software or product. And let Oracle know about "bugs that bug you". Help testing early access builds, follow the JDK7 project and report issues you find to the bug tracker. Use Java 7 to make it better! I am not kidding!

The changesets and bugs in detail
DateChangesetBugDesc
Tue Jul 26 19:35:23 20114e761e7e6e127070134Hotspot crashes with sigsegv from PorterStemmer
Tue Jun 28 15:24:29 2011e3cbc9ddd4347044738Loop unroll optimization causes incorrect result
Fri Jul 29 09:16:29 2011c96c3eb1efae7068051SIGSEGV in PhaseIdealLoop::build_loop_late_post

New Article in German Java Aktuell (iJUG) about Java 7


Another short hint about a recently published article of mine. The German iJUG Magazin called "Java Aktuell" is available since 1st of September and you can read all about the new Java 7 release. If you like, you can check out some other articles of mine. Some of them done in English, too, you just search this blog for posts, labeled "article" and you get some results.

The green light was on 28.07. The long wait for the new Java came to an end. After more than four and a half years, the Java community is celebrating the beginning of a comeback to modernize the language.

JavaOne Mobile App - A first detailed look. What's hot and what's not.


JavaOne is coming closer day by day. Another proof of that is, that the official Mobile App for JavaOne was launched yesterday. Great news! Let's rock&roll. It's available from pyxismobile.com. You can download a BlackBerry version (>=OS 5.0), an Android version (>= OS 2.0.1) or even an iPhone, iPod version (>= iOS 4.0).
You can access Schedule Builder, exhibitor listings, daily updates, Oracle demos, bus routes. Here are the first impressions installing and using it. It looks quite consistent running on different devices. Installing on both iOS and BlackBerry is smoothly and you can download the version from the known app stores. What is true for the iOS version is, that there is no dedicated iPad version. You have to use the small keyboard and can't take advantage from your big touch screen. Overall feeling is, that it works quite smoothly (at least on the tested OS).

iPad
As you are used to, you can install the app via iTunes. It's free and you simply install the 7.6 MB application. What's weird is, that the application is authored and provided by Pyxis Mobile. So, if you search for Oracle you are probably working into the wrong direction.

BlackBerry
The BlackBerry version on my 9700 was installed quickly and loads in quite some seconds. It has a file size of 1.3 MB. It looks nearly the same like the iOS version.


Home Screen
The home screen is well-arranged and the most important part, the schedule, is the prominent application. From a usability point of view I don't like the light blue "active" color. I believe this works as long as you are in a dark office, but you will not know what you are selecting if you are standing in the California sun right in front of any of the conference hotels.

Submenu
Every section has something like a submenu. Those submenus are a bit more navigable. Beside the too big headline picture, you have a scroll listing of all available functions. Again the highlighting with light blue doesn't work for me.  If you scroll down to the very bottom the bottom menu expands a bit and you get a description for every icon located there. They basically guide you to every top level menu point.

Session Listing
The schedule screen is clear and the highlighting here works very good. You can scroll down. Initially this contains all general sessions and keynotes. If you add something to or change your personal schedule (see online schedule builder) you can directly access your changed session listing by simply re-opening the "My Schedule" dialog. This works without problems in the recent version.

Session Details
If you look at the session details you get a brief description of the content and see the location. The version I downloaded yesterday does mix up some things with the speaker listing. For now it seems as if the complete speaker list is shown below every single session. The fact that you can highlight the speakers let's you think, that you could select a single one and get more information. That's wrong. You can (as of today) simply scroll down. No further information is given.

Errors and improvements 

As usual with 1.0 releases you have some blank lines and errors around. The basic maps integration isn't there now. some other stuff also is not available at the moment and it seems as if we will get some more updates in the future. What I do like is the fact, that we have some very wordy error messages. I honestly hope this error didn't came from a too high server load.



My experiences with the session search are very diverse. Sometimes the results differ from the web based schedule builder and session finder within the apps. Last night the iOS app didn't present a single result. Today the BlackBerry is faster and better than the web based schedule builder. Even searches within days seem to provide differently ordered lists. That looks like an area to improve on.

Better than last year
What I really like is that Oracle did take care and published the apps before the actual conferences are happening. Generally the apps seems to be a bit more mature. Maybe this basically because of the fact that they hired a company which is using the pyxis platform which seems to provide a complete framework.

Missed Opportunities
A couple of things are missing. Here is a brief list of things I would like to see within the apps:

0) Gather User Feedback 
I don't know why. Most of the mobile business do this day by day. They integrate any kind of feedback functionality into their applications. Why the hell, don't you do this? If you are rolling out in an "agile" manner (a.k.a letting users test the application) you should be open to feedback. Provide at last an email address people can contact. Or integrate a feedback form which pushes into a bug tracker.

1) Speaker information (Name, Bio, Twitter)
What I need is more information about the speakers. Beside the fact that they have a name you should try to get as much information from them as possible. Homepage, Twitter handle, blog, whatever is out there and known. I want to have this at hand, too.

2) Social Media Integration for sessions
The year before last year we had a cool feature. You could twitter about every session with a unique hashtag. There are official twitter apps on every targeted device. Why don't we have a twitter integration for it? Accessing the session information and live twittering about the session from the same app. Awesome! That's what I want to have. And I also want to see the hastag pre-filtered content stream of the ongoing session within the app!

3) Find your way to your session
Guys ... I'm one of the lucky attendees knowing where to go. I've been there. Done that. But what about first timer? You know where they should go according to their schedule. Guide them there.

4) Detailed information integration
There is more to tell about the sessions than simply the location, the speaker listing and a brief description, right? What about supporting papers? Presentation download? Link to the online schedule builder? I want all that! Period.

5) Location awareness
I want to check-in at sessions. With foursquare. Or at last with facebook. Don't those guys provide APIs to use? If I have a session in my schedule: please give me the option to link my fsq and fcb profiles to simply check-in where I am! All my friends are using one of those services and if you let me check-in with them, I am not only happy but I also know where all the other cool kids are!
Another great time-saver would be to have floor plans of all the big hotels around.

6) Calendar integration
Why don't you integration with the native calendars? It would be a breeze putting today's schedule in my calendar. And doing this you could also add some hints how long it would take to move from one session to the other. Running over from Moscone to Nikko isn't done in seconds (except you are running @arungupta :-D).

Thursday, September 1, 2011

Me, Myself and Myfear. More about my personal brand.


WARNING: This is a personal post about nothing real Java related. If you don't like it, I apologize and I promise that this is not going to happen more frequent than it already did over the past few years. All others are welcome to read about me, myself and myfear. My personal brand.

Why have you written this post?
Time is moving very fast these days. Many things happen and make me think. Different reasons for that. Children growing up quicker every day. Too less time with family in general. You name it. If you are in this special kind of mood, you start thinking about stuff you do each day. This happened to me a few days ago. A new article/interview about my latest project was published and I was happy to be among the first ones to get the printed issue. It is a single page with a huge headline and an image: Showing my silhouette. You should also know it. There is hardly any other picture of me around than that.
Why the hell I am spreading the same picture over and over into the world. That was the question, which made me start this post. Here are my thoughts and answers.

(Source: MeSsaGe, internal msg newspaper)
Which story do faces tell you?
Have you ever realized which impact looking at pictures of (happy) faces has on your feelings or emotions? What about adverts? Which ones do you like most? If you think about it and even try to remember how advertising was back in the days, you see, that it was all about being "on-message" and getting talking points right. This has changed heavily. Primarily because of the latest brain science breakthroughs which confirmed what you might feel, too. People are primarily emotional decision-makers. If you look at the publications about 21st-century advertising (e.g. About Face: The Secrets of Emotionally Effective Advertising, Amazon) you find some simple rules to follow:
If you are going to sell something, you should:
- Keep it simple
- Make it relevant
- Be memorable
- Focus on faces
- Always sell hope
- Don’t lead with price
 (Source: Dan Hill, Ph.D. About Face: The Secrets of Emotionally Effective Advertising)

But, stop: Are you selling yourself?
No. Not really. True. I'm employed and this is not going to change shortly, hopefully. But what I am doing is, that I am trying to be "the one", consistent and helpful person. Not only in real life but also with my online identity. You might call this personal branding if you like. But for me this is not about branding like a product or even selling but about trying to transport as much of what I am trying to be in real live through the very restricted possibilities of online channels. So, even if some of my personal contacts do find this very boring you will find the same Markus in all channels I am contributing to. The same topics. And only slightly modified versions of the same picture.

Myfear 
Some people don't stop asking me about "myfear". Well. That could be a longer story. I'll try to make it short. It all started with my first internet baby steps. That was the time back, when all we had was IRC and email and Netscape Navigator <=3. And I was young and looking for topics to address. The idea was (surprise) to make money out of it. Sooner or later. And so I was looking for topics and names. All others were taken. Myfear was left. That was the first kind of "logo" done by the wonderful creative Friedhelm Fischer (who was the owner of fischer-cgd.de back in these days):


As you already know. There isn't something like a brand "myfear". All that is left from the former dreams and ideas is my nickname.

“We cannot change our past. We can not change the fact that people act in a certain way. We can not change the inevitable. The only thing we can do is play on the one string we have, and that is our attitude.”
Charles R. Swindoll (American Writer and Clergyman, b.1934)


Google, Facebook, Twitter and the others
And for your reference here are my different online versions of the silhouette you know: