Fuser Detects FTP Completion

At work, we have legacy systems with problems which no one had taken the time to fix. One such legacy problem involved an FTP server. Client applications would FTP files up to the server for processing. That part worked fine. What didn’t work was knowing when the FTP was complete so we could start processing the data.

Recently, I decided to fix this problem.

Many people have written on the subject. One of the approaches advised, “watching the file and when the file size stops changing, you can use it.” I didn’t like that one. For so many reasons. Another recommended using lsof. Hummmmmmm. I didn’t get a warm fuzzy feeling with that one either.

A coworker suggested I try fuser. That did the trick as fuser allowed me to monitor an incoming file and determine when it was no longer being used by the ftp (or any other) process.

#!/bin/bash
DELAY="10"

while true; do
  for FILENAME in `ls -A1 /var/ftp/incoming/*.gz 2>/dev/null`; do
    if [[ `fuser $FILENAME | wc -c` -eq 0 ]]
      then

        # do something interesting with the data here
        mv  $FILENAME ./backup/.

    fi
  done
  sleep $DELAY
done

All our incoming FTP files arrive in a single directory. The above script loops through the list of files once every 10 seconds. Normally, ls complains when you ask for a file listing and there are no files to list. The 2>/dev/null code fragment will send the complaint quietly to the bit bucket.

For each file found, fuser lists all processes that are using the file. I simply count the number of characters, wc -c, in the response from fuser. If the file is not being used by any processes, fuser returns nothing and the character count is zero. At that point, I can safely process the file.

update 2008-12-25: I should have added that this server runs Centos 5.1. I did the development on OS X (10.5.5) and that fuser behaves a little differently on the two platforms.

An Open Response

I attended the SDForum Engineering Leadership SIG talk What Defines an Early Stage A+ VP of Engineering? held on Thursday, October 16 at SAP. Matt Pérez, COO of nearsoft.com, spoke his mind on the subject in the context of his own experience. I see a lot of presentations. Matt’s style and presence puts him at the front of the class.

At the end of his talk, Matt opened the floor for audience questions. He also opened the floor for the audience to answer (or simply opine on) the question. One guy asked–I paraphrase here–the question, “I am a CEO; How do you VPs of Engineering want to be managed.”

The audience and the CEO bounced the conversation back and forth for quite a while. It ended with more facts about the CEO’s situation than with answers or solutions. Here’s what I recall. The CEO:

  1. leads startup company
  2. has a six month product development plan
  3. has technical degree
  4. has not seriously programmed since college
  5. cannot assess if VP Engineering is performing satisfactorily

Audience members commented on the six month development plan. I want to add here two more comments that emerged as I’ve thought about the question over the past week: communication skills and models. I will first chime in on the development plan.

Development Plan

In the context of a startup company building a software-based product, a six month calendar for milestone delivery is too long a time window. My opinion. Why? A development plan is not simply the milestone dates extracted from the marketing plan.

Marketing plans, business plans and development plans are all very different animals yet they both describe the same business but from different perspectives.

Drawing of business, marketing and development plans

In the diagram above, milestones are only one part of the development plan. The development plan may extend for six month or longer. Of course it can. Budget planning requires that. However, I’m an advocate of agile methodologies. Pick your favorite flavor. I choose Scrum.

In doing so, milestones fall into one of two buckets: now and later. The now bucket is the set of milestones to be delivered in what scrum calls a sprint. A sprint is simple a two or three period. It can be a little as one week or as long a four weeks. Every day, developers choose a set of tasks and commit themselves to finishing those tasks.

This is all very binary. Either developers finish the daily tasks they take on or they don’t. Either the development team delivers the milestones for the now bucket or they don’t.

Communication Skills

From the comments, the CEO had a lot of experience in marketing and sales but little experience in development. Consider that the communication skills that help a salesperson succeed in meeting revenue goals are very different than the communication skills that help a developer succeed in meeting milestone commitments.

On the surface, a sales approach might seem appropriate to secure commitment on a set of near and long term milestones. It is not. In selling, there is a trade of values. You, the sales rep, offer a product and through conversation, influence the buyer to commit money in exchange for the product. All platitudes of seller and buyer partnerships aside, the roles of seller and buyer are well defined and they are not on the same team. That’s okay. That’s simply the nature of that game.

Contrast that with the nature of milestone scheduling. Everyone is on the same team. But consider the impact of selling a schedule. Consider the techniques used in sales: tie downs, uninvited debts, reciprocal concessions, and so on. These are not speech elements which help developers solve problems. Speech techniques that work for a sales rep to “uncover hidden money” does not work for a developer to “uncover the cause of thread lock”.

Every time you sell a schedule to a development team unfamiliar with the mechanisms of selling, you diminish the trust and respect the team has for you. In turn, you diminish your ability to lead.

Topic of communication fills volumes. I will offer here but two alternatives. They are not the only options.

One option, put the VP of Engineering on equal footing with respect to the communication style. Have her trained in brutal negotiation tatics. The upside is that you will end up with a schedule that the team more consistently delivers on time. The downside is that the team will solidify their trust and respect in the VP Engineering and increasingly see you as the enemy.

A second option, take responsibility for the success of the development team, including the VP of Engineering. The upside is that you increase your ability to lead. The downside is that it requires more of your time. A lot more. And it is more difficult that the first option. The key is to improve the quality of communication with your team. (A deep and controversial topic which I leave to you as an exercise to investigate.)

One last work on communication skills. When a development team uses their development process as a fortress wall to protect themselves, it is a symptom of a chronic lack of trust and respect. I have personal experience where the team lead used user stories to bury the marketing team in an endless morass of rework. Agile methodologies are designed to facilitate flexibility. Beware of anyone using an agile methodology to justify insubordination. It is cancer.

Development Model

Lastly, you are either the CEO or your not. As CEO–especially a CEO of a startup–you have a responsibility to know how your business operates. If you cannot determine whether your development organization is performing well or not, you have a responsibility to find out.

I suggest you take your VP of Engineering to task. Immediately. Have him create a model of the processes and methodology the development team uses. You don’t have to understand the minutia of every line of code, the configuration of every tool, the… you get my point. But if you don’t have a working model of how they do their work, there is no common language in which to communicate. (That damned communicate word keeps popping up.)

The model doesn’t have to be literally accurate. The Bohr Model is very useful for chemists and physicists when they discuss the atom. But they understand that the Bohr Model of the atom is not the atom. It’s a model. And there are times when the Bohr Model is insufficient for the conversation; a new model must be used.

So it is with business operations and processes. Establish a working model and insist that the management team understand the model. It will improve the quality of your staff’s communication and in turn the efficacy of company teams.

A Week in the Slife

slife activity September 22, 2008

Monday’s morning scrum was dragging out. Scrum is supposed to be a short meeting so when it starts to drag, I’ll make a “now and later” request. What conversations can we complete “now” in a few minutes and what conversations are better served with their own “later” in their own planning meeting. I hadn’t scheduled Monday planning meetings. Sometimes meetings get in the way. Sometimes they are the way. Monday’s meetings were definitely overdue.

After lunch (where did I eat?), I completed final bug fixes and code cleanup for my development work on the Amazon EC2-based metadata processor. For each incoming XML file (from iTunes), we parse the metadata into multiple XML files (playlists), in multiple XML vocabularies (XSPF, Apple Plist) and store the files on Amazon’s S3. I added a CSV output writer so now we have both XML and CSV.

I updated the CollectionsController’s HTTP DELETE method. We use Struts2. I loathe Struts2 but it’s what we have. There is a REST plugin for Struts2 that makes the Action look and feel much like a Rails Controller.

So why not just use a RoR? I use the JAXP StAX parser. In my testing, StAX screams compared to REXML and I’m hooked on Java Collections. The XML documents we parse are large. StAX parses a 30MB XML document (including dereferencing all the playlist tracks) into a value object in under 2000ms.

I sat aside administrative time for the afternoon. Just under an hour.

slife activity September 23, 2008

Started a project to integrate Google Analytics event reporting into the metadata processor.

Google analytics rules. It is dead simple for web pages. Problem is, our Amazon EC2-based metadata processor doesn’t have web pages. It’s all server-side with a minimalist RESTful API. Web pages have javascript and most of google’s help is around adding javascript to your web page, calling google javascript functions from your web page. And so on.

I started with a couple articles (one, two) as my basis for building and threading server-side activity reporting to google sans javascript.

Mandarin classes started. I like the class. Class at 7:00 – 9:00 pm Tuesday night. makes for a long day. I also attend toastmasters 6:30 – 8:00 am Tuesday mornings.

slife activity September 24, 2008

Finished bulk of the coding for google analytics, threading the call in at just the right moment wasn’t hard. Constructing the query wasn’t hard. Understanding exactly what is needed in the query string took some reading.

I took time from coding in the afternoon for a code review of our web application. Aside from the Amazon EC2-based metadata processor, our web application is hosted at Silicon Valley Web Hosting. I am accountable for the development schedule on that web application as well. I needed to spend an afternoon with the developer working on that codebase.

At the end of the day, I pushed hard and finish my work on the analytics.

slife activity September 25, 2008

One of the concerns I have with our EC2-based metadata processor is running out of capacity. I created but one instance (albeit and extralarge instance) and it is handling our current load without a problem and can handle much more. At some point, I will want to add a second instance. And that means I’ll need a load balancer.

I almost never start a new project without seeing if someone has already solved it. I say, “almost” and when I don’t, I usually regret it. I’ve been looking at a number of load balancer articles. It came down to nginx and mod_proxy_balancer.

I chose mod_proxy_balancer. It seemed easier to deal with and–for our needs–more than adequate. The metadata processor doesn’t get a lot of requests. Basically, a client agent logs in to establish and authenticated session and then submits the metadata for processing. Two page hits and the session is done.

The authenticated session requirement necessitates a load balancer which handles sticky sessions. An article on scaling drupal on johnandcailin.com‘s blog is the basis for my load balancer. Since I’m using java and tomcat, I didn’t need to manipulate the cookies as the blog article describes. I simply needed to modify tomcat’s server.xml file to add a jvmRoute to the Engine element. I chose to add the hostname of the Amazon instance as the route.

I had an error in my load balancer configuration. I fat-fingered one of the characters in the route and that caused the balancer to “quietly” revert to round robin load balancing. I double checked all the routes, found the error and stickysession balance started working. I called it a day.

slife activity September 26, 2008

Before scrum, I cleaned files off my computer’s desktop.

After scrum, I finished documenting the load balancer setup on our wiki and shut down the load balancer. No need paying for what you don’t need.

After lunch, I logged into our servers at svwh for some long overdue maintenance.

Later, I started a new project which cross references members, artists and members. I first arrived at the algorithm last May but haven’t had the bandwidth to work on it. Probably a good thing. When I first thought of implementing the algorithm, I came at it from a C language background. Using binary keys and simple datastructures of pointers, the C approach would be extremely memory efficient and blazingly fast. When I started looking thinking about it on Friday, I had shifted to Java Collections approach. It will use more memory and run slower but I could implement it with very little code. Collections rule.

I have the basic algorithm written and will start working on data retrieval and storage next week.

Resume Advice

I read a lot of resumes. It’s a depressing activity. One thing I’ve gotten from reading so many resumes is an empathy for hiring managers.

Don’t get me wrong. I remember those anxious, uncertain days of writing my own resume. Worrying whether I had just the right words that would keep my resume out of the circular file.

The truth of the matter is that most resumes are crap. Total and complete crap. When I scan through resumes, I make three piles.

1. Incoming
2. Shortlist
3. Discard

I read all resumes that cross my desk. What I’ve found is that resumes from headhunters are no less crap than those off craigslist. I speculate that is an artifact of the utterly thankless, fruitless job it must be to counsel applicants on writing a good resume. It’s simply more effective (revenue-wise) to speak in proxy for the applicant to the hiring manager.

Ok. I have three piles. Before reading even the first resume, I review my objectives in hiring another employee. It’s not a slot, a position, a req. I’m adding another person to the team. It may sound trite but I really believe a company is simply the whole of its people. I agree with Tom Peters, who writes in talent.

“What is a “baseball team”? Simple: A baseball team is … ITS ROSTER. Sports marketing is important. No doubt about it. But all the sports marketing in the world won’t make up for a team that loses year after year. In the mid- to long-run, Talent Rules.”

So, I have a pile of incoming resumes which I read one-by-one and place them in either the shortlist or discard pile. Some resumes are easy to sort. Some not so easy. What gets a resume in the shortlist pile? Something in the resume left me with the sense that this person might be a real contribution to the team. I leave it to you to puzzle out what gets a resume in the discard pile.

There is, in all of this, a type of resume that is harder to read than any other: Curriculum Vitae Maxima. A CV is no substitute for a well written resume. The worst of all CV’s is the “Block Copy” version wherein each moment in one’s professional experience is documentented in a boilerplate. The result is a soup of buzzwords and endless rambling about past projects.

Confused? Let’s look at an example from a popular job board and then I’ll make some comments.

SUMMARY Professional Summary

• 7 years of experience in developing J2EE Web applications using different frameworks.

• Extensive experience in Design and Development of Web application using MVC Framework.

• 2+ years of experience in mobile software development.

• Work experience in Storage, financial and Telecom domains.

• Experience on various Application servers BEA Weblogic, and IBM WebSphere and in the Web server Apache Tomcat.

• Sound experience in working with Object Oriented design, MVC Architecture, Enterprise Java Beans, Struts Framework, Hibernate, Java Design Patterns and successful implementation of the same.

• Sound knowledge of Core J2EE Design Patterns and EJB Architecture.

• Work experience in SOA and MOM.

• Proficiency in programming Java Threading, JSP, Servlets, JDBC, RMI, EJB.

• Sound knowledge of different XML Architecture frameworks like JAXM, SAAJ, JAX-RPC, JAXB, XSLT, Xpath, AJAX, Apache Axis.

• Experience in Java Messaging Service.

• Expertise in Object Oriented Analysis and Design using UML.

• Experience in using relational databases – Oracle 9x, MS SQL Server and MY SQL.

• Sound knowledge of Spring3.2.

• Excellent project life cycle experience (SDLC) in all aspects of requirements specifications, design, code, test, deploy, maintaining.

• Proficient in various software development and debugging tools like Eclipse Debugger.

• Experience in developing GUI using java Swing.

• Experienced in working on Test Plans, Functional Specifications, Use cases, User Acceptance Testing (UAT), Involved in performing the FIT Analysis, Stress testing.

• A team player with concern for quality at all levels and ability to perform under stress. Good communication and interpersonal skills, commitment, dedication, result oriented, hard working with a quest and zeal to learn new technologies and undertake challenging tasks

TECHNICAL PROFILE

Languages J2SE 1.5, JSP 2.0, Servlet 2.4, JDBC 3.0, EJB 3.0, RMI-IIOP, PL/SQL,

C++, JNDI

Web/App Server Apache Tomcat 4.x, BEA Web Logic 8.1, IBM WebSphere 6.0

Database ORACLE 8i/9i/10g, MS SQL Server 2000, MySQL4.x, MS Access

IDE Eclipse 3.2, Net Beans IDE 3.5.1, JBuilder 8/9

Version Control CVS, VSS, Rational Clear Case

Framework Struts 1.3, Hibernate 3.0 , Spring 1.0.3 , JSF 1.2

Tools ANT, LOG4J

Scripting and markup JavaScript, HTML, WML, Ajax

Methodology UML, Design Patterns

Web Services SOAP, WSDL, JAXP, JAX-RPC, JAXM, JAAS, JAXB, JAXR

XML Technologies XML, XSLT, Xpath, SAX, DOM

Operating systems

Windows 2000/XP/NT/98, Enterprise Linux

EDUCATION n:

Master of Computer Applications (M.C.A), India.

PROFESSIONAL EXPERIENCE

Project Celerra Manager

Client EMC Corporation, NC

Environment / Tools Java, Struts1.2, Servlets, JSP, Applets, JSTL,

Custom tag libraries, SWT, XML, Perl Scripts,

JAXB, HTML, Apache Tomcat 4.2,Eclipse 3.2, Hibernate3.0,

Oracle 9i, OOAD, Linux (RHEL)

Duration Dec 2006 – Present

Description:

EMC Celerra Manager is a web application that enables intuitive management of EMC Celerra IP storage (NAS and iSCSI) solution—and ensures high availability. Celerra Manager helps configure, administer, and monitor the Celerra networked storage from a single online interface—saving time and eliminating the need for a dedicated management workstation.

Responsibilities:

• Actively participated in High-level Document and Detailed level Document for different modules in the project.

• Worked as module lead.

• Involved in enhancing the existing product

• Developed the statistics graph using JSP, JSTL, Custom tag libraries, Applets and Swing in a multi threaded architecture

• Developed the Struts Formbeans, ActionClasses and JSP for Notification processing

• Implemented the business logic for alert processing, for various events using Java threading.

• Implemented the hibernate mapping for the statistics data for different storage objects and database interactions.

• Involved in bug fixing and performance tuning of the existing
project, experience in working with JProfiler for handling memory leak.

• Maintaining and enhancing the various graphs displayed to user.

• Used the Struts plug-in property for validation, developed the Action Classes, Action Form Classes, created JSPs using Struts tag libraries and configured in struts-config.xml, web.xml files.

• Created the documentations for the enhancements.

• Developed different debugging tools for the application in Java.

• Involved in the integration and JUnit testing of the components and fine-tuning of the code.

Project Retail Enterprise Lending System (Chase JPMC)

Client Dorado Corporation, CA

Environment / Tools J2SDK1.4.2, JSP, Servlets, XML, XSLT, SOAP, Struts,

JAXP, EJB 2.0, BEA Weblogic 8.1, ANT, JNDI,

JMS, WebServices, Eclipse 3.2, Oracle 9i, OOAD, MQ Series

Duration Oct 2005 – Dec 2006

Description:

Retail Enterprise Lending System (ELS) is a product for use of JPMC (Chase). This product provides an integrated Loan Origination System (LOS) for Chase’s retail users. The product leverages existing components including ChannelMaster™, PriceMaster™, SourceMaster™ and .MOR™ server. Service Oriented Architecture (SOA) and Message Oriented Middleware (MOM) serve as the technology platform for these products. The ELS integrates with Chase’s Enterprise Mortgage Integration (EMI) Hub. The purpose of this integration is to generate up-front (Good Faith Estimate etc.) and closing documents for the borrower to sign.

Responsibilities:

• Involved in design and development of ordermanager JSP pages

• Involved in developing the Entity Beans for persisting / updating the client information.

• Used JAXP transformer for transforming the xml from ChannelMaster and send to the verification Queue.

• Action classes and handlers for processing the messages and passing it to various other applications is done through STRUTS as it requires higher level of abstraction.

• Used MQseries for Java to communicate with MQ objects to retrieve messages from Queues.

• Designed DOM objects to pass the reference to channel master and ordermanager so that both of them can have message communication. All Java coding is done in J2SDK.

• Used JAXM for making the SOAP message for invoking the Channel Master.

• Written the Junit test cases for the application.

Project GeneTick

Client Convergent Communications , India

Environment / Tools Java, Servlets, JSP, J2ME, XML, HTML, Hibernate, OOAD, Oracle8i,

WebSphere 5.2, Net Beans IDE, Windows 2000, GSM Modem

Duration Oct 2004 – Sep 2005

Description:

GeneTik is a mobile Application through which a client can avail the facilities of online ticket booking from the client mobile. This facility will be available for Cinemas, Restaurants, Air-Travel etc. The application has 3 channels through which the client request will be serviced –

1. J2ME – The client has the GUI in their mobile using which he/she could select the category they are interested and send a request for the ticket. The request will be processed in the server and a bar code for that ticket will be send back to the client along with the accompanying coupons if any. The client can make the payments through a credit card.

2. SMS – The client should send a request to a short code. There is a message listener which always listens for incoming requests from the client to serve the request and sends back the relevant information and accompanying coupons if any, as picture messages. This channel supplements the J2ME channel, like providing information regarding the nearest hotels, movie theaters etc.

3. WEB- The client will have to make HTTP requests from web browsers for the Tickets.

Responsibilities:

• Involved in the Design, Development, Testing of the SMS Channel.

• Developed the SMS Channel using GSM Modem.

• Generated the PDU Algorithm for Picture Messaging.

• Developed the event based communication channel to the GSM Modem through the COM port.

• Involved in the design and development of the controller servlet, which intercepts the requests from the client.

• Prepared the Hibernate Mappings for the client data.

• Created database tables in Oracle as backend for storing the client data

• Involved in developing the DAO layer to access the Oracle database

• Involved in the integration and unit testing of the components and fine-tuning of the code.

Project SFSolChat

Client SF Solutions, Switzerland

Environment / Tools Java, Servlets, JSP, XML, HTML, EJB, Oracle8i, JNDI,

SAX Parser, IBM WebSphere 5.1, WSAD, Web Service, SOAP,

Windows 2000

Duration Jan 2004 – Sep 2004

Description:

SFSol Chat is a web-wap based chat application. This application enables the mobile clients to chat with web-browser using the WAP gateway. The mobile clients with a minimum balance may chat with a published shortcode. There are operators who assume some nickname for chatting with the mobile clients. This software also provides for MMS and picture message conversations using SOAP. The mobile service provider takes care of the billing details through a Web Service.

Responsibilities:

• Involved in the Design, Development, Testing of first phase of the application.

• Developed user interfaces using JSP, XML, Java script validations and HTML.

• Developed the controller servlet using front controller pattern.

• Developed the Stateful Session Bean components for maintaining the operators sessions.

• Developed the session management API using Java threading

• Developed the Entity Beans to persist the client conversations

• Involved in Database table design and developing HQL Queries and stored procedures.

• Developed the test cases for Junit testing.

Project Content Management System.

Client Airtel, India

Environment / Tools Java ,JSP , Servlets , WML , Tomcat 4.0,

Nokia Smart Messaging Kit , Oracle 8i, Windows

Duration Sep 2003 – Dec 2003

Description:

This is a web-wap based application for content management for mobile end users. The mobile users may download different MMC contents from the content management server. There are different users for this product like the content provider who uploads the content to the server , service provider who actually provides the basic mobile service. The application takes care of content management from different content providers as well as the billing when an end user downloads content.

Responsibilities:

• Analyzed the user requirement and designed various screens

• Developed the WML Presentation pages

• Coded the different servlets, JSP and Java bean components

• Implemented the DAO object to connect to the oracle data base

• Involved in table design and writing stored procedure

• Code the JDBC for accessing LOBs , image and ringtones

• Wrote client-side Java scripts.

• Secondary responsibilities included problem analyzing and fixing reported bugs.

Project Registration Management System

Client America Quality Assessors India Pvt. Ltd.

Environment / Tools JSP 1.1, Servlets 2, Java Beans, Java Mail, XML, Oracle9i,

Tomcat 4 , JavaScript.

Duration Feb 2003 – Aug 2003

Description

This is an Intranet Project developed for the America Quality Assessors India Pvt. Ltd. AQA India is involved in auditing Organizations going in for ISO certifications. The project keeps track of various activities, like the auditors associated, their affiliations, organizational data, certification information, and surveillance information. Various reports are generated monthly/yearly wise, auditor wise, organization wise, surveillance wise, Quotation wise etc.

Responsibilities:

• Involved in Business Process Study, Functional Specifications of the System.

• Involved in Coding, Designing, And Integration of Modules.

• Wrote client-side Java scripts.

• Involved in Developing and Deploying Java Beans.

• Programmed JSP Pages.

• DAO Objects to Connect to Database .

• Used JDBC for data base access

• Writing Unit Test Cases & doing Unit test and Responsible in Developing Controller Servlet.

• Involved in the integration and unit testing of the components and fine-tuning of the code.

Project IndiaTunes.com

Client India Tunes Pvt. Ltd

Environment / Tools Jdk1.2, JSP 1.1, Servlets 2.2, Tomcat 3.2, Oracle 8i , JavaScript

Duration Jun 2001 – Dec 2002

Description:

This is a web application, which allows the audiocassette dealers and customers to search for the details of the cassettes available by Cassette Company. The system takes care of Order entry, Payment, Shipment and Inventory processing. It provides a facility for entry of Customer’s/ Dealer’s details, Order details and monitoring of the Reservation, Return/ Replace/Change offer, dealer’s Credit Limit.

Responsibilities:

• Involved in Coding and Developing WebPages using HTML and JSP.

• Programmed JSP , JSTL , Java Bean and servlet components,

• DAO Objects to Connect to oracle Backend

• Implemented the data base connection pooling.

• Wrote client-side Java scripts validations.

Sweet Mother of Pearl! I ask you to imagine for just one moment an incoming pile 30-deep of these masterpieces of redundancy.

RULE 1: The resume shall not exceed 2 pages.

Some headhunters intuitively sense this and in a misguided attempt to help an applicant (help themselves close the business), resize type to 8 or 9 point type and squeeze out all whitespace. This simply makes it harder to read.

RULE 2: The resume shall use standard font and formatting.

What’s standard? As a rule, I’m going with 2KB to 2.5KB per page of raw ascii text. Two pages … 4-5K bytes. That’s it. After formatting, this gives a good balance of text to whitespace.

If you really, really feel the need for a CV, publish one online. Just don’t send it to me. While I will read it, I generally sort the incoming pile from shortest to longest. The longest CV will most certainly get read last.

How to begin writing a resume? Start with a simple text editor. There are numerous guides on how to organize your resume. Which one you choose really doesn’t matter to me. However, I do expect an opening paragraph followed by a block that establishes your domain knowledge.

The example resume above fails to supply a an opening paragraph. I’m looking for a brief message that says “I’ve done this and now I want to grow in that area”. After reading this resume, I might suggest this opening paragraph.

Senior Java Developer with 7 years experience building Java-based enterprise system. Areas of specialization include web applications, XML processing and web services. I look to join an agile team committed to test driven development.

RULE 3: The resume shall include a three or four sentence opening paragraph.

The example gives a summary section but I don’t get a clear sense of what this applicant’s true domain knowledge is. It seems to say, “I specialize in everything.”

The applicant also, in the summary, claims to have “Sound knowledge of Spring3.2”. Funny. As of today, Spring is only at version 2.5.

RULE 4: The resume shall include neither lies nor misinformation.

My suggestion is to simply omit all version numbers. As soon as you add version numbers, you lose. They date your resume and, as it turns out, are largely irrelevant.

When you create the domain knowledge block, keep it simple and include only what you consider your assets, not what you think I want to hear.

languages Java Javascript SQL C++ frameworks Spring Struts EJB Hibernate
servers Weblogic WebSphere Tomcat database Oracle SQLServer MySQL
architecture SOA MOM JMS xml JAXM JAXB XSLT Axis
java Threads Swing planning UML SDLC UAT TDD

RULE 5: Use a simple table to show your domain knowledge.

The experience section should highlight your contributions and experience gained at each of the assignments you choose to highlight. Contrary to what you may read, I don’t believe any claims of “I did X and that saved/earned the company Y dollars.” Total and complete crap.

What format you choose for your experience section is up to you. Just make it clear what you contributed and the experience you gained. I really don’t care about anything else in your resume’s experience section other than these two things. The verbal interview is the place to expand on your background.

RULE 6: Experience is only contributions and experience gained.

End the resume with your education. Do not include “references on request” or any other such nonsense. Just your education.

RULE 7: End the resume with your education.

If you are posting your resume on a job board, then the resume must stand on its own. However, if you are sending your resume to a company, you have the option of including a short cover letter. I highly recommend doing just that. A headhunter, from an applicant’s perspective, is a talking cover letter. Help the headhunter understand why you would be interested in a company. If you are writing a cover letter, think like a headhunter.

The cover letter should reflect your genuine interest in a company. Don’t force it. It should reflect your actual interest. If you cannot muster interest in a company, do not apply.

RULE 8: Write a cover letter.

Finally, there is no substitute for basic communications skills. A resume that makes it into the shortlist pile is only the beginning for that applicant. The rest of the interview process is verbal. But that is an entirely different topic.

A Slife of Life

I saw Rorschach‘s tweet about slife and thought I’d give it a try.

Wow. It is eye opening. You can read a mans whole life with slife. I installed it Thursday morning.

It didn’t surprise me. I more or less know how my days are filled. Here’s two and a half days…

07:30 arrive office, make coffee, review yesterday’s notes
08:00 read originalsignal.com
08:30 scrum meeting
09:00 write code, compile code, commit code
10:00 bathroom
10:05 write code, compile code, commit code
12:00 lunch
13:00 write code
15:30 bathroom
15:35 write code, compile code, commit code
17:00 answer email
17:30 end of day meeting
18:00 depart office

Saturday, I work from home for half a day.

Mostly, the big gaps in activity are “White Board” time. We have an entire conference area covered with floor to ceiling whiteboards.

Now that I’m using slife, I have this fantasy that everyone I work with will run slife and the results are open for everyone to see. Never gonna happen.

slife activity September 18, 2008
slife activity September 19, 2008
slife activity September 20, 2008

Finally, the fireworks activity on Sept. 20, that’s me fumbling about with the screenshots above. 🙂

Sick as a Dog

dog with head bandage to look sick

You really don’t notice that you’re not sick when you’re not sick. But take ill, and that is all you notice. I’ve been pushing life a bit hard of late and life in turn bit me right on the ass.

I had felt run down for a couple of weeks but late last Thursday, I felt simply awful. By midnight, my head was a hair from exploding. I knew I was out of commission for the next few days.

Friday was the worst. I could barely concentrate so I just slept. Sort of. I thought of the The Hot Zone and wondered if I was going to bleed out like an ebola victim. “Of course not,” I thought. Followed by a thought that none of the ebola victims thought they were going to die. I felt rotten.

Saturday, I slept nearly the whole day and all night. Tracy made chicken soup from scratch. That always brightens my outlook. I like chicken soup.

Sunday, I read a bit and slept. I’d like to believe this was a random illness, one to chalk up as luck of the draw but I don’t. I caused it. Stress. Poor nutrition. Lack of exercise. Inadequate sleep.

Of these, nutrition is the easiest to improve. I’m reminded of what the nutritionist Cliff Sheats wrote in the forward to his book “Lean Bodies Cookbook“.

I entered the field of nutrition because I was intrigued with how it had everything to do with restoring my health when I was much younger.
—Cliff Sheats

Cliff played tennis. He and his tennis buddies regularly ate candy bars to get a sugar boost with the intention of adding energy to their game. In the end, Cliff was a mess. Hypoglycemic, severe allergies, breathing difficulties… a real mess. He went on medications that seemed only to make things worse.

At the recommendation of a friend, Cliff went to a nutritionist who put him on a high-protein, high-complex-carbohydrate, high calorie diet. In two weeks, he felt much better and in nine months he was playing the professional tennis circuit. The rest is history.

I used the Lean Bodies nutrition plan thirteen years ago while training for a marathon. I wasn’t completely rigorous then but it did make a difference. I felt great. I haven’t felt good—much less great—in a long, long time.

Today, I recommit to the Lean Bodies program for the remainder of 2008.

Lean Bodies requires discipline. I recall how difficult it was to consume the prescribed number of calories that fell within the guidelines of Lean Bodies.

The Lean Bodies book outlines a gradual increase in calories over a seven week period for easing into the program. This is a high calorie program. How high? Betwen 2,300 and 3,500 calories per day. A couple trips to the local fast food joint takes care of that, you say? Ha! Lean Bodies stipluates you eat primarily complex carbohydrates, proteins and unsaturated fats. That’s not always so easy.

For example, here is the #3 burger meal off the standard menu of a local fast food restaurant. And believe me, I chose this restaurant because it was better than its competitors in meeting the Lean Bodies guidelines.

Calories from #3
         SUM  f   sc  cc  p
burger : 670 370 148  16 158
fries  : 400 160   0 216   0
cola   : 198   0 198   0   0
cola   : 198   0 198   0   0 (refill)
-------------------------------------
total   1466 530 544 232 158
f  : fats
sc : simple carbs (bad carbs)
cc : complex carbs (good carbs)
p  : protein

This quick lunch packs 1466 calories. Seems that would get you half way to the total calorie goal for the day. Not so fast. Lean Bodies prescribes between 65 and 70 percent of your total calories come from good carbs: unrefined, starchy carbs and leafy, fibrous veggies. Of the remaining calories, less than 10 percent from unsaturated fats and the rest from protein.

Since good carbs seem to be—for me, anyway—the hardest to eat enough of, let’s peg them as the basis for what a lean bodies meal might look like. Recall from the chart above that we have 232 calories of good carbs. If we low ball the carbs at 65 percent, then the total meal should have

LB Calories Based on Carbs
          cal   %cal
carbs   : 232    65
other   : 123    35
--------------------
total   : 355   100%
LB : Lean Bodies

Immediately we have a red flag. Based on the number of good carbs we are eating, the entire meal should come in at a mere 355 calories. We have an excess of (1466 – 355) = 1111 calories.

Now let’s get a split between fats and proteins. If we high ball fat at 10 percent, then the total meal breakdown is

LB Calories Based on Carbs
          cal   %cal
carbs   : 232    65
protein :  88    25
fats    :  35    10
--------------------
total   : 355   100%

Look where all those good carbs came from: french fries. Very few from the burger. Want another startling revelation? Skipping the cola (or drinking a diet cola) eliminates nearly 400 calories of bad carbs. All those jokes of people ordering the #3 with a diet cola… it actually makes a real difference!

Calories from #3 (no drink)
         SUM  f   sc  cc  p
burger : 670 370 148  16 158
fries  : 400 160   0 216   0
water  :   0   0   0   0   0
water  :   0   0   0   0   0 (refill)
-------------------------------------
total   1070 530 148 232 158

In the end, I’m not sure there is much you could do to shoehorn the #3 into Lean Bodies. Sure, drink diet cola, water or nothing. Even go Atkins and 86 the bun and fries.

Calories from #3 (Atkin-i-fied)
         SUM  f   sc  cc  p
burger : 670 370  28  16 158 (no bun)
fries  :   0   0   0   0   0 (no starch)
water  :   0   0   0   0   0
water  :   0   0   0   0   0 (refill)
-------------------------------------
total    670 370  28  16 158

Dropping the bun saved you from 120 bad carbs but you lost 216 good carbs in the process. 55% of the carbohydrates in the Atkin-i-fied version come from saturated fats, the bad fats.

If you choose to walk the Lean Bodies path, you will be hard pressed to stay the path. But it beats the hell out of being sick as a dog.