Thursday, August 1, 2013

Android developer interview: Martin van Zuilekom from Cubeactive

I promised to give you another interview and here it is. I really like this kind of posts and I'll definitely try to get some more people to talk in the future. In the meantime enjoy your meeting with Martin- he definitely has lots to share.


Bartek:
Tell us something about yourself. Who are you? Where do you live? What do you do in life?

Martin: I’m Martin van Zuilekom a 32 year old software developer from the Netherlands. I’ve been developing software for the last 12 years now. Started as a junior developer and progressed doing just about everything related to software development like UI designs, programming and giving customer support. That reason behind that is the fact that I’ve been working in small teams where everyone has several tasks to do aside from their main job.

Bartek: When did your Android adventure start and how? Why did you decide to do it?
Martin: I’ve always liked to do hobby projects in my spare time. I just got a new phone and it was my first Android phone. I really liked Android and thought it would be fun to create a small app for it. The first app I made had to be something I wanted to use myself, the result was my app Wish l!st.

Bartek: How did you learn how to create apps? What resources were you using?

Martin: I actually had never programmed Java before. I had experience with a lot of other languages like C# and Delphi. But the hardest part of writing for a new platform is learning the framework. I’m one of those guys that learns best by starting to code, so I looked at the samples from the Android SKD and looked up some tutorials from the Internet and started making a few test projects.

Bartek: What libraries/frameworks do you use if any? Why did you choose them?

Martin: I tend to limit the use of libraries. Currently I’m using ActionBarSherlock, the Android support library and the Admob SDK. The reason behind those are backwards compatibility for my app. I try my best to make the app look the same on all of the Android versions I support. Of course the Admob library is for displaying ads.
I also use one of my own open source libraries called Inscription. I like to share useful code with other developers and put some of my code from my own library into this one. It’s a simple library to display information about your app, I use it for my credits dialog and change log dialog.

Bartek: Where do you take app ideas from? 

Martin: Well this depends. A lot of my ideas come from myself. I like to write apps that I would actually use myself. Sometimes an idea can come from using another app and missing features or wanting it to work a little bit different. Other ideas come from my users, they can give good feedback and help me decide future development of my apps.
For design I like to look at a whole range of designs. Ideas can come from books, posters, websites or other apps. They don’t have to be similar to my own apps or they don’t even have to be an app to give inspiration. For example I can look at books on architecture to look at patterns, the use of colors or shapes. And sometimes this will give me an idea for a design and I will get pen and paper and start sketching.

Bartek: Where do you get resources from (graphics, sounds, music)?

Martin: I create a lot of resources myself. For the more common resources, like action bar icons I will first look at the action bar icon pack from the Android developer website. If I can’t find a good icon there I have a nice royalty free icon pack I found on the internet from brankic1979. If those packs don’t have the icon I’m looking for I will make it myself. I think I’m lucky that I can do that myself. Although it can take me a long time to get an icon exactly right. Sometimes it takes a few minutes, but sometimes I will be working on it a few hours, tweaking until I’m happy about it. Other resources like the app icons, logos, banners, etc. I create myself. I Want them to be unique so I will not use stock graphics for those.

Bartek: What other programming tools do you use?

Martin: At the moment not many actually. I use GitStack and Sourcetree for source version control and I use the monitor tool from the Android SDK for working with the Android emulator. I also really like Notepad++, I use it for searching files and other tasks.

Bartek: How long does is take you to make a single app?

Martin: Well this depends. Because I work alone, I like to use small development cycles. Most of the first versions of my apps took about 6 to 10 weeks to develop. But those first versions were very basic and I keep adding features with every update. My goals is that every release should work fine on its own. Yes there might be features that can improve the app, but it should be a useable app on it’s own. For updates I take schedule about 2 to 3 weeks for programming and a few day’s for final testing an preparing the release (things like creating screenshots, artwork and writing a blog post about the update) If an update needs more time testing sometimes ask people on Google plus or other communities to test the next update. This will take some more time.

Bartek: How much are you making on your apps?

Martin: I’m not going to write exact numbers here. But it’s not much at the moment. I’ve started publishing my apps at the beginning of 2012. For most of the months in 2012 I earned less than $30,- each month. It a bit better this year but it’s still more about the fun of writing apps than actually earning money from them. I’m still working hard to earn enough money to buy an Android tablet so I can use it to test my apps on an actual Android tablet instead of an emulator.

Bartek: How do you monetize your apps? Do you have any advice on it for others?

Martin: My advice is, if you want to earn a quick buck do not start developing apps. Like I said before I’m not making a whole lot of money with my apps. Most of the money I earn goes back into my hobby, for example hosting costs for my domain, etc. At the moment I use Admob banners in my apps, have in app purchases for disabling ads and I have a paid pro version of my app. I get about the same amount of money from purchases on Google play as I get from in app ads. I am looking for other ways of monetizing my apps, I would like to be able to have all of my apps ad free in the future.

Bartek: Which one of your apps have been the biggest success and which has turned up below expectations?

Martin: My most successful app is Note l!st. People like the design and how easy it is to use. My widget linear clock is a bit of a struggle. I thought I had a cool unique idea for a widget and it took a lot of work to develop. But for some reason it just does not get the downloads I had expected.

Bartek: Do you use any marketing techniques or SEO?

Martin: A lot of my time goes into marketing my apps. I think it’s about 10-15% of my time working on my apps. I usually take a whole afternoon to get the word out when I publish a new release.

Bartek: Can you give us more details?

Martin: Marketing wise I try to limit my spending's. I don’t have much resources aside from the income the apps generate. When I release an update I will usually write a post on my blog, post the information on the Facebook pages for my apps and inform my followers on Google Plus. If it’s an important update I will also post on some Google Plus communities. I have also several treads on various Android forums about my apps. But to be fair aside from the XDA developers forum most of them don’t attract many new users. When I publish a new app or a big update I will try to contact Android blogs and inform them about the apps. Although 9 out of 10 will not write back, the ones that do will likely write a nice post on your app and can attract a lot of new users. But to avoid them being spammed on updates of my apps I limit writing to these blogs only for very important updates (once or twice a year).
Other marketing techniques I have tried are paid review and advertising on Android devices (Admob, etc.) I have mixed results with these options. They cost money so they need to give a return for your investment. I can say that the paid reviews have not attracted any significant new amounts of users in my case. When using ads I can see a rise in the number of downloads, but I still pay more money per user than I would earn with my current monetizing options.
I find it very important to care for my users and to keep their experience with my apps as good as I can offer. So I have always refused to add any questionable ads to my apps just for more revenue. I never used push ads or other advertisements that I feel uncomfortable with. I always ask myself if I was the user would I be ok with the way I monetize my apps. I feel that I create a trust relation with my users and that trust must be earned and maintained.

Bartek: Could you tell us what blogs you contact to promote your apps?

Martin: Well most of them don’t respond back. I do try Android Police sometimes, Droid-Blog etc., but I have not yet got a review on those sites (and a dozen or so more). Droid App of the Day did a review after contact, and AppEggs as well. Also AppsZoom reviewed my apps after my request. My apps also get reviewed by other bloggers from time to time, but usually they do this because they liked the app, I did not contact them for a review.

Bartek: What are your favourite Android games and apps?

Martin: You can find them on my blog:
http://martin.cubeactive.com/android-top-5-games/
http://martin.cubeactive.com/android-five-great-android-apps/

Bartek: What Android devices do you own?

Martin: Just my phone, a HTC desire Z.

Bartek: What Android blogs/sites do you read regularly?

Martin: Android Police, Wolframs blog and the Android Developers Blog. I also have a lot of great people in my Google+ circles that post the latest news and useful links.

Bartek: What are your plans for the future? What do you want to create/achieve?

Martin: I would love to be able to earn a bit more money from my apps to keep continuing spending a lot of time developing updates and ideas.

Bartek: What advice would you give to other developers (something that you wish you had known before yourself)?

Martin: Be aware of the amount of work it can take to get your app known to the public. That is the hardest part of developing apps. Be critical about the quality of your apps. This is the only way you can stand out from the crowd.

Bartek: Where can people find you on the Internet?



Thank you Martin for sharing your experience. It's a great learning resource for me and others as well. Keep up the great job with your apps. Good luck!

I have to say that I get really excited every time I interview someone. They say that 90% of what you learn is watching great people and I totally agree. Getting to know other Android developers and their work techniques is invaluable and I hope it can give a boost to your work as well. I promise more great content is going to come soon. If you have a question you'd like to ask, post it in the comments section and I'll try to incorporate it in my next interview.

May the force of the green robot be with you!

Wednesday, July 17, 2013

App Dev Empire review

Some time ago I found App Dev Empire - a course promising to teach you how to create Android apps and, what is more important, make big money on them. At first glance, it looked highly suspicious to me. There were only positive testimonials in the comments section and numerous sites giving it raving reviews (just type "app dev empire review" into Google). Anyway, I decided that $47 is not that much after all and even if I didn't make a fortune, I could at least describe my experience on the blog. Also, I was secretly hoping that if I didn't like the course at all, they would give me the money back based on the 60-day money back guarantee with no questions asked, which they promise. Here's the whole story.

The App Dev Empire site looks great and almost makes you beg to let you pay to finally take a peek at the course. The promotional video is very professional and makes you think that if the actual content is half as good you might have found a gold mine. What is more, it claims to be able to teach you all necessary stuff without any prior programming skills. Seems unreal? Well, let's see...


So I finally clicked the "Buy" button, having that strange feeling in my gut that I was doing something incredibly stupid, but at the same time whispering to myself "come to me my precioussss"... When the transaction was complete, I was so excited to see my latest purchase that I almost fell off my chair. Unfortunately, here it was when a streak of disappointments began, slowly putting out all the enthusiasm that had been built up so tenderly before.

The first thing that you see is an upsell screen telling you that although the course itself is great as is, you might be interested in acquiring some additional source code helping you to understand it better and have a base for further experimentation. All that for only $47. Having just paid the exact same amount and not being prepared to put my hand in the pocket again, I politely refused the offer and proceeded to the long awaited members area.

I found and played the first video dying to see what it had to offer and heard the familiar soft voice of the guy from the promotional material. Time flew while I cherished every single word that I heard, instructing me how to organize my environment and tools. It seemed like minutes when the video was over. Or perhaps it was minutes. I checked it to be sure and in fact it lasted only 4:24. Well, I thought to myself, there are 11 more from which I can still learn highly valuable information helping me to become a successful app developer. Each one of them putting me a step closer to the final goal.

Then another thing happened. I saw the second video and it was only 2:19. No, there is no spelling mistake: two minutes and nineteen seconds. I got seriously worried that the beautiful game they sketched so vividly would never get done or perhaps appear magically with the soft voice guy saying something like: "We've omitted parts of the code to let you work on them yourself. If you have problems with it, you can buy the source code pack for only $47". Fortunately, I was wrong this time.

The whole course turned out to be a little more than 5h long. Actually, I wouldn't use the word "course". It's more of a screencast in which you see the creation of a simple game. I quite liked the idea that you see everything that is done, from installing the environment, through downloading and processing of graphics and sound resources, up to coding. Unfortunately, it also makes the videos unbearably boring. You just watch the code being written with a speed of an 80-year old who just found out how to use a keyboard. Wouldn't it be easier to just paste the code and then review it?! Sorry, I always get frustrated when I see someone type so slow. But I do have to admit - the game eventually gets created and works.

After watching the last video, I asked myself the question: "What did I learn from all this?". The problem was, I couldn't really tell. It wasn't a programming course, because they assumed you already knew how to get around in the programming environment and handle the code (sometimes quite complicated). They didn't show me any good libraries to automate the game creation process and make it easier and less time consuming. In fact, they used the most basic Android tools: drawing on a Canvas, playing sounds with a MediaPlayer and handling all logic (collisions, animations, etc.) by themselves.

What got my attention was that the code didn't meet any Java coding standard. Variable names started with capital letters or had underscores. Sometimes I wasn't quite sure if a name was referring to a class, a method or a variable. It made me wonder if the guy who actually wrote it had any Java experience. You just don't make such things... ever. Sometimes in the video you could see files with names written in cyrillic which only confirmed my thesis that the author was a freelancer from the eastern conglomerate. And when the soft voice guy pronounced "onTouchListener" as "onToughListener" he lost all the respect in my eyes.

I could probably give some more examples of the lack of quality like the fact that using image resources found with Google is probably illegal and that the game doesn't handle situations when there is an incoming call or the screen size changes. I have to admit, though, that making a playable game in such little time is quite impressive. Especially, taking into account the speed of typing and that some of the video material shows you how to install the programming environment. At the end of the course you should have a ship flying in the right direction, obstacles forming a kind of a tunnel and coins that you have to collect. Everything looking quite pleasant to the eye, including menus and backgrounds.

Besides video lessons, App Dev Empire offers 6 pdf reports. I didn't expect much from them after finishing the course, but they turned out to be not that bad. They describe the most popular app categories as well as monetization and marketing techniques. You shouldn't expect too much from them, since they are usually two to three pages long and use a couple of sentences to explain each point, but they do mention some useful sites and techniques (although you'll have to make some further research on them yourself). To me they seemed too general - almost like typing "android monetizing techniques" in Google and checking out the results.

There's another section on the App Dev Empire site called bonus material, but its content only says: "This additional bonus training module will be released 17 June 2013". It's mid July 2013 when I'm writing this, so I'm not quite sure if it will ever appear.

As you may easily guess, I wasn't quite satisfied with the course and I decided to make use of the money back guarantee. It required some effort, since the support email address on the site didn't work (I kept getting undelivered email notifications). I eventually managed to do it via ClickBank, which is a bigger platform App Dev Empire is sold through. You can find detailed instructions on how to get a refund in this YouTube video. By now, all the cash has already been transfered to my PayPal account and, quite surprisingly, I still have access to the course. Not that I want to go through it another time, but it was helpful while writing this review. Perhaps some day they'll upload the promised bonus material as well...

To sum up, App Dev Empire is not a great product. I'd give it a score of 3.5/10. I liked the form of video lessons and some material from the reports, but in general, it offered less value than an average Android book (which would probably be cheaper anyway). If you're willing to commit 6h of your time and $47, I'd still say to try it - especially with the money back guarantee. Just don't expect to become a millionaire afterwards or to learn how to program if you're a total beginner. You have to at least understand someone else's code and get around in Photoshop or some similar piece of software to be able to follow the lessons.

I hope this review will help you make the right decision. Especially that there are plenty of them showing the course in a totally different way. Feel free to share your own experiences, if you have any.

Friday, June 28, 2013

Android indie developer interview: Krishna Teja from Mad Logic Games

Here's the first interview I've done for my blog. I want to do more of them in the future inviting interesting people and asking them questions about their work. I hope you find it educating. Enjoy your reading!


Bartek: Please, tell us something about yourself. Who are you? Where do you live? What do you do in life?

Krishna: Thanks for inviting me. My name is Krishna Teja, the founder of Mad Logic Games, and my vision is to make it the world's best game development studio. I am a 19 year old student studying Computer Science at VNR Vigyana Jyothi Institute of Engineering and Technology, Hyderabad. I am just getting started with my Android programming career. As an independent Android developer I published 5 games on Play Store and currently making more. My aim is to turn my Android development hobby into a professional company.

Bartek: So, how did it all start? Why did you decide to make Android games and not for example iPhone games or some other kind of apps? I know that you used to make money through Internet marketing. What was wrong with it?

Krishna: I develop my games using a cross platform engine, so I can compile them for Android, iOS and Windows too. My games are already ready for iPhone and iPad but the only problem is I need a Mac and an iPhone/iPod to publish my games to the iTunes App Store. I don't have them yet since they are too costly and I don't have the money right now to buy them. Once I earn enough money, I will immediately publish my apps to the Apple App Store. I've spent all the money I made through Internet Marketing to buy my development PC and the Game Development tool called GameMaker: Studio.

Bartek: Can you tell me some more about it? Why did you choose this tool? What are your experiences with it? What language do you use to program?

Krishna: I have a paid license for GameMaker: Studio Master. Though it's costly, it's an amazing tool which allows you to create games very quickly and is very easy to learn. You can make games without any coding, just use the built-in drag and drop features. Also, once you develop the game you can deploy it to various platforms like Android, iOS, Windows, Mac, Ubuntu, Tizen, web (HTML 5) with a click of a button. Because of all these features I carefully chose this tool and feel it's been totally worth my investment.

Bartek: What other tools did you consider? Can you write Android native code?

Krishna: Yes, I can write Android apps in Java. A year back I started programming with Java and used a third party open source library called LibGDX. LibGDX is Free and Open source and can be used to create games for Android, iOS and HTML 5 too. But, it was very hard for me to make even a simple game. So I started searching for other tools and found GameMaker Studio.

Bartek: What language do you use to write games in it? What features do you think it has that makes it better than other tools?

Krishna: For beginners, you don't need to know any programming. GameMaker offers a Drag and Drop user interface which can be used to develop games. For advanced users, if you need to include any complex functions you can do that too using the special Game Maker Language. It's easy to learn and includes a lot of documentation. I personally use both Drag and Drop and GML language to write my games. I think it's better than any other tool because of its easy to use Drag and Drop interface.

Bartek: How much time did it take you to learn how to use GameMaker?

Krishna: A week to learn the interface and the basic functions. I was able to make games within minutes! GameMaker offers plenty of tutorials which are easy to follow.

Bartek: How much is the GameMaker version that you have?

Krishna: I have the GameMaker: Studio Master Collection license which costs $499.99. For those who want to get started you can use the Free version to build the game for PC and later buy Android license to publish it to Play Store.

Bartek: Where do you take your game ideas from?

Krishna: I come up with game ideas myself. I think of all the possible things I can do with GameMaker without much programming/graphics involved and then come up with some simple games. I show it to my friends and ask them if they like it. If I get positive feedback, I start developing the game.

Bartek: What about game resources? Where do you get you graphics, sounds, and music from?

Krishna: Graphics are mostly done by me. But my friend helps me too. Sounds and music are taken from others and are commercially free to use. I use Adode Photoshop and Illustrator to make graphics. My favourite site to get sounds and music is freesound.org.

Bartek: Do you also use some other programming tools? Source control (SVN, git?) or something like that?

Krishna: No, since I am the only one who programs I don't use any source control tools. This is what I do to quickly convert my idea into game:

  • Write down all the ideas you get onto a piece of paper/notepad.
  • Think of a theme and story for your game.
  • Check if the game can be programmed easily.
  • Now start developing a prototype for the game. (Simple game showing what you want to make without any graphics)
  • Split the programming into parts.
  • Try to program all the complex parts first.
  • Finally, assemble them and start applying nice graphics to it.


Bartek: How long does it take you to write a game?

Krishna: My first game took me a month, because I was still learning and didn't know about some functions. Other games took me about 2 weeks to develop.

Bartek: How many hours a day are we talking about?

Krishna: About 3 hours a day.

Bartek: How much are you making on your games now? Which one has been the biggest success and which one has been the biggest failure so far and why?

Krishna: I am making an average of $3.5 a day (a little more than $100 a month). My biggest success was my first game: Box Game. Biggest failure? Scary Prank Game, but I can't say failure because I published it recently and it needs some time to get downloads. Also Scary Prank Game was a rehashed version of Box Game.

Bartek: How do you monetize your apps? Do you have any advice on it?

Krishna: All my games are free. They don't have any In App Purchases (for now). I only use banner and interstitial ads in my games. Many of you will have different opinions regarding monetization. But my advice to indie developers who don't have any initial investment/budget for marketing is to make a game free and add ads or in app purchases. I personally feel that for Android ads work better than IAPs because of the demographic of the users. For iOS people are more likely to pay so use IAPs.

Bartek: What ad network(s) do you use?

Krishna: I only use AdMob right now. I will be adding Millennial Media Ads very soon.

Bartek: Interesting, why did you choose Millennial Media Ads? I have to say it's the first time I hear about it .

Krishna: Actually I didn't choose it. :P GameMaker only supports AdMob, AdColony and Millennial Media so I had no choice. I talked to their support team and they said they would be supporting PlayHeaven soon. So I am waiting for it.

Bartek: That explains much. So, what are your plans for the future? Are you making a new game now? Can you reveal some of the secret?

Krishna: Build more games for Android. After I start earning a steady income, I will buy a Mac and iDevices and port my games to the iTunes App Store. Yes, I am making a new game now. I will publish it next week if everything goes well. There are no secrets, whatever I do I post it to my blog. All you have to do is work hard to reach your goals.

Bartek: What's your favourite Android game?

Krishna: Tough question haha. Some of my favourites are Temple Run, Plants vs Zombies, Subway Surfers.

Bartek: What android device(s) do you own?

Krishna: I own a very low end phone LG P350. It can't run any new games. I use my friend's tablet to play and test games.

Bartek: Do you read some interesting blogs on Android development? Do you know any interesting sites that you could recommend?

Krishna: I follow www.nenoff.com, www.ziggysgames.com and yours, all other blogs are dead, no one actively posts. I also follow the forum http://forums.makingmoneywithandroid.com/ which has some nice informaton regarding monetization.

Bartek: What advice would you give to other developers (beginners and more advanced ones) - something that would have helped you the most if you had known it earlier?

Krishna: First decide what you want to make, a game or an app? Search for some development tools to make it. Choose the right tool. For 2D games I use GameMaker (paid) but you can also select free tools like AndEngine, PhoneGap, LibGDX. For 3D choose Unity 3D. Try to learn everything regarding the tool using freely available tutorials and youtube videos. Then start building a simple game first. Don't try to develop the next Angry Birds! Start small, you can later try complex stuff. First develop a simple game and publish it to Play Store. Wait for feedback/reviews, it will definitely inspire you to build more games.

Bartek: Great piece of advice! If someone wants to find out more about you and your games, where should they go?

Krishna: You will find all the information regarding my development journey at my blog: http://madlogicdev.wordpress.com and all my apps can be found here: https://play.google.com/store/apps/developer?id=Mad+Logic+Games
You can talk to me directly at krishnatejanew [at] gmail.com.

Thank you for the interview.

Bartek: It was my pleasure. Good luck with your games.


So, did you like it? Do you want me to do more interviews in the future? Let me know!

If you have something interesting to say and are willing to share your knowledge, feel free to contact me as well. I'll be glad to hear your story.

Thursday, June 20, 2013

Android static code analysis tools

If you think you know Java well, you are probably wrong. And even if you are a true pro, you certainly still make mistakes - yes even those silly ones. To make it more daunting, Android is not just plain old Java. It enforces the use of mechanisms that are not easy to understand at all: multithreading, generic types, memory management, and various design patterns. Do you still think you're good enough on your own? Watch the videos below (or at least skim them).



The guy in gray hair is Joshua Bloch - the former Chief Java Architect at Google (he quit in 2012 after 8 years there) and the author of  Java Collections framework. As you can probably guess, he's a pretty smart guy. He also has a good sense of humor, which isn't very common in the IT world. If you'd like to rake your brains some more, check out his book: Java Puzzlers: Traps, Pitfalls, and Corner Cases.

But back to the point. Knowing the syntax of a programming language is not the same as being a good programmer. I remember reading Effective Java (again by Joshua Bloch) and getting surprised every chapter at how little I knew about high quality code. I worship this book for showing me that I had (and most certainly still have) a lot to learn and that Java is much more complex than it appears to be at the first glance. After reading it three times back to back and getting a couple years of experience I feel much more comfortable now in the world of classes, variables, and methods. However, the conclusion you should be getting from this rant is that no matter how skilled or smart you are, you will always be creating bugs.

So, is there anything we, programmers, can do to prevent at least some of the mistakes we make? The answer is yes and we can achieve it using static code analysis.

For all those who are not familiar with this term, do you remember when Eclipse suggested that you get rid of a variable because you were not using it anywhere or when you used the assignment operator for comparison when you actually meant to write ==? That's, more or less, it, but there are much more powerful tools that can take it to the next level. Let's see what they are.

Lint

This tool is already there for you without the need to install anything. It has been introduced in ADT 16 and has been a part of your Eclipse ever since. What can it do? It works with Android specific functionality, checking such things as:
  • missing translations, e.g. when you have a text resource in one language but not in another
  • layout performance problems, e.g. when you nest views unnecessarily
  • unused resources, e.g. when you have images in your res folder that you never refer to
  • accessibility and internationalization problems, e.g. when you hardcode strings
  • icon problems, e.g. when you failed to provide icons for all screen densities or they have wrong sizes
  • manifest errors
Lint is always there for you, running in the background. However, it does not scan the whole project unless you tell it to by pressing the checkbox icon in the toolbar. Make sure you do it from time to time and don't just ignore the messages that appear in the Lint Warnings view. Each of them provides a lengthy explanation of what's wrong with your code and even if you still don't get it - ask Google.


It's one of my favourite tools. You can easily install an Eclipse plugin by going to the Eclipse Marketplace (Help/Eclipse Marketplace...). Then right click your project and choose Find Bugs/Find Bugs...

I guarantee that you'll be surprised at what you find. They scanned the latest Java JDK itself and discovered quite a lot of things that should have been done differently. If the Oracle's employees have been so sloppy, I wonder how your projects do...

Here's what bug patterns FindBugs looks for:
  • difficult language features
  • misunderstood API methods
  • misunderstood invariants when code is modified during maintenance
  • garden variety mistakes: typos, use of the wrong boolean operator
P.S. They use FindBugs regularly at Google to keep their code quality high.


Google CodePro Analytix

You can again get it from the Eclipse Marketplace. It provides similar functionality as FindBugs, but also:
  • finds duplicated code
  • generates JUnit test for you
  • computes code metrics
  • computes test code coverage
  • draws dependency analysis diagrams
I discovered CodePro quite recently and I must say it's very powerful and helps me a lot.


It used to be a tool checking if the code meets the specified coding standards. It has evolved since then and has become a very powerful ally in the battle with bugs. You must certainly get to know it, because it has been the industry constant for a good couple of years. Extremely easy to install through Eclipse Marketplace.


Yet another code analyzer. Very powerful, one of the best known by programmers and downloadable as an Eclipse plugin.






Other tools

If, for some reason, the tools mentioned above are not enough for you or you just want to experiment with more of them, make sure to take a look at the list of tools for static analysis at Wikipedia. It contains useful utilities for languages other that Java as well.


Use it!

I hope I don't have to repeat myself and tell you one more time that using static code analysis is a must. You don't have to install all of the tools mentioned, but choose at least one that you like and run it whenever you add some new functionality. Don't ignore the warnings! There will be false positives from time to time, but treat them with caution and look for a detailed description online whenever you don't quite understand what's wrong. I guarantee, that you'll find bugs you haven't event thought of and that you'll learn a lot by correcting them.


If you feel like sharing your experience, let me know what tools you like the most and what unexpected errors you were able to find. Don't be ashamed of your code. Remember that even smart people make dumb mistakes.



Sunday, June 9, 2013

Unity free for mobile indie developers

If you want to start making Android games, the guys from Unity just got you a huge present. They released their cross-platform engine for free. Well, at least if you're making less than $100,000 a year with your apps, which I suppose you do. Watch the announcement yourself or read it on the official blog.


If you haven't heard about Unity yet, you should check out the Wikipedia article about it and see some games created with this tool: Bad Piggies, Temple Run 2, Slender: The Arrival. Also, here's their official YouTube channel (go to the Made With Unity section for some amazing stuff) and Facebook profile with news, announcements, and deals.

Mike Kasprzak, an indie game developer whose blog I follow, wrote a nice article some time ago about modern middlewares, featuring Unity as one of the most interesting tools. After that, he continued his reasearch and described his experiences in another post. Apart from that, Mike is a really cool guy. I suggest checking out his game Smiles which got plenty of awards. I used to watch the indieconversation YouTube channel where he talks with other developers about... well basically all aspects of indie game development. It doesn't focus on Android, but it's fun to watch and gives you some insight into the lives of a bunch of geeky individuals.

For all those who want to learn Unity, here's a great forum thread which mentions probably all possible resources there are. Let me know if you create something cool... or even if you fail miserably. If you've already made a game with Unity and want to show off to others, feel free to comment and post a link to it.

Saturday, May 25, 2013

Five surprising facts about myself

In my hello world post I said that I was just another Android hobby programmer out there. Well, that may not be entirely true. Perhaps I'm still far from being a genious coder, but there are definitely things that make me unique, as there certainly are for you. Sometimes I feel like there are so many people smarter and better than me that my success seems extremely unlikely. That's why I decided to make the following list and perhaps make you realize what makes you one of a kind as well.

Fact 1

I don't own an Android device. It's not a spelling mistake. I've actually created all my apps using only the emulator, my brother's tablet which he would lend me for testing purposes and later also my girlfriend's phone. I'm not very proud of it. In fact I recommend you test what you write on as many different physical devices as you can. What I'm trying to say is that you don't need much to start your Android adventure and make your first app. Perhaps your excuse for not trying out a good idea is quite different, but keep in mind that most obstacles can usually be overcome this way or another and it's all in your head whether you take action or keep dreaming.

Fact 2

My apps got me a full time job as an Android developer. It wasn't and still isn't my main goal, but it definitely boosted my self esteem. In fact, I must have beaten some people during the interview process and my apps must have proved good enough to actually get me hired. The job itself might not be perfect, but I'm definitely learning a lot this way. I virtually doubled my Android knowledge during those two months and there's still much studying ahead of me. Also, did I mention that I work from home and that my salary doubled compared to my previous job? Pretty nice, isn't it? I'm intentionally omitting some not so positive stuff here, like the amount of time that I had to work at first or my boss's not so friendly character. Nonetheless, I'm happy to be able to have this experience and to show you that being a hobby Android developer may have other advantages than just earning money on apps.

Fact 3

I'm Polish, but I've been living in Milan (Italy) since January. It's been quite a change for me to move to another country, learn the language, and deal with everyday situations. I can't say I feel at home now, but it definitely gets easier after some time when you learn your way around and get to know a couple of people. Anyway, after staying for four months in a friend's apartment (she left for Peru to finish up her thesis), I finally have my own place. Although it's not very big, it's quite cosy and I have to say that I quite like it. Now I'm waiting for my first paycheck to buy some crucial stuff and make it less shabby. Hopefully, it will come soon. As to my future plans, I'm not sure if I'm going to stay here long. The city is extremely expensive to live in and there isn't much it can give back in return. I might go back to Poland after some time, but there's still so much world to see, that I'm tempted to take another detour. Where do you think I should go?

Fact 4

Recently I stopped to think about all the various stuff that I had a chance to do in my life and I was amazed at how diverse it was. Let's start from the beginning. During my university I was and intern making Java SE and Symbian GPS navigation software. Then I got a full time job as a C++ programmer, writing stuff for large retail stores, so that they didn't get lost in what they sold, to whom and for how much. Occasionally, I had a chance to use Python for internal scripts and even ASP.NET for an online store prototype. After that I switched to Java EE, JSF and some web centered technologies. Suddenly HTML, CSS, JavaScript and related things became my everyday life. In the meantime, I did a couple of small projects in Python for a friend's company, not to get too rusty. I also started learning Android because my work seemed more and more boring. Eventually, I decided to quit and try some freelancing. I was hoping I could make my Android apps get me at least a minimum amount of money to be able to survive. A friend asked me to help him with an online store in PHP and I thought it was a good idea. Well, neither of my hopes really worked out. I did some short term PHP projects, I built a website for my friend who is an architect, I learned some more Android and released a couple new apps, until I ended up where I am now. Pretty crazy, isn't it?

Fact 5

I have a ton of random skills and I've done a handful unusual things. I can juggle pretty well, and I'm not just saying that I can do the basic shower - I can do the inverse one as well as Mills mess, Rubenstein's revenge and some other not so basic tricks. I slackline, although I'm not one of those guys who do backflips and handstands while they are on the line. I'm not a bad swimmer. In fact, I used to work as a swimming instructor at a camp in New York. I also did some lifeguarding. I know the basics of POI and I hope that I can learn to be better at it when I find a bit of free time. I enjoy sailing and windsurfing whenever I have a chance to do it. I'm a huge frisbee fan and I was a member of the local ultimate team for some time. I love photography and I take my camera with me whenever I travel or something interesting happens. At some point in my life I had a job in gokarts, gardening, giving private lessons (mostly math and physics), being a camp counsellor, a construction site worker, and a computer technician. I honestly hope that I can at least double this list in the next ten years. What I hate is routine and doing the same things over and over again.


Surprised? I hope at least a little. Have you done anything interesting lately?

Friday, May 3, 2013

5 reasons why you should sign up for Coursera


Coursera is an education company that partners with the top universities and organizations in the world to offer courses online for anyone to take, for free. I did 5 of them in the past (Artificial Intelligence, Model Thinking, Game Theory, Algorithms and Cryptography) and I'm doing another two right now (Gamification and Interactive Programming in Python). If you don't know it yet, go give it a try. I promise you will love it. And here's why:

1. It's free

It's crazy, but you really don't have to pay for it. You can sign up and follow any course you want. They do have a paid "Signature Track", but it's totally optional. It gives you an official certificate when you finish a course, if you're interested.

2. 300+ courses to choose

There's no way you don't find anything interesting there. There's over 20 categories ranging from computer science, through mathematics, statistics, economy and finance, to more humanistic subjects such as art, social sciences, or education.

3. Top universities and professors

Have you ever dreamed of studying at Stanford, Princeton, Rice or Duke? Now it's possible. All the greatest minds and teaching talents are there for you. Now you have no excuses that the classes are boring. They are far from it.

4. Great content quality

The courses use video lectures, online quizzes, peer reviewed written assignments and other online tools created for the sole purpose of teaching you particular skills. Believe me, the overall quality is great. You have deadlines concerning watching the lessons and completing online excercises, but otherwise you're free to choose your own study place and time.

5. 3.2 million users can't be wrong

It's not a spelling mistake. More people have signed up for Coursera classes so far then the whole population of Rome. Do you think they had a reason for this? Of course they did! It's a great oportunity to get additional knowledge in subjects that have always interested you - no matter what they are. Even if you don't speak English very well, there are subtitles in Spanish, French, Italian, and Chinese. The courses don't usually require much prior knowledge, so you can begin with a basic acquaintance with the subject. If you are still unwilling to spend your free time on spontaneous education, remember that you can get a certificate and brag about it in your CV (that's what I did and it really interested most of my interviewers).


To get a closer look at Coursera, you can watch this short video:


If you still need convincing, listen to Daphne Koller, one of the founders, as she expains the idea in more detail:




Ready to sign up? Go to Coursera and let me know if I was right.


P.S. I'm not a Coursera affiliate nor have any business connection with it. I honestly think it's a great education platform and if I sounded a little overexcited it's only because I believe everyone can benefit a great deal from it.