Currency Converter Version 0.4 Released

Currency Converter Version 0.4 Released

I just released version 0.4 of my currency converter to the market. This version now caches the exchange rates for when there is no connection available, allowing the application to be used without an Internet connection, as long as it was used with one at least once.

Introducing Currency Converter!

Introducing Currency Converter!
So a couple of days ago I hinted that I was working on a top-secret project. Well, that project is top-secret no more, as Currency Converter is now available for free in the Android market! Currency Converter is a basic application that I originally created in order to practice making Android applications, and to play around with user interface design, in an effort to create a professional-looking Android application. I am pleased to announce that this application ended up being much greater than I originally thought possible. Currency Converter is a extremely data-light application that uses less than 1.5 kilobytes of data every time it refreshes the currency exchange rates. That’s rather impressive, considering the fact that Currency Converter supports 94 different international currencies. The exchange rates are automatically loaded from the Internet in the form of a comma separated value file that contains the latest Google Finance currency rates by using the Google Spreadsheet API, and querying a specially formatted Google Spreadsheet document that I created specifically for this application. In order to minimize data usage, the spreadsheet only contains the current exchange rate of one US dollar to every other supported currency. Because the spreadsheet uses the Google Finance formula function, the spreadsheet is automatically updated with the latest rates. Regularly the Google Finance function is used to retrieve the latest stock quotes, but by inserting “CURRENCY:” into the function, we can use it to convert currency. For example, to convert one US dollar to Euros, we would use: ‘=GOOGLEFINANCE(“CURRENCY:USDEUR”)‘ as our function, where ‘USD’ is the ‘from’ currency’s symbol, and ‘EUR’ is the ‘to’ currency’s symbol. However, adding the full Google Spreadsheet API to the application would add bloat, and that wouldn’t be very good. After all, we only need to retrieve the data, we don’t need to do any server side manipulation or anything. Therefore, I used the next best thing. Google has a feature on their server that allows you to run a basic query on the feed of a publicly published and accessible spreadsheet document.  Because I love sharing useful things that I make, the spreadsheet document used by my currency converter is completely publicly accessible, and I have no plans on restricting access in the future. By using the query “SELECT A,B“, we can retrieve all the data in columns A and B of the spreadsheet. Click here to see an HTML representation of the data that query returns. So, we now have a very basic, stripped down version of the spreadsheet that can be accessed without being logged in, but it has a lot of extra data that we don’t need, and it would be annoying to parse out. Maybe it’s possible to optimize the server output even more? Of course it is! Google offers the ability to retrieve any spreadsheet document as a comma separated value file that’s extremely minimalistic and optimized with almost no excess data. In this case, we can simple set the PHP GET parameter called “tqx” to “out:csv“. This results in a much smaller and easier to parse file being returned by the server. Currency Converter is now available on the Android market for free. Check it out, and if you don’t like it, you can always uninstall it. Let me know what you think. To easily get to the download page in the Android market, simply scan the following QR code with a barcode scanning application:

My Latest Top-Secret Project

My Latest Top-Secret Project

I’ve been playing around a lot with different styles of Android user interface design lately, in order to practice developing for the platform. In my new top-secret project (coming soon!), I spent a lot of time really tweaking and customizing the user interface in order to make it look and feel great. Some new techniques I’ve been experimenting with include: custom background images (with XML layouts), custom spinner layouts, font style and color, alpha-transparency, and a couple of other neat tricks. In addition to that, I also worked on really optimizing the graphics used in the application to reduce file size. How does this all fit together? You’ll soon find out, when I release one of my best looking applications (visually) yet. In addition to just graphical user interface design, I have also been playing around a lot with offloading processing by utilizing server side scripting (sometimes referred to as “Cloud Computing“), and API calls, in this case, to a dynamically updating data feed. In my upcoming application, I learned a lot about sending queries to a server, and parsing the output that is returned in an optimized and efficient way in order to improve reliability over a wireless network. For instance:

  • In my new project, all the data I need is queried and then parsed on the server side into a comma separated value file that is less than 1.5KB of data!
  • Once the data is retrieved, it is parsed on the client side into arrays using string tokenizers and buffered readers so that it can be accessed quickly without a lot of extra processing.
  • No third party libraries that are not included in Android itself are used or needed in order to retrieve and parse any of the data. All of the parsing and retrieving is hand coded from scratch.
  • When a network connection is not available, my application takes advantage of a cached copy of data stored on the phone itself (remember how I said the entire set of data is less than 1.5kb?)

Haven’t guessed what I’m working on yet? That’s ok… stay tuned for more updates and some screenshots as I continue to work on this project. Keep in mind that I will also be working on improving my old applications, such as EliteBomb, at the same time, and it may take a while for me to finally release this. My new application will be free, and it’s mostly just a practice application in order to improve my skills at coding Android applications and possibly increase my user-base, but I will continue to support it as well as all of my other applications.

Successful Android 2.2 SMS Limit Removal!

Successful Android 2.2 SMS Limit Removal!

An EliteBomb user, Jacob Miller, and myself managed to get the SMS limit removed successfully in Android 2.2 on his Motorola Droid (Original). I’d like to personally thank Jacob for spending the time with me in the chat in order to get the limit removed on his phone. The process on the post that describes how to remove the SMS sending manually has been updated to reflect what we had to do in order to get it to work. If you have a rooted Android device running version 2.2 (Froyo), and you have not been able to automatically remove your SMS sending limitation automatically, I highly recommend trying the method on that post, as I now know that it works. In addition to Jacob’s Droid, I personally managed to get the limit removal working perfectly in an Android 2.2 virtual machine running in the Android emulator included in the Android software development kit. I now know exactly how to remove the limit manually on most devices, and I really hope to have an automated limit removal tool out soon. If you try that method, and experience issues, do not hesitate to contact me, so I could try to get the limit on your device removed. This marks a new milestone for SMS limit removal, as nobody else has any documentation on how to remove the SMS sending limit in Android 2.2 yet. Thanks to everyone who notified me of the issue, and all of you who purchased EliteBomb Plus, which encouraged me to work on getting the limit removal working. I couldn’t have done it without you guys! 🙂

EliteBomb Plus 2.6 Released

EliteBomb Plus 2.6 Released

EliteBomb Plus 2.6 is just another release that is just an attempt to fix the automatic Android 2.2 SMS limit removal. If you download this new release and have a rooted device, please, let me know if you get it working. Thanks! I will have a similar version of the free version of EliteBomb out soon! If it still doesn’t work, feel free to try to remove the limitation manually.

New EliteBomb Advertisements!

New EliteBomb Advertisements!

I don’t think this matters to many of you, but I’m excited to announce that I just finished completely revamping the AdMob advertisements for my EliteBomb application. If you’ve ever seen my old EliteBomb ads, you may remember them as being boring, plain-text advertisements. Well, that’s all about to change, as I just finished creating some new, awesome looking EliteBomb ads, for both the free version of EliteBomb, and the EliteBomb Plus. I already stopped running the old advertisements, and the new advertisements are already running as I’m writing this post. The EliteBomb advertisement will be running in all of my applications, except for EliteBomb itself, and the EliteBomb Plus advertisement will be running in the free version of EliteBomb. Look out for these ads:

Closer to a Proper Froyo Limit Removal Fix

Closer to a Proper Froyo Limit Removal Fix

So, I recently managed to get the limit removed (manually) in the Android 2.2 emulator found in the Android SDK. This proves that it is possible, and I hope to have an automated fix out soon. For those of you who can’t wait (rooted device required) — try this:

  • Download the Android SDK
  • Put your device into development mode (Go to Settings > Applications > Development, and make sure USB Debugging is enabled)
  • Plug your device into your computer’s USB port
  • Make sure you are connected to your device by running adb devices
  • Use cd to change directory to the tools directory of the SDK
  • Run adb shell
  • Type su and hit enter
  • Type remount rw and hit enter. Depending on your phone, this may not work, and you might get a command not found error. If so, try “mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system“. If you are testing this on the Android Emulator, the command you want is “mount -o remount,rw -t yaffs2 /dev/block/mtdblock0 /system“. If none of these commands work, look for your device’s command to remount the filesystem in read-write mode by searching on Google, and type that instead. This step in not optional. It will not work if you skip this step.
  • Now type exit and hit enter, repeat if you aren’t out of adb shell yet
  • Type adb pull /data/data/ and hit enter
    • If you get an error saying “failed to copy ‘/data/data/’ to ‘./settings.db’: Permission denied”, make sure that you remounted your filesystem in read-write mode. This could be the problem. If it still does not work after you make sure that you remounted your filesystem properly, try these steps which worked for me:
      • Go back into adb shell
      • Type su and hit enter to get root access
      • Type, letter for letter, “cat /data/data/ > /data/local/settings.db” and hit enter
      • Now type exit twice to get out of adb shell
      • In your regular terminal (not adb shell) type “adb pull /data/local/settings.db” and hit enter.
  • Type sqlite3 settings.db and hit enter
  • Type (letter for letter) these lines, hitting enter after each one:
INSERT INTO gservices (name, value) VALUES ('sms_outgoing_check_max_count', 999999999);
INSERT INTO secure (name, value) VALUES ('sms_outgoing_check_max_count', 999999999);
INSERT INTO gservices (name, value) VALUES ('sms_outgoing_check_interval_ms', 0);
INSERT INTO secure (name, value) VALUES ('sms_outgoing_check_interval_ms', 0);
  • If you are on Android 2.2 or newer, it is perfectly normal to get “no such table” error messages when entering the gservices lines. Just ignore those. It will still work.
  • You should be out of the sqlite editor, and back to your shell.
  • Type adb push settings.db /data/local/ and hit enter
  • Now, go back into adb shell (just type adb shell and hit enter)
  • Verify that you have a # in your shell(not a $), which means that you have root access.
  • If you do not have a # in your shell, try typing su
  • Type cd /data/local to get to the directory where we just stored the modified settings database
  • type ls to list the files in the directory, and verify that settings.db is in the list of files
  • Now, letter for letter, type cat settings.db > /data/data/ and hit enter
  • Nothing should appear on the screen. This is perfectly fine.
  • Now, let’s verify that the file was written properly before rebooting the phone…
  • Type cmp -l /data/local/settings.db /data/data/
  • Nothing should come up from that either. If something does, the database was not copied properly. Go back to the last cat command step. Otherwise, your database has been modified successfully. Congratulations!
  • Now, exit the shell again, by typing exit and hitting enter until you are no longer in adb shell, just like last time.
  • The settings file should be updated on your device. This will not be applied until you reboot your device.
  • To reboot your phone, type adb reboot and hit enter.

I haven’t tried that method, since automatic removal works perfectly on my Samsung Epic 4G running Android 2.1, but let me know if that works for you by leaving a comment on this post, or by sending me an email. This method has been updated, and it works perfectly on my Samsung Epic 4G running a leaked ROM of Android 2.2.

UPDATE: I recently found out that WordPress changes certain characters slightly, which causes the SQLite commands above to not work properly. The SQLite commands are now in <pre> tags to prevent this from happening. This may be the reason that manual removal failed before for some users. Also, rather than pushing the file directly to the settings database, the guide is updated to push it to /data/local/ and overwrite it as root using cat.

UPDATE 2 (10/21/2010): I successfully got this working on someone’s phone, and they no longer have a sending limit (verified)! Special thanks to Jacob Miller for helping me out and for his patience while we tried commands on his Droid (Original), until we eventually got it working! 🙂 This guide has been updated to reflect the changes in the process that were necessary in order to get it to work.

UPDATE 3 (11/12/2010): On my Epic 4G running the leaked Android 2.2 Froyo ROM, I was unable to pull the settings.db file directly. I updated the instructions to include a workaround that worked for me.

NOTE: I have tested this method on the Android 2.2 emulator three different times, and it worked each one. I want to automate the process on actual, rooted devices, but at the moment, it only works on 2.1 unfortunately.

adb push settings.db /data/data/