How To Be The Next Big Thing

Everyone wants to be the next big thing, but few of us are fortunate enough to know where to start. Luckily, Paul Graham gave some insight into this in his latest post, How To Get Startup Ideas.

There’s one piece of advice that keeps coming up, whether it’s in this latest post from Paul, or the Steve Jobs biography - build something that you would want to have.  At least this way you have a customer from day 1, right?

Another benefit of “you being the customer” is that you know exactly what the problem is – no need to spend time testing markets early on. Sometimes testing the market means asking friends and family whether they would find a particular idea useful. That’s ok, but bear in mind that it takes a strong friend to tell you that your idea sucks.

These days there is more and more pressure on people in software to come up with great ideas. But this pressure just ends up in below-par products, or worse, products that no one wants:

Why do so many founders build things no one wants? Because they begin by trying to think of startup ideas. That m.o. is doubly dangerous: it doesn’t merely yield few good ideas; it yields bad ideas that sound plausible enough to fool you into working on them.

Paul mentions one more point that resonates with me – thinking that the idea is too late, that someone has already done it, and that I should just force myself to think up something different, leaving a perfectly good idea behind

Because a good idea should seem obvious, when you have one you’ll tend to feel that you’re late. Don’t let that deter you. Worrying that you’re late is one of the signs of a good idea. Ten minutes of searching the web will usually settle the question. Even if you find someone else working on the same thing, you’re probably not too late.

How many times has this been proven over the last three decades? IBM has the PC industry sewn up and along came Apple. Altavista was a great search engine (in it’s time) and now we all use Google. The MP3 player market was flooded, and the iPod became the default.

It’s never too late to disrupt, you just need to believe in your idea.

 

 

More Focussed Debugging Now Available With Chronon 3

Already considered as quite an impressive tool, Chronon 3  was released recently, bringing even more features and improvements.  Top of the list are the performance improvements; and the improvements delivered cannot be understated. You won’t need to worry about running out of memory with Chronon anymore.

I asked Prashant Deva, Chronon’s founder, about how exactly they got the improvements. Because of the amount of feedback the team were getting about OutOfMemory errors, Chronon 3 was completely re-architected from the ground up. Obviously, this process took a lot of time, and is the reason there was a long time between the previous release and Chronon 3.

Prashant gave me an amazing insight into how Chronon recorder works in the background:

If you were to look at the source code of a computer program, especially a single threaded program, you will notice that you can pretty much predict what a program is going to do.  Sure the program will have branches and loops but those brances will be dependent on the values of some object in memory and if you know its value, then you can predict the flow.

Chronon 3 Recorder is based entirely on this idea of ‘predictions’. The Recorder reads the bytecode of your application and does a static analysis of your code.
From this analysis, it creates a bunch of ‘predictions’, about how your program will execute.
An example of a prediction might be :
Call bar() at line 46 in Foo.java.
Then it monitors the execution of your program.
It keeps adjusting the ‘prediction’ data structures to account for what your program acutally does.
Then the recording data that is generated is really just how much your program differs from these predictions.

For example, in the case of the earlier prediction:
Lets say you have 2 threads:
Thread 1 :
Execution matches prediction completely
Calls Foo.bar() at line 46 in Foo.java.
In this case, no recording data is generated, since the prediction is matched 100%.

Thread 2
Calls overloaded method Foo2.bar() at line 46 in Foo.java.
In this case, the prediction data here will be modified, for this thread only, to account for the fact that 2 methods may be called here – Foo.bar() and Foo2.bar()
Then only 1 bit, is saved which tells that Foo2.bar() is the method that was acutally called.

In previous versions of Chronon these method calls would have generated over 128 bits of data per call. In Chronon 3, they generated 1 bit or no data at all.
Thus you can get a glimpse of what a huge performance benefit this is.

The other thing we have done is to make use of non-heap memory as much as possible. So most of the recording data, and things like compression, etc are all done natively and dont impact the heap of your java application and thus dont impact the GC.

Another new feature you’ll want to try out is  Per Thread Time , allowing you you to focus on specific thread instead of the entire system. You get to see this in the Stack view too. Focus is everything – if you know of a troublesome thread, you can forget about the rest.

Also you can split recordings at any time on the server, instead of waiting for the Recording Server to split them for you.

 Chronon have offered JavaLobby readers a special 10% discount to use when purchasing personal licences of Chronon, using the JAVALOBBY coupon code

In the future, you can expect closer releases of Chronon, where the prediciton plug-in model will be continuously added to. The more predictions that Chronon provide will improve the performance.

As always, Chronon are listening to what users want in order to define the feature set for the next release. You can expect to see support for Java Collections sometime soon, another much requested feature, while the Recording Server will have new features to help with Ops and Application Monitoring

Applicasa: Build a Server Side for Your Mobile App in 10 Minutes

I was recently contacted by the people at Applicasa to give their service a go, and see how it works for me. The company claims that you can create a backend for your application in under 10 minutes – challenge accepted!

The Fundamentals of Applicasa

In a nutshell, Applicasa allows you to easily power the server side of your mobile application, iOS or Android, using some simple online tools. You create a database of objects to store all your data and then you download an SDK so that you can access this data from your mobile application.

The great thing is that you can easily run push notifications for your app from the online tool.

Creating an App

First you’ll need to set up that database, which is simply a representation of your domain model for your application. Simply click on the Add Object button which allows you to describe a table containing all the fields of each object.

Looking at the blog, it seems that future versions of the tool will support a self import feature.

Once you done all the work on your database, click on the “Build Database” button to generate the complete backend for your app.

You’ll then need to decide on your target platform to download the SDK, all of which is straghtforward with detailed instructions to get you there.

You can test out all the individual calls that may be made to your service through a WS tool. This is a useful means of debugging potential issues.

The most impressive part for me though is the push notification support. It’s made as simple as possible, where you can send a simple message to all users of your application, or even schedule the notification for a later time.

Once you have a clear idea of what your model should look like, you can easily get everything set up within that 10 minutes. The generation of the SDK can take a few minutes, but apart from that the whole process is really smooth.

Pricing

Applicasa are running a Start App program where you can use the solution for free up to when you reach 100,000 downloads. After that you can move to one of the paid plans. The plans start at $49 per month up to $199 per month. If you do hit that 100K mark, you’ll be looking at moving on to the $199 plan.

Conclusion 

Applicasa provides a really simple way of creating a backend for any mobile app and connecting via a simple API. Push notifications are made to be as simple as you’d have hoped them to be.  I’m sure the service will continue to improve over time, but I’m unaware of any offerings available at the moment that make backend app development as straight forward as this.

The Startup App program is a low risk way of trying the whole thing out, with zero cost to you, until you actually become successful at 100K downloads.

For a concise overview of how Applicasa works, check out their promo video:

 

New Java Update Introduces JavaFX Scene Builder

Oracle have been busy – they have released the latest update for Java 7 and JavaFX 2.2, introducing the first release of JavaFX Scene Builder. There’s good news for developers on Mac OS X, as they will have full availability of the release, and get auto-updates at the same time as those on Windows platforms.

Along with the good news for Mac owners, there is now a JDK for Linux on ARM v6/v7 so that you can get Java running on your Raspberry Pi.  Henrick Stahl has more details about the ARM port.

Is the Oracle JDK port to ARM available in OpenJDK? No, and we are not planning on open sourcing it at this point.
I own a Raspberry Pi/BeagleBoard/PandaBoard. How do I get Java running on it? Make sure that you use a Linux distribution that uses the softfloat ABI, then download and install the Oracle JDK on it.

JavaFX is now fully integrated into the Java SE implementation from this release. There is also the essential addition of multi-touch support, and an application packager to make distributing new bundles easier.

The Scene Builder provides a visual layout tool to create your JavaFX user interfaces.  
In other news, JavaOne attendees will be treated to performances by Pearl Jam and Kings of Leon at the Appreciation Event this September.

Facebook Compiling PHP to Run on the JVM?

An article popped up today claiming that Facebook is investigating compiling PHP to run on the JVM. Until now, Facebook has been using a PHP-to-C++ cross compiler. But the addition of invoke dynamic to Java seems to have opened up a new possibility for Facebook.

Alexander Turner, the author of this article points out that using the Multi Language VM for PHP is somewhat analogous to what V8 has done for JavaScript: JIT compilation of interpreted languages shows a significant increase in speed. In fact, Alexander sees this as the beginning of the end for interpreters:

These are exciting times. Soon I expect interpretors and interpreted langauges to be confined to DSLs and all general-purpose coding to be running in a JIT environment or as up-front compilation. That will be good for companies, good for performance and good for the planet.

Either way, it’s good to see another of the major companies taking the JVM seriously. It could certainly take a long time for Facebook to get to a stage where they can have their code running on a VM unless they leverage the Quercus or Project Zero implementations.

Unknown is whether this is actually happening, but it brings up an interesting debate. If you had a Facebook-size codebase written in PHP, would you take this approach? Node.js would certainly be a more fashionable alternative.

Meet The Author: C# Smorgasbord

About two months ago, Filip Ekberg sent me a preview copy of his upcoming book, C# Smorgasbord. His timing couldn’t have been better – although I’m traditionally a Java developer, I had started looking a writing an app for Windows 8, and had decided to use C#. This book is structured and presented in a way that helped me learn what I needed to know really easily.

About The Book

The book is neatly structured so that you can digest one chapter at a time, depending on what you want to solve. For example, there’s a chapter purely dedicated to unit testing, while another looks at parallel extensions. Dynamic programming, inversion of control and mocking are all given their own chapters. The fact that the chapters were so focussed and could be read in isolation, in any order, is one of the best features of the book. 

Filip shows his depth of knowledge and experience, guiding the reader with good examples and an easy to follow commentary throughout.  The book acts as an essential reference for any developer working with C#. As someone who wasn’t very familiar with the language before, I feel that I have a much better understanding now.

An Interview With The Author

I also had to chance to ask Filip some questions about the book and the whole process behind writing it. Here’s what Filip had to say

DZone: Could you please introduce yourself and your experience?

Filip Ekberg: I am Filip Ekberg and I work as a professional Software Engineer. My primary focus has been C# development ever since I started my own company in 2005. Computers have always been my biggest hobby and ever since I discovered programming when I was a kid it has been my greatest passion.

During the years, I’ve had the pleasure to work with a variety of different things that have given me a great experience. Other than C# I’ve also worked with Java, PHP and C++, among others.

Teaching others have always been something I’ve enjoyed. During the time that I studied for my bachelor degree in software engineering I also worked as an amanuensis; teaching a program called “Creative Mobile Development”. This is somewhat where my blogging started to take form; I started to write articles for the class that I also wanted to share with the rest of the world.

DZone: Is this your first book? What inspired you to write it?

Filip Ekberg: This is my first, but hopefully not my last book.

Most of my inspiration came from my own articles that were re-published on DZone, my screencasts and different presentations that I’ve had for colleagues.

I felt that I had covered so much interesting topics in all the material that I had written so I wanted to explore that and see if it could evolve into something else.

DZone: Can you tell us a little about the writing process? How long did it take and what were the most difficult parts of the process?

Filip Ekberg:  This is actually something that I’ve thought about a lot; I think I could write an entire book on how to self-publish a technical book.

It all started out when I took all my raw material that I had and just put it in a Word document that had a template that I liked. But I soon realized that this posed some problems and difficulties. For instance, the content needed a lot of work to become perfect for “offline-reading”.

During the work on my book I’ve shared hundreds of screenshots with people on IRC, Twitter, Facebook and other places. This has led to a lot of positive and negative comments on the type-setting and such.

Very early in the process I got a tip that I should try out LaTeX and so I did. Basically LaTeX helps you typeset your document by allowing you to write some pretty nice markup. The reason I wanted to try something else than Word was because it posed some difficulties, since I got a lot of feedback from the people that saw my screenshots. I wanted to be able to change the entire layout of the book in just one click. So by using LaTeX, it made it all as easy as writing HTML and CSS.

This also gave it a professional look out of the box with good print ready fonts and such. But there were still lots of work to do on both the layout and the content. Meanwhile when I wrote, I shared more and more screenshots, resulting in a lot of very good feedback. Which led to what the book looks like today.
Also very early in the process I invited a handful of people to help me review the content as I wrote it, so that I would get lots of more feedback during the writing process. This is where one of the most difficult parts of the writing process was; distinguishing between objective and subjective opinions. But thanks to the proof readers Chris Anzalone, Wyatt Lyon Preul, Justin Rusbatch, Alexander Rydberg and Andreas Strid it all turned out very good.

Almost all of the raw material that I had before I started writing the book, was re-written. This means that while I had already put probably 100s of hours into creating good material for articles, screencasts and presentations, this material did not fit into the book without a lot of re-work. So I think it is safe to say that I put down probably not less than 1000 hours type-setting and writing after I had the raw material.

DZone: What sets your book apart from other C# books?

I think the title gives this away “C# Smorgasbord”. In most books you’re focusing on one technology, pattern or a bunch of practices, but you never combine all these together in a nice mix.

All the chapters in C# Smorgasbord can be read independently from each other. The idea behind this is that after reading each chapter, you will have some new knowledge that you can apply in your everyday work.

Explore your possibilities with C# and improve your skills while you will be inspired to challenge yourself. Talking about everything from LINQ to Productivity, Quality and Readability to Roslyn, Dynamic and Asynchronous programming.

DZone: What chapter are you most proud of?

Filip Ekberg: This is very difficult to answer, because of the layout of the book where each chapter is independent and cover a different technology, pattern or practice.

But if I have to choose one, I would say Chapter 9 – “Creating things at runtime”. In this chapter we look at how to create things in runtime using MSIL and how the evaluation stack works.

DZone: Where can people purchase the book?

Filip Ekberg:  Amazon primarily, but also CreateSpace and for a digital copy you can visit http://books.filipekberg.se/.

It will also be available on Kindle later this year.

DZone: What are your plans for next projects / books?

Filip Ekberg: Next up is getting this book ready for Kindle and I also want to get back to blogging more frequently and maybe start collecting material for a new book. I’ve got some ideas but I need to do some more research before I can disclose too much about that!

DZone: Finally, what are your opinions on Windows 8 and the Metro style?

I thought the cover would give that away!

I’ve been running Windows 8 on my work computer since the consumer preview and I really like it.

Regarding Metro, I think it is a great idea going back to the basics; less is more. But as I’ve been using Windows 8 on my work computer, I’ve noticed that I’m rarely in the Metro view at all, just when searching for an installed application that I want to start.It is going to be really interesting trying this out on the surface and see how it feels on a touch device.

 

The Trouble With Android

Over the past few months, a lot has been said about issues with Android, resulting in some dropping Android from their app development roadmaps. First we have the much lamented fragmentation issue, and then we have a troublesome piracy issue. What’s to be done?

Matt Gemmell wrote a great piece on the piracy problem yesterday. What kicked that article off was the fact that Dead Trigger, a $0.99 had an “unbelievably high” rate of piracy on Android devices. Now, it’s true that Matt is more of an iOS guy than an Android fan, but he contends that Android is “designed for piracy”, and he’s right. It’s the devastating cost of such an open platform. Matt poses the crucial question:

People like to throw around figures about Android’s handset penetration. Yes, Android is on a lot of devices. That’s lovely. But the real question is: as a developer, can you make money from it?

It seems that it’s really difficult to. Handset pentration might be the big thing for Android, but that leads to fragmentation,  which itself takes it toll on developers, as you’ll remember from the Temple Run saga at the end of March.

At my core, I’m a Java developer. I want to see Android succeed, so I can use my native language to create apps. But I’m also fairly pragmatic, and so far all my app development has been on iOS (apart from a brief foray into Windows 8 apps). iOS might be a “walled garden”, but it’s a well controlled system that reduces fragmentation and piracy issues. I don’t make a whole pile of money from my apps, but that’s not a fault of the platform.

I’ve come to accept the fact that Android devices come in all shapes, sizes and versions of their OS on Android. It’s just the nature of the beast at this stage.

But it’s piracy that really concerns me. Most app developers just want to make a little extra cash for their app development endeavours. It seems to me that on the Apple app store, people don’t mind handing over $0.99 for an app. Personally, I’ve accepted that to get value from apps, I should pay. With the exception of free apps backed by big companies (Facebook, Twitter etc), there’s little that interests me in the free apps listings on the Apple store.

At $0.99, or anything up to $2.99, I’m usually getting pretty good value. If you could get a coffee for $0.99 you’d consider it a damn good deal. And someone’s gone to the trouble of designing and building the app, as well as getting a developer subscription … well, they’ve earned it.

In the Android world, a change in mentality is too much to hope for – if you can get something for free, why bother paying? Can Google address this, or has the horse already bolted?

Just to balance things out a little, I know that piracy is possible on iOS devices too, but I imagine the ratio of jailbroken iPhones to standard iPhones is pretty low.

I’d really like to hear some solutions to this. I truly want to see Android succeed as a viable platform for developers to make money from.  Should Google make some moves now to ensure they retain a developer community? On iOS, when the developer makes money, Apple make money, and as such I feel they have really looked after developers. Google are getting a cut of the sales on Android, so shouldn’t they help to discourage piracy?

The Most Popular Language This Month Is….

The most popular language of this month? Well it depends which source you use. For example, I checked out the TIOBE index as well as the top language used in GitHub projects. Would you be surprised that Java was not number 1 on either listing?

Now, I never take these language popularity things too seriously. More than likely, the language you’re using at work isn’t the cool language of the day. But it gives a good indication of what languages might be worth learning, if you have the time.

TIOBE Index – C Reigns Supreme

On the TIOBE index, where Java has been number one for a very very long time, C has taken it’s place at the top. Yes, C!

Don’t worry if you’re confused right now looking at this – I don’t get it either! It’s obvious that Objective-C continues to grow more popular. But JavaScript looks a bit low on this index, especially when you consider the results I found at GitHub

GitHub  – Everybody Loves JavaScript

I guess the GitHub ratings make more sense, considering you can’t move in GitHub without bumping into a JavaScript project. Every other language has a reasonable showing. Compare Java to C and there’s not much in it.

Some Better News For Java Developers

I didn’t have to go too far to find some good news for Java developers. RoleConnect, an Irish company that connects contractors with employers ran some analysis on what skills are most in demand right now. According to the team there, there’s still a huge interest in Java/J2EE and Spring developers.

So, three different indices and it’s no clearer what the most popular language really is. Is there a definitive way to measure this statistic? Or is it just all too subjective?

The Solution to the iPhone 3GS Self Restart Issue

If your iPhone3GS has been mysteriously restarting itself since you upgraded to iOS5, then the following steps should help you get out of trouble with the phone. It’s worked for me twice:

1- Remove the SIM card from your mobile

2- Enable the (3G & cellular Data)

3- Add the SIM card again.

4- Now .. it will working fine.

 

Also you can Disable the (3G & cellular Data)

 

See the full thread at : https://discussions.apple.com/thread/3525102?start=0&tstart=0

Design Patterns Uncovered: The Bridge Pattern

Today’s pattern is the Bridge pattern, which allows you to vary both the implementation and the abstraction by placing both in seperate class hierachies.

Bridge in the Real World

The display of different image formats on different operating systems is a good example of the Bridge pattern. You might have different image abstractions for both jpeg and png images. The image structure is the same across all operating systems, but the how it’s viewed (the implementation) is different on each OS. This is the type of decoupling that the Bridge pattern allows.

Design Patterns Refcard
For a great overview of the most popular design patterns, DZone’s Design Patterns Refcard is the best place to start.

The Bridge Pattern

The Bridge pattern is known as a structural pattern, as it’s used to form large object structures across many disparate objects. The definition of Bridge provided in the original Gang of Four book on Design Patterns states:

Decouple an abstraction from its implementation so that the two can vary independently

Let’s take a look at the diagram definition before we go into more detail.

The Abstraction defines the abstraction, and maintains the reference to the implementor.  RefinedAbstraction provides an extension to the Abstraction, usually adding extra methods that provide different ways of getting at the same functionality. The Implementor interface defines an interface for the implementation classes (the ConcreateImplementorclasses).
RefinedAbstractions are implemented in terms of the abstraction, and not that implementation interface.This means that the implementation details are hidden from the client. The pattern is similar to the Adapter pattern, except the Bridge pattern separates the interface from implementation.

Would I Use This Pattern?

The Bridge pattern should be used when both the class as well as what it does vary often. The bridge pattern can also be thought of as two layers of abstraction. When the abstractions and implementations should not be bound at compile time, and should be independently extensible the pattern should be used.

In particular this pattern is useful in graphic toolkits that need to run on multiple platforms. You’ll  see this in AWT, where a component has a component peer which does the OS specific operations. Also the Collections framework has examples of the bridge interface: ArrayList and LinkedList are implement List. And List provides common methods to add, remove or check size.

So How Does It Work In Java?

Here’s the pattern in action using the remote control example from Head First Design Patterns.

First, we have our TV implementation interface:

//Implementor
public interface TV
{
	public void on();
	public void off();
	public void tuneChannel(int channel);
}

And then we create two specific implementations – one for Sony and one for Philips:

//Concrete Implementor
public class Sony implements TV
{
	public void on()
	{
		//Sony specific on
	}

	public void off()
	{
		//Sony specific off
	}

	public void tuneChannel(int channel);
	{
		//Sony specific tuneChannel
	}
}

//Concrete Implementor
public class Philips implements TV
{
	public void on()
	{
		//Philips specific on
	}

	public void off()
	{
		//Philips specific off
	}

	public void tuneChannel(int channel);
	{
		//Philips specific tuneChannel
	}
}

These classes deal with the specific implementations of the TV from each vendor.

Now, we create a remote control  abstraction to control the TV:

//Abstraction
public abstract class RemoteControl
{
   private TV implementor; 

   public void on()
   {
      implementor.on();
   }
   public void off()
   {
      implementor.off();
   }

   public void setChannel(int channel)
   {
	   implementor.tuneChannel(channel);
   }
}

As the remote control holds a reference to the TV, it can delegates the methods through to the interface. But what is we want a more specific remote control – one that has the + / – buttons for moving through the channels? All we need to do is extend our RemoteControl abstraction to contain these concepts:

//Refined abstraction
public class ConcreteRemote extends RemoteControl
{
   private int currentChannel; 

   public void nextChannel()
   {
       currentChannel++;
	   setChannel(currentChannel);
   }

   public void prevChannel()
   {
       currentChannel--;
	   setChannel(currentChannel);
   }

}

Watch Out for the Downsides

One of the major drawbacks of this pattern is that, in providing flexibility, it increases complexity. There’s also possible performance issues with the indirection of messages – the abstraction needs to pass messages along to the implementator for the operation to get executed.

Find Out More


The classic Design Patterns: Elements of Reusable Object Oriented Software
For more practical Java examples: Head First Design Patterns.