Archive for the ‘Projects’ Category

(on Technorati , Del.icio.us)

Script: Wireless Strength Polling/Logging/Graphing

Initially, I wrote this script to give me frequent feedback on the signal strength. This is useful when adjusting antennas to that sweet spot that give stronger signals; especially if you’re testing some homemade tinfoil parabolic reflectors! 😉 If you have a portable wireless device, like a netbook, you can ssh into your (wireless) desktop and run wireless-strength to get realtime feedback on adjustments to the access point’s antenna… assuming the connection doesn’t break. 😛 And, of course, you can just walk around running it on your mobile device to create a kind of wireless heatmap.

If you have gnuplot, you can also generate graphs from the data with ws-plot. This is me walking around my house with my notebook:

I started in my room (40% 🙁 ), which is where the first peak is – near the window. Left my room, back to 40%, peak near window again, then bathroom… 40%. The climb from 40-80% is me walking towards the TV room (PS3 lives in a solid 80% zone, at least!). Walked upstairs, got 100% in most areas (that’s where the Access Point is) – tried a bedroom, dropped to 40%.

Download the scripts and get more details here: https://github.com/izm/wireless-strength

Nerdy Ramblings

This script originated years back, but I recently tried using it on my laptop and it didn’t work! Unacceptable! The original parsed the output of iwconfig. But what showed up as “Quality=30/70” on my desktop, would show up as “Quality:4” on my laptop. COMPLETELY DIFFERENT. Even the character after “Quality” was different! o.O The output of iwconfig is driver dependent, which is why I looked to network-manager. I figured there’s probably a nice dbus command I can send to network-manager for that purpose – but I got tired of looking and decided to just parse output again. :/ Luckily, network-manager includes nm-tool. It’s certainly not a clean solution, but it works for now.

I also used updating rewriting the script as an excuse to get better acquainted with git – which I’m really liking.

Every time I do a bash script, I vow to do the next script in Python. I like Python and I don’t like Bash… but there’s a certain… nativeness or dependency-free elegance to bash scripts. Still, I hate writing them, and the next script’s in Python! 😛

Theme updates

Made some adjustments to my blog theme.

Old

New

  • search box graphic and placeholder text
  • added jetpack subscriptions module and some css to handle it
  • gave page a max width so it doesn’t look ridiculous on wide screen monitors.
  • sidebar: removed dotted borders added white space, toned down colours – reduced noise
  • Removed grey post-meta-content (categories, tags) boxes. Put all post meta data in TOP, with comments repeated at bottom. (Similar to when I started this theme!)
  • Added hover highlight to gallery images (now consistent with image links not in a gallery). Cleaned up some of the code (to not generate HTML comments) and random fixes here and there.
  • Removed lots of black. Too harsh.

You might have to click refresh. And you might not even notice any changes. 😛

Feel free to leave a comment or use Markup to make suggestions. Markup’s a pretty cool tool.

It’s interesting to compare the progression of my themes. Well, interesting for me, at least. 🙂

I think the next time I decide to work on a theme, I will start from scratch. Clean slate. Make it more consistent with my root page.

On a related note, the latest version of WordPress, 3.3.2, is really nice.

DIY Wireless Booster

To access the Internet on my desktop computer, I must use wireless. Unfortunately, it’s about as far away from the access point as possible: opposite corners of the house and different floors. And the wireless card I’ve got in my desktop is a little old and pretty cheap. Basically, I’ve had to battle with a poor connection for years. Often, I would have to manually move the antenna an inch this way or that, try reconnecting, and repeat. I vented to my friend, Shirley, about my connection, and she said her friend was having similar issues, so Shirley recommended she make a signal booster. That’s something I’d been thinking about doing, and thought it was about time. I googled how to make a booster. Enter the Parabolic Reflector available here. I’m sure there are lots others, but this is the one I decided to try out.

Desktop antenna with booster

I made 3 of them. the first was made entirely with paper and tinfoil and it worked fine, but I figured I would try making a couple more with different materials: 2 different strengths of card. It’s good I did that too, as I ended up using 2 of them and giving the paper prototype to Shirley’s friend who most likely has better things to do than build paper parabolas. 🙂 (I, on the other hand, do not.)

Gluestick?  Check.  Scissors?  Check.

Access point hidden away, with booster pointed down slightly (towards my room)

What does it do? It turns your omni-directional antenna into a directional antenna with a stronger signal. The tinfoil does the radio wave reflecting and the shape (the parabola) just happens to be an efficient way to do that. Using this new direction, I’ve “pointed” the antenna on my wireless router towards my room – even on a bit of an angle through the floor. In my room, on my desktop PC, I’ve just pointed it horizontally in the direction of the access point.

Wireless signal strength over a few days

The results have been great. Without any home-made boosters, I received 25-35%, with one on the access point, i received 35-55%, and with one on both the access point and my desktop antennas, I’m receiving a pretty steady 62-68% (see the graph, above). I still receive disconnects, but it’s now much easier to reconnect… usually happens automatically on the first try – I don’t even have to do anything!

So if you’re having wireless issues, give it a shot! It certainly doesn’t cost much. 🙂

Canadian Income Tax 2009

If you have any trouble understanding how income tax works or is calculated, play around on this webpage and see if it helps you. (It probably won’t, but you might have fun not learning anything!) It lets you dynamically compare different income taxes within Canada using a pretty graph and it lets you calculate your own (simplified) tax results, whether your income is salary or hourly based.

canitax

Why Did I do this?

I didn’t do my taxes; an accountant did. But when I was reading about them, I stumbled upon a couple webpages and became interested in the differences among the provinces and territories within Canada and
different income ranges. That’s what started this mini Javascript project.

This is not a work of art

I wrote it mostly on the bus using my recently acquired Dell Mini 12 netbook (on Windows XP… ew). And from that experience, I can firmly say that writing even very simple things, it’s good to have a fair amount of time set aside in a relaxed environment. I would write a couple things here and there for 20 minutes or so… then not look at it again for a few days… it took me 5 minutes to figure out what I wanted to do the next time I opened it. The only times I made significant progress was when I sat down for more than an hour. The code wasn’t really designed, it was just… written. It’s messy, there’s lots of hard-coding, poorly named fields and variables (didn’t help with figuring out what I was doing last time), and if it were anything serious, I’d rewrite large chunks of it. And make it prettier. But as it stands, it’s just kinda fun. 🙂

In addition to being curious about the taxes in Canada, I was also interested in trying a javascript graphing library. I had been impressed with different javascript-generated graphs on the web and wondered how difficult they were to create. I used FLOT (with lots of copying and pasting from examples), and it seemed to work alright, but it depends on JQuery, which I wasn’t familiar with. Actually, I’m still not very familiar with it… and wrote almost everything in regular javascript. I know it’s worth learning, but I guess I’ll save
that for another time. 🙂

Let me know of any errors in tax calculation.. or code design, for that matter. There’s lots of those, but I’m sure I’m not aware of all of them! hah.

(I’ve been sitting on this post for about 2 months now. hah! Figured I might as well publish it.)

File List Applet – now with more autotools!

I decided that before I did any more work on the applet, I would improve its installation process to make it easier for people to try it out. So, the process to get and build the source now looks like this:

Download

  • Browse source here.
  • Download the source: bzr branch http://stevenbrown.ca/src/FileListApplet

Install

  1. Install dependencies (Ubuntu package names given): sudo apt-get install python-xdg python-gnome2-desktop python-gtk2 python-pyinotify
  2. Branch the source using the bzr command, above.
  3. cd into the directory.
  4. ./configure --prefix=/usr (the prefix is important!)
  5. make
  6. sudo make install
  7. If the applet does not show up in your Add to Panel menu, try restarting the bonobo-activation-server: killall bonobo-activation-server.

Autotools

Autotools is pretty much the standard in source package management on linux. Except for the name, there is nothing automatic about autotools. Every encounter I’ve had with autotools has usually defeated me and left me frustrated and leaving whatever I was working on to do something else. For me, because I had labeled it the next step, it basically stalled the entire project for a while. Most people tend to copy and paste other projects’ autotools setup, but I figured that was overkill for my purposes and I didn’t find anything that quite suited me. I looked at gnome-blog, but it seemed like some stuff wasn’t quite working properly and some was completely unnecessary… in fact, this seemed to be a trend when looking at the autotools stuff in projects. Why is this? Autotools is not simple and due to this simple fact, I think it fails completely on many levels. Developers massage it enough to get it working, but few actually understand it all – I know I sure don’t! So please forgive the sloppiness and feel free to send patches. 🙂 I gave up doing a couple things, like getting the revision number (bzr revno) and including it in the version string (see configure.ac). I know it’s probably something super simple, but I couldn’t seem to pass a variable containing a string as the version….

I feel that GNOME, as a platform for development, could seriously benefit from some kind of frontend to autotools that handled GNOME development nicely and hid as much as possible from the developer (including all those nasty config files that pollute the package tree). Anyway, I did not have an enjoyable time grappling with autotools, but I’ll end this mini-rant here.

Laptop’s New Life

My laptop has had its fair share of problems, mostly because it’s aging; I bought it nearly 6 years ago!! I’m actually impressed it’s aged so well! A few days ago, the display started to flicker with increasing frequency and become distorted shortly after turning it on. Here’s a video showing the problem: (Warning: contains a little bad language – woops…)

(Link to video here if embedded object doesn’t show up.)

Last night, I took it apart and tried wiggling every LCD-related wire I could find, hoping to affect the display’s output and conclude it was a fixable loose connection.

Laptop in Pieces

Nope. Fine. Who needs a screen anyway?

Screenless Laptop

I now have a very compact desktop – it even includes wireless, keyboard, mouse and speakers! It just needs a monitor. I haven’t decided whether I will make it a pseudo media PC to stream things from my desktop to the TV (a little work), or just to have it replace the family computer (almost no work!). The family usually gets my computer hand-me-downs. 🙂

Anyway, looks like I’ll need a new laptop sometime soon. I vowed to go smaller with my next laptop, but I’m not sure if a netbook would suffice. Of course, I would like it to run Linux (Ubuntu?), have long battery life, reasonable storage, support WPA2, have a built-in 1.3MP camera, and all that good stuff. Bluetooth would be nice, too. Let me know if you have any suggestions.

2008 In Review

Life

This year has been pretty big. Naturally following up with lots of events from last year, these are some quick memories. My nephew, Rayden, was born on Feb 12th, six weeks early! This caused the father (my brother) to be indisposed for my dad’s (2nd) marriage on Feb 14th. I got bumped up to best man (but didn’t have to do much) and had a rather empty hotel room to myself in Vegas. I attended the Open Web Vancouver conference. I went to Whistler mountain for the first time in years and plan on going again soon. I went on a fantastic road trip down the west coast of the United States, something I will never forget. I slacked off most of the summer but managed to do quite a bit of rollerblading and outdoor activity hanging out with Kurt (visiting from Brazil). My brother, now a father, married the mother of his child on August 3rd. I was best man at this wedding, as well – with more responsibilities, but they were well received and totally worth it. Our beloved cat, Sky, met an early and terribly unfortunate end. We had our first encounter with bed bugs who are now the sworn enemy of our household. Vancouver, a city that sometimes doesn’t get snow all year, had its whitest Christmas ever with 60cm (2 ft) of snow! Perhaps we should have seen snow in April as a sign….?

That reminds me: Happy Holidays for 2008! Guess I was a little late on that… Here are some pictures of our insane weather in Vancouver.

Geekery

With my free time, I think I was able to really exercise my geekiness in 2008. I released a couple updates to the Rhythmbox Jump-to-Playing plugin, which led me to submit my first patch to an upstream project! Said patch was accepted and will be in the next version of Rhythmbox! Yay. 🙂 It was just for some XML UI description, but it feels nice to have helped improve (even a tiny bit) a project that will be installed on thousands of computers in the next cycle. I also released a usable proof-of-concept GNOME Panel File List Applet which has stayed on my panel and I find quite useful. And I’ve done a couple little scripts and how-to’s that fall under the “nerd” category quite nicely. Oh yeah, and significant website updates. Next website todo item is to customize the attachment page for my theme, I think…. Also, I joined Twitter. And Identi.ca. And LinkedIn….

Art

Not many artsy things done this year. But with the significant improvements of tablet handling in Linux, I did some random doodles and a birthday card. I may not do it very often, but I still enjoy drawing, thank goodness.

Blog Stats for 2008

My Blog is by no means high traffic, but stats are fun! (These stats were obtained using the wordpress.com Stats plugin, and exclude the Feed stats, because I use Feedburner for that… although, I’m thinking I should revert that, now that I mostly use wordpress.com Stats.)

Top 3 Referrers:

  1. http://live.gnome.org/RhythmboxPlugins/ThirdParty (402)
  2. live.gnome.org/Boston2008/GUIHackfest (209)
  3. siuyee.com (126)

Top 3 Posts and Pages:

  1. Pidgin 2.1 UI Ideas (1,053)
  2. 2D Game Art and the Virtual Console (580)
  3. Rhythmbox Plugin: Jump to Playing 0.2 (455)

Top 3 Search Engine Terms:

  1. rhythmbox (327)
  2. bug (174)
  3. pidgin (165)

Top 3 Clicks:

  1. Pidgin UI screenshot attached to a bug (57)
  2. Pidgin UI mockup (50) by Hylke Bons
  3. SF2 HD Ken (42)
  4. The fourth was launchpad.net/desktopdrawers with 38 clicks, so it’s kinda cool I helped advertise a small project a little. (A project I’ve submitted patches to, no less. 🙂 )

Thanks

Thank you, everyone, for a wonderful 2008. It’s been interesting, and despite a failing economy, I’m looking positively toward 2009.

Happy New Year! (????????????????) 🙂

A Gloomy Bear’s Life

Yesterday was Shirley‘s birthday. We went out for dinner with a bunch of people and drank. It was fun. I also decided to play with my tablet, yesterday. So a birthday ecard was a natural gift!! I sent this to her a day late.

shirley_bday_ecard_small

Similar to my A Bug’s Life post, I’ll give a little overview of the process that went into this picture… I do this because I tend to enjoy reading these types of posts, myself… and… I can’t be the only one! 🙂

First, the idea: I know Shirley likes Gloomy Bear… but I know almost nothing about it! After a little searching to get the idea of Gloomy Bear’s looks. I gave it a first attempt:

gloomy1

I watched an informative and entertaining 3-minute video.Usually with Gloomy is the boy, Pity. Pity loves Gloomy, even though Gloomy’s a bear and attacks Pity, sometimes. I wanted the boy giving Gloomy a cake… then Gloomy reacting. Let’s try for more action….

gloomy2

Well, I was content with the idea… but that still didn’t look like Gloomy, at all! Did a couple sketches of Gloomy and Pity for a little practice:

pity_sketches_small

gloomy_sketches_small

Alright, these were looking a bit better. The perspective I wanted was a little awkward, but I’d give it a shot. The following resulted from drawing a lot and erasing a lot on the same sketch. That’s why it looks “smudgy.”

gloomy3

Awesome. It was starting to look acceptable. Now I had to make a nice outline. Using the Pen tool in Gimp, I added a new layer above the blue sketches. On this layer, I created paths and then applied strokes to the paths. (This kind of art should really be done with a vector program, like Inkscape, but I was tinkering in Gimp.) When I was done, I had a clean outline sitting on a layer above the blue sketch:

gloomy4

Next step was adding colour. This was really easy because the style for Gloomy Bear doesn’t have any shading – a single solid colour is applied to everything. Alright, then! Just had to hide the messy blue layer and add colours to a couple layers beneath the outline layer (we want the outline to be on top).

gloomy5

Add some text, a few touch-ups here and there, and that’s basically it! 🙂 Yay!

Originally, I did have a more elaborate idea of doing a stylish multi-panel comic:

  1. Pity gives Gloomy a cupcake.
  2. Close-up of cupcake.
  3. Close-up of Gloomy’s face, colours inverted.
  4. Gloomy reacts violently.
  5. Back to original scene, with after-effects.

This was my sketch for the reacting violently panel: 😉
gloomy_unfinished_idea

Would have been fun. But I decided to keep things simple. 🙂

All images are under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. And I would appreciate being told if you use anything. 🙂

WordPress 2.7

I just upgraded from 2.6.3 (using my “wp-upgrade” script), and It’s fantastic! Go watch a video about the biggest features. It even includes an “automatic upgrade!!” This pretty much deprecates my script, unless you want to maintain snapshots of each version. (I’m not sure if anyone other than me was using it to begin with… but anyhow….) 🙂

Screenshot: wp-upgrade Snapshots

File List Applet – GNOME Panel Applet

This is kind of a proof of concept I’ve been playing with. The idea is that finding a file within a folder is often easier by type, and you are often only interested in the most recently modified file. The problem with a file manager is that although you can easily sort by either type or modification time, you cannot filter your view of all the other files you’re not interested in. I previously wanted to address this issue within Nautilus, (and I still believe this functionality would be wonderful in Nautilus), but I ended up doing this much less ambitious applet as a proof of concept.

This applet will let you add any number of folders to it, and will try to categorize the files automatically and intelligently. Currently, it’s more automatic than intelligent as it just looks at the mime-type. Even so, I’ve found it especially useful for keeping track of all my downloads:

Steven is catching up on the latest on planet.gnome.org and has downloaded a couple screencasts demoing the latest and greatest. These files are typically 2-10 megabytes, so they didn’t download instantly. Steven continues reading and forgot about the screencasts until a couple hours later. At that time, he can simply click on the File List Applet, select Downloads, select Video, and look at the top of the list for the newest files. Steven is happy. When finished, he can follow the same process to delete them – without once opening his file manager and being assaulted with ALL the files in his Downloads folder.

Ultimately, I would like to extend the idea to provide the same type/subtype menu system for all files under all folders – a type of summary – but I have not implemented that yet. There are other features in the cooking pot, as well, but I have to get started on some “RL” tasks… like my resume. 🙂

Screencast

I had a problem recording audio, so I ended up typing as narration. Unfortunately, this makes the YouTube one pretty unwatchable, but you can give the “HQ” version a try.

Download

No tarball yet as it’s still extremely rough.
Browse the source here.
Branch the source: bzr branch http://stevenbrown.ca/src/FileListApplet

Install

Update 2009/04/05: Updated install instructions here. (Some people don’t look at the comments….)

Installing will require some manual modifications.

  1. First, make sure you have the following packages (Ubuntu): python-xdg, python-gnome2-desktop, python-gtk2, python-pyinotify
  2. Then branch the source.
  3. Adjust the FileListApplet.server file’s location to wherever you keep it.
  4. Then copy FileListApplet.server to /usr/lib/bonobo/servers/.
  5. Restart the bonobo-activation-server. killall bonobo-activation-server
  6. Add it to the panel like other applets.

Update 2008/12/05: Added a couple screenshots.