Article :: Exploring the Mythical Weekend Coding Project

Did you ever spend a weekend working through some kooky idea for coding an app you'd had in mind for years? Like many of us, Dhanji R. Prasanna has carried concepts around in his mental pockets, and one day he decided to go ahead and try it. The goal was a working app in two days. Would he succeed or fail miserably? Some things he learned were to be expected, but others he could never have predicted.

Categories: Agile Programming | Computers | InformIT | InformIT Agile Programming | Programming | Project Management | Technology
Article :: David Chisnall Presents a Developer's Reading List

Expert programmer David Chisnall provides a list of the 5 books he believes every programmer should read.

Categories: Computers | InformIT | InformIT Programming | Programming | Technology
Error'd: amp, #039 and a0B30000004la04EAA&

"I saw this on my way home from work," Daniel Moore writes, "thank goodness CVS is doing something about Maryland's crippling shortage of whooping cough!"

 

"While trying to learn Open Bravo," writes Otmane Malih, "I learned that there are countries I've never heard of."

 

"My university has a site license of Mathematica for all Mathematics and Physics students," Simon Hollingshead wrote, "when trying to view some information about the license key, I got this message. Not to worry, it can go in my binder named 'Error messages from various websites'."

 

"Woah, bad password," wrote Micah, "that's cool man."

 

"Now that's a lot of readme," writes Frank de Weger.

 

"I was filling out a satisfaction survey after buying a new car," writes Jeremy Hutchinson, "even the optional questions required an answer."

 

"This is from a well-known vendor of libraries," writes Adrian Edmonds, "what to do next is a bit of a puzzle."

 

"This Mongolian ATM had a rather unique way to notify that it could not print a receipt," writes Matthew Asquith.

 




Categories: Computer Humor | Computers | Humor | Programming | Technology | The Daily WTF
Article :: Exploring the Mythical Weekend Coding Project

Did you ever spend a weekend working through some kooky idea for coding an app you'd had in mind for years? Like many of us, Dhanji R. Prasanna has carried concepts around in his mental pockets, and one day he decided to go ahead and try it. The goal was a working app in two days. Would he succeed or fail miserably? Some things he learned were to be expected, but others he could never have predicted.

Categories: Computers | InformIT | InformIT Programming | Programming | Technology
Article :: Remote Control Software Solves "Friends and Family" Support Issues

In this lively autobiographical article, Ed Tittel describes his long-distance quest to help his father diagnose and fix computer issues.

Categories: Computers | InformIT | InformIT Programming | Programming | Technology
Support The Daily WTF in Supporting the Support SOPA Movement

It’s January 18, 2012 and, while most of the internet has decided to blackout their sites in opposition to the Stop Online Piracy Act (SOPA), we’re taking an opposite stance and are whiting-out The Daily WTF in support of SOPA supporters.

If there’s one thing that SOPA proponents like myself and SOPA opponents can agree on, it’s that PROTECT-IP and the Stop Online Piracy Act have little to do with protecting intellectual property and stopping online piracy.

After all, those who choose to steal creative works like the “I Have a Dream” speech from artists like Martin Luther King Jr. can already be sued and prosecuted under existing United States copyright laws. IP thieves living overseas can already be extradited to face justice in our federal courts. And the Department of Homeland Security can already arbitrarily seize domain names that fit its arbitrary standard of violating national something-or-other.

While these laws will make such acts more illegal (and therefore reduce infringement), they’re doing something much, much more important: helping dismantle DNS and the internet as we know it. And that’s something that we firmly support and can stand by.

You see, back in the day, if you wanted to get online and access electronically-stored information like digitized photographs, electronic bulletin boards, and informational databanks, there was only one thing you needed: a telephone number. You’d simply fire up your favorite telecommunications program (mine was Telix), have it dial that phone number, and after a refreshing symphony of beeps and hisses, you were online.

Each phone number transported you to a quaint, peaceful community that was almost entirely self-sufficient. There was no “hyperlinking” between systems: you simply wrote down the phone number, signed-off of the current system, and then dialed into the new system. And let me tell you, there are few experiences in life that can parallel the utter bliss of discovering a new phone number and a new electronic resource.

And then the Information Superhighway – and its tightly integrated Domain Name System – came along, decimating these peaceful, independent communities. The bulletin boards of old were ground up and churned in the giant “dot com” machine, leaving an interconnected web of domain names. There’s no more “going online” – you’re already online – and if you want to access an electronic resource, you can use a “domain name” like TheDailyWTF.com.

Domain names are highly confusing in that they not only describe what the electronic resource is, but where it is as well. Nothing else in the world works like this for obvious reasons. Could you imagine the complete confusion in day-to-day things like getting a phone number? Is that “jenny eighty-six dot com” or “jenny eighty-six dot net”? We would be in complete chaos.

SOPA and PROTECT-IP offer hope in returning to the golden age of telecommunications, and to the days before the Information Superhighway polluted the online culture with this domain name nonsense. Let the Domain Name System a natural death and prepare yourself for the Internet Protocol Number (IPN) renaissance. All you need to do is start a notebook that lists electronic resource names and their corresponding IPN. And let the first entry in your notebook be

The Daily WTF      74.50.110.120

We can only hope that our legislators introduce common sense guidelines to ban HTTP (and HTML/JavaScript) as well so we can all return to the more sensible GOPHER standard.


Update 2012-01-19 00:01 - thank you all for supporting the Support The Daily WTF in Supporting the Support SOPA Movement article! In case you missed it, any request simply to content on thedailywtf.com served up this:

Things should be restored to normal (in theory), and note that the server IP did actually change from 74.50.106.245 to 74.50.110.120. If you are still hitting the old server, your DNS is a little behind in catching up to the change.




Categories: Computer Humor | Computers | Humor | Programming | Technology | The Daily WTF
Article :: How TCP/IP Works

This chapter describes the TCP/IP protocol system and shows how the components of TCP/IP work together to send and receive data across the network.

Categories: Agile Programming | Computers | InformIT | InformIT Agile Programming | Programming | Project Management | Technology
Article :: Common Go Patterns

Go, like every other language, has a set of common patterns that are not necessarily applicable elsewhere. David Chisnall covers them here.

Categories: Computers | InformIT | InformIT Programming | Programming | Technology
Article :: Fluent C#: Application Development

In this chapter, we'll talk about development platforms, application architectures, development methodologies, design patterns, and best practices for C#, and where they all fit in the process of getting from here (an idea for some software) to there (a working application).

Categories: Computers | InformIT | InformIT Programming | Programming | Technology
Article :: The iOS 5 Developer's Cookbook: Working with View Controllers

This chapter shows how to build simple menus, create view navigation trees, design tab-bar-based and page-view-based applications using view-controller-based classes.

Categories: Computers | InformIT | InformIT Programming | Programming | Technology
Article :: Network Verification Commands Review

This article takes a look at some of the most basic network verification commands that can be used on Cisco equipment and discusses the information that can be obtained from these commands.

Categories: Agile Programming | Computers | InformIT | InformIT Agile Programming | Programming | Project Management | Technology
Article :: Programming in Objective-C

To help you understand the steps involved in keying in a program and compiling and running it, this chapter shows you how to write your first simple Objective-C program.

Categories: Computers | InformIT | InformIT Programming | Programming | Technology
Save the Project for Failure

If it takes two contract developers six months to drive a project to failure, then four developers should be able to fail in half the time! Josh assumed that was why he and Sam were carted out to the client site and tossed into the oubliette of the PowerPac project. They were armed with nothing but a rusty spoon and a requirements document so old it needed to be stored in an oxygen-free environment.

The original development pair was Sally "I can code but I'm more of a designer" Jorgensen (the CEO's daughter) and Billy "I taught myself HTML in a week and am now a programmer" Jorgensen (the CEO's brother). They ran the project exactly like you'd expect such a dynamic duo to run it- directly into the ground. By the time Josh and Sam joined, it was already well past deadline and over budget.

To make a good impression on the client, Billy and Sally didn't work out of the consulting firm's office, but instead moved to the client site. The pair had improvised a server room to work out of. It could be easily distingushed from a broom closet by the piece of duct tape with "SEVER ROOM" sharpied onto it. Inside, an overheating rackmount server balanced on a crate of toilet paper. On a sagging plastic card table sat the developer workstation running VS2005, which doubled as their source control box, since it ran Visual Source Safe.

Josh thought their physical environment was bad, and then he looked at their application. Billy, it seemed, had read one website on database design and walked away with the idea, "if normalizing data across tables is good, normalizing it across databases bust be even better!" Their wheezing Sql Server instance hosted a dozen databases, one for each entity and an extra DB to hold tblIncrementingIDs(strCurrentID VARCHAR(50)), so that unique IDs could be consistent across all of these databases.

The first and last thing Josh noticed about the web code was the fact that each page had a multi-megabyte ViewState. Coupled with terrible coding practices, Josh and Sam junked the VSS repo and then started laying out a plan to rescue the application. They moved the dev team back to the consulting firm's main office, where they had a true development environment, complete with modern dev tools and a well administered TFS2010 instance, along with labs for automated testing. They rounded up people from the client and pinned them down on requierments. They beat Billy and Sally about the head and shoulders with three-tiered architecture until the two of them got it, and proceeded to wrench the project back onto course.

Four months later, Josh and Sam had accomplished the impossible- twice. They had gotten Billy and Sally to turn out code that wouldn't flunk a 100-level college course. The slighly less impossible achievement was that they had turned the project around. It went from "this is never going to be finished" to "it's late, overbudget, but we're within striking distance of an actual deliverable product." They were on track to deliver in two more months.

This kind of success on a project draws accolades and back-pats and lunches paid for by the consulting company for a job well done. It also draws something far more sinister: project managers who want to steal that glory for themselves. Doug, from the client-site, was exactly that kind of project manager. In the closing months of the project, he swooped in with the promise to manage the hell out of this project and keep it on track.

Doug did everyone the favor of standardizing the process. The QA Officer (Doug) had to approve any code before it could be checked into source control. The Compliance Officer (Doug) needed a report of every file modified before any build could be run, down to the specific line numbers changed. He couldn't just extract this information from TFS because, "It's part of the developer's job!"

Only the Build Officer (Doug) could kick off a new build, and not using TFS (a developer tool). Doug would run builds from his own computer, and if he forgot to perform a Get Latest to ensure he had all of the changes, well, that was the developer's problem. They should have followed the communication plan.

Josh protested and escalated and did all of the things you're supposed to do when someone's tanking your project, but to no avail. He couldn't understand how Doug was getting away with this until he sat in on Doug's status meeting. Doug had compiled a PowerPoint full of pretty graphs and dashboards showing nothing but green boxes. He used words like synergy, Agile, "code coverage", "core principles" and "industry standard best practices". It was entirely fabricated nonesense, but management swallowed every drop.

When they didn't hit Josh's original target dates, the money officially ran out. The project was cancelled, and the client informed the consulting company that Josh and his team should never be assigned to one of their projects again. Doug got transferred to another "at risk" project for the client, so that he could "save" it.




Categories: Computer Humor | Computers | Humor | Programming | Technology | The Daily WTF
Article :: Application System Design and the Software Engineer: Do We Need an Advanced Developer Classification?

Ronald D. Reeves, Ph.D. proposes a new advanced classification in the software field: the System Software Engineer. Although many engineers may really want to continue up the technical path, the available classifications don't provide sufficient monetary rewards for the effort.

Categories: Computers | InformIT | InformIT Programming | Programming | Technology
Article :: Analysis for Continuous Delivery: Five Core Practices

Jez Humble, coauthor of Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation, urges teams to move away from the all-or-nothing design of traditional software delivery approaches. Following the practices outlined here, you can deliver single-feature or small-story batches that dramatically decrease the time needed to build a new product or new release, testing and moving forward on successful features and redesigning or dropping features that fail (or that users show they don't really want).

Categories: Computers | InformIT | InformIT Programming | Programming | Technology
Article :: Windows Phone 7 Game Programming: Printing Text

This lesson covers creating a new Windows Phone project in Visual C# 2010 while learning about fonts and text drawing code.

Categories: Computers | InformIT | InformIT Programming | Programming | Technology
InformIT: The Trusted Technology Source for IT Pros and Developers

I'm at CodeMash today (stop by the Inedo booth if you're there!), so I thought it'd be a great time for this classic. Rutherford, Price, Atkinson, Strickland, and Associates Dentistry, Inc was originally published on January 30th, 2008.


Dr. Rutherford July 19th, 2004 marked a new chapter in New Portlandopolis’s rich dentistry history. It was on that day that the bitter rivalry between Dr. Rutherford, DDS; Dr. Price, DMD, DDS; Dr. Atkinson, DMD; and Dr. Strickland, DDS/DDS-PhD, had finally come to an end. Though there’s much debate on what exactly started the feud, everyone knows what brought the dentists together: the nationwide “denta-corps” that can out-price, out-service, and out-anything their small, family dental practices.

Although the partnership talks had begun years before, July 19th was their agreed-upon D-Day, wherein the four separate practices would officially combine to be Rutherford, Price, Atkinson, Strickland, and Associates Dentistry, Inc. In the months leading up to D-Day, and after much bickering and debate, the four dentists got everything ready from new signage to new logoed toothbrushes. The only thing that remained was combining their computer systems. That task was left to Aaron B, an IT consultant who had the pleasure of working with each office through many of the “ugly years.”

Fortunately for Aaron, each of the dentists used the same practice management system: Beaglesoft’s Practice EnterprisePlus. It certainly wasn’t the best software, but it was among the most expensive. Perhaps more-importantly, Beaglesoft offered all sorts of outrageously-priced add-ons that the dentists could buy to one-up one another. For example, a wand-shaped oral camera required a $7,000-per-site “camera driver,” in addition to the ungodly amount the camera cost in the first place. When Aaron plugged the camera into his laptop (which didn’t have any Beaglesoft software running), it was recognized as a plug-and-play camera and immediately started streaming video. Not that it mattered though; as soon as Dr. Price had his installed, the other three dentists had to get one as well. 

“While our prices might seem high,” a Beaglesoft rep once told Aaron, “keep in mind that you’re paying for quality. Our products are rigorously tested to work in today’s and tomorrow’s high-tech dental office.”

And for that reason, Aaron wasn’t too worried about Beaglesoft’s portion of the D-Day migration. They assured him on several occasions that their latest and greatest – Beaglesoft Practice EnterprisePlus Elite with Networking – could network a “virtually unlimited” number of practices. The four Aaron was linking together was “chump change” compared to what the system could do.

When Friday, July 16th – the weekend before D-Day – had finally come, the dentists were ready. They closed their offices at noon and, per Beaglesoft’s instructions, initiated the migration process. Over the next twelve hours, so the plan went, each practice’s system would upload its data to the Central Server at Dr. Strickland’s office. Naturally, none of the other dentists were too thrilled about having a “Central Server”, especially one at Dr. Strickland’s.

Aaron arrived at Dr. Strickland’s office early Saturday morning to find a surprising message on the server: “Migration Completed Successfully.” He ran through some initial smoke tests and it appeared that the migration did, in fact, complete successfully. After a trip to the other three dentist offices, Aaron verified that he could access any patient’s file from any office. He called up the four dentists to share the good news: come Monday, they should be in business.

Monday came and, shortly thereafter, the four offices were out of business. The system had completely grinded to a halt. Every click of the mouse was met with a several-minute delay, and every delayed response was met with more clicking. Aaron, who happened to be on-site “just in case,” immediately suspected the newly-installed T1 lines.

Aaron called up the phone company. They ran a few diagnostics on their end, only to find that each office’s T1 line was completely pegged. Most certainly, the technician claimed, the problem was on their end. Perhaps a router gone haywire?

Aaron checked and rechecked the switches, the hardware, the ports, and the routers. He rebooted once, twice, and thrice. Everything seemed functional, aside from the fact that the Central Server was firing packets off non-stop.

Not sure what else to do, Aaron bridged his laptop between the Central Server and its switch. Within seconds, he logged hundreds of megabytes of data, far too much for anyone to go through in the middle of such a crisis. He had no choice but to take the “satellite” dentists offline to investigate the problem. They grew suspicious of this and, of course, Dr. Strickland, and demanded that there was foul-play involved.

With only a couple users accessing the Beaglesoft system, Aaron was able to get a handle on the traffic. As he assuaged the other dentists over the phone, Aaron noticed that a lot of the data seemed to be coming from SQL Server. Specifically, it was from queries like this:

 SELECT * FROM Patients

Digging further, Aaron figured out that, whenever a user wanted to look up a patient, the program would run “SELECT * FROM Patients” query, returning the entire Patients table to the client computer.

What’s worse, the query would run any time a character was typed in the patient search box. Searching for just his first name – A-A-R-O-N – resulted in five SELECT * queries.

What’s still worse, the same method of client-side filtering was used for appointments. It wouldn’t just get, say, today’s appointments. Or this week’s. Or, say, any that haven’t happened yet. It would query for every appointment that they ever had or would have in the future. That’s about 100,000 rows.

And since each appointment involved a patient, it’d have to fire off queries for each appointment to download and filter information about the patient.

It was apparent that Beaglesoft’s “rigorous testing” of “Practice EnterprisePlus Elite with Networking” involved, perhaps, a single computer and two, maybe three patient records. He immediately called Beaglesoft to report their issues and a demand a resolution.


(an actual screenshot from Beaglesoft’s install directory)

Within a few hours, three of Beaglesoft’s finest were on a plane to New Portlandopolis. When they arrived, two of them split off to work on “de-migrating” the system into the original four databases. The other Beaglesoftie, a product manager, worked on “damage control” – and boy did she have a lot of damage to control.

By that time – ten hours into Rutherford, Price, Atkinson, Strickland, and Associates Dentistry, Inc’s first day – the dentists were at each other’s throats. Dr. Price blamed the mess on Dr. Strickland who was “online the entire time, ” while Dr. Strickland was convinced that Dr. Atkinson had somehow “spiked the T1s,” while Dr. Rutherford believed that Dr. Price “wanted to retire, and was bringing everyone else down.” Eventually, Dr. Atkinson stormed out and tore down the new "Rutherford, Price, Atkinson, Strickland, and Associates Dentistry, Inc" sign. As he stomped the sign into pieces, he vowed never to work together again. Things pretty much went downhill from there.

After things cooled down a bit with the dentists, the product manager met with Aaron. Angered that his future prospects looked like a repeat of the “ugly years”, he lambasted Beaglesoft’s latest and greatest, and asked why, oh why, they couldn’t have done some client-side caching. Or, at the very least, use the magical WHERE clause.

She was astonished by Aaron’s technical knowledge and eagerly asked more questions on “WHERE clauses and other optimization techniques.” Near the end of their conversation, she actually offered Aaron a job as a Lead Developer at Beaglesoft.

Aaron ended up declining the position. He figured that they’d never be willing to tar and feather the existing development staff. That, and after the Beaglesoft Fiasco of 2004 (as it’s called today), he’d have a lot of cleaning up and intra-dentist diplomacy to do. Besides, how could he miss taking part in the latest exciting chapter in the dentistry history of New Portlandopolis?




Categories: Computer Humor | Computers | Humor | Programming | Technology | The Daily WTF
Article :: Software [In]security: vBSIMM Take Two (BSIMM for Vendors Revised)

Gary McGraw and Sammy Migues introduce a revised, compact version of the BSIMM for vendors called vBSIMM, which can be thought of as a foundational security control for vendor management of third-party software providers.

Categories: Agile Programming | Computers | InformIT | InformIT Agile Programming | Programming | Project Management | Technology
Article :: Objective-C Memory Management

This chapter provides a broad look at memory management in Objective-C.

Categories: Computers | InformIT | InformIT Programming | Programming | Technology
CodeSOD: The Percent Conversion

"Lucky me," writes Joe from the Submit-To-WTF Visual Studio Add-In, "I just inherited a home-grown system information application."

"Judging from the code the previous programmer wrote, this is sadly one of the better pieces."

Public ReadOnly Property BatteryPercent()
    ' This code will retrieve the BatteryLifePercent property and convert it to a percent.
    Get
        If SystemInformation.PowerStatus.BatteryLifePercent.ToString = "1" Then
            Return "100%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.99" Then
            Return "99%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.98" Then
            Return "98%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.97" Then
            Return "97%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.96" Then
            Return "96%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.95" Then
            Return "95%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.94" Then
            Return "94%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.93" Then
            Return "93%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.92" Then
            Return "92%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.91" Then
            Return "91%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.9" Then
            Return "90%"
        '...
        'snip
        '...
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.2" Then
            Return "20%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.19" Then
            Return "19%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.18" Then
            Return "18%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.17" Then
            Return "17%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.16" Then
            Return "16%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.15" Then
            Return "15%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.14" Then
            Return "14%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.13" Then
            Return "13%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.12" Then
            Return "12%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.11" Then
            Return "11%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.1" Then
            Return "10%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.09" Then
            Return "9%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.08" Then
            Return "8%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.07" Then
            Return "7%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.06" Then
            Return "6%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.05" Then
            Return "5%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.04" Then
            Return "4%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.03" Then
            Return "3%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.02" Then
            Return "2%"
        ElseIf SystemInformation.PowerStatus.BatteryLifePercent.ToString = "0.01" Then
            Return "1%"
        Else
            Return "NA"
        End If
    End Get
End Property




Categories: Computer Humor | Computers | Humor | Programming | Technology | The Daily WTF