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! :)

I’m Now Accepting Donations For Clippy

I just finished setting up a Pledgie campaign in order to raise money to support the development of Clippy, my clipboard manager for Android. If you use Clippy, and find useful, please consider making a small donation. Clippy is currently a 100% free application, no strings attached, and in order to keep it that way, I need a way to make a little bit of money. Clippy is currently a one-man project, and I do all the work I do on it during my spare time. I have invested many hours into developing Clippy, and I’m hoping that some of that work will start to pay off soon.  The more money that is donated to the Clippy project, the more time I’m able to invest in developing and supporting Clippy. Also, as an added incentive to encourage donations, if I receive over $20,000 $1,000 in donations, I will release the entire source code for Clippy under version 3 of the GNU General Public License, and all of the resources, including the original vector graphic files, under the Creative Commons Attribution 3.0 Unported License.  In addition to that, I’ll set up a repository on github to encourage open development, and allow others to contribute code. I got the inspiration for this idea from an independent gaming package called the “Humble Indie Bundle“, where you could pay what you want for a package of 5 games. Basically, they offered to make their games open source if they could raise $1 Million. Needless to say, they succeeded. So, in the spirit of the Humble Indie Bundle, I’m offering to make my application open source if I can raise $1,000, which is practically pocket change compared to the goal they set, yet still a very substantial amount to me. If you don’t feel like signing up for Pledgie, you can make a donation using traditional PayPal, but I’d have to manually enter your donation into Pledgie for it to count towards the $1,000 goal.

Click here to lend your support to: Clippy Clipboard Manager and make a donation at !

Great News: Gmail Gets Free Voice Calling to US and Canada

Gmail's logo

Image via Wikipedia

Google just added a really cool feature to their already great Gmail service… free voice calling. It is now possible to simple click a link (labeled “Call phone”), type in a phone number, and dial it, using your computer’s speakers and microphone. The only downside is that you have to install a proprietary plugin, which is available for Microsoft Windows, Mac OS X, and Linux. I tested the service on my computer running Ubuntu Linux 10.10 (Maverick Meerkat) Alpha 3 (64-bit edition). The call quality is excellent, and it rivals other competing VoIP solutions such as Skype, not to mention, it costs absolutely nothing, as long as you are dialing a number located in the United States and Canada. This is a really great addition to Gmail, and I hope to see Google add the ability to dial numbers from their Google Voice service too. Another thing that I’d really love to see as well is the ability to dial phone numbers using your Google Voice number from the Google Voice application for Android and other mobile phone platforms. Also, if you are calling number outside of the United States or Canada, you can also make international calls at competitive rates. Check it out!

Clippy Now Has Its Own Page on My Blog!

It’s about time I made a page dedicated just to Clippy, which, at this rate, is becoming a larger project every day. This page will be used to explain the purpose of Clippy, list it’s features, and talk about useful tips and tricks that can make using Clippy a better experience. The page is still under construction, but I’m pretty happy with how it looks right now, and I’m planning on updating the page and adding new content as I continue to work on the Clippy project. Even though Clippy already has many useful features, and it can probably be useful on a daily basis, Clippy is still missing a lot of functions that will take it from “Pretty Good” to “Great”. Because I’d probably forget to add features to the page later, I added some features that don’t exist yet/don’t work right to the list of features on the Clippy page. These features are marked in red text, so that you can easily identify them. If you have any feedback about the page, or any suggestions for content that you believe I should add to it, feel free to let me know.

New Clippy Icons (Colored and Grayscale!)

When I originally designed the Clippy icon, I made it using a free, open source graphics 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‘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.

Clippy Public Beta 0.1.6 Released

After a long night of coding, I finally released the final version of Clippy Public Beta 0.1.6. If you haven’t seen the list of improvements made in this new version, check out my previous post. This new version is more stable than the previous version. Between the previous version and the version I just uploaded to the Android Market, I fixed many important bugs, introduced working find functionality, added more settings, and, overall, made Clippy more full of win and awesome than I ever thought possible. The new version is in the market, so for those of you who have a previous version, you will soon receive a new update notification. I’m really tired, since I was up all night working on coding Clippy, so I’m going to keep this post short. Let me know if you find any bugs or if you have any suggestions for future releases by posting a comment on my blog, or sending me an email. Enjoy! :)

Clippy Public Beta 0.1.6 is in progress

I’ve been working on the next iteration of the Clippy project, Clippy Public Beta 0.1.6. In this release, I have made several major changes already, including:

  • All reading/writing to the database is now handled by the Clippy Service
  • Adding a notification bar icon, as well as a notification that allows you to easily get back into Clippy from the notification bar
  • Created a custom notification layout for usage in the notification bar
  • Fixing a major bug where rotating the screen would restart the Clippy Service (only noticeable in verbose mode)
  • Moving most hard-coded strings into a string resource file to allow for easier localization
  • Adding several additional log messages
  • Implementing an AIDL interface to allow other classes to interact with the service
  • Added several more preferences in the settings menu
  • Added debugging tools, including the ability to replace all of your clippings with sample content copied from Wikipedia
  • Completely recreated the “About” tab layout from scratch, using much better written code
  • Enabled the “testing mode” for AdMob ads when the application is running in the emulator
  • The find functionality now works perfectly, and the background of the interface for find is now transparent instead of being solid black
  • The “Search” button now opens/closes the find bar for easy access to the find functionality
  • Added a preference to the Settings screen that allows you to choose whether or not the find function is case sensitive (by default, the find function does not pay attention to case)

And several other, less noteworthy improvements. I am planning on releasing this new version to the Android Market soon.

Addressing FiOS WEP Calculator PRO (Free Version) Complaints

As you may or may not know, for a limited time, I used to offer the full version of FiOS WEP Calculator PRO without any advertisements free. This version has received 96 downloads so far, but it is no longer published in the Android market. The reason for this is because I am not making any money on my applications right now. In fact, I’m actually losing money. Also, there is a free version of FiOS WEP Calculator, titled “Lite” that offers all the functionality found in the paid “PRO” version, except there is an advertisement at the top of the screen. The truth is, however, advertisements haven’t been making me very much money at all (not even $2 yet), so most of the money I receive is directly from the FiOS WEP Calculator PRO sales. Although I would love to offer my applications for free, I need to make some money, otherwise the amount of effort I put into making my applications doesn’t pay off. As a student, all my coding is done in my free time. If I don’t sell copies of my applications, I don’t get paid for my work. However, I honestly would prefer to offer my applications for free, as open source software, and without any copy protection, but realistically, with the current low amount of sales I get, and the very minimal amount of advertising revenue I receive, even with hundreds of legitimate advertisement clicks in my application (I don’t click on my own advertisements, or encourage others to do so) that’s not realistically possible. Part of the problem might be the fact that AdMob isn’t displaying very interesting or relevant advertisements in my application, but that’s another story. By offering the “PRO” version of my application for only $0.99, the least I’m allowed to sell my application for on the Android market, I believe that I’m making it perfectly reasonable and affordable for a user to upgrade from the advertisement-supported “Lite” version of my application to a version without annoying advertisements. I know that most users of my application don’t mind the advertisements, but it would be really great if I could get some more sales for my application. As it is right now, I’m actually _losing_ money, as I haven’t even sold enough copies to offset the developer registration cost for the Android market, and I definitely haven’t sold enough copies to purchase an Android phone. As an independent developer, it’s much more difficult to sell an application, than if I was an established or well-known company. So, by now you are probably wondering what brought this topic up. Well, in order to promote sales of the full version of my application, I thought it was perfectly reasonable to modify the “PRO” version of my application that was available for free for a limited time only. Now, I’m going to assume that I know what you’re thinking, and say that what I did is nothing nearly as bad and irritating as what Shazam did with the free version of their Android application, when they limited the usage of their application to 5 song taggings per month. I simply put a notification in the PRO version of the application stating that I am no longer maintaining the free version of the app, and I nicely asked users to consider purchasing the “PRO” version of the application, in order to support development. In fact, I’ll even include a screenshot of the message shown to users upon opening the application, as well as a word-for-word copy of what the message says, so you can judge for yourself whether or not you think what I did was reasonable. Here is a full, word-for-word copy of the message:

Dear User,
You are using the free version of FiOS WEP Calc PRO. This version is no longer supported, and will not be updated. This app will continue to function, but please consider buying this app for only $0.99. The money will help support the development of my future apps, and this message will not appear in the full version. Thanks for your support! :)

This message is shown once every time the application is opened. Below the message, there are two buttons. On the left, there is a button labeled “Buy Now”, which takes you to the page in the Android market for “FiOS WEP Calculator PRO”, where you can choose to purchase it. On the right, there is a button labeled “Later”, which closes the message, and allows you to use the application, without advertisements, and exactly like the full, paid “PRO” version. There is no limit to how many times you can choose “Later”, and the application will never stop working. It takes less than a second to click “Later”, and you are not, in any way, forced to choose to buy the full version. I believe that this is perfectly reasonable, as I make no money at all from the users of the “free PRO” version, not even advertising revenue. If the users are annoyed by the message, there is nothing preventing them from removing the application, and installing the Lite version, which also does the same thing for free. The reason I am writing all of this is because I have been reading the comments on my application, and I noticed one in particular from a user named “peskykid“, written on August 3rd, 2010. The commenter rated my application one star (out of 5), and wrote this (I think their message got cut-off or something, but I was able to understand what they are saying):

After this upgrade I wouldn’t support the developer out of spite.. What a Shi**y way of doing business.. Every time the app opens you have to close a.

What I think they meant to say was “every time the app opens, you have to close an advertisement.” I believe that this commenter is ungrateful that I let them download my application for free, and inconsiderate about the fact that I’m trying to make a small amount of money selling the application. Closing the advertisement isn’t that annoying, and it only takes less than a second. If you can’t handle closing the advertisement, then you have several choices:

  • Download the “Lite” version, which does the exact same same thing, except with an advertisement at the top of the screen
  • Purchase the “PRO” version for only $0.99, which will support future app development, and won’t have the pop-up message every time the application starts
  • Uninstall the application completely, and get on with your life, without any of the functionality provided by my application

Nobody is forcing you to purchase the application, and I’m letting you continue to use the application as long as you would like for free. Sorry for writing so much, but I felt the need to explain why I added that message, and rant about the feedback I have received since I implemented it. If you have any comments, whether or not you agree with me, about encouraging those who got the “PRO” version for free to purchase the application to support future development, let me know by commenting on this article. I’d love to know what you think.

How To Get Skype on a Non-Verizon Wireless Android Device

Skype Technologies S.A. logo

Image via Wikipedia

I don’t usually write how-to guides and tutorials on my blog, but this is a really cool (and useful) trick, and I just tried this recently on a friend’s AT&T HTC Aria phone, and it works. The reason that this is so important is because Skype Mobile  for Android/Blackberry devices  is currently exclusive to Verizon Wireless, and no devices (with the exception of the iPhone) on other carriers are supposed to have access to it. The software doesn’t work very well, but it’s better than nothing. Keep in mind that this is the “Lite” version of Skype, and it’s still in Beta. It’s really simple to do this, actually. You just need to go to the market URL for the unpublished Skype Lite Beta package, and download it to your phone. That being said, the application has a lot of issues, such as crashing, and it feels incomplete, so it may be better to just hold off on Skype mobile for the moment. For your convenience, here is a QR code to make downloading the Skype Lite Beta application easier for those of you who have a barcode scanning application on your Android powered device:

Clippy Public Beta 0.1.5 Released

I just released version 0.1.5 of the Clippy Public Beta. In this version, I made a ton of major interface improvements, in fact, I think you might not even be able to recognize it any more. There is a new settings menu, but for the moment, I am not allowing users to enable the settings, as some of them may cause serious problems, as they are not fully developed yet. I am speaking from experience, especially on the auto-start setting. Just trust me on this one, it’s not worth enabling those settings yet. I decided to disable them so I could rush out a new release, as the version in the market was gradually becoming archaic. Also, many additional abilities have been added, such as sending the clipboard/clippings as emails and text messages. If you’re wondering where the menus that were previously at the bottom of the screen no matter what went, they are now located in the context menu. You can access them by pressing the menu button. Also, you may notice that the icon in the applications drawer is now simply labeled “Clippy”. However, as you will immediately notice when you enter the application for the first time after upgrading, this is still a beta, and it’s not yet stable. I wish I could go into more detail about all the dramatic changes that I made in this new release, but I’m really tired at the moment, and I just got done working for hours on releasing a new version for you guys to play with. I’ll probably update this post later, and go into more specific details. Also, you’ll be glad to hear that I made no database changes at all in this version, so your data should be safe if you are upgrading from a previous version. Try the new version out, and let me know what you think! Screenshots coming soon!