Today I am moving/archiving 10 years of email from Outlook to Gmail. Yes, I should probably just delete it but I still look stuff up on occasion and I am curious to see how this impact’s Gmail’s searching speed. See also: How to Import from Windows Mail, Live Mail or Outlook Express in Gmail and IMAP client configurations.
Category: Technology
All things geeky.
Technologies to come
Someone titled this "Microsoft’s Vision for 2019" I don’t know if that is true or not. What I do know is that much of what is presented in this video is already in the works. I’ve seen some of it demo’d. I know we have the technology to be deploying some of it today but necessary infrastructure improvements and profit margins stand in the way. For instance, if Nokia has a plan to release version A B C D and E of a phone there is a good chance that while were are using version A that B C D and E are in the works if not already developed. If B and E were developed at the same time Nokia could sell E but would miss out on all the profits by release B then waiting awhile to release C and awhile longer to release D and so forth. It doesn’t make fiscal sense to jump ahead. If money were not the issue and the technology improvements were solely about the advancement of society, you can bet we’d jump from A to E.
2019 is too far away. We need these technologies today! Freeze me and wake me in 100 years.
Update: Take a look at how AT&T envisioned the future back in 1993. Pretty amazingly on the nose!
The New York Times is following me on Twitter!
So I’m 1 of 992 people that The New York Times is following on Twitter! Does that make me a new source? A lead generator? Am I newsworthy?! Oh wait a minute. 992 is just under 1000 followers. Did The Grey Lady just spam me?!
Get 14,000 Followers On Twitter In One Day
How do you get 14,000 followers on Twitter in one day? Be the Dalai Lama! You can follow His Holiness at @OHHDL and of course visit the Dalai Lama website. And, on a lesser note, you can follow me on Twitter @djuggler.
Update: The title should have actually been How to go from 0 to 14,000 to 0 followers on Twitter in one day considering @OHHDL was an impostor. See Willfull’s comment..
Week Long Programming Debacle
I’ve solved it! A week ago started a series of unfortunate events that program progress on my application to a screeching halt. My efforts and work did not quit but every fix seemed to reveal another bizarre issue. But surely a professional programmer could figure all this out in a day rather than a week? No. Problem solving isn’t always that simple. This was akin to hiring a contractor to add a room to the back of the house but in starting to dig his foundations he discovers an old septic tank buried behind the house and in trying to remove it he discovers a cave under that. My problem began with a test when I cleared all my cookies.
On problem set off another. The development server, long overdue for an upgrade, lost its mind but this wasn’t immediately evident to me so I did a line by line inspection of the code searching for the answer to some really whacked out behavior. Eventually I realized the server was shot and moved to another server. After fixing several issues either hidden and discovered in the line by line inspection or caused by experimentation in attempts to fixed the oddities caused by the flaked out server, I eventually discovered the source of the original issue. In short, jQuery’s .filter gets overridden by jQuery’s .listen plugin so it appears.
jQuery has a built-in traversing function called filter() but handlers for events get bound only on the initial rendering of the DOM. If the DOM is modified dynamically, for instance if content is added with AJAX, then the newly added event handlers will not be recognized by filter(). Fortunately, Ariel Flesler stepped up and created a plugin called listen() (use the 1.0.3 version!) which registers the handlers for the matching events and this works for new content added via AJAX or other DOM manipulation. It seems, unless I am misinterpreting something, that listen() overrides filter() so if you have both filter() and listen() on the same page, your filter() events will never fire.
Coding Horror Appears To Be Hardware
The other day some bizarreness slipped into my code. It made no sense. The problem could not be reproduced on the production machine but all the recent changes had not been migrated to it. I examined and tested and pulled hair out and pounded head against wall after wall. Finally, I went to the old staging server and cleaned it up, removed all the code, wiped the database, then made an exact copy of the development code and data on the staging server. Surprisingly enough, I could not reproduce the problem. On examining the development server, I noticed that the hard drive was almost out of space. Could this be a swap space problem? Doesn’t matter. This development server has done its time and needs to be retired. I need a new machine! On the positive side, I can quit chasing ghosts and start moving forward on my application again.
Yesterday’s Coding Horror
Yesterday my web application quit working. I simply cleared the domain cookies and the session cookies. It should have been no big deal but an important piece of JavaScript quit working. I have a script that adds some HTML to the DOM and looks similar to:
snafu("<tr><td class=\"fooclass\"><a class=\"expander special\" href=\"index.php\">go somewhere</a></td></tr>");
So this worked fine until I cleared cookies and now the generated source in the browser (confirmed in Firefox and Chrome) looks like:
snafu("<tr><td class=\"fooclass\"><a class="\""expander special\" href=\"index.php\">go somewhere</a></td></tr>");
Note that the anchor has inexplicably changed from <a class=\"expander special\" href= to <a class="\""expander special\" href=. The obvious thought is that a session variable is being expected in building the javascript code which in turn changes the DOM but that session variable is now returning NULL. That is still likely to be the problem but yesterday’s line by line inspection of the code showed no flaws. Today I am going to eliminate the server as an issue. The most recent code changes have not been migrated to the production server and it does not reproduce the problem so I’m setting up a staging server today to see if it shows the same problem as the development server. What a pain!
What are these things?
Most of what I do no one will ever see
The question I hate hearing the most is "What’s a website where I can see your work?" Fortunately, I have not had to answer that question in a good long time. As a freelancing web application developer, I end up working on websites briefly and then move to the next project. When I move on, someone else comes in an continues to evolve the website so using that website as an example becomes a risk of misrepresenting my skills. Perhaps I made a site that had valid HTML and CSS and was Section 508 compliant. With 30 seconds and one incorrect tag, another developer could break all that work. Besides, once someone else modifies the site, it no longer represents my work anyway. That would be like the previous home owner coming back to my house with guests to demonstrate her tasteful choice of colors on the walls.
To complicate the ability to demonstrate my skills, most of the work I have done has been on proprietary systems with most of the functionality available to the company. For instance, I spent a year and a half working on a billing system. In no way could I show someone code samples from that project. I cannot even walk them through the client side of the project since I no longer have access to it and even if I did that would be revealing client confidential information. The front end of that website was a single marketing page and a login screen.
And never judge a developer by their own website. I would love my personal websites to represent me professionally, but frankly, I am too busy doing work for others.
I digress. This post was not intended to be a discussion of skills demonstration. Instead I came to exclaim with glee that I spent the morning ironing out some nasty problems in my current application project! Unfortunately, all the changes, no matter how significant, will only be seen by me. The output, the stuff on the screen, does not appear changed. So even my client cannot see what I have done. And this is why I like to work on my house myself…because sometimes, I like to point at something tangible and say, "I did that!"
And I made a cloud
Cold. -4°C outside. Brrr. So I took Amy and Noah out on the porch and threw a pot of boiling water into the air. Both children enjoyed seeing the water turn to vapor and float across the yard like a scene from a Scooby Doo swamp. I let them have their moment and did not bother with the science lesson.
Temperature conversion by OnlineConversion.com.
Programming Error of the Day – Global Search and Replace
I had a very unique string to replace throughout my application. Simple enough, instead of being text, it should be an image. I had the image code already written for a different image so I copied it, then went to search and replace the string but forgot to change the name of the image. I originally had 13 replacements across several files. Now I have to manually inspect 32 lines of code to make 13 corrections.
Remember, automated tools are a great way to make mistakes faster. And no, this has nothing to do with Sh*t Creek. That boat is totally about a Thursday deadline and a much needed miracle.
In Search of My Oldest Tweet
I know I signed up for Twitter shortly after it emerged at SXSW in March of 2007. I did not start using it until months later. So far the oldest Tweet I can find is from November 8, 2007 courtesy of TweetScan:
My day would go better if I couldn’t count the seconds between clicking and having my co mputer respond. 6:24 AM Nov 8th, 2007 from web
Twitter only let’s me go back in my profile to 5:28 PM Apr 10th, 2008. A day ago I was able to browse back to 11:57 AM Apr 10th, 2008. I suspect that Twitter limits you to going back 160 pages in your profile (ie. history) so those who Tweet less, can see further back in time. I suspect this is why some people on Twitterholic who Twitter more infrequently appear to have been on the system longer than those who Twitter frequently.
Ah! Barry of Inn of the Last Home references in a lasthome tweet @djuggler from 11:45 AM Jul 23rd, 2007.
Tommy following lead from other manager and making a second attempt. He bumped into an old friend. 11:45 AM Jul 23rd, 2007 from txt
I wonder if there’s a future in Twitter Archeology or Twitter Detective work. I personally believe everyone’s first Tweet is something like "Trying this out. Not sure I’ll use it."
Update: Twitter Tip- Favorite your first Tweet to make it easier to find in the future.
Update November 20, 2009: According to How long have you been tweeting, my first Tweet was on March 16, 2007. Feels like it should be longer than that.
How do you handle Twitter overload?
Another attempt at jQuery modals
Not long ago, I attempted to use jQuery to ease the pain of creating a modal popup for editing user data. One challenge is that the user data is edited from a tabular list of users. Since the page is not refreshed after the update, the changes must be dynamically reflected in the table. That’s an interesting challenge but not a huge problem. The problem I ran into was the jQuery modal plugins I tried using to make my cross-browser programming faster and easier was that none of them seemed to accommodate my lengthy forms.
jQuery has dozens of modal plugins and options including Dialog built into the UI. Which is your favorite? Have you had success with a modal allowing scrolling and still supporting IE6?
Update: jqModal, Facebox, SimpleModal, and Thickbox, direct link to SimpleModal, and Dialog. Think I’m going with Dialog.
Always more to learn
No matter how long you do something, there is always more to learn. You’d think that since I’ve been doing HTML coding since around 1993, I’d pretty much know every in and out and every little tag and peculiarity regarding HTML. Not so. See, we form habits. We get into patterns. Specs change but we retain earlier hacks and assumptions. Today I learned an absurdly simple thing. Maybe I knew this and forgot. I rarely use tab orders on my forms. Most of the forms I create are very top down so the natural tab order is sufficient. In computing, counting starts at zero. But in HTML tab order, zero means exclude that form element from the tab order.
To exclude an element from the tab order, set the value of tabindex to 0. [Source, Webcheatsheet.com, How to Control Tab Order in HTML]
Because of my computer science studies, programming in PHP, JavaScript, C and so on, my inclination is to always begin with zero. Of course, my favorite web application language is ColdFusion and it always starts at one. I can only assume the Allaire brothers were originally targeting non-programmers.
HTML is about to become HTML 5. Funny enough I just traded my HTML 3.2 book at McCay’s a few weeks ago. Maybe I should have kept it and re-read it.
Update Jan 12, 2009: Ian Tempest noted in the comments that zero does not exclude an element but rather moves it to the end of the tab order. From the W3C HTML 4.01 specification:
Those elements that do not support the tabindex attribute or support it and assign it a value of “0? are navigated next. These elements are navigated in the order they appear in the character stream. [Source, W3C, 17.11.1 Tabbing navigation]