Archive for the ‘Development’ Category

Semi-Serial Searches

2007-02-25 18:33

Photograph: Giza, pyramid, Cairo, 2005-10-07, © Nick Varacalli.I think I dislike job searches for the same reason that I dislike searching for a house (or even an apartment). Even though you look at a number of opportunities at the same time, you’re still not able to do a fully parallel search. Once you find something good, you have to commit to it without really knowing what you’re getting into. Once you’re in a job, or a new place, it’s difficult to decide you don’t like it and find another one. I much prefer looking for something like a humidifier where I can compare the dozen different models that meet my general criteria. With a job or a place to live, there are many, many more choices to look at. And yeah, the decision is that much bigger.

In some ways, it’s also like looking for an SO. Same general idea with the added constraint that most SO’s will get really mad if you look for another one at the same time. At least looking for an SO has the redeeming quality that you occasionally get to know fun people. Mind you, interviewing with smart people at cool companies also gives me a similar rush.

Had 4 interviews last week. Two of them went well. One, I didn’t do (anywhere near) my best, and the interviewer and I just didn’t hit it off. One… well… that’s the one that reminded me of the parallels between these three types of searches. The interview felt like a bad blind date:

Me: Nice weather we’re having.
Interviewer: Yup.
Me: How about the Celtics?
Interviewer: I don’t follow basketball.
Me: What do you do for a living.
Interviewer: I work.

Absolutely no chemistry, and no attempt on the part of the interviewer to attempt to enjoy the evening. Worst thing is, I’m not sure how I did on the interview. Is that just the way the interviewer is, cold and reserved until you get to know them? Or did I just completely turn them off?

Oh well… there are other fish in the sea.

Schedule Fatigue

2007-02-22 08:58

Scheduling 4 interviews, a family, parents group, dancing, ?poker?, and a night out in one (work) week is exhausting.

Too Much Backwards Compatibility

2006-07-09 00:36

WinXP. Start | Run | sysedit. No wonder Microsoft can’t ship anything on time.

Bands

2006-06-01 11:03

Photograph: Valley of the Workers, Dina, Luxor, 2005-10-04, © Nick Varacalli.Was thinking the other day about rock concerts I’ve seen. They include, but are not limited to (brain fuzzy… too much loud music)…

  • Guns’N'Roses. The Montreal Riot concert.
  • Metallica. Both the aforementioned riot concert and front row seats (but not the snake pit) at the Forum.
  • Faith No More. Some riot concert.
  • Megadeth
  • Pearl Jam
  • Soundgarden
  • Me Mom & Morgentaler. One of the best concerts ever.
  • OMD. Something cool about intimate venues such as Club Soda.
  • The Pursuit Of Happiness. A fight broke out on stage between a roadie and a venue security guard.
  • Queensrÿche. One of the last times they performed “Operation LiveCrime”.
  • Bily Joel. My first concert. I went with my dad.
  • Dog Star. Not sure whether Keanu should stick to his day job or not.
  • Manic Street Preachers.

As I’m no longer into live music as I once was, the bands I regret not seeing are Iron Maiden and Nirvana. Missed Nirvana by this much. In the early 90′s, just before they hit it big:

Nick: What should we do tonight?
Kevin: Dunno, who’s playing at Foufounes.
Nick: Hmmm. Some band named “Nirvana”.
Kevin: Their name sounds a bit too new-age for what I’m in the mood for.
Nick: Well… there’s always the Loft.
Kevin: Yeah, let’s go there.

D’oh!

Sign

2006-04-20 14:33

Photograph: Valley of the Kings Hatshepsut's temple carving detail, Luxor, 2005-10-03, © Nick Varacalli.Paraphrasing a conversation at work.

Nick: I want to start correcting some of the endemic problems with our internal management website.
Coworker: You can’t do that. We wouldn’t be able to see what’s changed in VSS if you make large scale changes.

This isn’t the first time I’ve run into this attitude here. It’s one of the reasons I’m less effective then I can be… I like fixing things. Also, being discouraged or stopped from improving things makes me grumpy. <shrug /> Unfortunately, I find that I have less and less drive to push through this sort of attitude. Maybe I’m burnt out and need a break.

Yes, I need to clean up my blog before the next time I start a job search.

Random Traffic

2006-03-23 16:56
  • Photograph: Rose-Louise and sphinxes, Luxor temple, 2005-10-02, © Nick Varacalli.6.5M around the river. 75 minutes. Slow, but felt good for the most part.
  • Because of running, I find myself moisturizing and lubricating places I never thought I would as a heterosexual male.
  • Friendships can’t survive of both parties are being guarded and trying not to get hurt, or hurt again.
  • Our last company meeting was quite depressing. Despite making under $5M a year for the last 10 years or so, our new CEO thinks we’ll be making $160M a year in 2010, basically doubling revenue each year. Sure. Why not. What gets me is the way the estimates are done. e.g., For the Fanancial Widget Market, there are 100 companies in the space. The biggest company would buy $100,000 worth of widgets from us per year. Right there, that’s $10M to the bottom line. If I didn’t like my boss, I’d be very tempted to start making estimates for my development time like management does, based on Best. Case. Scenarios. Ever. Maybe I need “Chief” in my title before I’m allowed doing that.
  • It’s both sad and scary when couples can’t stay together. On the other hand… it’s the way life is. You do what you can. Every-so-often a break-up comes along that makes me resolve to work harder on my marriage and family life.
  • As a side-note to couples not being able to stay together, it saddens me to hear celebrity romance gossip. It’s hard enough to get a relationship to work as it is. I can’t imagine how it is to deal with the press and public dissecting it as well.

Getting Things Done: Touch It Once vs. Incremental Movement

2005-11-22 12:30

I’m a big fan of the Getting Things Done (GTD) movement that’s sprung up lately. I read a lot about it, I just don’t blog much about it. So much of what I do just seems tailored to me, my work habits, my quirks, and what I like doing.

Photograph: Erin & Ogden Swing Dancing, Boston, 2005-09-11, © Nick Varacalli. A lot of time management books mention “touch it once” as a way to be productive. In essence, if an action item comes up, whether it be email, mail, or a chore to be done, deal with it immediately if at all possible. Otherwise, intelligently file it in your action pile and deal with it when you have a big enough chunk of time.

This works well enough for the most part. It does seem to have some drawbacks in that it doesn’t easily allow batching of similar tasks.

Let’s take doing household chores on the weekend. Laundry needs to be done, bills need to be paid and filed, stuff needs to be tidied and put away, etc. If I touch everything once, I feel like I’m flying around everywhere.

  • Pay bills (sitting at the computer in the living room).
  • File bills (filing cabinet in the office).
  • Recycle bill detritus (recycling bins in the laundry room).

I tend to like doing things in a bit more of an area oriented way.

  • Pay the bills.
  • Put stuff to file in my path to the office.
  • Put recycling in my path to the laundry room.
  • When it’s time to check the laundry, pick up recycling on the way…

This way, instead of feeling like I’m frantically running around the house doing chores, it seems almost leisurely. I glide from room to room, easily reminded of what task cargo needs to be ferried to the next port.

I do the same thing when coding. Though I usually work in a stack-based format, pushing tasks as I wend my way through the codebase I’m modifying, there are times when I know I’m going to have to pass through a routine in the near future. In that case, I’ll leave a TODO marker in the code (sometimes in a comment, sometimes without a comment to ensure my build fails) to trip me up when I pass by later.

I guess part of this is just redefining what “something” and “touching” are. Alternately, it’s decomposing tasks into even smaller units.

Bad UI Choices

2005-11-15 11:59

Photograph: Boston Public Library, Boston, 2005-09-11, © Nick Varacalli. We have a gym at work. Pretty nice one actually, classroom, treadmills, stationary bikes, free weights, nautilus machines, rowing machine. But I digress.

To pay for membership, one sends a cheque to the building management company every month with your access card number in the memo field. October was my first month. No need to write the number in, I didn’t have a card yet. November, I dutifully followed directions, getting the cheque in a few days early. On November 1st, my access card stops working.

The Office Assistant tried to fix the problem for me a couple of times. Card still doesn’t work.

Yesterday, I called up Kim, the person in charge of access cards. Told them that my card number was 9690-0000. As I’m reading the number, I notice 3 things:

  1. The only digits on my card are 0, 6, and 9.
  2. The font is such that an upside-down 6 is a 9 and vice-versa.
  3. There is no indication on the card which side is up or down.

A-ha! That’s why it didn’t get fixed the first time. To be sure, I confirmed with Kim that the number should be in the upper right (as opposed to lower left) corner of the card. My card number is 0000-0696.

24-Hour Sponsored Vacation

2005-09-06 16:47

Photograph: 56 Apartment Balconies, Tokyo, Japan, March-April 2005, © Nick Varacalli. Alternate Titles:

  • Interviewing @ Amazon
  • Disruptive Change
  • Make Them Come To You So You Can Come To Them
  • So That’s Why They Booked Me For Two Nights
  • Sleepless ’cause of Seattle

So, a little eCommerce company in Seattle, WA found my résumé online. They decided they wanted to interview me. Though the word eCommerce is a little passé, I figured that since this was the granddaddy of all eCommerce sites, that I should humour them. At the absolute least, it’s, in many ways, an honour to have them wanting to interview me, and it’s good interview practice. Practice interviews are a great way to keep my interview muscles in shape and keep a finger on the pulse of my industry. On a more positive note, I’ve been in the mood for disruptive change… this is better than normal when I’m a bit stir-crazy with my life… I normally tend to like destructive change… maybe I’ve matured.

I figure, at absolute worst, I don’t get an offer, and my ego is taken down a notch or 50. Another ‘bad’ outcome is that we need to decide whether to keep our current, good life, or attempt to make another good life with the backing of an awesome job.

Thursday, August 11th, I did a phone screen with Scott, a Two-Pizza-Team Lead (TPTL). Apparently the company is organized around highly empowered teams of about 3-7 people… the number of people that can be fed with two large pizzas… I didn’t mention to them that I know some TPTs that could consist of one or two people. Scott asked me some technical questions relating to trees and dictionaries, as well as other questions relating to scalability. I think my main issue was that I wasn’t confident enough in my answers. Sometimes being uncertain yet confident is necessary.

Apparently, that went well, since I talked to Ann on Friday, August 12th. I forget what questions she asked me, but I remember that I quite enjoyed talking to her. It was one of the most relaxed difficult interviews I’ve ever had. She gave me homework: write an LRU cache. It was much more difficult than I thought it would be. In the end, I submitted 299 lines of code, comments, and whitespace.

Photograph: Pimp My Apartment, Tokyo, Japan, March-April 2005, © Nick Varacalli. Apparently, despite my lack of expertise in threading and locking (though, I’m used to non-thread speed race conditions working in the finance industry), it was good enough to take it to the next level.

I talked to the Talent Acquisition specialist, and determined that it would be worth making a visit.

Interviews were scheduled for Friday, August 19th. Flew out Thursday, landed in Seattle, and arrived at the hotel about 22:00. I’m scheduled to return Friday night. Impressively The W is a swank hotel. Stylin. The taxi ride was nice. Seattle’s a pretty city at night. I should note that this is my first trip to Seattle and the Pacific Northwest. I’ve been to Vancouver / Victoria before, but Canadians consider that the Pacific Southwest, so that doesn’t count.

Figured that it wasn’t worth trying to do anything with the remaining hours of my day other than unpacking, charging random devices, and getting a good night’s sleep before the interview the next day. On the topic of devices, buying an iPod Shuffle was well, well worth it. Having a soundtrack again is nice.

Back to the hotel. The bed was comfy. Probably the first bed that I’ve said that about since we splurged on a good mattress a few years ago.

Woke up. Not yet light outside. Decided that I should sleep more. Woke up a bit later. Now it’s light out, so even though my 8:00 alarm didn’t go off, I figured it was time to wake up. It’s 7:02. I’m lightly jet-lagged, but that’s fine. Gives me 3.5 hours to prepare, or fret, about the interview.

Put some classical music on the laptop, and slowly took a shower and prepared for the day. I threw caution to the wind and broke one of my cardinal rules for interview days, which is don’t unnecessarily deviate from routine (one of the others is not to flip off any drivers that try to run me over as I enter the company parking lot in case they’re one of my interviewers). Tried the lemon-sage body-wash provided by the hotel. The smell jolted me awake. Pressed a shirt for the first time in a long, long time. Reminded me of being in London… good times… good times. The main issue was that the retractable cord on the iron kept… well… retracting. Made it difficult to iron.

Breakfast provided me with one of the best dilemma’s I’ve had that early in the morning. Grand Marnier French Toast, Smoked Salmon & Truffle Egg Salad, Manchego & Chorizo Fritata… the list went on and on.

Photograph: Riverside Brick & Flowers, Tokyo, Japan, March-April 2005, © Nick Varacalli. The hotel was on 4th Ave. Interview was on 12th Ave. Can’t be that far, right? The good news is that the weather was awesome. Sunny, mild, and dry. The bad news is that 12th and 4th are not actually 8 blocks away. More like a $15, 15 minute taxi ride. At least I got to see some of Seattle. Got to company‘s building about 20 minutes early. Thankfully, a block away was a park overlooking the city. Sat, relaxed, since by this time I was getting into full on fret mode, and looked at the city… very lush I must say.

Finally made my way to reception, and started filling out the standard employment history form. Except that I haven’t filled one of those out in ages. Worse yet, it required five… yes five… references… needless to say… I frantically emailed and called references after the interviews were over asking for retroactive permission, intending to call company and strike references from the given list were the requests denied.

On to the interviews. I have to say that I haven’t been through a set of interviews that hard since D.E. Shaw. These interviews may have been harder. Maybe I’m just slower, stupider, and out of practice.

My first interviewer was Joe King, a TPTL. Dina and I noted that his parents must have had a sense of humour. He asked me a question about how to set up the object model for a supermarket simulator. It had many parallels to an eCommerce site. Though an exercise in determining how I thought, I wasn’t happy with what I came up with.

Next, Eileen, another TPTL. She asked me more user-centric questions on how to design an online restaurant reservation system. I think part of the problem with this part of the interview is that I was having too much fun with it. I wanted to add too many fun and interesting features, adding complexity both to the UI and the underlying system. Lots of fun. Unfortunately, I had another boatload of features I wanted to mentally implement but would have overwhelmed any reasonable development team. I have a feeling that Jim would have enjoyed her interviewing style.

Dan asked me some more coding-level questions centered around counting the number of occurrences of words in a file, trading off time and space. I blocked on one part, but eventually determined how to do it in constant space with a little prodding. I guess one of my issues is that I’m used to problems being time constrained but having lots of available space. Apparently company has both issues.

After that, lunch with Scott with a great view of the city, then back to the interview room and a question on how to aggregate and retrieve data. Given a list of reviews (id, product, category, stars), find the top 50 products in each category. I think I did decently well, other than the fact that I wanted to sort in the end instead of searching for the best items. O(n*log(n)) instead of O(n). Oops.

Photograph: Riverside Solitary Man, Tokyo, Japan, March-April 2005, © Nick Varacalli. Brian asked me a question about implementing a master-slave relationship in order to throttle tasks to prevent them from over-consuming scarce resources. I think I did quite, quite badly on this. I constantly didn’t know where to go next.

Chetta, the Talent Acquisition specialist, talked to me a bit about relocation and Seattle. I think I was so fazed by the session with Brian that I seemed a lot less enthusiastic than I actually was.

Finally, Al asked me three different questions. The first, converting an integer to roman numerals was a problem I’d heard before but never tackled. It proved to be easier than I thought it would be. The second was how to efficiently slot luggage into lockers. I only realized that this was heavily related to memory managers a day later. Finally, the object model for a deck of cards. I think I did best on this interview. Maybe my mind was finally in gear. I also had a lot of fun.

I hear back from them Monday the 22nd, which probably means late Monday given the time difference. 72 hours of fretting!

It’s 16:30. I’ve got about 7 hours to kill before my flight takes off. I head back to the hotel, change, and walk down to the concierge to ask for suggestions for a three hour walk before dinner.

The walk is nice, and even more fret inducing. I realize that I quite like the city. Walk to the Pike Place Public Market. Nice mixture of Camden town and Faneuil hall. Mmmm… smoked salmon. Then on to the Monorail, a 90 second ride to see the Space Needle. Once up on the observation deck, I listen to about 30 minutes of information about Seattle. I think I’m liking the town more and more… which is making me fret more and more about getting the job.

Monorail again, and back to the hotel via a different route. The wonderful restaurant with the vexing breakfast choices is full. I’m pissed off at the concierge who told me that I didn’t need a reservation since I was dining alone and staying at the hotel. I go to a brew-pub and eat outside instead. Read some of the Seattle free newspapers. The beer sampler was good. The Hefeweizen had hints of banana and bubble-gum. Yummy.

Check out of my hotel. company had booked me for two nights, which I thought was weird, given that I was leaving on the red-eye. I guess they were being extra-nice and giving me a place to de-stress after the interview.

Head to the airport, and have a nice chat with the taxi driver. Everyone seems to be chatty and friendly. Even the barrista at Starbucks at the top of the Space Needle had a 3 minute conversation with me. She noted that it’s easy to strike up conversations in Seattle, but hard to make friends.

Photograph: River Cityscape, Tokyo, Japan, March-April 2005, © Nick Varacalli. At the airport, the lady at the desk can’t find my reservation. Uh-oh. I look at the printout of my reservation. My flight leaves at 23:00 on Saturday, not Friday. So that’s why they booked me for two nights at the W. I manage to change my flight for a small charge. The upgrade to first class is a mere $50, but alas, first class is full. It’s difficult to sleep on the flight since the pilot is constantly announcing that we need to stay seated with our seatbelts fastened.

Apparently, company has the concept of a bar-raiser. This is an interviewer who’s job it is to make sure that the interviewee is above company average. I knew this going in to the interview. I didn’t think of it during the interview. I only remembered this the day after, and, in retrospect, cannot identify who the bar-raiser was.

So, now I’m nervous and I fret ’til late Monday. I sit on this post, since I know they know about my web site, since that’s how they found me.

Monday passes… I fret. Tuesday the 23rd starts. About mid-day their time, I send a quick email to Ryan, asking for an ETD. He says he’ll get back to me. Wednesday comes and goes. Meanwhile, I’m sleepless ’cause of this Seattle thing. I’m actually nearing the point of frustration, and the lack of timely response (or even meta-response) is slowly being marked as a negative against company. I’m trying to convince myself that a negative doesn’t take this long, so they’re ironing out offer details. I’m also telling myself that because of the uncommunicative wait, it will have to be slightly better with every additional fret-filled day and sleepless night that I put myself through.

I’m also nearing the point where, as usual, less constructive courses of action enter my head. I could stop my fretting, and tell them that I’m not interested. I could publish this article now. Instead, it’s Thursday noon, August 25th. I edit it a bit, and put it back in the drafts folder. Meanwhile, Daniel, sensing that I need a change, and possibly wanting to keep me in Boston, has put me in touch with some people looking for a developer for a startup. The world is my oyster. I wait for Serendipity or the Lady to guide me.

It’s now around to Sunday the 28th. 9 whole days have passed. Other alternatives enter my head. Maybe they are interviewing other candidates (I was under the impression that it was hire-if-you-fit as opposed to hire-to-fill-position). They didn’t mention which Monday they’d make their decision. Chetta noted she’d be out of town this week, though one would assume she had a backup.

It’s now Monday the 29th. I ping both Ryan and Chetta in the early afternoon. No response. To add insult to injury, I learned that Miss Universe visited our offices the day I was interviewing (her father works at my current company). There are pictures on the intranet of her posing with the staff.

Thursday, September 1st comes around. It’s been a whole freakin’ month… well… the name of the month has changed, so it’s the same thing, right? I’m quite a bit more relaxed about this. But today I decide that I’m frustrated enough that I’m just going to call them until I talk to a person, no matter how obnoxious I come across. Leave a message for Chetta on her office line, as the cell number she left me has a gruff man’s voice on the voicemail prompt. Call Ryan, no answer. When I get home, finally call Resa, the person who first emailed me about the position. She looks at the file, is confused by the delay in handling it, and pings both Chetta and Scott. Unfortunately, this is her last day at company.

Chetta phones me on Friday, September 2nd around 19:00, a full 2 weeks after my interview. She was out of town one week and sick for a few days the next. The group isn’t interested in me. Oh well. On the other hand, other groups are, and will be contacting me to set up more interviews. Jim notes that a possible contributing factor to the delay is that they may have been shopping me around to other groups after the initial group determined I wasn’t a good fit. The way he put it picked me up quite a bit.

So where are we now? It’s Tuesday, September 6th. Haven’t heard from company‘s other groups yet. The two week delay severely damped my enthusiasm for company. Chetta said they wanted to fly me out again for interviews with one or two other groups. I’m not sure how that fits into my schedule. The fact that I’m worried about how I’ll be able to play a poker tournament, go square dancing, or be at my current job is probably telling of my current state of mind. I think my going in position will be to ask to have Dina flown out also, sometime in October. This time, we’ll take advantage of the Saturday.

In case you haven’t already guessed, the interview was at Amazon.com. I’m currently too lazy to go and back-edit the whole post.

Stay tuned for “48-Hour Sponsored Vacation” in a month or so.

Testing Syndication Feature

2005-08-23 14:17

As an exercise in my continued attempt to learn PHP and in order to make my feed friendlier, notably to my readers over at LiveJournal, I’ve attempted to add a footer to my post that directs people back to this site for comments and permalinks.

Feedback on the implementation and look & feel are welcome.

A-Ha! vs. D’oh!

2005-08-17 10:52

I was trying to explain to family why software companies are willing to pay a fair bit of money separating the wheat from the chaff. Not being software developers themselves, they didn’t quite grok the difference between good and bad software developers. I noted the 10 to 1 productivity gap between great and average, and the further 10 to 1 gap between average and poor. I don’t think it made as big an impact as it should have.

I think part of that problem is that productivity is perceived as faster. That’s part of the equation. Quality is also an issue. Joe Average will never be able to paint something as beautiful as Van Gogh’s Starry Night (or whatever you think of as great paintings). Inspiration also helps. Again, Joe Average will probably not ever come up with Einstein’s theory of relativity. Neither would a lot of modern day physicists.

Another, more economic way to do this is to look at it from an economics perspective. Ignoring salary, if I’m a good developer, I’ll write software for my employer that will generate $300,000 in revenue over the year. I’ll troubleshoot and fix some bugs that will generate $100,000 in revenue. How does fixing a bug generate revenue? Imagine the bug rejects 50% of valid credit cards, alienating the customer, and they go to another eCommerce web site instead, losing you sales. Finally, I’ll notice that some process can be made more efficient, allowing us to save $100,000 in costs by streamlining our site, so we don’t have to by a bevy of new webservers and database licenses. A-ha! $500,000.

The example of the good developer, though grounded in reality, was hypothetical. Let’s take a real-life example of a bad developer. At a previous job, the Database Administrator, let’s call him Hunnicut, was atrocious. Because of avoidable mistakes that were directly traceable to him, people estimate that he cost the company about $500,000 during the year he was with the company. He would do dumb things that would lead to production outages and slowdowns. In response, he was given tools that would have avoided the dumb things. He refused to use them. D’oh! – $500,000

Good Markup

2005-08-16 21:54

Crawling through my web server logs from time to time yields interesting results. One thing I’ve noted is that I get a lot of hits on my résumé. The traffic to it increased after I made an effort to use semantic markup on the page, and again after I tweaked the keywords in the meta-tag.

All this translates to about an email or two a month wondering if I’m looking for a job, or asking if I know other people who have résumés similar to mine. Take home message… if you’re a geek with a web-site looking for a job, touch up your résumé…

Spelunking Through Code

2005-07-01 02:46
  • Why name something for what it does?

    <script language="JavaScript">
    function additem()
    {
    	if (document.all.left_list.selectedIndex < 0)
    	    return;	
    
    	var ind;
    
    	ind = document.all.left_list.selectedIndex;
    	document.all.left_list.options.remove(ind);
    }
    
    </script>
    
  • Twice as much body. Should be a shampoo ad.
    <body class="body">
    
  • One of my pet peeves.
    if oddeven=false then
    
  • Why use constants?
    Request.Form("string")
    Session("foo")
    
  • Why name things for what they represent?
    .TextSmallBold {
    
  • Do you really think it’s a good idea to highlight important words in the text on a web page by underlining them and coloring them blue?

Not That Good A Writer

Been looking at business plans where everyone promises that revenue will “hockey stick” n months out.

Which gave me an idea for a The Onion-style article…

Swedish Inventor Designs New Ergonomic Hockey Stick

Business analysts worldwide at a loss.

Of course, the hockey stick would have an appropriately oddly curved handle.

Virii Are Getting Better

2005-06-12 02:39

A virus is making the rounds. I’ve received 38 in the last 2½ days. I get to observe it because I own a domain and have a catch-all email address there. I like watching the social engineering that goes into non-self-propagating virii. It’s like software development in some ways. How to round out as many corner cases as you can. It’s also like communication. How to reach the most people you can.

It looks like they are all of the W32/mytob family.

  1. It send to both collected and random email addresses at the domain. The random email addresses it has sent to so far are: andrew, anna, bob, brenda, brent, dan, george, helen, julie, leo, maria, michael, paul, robert, sam, serg (really? without an e?), stan.
  2. The from address tries to look official. They all come from addresses at the domain also.
    • admin
    • administrator
    • info
    • mail
    • register
    • service
    • support
    • webmaster
  3. Subject lines are random but topical:
    • *DETECTED* Online User Violation
    • *DETECTED* ONLINE USER VIOLATION
    • Email Account Suspension
    • Important Notification
    • Members Support
    • Notice of account limitation
    • SZNUQQH (huh?)
    • Warning Message: Your services near to be closed. (bad grammar… most of the rest of the grammar is good though)
    • WARNING MESSAGE: YOUR SERVICES NEAR TO BE CLOSED.
    • You have successfully updated your password
    • Your Account is Suspended (lowercase “is”?)
    • YOUR ACCOUNT IS SUSPENDED
    • Your Account is Suspended For Security Reasons
    • YOUR ACCOUNT IS SUSPENDED FOR SECURITY REASONS
    • Your new account password is approved
    • Your new account password has been successfully updated
    • YOUR NEW ACCOUNT PASSWORD HAS BEEN SUCCESSFULLY UPDATED
    • Your password has been updated
  4. Attachments are .zip files. Why? Many anti-virus packages can’t scan .zip files, or are configured not to by default. I’m surprised that the attachments aren’t password-protected .zip files (with the password in plain-text in the message body), which anti-virus packages can’t scan due to the encryption. The names of the .zip files sometimes correlate with the subject. They all end in .zip

    • accepted-password
    • account-details
    • account-details
    • account-info
    • account-password
    • account-report
    • approved-password
    • document
    • email-details
    • email-password
    • important-details
    • lwmj
    • password
    • readme
    • tmpe
    • updated-password
    • ykrw

    The attachments contain filenames such as zip-file-name.txt              .exe. The spaces seem to be an attempt to scroll the executable extension off the right hand side of the WinZip filename column. The spoofed extension (.txt) varies, and can be other safe-looking extensions. The executable extension (.exe) also varies. Interestingly, the virus-scanner at work detects the virus. The one I have at home, with completely up-to-date definitions doesn’t.

  5. The email bodies are quite well done.
    1. The salutation is in bold, and of one of the two forms:
      • Dear domain Member,
      • Dear user username-from-to-field,
    2. The footer is interesting in that it tries to reassure the user. It also comes in two forms:

      • +++ Attachment: No Virus (Clean)+++ Domain Antivirus – www.domain.com
      • +++ Attachment: No Virus found+++ Domain Antivirus – www.domain.com
    3. The closing salutation varies too.
      • Thank you for using Domain!The Domain Support Team
      • Virtually yours, The Domain Support Team
      • Sincerely,The Domain Support Team
    4. As does the actual body of the body of the message.
      • It has come to our attention that your Domain User Profile ( x ) records are out of date. For further details see the attached document.
      • Your e-mail account was used to send a huge amount of unsolicited spam messages during the recent week. If you could please take 5-10 minutes out of your online experience and confirm the attached document so you will not run into any future problems with the online service.

         

        If you choose to ignore our request, you leave us no choice but to cancel your membership.

      • We have temporarily suspended your email account username-from-to-field@domain-name.com.

         

        This might be due to either of the following reasons:

         

        1. A recent change in your personal information (i.e. change of address).

        2. Submiting invalid information during the initial sign up process.

        3. An innability to accurately verify your selected option of subscription due to an internal error within our processors.

        See the details to reactivate your Domain account.

      • You have successfully updated the password of your Domain account.

         

        If you did not authorize this change or if you need assistance with your account, please contact Domain customer service at: from-address@domain.com

Stupid XML Tricks

2005-05-04 02:26

Photograph: Atrium, Miraikan Museum, Tokyo, Japan, March-April 2005, © Nick Varacalli. Simply put, my company does financial data exchange. We get data from someone in one format, and pass it along to someone else in another format. A coworker, implementing an outbound data flow today, came across the following in the specification:

If the price is empty, the Price element in the XML should be sent as: <Price></Price> and not <Price/>

Obviously some doofi are parsing XML by hand. I can’t imagine a commercial XML parser being that stupid.

Aside: If you know how to make the .Net XML writer output the specified XML, I’m all ears…

Of Work & Code

2005-03-10 01:56

On Work

Recursion, parsing, object model in place that wasn’t designed to support what I’m doing, and complex state machines all in one. Work is interesting and challenging. There are times I wonder why I’m paid to program… this isn’t one of them.

On the way home today, I was designing and documenting in my head for the first time in a while. That’s a good sign… well… other than the fact that I’m distracted while I’m driving.

On Code

//
// Five minutes oughta be enough.
//
oCommand.CommandTimeout = 900

As Tom notes:

If 5 minutes is enough then 15 minutes is definitely enough.

Time, Time, Time, See What’s Become Of Me

2005-02-03 01:11

Side note: reading a messaging spec at work. The following seems illogical to me.

Placeholder Allowed Values
a Single uppercase letter only. A-Z.
A Single uppercase or lowercase letter only. A-Z or a-z.

Ran into a bug at work where an FTP job was seemingly losing it’s connection to the server immediately. After a little spelunking through code, I noticed the following approximate code spread across different classes.

public class JobSystem {
	...
	public void JobStart() {
		...
		// this.Timeout is a TimeSpan object.

		FTPJob.Timeout = this.Timeout;
	}
}

public class FTPJob {
	...
	public void InitFTPClient() {
		// this.Timeout is a TimeSpan object.
		FTPClient.Timeout = this.Timeout.TotalSeconds;
	}
}

public class FTPClient {
	...
	// Timeout in milliseconds.

	public int Timeout {
		...
	}
}

Two things to note:

  1. TimeSpan classes should be passed around instead of numeric value types, until the last possible moment.
  2. Properties that have an inherent unit associated with them should be named appropriately. This bug never would have been written if FTPClient.Timeout were instead named FTPClient.TimeoutInMilliseconds.

Old Dog Looking For New Tricks

2004-08-18 18:21

Photograph: Pink Flowers, Green Leaves, Cambridge, MA, 2004-06, © Nick Varacalli. So, I’ve decided that I need a more powerful editor than notepad/write/word/excel, so I’m biting the bullet and learning emacs. What do I want? A powerful, customizable, scriptable editor that takes advantage of my existing Windows muscle memory and world view. Yes, I know I should learn to live with the way Emacs is. But I’d rather it and Windows compromise.

These are the questions that I have after a few days of use. I haven’t researched all of these yet.

  1. How Do I?
    1. Enter filenames with spaces? The space character auto-completes.
    2. Toggle word-wrap on the keyboard? Not the word wrapping that is done automatically to add a newline at the end of the line, but word wrapping in the window.
    3. Toggle view whitespace on the keyboard?
    4. Set up printing? Preferably in a windows like manner. Once I figure it out, bind it to C-p.
    5. Automatic Cr/Lf translation. See FAQ.
    6. Spell check? The Tools | Spell Check menu item doesn’t work. Searching for program: no such file or directory ispell
    7. Enable detection if a file has changed on disk, and prompt for what to do?
    8. Use the possible choices C-x C-f brings up in a split window?
    9. Search and replace with impunity?
    10. Sort the current region?
    11. Set bookmarks in a document and jump around between them?
  2. Customization
    1. Solved Bind close current buffer to C-F4 (initially: unused). (global-set-key [(control F4)] 'kill-this-buffer)
    2. Solved Bind undo to C-z (initially: suspend / minimize window). (global-set-key [(control z)] 'undo)

    3. Why isn’t selection highlighted when I use the space bar to start a mark? .emacs contains: (transient-mark-mode t)

      (delete-selection-mode t)

    4. Remap C-M- keys that conflict with Windows Shortcuts. Fix either the shortcuts or emacs.
    5. Ctrl+Tab to switch buffers. Ctrl+Shift+Tab to back switch. (global-set-key [(control tab)] 'bury-buffer) Doesn’t quite work the way I want mind you.
    6. Bind select all to C-A (initially: beginning of line).
    7. Solved Bind Shift-Arrow to select. (pc-selection-mode)
    8. Bind cut/copy/paste to C-X/C/V. (global-set-key [(control v)] 'yank)
    9. Get M-y highlight what it just yanked back. Can I bind C-S-v to this instead? Why does C-h c C-S-v report ‘yank’ just like C-v?
    10. Get Alt-w to not deselect?
    11. Put buffer name, filename and dirty marker in the title bar.
    12. Bind save to C-s (initially: isearch-forward).
    13. Bind isearch-forward to C-f (initially: char-forward).
    14. Bind isearch-forward to F3 and S-F3 to isearch-backward.
    15. Jim S. remaps C-g to goto line. What does he use as keyboard-quit instead?
    16. C-x C-f How do I make it such that / or \ or Tab completes, and space does not.
    17. Map F1 to help, C-h can be used for something else.
    18. Prompt for save on kill modified buffer?
    19. How do I find a list of colours that can be modified for each mode?
  3. But I Like Windows…
    1. Can Emacs work like a real MDI app?
    2. How to make the caret a line, not a block in insert mode?
    3. Yes no cancel prompts use message boxes?
    4. Can the mode line be made into a more Windows-like status bar?
    5. Have the scrolling work smoother. Not jump when I’m at the bottom of the page.
  4. Shell
    1. Why doesn’t tab completion of filenames work?
    2. Why is the command re-echoed?
  5. Concepts
    1. Explain to me the concept of selection or region.
    2. Can I get emacs to work as if it had a proper cyclic clipboard?
    3. Why doesn’t C-h a font-lock-support find font-lock-support-mode?
    4. In text mode, why does Tab do weird indentation from my point of view? How do I tweak it in certain modes so it inserts a tab if it can’t smart indent, or just insert a tab, period? How do I make TAB block indent and Shift-Tab block outdent like VS.Net?
    5. C-i and C-m are interpreted as TAB and RET respectively. Can I bind either of these C-keys separately from TAB and RET?
  6. To Read / To Do
    1. Emacs Info (C-h i).
    2. Read more info documents.
    3. Get my .emacs configuration under SCC.
    4. Emacs manual.
    5. O’Reilly Book?
    6. Ask S.G. for his .emacs file.
    7. Is there an emacs ‘tip of the day’ functionality?
    8. Elisp tutorial.
  7. HTML Mode
    1. How to have the ending tag entered when you finish the beginning tag?
    2. How to have the quotes entered when you type attribute=?
    3. Get CSS mode working.
    4. Autocompletion of tags in HTML mode?

IE Sucks

2004-06-20 18:33

Photograph: Shad Thames, London, England, 2004-03, © Nick Varacalli. I finally figured out how to add a table of contents to my blog (on my website, not on LJ). That’s why the logo is now on the right. The left is left free for navigation.

Getting it to work the way I wanted in IE was impossible. So I punted. I actually have browser detection code that disables the thing if you’re using IE. Getting it to work in FireFox was quite fun though. Learned a fair bit about both CSS and JavaScript. Browser layout engines are pretty sweet. Click on the Contents link in the top left corner of the window. It may take a bit of time to appear, it has to crawl the DOM for a pretty large document. If you’re using another browser, please send feedback on how it works for you.

While I was at it, I added a page to help me with square dance calling. Update: 2004-08-15: Page removed.

Résumé Writing

2004-05-27 18:42

Photograph: Lonely Red Rock, Nahant, MA, 2004-04, © Nick Varacalli. Been helping a number of people with their résumés lately. Also been reviewing a fair number at work during the interview process. Time to get my ideas out on paper. Of course, a lot of these are based on my own résumé, and many are specific to my own industry.

  • Some people suggest using a middle initial. I think it’s pretentious.
  • Keep it down to a page. When I interview multiple people a week, I get sick and tired of reading anything over a page. I also get sick and tired of reading prose. Even two pages is annoying. Imagine how tired recruiters, HR, or managers are of sifting through deep stacks of paper. Extra pages only help me ding candidates. I already have an idea of what they are trying to say after the first page. After that, I’m wading through something they did 10 years ago. Although it was probably a formative period for them, I don’t particularly care about it in that much detail. I want to hire them now, not then.
  • Put your name in huge letters at the top of the page.
  • You’re a techie. Get yourself a decent email address.
  • If you’re using Word, go that extra step and set the document properties to something nice. They get displayed in status bars and tool tips these days.
  • If you’re using Word, make sure that Track Changes is off, and that there is no lingering cruft that someone could possibly see.
  • Include some sort of summary or objective statement. It should be short, descriptive, and powerful. Be prepared to customize it on a per job application basis.
  • Once you have a decent amount of experience, don’t bother including the months for your jobs. They don’t really help, and can only hinder.
  • Once you have a decent amount of experience, don’t bother listing jobs you’ve stayed at for less than a year. Exceptions to this are for companies that are well known in your industry, or jobs that are great conversation starters and you don’t already have enough conversation starters. Feel free to keep them in an online version if you see fit, since length isn’t as much of an issue.
  • Keep the descriptions of the jobs active, aggressive, exciting, dynamic, yet terse and succinct. Be someone who gets things done. Use action verbs. Whether you want to use prose or bullets is up to you, but as someone who reads them, bullets are easier. Keep exaggeration to a minimum. Don’t lie.
  • I tend to like a very short blurb about other skills and interests. Gives me something to chat about if I feel so inclined during an interview.
  • Can’t relocate? Don’t put it on your résumé. It sounds overly negative. Don’t apply to jobs that require relocation. If someone contacts you based on your online résumé for a job that requires relocation, politely decline.
  • References available upon request is pretty much a given. Don’t bother including it.
  • Be consistent.
    • Always use the same verb tense when describing what you’ve done. Always the present (design, implement, produce, administer), past (designed, implemented, produced, administered), or that other thingee that I can never remember the name of (designing, implementing, producing, administering).
    • Use the same formatting, fonts, layout, etc. Better yet, use styles, whether CSS for HTML, or the styles available in your word processor.
    • Use the same capitalization. If you’re going to Capitalize Some Things, don’t leave other things uncapitalized. Also, if you’re going to call it xml in one job, don’t call it XML in another. Oh, and it’s Java, not java.
  • Grammar and spelling mistakes are inexcusable. Have as many people as you can read it. People not in your industry are good proofreaders since they’ll gloss over the industry specific jargon and focus on other things.
  • If you are working through a headhunter, ask them if they modify your résumé before sending it to employers. If they do, ask them to see the final result of their modifications.