Several months back, Dave Smith gave a great presentation at the Denver Android Developers Group meeting,  titled, “Mastering Android’s Touch System”. To project the demo apps running on his phone onto the projection screen (alongside his presentation slides), he used an app called Droid@Screen. Droid@Screen is a Java app that runs on the desktop, connects to your device (over USB), and displays the framebuffer output of the phone’s screen. This is a great way to demo apps running on your phone during presentations. Another great feature of Droid@Screen is the ability to do screen capture (i.e. screenshots). One of the limitations of apps like Droid@Screen is the slow frame rate (somewhere in the 2-5 frames per second range). So, if you’re demoing a large Android app or your demo needs to show responsiveness, a hardware projection approach might be a better alternative. But, for basic app demoing and projection, you can’t beat this approach.

After I saw Droid@Screen in action, it piqued my curiosity to see what other similar apps were out there, and to compare them in terms of features, ease of use, and responsiveness. In addition to Droid@Screen, I found 4 other simlar apps, all centered around framebuffer mirroring/projection. The following table shows each app along with their features. The app name links off to their respective web pages, where you can download the app and try it out for yourself. I’m not endorsing one app over another, but I do think Droid@Screen probably has the most capability. In terms of frame rate, I didn’t notice any one being faster than the other.

Name TypeDevice SelectionOrientation*Scale/Zoom*Screen Capture / ScreenshotScreen Record*Image FormatsFrame Rate Selections (fps)*Additional Features and Notes
Droid@ScreenJava (Swing)YesPortrait, Landscape, Upside Down25-300% YesYesPNG, JPG1, 15, 30, 60
Android Screen MonitorJava (Swing)YesPortrait, Landscape50-200%YesNoPNGN/AKeyboard shortcuts
AshotJava (Swing)YesPortrait, Landscape CW/CCW50-150%, incrementYesYesPNGN/AFull screen, Install APK
Android ProjectorJava (Swing)NoPortrait, LandscapeN/ANoNoN/AN/A
Android ScreencastJava (Swing) via Java Web StartNoPortrait, LandscapeN/ANoYes (doesn’t work)N/AN/AFile browser, Open URL

 

There are a number of reasons you might want to spoof your Airport MAC address, however, I typically only want to do this when certain establishments (not to be named) that I frequent and support financially decide that you should only spend 30 minutes on their wireless hotspot. Typically, these are restaurants, coffee shops, etc. that don’t want you squatting on their wireless all day. This is completely understandable and reasonable. But, when I go in to an establishment and give them my hard earned cash, and they are offering “free wireless”, I sort of expect that I should have longer than the amount of time it takes me to eat my lunch or dinner. An hour would be reasonable, at a minimum. Heck, I’ll probably spend more on food or drinks while I’m there; why not take advantage of that by giving your customers a reasonable amount of time on your “free wireless”? (Man, is this entitlement mentality in our society rubbing off me or what?!)

There is one particular establishment I frequent that has this 30 minute limit. So, I’m thinking, more than likely, they are limiting by MAC address. After a little playing around, sure enough, that’s how they’re doing it. Lo and behold, there IS a solution to get around this limit. Here’s how it works:

  1. Make sure your AirPort is ON.
  2. Try to join some bogus network. While it is trying to connect, click Cancel. This makes sure your AirPort is disassociated with the establishment’s wireless network.
  3. Enter the following command using Terminal:  ”ifconfig en1 | grep ether
  4. You will see something like “ether e0:11:ab:c6:22:b1“. The part after “ether” is the permanent MAC address of your AirPort card. Write it down.
  5. Enter the following command using Terminal: “sudo ifconfig en1 ether 00:e2:e3:e4:e5:e6“. You have now set up a bogus (aka spoofed) MAC address for your AirPort.
  6. Verify that the spoofed address is really set, by repeating step 3 above. You should see the spoofed address now.
  7. Attempt to connect to the establishment’s wireless again. If you still can’t get in, well, you’re on your own. They must be using an different mechanism for filtering and limiting wireless connections.
  8. When you want to restore the MAC address back to it’s permanent address, either (a) run the command in step 5 with the MAC address you wrote down in step 4, or (b) just reboot your computer.
Good luck!

Update: Note, I am not condoning any sort of illegal activity by the use of MAC address spoofing. If you follow the above instructions, you do so at your own risk.

 

Java 7 Recipes Well, kind of. I did do some writing (and tech review) for the just-published “Java 7 Recipes” book from Apress, but the other authors wrote the bulk of the book. I certainly didn’t deserve to have my name in the second spot on the cover. In fact, I suggested that they leave my name off as a listed author. I felt it might be better to have 4 authors listed, rather than 5 (don’t think I’ve ever read a book with 5 authors!). I was ok with just having an acknowledgement as a Technical Reviewer. Kind of funny, they kept me on the cover, but took me off the author list elsewhere, such as inside the book, on Amazon, etc. This was the first time I have been involved with a book. The whole experience was fun and interesting, although very time-consuming. One thing I learned is writing is hard! I’m a perfectionist to a fault, even with my own writing. That’s why I’ve never done very well at blogging; it’s just too time-consuming for me. I could be out riding my bike! I found tech reviewing to be equally as challenging, for similar reasons. In the end, I received accolades for both my writing and my tech reviewing from both the lead author, Josh Juneau, and our book editor, so that was nice. My editor even told me I should really think about writing more. That was a great compliment coming from someone who has been in the business for a while. I have been asked to be a tech reviewer on Josh’s next book, “Java EE 7 Recipes” (also from Apress), so I’ll be doing that next.

 

I love that the web has fostered so many great web apps. Ok, I ♥ web apps. There, I said it. The future of the browser is bright!! Here’s a company called Enavu that currently has 3 web apps under development:

freedcamp – free project management (aside: I ♥ free!) 52framework – html5 and css3 framework (very timely; seize the day!) fzilla – file sharing and storing (possible Dropbox, CloudApp, Droplr alternative?)

Looks like some good stuff so far.

 

The more I play around with git, the bigger fan I am becoming. At this point, I hope I never have to go back to using SVN (notice how I’m not linking here). I will most certainly be lobbying for the use of git on my future projects. But, I digress. This post is about two bits of awesomeness of the most excellent GitHub, the “Social Coding” git repository hosting service: User pages and Project pages. User pages allow you to host your own website on GitHub. Some people host their primary website on github. Here are a couple of examples:

http://schacon.github.com/ http://mbleigh.github.com/

Can you say “domain forwarding”? Can you say “free web hosting”?! I’m now trying to justify paying HostMonster over $100 per year for shared web hosting (note, I have nothing against HostMonster; it’s actually quite sufficient). I do like the WordPress, MySQL, etc. hosting I get from a hosting provider such as HostMonster, but I also like the idea of using a Ruby-based, open source, blog-aware framework like Jekyll and GitHub for hosting my web presence.

The other related nice feature that GitHub provides is Project pages – the ability to host project web pages for any regular repository, using a special branch named “gh-pages”. Note, I stress the word “regular” here, because it doesn’t seem to work for a forked repository. There’s probably a good reason for that, which escapes me right now, probably due to my lack of complete understanding of the nature of forked repositories. (Yeah, that was a lot of prepositions in there, I know.)

GitHub publishes a nice help page on these two page hosting features:

GitHub Pages

The GitHub guys also had a good blog post about these features way back when:

GitHub Pages (Blog)

Lastly, here’s a Gist someone posted about the setup:

Setting Up GitHub Pages

Gist? Wha? Yeah, another cool tool provided by the GitHub team. Check it out, if you haven’t already.

 

If you want to use an external editor for editing your commit comments (by omitting the -m flag on the commit command, there are a couple of things you need to be aware of for this to work correctly. First, make sure one of the following variables is set in your environment so git knows which editor to use. Note, git will look for these environment variables in the order shown.

  • GIT_EDITOR (environment variable)
  • core.editor (configuration setting)
  • VISUAL (environment variable)
  • EDITOR (environment variable)
You also must make sure that the editor stays in the foreground when it gets invoked, otherwise it will return control back to git right away and git will think you haven’t provided any comment, therefore not performing the commit. In this case, you will most likely see the message “Aborting commit due to empty commit message.”

I am on a Mac, so I like to use mvim (or gvim) to edit commit comments. I can use the -f switch (mvim -f) to keep the editor in the foreground. So, I have my GIT_EDITOR environment variable set to ‘mvim -f’. Other editors will likely have a similar switch option, so check out the documentation for whatever editor you would like to use.

Update: It is possible that the editor you are using will take the foreground by default, in which case you won’t need to use a command switch as I did for mvim.

 

I was looking for an Eclipse plugin and found QuickREx . Very nice little plugin, and it comes with some other tools, like an XPath evaluator, multiple entry clipboard, and some HTML editing tools. The regular expression tester is nice as it can evaluate regular expressions using various expression engines, including Java, Perl, etc.

To install QuickREx, use the update feature in Eclipse as normal, using the following remote site URL:

http://www.bastian-bergerhoff.com/eclipse/features/

Instructions for using all of the tools can be found at that same URL.

 

I am not impressed with the Groovy Eclipse Plugin at all. I can’t even say that it’s usable. Why can’t I write and execute Groovy scripts without having to define an class with a main() method? I’m surprised it’s taking so long to get good Groovy support in Eclipse. I’m looking forward to receiving my free one-year IntelliJ license, if, in fact, it ever arrives (schwag from the 2GX Conference I attended). It’s supposed to have exceptional Groovy and Grails support. Until then, I guess it’s development the old fashioned way, and maybe I’ll purchase TextMate for my Mac. I like it’s simplicity.

Tagged with:
 

Pulse looks pretty promising as a way to manage and share Eclipse installations (or “profiles” in Pulse-speak). I’m trying it out at work. We’ll see how it goes.

 

Converting blog to one focused primarily on software development… still trying to find a good developer-focused WordPress theme…