Author Archives: willwm

Hacking a Ham Radio

Reblogged from Hack a Day:

  • Click to visit the original post

For Christmas, received a Baofeng UV5R radio. He didn't have an amateur radio license, so he decided to use it as a police scanner. Since the schematics were available, he cracked it open and hacked it.

This $40 radio communicates on the 136-174 MHz and 400-480 MHz bands. It uses a one-time programmable microcontroller and the RDA1846 transceiver. With the power traces to the MCU cut, was able to send his own signals to the chip over I2C using an Arduino.

Read more… 130 more words

Apple PowerBook 170

PowerBook 170PowerBook 170PowerBook 170PowerBook 170

Apple PowerBook 170, a set on Flickr.

The second acquisition of my recently established vintage computer collection is an Apple PowerBook 170, donated to me by a coworker.

The original power supply was shot, and the NiCd battery had leaked, but I was able to find an alternate power supply and boot it up! Unfortunately, the internal SCSI 40MB drive is no longer recognized by the system, so I’ll need to find an alternative mass storage device (or just stick with the 3.5″ 800K disks that my friends have shared with me).

Apple IIgs

Apple IIgsApple IIgsApple IIgsApple IIgsApple IIgsApple IIgs
Apple IIgsApple IIgsApple IIgsApple IIgsApple IIgsApple IIgs
Apple IIgsApple IIgsApple IIgsApple IIgsApple IIgsApple IIgs
Apple IIgsApple IIgsApple IIgsApple IIgsApple IIgsApple IIgs

Apple IIgs, a set on Flickr.

Inspired by The Byte Cellar (http://www.bytecellar.com/), I’ve just started building my vintage computer collection, starting with the Apple IIgs.

As you can see by the photos in the set, it is in remarkably good condition, and it came with all of the original boxes, manuals, and receipts!

Unfortunately, the original monitor is not functioning correctly (blown capacitors, I assume), so I’ve been using my DLP TV as a monitor. I’ve purchased a DB-15 to HD-15 (RGB to VGA) physical adapter and attempted to hook it up to a LCD monitor, but the scan range produced by the Apple IIgs (15.7khz, iirc) is far below the range of the LCD.

Learn a little assembly language for the 6502 processor

Reblogged from Hack a Day:

Click to visit the original post

Evern wanted to write your own Atari 2600 games? This won't get you quite that far, but it will teach you the very basics. It's an assembly tutorial for the 6502 processor. The nice thing is that you need nothing more than your browser to participate thanks to the embedded JavaScript emulator which acts as assembler, machine, and debugger in one.

Read more… 100 more words

Ooh, this is exciting...especially since the Apple IIgs I recently acquired has a 65c816, which boots in 6502 emulation mode. =)

MiniBin!

Update!

e-Sushi has posted a new version of MiniBin after all! You can find the new version at e-Sushi.net (http://www.e-sushi.net/minibin), or you can still download the old version (3.8.3.0) below.

One of my favorite Windows utilities, MiniBin, has just been retired by its developer, so I’m creating a post here to make the download available after its binaries get pulled from the original website.

MiniBin-3.8.3.0-Setup.zip

(Thanks to Mike Edward Moras for making such a great app!)

Details from e-sushi.net:

MiniBin is a free recycle bin for your Microsoft Windows system tray area; the area next to the clock in your taskbar.

Please note that the MiniBin project has ended. This means: no more updates and no more support. Yes, I know… but it had to end somewhere. MiniBin was first published in 2004 and enjoyed updates until 2012. As it’s bug-free and feature-complete in it’s current state, I decided it’s time to move on to new horizons.

For the time being, you can still download the final version of MiniBin, the recycle bin for your system. But this download will vanish into the void within the not so far future. So, get it while it’s still available!

Editra: Setup as a Python IDE

I can’t believe that I had overlooked this application at first, but I’m glad that I finally started using it. So far, this is the best free Python IDE that I’ve found, and it’s a fantastic general text editor as well!

Image

Editra as Python IDE

Here’s the official guide on how to set up Editra as a Python IDE:

http://editra.org/setup_python_ide

Keyboard Geekery, Part 2

Now that I’ve received the XArmor U9W keyboard that I mentioned in my last post, and had a chance to use it for about a week, I thought I’d post a follow-up review for anyone who might be interested. =)

(FWIW, I’ve added this review to the product page on Amazon as well.)

—-

I’ve been drooling over the Das Keyboard Model S Professional Silent Keyboard for a while (and the original Model S Ultimate, before that), but I wanted to find something a little smaller, and wireless. The XArmor U9W totally fits that bill, and I love it. =)

Pros:

  • Cherry MX Brown keyswitches
    (I’d love to see this model with the Blues, but my coworkers appreciate that I picked a keyboard with the browns instead, and the feel is just as good, IMO.)
  • Relatively compact size
  • Solid feel
  • Wrist-rest included is quite nice
  • Itty-bitty USB wireless receiver
  • Solid signal (haven’t had a missed/dropped key yet)

Cons:

  • The mini-USB cable included only provides power, but doesn’t charge the batteries or carry any data. (Not really a big deal, since the point of this keyboard is to be wireless anyway)
  • The transmit (Tx) light that flashes every time you press a key. (I think I might just put some electrical tape over it, since there’s no way to turn it off)
  • The Num Lock light turns off when the keyboard goes to sleep (Again, might just put electrical tape over the whole lighting area and use on-screen notifcations instead.)
  • No USB ports included (Not really a con, but notable in comparison to the wired Das Keyboard).

Summary:
If you’re looking for a great, (relatively) inexpensive, and wireless alternative to the Das Keyboard Model S Professional Silent, this is it. I’m very happy with my purchase. =)

Keyboard Geekery

Ok, I’m hooked. I’ve been using the Kinesis Advantage at work for a couple days now, and both my typing speed and accuracy have improved.

As much as I love this keyboard, I can’t quite justify the price ($299), but I’ve been really wanting to get a keyboard with mechanical (clicky) switches for a long time, and I finally found a good compromise.

A huge part of the appeal of the Kinesis keyboard to me is the feel of the keyswitches, which happen to be Cherry MX Browns. I had looked in to getting the Das Keyboard S Ultimate Silent, which has the same keyswitches, but wanted to get something less expensive, and preferably wireless.

It just so happens that there is exactly *one* keyboard that meets those criteria, the X-Armor U9W, which I just picked up on Amazon. 

 

If you’re interested, here’s a link to the product page on Amazon:
http://www.amazon.com/XArmor-U9W-wireless-mechanical-keyboard/dp/B004S862FW

…and here’s what it sounds like:
http://geekhack.org/attachment.php?attachmentid=12493&d=1284500440
(same switches, different keyboard)
Yep, I’m a *huge* geek. =)

The Best Time Tracking App for Windows

This looks pretty fantastic. Do you have any suggestions for time tracking apps – for Windows, Mac, or Linux? I’ve had great luck with RescueTime, but I can definitely use something like Klok for tracking time on consulting projects manually.

The Best Time Tracking App for Windows

There are a number of different ways to track your work time, but for the majority of people, something like the free, cross-platform Klok is perfect for managing your workday, seeing how long your projects take, and tracking how you spend your time.

via The Best Time Tracking App for Windows.

The Pirate Bay’s Press Release Concerning SOPA/PIPA

INTERNETS, 18th of January 2012.
PRESS RELEASE, FOR IMMEDIATE RELEASE.

Over a century ago Thomas Edison got the patent for a device which would “do for the eye what the phonograph does for the ear”. He called it the Kinetoscope. He was not only amongst the first to record video, he was also the first person to own the copyright to a motion picture.

Because of Edisons patents for the motion pictures it was close to financially impossible to create motion pictures in the North american east coast. The movie studios therefor relocated to California, and founded what we today call Hollywood. The reason was mostly because there was no patent. There was also no copyright to speak of, so the studios could copy old stories and make movies out of them – like Fantasia, one of Disneys biggest hits ever.

So, the whole basis of this industry, that today is screaming about losing control over immaterial rights, is that they circumvented immaterial rights. They copied (or put in their terminology: “stole”) other peoples creative works, without paying for it. They did it in order to make a huge profit. Today, they’re all successful and most of the studios are on the Fortune 500 list of the richest companies in the world. Congratulations – it’s all based on being able to re-use other peoples creative works. And today they hold the rights to what other people create. If you want to get something released, you have to abide to their rules. The ones they created after circumventing other peoples rules.

The reason they are always complainting about “pirates” today is simple. We’ve done what they did. We circumvented the rules they created and created our own. We crushed their monopoly by giving people something more efficient. We allow people to have direct communication between eachother, circumventing the profitable middle man, that in some cases take over 107% of the profits (yes, you pay to work for them).

It’s all based on the fact that we’re competition.
We’ve proven that their existence in their current form is no longer needed. We’re just better than they are.

And the funny part is that our rules are very similar to the founding ideas of the USA. We fight for freedom of speech. We see all people as equal. We believe that the public, not the elite, should rule the nation. We believe that laws should be created to serve the public, not the rich corporations.

The Pirate Bay is truly an international community. The team is spread all over the globe – but we’ve stayed out of the USA. We have Swedish roots and a swedish friend said this:

The word SOPA means “trash” in Swedish. The word PIPA means “a pipe” in Swedish. This is of course not a coincidence. They want to make the internet inte a one way pipe, with them at the top, shoving trash through the pipe down to the rest of us obedient consumers.
The public opinion on this matter is clear. Ask anyone on the street and you’ll learn that noone wants to be fed with trash. Why the US government want the american people to be fed with trash is beyond our imagination but we hope that you will stop them, before we all drown.

SOPA can’t do anything to stop TPB. Worst case we’ll change top level domain from our current .org to one of the hundreds of other names that we already also use. In countries where TPB is blocked, China and Saudi Arabia springs to mind, they block hundreds of our domain names. And did it work? Not really.
To fix the “problem of piracy” one should go to the source of the problem. The entertainment industry say they’re creating “culture” but what they really do is stuff like selling overpriced plushy dolls and making 11 year old girls become anorexic. Either from working in the factories that creates the dolls for basically no salary or by watching movies and tv shows that make them think that they’re fat.

In the great Sid Meiers computer game Civilization you can build Wonders of the world. One of the most powerful ones is Hollywood. With that you control all culture and media in the world. Rupert Murdoch was happy with MySpace and had no problems with their own piracy until it failed. Now he’s complainting that Google is the biggest source of piracy in the world – because he’s jealous. He wants to retain his mind control over people and clearly you’d get a more honest view of things on Wikipedia and Google than on Fox News.

Some facts (years, dates) are probably wrong in this press release. The reason is that we can’t access this information when Wikipedia is blacked out. Because of pressure from our failing competitors. We’re sorry for that.

THE PIRATE BAY, (K)2012

http://static.thepiratebay.org/legal/sopa.txt

http://www.reddit.com/r/politics/comments/on5uq/the_piratebay_press_release_concerning_sopa_and/

20111022-010533.jpg

I have to give the Portal team some epic geek credit (and some to myself for actually trying this out) – if you record the signal played on the radio when you find the “Final Transmission” achievement location, you’ll have a SSTV signal which you can decode into an image of the companion cube on the moon. So, I did. This screenshot is the decoded result.

Update: I’ve just uploaded the transmission sound clip, so you can hear what the transmission actually sounds like: Portal – Final Transmission.m4a

 

mobiletuts: Learn Objective-C (Series)

I picked up a new MacBook Pro from Amazon.com in April (2011) with the intention of learning Objective-C to write iOS and Mac software, but made little progress with any of the tutorials I found, until I found this series on mobiletuts:

http://mobile.tutsplus.com/series/learn-objective-c/

I think the thing that kept me away from understanding Objective-C until now was the strange look of the significantly different syntax used in Objective-C, as compared to languages I’m familiar with like C#, Java, JavaScript, and C/C++. Objective-C syntax is derived from Smalltalk, in which one sends a message, as opposed to the more common Simula-derived languages, where one calls a function. (More detail on this concept can be found on Wikipedia here: Objective-C: Messages).

In other words, code like this (C#) looks familiar:

public interface SimpleCar : Object
{
  // Public Accessors
  public String Make { get; set; }
  public String Model { get; set; }
  public int Vin { get; set; }
  // Not really necessary, since we already have an accessor...
  public void SetVin (int newVin); 

}

…while this (Objective-C), until recently, looked incredibly foreign and confusing:

@interface SimpleCar : NSObject {
  NSString* make;
  NSString* model;
  NSNumber* vin;
}

// set methods
- (void) setVin:   (NSNumber*)newVin;
- (void) setMake:  (NSString*)newMake;
- (void) setModel: (NSString*)setModel;

// convenience method
- (void) setMake: (NSString*)newMake
         andModel: (NSString*)newModel;@end

Unfortunately, despite sincere interest and significant motivation, most of the Objective-C guides I came across were too dense, too verbose, or not particularly interesting. So, my MacBook got a ton of use as my primary home computer (I’m an ASP.NET software engineer by day, and I use Windows exclusively at the office, but I do love me some OS X…), but Xcode gathered dust in my dock, and I went about exploring alternatives that used a more familiar syntax – like the Qt SDK (C++), MonoDevelop (C#), and NetBeans(an impressive array of different languages).

Now that the back story is out of the way, here’s why the mobiletuts Objective-C series turned that all around and actually got me to *enjoy* developing with Objective-C:

  1. It’s very simple.

    While I do have an extensive background in software engineering, I appreciate guides that break concepts down to their simplest parts and rebuild them slowly, with no assumption of the reader’s background (other than interest in the topic). For most of you who already know your way around another language and who are familiar with the Terminal, the first lesson (Day 1) will seem almost too basic, but stick with it, because you’ll find that the author, Dan Walker, really knows his stuff. His approach reminds me of a quote from commonly mis-attributed to Einstein: “If you can’t explain it simply, you don’t understand it well enough”.

  2. It starts with what you know.

    I didn’t fully realize this from reading other sources about Objective-C, but it really is a strict superset of C. The benefit of this fact, for developers familiar with Simula-derived languages (C#, C++, Java, etc.) is that you can start writing Objective-C code in a syntax you’re familiar with (C), then sprinkle in bits of Objective-C syntax slowly, while you become more familiar with its Smalltalk-derived syntax. For instance, this code is valid, and compiles successfully in Xcode – Notice the use of Objective-C syntax within a familiar C-style method. (This clip is from the Day 3 post.):

    #import <Foundation/Foundation.h>
    
    int main (int argc, const char * argv[]) {
    
      NSString *testString;
      testString = [[NSString alloc] init];
      testString = @"Here's a test string in testString!";
      NSLog(@"testString: %@", testString);
    
      return 0;
    
    }
    
  3. It’s actually interesting.

    Dan has a great conversational style to his posts that make them very accessible and compelling, while slowly introducing increasingly complex topics. In Day 1, he explains how to open the Terminal app and invoke gcc from the command line, and by Day 2, he’s provided a great synopsis of  the benefits of concepts like encapsulation, abstraction, and inheritance.

I’m nowhere near an expert on Objective-C, since I literally (yes, literally) started reading this article yesterday, but I feel confident enough in what I’ve learned from this article to start poking around in Xcode and trying to refactor some of my existing code into a working Objective-C implementation. I hope this article helps you as much as it’s helped me, and please, let me know what you think by posting in the comment section below.

Happy coding! =)

Google Code Channel: Become a Javascript Console Power-User

Level up on the Javascript console in the Chrome DevTools. Look at XHR requests, learn console helper functions to monitor events or explore objects better. Paul Irish from the Chrome team gives you a rundown.

http://www.youtube.com/watch?v=4mf_yNLlgic

 

Computer Science Question of the Day

Fun question for all the CS nerdz out there:

What is the simplest and/or most efficient function you can write to determine whether a given string has balanced brackets or not?

Examples:

  • Balanced: “(This is balanced)”
  • Not Balanced: “(((This is *not*) balanced.”

Function prototype:

bool stringHasBalancedBrackets(string inputString)

The function should return true if the brackets are balanced, otherwise false.

(BTW, there is a great solution on Stack Overflow; I’m looking to see what everyone can come up with off the top of their heads.)

Git: Complex Simplicity.

I may be totally off on some/all of these points here, but I thought I’d share some tidbits I’ve learned during my deep-dive of Git research tonight:

Git is deceptively simple.

Coming from a background in Subversion, I expected to have to jump through a bunch of hoops to get a repository configured, then get a server configured, etc. It took me most of the night to realize that you really don’t need anything other than the git binaries and a place to put your repository (local or remote).

If you do want to use a remote server to coordinate your repository, try just creating a bare repository on a remote server you can access via SSH, and “git clone” from there. Check out this Stack Overflow post for a great example: http://stackoverflow.com/questions/4948190/git-repository-sync-between-computers-when-moving-around

If you’re coming from Subversion, start by abandoning the concept of a partial checkout.

This concept kept me from making progress with Git longer than any other misconception I had. If you get caught up in trying to recreate your Subversion workflow in Git, you’ll get frustrated. If you embrace the concept of lots of small repositories that represent the folders/projects that you’d selectively check out from a master repository, then you’ll get Git right away. (FWIW, I did read about git submodules, but for my own purposes, fully separate repositories work best.)

The best way to learn is to experiment!

The best advice I can give is to just get your feet wet. Once you have a local version of Git installed, just start creating repositories and experiment with clones, commits, pushes, and pulls. If you do plan to work with a team and/or a remote repository, I highly suggest signing up for a GitHub account – it’s free for public repositories and pretty cheap ($7/mo starting) for private repositories.

There’s tons of help out there…

Speaking of GitHub, they also have a great site to help you get started using both Git and GitHub: http://help.github.com/

Besides the guide on GitHub, here are some of the best guides I’ve found yet:

 

svn – How to solve merge issues in large Subversion repository? – Stack Overflow

After spending the night playing with Git and trying to wrap my head around the best way to migrate our large Subversion repository to Git (or Mercurial), I realized that I was really trying to solve a core issue with our Subversion merge workflow at the office and that it might help to post the issue on Stack Overflow for more input from the community.

So, here’s the question I posted to Stack Overflow, along with a link to the post there:

How to solve merge issues in large Subversion repository?

Before I explain the core issue, let me say that I’m actually quite interested in migrating our source control from Subversion to Git/Mercurial if it really is a better solution for our issues, but I’m really looking for the best solution without causing a lot of unnecessary stress on the team. (In other words, I’m not looking for the “dump Subversion altogether and move to Git” answer, since that involves a lot of thrashing and a steep learning curve.)

Now that’s out of the way, here’s our core issue:

My development team is working with a relatively large Subversion repository, where all development used to be done directly on the Trunk. A request from above for a faster release cycle led us to split our work into separate branches, with each branch containing a mirror of Trunk at the time the branch was created and sub-teams working in parallel on each branch. The new cycle is to release a specific branch to production, then merge the new changes into trunk, and merge trunk changes into each of the other branches.

Unfortunately, this has become a very painful and error-prone process, and we need to find a better way to perform our merges that also takes into account simple changes between branches such as code reformatting (some of us use “cleanup code” on our source files, some don’t).

To summarize, we need help figuring out a better way to merge that doesn’t require one or more of our developers to spend an entire day manually resolving conflicts.

(Sorry if that’s a little vague or rambling; I’ll be happy to clarify or provide more details upon request.)

Thanks in advance for any help you can provide!