You are currently browsing the archives for the Mobile category


Augmented Reality Browser in 10 minutes with Wikitude API

This blog post is a simple tutorial to demonstrate how easy it is to set up a full fledge Augmented Reality browser with Wikitude API. It will only take 10 minutes of your time in its most simplest form, ready to be customized with your own needs. It should be easy enough to let you innovate on your own.

For this to happen, I assume you already have these items ready with your setup:

  • Eclipse (Preferably Indigo)
  • Android Developer Tools for Eclipse here
  • Android SDK here
  • Wikitude SDK here

The project is live at Github: https://github.com/tistaharahap/ARBrowser

I believe codes will speak louder than words ;)

Jajan for Android Open Sourced at Github

Jajan for Android is now Open Sourced at Github a few hours ago. I personally hope that by looking at the source code provided, more and more developers will sync to the tune of how easy it is to create an Android application. I wrote most of the codes 7 August 2011 in under 4 hours. Using ready made libraries already available within Android and also other third party libraries, it helped to ease the complications.

The source code is NOT perfect, there’s a lot of places where it could be optimized aggressively even more. More of the optimization will most definitely lie within the ListView. At any case, it will load 100 search results, you can make this endless by loading an incremental of your choice.

The codes are available at https://github.com/tistaharahap/jajan/.

Excerpts from the README shown below:

JAJAN by Urbanesia
==================

Jajan is a simple app to showcase Urbanesia's API v1.0 and how you can extend for your own apps.

As of this writing, the initial commit is at sync with Jajan's binaries at Android Market which is version 1.1.1. Upcoming Jajan versions will NOT be published from the codebase here in Github, this repository is treated as an example for future third party apps by you.

Jajan is available in multiple platforms, go to , if your device is one of the supported platform, it will redirect to your device's application store or it may have you download a binary for your platform.

Mobile Products & Handhelds Landscape

It’s been a few weeks after the whole world said their good byes to Steve Jobs, the iconic leader any startup/company should aspire to have. Everyone was in awe for what he did but mostly for what he didn’t do I suppose. He shaped the mobile landscape as we know today and for the years to come.

I believe strongly that mobile developers are candidly smart but also stupid at the same time, this includes myself. We are smart because we embrace a whole new paradigm and concept in programming that is actually still maturing. There is no one size fits all platform that will deliver everything a developer would need. The most stupid thing of all is actually focusing only on a single platform instead of the product.

While implementing a fresh way to develop mobile products, a notable early stage investor here in Indonesia told me that the technology I was implementing is still 2-3 years ahead of the industry. He was damn right in saying, “What’s the point? Going native is still the answer (for now)“. In spite of all cross platform goodness, there’s always a catch.

So why do any developments I said to myself? It’s just a waste of time and energy because it’s not an easy task to focus on different platforms at the same time. UI on every platform is different whether programmatically or its actual visual equivalent when users see them. I just can’t see any single solution will ever be ready for prime time in the near future. This being said by someone who has coded and NOT by analyst or writers who never coded their whole lives.

Anyways, the distant future is not so distant after all if you got cash for it. Just like the rest of the population, getting a US$ 500+ device is just too expensive. Although here in Jakarta, the trend is the higher the merrier for shops and buyers, it does not cater the whole population. People want first class products even if the could only spend less.

Premium sound premium because other devices make them look & feel premium. The physical properties of a device is the first thing anyone will notice. Nowadays form factors are suited for your thumbs and the way devices look these days are increasingly (subjectively) “better” with at least 10 years ago as a comparison. Devices don’t have explicitly visible antennas, they’re also getting smaller, lighter and the batteries although Internet connected most of the time still lasts longer relatively.

Cameras and phones is a match no one would argue and now 2 Megapixels is what you get at least. Although the quality won’t be that of pictures taken from a pocket camera but the technology is keeping up. We see phones sporting 8 Megapixels lenses from big names that used to be premium. Not to mention the success experienced by Instagram clarifies the argument even stronger. Remember those cheesy frames when you got your first Nokia camera phone, unnoticed and unaware, that’s Augmented Reality in a somewhat more primitive conceptualization.

Processors are getting double its core and power every year but sadly, not so with applications. I see a lot of time, software as an actual performance-hindering component even through upgrades of more advanced specs. What we can still be thankful is cheap memory (storage). You can easily get an 8-64 gigs Mini SD Card for at least $ 12.

So yes hardware is getting more powerful but the price is still a major barrier for end users to enjoy their own devices. If the device has a bitten Apple logo in it, people are used to paying premium, it is a premium device with all its glory. Coupled with a great recent iOS 5.0 release, it’s only gonna get better and better delivering the needs and wants of the whole market.

Android is catching up and has recently dethrone iPhone as the number 1 best selling smartphone in the world. What does this mean to developers and end users? Here’s a few pros and cons about Android as a platform:

Cons:

  • The User Experience is plain and prone to rather extreme iterative changes for every Android version.
  • Due to inconsistency in its User Interface, for each new version boasts a whole new look and it really is causing more problems than solutions, even though functions are defined constantly.
  • Dalvik is a great JVM with incredible clarity for Garbage Collectors. The report of freed memory by GC is actually very demotivating. Try inflating sub views, you’ll see why.
  • Doesn’t run well at all for devices < 800 MHz ARM processors. Samsung Galaxy Mini is a best seller, due to its popularity it can lead first time Android end users to associate Android with lag and unresponsive behaviors.
  • Multi threading is an alienated term for asynchronous. Sure there are classes to do this efficiently but this knocks down more creativity as do with most of C derived languages.
  • Fragmentation of different versions of Android makes developers support the lowest acceptable API level and end users stuck with whatever the handset maker offer.
  • Handset maker more often than not can’t keep up with Google’s amazingly fast iterative updates.
  • Free as in free beer, “Google Experience” devices will cost OEMs and or handset makers.
  • Quality apps in terms of UI/UX are nothing at all in quantity compared to iOS, Android is ok but not beautiful. Very subjective and open for debate.
  • A very dismal post-sales options to get upgrades to newer Android versions even if the device is still on warranty. After-market ROMs are available but this NOT the case with end users, still need guts and technical knowledge although I know a few non-technical friends of mine who does it almost naturally.
  • A very insecure platform! Don’t ever root an Android if you’re not up for its risks.

Pros:

  • Any developer with a spare time can always build their own version of Android. Customizable deep to kernel level, a talented developer can do magic with it.
  • Knowledge is available everywhere on the Internet.
  • Java is a relatively more well known language.
  • Layout is very flexible thanks to XMLs, seriously this is the first time I’m grateful of XML lol.
  • The growth chart is amazingly exponential, currently already topping off the iPhone.
  • Lets mid to low market to have a go at touch screen phones that is always connected. Opens up new possibilities especially for educating the general population about being online.
  • Because of looser supervisions of Android Market, it makes a great playing ground to test out new ideas, even half baked and see how the market responses.
  • Best practices are commonly available and design patterns in Java is very strong, one can be ready for prime time in no time.
  • Although heavily fragmented, developers are often given the option to adopt new frameworks available in higher API levels with a sort of compatibility library to enable them on lower API levels.
  • The kind of technology embedded into Android’s stack is already very extensive and very well though of although I have found some cases like a Multipart HTTP request library is only available if you use third party libraries or by making your own methods. Easily forgivable though in contrast.

There is still more to add to the 2 lists above but the ones written are the ones I feel worth noting. Other platforms have their own pros/cons but as any data will show, Android is topping the smartphone market and that’s a fact. It is the future, especially here in Indonesia. Due to Android’s nature of being open, adopting it is not so much a trivial task.

In China, Android is modded very heavily to suit China’s own needs for a smartphone. Most of the effort are made possible again because of Android Open Source Project (AOSP). Why can’t we do this for Indonesia? With or without the government on our back, we have a great market. It’s puzzling to not see an Android made by Indonesians being sold to Indonesians when we as Indonesians are well know for our desire and passion of making technological advances out of nothing. Wajanbolic is none other the best example.

We owe this to ourselves! As a person involved in the tech world of Indonesia generally, I applause Nexian for its bold efforts in having a very strong C/C++ team of developers to mod its own MTK feature phones. It’s not an easy thing to do but in the end of the day, end users want more beyond its low price. I truly hope Nexian will set an example with its Android phones.

Being a dreamer, one can visualize a very mobile and an actually high tech tomorrow without end users having to fuss with technical jargons and or spec to be persuaded to buy a smartphone. Like any startup will tell, a good product will market and sell itself. We can still empower and influence the market, it’s just a shame if we see this kind of success and control not in the hands of local companies. We know what our market need, not to mention their wants. Look at Google, Facebook, Groupon, etc, their investing so much to become hyperlocal and we just stood there and made to watch as our great market is slowly but surely taken over.

Read the paragraph before with some lime and a pinch of salt, my purpose is simple, it’s the future and nothing else. If anyone is reading this and somehow is disagree with my writings, the comments below is open for anything.

Anyhow, it would be great if we can analyze different user behaviors in a collective way. This will benefit us all without sacrificing privacy though. Although here in Indonesia nobody gives a damn about privacy but I still believe in ethical means in doing it. I’m just not sure the industry itself is ready. I have some data and would love to share with yours. Let’s be smart about this.

All and all, the mobile landscape in Indonesia still very early in its infancy, we have the upper hand of knowing what the market like and how to capitalize on it. Let’s make that disruptive force coming from us and of course for us. Aren’t you tired of making a living outside Indonesia because our market is still not ready yet? Well it’s gonna happen soon and you better be ready for it. I’m game, are you?

Indonesians like to buy things they don’t need, they buy what they want as proof of their existence and identity. RBT is a great example and generates a sick load of revenue. In app purchase is the way to do it + bragging rights.

Create Your Own Android Splash Screen and Boot Animation

So far my experience compiling my own version of Android using CyanogenMod 7.1 here is as sharp as it can be. I’m running it smoothly on my Nexian Journey and it’s time to do some changes to CM’s default theme to show my own.

Either creating the splash screen or the boot animation, each of the tasks have its own complication. I’m gonna start off by creating a boot animation.

I created my boot animation using Adobe Photoshop CS4. Create the animation just like creating a GIF animation. First you need to know the LCD resolution of the device you’re gonna implement it with. Mine is 320×480 and that’s gonna be the base here.

1. Create a new file on Photoshop and adjust the width &amp; height dimension to you device's
2. Do all the required animation framing using Photoshop's Animator (Window / Animation)
3. Now you must logically part the animation into 2 sections. The first will be the initial non loop animation while the second will be the animation that's gonna be looped forever
4. Convert to Frame Animation
5. Flatten Animation to layers
6. Okay this gonna sound silly, I saved all the layers one by one. For the first animation section, save it anywhere under the folder part0 -&gt; You gotta save it into PNG 8 Bit with any file name as long as it's numerical according to its sequence. Ex: bango_001.png bango_002.png bango_003.png
7. Do the same for the second animation section continuing the file naming sequence from the first part and save all the frames under part1
8. Within the same folder where the part0 and part1 is located, create a new text file desc.txt
9. The content will be:
   320 480 24
   p 1 0 part0
   p 0 0 part1
10. Still in the same folder as step 9, do the following:
    $ zip -r0 bootanimation.zip *
11. Voila

Now to create a splash image is quite more challenging doing it on a MAC but thanks to this thread in XDA Developers, we’re all set. I’m merely copy pasting the steps on the thread, all credits should go to the author of the thread.

You will need to create a new executable BASH file with the contents below:

#!/bin/bash
prog_header() {
	echo "###############################"
	echo "####### EleGoS's FFMPEG #######"
	echo "# G1/Sapphire/MyTouch3G/Magic #"
	echo "### Splash Screen converter ###"
	echo "###############################"
	echo "version 1.0"
	echo ""
}
 
if [ "$1" == "--help" ] || [ "$1" == "-h"  ]; then
	prog_header
	echo "Usage"
	echo "$0 your_image_file"
	exit 0
fi
 
warning() {
	printf "\e[0;31m$1\e[0m \n"
}
 
check_ok() {
	printf "\e[0;32m$1\e[0m \n"
}
 
ffmpeg_check=$(which ffmpeg)
size_check=307200
size_desc="320x480"
 
if [ "$ffmpeg_check" != "" ]; then
	OUTPUT=$(echo "$1" | cut -d'.' -f1).raw565
	clear
	prog_header
	ffmpeg -i $1 -f rawvideo -pix_fmt rgb565 $OUTPUT
	clear
	prog_header
	FILESIZE=$(cat $OUTPUT | wc -c)
	if [ $FILESIZE -eq $size_check ]; then
		check_ok "$OUTPUT is ready to be flashed."
	else
		rm $OUTPUT
		warning "$OUTPUT filesize mismatches! Wrong image size ($size_desc)? Aborted."
		exit 0
	fi
	echo "In order to flash this image you have to plug your phone in fastboot mode."
	read -p "Flash it now? (y/n) "
	if [ "$REPLY" == "y" ] || [ "$REPLY" == "Y" ]; then
		fastboot devices | grep -q "fastboot"
		if [ $? -ne 0 ]; then
			warning "The USB cable is not plugged, or the device is not in fastboot mode."
			echo "To flash the splash screen, manually execute this command once in fastboot mode:"
			echo "fastboot flash splash1 $OUTPUT"
			exit 0
		else
			fastboot flash splash1 $OUTPUT
		fi
	else
		echo "To flash the splash screen, execute this command once in fastboot mode:"
		echo "fastboot flash splash1 $OUTPUT"
		exit 0
	fi
else
	warning "ffmpeg not found! Please install it before running this script!\ni.e. (DEBIAN) apt-get install ffmpeg / (OSX) sudo port install ffmpeg"
fi

Now again my device’s resolution is 320×480 so I have created a file called splash.bmp in Photoshop within the same folder of the script above. Before continuing, you must have MacPorts installed by going here. If your device’s screen resolution is not the same as mine, you must change the following lines on the script above to match yours.

size_check=307200
size_desc="480x800"
$ vi splash
  * Press i
  * Copy paste the above script
  * Press :wq
$ chmod +x splash
$ sudo port install ffmpeg
$ ./splash splash.bmp

That’s it! To flash both the boot animation and the splash screen, I’m sure a quick search in Google will come up a few pages explaining the steps. Enjoy!


photo of Batista Batista R Harahap [email protected]
Jl. Bango II/29C, Pondok Labu
Cilandak , DKI Jakarta , 12450 Indonesia
62817847023

This hCard created with the hCard creator.