My Opinions On the Leaked Epic 4G Froyo ROM

My Opinions On the Leaked Epic 4G Froyo ROM

There are many changes that Samsung made to the leaked Android 2.2 (Froyo) ROM (link: [ROM] Froyo DJ29 leak, deodexed, zipaligned and pre-rooted v4.2 [11/12]) that I really dislike, and I hope that they change before the official release comes out. This is a list of the things that I noticed so far that significantly degrade the user experience, as well as changes that I absolutely love, and a few suggestions:

  • Samsung replaced the stock messaging application with their own custom one that isn’t nearly as good or as nice looking. This is actually my number one concern about the new firmware
    • They really need to stop trying to imitate the iPhone’slook and feel. If we wanted an iPhone, we would’ve bought one
      • Not only that, but they are also doing a terrible job at mimicking it. In fact, Samsung’s new messaging app feels worse than the one on the iPhone
    • The image viewer in the new messaging application is completely broken. It has no ability to zoom in, it shows a progression timer when displaying a still image, images are zoomed out by default, etc.
    • The best option is to just scrap their messaging app and go back to the stock messaging app, which works flawlessly, and has a very native and natural look and feel
  • The new way the applications are arranged in the app drawer is annoyingly unintuitive. Making the user manually rearrange them is not the right way to sell more devices. They were fine before when they were automatically arranged in alphabetical order, but it’s really annoying having to manually reposition the icons. There doesn’t even seem to be an automatic arrangement option.
    • Manual arrangement is fine, as long as the user can choose to have the icons arrange automatically.
    • The new application removal icons are also fine, but really, they should also exist on the pre-installed crapware, since nobody wants NASCAR and Sprint Football Live preloaded anyways.
  • The Internet browser feels incredibly slow and unresponsive now, especially with scrolling. I’m not sure what modifications Samsung made to the browser, but really it would be best to leave it stock, since the stock browser is known to have excellent performance compared to the one in Eclair.
    • Also, the new “Internet” icon looks terrible compared to the look and feel of the rest of the operating system. I really prefer the old one.
  • The new “News and Weather” application is great. It really is. I love how it automatically locates you via GPS and displays relevant weather information, and the tab scrolling at the top of the screen is wonderful.
  • The new colorful icons in the Settings menu feel very non-native to the platform, but I kind of like them. With less glossiness (I despise glossy icons) and saturation, I could actually become accustomed to them.
  • I really like the new voice recorder application they include in the new ROM. It’s very simple and easy to use, yet it looks great!
  • The Video Player application is also really good, but I experienced some issues with stopping a video that really ruin the user experience. When the back button is pressed, the video should be stopped, and I should be taken back to the list of videos on my device. There should be no need to press an additional on-screen button to stop playing the video. Also, video playback is laggy, and skipping to parts of the video reveals significant delays.
  • The Memo application is pretty good, but it should allow you to backup memos that you create, either on the device’s SD card, or to the cloud.
  • Getting a GPS position is still flawed. It takes way too long to get a lock on my position, especially considering how other, lower-end phones such as the Samsung Transform are able to get a quicker GPS location that a high-end device like the Samsung Epic 4G.
  • The new AllShare logo looks much better than the old one, but it looks a bit too glossy for my tastes.
  • It would be a great addition if Samsung would pre-install the latest version of Google’s Voice Search application, which comes with Voice Actions. Sure, users could install that themselves, but it integrates really well with the operating system, and works much better than the version that comes installed. Also, most users won’t know to install the version of Voice Search in the market.
  • I love the new Silent toggle in the notification bar, but really, it should let you put it in Silent, Vibrate, or Normal (Non-Silent) mode.

I will update this list if I notice anything else that should be changed with the new firmware, but really, I’m overall impressed with the new firmware, and I will continue to use it on a day-to-day basis.

Sound Added to "Simple Dice"!

Sound Added to “Simple Dice”!

I added sound to “Simple Dice” when you roll the dice. The sound played is a modified, low quality version of Mike Koenig’s “Shake and Roll Dice Sound”. The file takes up less than 10 additional kilobytes, and the sound is only played if the “Media volume” is not muted, to avoid disturbing others.  I also plan on adding the sound to “Dice Betting” when it is released. The sound truly makes the application more realistic feeling and more interesting. Expect to see the changes on GitHub and the Android market shortly!

UPDATE: The sounds are now in the git repository, and the new version is up on the market!

Working on a New Simple Dice Game

Working on a New Simple Dice Game

I’ve been working on creating a basic dice game for Android with animation, rules, betting, and more! The game is currently a work in progress, but I’m really excited to release it! The animation works wonderfully, and the interface, although very unfinished is already starting to look polished, especially in the game’s menus. For now, the game is simply called “Dice Betting”, and yes, I realize how lame and generic that sounds, but I might end up changing the name of the game before it is released. Similar to “Find the Mouse”, I’ll probably end up open sourcing this game (under the GNU General Public License, of course), although it isn’t even remotely close to being released yet. The game will have a built-in statistics tracking system, and the rolling of the dice will be completely animated. Right now, the animation I have done looks really cool, and I’m incredibly anxious to publicly release this. Check back soon! 🙂

Find The Mouse Improvements Complete!

Find The Mouse Improvements Complete!

I finished making the changes to “Find The Mouse”, and the new code is up on github. I’m already in the process of signing and uploading the new version to the Android market. You should be able to download it very soon! The new version automatically advances to the next level after you successfully find the mouse, it keeps track of your winning streak and current score, and the user interface feels much nicer. Enjoy! 🙂

UPDATE: The new version is now up on the market! Check it out!

Pssst… Planned Improvements for "Find The Mouse"

Pssst… Planned Improvements for “Find The Mouse”

I realize that “Find The Mouse” isn’t that much fun yet. I’m working on implementing a feature to keep track of scoring. For each round successfully completed, you will get one point plus one point for every click left. The game will also keep track of how many games were won in a row. Keep in mind that this game was never originally designed to be very fun, it was meant to be an example to teach (very) basic Android programming. These upcoming features are simply the result me giving into peer pressure and trying to make the game more enjoyable. Keep in mind that this is an open source project and anyone is welcome to contribute code if they would like to see it in the game. The feature is done as far as coding, I just have to work on the new layout.

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.

EliteBomb Context Menu Added

EliteBomb Context Menu Added

I just finished adding a basic context menu to EliteBomb, which can be accessed by simply pressing the Menu button.  This feature is available as of version 1.8. It is now possible to easily clear the fields in the application without exiting it and re-opening it, and accepting the license agreement again. In addition to that, you can now simply press the menu button, and select “Reset Fields”. In addition to that, for those rooted users out there, if you feel that your device is rooted properly, but you don’t think the limits were successfully removed, you can now forcefully run the SMS limit removal tool again without uninstalling the application and re-installing it to clear the data, using the new option in the context menu, called “Remove SMS Limits”. Please note that this item will be disabled when viewed on a non-rooted device. Also, this is useful in case you never removed your SMS limit before, since you no longer have to enter a message and choose a recipient in order to remove your limits, you can just choose the context menu item. As always, I am constantly working on improving my applications, and I hope to have all of the crashes and bugs worked out soon.

Side Project: Command Prompt Alternative

Side Project: Command Prompt Alternative
So today yesterday was my first day back at school. Everything was totally normal, and uninteresting until I got to my first programming class when I immediately noticed something was off… after logging into one of the computers we use for coding projects, I opened the Start menu (yes, these computers are running Windows XP. It sucks, I know.),  and I realized that they removed the “Run” command, which I used all the time, as I’m so used to using the terminal to launch programs in Ubuntu Linux. It’s not that I can’t use a GUI, but it’s so much faster to simply type a command than to navigate through the Applications menu and find what you’re looking for. Especially in the case of certain programs that are console only. Upon further searching through the Start menu, I noticed that NetBeans, an excellent IDE for editing code was missing, which makes no sense, considering the fact that we are in a computer programming class. They do, however, teach us to code Java using Notepad, the worst text editor ever for coding, and command prompt. Honestly that wouldn’t be so bad if Notepad had syntax highlighting, and a half decent (more than 3 edits) undo history. I mean, I edit source code using gedit all the time, and it works great! Regardless of the language, it seems to always know when I want syntax highlighting on or not, mostly by the file extension, and the undo history is superb! Unfortunately this is not the case at all with Notepad. So, guessing that they only removed the “Run” command from the Start menu, I tried opening the shortcut to command prompt from the Accessories folder, which resulted in a rather irritating message saying that the Administrator disabled access to command prompt. Not only do we need command prompt in order to code the way they want us to, command prompt is a very useful tool for power users that allows you to get work done at a much faster rate, as you don’t have to spend as much time searching through cluttered menus and looking for shortcuts. Perhaps this is why I’m so productive when I’m on a Linux machine in the GNOME Desktop Environment… everything feels organized and natural. Even the “Applications Menu” is automatically sorted by category, and there aren’t tons of cluttered folders lined with useless shortcuts like “Uninstall” links. Not that you need uninstall links in Ubuntu, thanks to the wonderful Synaptic package management system. Anyways, since our teacher realized that it was nigh impossible to learn anything, or even get started writing basic programs without a way to compile and test them, we were allowed to play around and do what we want during that time. I decided I’d play with the Python coding language (which they don’t even offer to teach at our school, yet there is a Python IDE installed — imagine that!). In particular, I decided to mess with the ‘subprocess’ packages in Python. After around 15 minutes, I managed to have a shell-based UI that let you enter a command, and returned output when the command finished running. After that, I mostly spend the rest of the time optimizing my code and handling exceptions. Once I got home, I fired up Python, and, as I didn’t have access to any of the code I wrote before, I started the whole thing from scratch, which took much less time, as I already knew what I was doing, and I’m pretty sure my code ended up working better than before, but it was still in a shell, which was unsightly to say the least. So, I did some research into Python-based graphical user interfaces, and I discovered a wonderful little library called “Tkinter”. Not only that, but I also discovered that even though our school has Python 2.5 installed in Windows, which is fairly dated (but not as old as the copy of Visual Studio we have installed — version 6 — which is from 1998), it comes with the Tkinter packages pre-installed. So, I spent a few hours coding, and it finally got to the point where, in terms of GUI, I was very satisfied with what I had, especially considering the fact that I had very little knowledge of Python when I first started coding this, and I knew nothing about Tkinter before today. Once I had the GUI done, porting the logic part of the code was incredibly easy, as I only had to add a few hooks and API calls to the script in order to add event listeners to the GUI and manipulate elements like the scrollbars when the console changes. After several hours of coding, I now have a pretty solid application that just needs a bit more work. Of course, I still have to work on doing other things than running commands like changing the working directory and setting environmental variables (both of which are practically necessary in order to compile and run Java applications), but I’m rather impressed with how versatile and easy to use Tkinter is. I haven’t actually tested this on Windows XP, being an Ubuntu user and all, but I plan on doing so tomorrow. Keep in mind this is an early prototype, and it will probably change a bit over time. This is just a side project, and it shouldn’t get in the way of me developing my other applications, like Clippy, but I will have less time to develop as I’ll be under pressure from my tedious school schedule. But for now, just enjoy the screenshot! 🙂

New Clippy Icons (Colored and Grayscale!)

New Clippy Icons (Colored and Grayscale!)
When I originally designed the Clippy icon, I made it using a free, open sourcegraphics editing program called GIMP, and saved it as a 720×720 PNG image. While 720×720 is a large resolution, large enough for almost anything I need to use my icon for, it’s still a raster image format, and it doesn’t scale well. This also results in it being more difficult to edit the image and make changes, such as editing colors, resizing it, etc. If you don’t care about all the technical details, scroll down to the end of this post to check out the new icons. Otherwise, continue reading. To solve this problem, I opened up the original image in Inkscape, a free and open source vector graphics editing program, and traced the paths of the “clip” and the “writing” from the original clipboard image, converting them into vectorized paths. I used the “Exclusion” tool to create the hole in the clip. I then created a new rounded rectangle as the new ‘base’ of the clipboard, with a fill color that matched the inside color of the base in the raster image, and a stroke color that matched the color around the edge of the clipboard in the old raster image. After making sure that I had the stroke width exactly the same length as the border of the base of the old image, I lined up the rounded rectangle with the upper left corner of the base of the old image, and resized it so that the bottom right corner lined up with the bottom right corner in the previous image. I then messed with the radius of the new base’s corners until it lined up almost perfectly with what I had before.  At this point, I had the “writing” scribbles, the “clip”, and the new clipboard base recreated in glorious SVG format. I then put all three parts on their own layers, organizing them (from top to bottom): “Clip”, “Writing”, “Board”. Because I had the base of the clipboard done at this point, I locked that layer so I wouldn’t accidentally mess it up, and then I selected all of the writing. I then changed the fill color of all of the writing at once to match the fill color in the previous image. Since at this point I already had the “writing” exactly where I wanted it, and the writing was already in path form, I used the “Simplify” feature under the path menu, to clean up the paths of the writing a little bit, as it doesn’t have to be exact, since the “writing” is only a bunch of wavy lines anyways. Now that I had the “writing” taken care of, and the “board” complete, with their colors similar to what I had in my previous icon, I was mostly done. All I had to worry about now was shading the “clip” (at that point in time, I only had the outline of the clip, with no fill color), and recreating the “paper”, for the “writing” to go on. I used the “hide layer” function to get the clip out of the way for now, and I began creating a new rectangle (not rounded this time) with the exact same dimensions as the old image’s “paper”, by, once again, lining up the upper left and bottom right corners. After making sure that I had the border length exactly the same as the border length of the old “paper”, and then I set the fill color and stroke color to match the colors in the original image. All that was left was filling in the “clip” with a gradient. After playing around with the linear gradient settings for a while, I finally had something that I was satisfied with, and I truly believed that it might even be better than the original Clippy icon. Since the new icon came out so great, I figured that it would be a good idea to make a grayscale version of the icon, for things like the notification bar icon, which typically don’t have any coloration. So, I saved the colored image, and fired up Inkscape again, and got to work. Keeping all the sizes and positioning of the layers the same, I messed with the fill and stroke colors until I had a nice looking, Android-style grayscale image. Unfortunately, due to WordPress.com‘s file type limitations, I can’t upload any SVG files, so, unfortunately, you won’t be able to see these images in their original, lossless forms, but I can, however, upload rasterized renderings of the images saved as PNG files. To accurately show the difference between the new vector images and the old raster images, I rendered these images at a very high resolution. As you can clearly see, just by looking at the images, there is absolutely no loss of clarity in the vector image rendering, where the original raster image becomes significantly pixelated when scaled. Also, even though it’s possible to scale the vector icons to almost any size without the quality degrading, their size is actually significantly less than the original raster images. Anyways, here are the links to the images, so you can check them out for yourself:

Let me know what you think about the new icon by leaving a comment on this post!

Note: There is no “old” grayscale image, as I created it originally when I converted the colored image to SVG.

UPDATE: I made some slight changes to the gradient used in the ‘clip’ of the colored logo. It now looks shinier, and closer to the original raster image. Also, I slightly improved the subtle gradient used in the ‘board’ of both vector images. The images on this page are now updated to reflect that change.