JavaOne 2008 Report, Part 4: FridayI woke up Friday and decided to skip the final keynote address and remaining sessions. I had a raging headache and was anxious to get home. I did a little shopping for Mother's Day. Then I took the subway to the airport to see if I could catch an earlier flight. Unfortunately, I did not have luck and settled in for the four hour wait before my flight.
The JavaOne conference team has been notified by the San Francisco Department of Public Health about an identified outbreak of a virus in the San Francisco area. Testing is still underway to identify the specific virus in question, but they believe it to be the Norovirus, a common cause of the "stomach flu", which can cause temporary flu-like symptoms for up to 48 hours. Part of the San Francisco area impacted includes the Moscone Center, the site of the JavaOne conference which is being held this week. We are working with the appropriate San Francisco Department of Public Health and Moscone representatives to mitigate the impact this will have on the conference and steps are being taken overnight to disinfect the facility. We have not received any indication that the show should end early, so will have the full schedule of events on Friday as planned. We hope to see you then I feel much better today. I am catching up on chores and preparing for my week. I am looking forward to discussing some of the interesting things I saw with coworkers and friends. Posted at 9:52 PM
JavaOne 2008 Report, Part 3: ThursdayWell folks, this is gonna be a short entry. Tomorrow is the last day of JavaOne. I need to pack up all of my stuff and swag in order to be check out tomorrow. Posted at 1:58 AM
JavaOne 2008 Report, Part 2: WednesdayOk, I just got back from the Sun Developer Network Party. I am going to make this short. My plan is to revisit these blog entries once Sun releases the videos and slides from the JavaOne sessions in the near future. Here's my brief recap of today's fun. Posted at 1:44 AM
JavaOne 2008 Report, Part 1: TuesdayI made the trip out to San Francisco for JavaOne. The first day kicked off with a speech entitled Java + You. I came in late because, well, I had an issue finding the right conference center.. not Moscone West, not Moscone South, but Moscone NORTH, whew! I enjoyed the talk until they trotted out Neil Young, the ancient musician and liberal crackpot. try {
// stuff
}
catch (X1, X2 e) { foo(); }
catch (X3 e) { bar(); }
Safe Re-thow
try {
// stuff
}
catch (final Throwable e) {
logger.log(e);
throw e;
}
Switch on String
switch (value)
{
case "red":
foo();
break;
}
Modules
module org.netbeans.core;
package org.netbeans.core.utils;
Annotations (JSR 308)
Adds annotations on generics
List <@NonNull String> strings;
Adds annotations to casts
endRegex = (@NonNullPattern) endRegex;
I went to a session on Grails that was pretty similiar to the class I attended at No Fluff, Just Stuff a few months ago. Following that I went to a class on GWT where the only thing I picked up was that testing GWT classes in difficult. Then I ended the night with a session on writing plugins for Eclipse, NetBeans IDE and IDEA. The main takeaway from that session was that Eclipse uses plugins in SWT and everybody else uses Swing. It has been a long day. I have classes tomorrow on Groovy, Struts 2, OpenSocial and Comet. So I'm off to bed to do a bit of reading before calling it a night. Posted at 12:56 PM
Groovy Credit Card Number ValidationBack in March I attended a software conference hosted in St. Louis called No Fluff, Just Stuff. The lectures introduced me to some cool new technology. It was small and intimate. I had an opportunity to speak to the instructors and conference organizer. class LuhnValidator {
def isValidCreditCardNumber(number) {
def sum = 0
def alternate = false
number.reverse().each { value ->
if (value =~ /\d/)
{
def n = value.toInteger()
if (alternate) {
n *= 2
if (n > 9) {
n = n % 10 + 1
}
}
sum += n
alternate = !alternate
}
}
sum % 10 == 0
}
}
Posted at 9:16 PM
Improving Cell Phone ReceptionI have Verizon. A coworker described how to improve cell phone reception. The cell phone has a Preferred Roaming List (or PRL). This list tells your card which towers to look for when establishing connection. As new EVDO towers are installed, your PRL will become out of date because it won't know to hunt for these new towers. From http://www.verizonwireless.com/b2c/howTo/prlHowTo.jsp Updating Preferred Roaming List(PRL) Verizon Wireless is constantly advancing its roaming technology to provide you with superior roaming capabilities. By updating your PRL every few weeks, you can be sure you have access to our enhancements. As a result you may experience: * Longer battery life Instructions for updating your PRL: 1. Power on your phone within any Verizon Wireless digital service area. Posted at 7:15 PM
Ode to the iPhoneThis poem is dedicated to those who possess the iPhone and those who wish they did: ODE TO THE IPHONE Twinkling No keys Look there Cellphones Our world Posted at 1:29 PM
It's EliveTo update an earlier blog post I found out that Fraps installs a custom codec. In order to implement responsive video capture they don't have much time to apply compression. The resulting AVI files are massive. Their website recommends tmpgenc (Tsunami Mpeg Encoder), VirtualDub and Windows Movie Maker to compress the video files. I tried out Cinerella and Enlightment using a LiveCD Linux distribution called Elive. Let me be polite. I was not impressed. I had to raise my eyebrows a sneaky tactic the distro owners decided to use to make money off of open source software. If you want the latest stable version, you have to donate money in order to download it over a decent server. If you choose to download it without donating money, then they send you to a slow server (5 kbps download speed!) that sometimes stalls. Dirty! I opted to download an unstable development version that was available on a mirror site in Indiana (200 kbps download). Posted at 10:55 PM
Dots Are Famous!I decided to attempt to make a movie of a simple Java program I wrote and upload it to YouTube. Nutty, huh? I used a program called Fraps to capture video of the program in action. Fraps is relatively inexpensive and is a breeze to install and configure. So, I uploaded the resulting AVI file to YouTube. YouTube gave me a "processing" message and later gave a "that part of the site is down for maintenance". This is what kills me. My customers would blow a fuse if their website showed a maintenance message instead of serving their needs. Imagine visiting Google only to see a terse message about the site being down. Digg, YouTube and Myspace are notorious for making their sites inaccessible due to maintenance. How many billions of dollars are these sites worth? Can't they hire engineers who are smart enough to handle redundancy and fail-over while accomplishing maintenance? *cough* Hey, corporate owners, if you need some assistance, you can always examine my resume. The movie failed to upload due to an issue with an unsupported codec. So I spent some time on the site reading the help pages. I learned that for best results I should resize the video to 320x240. So, I fired up Microsoft Movie Maker. In addition to resizing the video I added a title screen, credits and some music my brother Kevin gave me sometime last year. I saved it as a WMV file and uploaded it to YouTube. This time the file was successfully uploaded. Here is the end result. In this video I am clicking on the screen spawning dots. The dots are affected by gravity and fall to the bottom of the screen. I hope you enjoy the cheese factor. Posted at 9:26 PM
Hotlinkers for ReaganHotlinking is the act of displaying an unauthorized image, video or other file on your own web page when is stored on another server, esp. without asking permission from the owner. It amounts to bandwidth theft from the hosting server. My personal domain, gazpacho.net, was once the victim of a hotlinker. Somebody used an image on my site for his avatar in a forum hosted on a machine in Italy. I would not have minded if he made his own copy. But I didn't like seeing the traffic from his forum posts in my web log. So I decided to teach him a lesson. I modified the .htaccess file on my web server to include the following lines:
RewriteEngine On
# Teach an Italian hotlinker a lesson by replacing our image with another
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} ^http://(www\.).*it/.*$ [NC]
RewriteRule \.(gif|jpe?g|png|bmp)$ blog/archives/images/reaganrocks.jpg [L,NC]
Let me explain what the above entries do. It tells the web server that for any web server with an .it (Italy) domain that tries to link directly to any GIF, JPG, PNG or BMP file give the reaganrocks.jpg file instead. So instead of the Black Label Society image the forum poster wanted, he saw an image of the greatest American president ever.
Posted at 7:44 PM
Open Office OwnsIf you use OpenOffice, I highly recommend upgrading to version 2.2. Autokerning is now enabled by default. It makes a noticeable difference in making documents easier on the eyes. I tried out the Folding@Home client on my Playstation 3. It is interesting to watch the ball-n-stick molecule model twist in real-time. In the background is a rotating Earth with points of lights around cities. The program caused my PS3 to run hot. The fan was so loud I had difficulty getting to sleep. I decided to move the PS3 out of its shelf in the entertainment center and place it on top where it can get better air circulation. I believe the trouble with my Linux box is the Ethernet adapter card. Since NewEgg didn't have the Intel card I wanted I decided to get a Trendnet TEG-PCITXR gigabit Ethernet card. It is supposed to have good Linux support. Does anybody have experience with this card? I am helping to write the Spycraft LARP (Live Action Role-playing) game for DieCon 7. I set up a Wiki for the all of the authors to use. I have spent the better part of the past week creating pages for last year's characters and brainstorming pages for this year's game. I'm a little disappointed that the organizers don't have more of a sense of urgency since the game is close to eight weeks away. Last week I changed my plans in order to get together with the others. I didn't hear anything so I contacted one of them who told me the meeting wasn't going to happen. Frustrating! Ah well, I gotta tell myself I am only volunteering my help. If I was in charge of getting the game together, I would do things differently. Posted at 8:14 PM
ATI Says No Devices FoundMy buddy Tom E. has been experimenting with writing a X-windows framework in C++. He wanted me to look over his source code and get it running. This motivated me to get X Windows running again my Linux box. It has been many distributions and kernels ago since I've run X. Mostly my Linux box acts as a server. I secure shell (ssh) into it whenever I need to do anything. $ lspci | fgrep -i radeonIt told me I had a Radeon 8500 LE. Oh, no wonder! According to the ATI drivers page they no longer support the Radeon 8500 as version 8.28.8. I was trying to use the latest version, 8.35.5. So it turns out "No devices found" really means "We don't support your crusty old video card". Fortunately I remembered I had a Radeon 9800 Pro as the result of a recent upgrade. I installed the card and rebooted. X now works in all of its accelerated glory. Hurrah! Posted at 1:41 AM
Fedora Is Not YummyMy Fedora Linux installation does not update itself automatically because of a bug that has been documented for at least five months. I could disable the yum-updatesd script and hack a cron script to manually do a yum update daily. But I am a little sour. The distribution maintainers have an apparent lack of interest in fixing the update mechanism at the heart of Fedora. It does not help that yum is written in Python, a language that triggers my gag reflex. I feel the pain that Eric Raymond, a high profile Linux developer, wrote about in his public trashing of Fedora. After 12 years as a faithful Red Hat/Fedora user I am seriously considering switching to the next version of Ubuntu which is due out on April 19th. Also, R.I.P. John Backus and thanks for BNF Posted at 2:57 PM
The Engineer Gets a WeekOur break room at work had some yummy baked goods today: a giant cookie, some doughnuts and a cake that read "Thank you Engineers of Lockheed Martin". Our site manager sent an email that mentioned National Engineers Week and thanked us for our contributions and support. w00t! So to all my fellow software engineers out there: Happy Engineers Week! I decided to troubleshoot my dead Linux box last night. It booted up right away! It lives! I stayed up late installing over 200 updated files. So far it seems to be running well. I plan to continue to watch it and replace it sometime in the near future. When my mail software came back online, I caught up on my email and realized I missed a memorial service for my best friend's mother this past weekend. Words fail to describe how terrible I feel. He drove to my home town to pay respects when my father passed away last year. He's probably disappointed; I'm a bad friend right now. I'll give him a call tonight to try to make amends. I'll see if he wants to go out for drinks and will make a generous donation to a charity in his mother's name. UPDATE: I took my friend out for drinks. We had a great time. I'm going to give a donation to the American Cancer Society. Posted at 4:07 PM
Atime Linux Performance TweakI saw the following nugget of information on the Kernel Newbies website: 'Atime' is the 'Access time' field of a file: When a process reads a file, its atime is updated. Disabling atime updates, with the 'noatime' mount flag, is probably the most used performance tweak that linux administrators use: An active server is continually reading files, generating lots of atime updates, which translate to metadata updates that the filesystem must write to disk. And writing those updates can seriously damage your performance. Believe it or not, a busy server like kernel.org (vsftpd + apache workload) cut their load average in half just by mounting their filesystems with 'noatime'. Posted at 12:06 AM
Underrated Items of 2006
Monday, January 8, 2007
Category: Computer Games | Family | Food and Drink | My Life | Science Fiction | Technology It is time for my third annual list of underrated items. The past year, 2006, once again gave us its share of hype and hero worship. This is my list of underrated items that I feel deserve some exposure.
Most Underrated Items for the Year 2006
Last year I mentioned a gazpacho dot net podcast netcast. I am still toying with the idea. I am especially inspired to produce something light-hearted and funny. Posted at 10:10 PM
FC6 PanicI installed the latest Red Hat Linux distribution, Fedora Core 6. The kernel paniced on me! This causes all of the Windows boxes to not see the Internet since the Linux box hosts my DHCP server. Grr, my Internet access may be spotty for a few days until I determine what I want to do. Posted at 4:27 PM
What the Wiki Monday night I augmented the Wikipedia entry for Kobolds Ate My Baby (KAMB) to mention the LARP that Atomic Squash ran at Archon 30. I also added an entry for Atomic Squash. My writing was reverted so fast that my head is still spinning. The wiki admins decided that my KAMB entry was "a vanity post" and that Atomic Squash did not rise to the level of a notable organization verified by reliable sources. I am angry and hugely disappointed.
I had lunch with my boss Tuesday. I was pleased that she promised to find me a teammate for my projects. I have been fortunate to work with some bright and talented coworkers. Other managers, of course, have recognized my teammate's accomplishments and have lured them away with promises of exciting research projects and their own teams to lead. I couldn't be happier for their accomplishments, but it represents a brain drain from which I have to recover. My buddy Raeliste sent me a Halloween card. It really lifted my spirits! After my birthday plans fell through last week, I spent the night dining alone. I have been a little down since then. Getting a card from a lovely woman boosted my self-esteem and libido. Lucy nee Annie sent me a video of herself clucking like a chicken. It started with a meme that linked to page that would sloganize your name. My slogan: What would you do for a Tom? She responded that she'd cluck like a chicken. I followed up with a message telling her I'd like to see that. She sent me a video a little later. Too funny! Mozilla Firefox 2.0 is love. Built-in crash recovery and spell checking is a solid improvement! Posted at 4:25 PM
Flashed My FirmwareI flashed my firmware. I am not ashamed. I downloaded new firmware for my wireless router, a Linksys WRT54G. I choose Thibor's HyperWRT. You see the Linksys firmware is based on Linux and was open sourced. A couple programmers have extended the code with new features. Among some of them are the ability to secure shell (SSH) to the router, have start-up scripts, increase the transmit power, overclock the processor, set QOS for Battlefield 2 and filter port scans. I flashed the firmware less than an hour ago. So far I am pleased with the performance. I plan to experiment and monitor its performance over the next week. Posted at 10:02 PM
You Are My DeathstarHello friends. It has been a while since I have made a sizable blog entry. Back on Labor Day my mother came to visit. I have mentioned before that I lost my father earlier this year. Mom brought an old PC from my late father's business. I plan to take the hard drives out and browse through them for anything important. She also brought some JRR Tolkien books I had bought Dad as Christmas gifts. Somehow I did not expect to see them again. You never give a gift expecting it to show up again on your kitchen table. I have an idea. Since I was a teenager the first time I read and enjoyed the Hobbit, I want to take the books to Archon and give them to a teenager there. It feels like the right thing to do. Mom and I went to St Louis Bread Company. We tried their Crispani pizza. I had the Sausage and Apple. Mom had the Three Cheese. All in all they were pretty good. I'm grateful too that we didn't have to sit in the waiting area of a restaurant. Last weekend I had dinner with a friend at Plaza Frontenac. It was nice to catch up. Funny thing is I used drive by that mall every weekend for three months. I never stopped by to check out what it had to offer. I have a personals profile on Yahoo! Personals. So far the only date I have managed was with a woman I already knew. I just do not get responses from women in which I am interested. I have responded to women in whom I am not even interested. I wanted to see if they would respond. Nothing is more like a Deathstar to my ego than to get the virtual cold shoulder. I hear folks say that they have had luck. But, sadly, my experience has been different. Well, I got fed up with sub-par performance of my Linksys WRT54G wireless router. I bought a replacement in case I wanted to hack the ROM on my current router and bricked it by accident. Fortunately, that was not necessary. I reset it to its defaults and tweaked parameters. I changed settings one at a time and examined performance changes. I learned the following:
Black Label Society recently released their new CD entitled Shot to H-ll. Amid a collection of mellow meandering songs with aimless lyrics these songs stand out:
You may have had some problems accessing gazpacho.net lately. Dreamhost, my web hosting provider, has been suffering network issues for a number of weeks now. The past couple of days they struggled with router issues that resulted in intermittent loss of access for my web friends. Just today they replaced the router and promised that things are better. Here's hoping. I have toyed with the idea of producing a podcast. I'm thinking about doing something funny. I am considering spoofing commercials, mocking liberal politicians and so-called public radio, doing man-on-the-street interviews with America on current events, giving treatment to ridiculous social mores and perhaps producing an episodic radio play. Are there any female friends who want to lend voice talent? gratis? I'll buy pizza. Posted at 1:33 AM
Krugle BungleKrugle, the open source software engine, went live on June 14th. In spite of me submitting bug reports several times during its beta, the developers have chosen not to fix a fatal flaw. Krugle does not behave well with tabbed browsers! If you try to open a link in a tab, it will just give you an empty page. They insist instead on opening a new "tab" on the current window. This is counter-intuitive and frustating. Hello! Has any Krugle people ever tried a browser other than Microsoft Internet Explorer 6.0? Mozilla and Firefox have tabbed browsing. Microsoft plays catch-up with Internet Explorer 7.0 when it adds tabbed browsing. If you are looking for code, skip Krugle. Posted at 6:27 PM
Warming Up the Brain FarmI'm giving a training class of web services today. They want record the lesson to video so that employees can watch it over the company intranet. Does that make me famous? I threatened to present the slides through a socket puppet. Heh. Sounds like something that would end up on YouTube. Too bad the material is proprietary. I can't sleep. Posted at 5:12 AM
Why I DreamHost I use DreamHost to host my web pages. More than one tech-saavy friend has been suprised that I use a web hosting provider instead of putting the pages on a computer I maintain. I guess I look at it as outsourcing. I pay a reasonable fee for a service.
Here are things that a web hosting service takes care for me:
Posted at 5:01 PM
Computers Dream of StrawberriesBe kind, resourceful, beautiful, friendly, have initiative, have a sense of humor, tell right from wrong, make mistakes, fall in love, enjoy strawberries and cream, make someone fall in love with it, learn from experience, use words properly, be the subject of its own thought, have as much diversity of behavior as man, do something really newI believe that computers can be programmed to think. They just do not think the same way humans do. We already know that machines called planes can fly. Observe that planes do not fly the same way that birds do. Can computers dream of strawberries? No, they cannot even enjoy them. Yet, they can approve mortgage applications, predict the weather and keep the brakes on cars from locking. I see promise in more sophisticated artificial intelligence. We should not limit ourselves by assumptions about what computers cannot do. Posted at 3:25 PM
A Perfect DiskI found a good disk defragmentation program for Windows XP named PerfectDisk. Let me explain what a defragger does. As you create and remove files in Windows, gaps can appear in the "map" the operating system keeps of the disk drive. This causes the pieces of your files to get stewn all over the drive. Consequently, the drive spends more time seeking those pieces when you load a file. This translates to longer load times. As a result Windows feels sluggish and unresponsive. To be fair Microsoft does include a defragger. But comparing it to PerfectDisk is like comparing a bicycle to a Cadillac. I downloaded the trial version of PerfectDisk and ran it. I noticed a marked improvement right away. Even though I had faithfully defragged my disk using Window's defragger, PerfectDisk made even more improvements. It reordered the files based on how frequently I used them, consolidated more free space and even defragged my system files in offline mode -- something Windows does not offer. In short I'm a believer. I bought two licenses, one for my PC and one for my notebook. If you're interested in improving Windows performance, I recommend you download and try the free trial version of PerfectDisk. Posted at 8:09 AM
Blu-ray Java GamesDuke, the Java mascot. Used with permission.Lately, the Java programming language has been a popular choice for web applications and enterprise level software. But it may soon attract the attention of homebrew game programmers. Java was accepted as part of the official standard for Blu-ray content authoring. This means that every Blu-ray device, including the Sony Playstation 3, will support Java. According to a Simon Morris blog entry enterprising game programmers may be able to write some Java ME code, burn a disc and play the creation on their HDTV. We shall see. Posted at 4:01 PM
Devil's DayToday is 06/06/06. That makes it "6-6-6", or 666, which is the Mark of the Beast. Folks are doing fun things today like releasing a movie about a demon child. Oh, the delicious Ann Coulter is releasing "Godless", her latest tome on the stupidness that is today's liberalism. I am gonna have a little fun, too. Check out the devilishly funny System Administrator Song from Three Dead Trolls in a Baggie Posted at 8:41 PM
Slide Rules, Uhm, Rule!This month Scientific American has an article on the slide rule. It seems the term "computer" user to refer to humans who spent their time calculating numbers. If you call yourself a nerd and have never taken the time to fool around with a slide rule or an abacus, then you aren't really a nerd. Learning to use one of these analog calculating devices will help you appreciate the beauty of number theory and realize the importance of estimation and verification. They have plans on how to construct a slide rule. Posted at 7:41 PM
Security TestingThis concludes the week of testing topics. Do not be shy to tell me what you think. Posted at 7:00 AM
Operational Validation TestingTesting week concludes tomorrow with the topic of security testing. Posted at 7:00 AM
Better Living Through TechnologyI read in a press release that Lockheed Martin (LM) has developed counter-insurgency (COIN) surveillance technology based on the idea that insurgents behave like street gangs. Chicago has been using a technology named I-CLEAR (Illinois Citizen Law Enforcement Analysis and Reporting) on a daily basis to track crime trends and check criminal backgrounds of wanted offenders. The technology has been expanded by the military to protect U.S. troops and Iraqis from homicide bombers and improvised explosive devices (IEDs). How cool is that? Posted at 1:47 PM
Performance Testing
The point is that some errors only manifest themselves when a load is applied to the system. This testing finds things such as deadlock, memory leaks and invalid use of such things as shared memory, semaphores and threads. Any change that could adversely affect performance should be tested. This week of testing topics continues tomorrow with my discussion of operational validation testing. Don't miss it! Posted at 7:00 AM
Verification Testing
If you work with an independent tester, be sure to make them a part of the project from the being. This includes design meetings. Their job is to look at the requirements and figure out how to test them. Take the time to explain your design and development to your test engineer. Do not focus so much on the coding that you neglect your team. Speaking of requirements, the only hurricanes New Orleans requires are the mixed drinks. Don't ya think? Tomorrow I plan to discuss performance testing. Posted at 7:00 AM
Integration Testing
While unit testing is focused on source code modules, integration testing is concerned about the system as a whole. In this testing data may be fed into the system to watch how it behaves when it reaches your source code and, in turn, how your code affects other components. It is important to understand the system architecture as whole. Write a formal plan that describes two things: 1) what you plan to test and 2) what you expect the results to be. Document any results that differ from your expected results. They should either be fixed or explained. Holy Batcars! Don't miss tomorrow's blog entry when I will discuss verification testing. Boffo! Posted at 7:00 AM
Unit TestingThe closest I came to learning testing in college was unit testing. Of course I did not take a disciplined approach back then. No unit test plan was written, results were not captured and defects were not documented. Some may argue that documentation is boring and useless. But I have come in after unit testing and taken over projects in my career. Believe me you can have more confidence in the testing if the developers have a disciplined mind and take the time to document their unit testing. Come back tomorrow when I will discuss integration testing. The bunny knows where you live. Posted at 7:00 AM
Fundamentals of Software TestingThis coming weeking I plan to discuss various topics in software testing. Today I am going to cover the fundamentals. Unfortunately, I do not recall formal testing being taught in college. My experience has come from on-the-job lessons learned. To start with you should have at least three classes of servers. Your company and budget may be small. In that case the development and staging server could potentially share the same box. TYPES OF SERVERS
A development server is a server on which code is developed. Once development is completed, then it is installed on a staging server. A staging server should match the production server as closely as possible. This includes, the same version of operating system, the same software and the same configuration. The staging server is your last chance to discuss bugs before it hits the production server. The production server is the server that runs your code live. It is what your customer uses. By seperating the servers in this way you can test on the staging server and develop on the development server. This is particularly useful if the test takes a long time. The developers can start working on bug fixes even before all of the tests complete. Stayed tuned for tomorrow's topic: Unit Testing Posted at 1:29 PM
Krugle and the MicrosoftiesThere is an interesting project that aims to be the google of freely available source code. I have high hopes for krugle. It is a search engine that is smart about how source code is organized. Instead of just treating code just like lines of text, krugle organizes it into projects and displays it with syntax highlighting. Right now the site is in closed beta. I cannot wait to try it live. Microsoft Research scientists say that schools and colleges are not training the next generation of scientists with the necessary computer skills. Hey Microsoft, how about you give us the next version of the Windows operating system before you judge? The last Microsoft Windows release was Windows XP in 2001! Computer journalists initially forecasted the next version in 2003. But after a redesign, streamlining planned features and a recent restructuring, we can look forward to seeing Windows Vista sometime next year. Posted at 7:00 AM
Disaster Recovery For Technology
Offsite backups are critical for disaster recovery. You will need them in the event a disaster causes physical damage to your computers. Things have changed since I wrote that first disaster recovery plan. Nowadays renting space on a managed Internet server is cheaper than tape backups. Take a look at file hosting providers and online backup and recovery services. Posted at 7:00 AM
Tangled Brier of Dependencies
Joel on Software says that dependencies are so obvious that he thinks that they should not be tracked. I agree that they can appear obvious to experienced project managers. But project managers are not the only people to use schedules. A new employee may want to use your schedule as a basis on which to estimate their schedule. Remember that your "customer" can also include your team and your company. So, identify dependencies, document them and manage them with parallelism. Your project and your customer will benefit. Posted at 7:00 AM
More Choice, New Hope
The short answer is, of course not! I snicker when I hear about the supposed "tyranny of choice". Competition is good. The fact is that the strong will survive. The weak will adapt or find a small niche of supporters. Having said that I see a case for cutting through the clutter. If you put together an integrated software system and plan to support it, then you will limit the number of supported choices. This makes fixing problems manageable. Also, provide a help system, e.g. a software wizard, to guide novice users by recommending common choices. It will keep them from becoming overwhelmed with new software. Now, who wants some pie? What kind of pie? Posted at 7:00 AM
SQL in BaghdadThis made my night. I received this email just minutes ago. At first I thought it was junk email. But I found out it is an unsolicited job offer. Any takers?
Posted at 11:23 PM
Coding Standards Give Software Quality
Well-written coding standards define naming conventions. They also describe how comments document code. They discuss the layout of source code modules. They forbid the use of goto statements and self-modifying code. They may discuss the management of dependecies. In general coding standards draw on developer experience to produce guidelines that make code functional, readable and maintainable. Your organization may bristle at the idea of a formal coding standards document. A coding checklist may suffice in its place. This gives guidance to the developer and may give a good discussion point for a peer review. Speaking of quality, why isn't there anything good on TV? Posted at 7:00 AM
When Web Applications Want a State
In order to remember your shopping cart items the application uses a server provided construct called a session. A session persists for a specified period of time across multiple connections and page requests from the same client. Using the session and a database we can store, retrieve and associate session data with a given user ID. One mistake to maintain state is to use hidden form fields. This is a security risk open to an exploit known as cross-site scripting. It is much better to store such values on a database instead. You can use the session id as a key field. On subsequent pages the value can be looked up. Another mistake is to try to maintain state by trying to persist data in objects declared in servlet code. This breaks down when there are multiple users. These objects are not thread-safe. That is, one user's data can corrupt another user's data. So a good way to implement state in a web application is to use a database in conjunction with the session. By avoiding some common mistakes you can protect your website. Posted at 7:00 AM
Plan Multiple Phases
Unfortunately not every project can fit inside of a three or six month schedule. It may be necessary to divide a project into phases. The purpose of each phase would be to fit into a short-term schedule. The customer may be enthused by early versions of the software and may want to add new features. Also, the engineers may want to write geeky stuff that could help the project but whose scope is outside that of the project requirements. I recommend that you avoid this feature and requirements creep. Track the requests and assign them to later phases. By focusing on short-term projects your customer will appreciate the quick turnaround of new software releases. Your team can take pride in their accomplishments. A successful project release will help motivate them as they start the next phase of the project. Posted at 7:00 AM
Rocking the KLOC
Do comments count toward the KLOC count? If not, why do you wish to penalize programmers for documenting their work? If yes, is a developer who writes a two hundred lines of comments accomplishing more than a coder who wrote fifty lines of code? It may seem counterintuitive, but a programmer who writes fewer KLOC may actually be good for a project. Writing good software is a matter of managing complexity. An experienced developer will identify code that does the same work and will refactor the code to eliminate redundancy. So, eliminating lines of code is actually a good thing for a project. It helps reduce complexity which improves the time it takes to make code fixes. There are better ways by which to measure productivity. One such method is to measure project hours. Project tasks are written down in a schedule called a work breakdown structure. Then an hour estimate is assigned to each task. Before a project starts the developers review the schedule and make any adjustments. Then developer productivity can be measured against how closely they follow the schedule. Onions to the KLOC, orchids to project hours! Agree? Disagree? I'd love to hear about it. Posted at 7:38 AM
Version Control Saves Sanity
Without version control two coders may attempt to change the same file. Changes can get lost. One coder might save his work over another coder's work thus clobbering her changes. Some types of version control software work as a library. That is, they allow only one coder to check out and change a file at a time. Other software permits multiple coders to each work on private copies of source code and merges their changes when the code is checked in. Team members can easily update their copies of all the project's files to the current versions. Without version control software this process can be time consuming and tricky. If you mess up code badly, version control software can revert any file to a previous version. This frees developers to try bold, daring ideas. Version control software can allow projects to fork off the main baseline into seperate branches. In fact multiple projects can each work on seperate branches of source code. Once a project is completed its branch can be merged back into the main baseline. Integrating version control software with defect tracking software gives a powerful tool to maintain projects. You can use identification numbers assigned by the defect tracking tool to identify code changes. Then it is possible to examine of the history of file changes to see that bugs were fixed. I have been amazed by the number of places that attempt to write software without version control software. It is not strictly necessary to have a version control tool in order to write software. But I would not try to work on a project without such a tool. Posted at 12:29 PM
Code Comments That Work
A common practice I have seen is to write program prologues. These are a collection of comments found at the very beginning of a source code module. Usually it documents: a copyright notice, the source code module name, a description, the date created, the author's name and the revision history. Each method can also have a prologue that documents: the method name, a description, the parameters and the return type. I have heard it said that these comments are not necessary since code is self-commenting. The argument goes that if the author chooses a descriptive name for a method and its parameters, then no comments are necessary. In practice this is never true. Don't be that lazy and arrogant developer who needs a swift kick in the posterior. It is possible to go overboard and document too much. The problem here is that as code changes you now have an additional task of maintaining the comments. A good rule of thumb is: Comments should document the "why" not the "how"For example if the developer choose to implement a splay tree he should not document the fact that it is a splay tree. Why? Because another developer may decide that a red-black tree performs better and replace the original implementation. Now the comment has to change, too. It is better to document things like hacks and decisions that maintaining developers should notice. For example, if there is a bug in the third party library you use to format a date, a workaround may be developed to fix it. A comment should be written to document the fact that the code has been written to work around the problem. Remember that comments are written for humans. Be aware that other developers read them. Do you really want them to remember you as a foul mouthed crank? Think about that before vent your frustrations in your code comments. Just a thought. Posted at 4:37 PM
Can Programming Be Art?
So, I pondered these questions: Is coding really a form of self-expression? Can software engineers express themselves in code? Can programming be considered art? Let me clear us something. Coding, or programming, is only one-fifth of the complete software engineering process. All of the steps are: design, programming, documenting, testing and maintaining. I like to compare software engineering to building a car. Is car building art? The process of assembling a car can hardly be considered a form of self-expression. There are certainly cars that people think are beautiful. But mechanics do not sit around with stacks of auto parts and try to make a Mustang. There usually is a design first. Also, most cars are safety tested. I think it is irresponsible to release software without testing it thoroughly. Why aren't more software companies held responsible for the financial impacts that their buggy products cause? How is it we have come to expect computer software to fail? That is a discussion for another blog entry. How does software get written? In the corporate world it starts with a business problem. For example a chain of Mexican restaurants might ask: "How many fajitas did I sell yesterday?" The initial step in software engineering is to identify the business problem and gather requirements. Then a design is developed. If a design is good, then the process of coding is almost mechanical. Of course, there are issues that arise that need creative solutions. I think the structure of software code and creative solutions to issues are the closest a coder really comes to self-expression. So, can programming be art? No. Coding is best accomplished by a disciplined engineering approach rather as an art project. The resulting software can be admired and maybe even be considered art. But sitting at a computer and writing code is not a form of self-expression. That's best saved for blog entry comments. Practice self-expression. Please post a comment. Posted at 6:27 PM
More Additions from the ArchivesI made more updates to this blog thanks to the Wayback Machine at archive.org. I dug up the web log entries I made around January 2000 at the now-defunct sleepwalkertc.com website. The web site was for a project to make a H. P. Lovecraft inspired total conversion to the Unreal Tournament game. Posted at 1:47 PM
Here's a Room, Here are Some Tools, Here are Some Guys
Posted at 6:16 PM
Sync Your Clocks
A common problem I have encountered in software development and testing is clock synchronization. Internal computer clock time will drift to inaccurate values even when initially set accurately. PC clock circuits only cost a few cents to make and are notorious for becoming wrong over time. This causes a variety of problems. Developers on Unix systems like to use the 'make' command. This command compiles new and modified code without having to recompile unchanged code. It uses the clock to deteremine which files need to be recompiled. If source code resides on a separate server and the clocks are not synchronized then the make program will not work correctly. Another problem manifested by unsynchronized clocks is correlating test results. Imagine running a load test on system where the client, database server and application server all have different times. Someone trying to analyze the results of the test will go cross-eyed trying to examine critical events in the test. I have seen this problem at two different companies now. A network time server should be used to keep every computer's time in sync. The most used solution for clock synchronization is the Network Time Protocol (NTP). It utilizes a client/server architecture based on UDP message passing. Fortunately, it is also built into the latest versions of Windows and most Linux distributions. In order to keep your clock in sync in Windows right-click on the date/time in the task-bar. Now click on 'Adjust Date/Time'. Now click on the 'Internet Time' tab. Yeeeeaaaahhhh Booooyyyy! Underrated Items of 2005
Friday, January 27, 2006
Category: Computer Games | Family | Gaming | Movies | Music | Netcasts | Numismatics | Politics | Science Fiction | Technology The past year, 2005, brought its share of hype and hero worship. As I did last year I decided to give a select list of underrated items some exposure.
Most Underrated Items for the Year 2005
I read an excellent article on podcasting. Would anybody listen to a gazpacho dot net podcast? Posted at 10:26 PM
An Idea for Movable TypeI use Movable Type to manage these blog entries. I had an idea for a plug-in: a plugin that allows Movable Type to interface with subversion to allow templates to be version controlled. Posted at 11:29 PM
Disco Dance Floor USBHackaday posted an article the other day on MIT's USB-controlled Disco Dance Floor. The technology geek in me loves this idea. My brain boggles at the fun possibilities with this expensive toy. I was delighted to see engineering students at the nearby Washington University built one. Posted at 1:13 PM
Amazon's Mechanical TurkAn email arrived today from Amazon announcing the Amazon Mechanical Turk web service. It is named after a famous 19th century chess playing machine that turned out to really have a person inside. Amazon touts the service as "Artificial" Artificial Intelligence. It works like this. A company may send trucks through a business district taking photos. They then need somebody to pick the best ones for a database of store images. In exchange for a couple cents a human can take a look at a few photos and select the one that best looks like a storefront. Developers can use web services to submit tasks to the Amazon Mechanical Turk web site, approve completed tasks and incorporate the answers into their software applications. To the developer the application sends the request to the web service. In turn the service returns the result. Behind the scenes the results are the product of human input. Humans come to the web site, search for and complete tasks and receive payment for their work. Got spare time? Earn a few cents. Posted at 9:35 AM
Elements of Web DesignThis weekend I discussed potential web page designs for Atomic Squash with Jason. Our conversation reminded me of some slides I wrote for an advanced HTML class at work. Over the years I have seen many poorly designed websites. Web page authors, it seems, tend to make some of the same mistakes when first learning HTML. The following is a list of elements of good and poor design. Elements of Poor Design
Elements of Good Design
Posted at 10:30 AM
Computer Science Projects That Interest MeDijkstra, a famous computer scientist, once said: "Computer science is no more about computers than astronomy is about telescopes." Computer science deals with design principles, requirements analysis, implementation of hardware and software, documenting and testing solutions and maintaining production systems. As you can see programming is only a small part of what is involved. An article I read earlier this year lamented the fact there have not been any notable innovations in technology in recent history. So I thought about what innovations are possible given today's technology. The following is my list of computer science projects which are ripe for innovation and which interest me: COMPUTER SCIENCE PROJECTS THAT INTEREST ME 1. Compiled Javascript Javascript is an interpreted scripting language built in to most web browsers. Most interactive web pages utilize javascript to do things like validate input or dynamically change form elements. One of the weaknesses with javascript is that all of the comments are sent, too. For pages with large amounts of javascript this amounts to lots of wasted bandwidth. It should be possible to compile javascript into codes that can be run in a sandbox within the browser. The process of compilation would eliminate comments and distill the code into a compact collection of byte codes. 2. Wired Elvis A computer science professor once wrote a program to algorithmically generated jazz riffs using a functional programming language. I've always wondered what rock and roll could sound like if it were generated by a computer. Lets put the core in Haskore. 3. Anonymous P2P Networking Peer-to-Peer (P2P) networks have made headlines lately. A fundamental issue with today's P2P networks is that once you connect to the network your IP address is publicly available. This makes you a target esp. since information about your data transfers are routing through super nodes. It is theoretically possible to anonymize connection information. Some work has been done lately about obfuscating routing using a concept known as onion routing. It is not easy but I think it is possible to anonymize all connection information including the IP address. The question becomes, is it possible to ensure successful transfer given an anonymous destination? I think it is as long as you have at least three trusted servers. I haven't worked out in my head how to protect the servers against untrustworthy servers or servers colluding to "poison the well". 4. Whipping the WIMP We can been using the same windows-icon-mouse pointer paradigm since it was invented in the 1970s. But people are still intimidated by using computers. Lets face it speech is a more natural means of communication. Advances in voice recognition mean that computers understand us better than ever before. Isn't time that we at least augmented our system software with voice and gesture recognition? 5. Morose Pointer Alan Turing proposed a test in which a computer program tries to fool human testers into thinking that they are communicating with a human. Every year there is a contest in which competitors try to see who does their best to meet the Turing Test. I'd like to go step beyond this. Can a computer make you cry? Can we care enough about a computer program to feel emotion? The mind boggles. 6. Parallel Compiler In college I did independent research in the area of parallel computing. The compilers available at the time were poor. The best available was a compiler that took the C programming language and did its best to parallelize the instructions. There were other compilers and languages but they were awkward and difficult to program. As multiple processor PCs appear on mainstream desktops, the question is: is it time for a new programming language? I believe it is time for a language and compiler that is designed around explicit parallelism. Posted at 9:34 PM
The Ultimate MachineI want one of these for Halloween! From a biography of the late Dr. Claude Shannon: The "Ultimate Machine", based on an idea of Mervin Minsky, was built [by Dr. Shannon] in the early fifties. The operation and spirit were well described by Arthur C. Clarke in Voice Across the Sea: "Nothing could be simpler. It is merely a small wooden casket, the size and shape of a cigar box, with a single switch on one face. When you throw the switch, there is an angry, purposeful buzzing. The lid slowly rises, and from beneath it emerges a hand. The hand reaches down, turns the switch off and retreats into the box. With the finality of a closing coffin, the lid snaps shut, the buzzing ceases and peace reigns once more. The psychological effect, if you do not know what to expect, is devastating. There is something unspeakably sinister about a machine that does nothing -- absolutely nothing -- except switch itself off." Posted at 12:12 PM
Excuse Me, Your Network is ShowingI bought and set up a Linksys Wireless-G Broadband Router. In the process of setting it up I was suprised to see no fewer than three networks in my neighborhood that broadcast their SSID and are not protected by sophisticated encryption. In fact one network router identified itself as 'Linksys' which leads me to think the owner just went with the factory settings. Tsk. Perhaps I am paranoid but I set my router to not broadcast my SSID. Dude, I Got a DellThis week I got the notebook I ordered from Dell. It is a Dell Inspiron 600m, a cheaper model intended to hold me over until I upgrade my desktop computer. As a computer professional I like to upgrade my hardware every three to four years to stay current with trends. I'm due for a new desktop but am waiting until Microsoft releases Windows Vista, its next version of the Windows operating system, sometime next year. That way I can upgrade my PC and its operating system at the same time. The first thing I did when I got my notebook was to uninstall all the bologna that Dell loaded onto it. I removed every trial program and unnecessary software package I could using the Add/Remove program control panel program. But I still got a nag screen from QuickBooks. Grr. I'm going to dig into the system this weekend to remove every trace of it. Overall, I am pleased with the notebook. The keyboard is as wide as screen, i.e. 14 inches. After using a full-sized keyboard like the Microsoft Natural Keyboard, the notebook's keyboard feels tiny and cramped. The screen is crisp and bright esp after turning on ClearType. As you can see I added a wireless notebook mouse . It is a Logitech V200 Cordless Optical Notebook Mouse. I am pleased with its performance. It tracks very well with no noticable lag. Also, it micro-receiver snaps onto the bottom of the mouse for easy storage. Posted at 10:43 AM
Windows Registry FilesI mangled my Windows XP registry. This incident started after I upgraded my HDD to a 200 Gb model. I took these steps: 1) exported up the registry to a USB thumbdrive, 2) formatted the new HDD, 3) reinstalled Windows XP and software and 3) double-clicked on the registry file to install its registry entries. I got an error griping about trying to update registry entries that were being actively used. Then, the regedit program closed. Does this mean a partial success? Short of scanning the registry and reg file there was no way of knowing. This probably messed up the registry. I noticed that the system seemed to think it was in safe mode. Funny thing was that I didn't see any of the banners that are displayed when Windows is in safe mode. My PC consistently booted into Safe Mode without displaying the "Safe Mode menu", the one that you see if you press F8 at boot time. I searched Microsoft's knowledge base for an article how to get Windows to not think it is in Safe Mode. No success. So I reformatted the HDD and reinstalled Win XP. This time I did not attempt to reinstall the registry entries. All works fine. Lesson learned: do not try to install registry keys from an exported reg file. The regedit program does not fail nicely or attempt to clean up after itself. Posted at 10:04 PM
NIC Tango UniformWell, my Intel PRO/1000 network interface card (NIC) went on the fritz. The problem manifested itself by having my computer freeze. It even froze sometimes during OS boot time. I have come to expect this behavior from Windows. But when I booted to Linux and had the same problem, I suspected a hardware problem. My first suspect were my hard drives. I have been getting SMART errors on them for a while. But I happened to notice that the system especially tended to slow down when it tried to access the network. I watched activity on my hub. My faulty NIC kept flashing on and off. The problem had to be the NIC. After a quick trip to Circuit City and Best Buy I discovered that neither of them sell Intel or 3COM branded cards. I had to settle for a NetGear card for $25. The salesperson told me that they do not sell many Gigabit ethernet cards. I suppose since the 100 Mbit NICs were less than $10 after mail-in rebate that people opt for the cheapest card when installing a home network. Either that or they opt for a wireless network. Posted at 11:37 AM
Ice Your Cell Phone |