The Warm Up
Not very long ago, I made three stickers from a photograph of yours truly. Because the original intent of making the stickers was never met, I decided to give away the stickers with a simple contest.
Sticker #1 has gone across the Atlantic Ocean an now resides in Germany.
Sticker #2 has traveled across the United States and now resides in Upstate New York.
Sticker #3: well this sticker is probably going to travel more than #1 and #2 combined (and then possibly doubled).
Wait, didn't the third postcard come from Switzerland? How can the sticker have such an unknown travel distance? I'm glad you asked.
allow me to spin a yarn....
A few weeks after sticker #2 was shipped off, I received a message from my buddy asking if I could fix his computer. I heartily agreed and five days later I was picking up the computer at the post office. Yea, the machine was so bad my friend mailed the computer to me.
The machine itself was a sweet little Asus netbook that was infected with Microsoft Windows XP. Asus really did a disservice to computer users everywhere by putting Windows on their netbooks. By itself, XP made the machine sluggish and all of the extra bells and whistles that were tacked on ( and tacky looking ) by Asus didn't help.
Aside from slowing down the machine significantly, XP made the machine vulnerable to the plethora of malicious code that seems to be floating about these days, and the machine had a few trojans and a rootkit. Damn, that machine was fucked up, and it took quite a while to clean; but clean it I did and it was time to send it back to my buddy.
My buddy rides bicycles and he goes on bike adventures. I'm not talking about pedaling 5 miles across town for a cup of coffee at a new café (now that is my kind of adventure). I'm talking about really really riding; packing camping gear on a bike and riding for days, weeks, months, and years. Right now, he's in New Mexico, having recently ridden the Continental Divide Trail.
Anyway, it was time to send the computer back to my buddy. Before shipping the machine, I added a few items to the computer bag:
- a stamped envelope addressed to me
- a stamped blank envelope ( he should write to someone else on his adventure)
- a sticker of me,to adorn his bike (AHA!, so that's where it went)
If you are interested, you can check out his blog at http://pocket-thunder.blogspot.com/ and I found out that the package had arrived safely when I read his blog post about it.
The Quandary
It had been a few weeks and I didn't think that anyone would send a postcard for the last sticker. As life would have it, three days after shipping the netbook to New Mexico I received a phone call from the bartender of a local drinking establishment who informing me that I had some mail at the bar. What do you know, it was a post card for the sticker contest thingy.
I must say, the newest postcard followed the rules of the contest to a "tee", which is awesome! Yet here I am with no more stickers. What is a Jez to do? Make more stickers of course! ( I should start numbering them)
It looks like I've got a busy week ahead of me.
Now quit reading, and go make more stickers than you think you'll need.
Now quit reading, and go make more stickers than you think you'll need.
During the week, there were a few things that I took pictures of in the hopes of documenting on the web. Unfortunately, they were not quite significant enough for a blog posting. As Friday rolled around I had big dreams of another Friday Frolic, but alas, it was not to be. (Actually some of this is a few weeks old, but I didn't want to not post about it)
Welcome to the Saturday Sassafras! ( Sorry, I couldn't come up with a better name )
Jezra.net
Damn those spammers! On Friday morning, I started to receive quite a bit of email spam, in BBCode format, from my contact form. With a bit of the old "copy and paste" I shortly implemented the jezra.net blog captcha for the contact form and booyah!, no more spam.
However, keeping the bots from spamming me is one thing, what I would really like to do is just send them a 404 error code when they get to my site. With this in mind I updated my web framework to log the time and IP addresses of "visitors" that enter nothing in the captcha answer field. My original plan was to check a visitors IP address against the recorded IPs, and if the IP address has 2 or more entries recorded is the last 30 days, they would get a 404; but I think I will just pass a 404 to any visitor that with a user-agent identified as IE6. Why do spam bots love IE6 user agents so much?
Oh yea, I also started using lightbox for displaying screenshot of some projects. Wow, what a segue.
Speaking of projects....
Heybuddy
Heybuddy recently had a new release, 0.1.0 Hudson, that added the much needed "filtering" feature that allows one to filter out dents based on tags and groups mentioned in the dent, as well as by the poster of the dent. As someone that doesn't give a rat's ass about soccer, the filter feature is awesome during the #worldcup.
I'd like to thank Fabsh for the inspiration. I'd also like to thank all of the tester and users of heybuddy for finding bugs and most importantly, for reporting the bugs.
speaking of heybuddy...
Operation "Cool it!"
"Hey buddy, I'm going to the Pick-n-Pull to look for a cooling fan controller module for my car" were the words I heard and I quickly offered my help. Who can resist a trip to a pick-n-pull? Besides, had been over-heating for about 2 years and really needed a new module, but they are $400 for a new one. Two hours and $20 later, we had the part in hand. Cool.
speaking of cool cars....
00000
Look at that picture! Ignore that fact that my 40 horsepower Volkswagen can go over 55MPH, and look at the odometer. Gertie had looped her odometer and we celebrated with an oil change and a new alternator.
speaking of cool....
hotsauce
At the half way point of the year, I though it would be a good idea to take a picture of the hot sauce that I've consumed so far this year. That's 134 oz of TapatÃo and 6 oz of Crystal. Did I mention that I like TapatÃo?
That's about it for now. Expect some code in the future...
Now quit reading and go make things happen!
Plenty of things happen that are almost blog worthy but just don't have the substance for a full post. For the most part, this is what microblogging is for. However, there are somethings that are too big for a posting on identi.ca. So what is a Jez to do?
Why, have a fun filled frolicking Friday feature fest, of course. The idea is simple: aggregate the little things into one post. Booyah!
Jezra.net
Recently, I've make two changes to my blog, only one of which you the viewer will actually experience.
the blog code has been updated to allow me to write using the Markdown format. I'm actually using PHP Markdown written by Michel Fortin. From a visitor's standpoint, this doesn't really do much, but it certainly makes it easier for me to compose a new posting.
images in blog postings will now be utilizing lightbox, a javascript library for presenting "click to view larger image" images in a pleasant way. There is actually a lightbox2 that I should be using, but I'm happy with the way things are working right now.
Code
heybuddy, the Python identi.ca client, has a new stable release: 0.0.7 "Glens Falls". The biggest feature of this release is probably the inclusion of avatars. Go get it!
In December of 2009, there was a thread in the Linux Outlaws forum about coding a "crap alert" in various programming languages. I wrote the alert in Python and then ported the code to Vala. Recently I cleaned up the Vala code, compiled the code to run on my N810 and made an application package for Maemo. Hopefully the compiled app will also run on an N900, but I don't have one to test on. hint hint
Here is the Vala code:
valac --pkg hildon-1 --pkg gstreamer-0.10 --pkg gtk+-2.0 crapalert.vala -o crapalert
*
* or
*
valac -D TESTBUILD --pkg hildon-1 --pkg gstreamer-0.10 --pkg gtk+-2.0 crapalert.vala -o crapalert
*
*/
using Gtk;
using Gdk;
using Gst;
using Hildon;
public class CrapAlert:Hildon.Program
{
bool is_playing;
Element playbin;
bool is_fullscreen;
Hildon.Window window;
construct{
}
public CrapAlert()
{
#if TESTBUILD
string resources = Path.build_filename(Environment.get_current_dir(),"Resources",null);
#else
string resources = Path.build_filename("/","usr","share","crapalert");
#endif
/* set some variables for later use */
is_playing = false;
is_fullscreen=false;
//where is the image for the app?
string image_src = Path.build_filename(resources,"crapalert.png",null);
string icon_src = Path.build_filename(resources,"icon.png",null);
stdout.printf("image_scr: %s\n",image_src);
//where is the audio file?
string audio_src = Path.build_filename(resources,"crapalert.wav",null);
stdout.printf("audio_scr: %s\n",audio_src);
/* create a gstreamer playbin */
playbin = Gst.ElementFactory.make("playbin", "player");
//set the uri of the playbin to the audio file source
playbin.set_property("uri", "file://" + audio_src);
//get the bus of the playbin
var bus = playbin.get_bus();
//tell the bus to watch for signals from the playbin
bus.add_signal_watch();
//connect "message" signals to a function
bus.message.connect( player_message );
/* build the interface */
// create a new window
window = new Hildon.Window();
// connect the delete_event so we can quit the app
window.destroy.connect( (w)=> {
quit();
} );
window.key_press_event.connect( (w,e)=> {
check_event(e);
} );
// we need a button box to hold the image
Gtk.Button button = new Gtk.Button();
//connect the button to the play_audio function
button.clicked.connect( (w)=>{
play_audio();
} );
//create an image from the image_src
Gtk.Image image = new Gtk.Image.from_file(image_src);
//add the image to the button
button.set_image(image);
//add the button to the window
window.add(button);
//set the window icon
window.set_icon_from_file( icon_src )
//show the app
window.show_all();
}
public void run()
{
//start gtk
Gtk.main();
}
private void quit()
{
playbin.set_state(Gst.State.NULL);
Gtk.main_quit();
}
public void play_audio()
{
//are we already playing?
if(!is_playing)
{
is_playing = true;
//make the playbin play
playbin.set_state(Gst.State.PLAYING);
}
}
private void player_message(Message message)
{
// check for the end of stream message from the playbin
var t = message.type;
if (t == Gst.MessageType.EOS )
{
playbin.set_state(Gst.State.NULL);
is_playing=false;
}
}
private void check_event(EventKey event) {
if (event.keyval==65475) {
toggle_fullscreen();
}
}
private void toggle_fullscreen() {
if (is_fullscreen) {
window.unfullscreen();
is_fullscreen=false;
}else{
window.fullscreen();
is_fullscreen=true;
}
}
}
public static void main(string[] args)
{
//init gtk and gstreamer
Gtk.init(ref args);
Gst.init(ref args);
//make a new instance of the crapalert
CrapAlert ca = new CrapAlert();
//run the crap alert
ca.run();
}
Here is the crapalert running on my N810. If anyone is interested in the installable binary, it is available at http://www.jezra.net/downloads/crapalert-0.2.deb.
Technology
About two weeks ago, my telephone answering machine died. To be honest, it had been one cassette in the grave for a very long time. Anyway, a short trip to a local thrift store and $6 later; I had taken the leap for the 80s right into the 90s with a digital answering machine/cordless phone combination. That's right, a push button phone. How tech is that?
A few days after connecting my new phone, I received an invitation to Google Voice and I thought I should try out the service. I will be doing a proper review in a month or two when I have had time to properly use Google Voice.
Speaking of speaking, I've been trying to set up a Mumble server and I could use some help testing the machine with someone far away. If you can install Mumble v1.2.2, have a microphone, and live more than 4000 miles from the San Francisco Bay Area, contact me. Actually, if you can install Mumble 1.2.2 then you should contact me.
Now quit reading, and go do something.
Apparently, Google is not going to use Microsoft Windows anymore, unless it is really really really necessary. Seriously, if someone at Google needs to run Windows, they are going to need the permission of the CIO. Wow! From now on Google will be a Linux and Apple shop. (hopefully there will be a few BSD users in there as well)
But aside from the security aspect, what does this really mean?
(go read the article if you want to know about the decision, I have different concerns and don't feel like paraphrasing in the hopes of creating my own unique content)
There surely are plenty of times that city governments, school districts, and probably small countries have moved away from Microsoft products, but to me, this is a bit different. As ephemeral as Google may be by having mostly digital products, I find Google to be a very tangible company with products I use on a daily basis, and as far as the internet is concerned, Google is a major player.
In a sense, this may be an advertisement that Google is ready to eat their own dogfood. Aside from Android, Google's OS for smart phones, Google has also been working on Chrome OS, which is supposed to be a hardened OS based on Linux. Perhaps it is time for me to take another look at what Chrome OS has to offer (it is supposed to ship in the second half of 2010, which is a month away). This of course is just speculation on my behalf. I'm actually more interested in other things.
Obviously Apple machines will be "Google Approved", but what about machines to run Linux? Sure the overpriced shiny plastic from Cupertino can have Linux installed on it, but what other manufacturers are going to make laptops that are blessed by Google? Don't almost all manufacturers run a "We Recommend Microsoft Windows" campaign? Although they can surely pay for it, will Google really purchase a Laptop with Microsoft Windows and not want a refund for the MS tax? As I see it, if a manufacturer wants their products to be used by Google, then the manufacturers are going to need to test Linux on their systems. Hopefully this will lead to more Linux compatible devices on the market. I can't possible be the only consumer that thinks "Hey if it's not good enough for Google, then it isn't good enough for me".
Oh, speaking of Microsoft.... Why haven't they bought Novell yet?
With the purchase of Novell, Microsoft will have a more direct control of the Mono and Silverlight projects, as well as control of a major Linux distribution. Microsoft is going to need some operating system to run on low power ARM based systems, and nothing Microsoft makes fits that bill in an esthetically pleasing way.
Regardless of what influence this will have on other people, I think made a long overdue decision.
Now quit reading, and do what Google did. Actually you should probably avoid the Apple as well.
I hope this leads to more linux systems(or at least OS free systems) from companies like Dell and HP. We can only wait and see what happens in the long run.
Oh no! haha
For the past few months, I've been using indenti.ca to micro-blog and while there are plenty of applications available to access the identi.ca data from my laptop or desktop, I couldn't find anything that would run well on my Nokia N810 pocket computer.
Originally, I had planned to write a client in Vala, but since there is already a wonderful Vala denting client named Pino and since I hadn't written anything in Python for a while, I decided to use Python and develop a client in such a way that it might be easy to port to other languages: specifically Vala and possibly Java.
A couple of hours here and there with Geany and I had a pretty decent denting client in need of a name. Luckily I have a buddy who, aside from needing to blog about his photos, needs a denting client named after him.
Hey Buddy! I wrote an identi.ca client and named it after you. Well, sort of.... it's called heybuddy
In the wild
Jake Hume (http://blog.fragdev.com/) took this picture of heybuddy running on his N810. Sweet!
Although I don't have any plans for making packages of heybuddy for various Linux distributions, fellow Linux Outlaw and heybuddy user timttmy has created a heybuddy AUR package for Arch Linux
What I've learned
- simple little projects are rarely simple or little
- I still can't get threading to work in a python app
- there is a correct way to authenticate an identi.ca user via the urllib2 python module, the short cut I tried to take showed me the error of my ways
- the documentation for gtk.keysyms seems to be non-existent
- The majority of heybuddy user's live in apple growing country
- I ♥ scrumpy
Now quit reading, and go say "hey buddy" to your buddy!
clean. a little... gray. but clean.
WINNER!?
It was April 30th, 11:50 PM and I had just finished the script that I was writing for the Scriptfrenzy challenge: write a 100 page script in 30 days. Unfortunately, my script came in at a whopping 98 pages. So with ten minutes to go I frantically started to add dialog to my script in order to reach the goal of 100 pages.
Using the wonderful celtx script writing software, the process of validating pages was as follows:
- type type type
- export the script as a PDF
- upload the PDF to the scriptfrenzy.org website
- freak out due to a low page count
Actually, it was during the export and upload steps that I was freaking out the most. When there is such a looming deadline, anything that only takes a second to accomplish feels as though it takes a minute or more.
At 12:05 AM on the morning of May 1st, I uploaded and validated a 99 page script. Hold on there tiger! How was I uploading a script after April 30th? Checking the homepage of the Scriptfrenzy site, I was informed that I had another 55 minutes until the challenge ends. Was the server on Alaska time? I didn't know, and honestly I didn't care. All I was concerned with was the extra 55 minutes with which I could write my script.
At 12:15 AM on the morning of May 1st, I uploaded and validated a 100 page script. Victory was mine, or was it?
After doing a bit of information gathering, I finally determined the root cause of the problem. I was cheating! Well perhaps that is a bit drastic. The reality is that my time was off and I had started the challenge at 1:00 AM April 1st and not at 12:00 AM on April 1st. The root cause of this discrepancy is that my time zone is UTC-8, unless we are in Daylight Saving Time, in which case my time zone is UTC-7.
Therefor, I fully place the blame on which ever Government entity is prohibiting the permanent change to Daylight Saving Time.
Now stop reading, and go do something that makes you miss your deadline. Oh, in that case, keep reading!
Disclaimer: I work for Scriptfrenzy, so take this entire posting with a grain of Mrs. Dash: sodium free seasoning. Hey, there are alternatives to salt, and no, I don't work for Mrs. Dash!
so you going to let us read the script, or is that not allowed?
I need to do a few revisions of the script and then I'm probably going to enlist my friends to help me make the movie.
"Oh, this could be bad".
In the pit of my belly, there is a place of calm and solitude where tranquility reins and it is always room temperature. A few things however, can be quite adept at changing the weather patterns in this special place. Recently nothing changed my calm and that nothing was the eiry silence that followed the click of the power button on my computer.
Where there would normally be a click followed by the whirring of fans and the dulcet tones of hard-drive platters spinning up there was nothing, nada, zip, zilch, None, null, unset(), del(), remove(), rm. As the silence deafened, the temperature changed and a lump of ice grew in my belly. The computer was not going to turn on. The ice got colder...
About 10 years ago, I put together a computer with a mixture of new, used, and "hey you should just ditch that crap" components, and affectionately named the machine Shaihulud to pay homage to the Dune series of books by Frank Herbert. Over the years, various components were upgraded, added or removed. In it's current state, Shaihulud has none of the original components from so many years ago but there are plenty of components from the previous incarnation of Shaihulud; which had many components from its predecessor; which had many components from its predecessor; all the way back to the original.
Why am I explaining all of this? Because I *like* this machine; it has been with me for a while and now it appears to be gone.
No email? No writing my Scriptfrenzy script? No hacking fun code projects? Egads! What's a Jezra to do?
Fix that crap!
Determining the problem
After popping the side off of Shaihulud, I traced the wires for the power-switch to their location on the motherboard. The wires end with a push-on connector that is attaches to two pins on the motherboard. I removed the connector and used a bent paperclip to close the electrical gap between the pins. If the computer had started up, then the problem would have been with the power switch. Alas, this was not the case.
Apparently, the green wire coming from an ATX power supply acts as a relay to turn on the power supply. With this in mind, I disconnected the power supply from the motherboard and VERY CAREFULLY grounded the green wire. The power supply fan should have started to spinning. It didn't, so the problem appears to be the power supply. Fine. I'll just replace it.
The Replacement
Wednesday 5:45 PM - Operation "Power Up" begins. When going on a mission, it's always important to give the mission a cool name.
Wednesday 5:50 PM - After sprinting on my bicycle to the local Computer repair shop, I find out that "Closes at 6PM" really means "Closes at 5:49PM"
Wednesday 6:00 PM - sprint across town to an office supply bigbox store to check their prices. Egads! $49.95 or $89.95? No thanks
Wednesday 6:10 PM - sprint back across town to a meeting at City Hall.
Thursday 10:00 AM - My car's rusted out muffler is about to fall off. Use bailing wire to hold the muffler in place. This is the third automobile that I've owned that has had the muffler held in place with bailing wire.
Thursday 10:30 AM - Drive to HSC Electronics in a nearby town, drool at all of the tech kit, and spend $14.95 for the item that I need.
Thursday 11:00 AM - Stop at 360 Subs on the way home and eat a delicious sandwich.
Thursday Noon - Shazaam!
A while ago, I wrote some code to allow me to send text to a server and have the server output the text as speech, and each of my computers informs me that it has finished starting up by sending text to the speaking server. When I finally heard the words "Shaihulud is now online" again, I almost cried. Welcome back Shaihulud.
Now quit reading, and go um.... read some Frank Herbert.
I name my home computer Lulu (no real reason, just like the name). find a good non-apple female synthetic voice to say it. nice.
I am so freaking sad >_>
In fact, I tend to keep most of the old hardware I replace in upgrades, so I'm fairly sure I have a complete Phoebe replacement (sans motherboard), should the need arise...
And yes, that voice server is a brilliant idea. Have you positioned it somewhere that can be heard throughout the house/apartment, or is it just near all of the computers?
Hello,
My Name is Jezra Lickter and I am a resident of Petaluma California. I am writing to you in the hopes that you will help enact my proposed legislation. To put it simply, I am proposing equality in moving violation fines. To this end, I would very much like to see fines for motor vehicle infractions be based not on a flat rate, but upon a percentage of the offenders annual income.
If the use of a fine is to be a deterent against infractions, basing the fine on a percentage of income will act as more of a deterent across all economic classes than a flat rate fine.
For example suppose two people are cited for talking on a cell phone while driving, one (Person A) makes $20,000 a year, which is approximately the income of a minimum wage employee, and the other (Person B) makes $300,000 a year. Currently, both will receive a $20 fine. Person A will need to work for two and a half hours to pay the fine and Person B will need to work for just over 8 minutes. while this is a deterent for Person A, this is no deterent at all for Person B.
Now suppose that the fine for talking on a cell phone was 0.01% of ones annual income. Person A would pay a fine of $20 dollars and Person B would pay a fine of $300. Both people would need to work the same amount of time in order to pay their fine.
Basing motor vehicle fines upon income is nothing new; Germany, France, Austria, and Nordic Countries base speeding tickets on income. ( see http://www.msnbc.msn.com/id/34792272/ )
When applied to all moving violation fines, this legislation would theoretically create a temporary surge in the amount of money collected through fines as the well-to-do that normally are not deterred by the current fines begin to pay their equal share.
Thank you for your time,
Jezra Lickter
Other than that, sounds nice.
@x1101, Absolutely. For example speeding in a school zone could be a fine of 1%.
In NY, it falls on the towns to collect fines like this - is it the same in California?
Dogfooding is a term used to describe when one uses their own product.
Not too long ago, I began working for the Office of Letters and Light: a Non-Profit company in the East Bay that coordinates yearly writing events. The majority of my work so far has been editing and writing CSS, HTML Templates, and Drupal modules for the ScriptFrenzy website. The ScriptFrenzy event challenges writers to create a script in 30 days.
According to the website the ScriptFrenzy challenge is to "Write 100 pages of original scripted material in the 30 days of April. (Screenplays, stage plays, TV shows, short films, and graphic novels are all welcome.)"
"So What?" you might ask. Am I being a shill for the company? Yes and No.
If you want to take up the challenge, please do, the ScriptFrenzy website has a ton of resources for both new and seasoned script writers. As for me, well... I'll be eating my own dogfood and taking part. Since I believe in the company enough to work there, I should take part and finally write that script that I've been thinking about for the last few years (or I'll write the other script I was thinking about).
What I mostly want is to publicize that I will be taking part, and hopefully generate support for me and my poorly utilized writing ability. Oh wait, I have a poor writing ability and I sometimes lack focus and concentration. In theory, the deadline imposed by the challenge will help me focus. Yea, in theory.
Finally, there is no way I can be a "proper" writer without sipping a scotch on the rocks and exuding an air of sophistication. Luckily, my refridgerator is being replaced before April 1st, so I will actually be able to make some ice for my scotch. Even better than the ice, is the bottle of single malt scotch that my buddy gave me for helping him with so many of his photography projects. Thanks Buddy!Since my current "freezer" doesn't actually freeze water, I decided to use an image from flickr user Generation X-Ray.
Now quit reading, and start writing... or help a buddy with a photography project.
Are you buying? When it is my whisky, I'll do as I wish, when it is your whisky, I'll drink it as you serve it!
water of life and water (frozen water)
As the ice melts, the beverage gets diluted to the point where the flavor of the scotch becomes truly pronounced. For me, it is the difference between *enjoying* a scotch and drinking a scotch.
When I first purchased my car, it had a crappy cassette player installed. The unit would only play through the right channel and it would randomly eject whatever cassette it was playing. Eventually, the player started eating my cassettes and then died altogether.
Fortunately, my local thrift store was selling a cassette player for $5, as well as a bunch of cassettes for $1 each. Six dollars and 20 minutes later, I was rocking out to Boston's "More Than a Feeling". Not too shabby, but I want to listen to music from my digital collection as well as some audcasts. Purchasing an "audio out to cassette" adapter proved to be a fruitless endevour as the cassette player started ejecting the adapter after a few seconds of playing.
The next step was to purchase an FM modulator that plugs directly into the antenna port on the back of the cassette player. Unfortunatly, the radio decided to break when I tried to tune into the FM modulator's selected channel. "That's OK" I thought, "I can just listen to cassettes from the thrift store." Jerry Lee Lewis, Glenn Miller, Back to the Future Soundtrack, and some Lionel Richie mostly kept me entertained until the cassette player started to fail.... Time for another solution
The Busted Beast
Personally, I like having a busted crappy looking cassette player in my car, because It lets people know (or think) that there is nothing of value in my car. So, the junk cassette player will stay mounted in my dash. Perhaps I can convert it to a change holder in the future. Oh well, perhaps some other day.
Why yes, that is the Little Mermaid Soundtrack in the cassette player. How did you know?
200 Watts of Fury
For $16, including shipping, I purchased this amplifier from an Ebay store. The amp was advertised as 200 watts and I certainly believe that the actual amplification number does have a 2 in it, but it certainly isn't 200; it is more like 2.
What the amplifier does have is a 3.5 millimeter stereo input jack, which will allow me to connect nearly any portable audio player.
Body Modification
In order for my plan to really come together, I would need to hide the amp in my trunk and keep my portable music player in the glove compartment. This would require cutting a hole in the glove compartment so a cable could be run to the trunk.
What? You can't access your trunk from a hole in your glove compartment? weird.
Custom Mounting Bracket
Nothing says "awesome" like a custom mounting bracket, and in this case, that mounting bracket is Gorilla Tape. Hot damn, that is some strong tape.
With the amp installed, I plugged everything in and tested the system. Not bad, not bad at all.
For a victory lap, I went out for a drive while listening to Riddle of Steel/Riders of Doom from the Conan Soundtrack by Basil Poledouris, and I turned left where I had never turned left before, just to explore what was there.
Now quit reading, and listen to Riddle of Steel/Riders of Doom while Crom laughs at your Four Winds.
So what would cause the engine to stop like that? A bad distributor; perhaps no electricity getting to the coil. Turning the ignition key lit up my console lights but didn't engage the starter motor and I didn't hear any clicks from the solenoid. Fine, no juice was getting to the solenoid. If no electricity is getting to the starter and the coil, the common point of failure is probably the ignition switch. But why would it fail when it did?
Hold on a second...
I need to take a moment to salute the best problem solvers that I know of: the Shade Tree Mechanic. Named so because it isn't uncommon for them to use the branch of large tree to help pull the engine out of a car. Most shade tree mechanics that I know, have limited formal education in the art of automobile repair and instead have Doctorates and Masters degrees in real world experience.
Alright, back to my car.
After walking the mile and a half back to my home and having a bite to eat, I thought it would be best to see if the headlights dimmed when I tried to start the engine. If the lights dimmed, then electricity was being diverted to the starter, and the problem may not be the ignition switch. So on my bicycle I rode, to perform the test.
Writing Software
I enjoy writing software. Sometimes I need the challenge, and almost all of the times that I write a piece of software, I actually need/want the software. When there is a problem with software, it is referred to as a bug, although some people call it a feature. In order to fix a software bug, it is necessary to determine the steps required to reproduce the bug. If the bug happens everytime a certain action is performed, it is easier to track down what is causing the bug and therefore easier to fix. If, on the other hand, the bug only happens sometimes and there is no decernable scenario that will cause the bug, then there a lot of head banging against the wall trying to find the problem. This is the worst kind of bug.
Turning the Key
With my bike parked in front of my car, I was ready to check the headlight brightness as I turned the key. Click. RRRRRRRRR RRRRR RRRRRR VROOOOM!
Damn it! The car started. If I can't reproduce the problem, how can I fix it? What was I missing? The car started after it cooled down....
The car stopped running shortly after driving in quite a bit of stop and go freeway traffic followed by normal highway speed and then slowing to in town speeds. Could it be too much heat affecting my electrical connections? Why isn't it cooling properly?
In the end, I replaced a worn fanbelt to help keep the engine cool. The ignition switch was also replaced since it could have been faulty, and my key sometimes fell out when the car was running. I also cleaned and tightened many of the electrical connections. Hopefully, this will fix the non-reproducible bug.
Perhaps I'm not properly testing the fix under similar condition? I guess I'll find out on the commute home...
Now stop reading, and try to fix something that may or may not be broken
Are there two faults or are the inter related?
I would check the points for signs of arcing and if so replace the condenser.
Also check for good connections on the coil LT side and all earth connections including the battery to starter.
As you say the ign-switch is a suspect, On an old car ware maybe an issue also corrosion and dirt on the contacts.
I'd stick a tester, a spare contact breaker set in the car (with condenser) and give the ign-switch a good clean with WD40 and check for "slop" in it.
The Feature
Picture if you will.......
friend: you should fix your music page cuz it's crap
me: what?
friend: I went there and didn't know what to do
me: did you click the arrow pointing to the right that typically signifies "play"?
friend: what arrow?
me: whoa! what browser are you using?
friend: firefox
me:(pretending to be Morpheus) Show Me!
On my music page, I had a bunch of <audio> tags so that visitors to my site could hear me butcher various tunes that I have recorded. Unfortunately, the Firefox theme that my friend was using made Firefox's default audio player completely unusable.
Fine, I didn't like the look of the default player anyway!
What I Should Have Done
In hindsight, I should has just written some hardcoded javascript and CSS to make a nifty HTML5 audio player thing because I have decided that I really don't like working with JavaScript. Using a framework like GWT or Pyjamas that outputs JavaScript is fine, but hacking on JavaScript just isn't my thing. I suppose that it might have been easier if I had used a large JavaScript library like JQuery, but where is the hell is the fun in that? Oh well, maybe next time.
What I Did Do
Since my music page is created dynamically from information pulled from a database, I wanted a way to dynamically generate an HTML5 audio player based upon formatted text on a page; and well... that's what I did, and I named the project PagePlayer (boring, I know). By building it myself, I know exactly how the controls will look in various browsers, regardless of which theme the browser is using.
It may not be the best looking JavaScript generated music player thingy on the web, but it is my JavaScript generated music player thingy.
So fire up your HTML5 compatible browser and head over to my "music" page to check it out. Anyone interested in the code should visit the PagePlayer project page, where the HTML,JavaScript,CSS, images, and audio can be downloaded.
Now stop reading, and check your code for graceful degredation and IE6 compatibility.
Every day, a small victory is achieved by someone, somewhere, trying to do who knows what. To this person, I raise my glass in celebration and smile with them.
It is easy enough to bemoan the hardships, trials, and travails of everyday life, but what about the flip side of that coin? For every complaint there should be a supportive comment, a slap on the back, a kind word. In short, the stories of the little victories should not only be remembered, but they should also be shared.
Not everyone shares their stories, but everyone has a story. Actually everyone has quite a lot of stories. These are mine:
Brewing
On the evening of December 30th, while listening to a few months worth of Rathole Radio I started brewing a five gallon batch, of what I am now calling Rathole Red, with:
- 8 lb William's American Red malt
- 2 oz US Magnum Hops
- 6 oz ginger
- Nottingham Ale yeast
No, I am not affiliated with Willam's brewing in any way, shape or form. I am simply a very happy customer(but that is not why I am celebrating). Not a drop of wort was spilled, nothing on the stove burned. It was a very uneventful brewing, and for this, I celebrate.
Petaluma
Today was an overcast almost raining day; a good day to stay inside and sip coffee. However, I need to break in a new reed and playing bagpipes indoors is not very fun, so I packed up the pipes, hopped on my bicycle, and peddled to my favorite practice spot on the Petaluma River. When I got to the spot, one of my friends was out on the water fishing from a boat. So far, he had only caught a crab. Catching a crab while fishing? Celebrate!
For part of the ride home, I was behind a truck pulling a trailer with about 6 cows in it. Let me tell you about cows. Cows poo a lot. Cows also pee a lot. When a bunch of cows are in a trailer, the mixture of their poo and pee makes quite a bit of muck that flows out of the trailer and onto the roadway (and any bicycle rider that happens to be behind the trailer). Fortunately I managed to dodge all of the muck. This was in downtown Petaluma. I love this town! Celebrate!
They may be small victories, but they are all mine.
Now stop reading, and go celebrate.
There was one time that I drove my car to the car wash and maybe a car-pool or two with some friends, but for solo trips, it is walk or ride the bike, and all of the trips have been to a destination within 5 miles of my home ( that's 8 kilometers for my metric friends).
Many were the days towing groceries across town in the trailer, or pedaling to my favorite location of solitude along the river for some music practice.
At some point in the Spring of 2009, someone thought it would be a good idea to steal the speedometer off of my bicycle. Damn. Having grown accustomed to knowing how far I travelled when riding, I promptly purchased a new speedometer.
Today the new speedometer passed the thousand mile mark and I couldn't help but reminisce upon the various sights, sounds and people that made so many of my Summer bicycle trips so memorable. Thank you.
Now stop reading, and go ride to the store.
I found it very interesting that you chose a single speed bike. I had a look at Petaluma but couldn't really tell if you have much in the way of hills. About 3 months ago I started riding my bike to work, with a view to giving up my car. 7.5 - 8 miles each way depending on the route. But I'd be brave to use a single speed bike though. I travel from a hight of approx 130m to a low of 50m then up to 85m. Without doubt it is the gradient not much more than the actual hight that's a killer. (for an oldie like me anyway) Are you super fit or is Petaluma flat.
You may be interested in http://www.gmap-pedometer.com/ for determining distance and height of your routes.
I have two routes one to work where it's mostly down hill (just under 7.5 miles).
One back slightly longer (just over 7.5 miles) but longer. On this route as it does not drop to the lowest point. I hate having to go to the bottom of a hill, just to have to climb it.
Thanks
When I listen to audcasts, I first SSH into my media playing machine connected to the home stereo system and launch gPodder (that should be gAuder and you auder use it). After launching gPodder, I can then check for and download new episodes, or I can have gPodder launch an application to play already downloaded episodes.
GPodder doesn't play episodes, but it can be configured to play audio or video with a user specified application. It was the actual need of a command line audio player to use with gPodder that led to the creation of sap.
What I recently found out is that when one tries to play an audcast or vidcast (video broadcast) that is not present on the computer, gPodder will launch the player application using the on-line location of the *casts file, so instead of download and then playing the file, the file can be played over streaming HTTP. This will only work if the player is capable of playing a file over HTTP.
That's a nice little feature/bug!
Since the media playing machine has s-video out to a television, I can use gPodder in conjunction with mplayer to stream NOVA vidcasts.
Sweet!
Now quit reading, and go sit on your duff while watching NOVA.
Sometimes I dream code. To be a bit more specific, sometime I dream about a solution to a coding problem that I'm having. Upon waking, I will test the dreamed of code to see if it actually solves the problem. This scenario has played out a few times with much success.
the latest incarnation
Recently however, I had a dream that dealt with code that wasn't mine and I have never seen. The code was written by a fellow student in my programming class, and the dream contained a possible way to increase the speed at which the student's program would complete its task. Under normal circumstances, I would just contact the student and explain the possible fix.
like a song stuck in my head
Unfortunately, I have now forgotten the fix, it isn't possible for me to contact the student, and I have no idea what the actual code looks like. This has left me with a bit of "code on my mind" that I think about often enough that I have decided to write some similar code to help clear my mind.
in the beginning
Let me first define the problem: It takes a long time to draw a circle on the screen. Huh? How about a little more info.
The programming language is Apple BASIC, the machine is an APPLE IIe, and the year is 1989. Yea, I had a dream about 20 year old code.
In the programming class, we were creating animations and graphics, and the student needed to draw a circle.
What I think the student's program did was loop through each of the 360 degrees in a circle and determine the degrees circumference point relative to a set radius, and then "turn on" the pixel at that point. This took about a minute per circle on the Apple's 1Mhz processor.
back to the present
So I thought I would create some similar and highly pointless code in javascript. Why not?
Instead of pixels, my code creates HTML div elements, that are 2 pixel squares, and aligns the elements by setting the div's style.top and style.left properties.
The code can be run at jezra.net/code_examples/draw_circle.htm.
Now stop reading, and go do something pointless.
All Sales Are Final
While checking out the goods at a local thrift store, I found a VHS copy of Ghostbusters for a dollar. How could I resist? A few minutes later, I was at home being very non-plussed, due to the ribbon in the VHS being torn.
Thank you 80s
When my favorite audio cassettes broke, it was a simple matter of taking the cassette apart, fixing what was wrong, and putting the cassette back together. Is a VHS tape any different?
Not really.
I'll just take the VHS tape apart and fix it!
No, no I won't. Damn you RCA!
The RCA manufactured VHS cassette is held together with a bunch of screws and one rivet.
The smart thing to do is use a drill to remove the rivet.
I opted for prying the cassette apart and breaking it beyond repair.
Fortunately, about a year and a half ago my brother gave me an unopened package of 9 VHS cassettes, that I was never really planning to use.
Good thing I kept those things around. Thanks again Jason!
Here is a blank cassette openned up and ready to be a surrogate for the soon to be fixed ribbon.
The red tab that holds the ribbon to the cassette wheel needs to be removed so that I can attach the end of the ribbon from the other cassette wheel.
There is a small hole on the cassette wheel that will allow me to push the tab out.
Alright! The ribbon has been attached to the cassette wheel.
I just need to trim off the excess ribbon and align the wheels and ribbon in the VHS housing.
After re-assembling the cassette, a bit of packaging tape was used to affix the original movie labels to the surrogate.
check out those sweet left-handed scissors.
YES! It works!
Many Shuvs and Zuuls knew what it was to be roasted in the depths of the Slor that day, I can tell you!
Now stop reading, and prepare for the coming of Gozer the Gozarian!
It started as a simple enough question: "what is the best way to clean the contacts on Nintendo Entertainment System cartridges?"
Since the contacts are copper, I figured that the tarnish on the contacts would be copper oxide. A quick interwebs search delivered the result of vinegar with a bit of salt. The vinegar contains acetic acid and the salt, when it is dissolved, will add some free ions and make the acid electrically conductive. All is good and dandy.
Wait... vinegar and salt? Other than chilis, those are the main ingredients of hot sauce! Damn, I love hot sauce.
Now I needed to know, which hot sauce is best for cleaning copper.
Let the experiment begin. The first thing needed is a bunch of copper. I opted for using pennies.
Here are the pennies from just the top of my change jar.
The pennies sorted by decade. The single penny on the left is the 50s. The large pile on the right is the aughts.
The pennies for this experiment are in the middle and they all have about the same amount of tarnish and they are from the same decade. On the left is a 1959 penny and on the right is a 2009 penny.
Ah the cleaning agents.
12 ounce Crystal
2 ounce Tabasco
32 ounce Tapatío
Normally I wouldn't buy Tabasco because I don't really consider it a "hot" sauce. However, since Tabasco is such a popular sauce, I decided to add it to the test.
Lately, when opening a new bottle of hot sauce, I have been writing the date on the bottle so that I can determine just how much hot sauce I consume. I've been averaging about 1.3 ounces a day.
Three Yuengling bottle caps were used to hold the sauces and then the test pennies were placed in the bottle caps for about 1 minute.
After rinsing the sauces from the pennies, it was time to determine the winner.
The three pennies in the middle are the test pennies.
Originally, I thought the Tabasco sauce would be the winner because it mostly tastes like vinegar and salt. ( At least it does to my palette )
And in fact, I would say that Tabasco outshined the other sauces in this test. Ha! I love a good pun. Anyway, my assessment of why Tabasco worked so well has changed. After noticing that the Tabasco soaked penny was cleaned up in even the more minute nooks and crannies, I feel that the viscosity of the sauce allows it to penetrate into the hard to reach places.
Hot sauce, it isn't just for tacos.
now quit reading, and go perform an experiment.
You ought to try the poor man's hotsauce- ketsup. Believe me it works wonders and you can really 'clean up' on bar bets.
"clean up"
Although I certainly enjoy taking pictures with a film camera, digital image manipulation also has quite a bit of draw for me.
Recently, I started playing with the mathmap plugin for GIMP. Armed with a 3.2 megapixel camera, I took a few snaps of my model holding a picture frame, and then I got down to business.
This is pretty much the standard first droste style image one makes with mathmap.
There is far to much symetry and crowding of the frame element for my tastes, but hey, not bad for the first try.
Now that is a bit more like it.
With the objects in the image not being centered to infinity, I tend to like this one a bit more than the previous image.
Too bad the alignment of the nested images doesn't match the frame very well.
Ah the wrapping droste effect image. Does this style have an actual name or can I just call it the wrapping droste effect?
Not as cluttered as the original nested image, so it is a bit easier on the eye.
Because I wanted to make everyone ill, here is an animated gif of the offset droste image.
Are you a little queasy yet?
What does all of this mean? It means that the "know-how" is now mine and I need to make a fancy shmancy image with a bit more forethought regarding the contents of the image.
now stop reading, and go make a picture
Tools and food make great presents, and really good tuna makes an even better present. When I talk about good tuna, I'm specifically referring to Pacific Fleet tuna.
Disclaimer:I'm friends with the owner, so take my shilling with a grain of salt, or you could take it sautéed in a skillet with some capers. Damn that is some good tuna.
Anyway, I was recently in need of a birthday gift and I thought that three cans should do the trick.
There are few ways to wrap cans of tuna so that the recipient of the tuna doesn't say "it's tuna". Fortunately, I have duct-tape,cardboard, scissors, and a somewhat active imagination. It should also be noted that I recently played a lot of Zelda.
A tri-force design will hide the fact that this is three cans of tuna.
It's that bridge again!
During the trip to San Francisco, where the gift would be delivered, I wrapped the gift in duct-tape. One can't use too much duct-tape, the excess just adds a bit of flair.
The triforce tuna fish present in all of it's chrome glory. Who wouldn't want that as a gift?
This is my brother Jason and his mustache 5 seconds after he received the triforce, and 1 second after he said "It's tuna!". Damn how did he know?
After five minutes of unwrapping the duct-tape and not really getting anywhere with it, Jason decided to open the triforce at a later time, hopefully with a knife.
Did I mention his stache?
Happy birthday Jason.
If so, I would deem your family the Tri-Force of the face, which begs the question...
Which one of you has the evil facial hair?
evil facial hair = clean shaven.
On the 22nd of September, I volunteered for the Petaluma Pedestrian and Bicycle Advisory Committee to help with their counts of pedestrians and bicycle riders at various location around town. My location for the count was Washington street at the Northbound freeway offramp from 4PM to 6PM.
In between tallying cyclist and pedestrian counts, I watched people in cars and I made a few observations.
- Driving is not fun; no one was smiling except for the people that knew me and waved to me
- No one cares about the hands free cell phone law. In the two hours that I was at the intersection, I must have seen at least 20 people flapping their gums with a phone at their ear.
- Surprisingly, a lot of people listen to iPods while driving; damn those lawbreakers with their white earbuds.
- little kids stare at sideburns. Sideburns put the awe in awesome.
- 90% of the cars that passed me had a single occupant.
- Next time, I need to take a camera with me. Hidden within the monotony of cars is a uniqueness that needs to be captured.
The sheer number of vehicles that passed me, in contrast to the slim number of pedestrians and cyclists, left me agog. At the quite slow pace of 9 miles/hour, one could travel 4 miles in 26 minutes and 40 seconds. This means that by bicycle, any point in Petaluma can be reached within a half-hour from any other point in Petaluma.
Life is too short to not waste time riding somewhere.
Now stop reading and go pedal somewhere.
If nobody else tells you today, somebody should. Without any irony or sarcasm, sincerely brother, you are a unique and brilliant individual.
Alistair (B1ackcr0w off Outlaws)
Sometimes though, perspectives change.
On a recent outing with some friends from the East Bay, I traveled to a place I might never visit again. N37°49'8 W122°28'48. Rising and falling on the ocean swells that are outside of the protective waters of the bay, I felt small, very small, and I took a picture of the bridge as it loomed above me in its massive glory.

Forevermore, the Golden Gate will have a new meaning to me.
Later that day, I was given the responsibility of sailing the vessel under the Bay Bridge by Treasure Island.

Upon returning home, the GPS data recorded for the trip was processed with Viking, a free and Open Source GPS data plotter, so I could give the captain some statistics about the trip.

It was a memorable day with good weather, a good vessel, and great company. May your skies be clear, and your sails full of wind.
Now stop reading and go on an adventure.
The previous video I created to show off a switch interface was edited using kino, which is a nice video editor with great support for capturing digital video off of a camera attached via a firewire cable. This time around, I used kdenlive to edit my video because kdenlive has a few different features that will help speed up my editing time. ( I still used kino to grab the video off of my camera)
With the video edited, It was time to upload to a host. Typically, I would use youtube for this sort of thing ( just because I use a tripod, it doesn't mean I can't use youtube) , but since I wanted to see if I could integrate the HTML5 Video tag into a web page, the video was uploaded to youtube and tinyvid.tv: a host for theora video. By getting creative with the "video" tag, I should be able to show the Theora video to those using browsers that support the Video tag, and everyone else will see the flash video.
If your feed reader isn't displaying the video, it can be viewed directly on tinyvid as well as on youtube.
In hind sight, I probably should have shown the phone doing more visual stuff on the computer screen. When the system is set up to play and control audio, it makes for a very boring video experience.
now go make something.
Currently, to play and control audio on a webpage, one needs to use a browser plugin to control the audio. For the most part, this means the flash player. Oh flash, how I loath thee; thou art buggy and sucketh mine resources. Visiting a web page with multiple instances of embedded flash can bring my browser to crashing halt. Fortunately, the future looks illuminated. Although I was tempted to say the future looks bright, Apple has clouded the sun and dimmed things a bit. Oh well, I'm still happy because in the specification for the new HTML 5 standard is a tag for including an audio file directly in a web page.
Instead of having a few unreadable lines of code to embed a flash player in a page and thus requiring the end user to have the flash plugin installed, one will only need a simple line of code such as
Oh happy day!<audio src="path/to/audio/file"controls="true"></audio>
Fortunately, the fun doesn't stop there. Since the audio or video is now a part of the web page, the media can be accessed and manipulated through javascript. This will allow developers to create fancy web based audio and video players that use nothing more that JavaScript, HTML and CSS. To illuminate what I mean, I've created a very simple HTML 5 audio player example. Since the HTML 5 standard has yet to be finalized and few browsers comply with the coming specification, the example will probably only work properly with Firefox 3.5.
Thank You HTML 5; I look forward to an internet with much less Flash and much more functionality.
I can't wait until HTML 5 gains enough of a foothold to start being involved in the majority of the web. It gives us so many more options, so much leeway, with what we're able to do in the browser with Free technologies and standardized code.
I'm betting that the browsers that support all of HTML 5, like Firefox and (possibly) Opera for example, will see their market share rise as well. When cool web apps hit the stage that take advantage of the advances in HTML 5, it might be the final push people need to upgrade.
The ride consisted of about 20 people aged 5 to 55, starting from the bike shop, meandering for 4.21 miles through the west side of Petaluma and finally ending at a local sports bar/restaurant(not my favorite thing, so I just went home afterwords.) All in all, it was a nice ride and great way to meet new people with similar interests to my own; there was quite a bit of homebrewing talk during the ride.
My only regret was not taking my GPS tracker with me to help map Petaluma for the Open Streetmap project. Having ridden through various parts of Petaluma with an active GPS tracker, I know just how much the Petaluma map data needs to be updated. Luckily, there are 11 more rides yet to come and I hope to take part in as many as possible; and it is quite a bit more fun than the cow-chip tossing competition that I entered during the Butter and Eggs day parade.
The machine that I actually run gpodder on is a headless unit that is connected to my home entertainment system and I need to access the machine through SSH with X11 forwarding. This causes a problem for some graphical audio playing software and results is very glitchy playback. The solution to the problem is to use a command line audio player like mplayer. (Un)fortunately mplayer is borked on the media machine so I had to write my own audio player.
[cue the trumpets]
May I present to you, SAP a Simple Audio Player written in Vala utilizing gstreamer and ncurses. What does it look like?

beautiful!
One of the issues with using ncurses in a gobject environment is the necessity of two mainloops; one for gobjects and one for the ncurses interface. The solution for me was to create a gobject class for the ncurses interface and run the ncurses mainloop as a thread. This allowed for user input collected by ncurses to be passed to other gobjects by signals.
Having imported blog postings as well as blog comments from the exported blogspot XML file, it was time to create a mechanism for allowing new comments to be submitted by readers. Within hours of uploading the new code, the first piece of blog spam was posted.
Honestly, I was somewhat happy. It had to happen eventually and I was hoping to get some blog spam text with which to test some spam detecting code. The basics go something like this:
- text has HTML, that's a flag
- text has bbcode, that's a flag
- more than 40% of the text is html and bbcode, that's a flag
- the percentage of unique words in the text is < 40%, that's a flag
If the text has two or more flags, the form will ask the commenter if they are a spammer. Yea, that usually takes care of the bots.
mmmmm spam
CREATE TABLE `blogs` ( `blogs_id` int(11) NOT NULL auto_increment, `title` char(99) collate latin1_general_ci NOT NULL, `body` text collate latin1_general_ci NOT NULL, `date` datetime NOT NULL, `id` char(100) collate latin1_general_ci NOT NULL, `hidden` tinyint(4) NOT NULL default '1', PRIMARY KEY (`blogs_id`), KEY `id` (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
A bit of PHP code using the SimpleXML functions mostly handled parsing the XML data. I say mostly because the exported contains XML elements with colons and dashes in their name, for example <thr:in-reply-to>, which SimpleXML doesn't seem to handle. Oh well, a bit of Regex on the initial XML string took care of the colons and dashes.
Back to the schema; do you see the "id" field? Let me explain. The "id" is a unique string based upon the title of a blog post. Take a blog title, strip the non-alphanumeric characters and replace spaces with _, and you have an id. Why? I don't like the way most blogs create urls for posts and I want to create links based upon a unique representation of a blog entry's title,
It is my opinion that the more directories an item is in, the more focused and unique the content of the item and the rarer it should be in search results. Similarly, I find that a webpage should be related to its parent directories in a way not based on date. For example, an item that would normally be accessed at www.example.com/blogs/2009/03/05/some_article has a directory depth of 4. Using the code I wrote, the article would be displayed as www.example.com/blogs/some_article and would have a directory depth of 1. Something with a depth of 1 is more important although theoretically more vague than something with a depth of 4. Again, this is just my personal opinion.
Currently, the only projects being hosted are hubcap and vplayer; a metronome and a commandline audio player, respectively, both of which are written in Vala and use the same audio playing class that most if not all of my future audio playing Vala projects will use. Reduce, Reuse, Recycle.
To keep things boring, I have chosen the rather blandly named jezra.net as the domain for this adventure of mine. The site is running the feature free framework that I mentioned in a previous post as well as some custom javascript and CSS to make the rounded rectangles on most of the pages; all of which I hope to post when I get a chance to clean up the code a bit.
WBEZ is Public Radio and to make sure that This American Life will continue to entertain and educate, today I made a holiday gift to myself and all of the listeners of This American Life by donating money to WBEZ.
Thank you Ira, and thank you WBEZ
A few weeks ago, I decided that it would be a good idea to set up some sort of version control system for my coding projects. My requirements were fairly simple since there was only going to be one person submitting code for the various projects, although there may be more than one computer submitting code changes.
What I needed:
1. A simple server setup accessible from both my laptop and my desktop.
2. A simple server setup accessible from both my laptop and my desktop.
Yes, I know, one and two are the same, but I thought that the requirement was important enough to warrant mentioning twice.
I looked at Git, Subversion, and Bazaar as possible candidates for my version control system. For some reason, it was bazaar that caught my attention and this was probably due to the quick reference guides and tutorials on the bazaar homepage.
Unfortunately, their was not a tutorial on setting up a remote server other than an sftp server, so I sort of pieced together the bits I needed to set up bazaar host using ssh. Perhaps the full bazaar documentation has an explaination. To set up my bazaar server to handle ssh connections, I did the following.
1. make an ssh account on the remote machine
2. install bazaar on the remote machine
3. determine where on the machine to store my code and make sure that my ssh account has read/write permissions to the folder
Now I can write code on my laptop and use bzr to push the code to the SSH server. Later, If I want to test the code on my desktop, I can use bzr to get a copy of the code from the SSH server.
So I lost a bunch of code, but I had a very recent backup of the code on my little SSH server machine. Not bad, not bad at all.
In hindsight, and after reading a bit more of the documentation on the bazaar website, I probably should have set up my system to use a centralized repository to handle my code changes. Similarly, there was an easier way for me to get a more recent backup of my deleted file.... but that is for another time.
So now, for your viewing pleasure, and in the spirit of zealots posting articles about "unboxing" their latest goo-gaw whiz-bang hardware, I am very happy to announce:
What I pined for, was an object oriented language that I could compile to run natively on Linux and if need be, could also be compiled to run on Windows and Mac. So what are my options? To the best of my knowledge I have a choice of:
Java
ObjC
C#
Vala
Fourth Place - ObjC : If I were a Mac only programmer or a Mac programmer that recently moved to Linux, or a diehard NEXTStep fan, I might use ObjC. The main drawback is that ObjC needs a framework to be installed on the machine that the code is going to be compiled and run on. In this case, the Cocoa framework on the Macintosh or the GNUStep framework for Linux, BSD, and Windows. If Apple took a more active role in helping to develop the GNUStep framework I might be interested. To be honest, I don't think very many people are going to be installing the GNUStep framework on Windows.
Third place is almost a tie....almost...
Third Place - C# : In order to run a C# app, again, one needs a framework to be installed on the machine that the code is going to be compiled and run on. In the case of C#, this will be Microsofts .NET on Windows and to a lesser extent Mono on Linux, Mac, and yes, even Windows. Mono is an Open Source implementation of the .NET framework can compile and run C# apps written for .NET. The big problem here is that Microsoft has patents on various parts of .NET that, when the time is right, may be used to leverage lawsuits against users of Mono.
Second Place - Java : Blah Blah Blah, much like ObjC and .Net...to run java applications, one needs the Java runtime environment installed on the computer. Now while Java applications can't run without the java runtime to be installed, I would like to point out the the Java runtime for all platforms is maintained by one entity, Sun Microsystems, and this coupled with Sun's Open Sourcing of the Java Runtime code, will hopefully ensure that Java apps will run well on all platforms. Perhaps I will explore Java a bit more in the future.
First Place - Vala : The youngest of the programming languages in the list, Vala has not yet reach the version 1.0 milestone. Hmmmm, maybe I should look at Java again. Vala is more or less a wrapper around the C programming language and the Vala compiler converts Vala code to C code which is then compiled to a native application. If I want to compile my application on Windows or Macintosh, I would direct the Vala compiler to convert my Vala code to C code and then I would compile the C code on the target system or use a toolchain to cross compile for the target system, thus creating a native application that doesn't need a framework to be installed. The disadvantage of course, is that I would need to compile for each target system.
Until Next Time...
I'll GCC you you later.
That was really bad.

