Friday, August 08, 2014

MyAnthem development - Progress report 1

It's been over two months since I began working on MyAnthem app for Android and I thought to summarize the progress.

The app has already 10 Alpha versions published on Google Play and most of the main features are already implemented. Not all versions were successful, there have been 3 or 4 who crashed. I still remember my first version which crashed, which brought me a real adrenaline rush during a Saturday morning. It turned out the bug was really easy to fix, it was a global define I forgot to update.

Being my first application on a new platform, the development time takes long. I had to start from zero with every single feature, researching, understanding, implementing and debugging it. Even the development and release work-flow I had to define and get used to it.

The biggest time consuming step in implementing a feature is not the actual coding part, but the research involved in understanding it. I usually have between 5-20 tabs open in Google Chrome every time I finish implementing a feature, not to mention the ones I closed to save RAM. Eclipse and Chrome can eat up a lot of RAM and the 8GB that I have on my laptop are not enough most of the times. Most usefull websites so far for researching were stackoverflow.com and Android developer. If the Android developer gives an overview of the feature, StackOverflow helps me find out solutions to various problems that others have faced. I've reached now 37 consecutive days when I visited StackOverflow and the way it goes, I'll probably get my first gold badge soon :)

Features available in the app:

  • Activity displaying the list of countries for which the anthem is available
  • Activity displaying anthem detail
  • Integration and usage of SQLite database
  • Instrumentation with Google Analytics
  • In-App Billing
  • In-App and interstitial ads
  • Anthem download and possibility to interrupt the download
  • Country Flag zoom
  • Anthem playing
  • Notifications in the status bar
  • Search functionality
  • Sharing
Even if I don't expect to earn much with this app, the things I learned about Java, concurrency, file parsing and Android Development are enough to keep me motivated to continue.

There are still a few features left to work on and a careful analysis and of the graphics and general UI of the app, so stay tuned for future updates.

In case anyone wants to become a Alpha tester, here is the link to MyAnthem

Tuesday, July 22, 2014

The bubble around you...

Sometimes I get these flashes of "intelligence" and in some of these situations, things turn out the way I want or say something "smart", both at work and in personal life.

I'm sure you are familiar with this type of people. Everyone has at least one or two colleagues, working in the same company or at the same department, or some friends, who seem to make things happen. Often coming with unexpected ideas or easily getting a bigger picture of things when you explain them something new.

I read once a book where the author imagine a bubble of influence around every person in the world. My bubble encapsulates, to a bigger or lesser degree, the bubbles of other people around me. I am also part of others people bubbles. When I do something, I would start a ripple through time and space, that would jiggle the bubbles of those who I am connected to, depending on the strength at which they are interconnected.

I like the image this theory generates in my head and it makes me think of how small we all are, with our struggles and emotions. Picture a camera view, zooming out on the world, and seeing people around you with their bubbles getting smaller and smaller. As I zoom out, I realize that what appeared as a big bubble around me, is not as big. Bigger bubbles from other people emerge, which makes mine look very small. And if the zooming continues both in space and in time, even bigger ones emerge, with connections to various people around the globe.

It's a scary image! The world doesn't seem so simple anymore, does it? I don't seem to have all the answers as I previously thought and my struggles appear less important and meaningless.

So why do we categorize others around us as smart, intelligent, clever?

The only answer I could come with is that our brain needs it. Our brain is by design lazy. It always looks to the least energy expensive way to interpret situations around us. It needs this easy characterization of people that you interact with, in order to know how to interact with them without spending additional energy every time rebuilding a mental profile. How many times have you stopped and analyzed a friend when you meet with him? Your brain does this with people you just meet, but once it attached mentally some categories to that person, your brain will always call to those quick references when you meet later on with the same person.

What's even worse is that these mental profiles your brain makes after the first encounter with someone are very hard to change. Why would your brain go through the the effort of analyzing again someone it already did? What benefit it has to spend that much energy?

Try to find ways to force your lazy brain to continuously analyze everything and everyone you interact with, especially the image your brain makes about yourself. Everything around us changes, the experience we build makes us constantly change, so why would the image our brain has on the world stay the same?

Wednesday, June 25, 2014

Google IO2014 - We live in a world of apps

Google IO2014 just started about an hour and a half ago with the Keynote introduction.

They set up a nice page to watch live stream. So far I am not impressed about what Google plans to release. The only interesting thing I saw was the L platform, which I expect to materialize in a new Android release. The L platform will add a big UI improvement especially when it comes to graphics and animations and some interesting improvements in performance. Seems that in the Google is ready to switch to ART runtime so we should expect in the next Android release that ART runtime will be enabled by default. The performance graphs shown during Keynote presentation promise a big improvement compared to Dalvik runtime.

Another topic presented was about wearable smart watches. This didn't impressed me much. I have mixed feelings about smart watches. What they shown in presentation looks nice and cool but I can't image how a battery on such a small can last more then a few hours. Based on the feedback from colleagues who tried smart watches I'm not gonna rush to buy one yet.

Google also worked on an SDK for integrating your Android smartphone with your car computer. They shown a few features, like voice searching, turn by turn direction, message sending but nothing that impressed me.

Android TV was another topic that was presented during Keynote. Google apparently struck some deals with a few producers of smart TV's to produce the next generation of their TV's with Android on them. I'm curious if these deals will actually materialize or the major hardware producers will decide to implement their own solutions. So far Samsung has done this with their smart TV application and in my opinion this has not been a good experience for the users. I own such a smart TV and the "smart" part of lacks a lot of features and functionality.

Google Chromecast sounds promising but we'll see if it will catch momentum or it will be just another soon to be forgot tentative by Google to tap into the huge world of television. I have to admit that the price of 35$ is tempting enough to give it a try on my old Samsung Smart TV. Maybe with this little stick, I can actually use the smart part of my TV :)

Google Chromebook was another topic presented during the Keynote. I never really saw the benefit of owning a Google centered laptop with limited functionality. The features presented didn't impressed me enough to consider it as a possible acquisition for the future. I'm still going to stuck to my old and trusty laptop because it's allows me to run a much wider range of applications. Especially when it comes to development of applications, I don't see how a Chromebook could ever replace the laptop.

If I were to summarize in two words this year Google IO, those would be "Apps everywhere". On your smartphone, car, TV and laptop, Google wants to run their apps from Google Play. For every platforms they provide SDK trough which a developer has access to API's so it can create his own apps. Maybe it's just me, but apart from a few apps that I use on a regular basis on my smartphone, I haven't installed new ones in a long time.

We'll see if what future awaits...


Friday, June 20, 2014

My first project in Android

I found that there are several stages in the life cycle of a new personal project I set on.

  1. Initial rush - In this part everything is new and exciting. The world is full of endless possibilities an it seems like I can do everything. This is the part where I think that I can realize great projects and achieve greatness.
  2. Cooling part - This is the part where I realize that things are not so black and white as I initially thought. Usually the volume of information becomes overwhelming, I struggle with understanding some hard to grasp concepts and start to become demotivated. The initial goal of achieving greatness seems to distant itself more and more as the days pass. This is a critical part in the life cycle of a new project. If I find the motivation to pass over it, it will keep me going and I end up most of the time achieving what I initially proposed.
  3. Mastering - If I got to this part it means I have the necessary documentation materials gathered and organized and most likely something practical that drives my motivation to continue 

I haven't yet finish going trough all the materials I gathered about Android Development but I decided to work on my motivation to achieve the "Cooling part" I was mentioning above. The way I chose this was by implementing a rather silly idea I got a few weeks ago of making an app that will provide a collection of anthems from the various nations.

Maybe some will argue that you need to learn first what are the building blocks you can play with before you can start doing anything useful, but let's face it developing a real application instead of doing exercises based on a book it's much more fun. This method has it's drawbacks but for me it gets the job done and motivates me to go beyond the initial rush of taking over a new personal quest and keep on struggling to understand the new concepts.

I am still lacking crucial experience with some of the other aspects for the Android, like services, intents, broadcasts, but I plan to keep on studying in parallel with the projects I make. It's just that I found it much more rewarding to figure out new things as I struggle to implement something rather than following for weeks in a row a examples from a book.

After the first part of the book, dealing with fragments, viewpager, viewlist and making them all fit together nice and tidy, I found it extremely hard to reproduce it all over again in my new app. While I was coding the example app from the book, all was clear and I understood everything I did. When I had to do it all over again on my own in a different project, reality was different. In fact I failed miserably and realized that all I did so far was to try to memorize something that others have wrote it.

My new app is starting to get shape. It's using the Model-View-Controller architecture because I found if very useful to separate an application into distinctive layers. This makes the app maintenance much easier. I hope I will find the time to build the anthem database, which I am lacking at the moment. It's a very tedious job but it has to be done if I want to move forward with this project. After a day spent understanding Google Analytics, I think I have a fairly good idea of how to integrate it and in what way it can assist in understanding behavioral patterns of my future user base.

After I gather the anthem database and figure out how to make the sons play, the app with be ready to be launched on Google Play market as a beta release.

Wish me luck!

Wednesday, June 04, 2014

Is freelancing an option?

Recently I decided to give another try to freelancing.

The first platform that I will use to test if freelancing is an viable option or not is Freelancer.com. I came across it while searching on Google for freelancing possibilities. Since I am still rather new into Android world, I'm not thinking yet of changing my career so I thought that once I gain a bit more experience, I will try my newly acquired skills in real world. There is one thing to sit comfortably behind your desk and study a new programming language, working on some simple applications and another thing to be under the pressure of reaching a set of milestones agreed with a customer.

I was rather surprised when I tried to make an account on Freelancer.com, because they told me my email address was already in their database. Initially I thought I was a victim of a scam and someone else used my email address to create an account on my name. After requesting to reset the password by email, I realized it's in fact my old account on RentACoder. I already had some reputation based on a few small projects I did a few years ago so I decided to give it another try.

Rather then being another faceless figure on an website, I decided to invest some time into creating a sold profile, enumerating my achievements, education, diplomas and portfolio. To my surprise, the list of achievements was not as big as I expected. My portfolio for example contains only a small Android application that I created as part of my recent study. The website has an interesting experience and credit based system where you progress quite fast in the beginning by completing various tasks. This guided me on completing the profile and earned me some credits that I decided to use to take two free level 1 certifications. The exams taken were C Level 1 and Numeracy Level 1, which according to the commercials I saw on the website will increase my chance to win some projects.

Now that the profile is finalized comes the difficult part of winning projects.

Freelancer.com uses a system of bids to win projects. An freelancer, as myself, bids on various projects posted by other people. A project that is posted only for a day or so has usually 10 or more bids. Without a good rating and a strong network of former employees, winning a project will be quite a challenge. This was the reason I stopped using the website in the first place. After spending several days making bid after bid on smaller projects, to gain some reputation, I kept failing to win them. I got demotivated and gave up.

Let's hope I will find a way to overcome this major step and make Freelancer.com a way to put my newly acquired skills as Android developer to a good use.

For those interested, here is a link to my profile.

Sunday, May 04, 2014

The academic approach on Android

Yesterday I stumbled upon my account on Coursera and I spent some time searching for an course on Android. I wanted to have a more academic approach to learning Android, rather then just learning trough code samples.

After a bit of search I decided to try the course Programming Mobile Applications for Android Handheld Systems. It's an 8 week course consisting of 3-7 video lectures each week with quizzes, assignments and a forum to ask questions. The videos are around 15-20 minutes in length and during the course of a video there are several questions to verify the knowledge gained until then. The questions help me check if I understood what was presented during the course.

Below you can have a short overview on the course contents:

  • Week 1: Introduction into Android Platform
  • Week 2: Application fundamentals
  • Week 3: Intent Class, Permissions, Fragment Class
  • Week 4: User interface class
  • Week 5: Use Notifications, BroadcastReceivers, Threads, AsyncTask & Handles, Alarms, Networking
  • Week 6: Graphics & Animations, Multi-touch & Gesture, MultiMedia
  • Week 7: Sensor, Location & Maps
  • Week 8" DataManagement, ContentProvider Class, Service Class
The goal is to go trough the course materials in 2-3 weeks and do as many project assignments as possible. I'm already at the videos from Week 2 so it shouldn't be that hard, right? :)

Saturday, May 03, 2014

People Are Awesome 2013-2014

Here's a nice video I found, showing how amazing things people can achieve.

Enjoy watching it :)

Google Wallet Merchant available for Romania

If you want to sell products on Google Play — priced apps, in-app products, or subscriptions — you will also need to set up a Google Wallet Merchant Account. You can do that at any time, but make sure to first review the list of merchant countries.

This is how Get Started with Publishing section of the Android Developer page starts when reading Get Started with Publishing. This is all simple and nice but, up until a few days ago, if you were from one of the less fortunate countries, Google wouldn't allow you to create a Google Wallet Merchant Account.

Yesterday while looking trough my Google Play Developer Console account I noticed a message related to Google Wallet Account. Romania together with a few other countries are part of the supported locations for developer and merchant registration starting with 1 May 2014.

Seeing this great news, I quickly proceeded to set up my Google Wallet Merchant Account. All I need now is to make an app worth selling on Google Play. I'll make sure to keep you posted once I know more about app pricing, how long it takes to receive money and other things you won't find in the Help section :)

To get started with Google Wallet Merchant registration:
  1. Visit your profile page on the Google Play Developer Console
  2. Under the Merchant Account heading, click the ‘Set up a merchant account now’ link.
Once registered, visit the Google Play Android Developer Help Center to learn more about selling your apps, managing orders, and receiving payouts.

Friday, May 02, 2014

Time to dip my toes into Android sea!

Recently I found out about this old little project of mine and I thought to give it another try.

Two weeks ago I set up a new goal, to work on my Android programming skills. I've been gathering information for the first few days, then I set began to get an idea about what it means to develop apps on Android platform. I'll start keeping an blog of my journeys on the big Android sea, sharing the struggles and success I meet along the way.

I already had Eclipse, SDK and AVD installed since more then a year on my computer. Everything was set up on my hard drive in a folder called "Projects", which I must admit, due to a lot of work at my job lately, I haven't open it in a long time.

First thing I did was to start them up and update SDK and Eclipse to the latest versions. Once the easy part was done, I began gathering information from web. First link I found was Getting Started - Android Developers. I began the training session there but soon I realized I would have to find another source of information. The lessons there were aimed more towards someone who already has an idea about what Android development means. My only experience was a simple "Hello World" app that Eclipse creates by default when you make a new project.

After spending a few more hours searching for another tutorial, I came across Android Programming - The Big Nerd Ranch Guide and I decided to use it as my starting point. It proved to be a good tutorial and I am still using it right now.

So far I have made my first app, a simple Quizz game using activities. This lead me to learn about the structure of an Android project, manifest file, layout files, resource files, activity lifecycle, creating new activities from main activity, Model-View-Controller architecture and debugging.

Once the first app was done, I began working on my second app called CriminalIntent. I know the name sounds a bit strange, but the app is used to record a list with details about "Office Crimes" :)
The book says it's a good example to learn about Fragments and based of what I've seen so far it looks like it's an important part of my training. All applications from now on, no matter how simple, will be created using fragments.

I don't want to make this post any longer then it already is so I will stop here.

Stay tuned for further updates! ;)