Mon 06 September, 2010



add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 

add to del.icio.us. look up in del.icio.us. 
About halfway down on page 6 you will find details about the various accepted ways to file a comment.
Please don't tl;dr the FCC's notice; they're asking for comments on each individual point in the proposal. Let's do this!
[link] [52 comments]
add to del.icio.us. look up in del.icio.us. 
[link] [67 comments]
add to del.icio.us. look up in del.icio.us. 
[link] [24 comments]
add to del.icio.us. look up in del.icio.us. 

add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
![]() The Guardian | Is Craigslist bluffing over adult ads? CNET The strangest massage I ever had consisted of the spa masseuse waving her hands all over my body, supposedly sending positive energy its way, without ever touching it. Some are speculating that Craigslist, having removed its Adult ... Craigslist's 'Adult Services' decision a blow to free speech? What's Behind Craigslist's Self-Censorship? Craigslist Shuts Down ''Adult Services'' Section |
add to del.icio.us. look up in del.icio.us. 
| Seriously... All the new movies are getting the focus for the games, but don't you think their missing out on something here? [link] [131 comments] |
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 


[link] [131 comments]
add to del.icio.us. look up in del.icio.us. 

| | submitted by PokeyPenguin to gaming [link] [66 comments] |
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
Hi, reddit. If you haven't been paying attention, we know Stephen is a fan of reddit. But because his schedule is so busy, we haven't been able to get him for an AMA interview. Since I'm going to probably have a good chance of asking him <one> question, what should it be?
[link] [238 comments]
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
![]() MedIndia | Stem-Cell Research Foes Urge US Judge to Keep Order in Force BusinessWeek Sept. 6 (Bloomberg) -- An order halting government support for any activity using cells taken from human embryos should be kept in force while the Obama administration appeals, opponents of such research argued. ... Stem-Cell Research Foes Urge Judge to Keep Order in Force During Appeal Federal Court Slams Embryonic Stem Cell Research Liver cells created from human skin |
add to del.icio.us. look up in del.icio.us. 

add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
![]() The Age | Duke Nukem Returning in 2011? Digitaltrends.com It's been thirteen years in the making, but Gearbox says Duke Nukem Forever is coming to the PS3, Xbox 360, and PC in 2011. Back on April 28, 1997, something interesting happened in the video game world: George Broussard announced Duke Nukem Forever, ... Duke Nukem Forever Lives - Release in 2011 Duke Nukem Forever returns in 2011 after a 13-year wait Gearbox New Owners of Duke Nukem IP |
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
![]() Mac Rumors | Apple spends $1M per month on Google AdWords - report Apple Insider By Slash Lane A leaked internal document from Google shows how much companies spend with the search giant on AdWords, and Apple is listed as investing nearly $1 million in a one-month span. The document, obtained by AdAge, gives a glimpse into the ... AdAge reveals secret Google Adwords big spenders Apple Spent Nearly $1 Million on Google Search Advertising in June Here's How Much Big Companies Spend Advertising On Google Search |
add to del.icio.us. look up in del.icio.us. 
A determined Republican stall campaign in the Senate has sidetracked so many of the men and women nominated by President Barack Obama for judgeships that he has put fewer people on the bench than any president since Richard Nixon at a similar point in his first term 40 years ago.
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
![]() CBC.ca | Samsung Mobile Display to Boost 2011 Production Wall Street Journal Samsung Mobile Display, which has had difficulty meeting demand for ultra-thin screens for smartphones, expects its production capacity to increase sharply when its new facility opens in July. Capacity will go up to 30 million screens ... Will Samsung's Galaxy Tab be Pricey or Cheap? Maybe Both Samsung Galaxy Tab price pinpointed to $200-$1000 Vodafone preps Galaxy Tab for October launch |
add to del.icio.us. look up in del.icio.us. 
Never before have so many governorships been up for grabs -- and with so much at stake.
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
I rang the doorbell of my ex-husband Larry's house, a jar of gefilte fish in one hand, boxed coconut cake in the other. To date I'd been to the house on Thunder Lake only to drop off the kids. But today I was here with my husband, Eric, and two stepchildren, Luke and Jamie, for Seder dinner.
add to del.icio.us. look up in del.icio.us. 
The most famous prune in the world, the pruneau d'Agen, has been a celebrated product of southwest France since at least the 1500s, outliving -- and even thriving because of -- several nearly existential threats.
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
![]() Afterdawn.com | HTC Android GSM, CDMA Slider Info Leaked by FCC eWeek The FCC leaks photos of HTC's upcoming Google Android-powered smartphone, a slider featuring a QWERTY keyboard, a 4-in. touch screen, and dual 3G modems. Information and photos concerning mobile handset maker HTC's latest Google Android powered slider ... FCC info leaked about HTC Android GSM/CDMA Slider FCC approves HTC GSM/CDMA Android slider smartphone for Verizon New HTC Android Slider Offers Both GSM, CDMA 3G |
add to del.icio.us. look up in del.icio.us. 

[link] [605 comments]
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
Much of the buzz in smartphone circles in the last year or two -- at least the part that hasn't gone to Apple and the iPhone -- has focused on HTC, the Taiwanese manufacturer that makes some of the slickest mobile hardware around. It was HTC, for example, that Google chose to make its Nexus One, the model I have been carrying around since early this year.
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
The great political failure of the 1960s was the New Left's inability to bring the labor movement into its great liberationist tent. There were lots of reasons for that, one of them being that most big union leaders didn't want to be in that stinky tent with a lot of hippies, feminists, dashiki-wearing black militants and "fags." (That last comes from AFL-CIO leader George Meany's description of the New York delegation to the disastrous 1972 Democratic convention: "They've got six open fags and only three AFL-CIO representatives!") Also, not a small matter: The New Left opposed the Vietnam War; again, most labor leaders supported it.
add to del.icio.us. look up in del.icio.us. 
I must be honest, I was pretty unimpressed with Twitter @Anywhere when it first launched earlier this year. Of course I hadn’t bothered to check it out, but it seemed like ‘Integration Lite’ – just a very simple way for bloggers to include Twitter on their site. As Wired reported back in March Twitter’s Evan [...]
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
![]() TMCnet | Hawking book explains creation of universe minus God USA Today Evan Agostini, AP By Dan Vergano, USA TODAY Describing the creator as "not necessary" in his latest book is just another day at the office for that whimsical scamp Stephen Hawking, better known as "one of the foremost theoretical physicists of this ... Hawking: The Universe does not need a creator Stephen Hawking is Such a Troublemaker God and Stephen Hawking |
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
Here's a sad truth about TV: Despite the potential to evolve over the course of several seasons, most TV characters remain stagnant, doing little more than imitating themselves season after season. Likewise, most TV shows have one or two good seasons, and once the show's creator departs for a multimillion-dollar development deal elsewhere, the remaining writers try to replicate the show's best episodes over and over again.
add to del.icio.us. look up in del.icio.us. 
So was in town this morning and thought I'd pick up a form from the Disney Store for a part time job advertised online. So it's about 8.50, I can see the staff inside just getting ready to open so I just wait outside. In a few minutes one of the staff open the front door and I go to ask for an application form. She told me the store wasn't open yet but she wanted me to "help open the store." I politely laughed and she insisted I came in. I noticed a velvet rope with a giant prop padlock on it and then all of a sudden the lights dimmed and epic Disney music started blasting. Fucking tinkerbell started flying around the store and projections of fireworks started going off and then out of the darkness, A WOMAN COMES SOLEMNLY CARRYING A 3 FOOT FUCKING KEY OVER HER HEAD. I was presented the key and opened the store. I was given a miniature key for keeps. I walked out and couldn't stop laughing, composed myself and went home. THEY DO THIS EVERY MORNING.
EDIT: Here's a picture of the key I got.
[link] [933 comments]
add to del.icio.us. look up in del.icio.us. 
[link] [58 comments]
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
A single question came to mind when I heard that Craigslist had taken down its "adult services" section on Saturday: Where will sex workers turn next? So far, the answer seems to be … Craigslist.
add to del.icio.us. look up in del.icio.us. 
[link] [385 comments]
add to del.icio.us. look up in del.icio.us. 
| | submitted by alexgdorman to gaming [link] [224 comments] |
add to del.icio.us. look up in del.icio.us. 
![]() DailyTech | Apple's iOS Dips in Internet Traffic Market Share, Android Soars DailyTech Quantcast's market research shows iOS devices to be plunging in market share, while Android is soaring upward. (Source: Quantcast) A new study from market research firm Quantcast offers some interesting insight into the state of the smartphone market. ... Android now controls a quarter of US web traffic Google Android Smartphones Race to Catch Apple iPhone Android Extends Mobile Web Upswing In August |
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
There are 3 items, all related to books, which I wanted to note for the holiday:
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
In this video Nick gives you a brief introduction to web accessibility and talks about the organisations that set accessibility standards. You’ll also find out why accessibility is important to the health of the web. runMobileCompatibilityScript('myExperience593380655001', 'anId'); brightcove.createExperiences(); For more videos be sure to check out Think Vitamin Membership, new video tutorials are added daily.
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
![]() wwwery (blog) | Motorola Takes a Dig at Apple Yet Again Techtree.com Looks like Apple's competitors have caught up with it when it comes to taking a dig at competition. Apple, who is traditionally known for its cheeky advertising campaigns against its competitors (most often, ripping them to shreds, in a very subtle ... 5 ways to make Android 2.1 work like Froyo Motorola Droid X Review Motorola Droid R2-D2 special edition gets a landing dock |
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. Sun 05 September, 2010

add to del.icio.us. look up in del.icio.us. 

Is Katniss Everdeen the antidote to Bella Swan? That's a question guaranteed to irk fans of "The Hunger Games," Suzanne Collins' trilogy of dystopian young-adult novels, the latest of which, "Mockingjay," has currently captured the No. 1 spot on the nation's bestseller lists. "Hunger Games" fans don't appreciate seeing Collins' far more sober and ambitious books likened to "Twilight," Stephenie Meyer's swoony vampire romances. Too bad, because so much about "The Hunger Games," from its crossover success with adults to the crowds who packed bookstores when "Mockingjay" went on sale at midnight on Aug. 24 to its teenage narrator with her tangled love life, prompts the comparison.
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
Our collective animal passion has never seemed greater. Studies show we spend as much on our pets in a recession than when not in one, animal welfare laws continue to strengthen, and acts of animal cruelty caught on film and uploaded to the Web create global furor and condemnation. Animals, their furry forebears would surely say, have never had it so good.
add to del.icio.us. look up in del.icio.us. 
(UPDATED) To an audience of about 50 people -- fully half of whom were members of the press -- Pastor Bill Keller launched his 9-11 Christian Center at ground zero this morning with a fiery sermon targeting Muslims and Mormons as hell-bound followers of false faiths. Keller took aim in particular at Glenn Beck, a Mormon, and Imam Rauf, the organizer of the Park51 Islamic community center.
add to del.icio.us. look up in del.icio.us. 
Government agencies are seeking broad new authority to ramp up killings and removals of gray wolves in the Northern Rockies and Great Lakes, despite two recent court actions that restored the animal's endangered status in every state except Alaska and Minnesota.
add to del.icio.us. look up in del.icio.us. 
In the turbulent year of the tea party, Republican Rep. Mike Castle of Delaware set out to jangle no nerves as he ran for a Senate seat long held by Vice President Joseph Biden. It's the way Republican strategists originally envisioned 2010, a roster of seasoned politicians pointing the party toward significant gains in the Senate.
add to del.icio.us. look up in del.icio.us. 
With the fight over Congress intensifying and President Obama’s agenda hanging in the balance, coverage of this fall's governor’s races has largely fallen by the wayside. But the outcomes of some of these races will have significant consequences -- none more so than the contest in Texas, between Republican incumbent Rick Perry and Democrat Bill White, the former mayor of Houston.
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. Sat 04 September, 2010

add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
It's tough not to greet certain bits of news with preemptive disappointment. When I learned that the CW would be remaking Luc Besson's "La Femme Nikita" for the small screen, I filed it right next to reports that Lady Gaga would rather "die young and a legend" than grow old and that David Hasselhoff will be appearing on "Dancing With the Stars" this fall. Hoping for a CW version of Nikita that doesn't feature lip-glossed teenagers in matchstick jeans karate-chopping each other ineffectually feels roughly as masochistic as daring to dream that Lady Gaga might one day keep her many, many thoughts about herself to herself, or that David Hasselhoff might finally disappear into the void, never to be seen or heard from again.
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
Some parents are gentle in their love. When I was at my friends' houses, one child or another would complain, "We're bored," and without thinking, a mother might suggest various board games, offer to rent a video, recommend we play house or go swimming. If anyone mistakenly piped up around my father, he'd say, "Aw, go play in the street," kick up his recliner, and dismiss us with a wave of his hand.
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
Craigslist has apparently closed the adult services section of its website, two weeks after 17 state attorneys general demanded it shut down the section.
add to del.icio.us. look up in del.icio.us. 
Forecasters say Tropical Storm Earl has made landfall near Western Head, Nova Scotia.
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. Fri 03 September, 2010

![]() Telegraph.co.uk | Don't look for Adobe Flash on Apple's iPads, iPhones soon Washington Post I was traveling last week to cover Apple's iPod and Apple TV event Wednesday (and writing an extra column based on that). So this week, I offer questions taken from Friday's Web chat. The iPad's future Concerning the iPad, ... iPod Touch Features Vibrating Motor for FaceTime Notifications 38 Per Cent Of iOS Devices Are iPod Touch Why does Steve Jobs play fast and loose with iPod touch sales numbers? |
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
.bbpBox22885968975 {background:url(http://a3.twimg.com/profile_background_images/91221239/ryan2.png) #022330;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block} ‘UX Professional’ is a bullshit job title. It’s just a way to over-charge naive clients. All web designers should be UX prosless than a minute ago via Twitter [...]
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
What's that, you say? We should have an entire Error'd dedicated to CAPTCHA images? Sure, why not!
Alex van Herwijnen spotted this interesting problem presented...
... which, of course Dan Ferrante noticed that ESPN provided a solution for.
You're right though, spousal abuse is not funny. But I know what is! Bathroom humor, like what Scott Lewis found at Ticketmaster!
See? Even Avast! anti-virus software is getting a peece of that action (from Viront).
"Really?" Justin Self wrote, "I have to type this? I just needed some help with Java!"
Well Justin, help was out there... but not for your Java. Matt found this combo, which seems to help with the previous pain in the butt.
I guess I'll take the advice that Tim Gourley saw, at keep it clean from now on.
Moving on, Andy wondered if Bloglines really wanted their CAPTCHA to be linked to the KKK.
"Admittedly, this took me a lot longer to solve than usual," wrote Dan Thompson, "but when I finally got to upload my image, I felt a real sense of achievement."
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. Thu 02 September, 2010

add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
The Best (from Chris)
A while back, I helped interview for a programmer position on the web team. After talking to a number of candidates, we finally settled on an older gentlemen, probably in his late 50s. It wasn't an easy decision. Not only were his salary requirements above what we planned to pay, he had a few personality quirks. For example, a large part of his interview entailed him describing how he was a master composer of music, and had published songs in nearly every genre, including country, rap, pop, etc. But no matter, his experience and technical skills were top-notch.
After making an offer that met his salary requirements, the candidate made a counter offer: fifteen-thousand dollars more annually plus a signing bonus. Unfortunately, our budget couldn't accommodate that, and we declined. Negotiations after that failed, so we formally rescinded the offer for employment so we could talk to more candidates.
Later that day, the CEO of company received a rather childish email from the gentleman. He rambled on about age discrimination, made other accusations, and stated that he "knew" that we were hiring the "other" man that he had met when leaving his interview. His closing words were: "you could have had the best, now you'll just have the rest!"
The "other" man he referred to was in his early 30s, and was interviewing for an entirely different position (business analyst) in an entirely different department. Looking back, we were all pretty happy that he didn't accept the position.
The TDWTF Interview (from Christian Riesen)
Two years ago, I was on the job hunt, and one company that looked interesting was a university spinoff. At the interview, I learned that they dealt with some specialization software that had to talk to a few different systems. Most of the code was in PHP, but there also were some .NET and Java components that were used to interface with the hardware's proprietary drivers.
One thing they were particularly proud of was the fact that the system was recently rewritten from Perl into PHP. Their pride came from the fact that none of them had coded PHP before that, but they had a strong theoretical knowledge, being university guys and all.
Next, they told me about the environment that they work in. As it turned out, the five-man crew worked all in the same room we were interviewing in: a factory attic converted loft style, with one wall made of glass in it so the conference "room" we sat in wouldn't disturb the others. Each employee had their own desk that was about twenty feet from another, which meant there was a lot of yelling going on. In addition, everyone used whatever the hell they wanted to code on whatever operating system they wanted: Windows, Linux, Mac OSX and one even swore on FreeBSD.
Then came the general technical part of the interview: how I would setup a class, what I would do with a certain language construct, how I would solve a certain problem or assess a situation, all the fun things. Then they showed me two half pages of code in PHP. They told me to look at the code carefully and, if I wanted to change anything, write on the paper what I would change and why. As that would take some time, they left me to it for about twenty minutes. I was certain that they had set me up with a TDWTF-style interview, where they'd pick out a fun code WTF (actually, it looked like this one) and have me turn a convoluted two-page mess into a two lines of code.
When they came back, I complimented them on the clever examples of bad code and presented them with my rewrite. One of interviewers — the chattier of the two — didn't say another word; he was clearly upset, and I was half-concerned it might get physical. The other guy was a bit better, but he also wore a rather large frown on his face. "This is from our production code", was the reply.
I left the interview shortly after that, with a short bye from the one guy, and just a short nod with some nasty stares from the once-chatty guy.
The Storm-out (from Joshua Armstrong)
I've always dreamed of storming out of an interview, but I've never actually realized that goal. That is, until my interview with a certain "tech recruiting" firm.
First things first, I was lured in under the guise that I'd be actually interviewing for a job, not being primped for another interview. The firm's client was, as the technical recruiter put it, "an ISP like Yahoo! or Google." I thought to myself, neither of those companies are ISPs, but I didn't say anything.
When we moved on to the technical portion of the interview, his first question was "do you had any experience working at a server." And just to be extra clear, those were his actual words: "working at a server."
"Well, yeah of course," I diplomatically responded, "I am a network admin, after all... and I'm physically at servers all the time. That's what you meant, right?"
"No no," he clarified, "were any of the businesses you've worked at servers? That is, would you consider them to be a server?"
I said, "Err, uhh.... I don't know," and things went downhill from there.
"Have you ever connected to the database?" he asked next.
"Huh? Do you mean in code? Admin tools? Which database platform do you mean?"
He paused for a moment and said, "sounds good to me. Do you have experience working at an ISP?"
"I think you're using a different definition of ISP than me," I responded, "what I mean is... I wouldn't have considered Google to be an ISP, but a search engine. Can you clarify?"
"No, no. They're actually both ISPs, as they allow people to access websites. Would you consider any of the companies you worked at to be an ISP?"
"Uhh... I guess not."
He scribbled something down on his paper mumbling something about how a bank is probably an ISP and added, "have you troubleshot IIS?"
"Not, but I have maintained several Apache servers."
"Oh good, then you have since Apache is IIS. Moving on, what's the diff—"
"Err," I cut him off, "they're both web servers, but Apache is not IIS."
"No, no. It is. Apache is actually a kind of IIS, so yes, you have troubleshot IIS. Anyway, what's the difference between layer 7 routing and layer 4 routing?"
Finally, an answer I was prepared for. "Layer 7 is the Application Layer, and routing focuses on requests to resources that will be fulfilled in the shortest time. Layer 4, the Transport Layer, routing focuses on ensuring that all paths to a host are utilized proportionally to their bandwidth and response"
"Actually," he gave a confused look, "I was looking for an answer involving, uh, DNS pools and host headers. Shall we just say that was your answer?"
I was pretty frustrated by that point, as I knew this interview was going nowhere, and the "technical recruiter" was grasping at straws and hoping to get me in front of thier "ISP" client. I said, "actually, I was just looking for the door," and got up and left.
Later that day, I just got an e-mail from him thanking me for his time, and asking me to forward two references from each job. He also said that he'd taken the liberty of rewriting my resume to include a couple of things about my experience troubleshooting IIS, and that he was planning on submitting it to his client as soon as I got the references. I ignored the email.
Have tales from your own interview? Then be pal and share them!
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
TextMate has become an essential part of my development arsenal over the last few years. When you first open up the application, you may be wondering what all the fuss is about- at first glance it looks like any other text editor. The true beauty of TextMate is the plethora of bundles, add-ons, keyboard shortcuts [...]
add to del.icio.us. look up in del.icio.us. 
Feb 7-9th 2011 Get ready for the best event you’ve ever experienced. Sign up to get notified when Early Bird tickets go on sale.
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
Hey there! It’s Wednesday, so this mid-week roundup is devoted to all things business and development. Some links are newsworthy, some retweeted across Twitter, and others just meet our “awesomeness” requirement, and regardless we hope you’ll enjoy them. Without further delay: How do you measure your customer happiness levels? 37 Signals built a little app [...]
add to del.icio.us. look up in del.icio.us. Wed 01 September, 2010

add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
In this video Jim looks at some of the tools that are essential in any JavaScript programmer’s toolkit. We also introduce some of the basic types in JavaScript, and how to create them. runMobileCompatibilityScript('myExperience593380655001', 'anId'); brightcove.createExperiences(); For more videos be sure to check out Think Vitamin Membership, new video tutorials are added daily.
add to del.icio.us. look up in del.icio.us. 
"I was recently assigned to work on a team that maintains a fairly large product," writes Aaron, "at first, I was a bit overwhelmed by the complexity of the architecture. There were countless layers of abstraction, thousands and thousands of classes, and design patterns galore. Since it was such a large project – and my first large project – I figured that the architectural complexity was simply par for the course."
“Then I started looking at the code a little more closely. If I had two words to describe it, they’d be ‘unnecessary complexity.’ And if I had one snippet to describe it, it would be this.”
private void SetAccount(RequisitionData.RequisitionItem requisitionItem,
AccountData.Account account, bool automation)
{
bool allowSetAccount = false;
if(account != null)
{
// if the account entry is being set by automation, ensure that
// the user hasn't already set a value
if (automation)
{
if (!requisitionItem.IsAccountCodeNull())
{
if (requisitionItem.AccountCode == string.Empty)
allowSetAccount = true;
else
allowSetAccount = true;
}
else
allowSetAccount = true;
}
else
allowSetAccount = true;
if (allowSetAccount)
{
requisitionItem.AccountID = account.ID;
requisitionItem.AccountCode = account.Code;
}
}
}
Aaron continued, "the beauty of it is that the method is private within the class, and has an 'automation' boolean parameter. This parameter is always passed as true."
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
I’d like to share six very important things you should be measuring in your recurring revenue web app. We launched TVM several months ago and it’s going (thankfully) amazingly well. After launch, the biggest challenge became the ability to identify, track, digest and act upon key metrics. After a lot of discussion with old pros [...]
add to del.icio.us. look up in del.icio.us. Tue 31 August, 2010

As discussed on the most recent episode of Think Vitamin Radio we have been working hard on the redesign of this site and have been looking at how the site reacts when rendered on the iPhone using media queries (if these are new to you then Brian Suda’s most recent article will get you started). [...]
add to del.icio.us. look up in del.icio.us. 
"Do you think it's wise to have consultants running our IT department?" Holger asked. It was an honest question, worded as diplomatically as possible. Holger's company had more consultants on hand than actual IT staff.
"Holger, these folks are experts," his manager replied. "It isn't cost effective to hire-on this level of expertise full time. We may pay a little more up front, but when we don't need the consultants anymore, we can hand it off to our internal people."
Holger left that discussion pretty sure he had just been called incompetent. Maybe I should ask the consultants if they're hiring, Holger wondered to himself, thinking of the big money they pulled down relative to his salary. The thought was still percolating in his head when he sat down with the two newest consultants, Zack and Jack for their status meeting.
Holger hooked his laptop up to the projector and ran through a few recent changes in the configuration database, discussed the implications, and then moved onto other topics. He stopped paying attention to the computer, and it eventually dropped to its screensaver. Moments later, there was some snickering from Zack.
"Having some computer trouble?" Jack asked, mockery in his tone.
Holger glanced at the projection screen and saw that his screensaver was was running merrily. It merrily painted a BSOD to the screen, with plausible driver dumps, merrily churned the disk a little, like it was saving the contents of RAM, and merrily ran through a simulated reboot sequence. After which, the process repeated itself, merrily. "Oh," Holger said, "that happens sometimes. I've got it under control. No worries."
"Yeah, whatever," Jack said. The meeting continued.
The product of the meeting, like too many other meetings with consultants, resulted in the need for another meeting. "Let's see what my calendar looks like," Holger said. He grabbed the mouse, killed the screensaver, and called up his email client.
Zack gasped. "How did you do that?" Jack marveled.
"Oh, that?" Holger said. With his best deadpan, he said, "I got tired of waiting for the reboots to complete. I put together a tool that does an automatic fix and restart, letting me just continue right from where I left off."
Holger waited a beat. After a moment, he was certain that these consultants would realize he was pulling their leg.
Zack was up in a flash and quietly closed the door. Jack leaned across the table towards Holger and asked, "Did you make that on company time? And does anyone here know if you did? Because before we go back into that hallway, I want to buy this off of you."
"You don't have that kind of cash," Holger said.
"No, but I can put it on the expense account and then pay it off when I get VC funding," Jack said.
Holger spent the next fifteen minutes declining their offers to buy his tool. In the process, he discovered that the consultants had creative and unethical ideas about how to quickly get funding, and that one of them had a trophy wife that would do anything for the kinds of profits they were talking about. "And I do mean anything," Zack said with a leer.
Finally, Holger "confessed". "Look, you guys are generous and all, but I've already signed a contract with another company. Even if you could beat their offer, I can't break a contract."
"Sure you can!"
Holger left the meeting without any interest in finding out if their company had any openings.
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
“ The limits of my language are the limits of my mind. All I know is what I have words for. ”
Ludwig Wittgenstein
add to del.icio.us. look up in del.icio.us. Mon 30 August, 2010

add to del.icio.us. look up in del.icio.us. 
Think of all those old applications you’ve had to maintain. You know the type: the ones written by long-forgotten developers in long-lost languages. The ones that, after spending days searching for that one line of code that needs to be changed, you frustratingly decree “this f%*#@ thing needs to be rewritten.” And, naturally, the ones that never are, nor never will be rewritten.
Call it luck or persistence, but after dozens and dozens of maintenance requests over the years, Israel Brewster finally was given the opportunity to rewrite an application. From scratch. And the right way, this time. No shoddy VB6 front-end; no horribly-designed SQL Server 2000 (only) database; and certainly no Microsoft Access-based administration tool.
Though, after his third straight week of digging through form validation logic requirements – many of which were quadruplicated (or more), inconsistent, and often incorrect –he’s started to question if a rewrite is even possible. Consider, for example, Command 696: a method named that simply because Command1 through Command695 were already taken.
Private Sub Command696_Click()
On Error GoTo Err_Command696_Click
Dim stDocName As String
Dim Response As Integer
If Frame500 = 1 And pax > 37 Then
MsgBox "CHECK PAX DASH 8 LIMIT 37 SEATS", vbOKOnly
Else
End If
If Frame500 = 2 And pax > 29 Then
MsgBox "CHECK PAX DASH 8 LIMIT 29 SEATS", vbOKOnly
Else
End If
If totalload1 > 2000 Then
MsgBox "OVERWEIGHT Fwd Shelf ", vbOKOnly
Else
End If
If ttshelf > 1000 Then
MsgBox "OVERWEIGHT Aft Shelf ", vbOKOnly
Else
End If
If totalload1 + ttshelf > 2000 Then
MsgBox "OVERWEIGHT Aft Compartment max 2000 lbs ", vbOKOnly
Else
End If
If Frame500 = 1 And totalloadsecd > 0 Then
MsgBox "DASH 8 WITHOUT SECTION D ", vbOKOnly
Else
End If
If Frame500 = 2 And totalloadsecd > 2150 Then
MsgBox "OVERWEIGHT SECTION D ", vbOKOnly
Else
End If
If Remaining < 0 Then
MsgBox "DASH 8 OVERWEIGHT REDUCE LOAD !!!!", vbOKOnly
Else
End If
If ttload <= 0 Then
Response = MsgBox("ARE YOU SURE AFT CARGO COMPARTMENT IS EMPTY!!!!", vbYesNo)
Else
Response = 6
End If
If Frame500 = 1 And pax <= 37 And totalload1 <= 2000 And _
ttshelf <= 1000 And totalloadsecd = 0 And _
Remaining >= 0 And totalload1 + ttshelf <= 2000 And Response = 6 Then
stDocName = "csaprintinfo37seats"
DoCmd.OpenReport stDocName, acPreview
Else
End If
If Frame500 = 2 And pax <= 29 And totalload1 <= 2000 And _
ttshelf <= 1000 And totalloadsecd <= 2150 And _
Remaining >= 0 And totalload1 + ttshelf <= 2000 And Response = 6 Then
stDocName = "csaprintinfo29seats"
DoCmd.OpenReport stDocName, acPreview
Else
End If
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
Via Phil Franks comes an interesting HTML5/CSS3 site for There Studio, which is a kind of coworking space in London:

The site itself has a number of circles with information bouncing on the screen that respond to mouse clicks and moves.
Let's crack the site open using View Source and see how they are doing things. First, they have a repeated background with a little plus symbol with the following style rule on the <body> tag:
The textual content in each of the circles is clean semantic HTML that is search engine friendly:
To turn that into this:

The <h3> is first transformed into having an underline with the padding and margin being on the bottom:
border-bottom: 1px solid #ccc;
display: block;
font-size: 25px;
font-weight: normal;
padding: 0 0 10px;
margin: 0 0 8px;
}
JavaScript creates the circle. The script tags themselves are at the end of the HTML page at the bottom of the <body> tag, a good performance practice in general.
The heart of drawing each circle is in the createBall and createContentBall methods. If a ball will have HTML content, then the createContentBall method is used, otherwise the createBall method is used. Let's look at the createContentBall method; we'll break it down:
var element = document.createElement( 'div' );
element.className = className;
element.width = element.height = size;
element.style.position = 'absolute';
element.style.left = -size + 'px';
element.style.top = -size + 'px';
element.style.cursor = "default";
canvas.appendChild(element);
elements.push( element );
var circle = document.createElement( 'canvas' );
circle.width = size;
circle.height = size;
if (className !=='image' && className !=='image first') {
var graphics = circle.getContext( '2d' );
graphics.fillStyle = color;
graphics.beginPath();
graphics.arc( size * .5, size * .5, size * .5, 0, PI2, true );
graphics.closePath();
graphics.fill();
}
element.appendChild( circle );
content = document.createElement( 'div' );
content.className = "content";
content.onSelectStart = null;
content.innerHTML = html;
element.appendChild(content);
if (className !=='image' && className !=='image first' ) {
content.style.width = (size - contentPadding*2) + 'px';
content.style.left = (((size - content.clientWidth) / 2)) +'px';
content.style.top = ((size - content.clientHeight) / 2) +'px';
}
var b2body = new b2BodyDef();
var circle = new b2CircleDef();
circle.radius = size / 2;
circle.density = ballDensity;
circle.friction = ballFriction;
circle.restitution = ballRestitution;
b2body.AddShape(circle);
b2body.userData = {element: element};
b2body.position.Set( Math.random() * stage[2], Math.random() * (stage[3]-size) + size/2);
b2body.linearVelocity.Set( Math.random() * 200, Math.random() * 200 );
bodies.push( world.CreateBody(b2body) );
}
First, we create an absolutely positioned DIV that will house our Canvas tag:
element.className = className;
element.width = element.height = size;
element.style.position = 'absolute';
element.style.left = -size + 'px';
element.style.top = -size + 'px';
element.style.cursor = "default";
canvas.appendChild(element);
elements.push( element );
Then we draw the actual circle itself using the Canvas tag and append it to our container DIV (Note that an SVG circle created programmatically could have also been used here):
circle.width = size;
circle.height = size;
if (className !=='image' && className !=='image first') {
var graphics = circle.getContext( '2d' );
graphics.fillStyle = color;
graphics.beginPath();
graphics.arc( size * .5, size * .5, size * .5, 0, PI2, true );
graphics.closePath();
graphics.fill();
}
element.appendChild( circle );
Then we create another DIV to house the HTML content itself:
content.className = "content";
content.onSelectStart = null;
content.innerHTML = html;
element.appendChild(content);
if (className !=='image' && className !=='image first' ) {
content.style.width = (size - contentPadding*2) + 'px';
content.style.left = (((size - content.clientWidth) / 2)) +'px';
content.style.top = ((size - content.clientHeight) / 2) +'px';
}
Notice that we are setting content.onSelectStart to null above; this is so that when you run the mouse button over the text it doesn't select (An alternative way to do this is to use the HTML pointer-events CSS property).
Next comes code to deal with the physics of the circles, which uses Box2D.js, a JavaScript physics engine ported from Flash:
var circle = new b2CircleDef();
circle.radius = size / 2;
circle.density = ballDensity;
circle.friction = ballFriction;
circle.restitution = ballRestitution;
b2body.AddShape(circle);
b2body.userData = {element: element};
b2body.position.Set( Math.random() * stage[2], Math.random() * (stage[3]-size) + size/2);
b2body.linearVelocity.Set( Math.random() * 200, Math.random() * 200 );
bodies.push( world.CreateBody(b2body) );
Basically, we define a circle, give it a radius, density, friction, and restitution, and then add it to our collection of shapes with a position and linear velocity. Box2D will then handle the physics and we can just take the values back out to draw things on the screen with a setInterval, which happens in the loop method:
delta[0] += (0 - delta[0]) * .5;
delta[1] += (0 - delta[1]) * .5;
world.m_gravity.x = 0 // -(0 + delta[0]);
world.m_gravity.y = -(100 + delta[1]);
mouseDrag();
world.Step(timeStep, iterations);
for (i = 0; i <bodies.length; i++) {
var body = bodies[i];
var element = elements[i];
element.style.left = (body.m_position0.x - (element.width>> 1)) + 'px';
element.style.top = (body.m_position0.y - (element.height>> 1)) + 'px';
if (ballRotation && element.tagName == 'DIV') {
var rotationStyle = 'rotate(' + (body.m_rotation0 * 57.2957795) + 'deg)';
element.style.WebkitTransform = rotationStyle;
element.style.MozTransform = rotationStyle;
element.style.OTransform = rotationStyle;
}
}
}
This method gets called with a setInterval periodically. Basically, we apply a delta and a gravity at each time step; see if the mouse is being pressed down (with hooks for touch devices like the iPhone to see if a finger is being pressed down); tell the Box2D World about our gravity and delta and to make an iteration step; and finally use the computed physics values from Box2D to apply CSS3 rotation transforms on our parent DIV and move the element's CSS top and left values around the screen.
add to del.icio.us. look up in del.icio.us. Sun 29 August, 2010

Hey there! It’s Monday, so this roundup is devoted to all things web design (ux, photo, illustration, art, graphics, CSS, jQuery, tutorials, and more). Some links are newsworthy, some retweeted across Twitter, and others just meet our “awesomeness” requirement, and regardless we hope you’ll enjoy them. Without further delay: Data detectives, and anyone who loves [...]
add to del.icio.us. look up in del.icio.us. Sat 28 August, 2010
Fri 27 August, 2010

Kristján writes, "I agree. No, wait..."
"I got this while doing my online homework for a calculus class I am taking," wrote Chase P., "I mean, it's freaking 42 of all numbers - how could it NOT be correct??."
In order to take over the earth, the Brain hatched a plan where he would sieze control of the world's banking system. The plan was true genius, but like all big plans, he had to start somewhere which, in this case, was to take control of OneWest Bank's QuickPricer.
"I know that folks in Texas have strong feelings about where they live," wrote Reinier, "but I had NO idea that people in South Africa did too!"
"I wasn't exactly sure what to do here so," writes Johann, "I figured it safest to click on the "X" to close the window, manually restart, and pray for the best"
"The text translates roughly "Some tray icons can't be shown. There isn't enough space to show all objects in system tray. Uninstall some programs or try to use larger display resolution.," writes Maar, "I guess that I'll be able to justify that larger monitor purchase after all!"
"I think I'm going to take my chances and say 'no' the extended warranty," writes Stewart.
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. Thu 26 August, 2010

“ My imagination makes me human and makes me a fool. It gives me all the world, and exiles me from it. ”
Ursula K. LeGuin
add to del.icio.us. look up in del.icio.us. 
When Greg was shopping for jobs at his college’s career fair, there was a whole lot of business as usual.
The larger banks were on-hand looking to swoon the upcoming Financial grads. Several representatives from a few big name manufacturing corporations were there to interview the Chemistry majors and a few IT firms were on the lookout for the soon-to-be CS grads, like Greg, to add to their ranks. However, amid the ocean of pamphlets and suits there was one aerospace corporation with one particular position that caught Greg’s attention. The position that he applied and was ultimately hired for could be summed up in one sentence:
“You’ll be testing laser tag games for the military.”
A Dream Come True!...kind of
Actually, Greg’s official title was “QA Analyst for Battlefield Training Simulation Systems” but the idea of the system being a great big laser tag game really wasn’t all that far off the mark.
The way the existing setup worked was that sensors on a soldier’s body vest would detect a “hit” during the simulation, and would then set off an annoying alarm that could only be turned off with a special key. Once deactivated, the solder was ‘dead’ for the rest of the training scenario. It all worked, but one big problem with the whole setup was that, to the displeasure of many, a few enterprising soldiers managed to get their hands on and started selling tester keys (also known as “God Keys”) that allowed soldiers to resurrect themselves and get back into the battle.
After a number of years of trying to prevent soldiers from exploiting the system and a host of other technical headaches, the military was finally able to replace their system with something a little newer.
New features like the addition of GPS tracking units, RF data modules reporting hits and their locations and a slew of backend upgrades meant that military trainers could execute more extensive and complex training scenarios and, over time, recoup the costs because the new system was designed to rely on “off the shelf” 3rd party solutions, but first, these solutions would need to be vetted by QA guys like Greg.
Getting Stoned
Like any new hire, Greg was completely pumped and ready to contribute and shake things up his first week, but as time went by, Greg’s excitement dwindled when he found that doing QA analysis didn’t really involve shooting co-workers with laser guns, but instead was a lot of tedious, hard work with project managers and piled on bureaucracy for good measure.
In one particular situation they received a firmware update for one of the GPS systems being used in the Player Unit modules.
While trying to figure out why the latest hardware revision was failing immediately after the first test he noticed that the GPS receiver would send out a burst of garbage every few seconds.
Puzzled by this he checked and re-checked the connections and tried one of the spare units only to find the same result. Everything seemed like it should fine and the supplier swore there was nothing wrong with their system. Not able to let something like this go, Greg spent many late-night hours pouring through raw dumps of the results and along the way, he began to notice a pattern of the same Hex data repeating in the noise. As he painstakingly translated the hexadecimal into ASCII, he was genuinely surprised upon being greeted with a curious snippet of text.
Your PC is now Stoned!
After a quick search on the message, it all made sense. Somehow, the firmware upgrade for the GPS system had become infected with a disk boot sector virus, which ran perfectly fine on the embedded processor. Since this virus couldn't write itself to a disk, as there were no floppy drives on the GPS card, it instead sent itself out through the RS-232 port once every 5 seconds in hopes of infecting another computer.
Greg wrote up his analysis and forwarded it off to the vendor, who quickly (and quietly) issued another update to their firmware, identical to the last except without the virus.
Upon loading of the updated firmware, Greg noticed the difference immediately and was pleased to see that the vendor's "fix" resolved the "data issue" that he'd reported, however, there was a small catch to this tiny update. You see, preliminary testing for military equipment is a long and detailed process that makes the most draconian corporate processes look positively streamlined. Also, since the magic keyword "virus" had been uttered, QA testing couldn't just pick up where it left off, and couldn't just be for the GPS module. In fact, Greg had to start over at step 1 with added "anti-virus" steps add in for good measure just to be sure.
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. Wed 25 August, 2010

"While digging through some inherited code," writes Joe "M2tM" Smith, "I encountered a conditional masquerading as a loop."
"Thankfully, the fellow responsible is 'no longer with us', and I suppose this type of code stands as silent testament to why. This interesting loop is only created so the break keyword can be used as an elaborate GOTO."
bool bCreateModel = false;
for (;;)
{
if (!pModel)
{
bCreateModel = true;
break;
}
if (asModelParts.GetSize() != asModelPartsToLoad.GetSize())
{
bCreateModel = true;
break;
}
for (UINT32 i = 0; i < asModelPartsToLoad.GetSize(); ++i)
{
if (asModelPartsToLoad[i] != asModelParts[i])
{
bCreateModel = true;
break;
}
}
break;
}
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. Tue 24 August, 2010

add to del.icio.us. look up in del.icio.us. 
The words "Enterprise Integration" strike fear into the most stalwart of developers. When coupled with "in-house developed" and "B2B", one is almost guaranteed to find complex code, arcane requirements, and a thicket of poorly understood file formats. Dan was made of sterner stuff. When the contract was explained to him, he didn't flinch. There were between 40 and 80 partners that used a web app to extract data about multimedia assets? Gigantic recordsets of them? In formats ranging from Excel to iTunes-compatible databases? No problem.
Steve, the project manager, explained: "Our original lead developer was one of those rockstar types. Real cutting edge, pushing the envelope type guy. He's since moved on to bigger and better things, so we've just muddled on the best we could. We really need you to step up and take on that rockstar role for us, because there are a few problems we'd like you to fix. And we need a real quick turn-around on this."
"What sort of problems?" Dan asked.
"Well, these exports take hours. That's expected- it's a huge pile of data- but some of our partners are complaining that it crashes on them near the end of the job. So they have to start all over. Hours wasted. That's the big thing, but some of our other developers suggest that you try and do a little 'refactoring'?" Steve used air-quotes and a look of incomprehension to convey the question. "They said it should help make maintenance cheaper. Is that right?"
"It could," Dan said. "Let me see your documentation and the code, and I'll see what I can do."
They only had code. Dan opened the solution up in Visual Studio and started poking around. He looked for any classes that were responsible for exporting. He expected to see a whole family of them tied together through inheritance, probably named something like "XMLExport", "ITunesExport", or something equally transparent.
He didn't find a family of classes. In fact, he didn't find any classes. The entire project was lacking in any code or code behind files- not a single ".cs" in sight. Not even a ".vb". The only likely candidate was "Export.aspx".
"Do I have the right code?" Dan wondered, thinking there must be some class library he was missing. Dan double-clicked on "Export.aspx" and waited for the file to open. And waited. The HDD rattled away; its noise covered up the faint sound of Visual Studio sobbing to itself. By the time Dan finished his cup of coffee, the file appeared on the screen. Dan skipped down to the postback event handler, which was wedged in-line between the opening <body> and the page heading. It took Visual Studio over a minute to repaint the screen.
At four levels of indentation under the event handler, there was a switch statement. This statement simply checked which button was clicked. The first case, for "__exportButton" contained a twenty-five thousand line block of if/else statements.
"Oh, this can't be right," Dan wished. "This must be old code. Or some obscure branch used for… for… for hazing the new guy." He checked SVN. There was only one branch and the most recent check-in was from the day before, with the comment, "changed XML date format for iTunes export."
Dan patted Visual Studio's shoulder and tried to console it by closing every other application running, to free up some RAM. He and Visual Studio, both on the verge or crashing, struggled to read through the document together.
At the start of the event handler was this:
//Server.ScriptTimeout = 3600;
//Server.ScriptTimeout = 10800;
Server.ScriptTimeout = 21600; //six hours should probably be enough. If it keeps crashing, raise this.
The code went downhill from there. The actual export logic in the twenty-five thousand line block contained batches of hard-coded SQL queries- they all varied slightly, but not much, and it was hard to spot the differences. For each SQL query executed, a new database connection was opened. The block responsible for closing them all, was near the end, and looked something like this:
oldCnon.Dispose();
db1a.Dispose();
dbMain.Dispose();
db1.Dispose();
connCore.Dispose();
newConn.Dispose();
Once a connection was opened, it stayed opened until the export job completed. There were copy/pasted blocks that repeated the same code again and again, although over time, they had drifted apart so they weren't exactly the same anymore, but mostly. The web page itself handled all of the file I/O, the communication with Excel Interop libraries. One of the XML formats was generated, not by using the XmlWriter object, but by concatenating a pile of strings together. The entire pile was topped off with a bow- the "bow" meaning "only one exception handler for the entire block". The single catch(Exception ex) responded to any error that could possibly happen in that 25,000 line thicket. Its response was to simply print out the informative, "An error has occured(sic). Please correct your request and try again."
Dan wasn't even sure where to start. For the heck of it, he upped the script timeout from 21600 to 43200. He checked that minor change in with the comment, "This should fix timeouts for the foreseeable future," and then started trying to get a grip on how to pry this pile of spaghetti apart and turn it into supportable code.
The next day, he was elbow deep in "Export.aspx"'s entrails when Steve interrupted. "Hey, Dan!" Steve beamed. "Great work on fixing that bug. I saw your check-in, gave it a spin, and promoted it to production. Fantastic turn-around time on that. Look, since you're done, we've got a lot of other projects that could use some TLC- can I move you onto one of those?"
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. Mon 23 August, 2010

Paul was having a good morning. It was a beautiful day outside, he managed to shave 15 minutes off his commute, and even the local coffee shop had his favorite donut in stock. All of that changed when he got his first support call of the day. It was from a client running "the beast" product. "The beast", as Paul and his coworkers nicknamed it, was a legacy version of their application developed somewhere overseas years before Paul was hired, by hundreds of poorly trained, and probably poorly paid, developers. The company's sales team actively encouraged clients to upgrade from the legacy application, but a select few had resisted.
"The beast" had a reputation for containing some of the worst code Paul had ever seen and every time he had to support it, he felt like he needed a shower afterwards. It was during his fourth hour of debugging that Paul came across a previously unvisited function shown below.
public boolean isWidgetReferenced(int widgetId) {
boolean available = false;
try {
String query;
ResultSet rs = null;
int count = 0;
Connection connection = getConnection();
query = "SELECT COUNT(*) FROM WIDGET_REGION WHERE widgetId=" + widgetId;
rs = connection.createStatement().executeQuery(query);
for (; rs.next();) {
count = rs.getInt(1);
break;
}
if (0 < count) return false;
query = "SELECT COUNT(*) FROM WIDGET_OFFERING WHERE widgetId=" + widgetId;
rs = connection.createStatement().executeQuery(query);
for (; rs.next();) {
count = rs.getInt(1);
break;
}
if (0 < count) return false;
query = "SELECT COUNT(*) FROM WIDGET_ORDERS WHERE widgetId=" + widgetId;
rs = connection.createStatement().executeQuery(query);
for (; rs.next();) {
count = rs.getInt(1);
break;
}
if (0 < count) return false;
query = "SELECT COUNT(*) FROM WIDGET_NEW WHERE widgetId=" + widgetId;
rs = connection.createStatement().executeQuery(query);
for (; rs.next();) {
count = rs.getInt(1);
break;
}
if (0 < count) return false;
query = "SELECT COUNT(*) FROM WIDGET_HISTORY WHERE widgetId=" + widgetId;
rs = connection.createStatement().executeQuery(query);
for (; rs.next();) {
count = rs.getInt(1);
break;
}
if (0 < count) return false;
query = "SELECT COUNT(*) FROM WIDGET_STATS_RECORDED WHERE widgetId=" + widgetId;
rs = connection.createStatement().executeQuery(query);
for (; rs.next();) {
count = rs.getInt(1);
break;
}
if (0 < count) return false;
query = "SELECT COUNT(*) FROM WIDGET_VIEWED WHERE widgetId=" + widgetId;
rs = connection.createStatement().executeQuery(query);
for (; rs.next();) {
count = rs.getInt(1);
break;
}
if (0 < count) return false;
query = "SELECT COUNT(*) FROM WIDGET_SETS WHERE widgetId=" + widgetId;
rs = connection.createStatement().executeQuery(query);
for (; rs.next();) {
count = rs.getInt(1);
break;
}
if (0 < count) return false;
query = "SELECT COUNT(*) FROM WIDGET_INSTALLED WHERE widgetId=" + widgetId;
rs = connection.createStatement().executeQuery(query);
for (; rs.next();) {
count = rs.getInt(1);
break;
}
if (0 < count) return false;
query = "SELECT COUNT(*) FROM WIDGET_PENDING WHERE widgetId=" + widgetId;
rs = connection.createStatement().executeQuery(query);
for (; rs.next();) {
count = rs.getInt(1);
break;
}
if (0 < count) return false;
query = "SELECT COUNT(*) FROM WIDGET_JOURNAL WHERE widgetId=" + widgetId;
rs = connection.createStatement().executeQuery(query);
for (; rs.next();) {
count = rs.getInt(1);
break;
}
if (0 < count) return false;
available = true;
} catch (Exception e) {
logger.error("isWidgetAvailable", e);
}
return available;
}
Paul wasn't sure what bothered him the most: that the developer had used a strangely formed for() loop on a structure that always returned exactly one record; that the integer count could have been implemented as a boolean; or that the pattern had been repeated 10 times in this file and dozens of times in other files. As it turns out, the root cause of the issue was unrelated to the sheer amount of repetitive code. Had the developer taken the time to clean up this function, they might have noticed that they never closed any of the JDBC connection resources defined in the method.
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. Fri 20 August, 2010

Andrew Carpenter writes, "I guess this is like turn-oning off a switch?"
"While trying to signup for a Windows Live account, I found myself without my best friend Neil," wrote Rob, "unfortunately, my second-best friend Ray, third-best friend Jane, and fourth-best friend Tom are also excluded."
"I got this rather odd message when trying to install the Evo Java client," wrote Nick Edwards, "I clicked OK and it worked... even though I wasn't SURE_IT_WORKS!"
"I'm not sure why Google would omit entries and return zero results," Michael noted, "clicking on the link, I received 0 omitted results which were indeed very similar."
"YUM!! Blank Insert bear claws," wrote Matthew Sowders
"This came up while configuring Neverwinter Nights on my PC," Ville Rastas writes, "I was worried the game might not support today's high resolution screens, but I guess it's quite the opposite."
"I knew IKEA has some funny names on it's furniture," writes Patrik, "but who knew they were into the new fashion trend of nerd chic?
"According to Virgin Mobile," writes Glenn Jones, "Unlimited is twice as big as 10G (so maybe around 20G), except for videos where Unlimited is only 1.3 times 10G."
add to del.icio.us. look up in del.icio.us. Thu 19 August, 2010

Bob was in the process of shutting down a software company that he had built over the past seven years. He had found a buyer for all of the software that he'd developed, collected his "eff you money" and was now retiring.
In fact, things were at the point where Bob had already closed the building and redirected the phones to his home phone with a distinctive ring so that he could tie up loose ends while the building was up for sale.
Bob woke one morning at 8:00am to the phone ringing, crawled out of bed and picked up the ‘Bat Phone,' as he called it, in the living room.
"Hello?" Bob said, and gave the name of the company.
Without preamble or introduction, Bob was informed by a woman's voice, "Hi this is Sally Brumbaker, my user id is smb1985. My computer's frozen."
Bob didn't recognize the voice and certainly not the name. Also, it was before coffee. "Your computer's frozen?" Bob affirmed.
"Yes."
"Is the side cold?" Bob asked matter of factly.
"Wait a minute," replied Sally, and then after a pause, "No not at all."
"Ok, then," Bob assured her. "Your computer's not frozen, then, it's probably just running a program. Give it a minute."
"I don't understand, what do…" the woman began, and then, "Oh, ok. There is goes." and that, she hung up the phone and Bob did the same, thinking about how much cream to put into his coffee.
THREE MONTHS LATER
The ‘Bat Phone’ rings. Though the company had long been put to bed, Bob was suddenly reminded of was that he’d forgotten to stop the phone service.
"Hello?" Bob asked, and with a little hesitation, gave the name of his (now non-existent) company.
"Hello,” introduced the caller in a very serious tone, “I need to speak to someone in charge of your technical support."
"Well, that's pretty much me,” replied Bob, “What do you need?"
"Did you or someone working for you tell Sally So-And-So that she could tell if a computer was frozen by feeling the side?"
"What?"
"Sally says she called this number three months ago, and was informed by a support tech that she could tell if a PC was frozen by feeling for the side being cold. Since then, she's been feeling the sides of people's computers, and she's completely humiliated."
"Sally works in your IT department?" Bob asked.
"No, Sally is the Director of our human resources department," Bob was informed.
"And this is...?"
"I sit on the board for Plainston-Princeboro Teaching Hospital."
"I see. So, Sally hires doctors and nurses."
"She does - and now she's been humiliated by you or someone at your company,” huffed the voice on the phone,” What do you have to say for yourself?"
"Well, first," Bob answered, "I'd like to say that, if I get seriously hurt, I'll drag myself right past YOUR hospital."
"WHAT!?"
"Sir," Bob said, with great sincerely, "you have to admit, that's pretty dumb."
Suddenly, the man on the other end of the line was at a sudden loss for words.
"Ok," he said finally, a little deflated, "Sally isn't the most computer savvy person we have, but that doesn't give you the right to prey on her..."
"Sir," Bob said, "I took that call, Sally didn't identify herself, and as soon as she thought she had an answer from me, she hung up the phone before I could explain that I was kidding. I'm sorry if I humiliated her, but I have no idea how she got my number and this isn't a computer technical support company."
"Oh, I see," the person informed Bob. "We’ll, just be more careful, next time,” and with that, hung up the phone.
Since then, Bob disconnected the ‘Bat Phone’ for good, officially severing himself from his old life, but still gets a chuckle thinking of a smartly dressed executive going through the hospital, troubleshooting issues by feeling the sides of PC's and telling their users whether they were frozen of not.
add to del.icio.us. look up in del.icio.us. Wed 18 August, 2010

Everyone knows that "Magic Numbers" are bad, Bad, BAD! Take, for example, dividing something into quarters. Because including the literal "4" in your code would be a Magic Number, many developers agree that it's best to define a constant named "FOUR", and then use that constant instead. Makes sense, right?
Wrong! The problem with using "FOUR" is that, like "4", it's a Magic Constant. While not nearly as bad as Magic Numbers, Magic Constants certainly aren't elegant. Fortunately, Allen's colleague has provided us all with a valuable lesson the proper use of Magic and Non-Magic constants. Read it, and learn.
public class Constants {
...
public static final int FOUR = 4;
public static final int THREE = 3;
public static final int INTEGER_FOUR = 4;
public static final int INTEGER_FIVE = 5;
public static final int INTEGER_ONE = 1;
public static final int LENGTH_FOUR = 4;
public static final int LENGTH_FIVE = 5;
public static final int LENGTH_SEVEN = 7;
public static final int LENGTH_EIGHT = 8;
public static final int LENGTH_NINE = 9;
public static final int LENGTH_ELEVEN = 11;
public static final int LENGTH_TWELVE = 12;
public static final int LENGTH_EIGHTEEN = 18;
public static final int LENGTH_FIFTEEN = 15;
public static final int ONE = 1;
public static final int INTEGER_FIVE = 5;
public static final int INTEGER_ONE = 1;
public static final int PLUS_ONE = 1;
public static final int INTEGER_THREE = 3;
public static final Long LONG_VALUE_TEN = Long.valueOf(10);
public static final Long LONG_VALUE_ZEARO = Long.valueOf(0);
public static final BigDecimal BIGDECIMAL_ZERO = new BigDecimal(0);
public static final BigDecimal BIGDECIMAL_ONE = new BigDecimal(1);
public static final BigDecimal NEGATIVE_NUMBER_ONE = new BigDecimal(-1);
public static final int COMPARE_RESULT_ZERO = 0 ;
public static final int COMPARE_RESULT_ONE = 1 ;
public static final int COMPARE_RESULT_NEGATIVE = -1 ;
...
public static final String NINE_STRING = "9";
public static final String ONE_STRING = "9";
}
add to del.icio.us. look up in del.icio.us. Tue 17 August, 2010

Everything went dark and a chill wind went up Simon's back. A deep rumble rattled his brain in his skull. He glanced behind him to see Noel looming over him. "Simon, can you ping the Exchange server?"
When the trained bear that doubles as your IT manager asks that question, it's a bad thing. Simon tried to ping Exchange and failed. He then tried to ping an app server. And a database. And the outside world. All dead.
About a thousand users were about to discover that the only IT asset they could access were their desktop computers. Shortly thereafter, the phone next to them was going to ring. The person at the other end would likely scream. And then it would ring again. The ringing and screaming would continue until the network was back up.
They hustled to the server room, with Noel's bulk clearing a path through the corridor. It was hectic, and he may have trampled an intern. In one corner of the server room, a jump-suited man with a tool-belt bobbed his head to the music in his earphones. The server room was so quiet that the two could actually hear his music from across the room.
"What have you done?" Noel rumbled. The ominous wave of fury failed to penetrate the shield of Lady Gaga songs the electrician had surrounded himself with. Noel closed on him and repeated the question, with more volume and a heavy hand on the shoulder.
Once he had the electrician's attention, he didn't wait for an answer. "I will tell you what you have done," Noel said, "since you obviously do not understand. You are drilling away into a little metal box that is labeled 'Uninterruptible Power Supply', rendering it quite interruptible and cutting power to the room."
"I… I'll fix it…" the electrician managed to croak out.
He set to work. Noel set to work as well by providing a profanity laden commentary on the level of failure the electrician had just wreaked, how many tens of thousands of dollars of equipment the electrician had probably damaged, how many users were useless at the moment.
The electrician worked through the tirade, which says good things about his saving throw versus intimidation, even if his saving throw against stupidity left something to be desired. With a sigh of relief, he flipped the circuit breaker. Green blinking lights and the sounds of whirring disks filled the room.
Then the breaker clunked back into position. The servers rattled back to silence. An expensive sounding clunk came from a hard drive somewhere in the room.
"I'll fix it!" the electrician squeaked. After a frantic adjustment, he flipped the breaker again. The show repeated itself, although the encore added some sparks in the UPS. The third time the electrician reached for the breaker, Noel nearly broke his hand off.
"I think that's enough of that for the day," Noel warned.
"The… the breaker can't handle the load?"
Noel ignored the electrician and turned to Simon. "Do you think I can heave him up to the ceiling?" Simon looked up, and fifteen feet away, he saw the spare pin-and-sleeve-plugs that had been installed to power future expansion.
Since the electrician didn't have a ladder -- and since Noel's throwing arm wasn't up to the task -- Simon clambered on his back. One egregious violation of the health-and-safety policy later, the server room was on a different circuit. A round of cajoling, screaming and cursing brought the servers back online, although a few HDDs were trashed. Noel's blood-pressure receded to something slightly less than the water pressure in the Challenger Deep, and Simon drafted a thoroughly plausible explanation as to why there were shoe prints above head level.
The root-cause for the debacle was traced back to Building Facilities. The server room, normally accessible only to sever admins and the facilities manager, contained an emergency power-off switch. Despite the fact that all of those people were quite clear about the purpose of the switch, and that it was clearly marked, someone with pointy-hair had deemed it an "unacceptable" risk, and decided to do an end-run past change-control to "fix" it. After all, if left unfixed, someone might cut off power to the server room and damage the equipment.
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. Mon 16 August, 2010

Role-based security requires, at a minimum, two key elements: users and roles. Roles (such as Administrator, Clerk, and ViewOnlyUser) are defined by the application code and then assigned to users to restrict which functions of the application they may use. It's a pretty simple concept that involves all of two database tables, or one if the user names come from some external source like Active Directory.
In Adam's case, the Role-based security feature served as a coalmine canary in the application he was tasked with reviewing. Although it passed all of the test cases — employees could only do certain things, customers could do other things, etc. — there was one fundamental flaw with the system. See if you can spot it.
public bool IsInRole(string roleName)
{
return UserName.StartsWith(roleName.Substring(0, 3));
}
The roleName parameter is a string ("Employee") that's is passed in from a method to check security, and UserName is just that: it's the user's name. So, users with a name that started with "Emp" would be granted access to Employee functions, while no one else would. And why "Emp"? As it turned out, the user names created for testing were "Employee1", "Employee2", "Employee3", and so on.
As for the rest of the system, it's development was similar: it passed the test cases and little more.
add to del.icio.us. look up in del.icio.us. Sat 07 August, 2010

add to del.icio.us. look up in del.icio.us. Tue 03 August, 2010

add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. Tue 20 July, 2010

add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. Sun 11 July, 2010

add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. Fri 09 July, 2010

add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. Tue 29 June, 2010

add to del.icio.us. look up in del.icio.us. Fri 04 June, 2010

Last week Mashable featured a post asking if location-based services are all just hype. Continuing the geolocation theme Mashable has a new post, What the Future Holds for the Checkin, by a guest blogger/columnist. I have a reservations about how well this article delves into future opportunities, so I just toss a few out here.
add to del.icio.us. look up in del.icio.us. Sat 10 April, 2010

add to del.icio.us. look up in del.icio.us. Tue 30 March, 2010

“ The only excuse for making a useless thing is that one admires it intensely. All art is quite useless. ”
Oscar Wilde
add to del.icio.us. look up in del.icio.us. Tue 16 March, 2010
Sun 28 February, 2010
Sat 27 February, 2010

“ Be who you are and say what you feel, because those who mind don’t matter and those who matter don’t mind. ”
Dr. Seuss
add to del.icio.us. look up in del.icio.us. Fri 05 February, 2010

“ My ignorance is essential. I do not write what I know but what I need to know. ”
Don Murray
add to del.icio.us. look up in del.icio.us. Tue 02 February, 2010

“ If you want to build a ship, don’t drum up the men to gather wood, divide the work and give orders. Instead, teach them to yearn for the vast and endless sea. ”
Antoine De Saint-Exupéry
add to del.icio.us. look up in del.icio.us. Tue 26 January, 2010

add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. Sun 24 January, 2010

“ I have always been rather better treated in San Francisco than I actually deserved. ”
Mark Twain
add to del.icio.us. look up in del.icio.us. Wed 20 January, 2010

add to del.icio.us. look up in del.icio.us. Mon 18 January, 2010

add to del.icio.us. look up in del.icio.us. Tue 12 January, 2010

add to del.icio.us. look up in del.icio.us. 
“ Resentment is like drinking poison and waiting for the other person to die. ”
Carrie Fisher
add to del.icio.us. look up in del.icio.us. Wed 06 January, 2010

add to del.icio.us. look up in del.icio.us. Tue 05 January, 2010

add to del.icio.us. look up in del.icio.us. 
add to del.icio.us. look up in del.icio.us. Thu 17 December, 2009

add to del.icio.us. look up in del.icio.us. Tue 15 December, 2009

add to del.icio.us. look up in del.icio.us. Sun 13 December, 2009

add to del.icio.us. look up in del.icio.us. Fri 20 November, 2009

add to del.icio.us. look up in del.icio.us. Wed 18 November, 2009

add to del.icio.us. look up in del.icio.us. Thu 12 November, 2009

add to del.icio.us. look up in del.icio.us. Tue 10 November, 2009
Wed 04 November, 2009

I am drawn to the troubled ones. They are my lost little angels. I don’t go looking for them. They find me. They find Leslie. They find us for the same reasons perfect strangers confess their sins to us — for the same reasons people just seem to know they can trust us.
Why us? I always ask the women we’re with some variation upon this question. The answer is always the same: Because I felt so comfortable around you.
Joy’s troubles were overwhelming. She needed sanity, not adventure. She needed therapy, not us. And so we let her go. She began the hard work of fixing herself. It isn’t fair that you have to fix yourself when someone else breaks you but this is how it goes.
This thing we do is light and fun and oh-so-hot but it also requires maturity. And though no one who knows me would ever accuse me of having lofty intentions when it comes to women, I cannot allow my pleasure to come at someone else’s expense.
add to del.icio.us. look up in del.icio.us. 
Whiskey river take my mind
Don’t let her memory torture me
Whiskey river don’t run dry
You’re all I’ve got, take care of me-Willie Nelson, “Whiskey River”
The White Rabbit. Yeah, no. The last time I was here a dude tried to grab my ass and a chick tried to become my stalker. Crazy town, man. Crazy town.
***
The Axe Man tries to talk my wife and me into buying raffle tickets but I’m not yet drunk enough to try my luck at anything.
***
Viviane is all like I haven’t seen you in a while and I’m all like yeah I know I’m an unreliable friend.
***
I cannot think of anything intelligent to say to Tess and Selina because I’m tall and their cups runneth over.
***
The Bad Man shows up and everyone sez “Oh hey!” And then Sinclair shows up and I give her a hug and I’m meaning to ask her for tips on bending hotchix to my will but then someone says something and I forget.
***
Gotta get some air. The Calico Cat is lost so I text her directions. “How do you spell Forsyth?” I ask the Bad Man.
“Does it matter?”
The Calico Cat looks like a pharmaceutical sales rep. “Nice power suit,” I tell her.
***
The Axe Man and I try to convince the Bad Man to give his eager 20-year-old a go. Having been frustrated in the pursuit of an ideal, I’ve learned to err on the side of pleasure.
Ronen snaps some pictures of us while we’re talking. Leslie is confused because he does not give her time to pose. “He’s taking anti-portraits,” I explain.
***
Morpheus tells me I’m the only one who’s made the connection between his name and the name of the bar we’re standing in. I feel special.
***
I admire the Bad Man’s tenacity. When I meet his former paramour I can see why he’s been holding out. “She’s delightful!” I announce. I can’t put my finger on it yet, but she reminds me of someone.
Leslie takes a shine to the Bad Man’s former paramour’s saucy, tattooed friend.
***
I hold in my hand a slip of paper that entitles me to take liberties with Rachel. Do I just come right out and ask?
I come right out and ask.
She removes her glasses and bends over the bar. I am not satisfied with my first attempt, but the second blow lands solidly upon her right buttock.
When Leslie takes her turn a man tries to sidle up to the bar. “Back off!” she cries. “Spanking in progress.”
***
A youngchick is there for her birthday party. She cannot fi
































