Awhile back (like last year), I've released an app called Randomizer and then released the app source code open source on Github. Randomizer was my very first app released on the Google Play Store and was initially created using HTML5, CSS, JavaScript, JQuery, JQuery Mobile, and then packaged together with PhoneGap.
In short, Randomizer is an simple application to help people, who cannot decide on something from a list of choices. With this app users would input their list of choices, and then Randomizer would randomly select a selection from that list. Other features include randomizing the order of the given selection list, and selecting a number of a specified range of numbers.
In my initial post, I have described some of the issues regarding the user experience and the performance issues related to the application. At the time I thought this application never would have many downloads and it has been put aside for quite some time for improvements. Just two months ago, when I revisited this application, I've looked into the amount of downloads for this application and it turned out to be quite a decent number, at least 4000+ downloads. I was quite surprised with this number and thought why not improve it by overhauling the application. While the app download downloads statistics, I couldn't help but to also notice the comments left behind by the users. I noticed there were actually quite a bit of people looking for these types of applications, but the known issue regarding the user experience of Randomizer was the major let down for people wanting to use this app. Not only that, users were also helpful by providing some suggestions that should be implemented to make Randomizer better than before.
Being experienced with Android development than ever before, I started to go about overhauling the application by mimicking the exact UI layout and features. The only issue with this is that when users update their app, they will not be able to access their saved lists, which was previously stored on the HTML5's local storage. I believe that this will only be a minimal issue compared to the improved experience that they will be receiving. During this time, I've even taken advantage to implement a feature where users will be able to access their saved lists on multiple devices that has Randomizer install. This was accomplished by getting the user to create an account with an email and password, and their lists will be updated on our servers. On the server side, this accomplished by using nodeJS and PostgreSQL as our database. I must note that users are not forced to login and they can just skip the login process, but they will not be able to access their saved lists on multiple servers. If the users do happen to login, I suggest that they DO NOT store any valuable information like credit card numbers, social identity numbers, and so on.
In the meantime, I will continue to observe the progress of my Randomizer app and within the next two weeks I will bring an update with new and very important features.
Randomizer on Google Play Store HERE.
Randomizer source code HERE.
Showing posts with label Application. Show all posts
Showing posts with label Application. Show all posts
Tuesday, April 22, 2014
Friday, August 23, 2013
iPoo!!!
Last week, we've introduced iPoo. iPoo is a simple application that helps people find washrooms near their current location if they are in a dire need to go. Currently, we've only made this application available in Canada, while focusing our efforts on Toronto (city where we are currently located).iPoo has proven to be a difficult launch for us with the main issue of not having any initial washroom data for our app. Initially we do not want users to download iPoo hoping that they will collaborate and input washrooms into our database. This idea wouldn't be wise and prevent the growth of our initial user base. Having initial washroom data, we are hoping that users would like this application and in turn spark a chain reaction where they would contribute by either reporting/rating existing washrooms and if they encounter a washroom not in our database then they would add into our database. In the end we must provide users with at least initial good quality listings of washrooms and in time they would contribute in some way to our application.
Right now, in our Toronto region, we have Starbucks, Second Cup, McDonalds, and Burger King as our main washroom locations. It also includes some non cafe/restaurant locations. This would seem like there would be a lot of washrooms listed in our Toronto region (which is true), but the problem we have with this is that not every single one of these cafe/restaurants have washrooms. So some of the places listed on there do not have washrooms and must be removed, which is the difficult part. Another issue we have in terms of usability is that in the downtown Toronto area, with the underground PATH walkway and financial/office buildings, it is proving difficult to find some of these locations as they can either be location in the PATH walkway, street level, or hidden within one of the office buildings. We would need find a solution to counteract this issue as it will pose problems to our users if they really need to go to the washroom.
Our washroom database also includes library and public park washrooms in Vancouver, library locations in both the city of Calgary and Edmonton.
So for now, with our focus in Toronto, we are hoping that we will further improve our iPoo usability, have more better quality washroom listings, and fix any known bugs with the application. We can only hope right now that people using this application to PLEASE contribute in some way to our application either by reporting, commenting/rating, and adding washrooms.
Download iPoo from Google Play Store!
Thanks!! =)
Labels:
Application
Friday, August 9, 2013
Android Gallery Intent Example
Android gallery intent is a simple way for users to select images for use in your application. It also makes the mobile app developer's life easier by not having to implement a graphic user interface for users to use to import an image. There are two different intents that you can implement for users to select an image and import it into your application. You can view my gallery intent example source code in my android-api-example Github project.Gallery Intent Using Default Gallery Application
If you want to start a gallery application that uses the device's default gallery app, you just need to call the Intent with MediaStore.Image.Media.EXTERNAL_CONTENT_URI and do Activity.startActivityForResult() instead of Activity.startActivity() on that intent. This way, you can retrieve the image path that the user has selected. Then in your overridden Activity.startActivityForResult() it just a matter of retrieving the path where the image is located. Now the tricky part is getting the file path. Tricky because the image file path isn't simply just store in the Intent data variable. Basically, the information returned will in a form of database query, thus a bit of code required to get that file path. Below is the code that I use to get the image file path (for now ignore the else if block of the code). And that is it, with that image file path decode into Bitmap and use it however you like!Gallery Intent Using with Ability to Choose Gallery Application
Just automatically opening up the default gallery application does not give much choice for your users, hence I will describe how you can give users more flexibility when selecting images on the device. Simply when you create the intent, first specify what type of file you would like to import using MIME type and telling that you want to get some form of content using the constant Intent.ACTION_GET_CONTENT and then finally invoke Activity.startActivityForResult().Similar to using gallery intent on default gallery app, in Activity.startActivityForResult() get the image file path using the provide code above. I have also mentioned above to ignore the else if block of code. This is where that block of code becomes useful. In the case where the user uses other apps (not the default gallery app), it will return the file path in the Intent data variable, thus it can get easily retrieved.
You can view my Android Camera Intent example HERE.
Relevant files are:
src/com/choiboi/apiexamples/gallery/GalleryMainActivity.java
res/layout/activity_gallery_main.xml
Enjoy!!
Labels:
Android,
Application
Friday, July 19, 2013
Randomizer is NOW Open Source!!
In my previous post My Two Android Apps, I have mentioned about my Randomizer Android application that I released on the Google Play Store. I am here to say that I have released the source code for this application on open source and it can be checked out on my Github (randomizer-random-generator).
My two main reasons for putting up on open source are: low number of device installs and low monetary income from advertisements. After doing some search on the Play Store related to random generators, there are many applications out there that people can download where some are good, while some are bad. Due to all this competition I would either have to improve Randomizer both in the user-interface (UI) design and the speed of how the application runs (meaning lag). Because of how much I was lagging behind in the UI design and the speed of the app, when compared to the best random generator app out there, it would require me to do a major overhaul of the application and this was not an option for me. Instead, I have made many improvements I possibly can do and as of last week I have just decided to put it up on open source instead. Since, there weren't many people downloading Randomizer, this resulted in low monetary income from Admob. While I was preparing my source code to be placed up for open source, I have also decided to remove all advertisements and release an update. This has been done and should be published on Play Store right now!
Anyway feel free to look through my code!
Enjoy! =D
Randomizer Source Code HERE!!
Randomizer on Play Store HERE!!
My two main reasons for putting up on open source are: low number of device installs and low monetary income from advertisements. After doing some search on the Play Store related to random generators, there are many applications out there that people can download where some are good, while some are bad. Due to all this competition I would either have to improve Randomizer both in the user-interface (UI) design and the speed of how the application runs (meaning lag). Because of how much I was lagging behind in the UI design and the speed of the app, when compared to the best random generator app out there, it would require me to do a major overhaul of the application and this was not an option for me. Instead, I have made many improvements I possibly can do and as of last week I have just decided to put it up on open source instead. Since, there weren't many people downloading Randomizer, this resulted in low monetary income from Admob. While I was preparing my source code to be placed up for open source, I have also decided to remove all advertisements and release an update. This has been done and should be published on Play Store right now!Anyway feel free to look through my code!
Enjoy! =D
Randomizer Source Code HERE!!
Randomizer on Play Store HERE!!
Labels:
Application
Tuesday, July 16, 2013
Pennapps Spring 2013
Pennapps is a hackathon that is student run at the University of Pennsylvania (UPenn) and this wasn't their first, as they held multiple Hackathons previously. What made this 2013 Spring Pennapps so special was that it was their very first Hackathon where many students outside North America attended this event. Making it their first international hackathon.
Hackathon is an event where programmers/developers or even engineers create an application/program of any form that is computer related within the given time limit. This usually equates to contestants sitting in font of their computer for the most part of the event with little to no sleep at all!! Luckily Pennapps provides breakfast, lunch, dinner, midnight snacks, and drinks throughout the competition. But don't bet getting gourmet or healthily foods. To outsiders, hackathons may look like an event that will literally destroy our bodies, but to us "geeks" or "nerds" this is a chance where we can shine and show off our skills, or even possibly learn from to hone our skills for the next hackathon.
My experiences with hackathon is pretty minimal. My first hackathon was back in January 2011 where Facebook hosted a 24 hour hackathon held at the University of Waterloo. To tell you the truth, I did not do much coding as I was grasping the idea of programming. So, I don't really consider this as my first real hackathon and was just there for fun. Back then, I knew that I wouldn't be participating in any form of hackathons in the later future. But around December 2012, my friend has mentioned to me about Pennapps and that I should join his team. Looking at their site at the time (here), it seemed more legit compared to the Facebook hackathon I attended and also our plane tickets were to be reimbursed. So, I said "why not!!" and sent in our team's application. Within the week, we received our response indicating our acceptance to the event, purchased our plane tickets and started to brainstorm some ideas to create during the hackathon.
![]() |
| Flight to Philly (Toronto seen in the background) |
As the dates came closer and closer, we were able to decide on an idea to create. We named our project Simplyi and it happens to be similar to that of a blog but different in the way how a blogger would blog. The way how Simplyi was to work is the user were to have a Dropbox account and they would place all their stuff (i.e. images, music, text files, and etc.) that they would like to post into a single folder. Then using our Simplyi website, login using your Dropbox credentials and our servers would automatically retrieve your files and create a fully functional website. Users would also have an array of design templates that they can select from for their site/blog. The issue that we tried to resolve here with Simplyi was to allow users, who do not have any technical background to create their own personal site without having to learn web. I will describe more in detail about Simplyi later on in my future blog.
![]() |
| On the taxi getting to UPenn from the airport. |
![]() |
| During Opening Ceremony |
![]() |
| Room that we were occupying. |
Once we got to the building, there were already quite a significant number of people settled in and hacking away, while dinner was also being served. As most rooms were filled, we optioned to head to the topmost floor hoping that there would be an empty room. Luckily the first room we checked was empty and marked our spot hoping that we would have the room to ourselves and that we didn't have to share it. As it turns out, even the topmost floor that we were on were quickly getting filled and had no choice but to share the room with others. One of the groups that we were sharing the room with was working on a very unique and bold project. At first they brought in a toilet, which is very unusual and everyone in the room started to question. Even people walking by our room even questioned why there was a toilet in the room. Apparently, this group was working on a program where there was a camera attached to the toilet which detects the urine coming out men's "thing." Once it detects a stream of urine, then it will play music and when the position of the urine stream is detected on one side, it will change track. While if the urine is detected on the other side, then it will tweet on your twitter account that you are currently peeing.
![]() |
| Group in front of us with their toilet project. |
As the day was getting closer to midnight, we still had a lot to implement and we were really feeling the pressure as we were also pretty sleepy. The next morning we were able to get the basic core functions working and we did our own little small celebrations. Once completed, we submitted our project and prepared ourselves for the presentation. Presentations were split up into 3 or 4 different groups where each presentations were 2 minutes each. A group of judges in each of the groups would select groups to advance to the final presentation where it will displayed to everyone.
![]() |
| On our flight back to Toronto. |
This Pennapps Hackathon has taught me how things that don't seem possible at first is possible and that creativity is important. I mean, looking at the contestants projects, they were the projects that we would have initially thought seemed time consuming and difficult to create. But, good planning and understanding of team member's skills is crucial in becoming successful in these competitions. Pennapps will be hosting another hackathon this September 6-8, but due to personal matters on one of those days I will not be attending. I hope, I will be able to attended another hackathon in the later future. In fact, I have my eyes on hackMIT, which I hope I will attend if they were to reimburse my plane ticket. In the meantime, I will be honing my programming skills!!
Labels:
Application,
Hackathon,
USA
Thursday, July 11, 2013
TODOs Application for BlackBerry PlayBook
Randomizer and Psy Yourself were not my first apps to be published on the app market.
It was back in spring of 2012, while I was an intern at Research In Motion (now BlackBerry Ltd.), they had this event where anyone who created a legitimate application for BlackBerry PlayBook would receive a free PlayBook. So, my co-worker at that time, who was an intern and a friend, informed me about this and told me that I should create something. At the time, my experiences with creating applications were minimal and thought that creating an application will be a long and tedious task. But, my friend gave me an idea and how it can be implemented quickly. That idea happened to be a TODO application where users can input the list of tasks/things that they need to do. This will allow users to easily keep track of things and also having it on a mobile device allows them look at them wherever and whenever they want as long as they have the device on them. He even showed me an example of this TODO app on the web and the tools I can use to get this task completed.
The tools I used were jQuery, jQuery mobile, and using BlackBerry WebWorks to package it into BlackBerry PlayBook app. I was new to jQuery, but after spending time on it, searching through the web and getting help from my friend, I got the hang of it. As for BlackBerry WebWorks, I was actually a software developer on the BlackBerry WebWorks team, so because of my familiarity with it, I did not have much trouble using it.
It was back in spring of 2012, while I was an intern at Research In Motion (now BlackBerry Ltd.), they had this event where anyone who created a legitimate application for BlackBerry PlayBook would receive a free PlayBook. So, my co-worker at that time, who was an intern and a friend, informed me about this and told me that I should create something. At the time, my experiences with creating applications were minimal and thought that creating an application will be a long and tedious task. But, my friend gave me an idea and how it can be implemented quickly. That idea happened to be a TODO application where users can input the list of tasks/things that they need to do. This will allow users to easily keep track of things and also having it on a mobile device allows them look at them wherever and whenever they want as long as they have the device on them. He even showed me an example of this TODO app on the web and the tools I can use to get this task completed.
The tools I used were jQuery, jQuery mobile, and using BlackBerry WebWorks to package it into BlackBerry PlayBook app. I was new to jQuery, but after spending time on it, searching through the web and getting help from my friend, I got the hang of it. As for BlackBerry WebWorks, I was actually a software developer on the BlackBerry WebWorks team, so because of my familiarity with it, I did not have much trouble using it.
After a week of hacking away, during work (don't worry I had no work assigned to me at the time =D) and after work at home, I finally completed the app where the basic core functions of the app were working. Once, it was tested and noticeable bug fixes were done, I submitted online hoping that I will land myself a BlackBerry PlayBook. The verification process took a bit longer than I thought, but I finally received an email indicating that I was eligible to receive a PlayBook. So, within the week my PlayBook shipment arrived.
Overtime, I have made improvements by making changes to the user interface and major fixes that users encounter. So far, there were not that as many downloads, but the feedbacks from those small number of users has been positive! Currently, I have no intentions on improving it any further as there are many applications on market similar to my TODOs application. Some being poorly created, while others are exceptional. In the meantime, feel free to try it out!
Link to TODOs on BlackBerry World HERE!!
You can even view the source HERE!!
Enjoy!
Overtime, I have made improvements by making changes to the user interface and major fixes that users encounter. So far, there were not that as many downloads, but the feedbacks from those small number of users has been positive! Currently, I have no intentions on improving it any further as there are many applications on market similar to my TODOs application. Some being poorly created, while others are exceptional. In the meantime, feel free to try it out!
Link to TODOs on BlackBerry World HERE!!
You can even view the source HERE!!
Enjoy!
Labels:
Application
Tuesday, July 2, 2013
My Two Android Apps
As mentioned in my previous post, I've spent the past two months creating Android applications. So far, I have create two Android apps that have already been published on Google Play Store. These applications are Randomizer and Psy Yourself.
Randomizer was the first app to be completed out of the two. It is a simple web based application using HTML, CSS, JavaScript, jQuery, jQuery mobile, Graphite for jQuery mobile, and finally packaged together using PhoneGap. My reasons for using use web technology is because of my extensive knowledge with web over Android development and the ability to deploy over multiple mobile platforms using PhoneGap.
Randomizer is an application for users where if they have difficulty making choices from the available selections they have on hand, they can input those selections and it will randomly select one. Other features includes, randomly ordering the list of choices, random number generator, and one neat feature is the ability to save randomly ordered lists, list of choices, and previous random selections for future view or use.
At first, the user experience wasn't that as pleasant compared to that of Android applications developed natively. It resulted in noticeable lag during page transitions and user input responses. Over time, after some extensive search on the web for optimizing mobile applications, I was able to improve the user experience and the user interface. But, in the end it still can't be compared to that of natively developed Android applications. This got me to think that I should move towards native development for all of my future applications. My friends have explained to me that it might be jQuery mobile at fault, causing Randomizer to be slow. Their reasoning have to do with jQuery mobile loading multiple unnecessary DOMs, which results in lag. So for now, I have my eyes on moving towards native app development for my next app, while keeping a lookout for other mobile web frameworks.
Psy Yourself is a photo booth type application where users get an image of themselves or an image of someone else and it will crop the face out replacing one of Korea's famous music artist Psy's face with the face that was cropped out. In the end it will display GIF style animation with the appropriate Psy music in the background. With social media connecting people, users will have the ability to save as a JPEG or GIF onto their devices and can be shared using their favorite social media apps.
This application was created natively using Android Development Tools (ADT). After successfully deploying an application using native development, I felt that I have made the right decision. Compared to web apps, the user interface feels smooth and quick to respond, a huge difference over my Randomizer app. But I am currently face with one major issue with this application, which happens to be memory issues. As this application is heavy with image since it loads and processes multiple images to once, it can be a burden on the phone's memory. This issue can be easily witnessed on low end phones with little RAM. I have deployed many updates for this application trying to optimize memory usage by removing bitmaps that aren't being used and adjusting images accordingly to phone's specifications, but this turns out to be not enough. In the meantime I am continuously looking out for other solutions to this issue that way majority of people interested in trying out this application can enjoy it! :)
Anyhow, these are my two applications already on the Android Play Store, feel free to try it out and provide feedbacks/comments via email (alottapps@gmail.com for Randomizer and nonamebrand00@gmail.com for Psy Yourself)!!
Link to Randomizer.
Link to Psy Yourself.
Enjoy :D
![]() |
| Randomizer (Random Generator) |
Randomizer is an application for users where if they have difficulty making choices from the available selections they have on hand, they can input those selections and it will randomly select one. Other features includes, randomly ordering the list of choices, random number generator, and one neat feature is the ability to save randomly ordered lists, list of choices, and previous random selections for future view or use.
At first, the user experience wasn't that as pleasant compared to that of Android applications developed natively. It resulted in noticeable lag during page transitions and user input responses. Over time, after some extensive search on the web for optimizing mobile applications, I was able to improve the user experience and the user interface. But, in the end it still can't be compared to that of natively developed Android applications. This got me to think that I should move towards native development for all of my future applications. My friends have explained to me that it might be jQuery mobile at fault, causing Randomizer to be slow. Their reasoning have to do with jQuery mobile loading multiple unnecessary DOMs, which results in lag. So for now, I have my eyes on moving towards native app development for my next app, while keeping a lookout for other mobile web frameworks.
![]() |
| Psy Yourself (Photo Booth) |
This application was created natively using Android Development Tools (ADT). After successfully deploying an application using native development, I felt that I have made the right decision. Compared to web apps, the user interface feels smooth and quick to respond, a huge difference over my Randomizer app. But I am currently face with one major issue with this application, which happens to be memory issues. As this application is heavy with image since it loads and processes multiple images to once, it can be a burden on the phone's memory. This issue can be easily witnessed on low end phones with little RAM. I have deployed many updates for this application trying to optimize memory usage by removing bitmaps that aren't being used and adjusting images accordingly to phone's specifications, but this turns out to be not enough. In the meantime I am continuously looking out for other solutions to this issue that way majority of people interested in trying out this application can enjoy it! :)
Anyhow, these are my two applications already on the Android Play Store, feel free to try it out and provide feedbacks/comments via email (alottapps@gmail.com for Randomizer and nonamebrand00@gmail.com for Psy Yourself)!!
Link to Randomizer.
Link to Psy Yourself.
Enjoy :D
Labels:
Application,
Technical
Subscribe to:
Posts (Atom)









