I offer a mixture of contract programming and consulting services. This page provides information on the type of jobs I accept, my skills, and the relevant policies.
I recently returned to graduate school to pursue a Phd in Computer Science at UC Berkeley. Before that, I worked for four years as a Senior Software Engineer. During that time, I've written extensive amounts of C++ code and managed a team of 8 engineers.
You can find more about me on my homepage.
My background and interest is in working with large bodies of systems software code in C and C++. I'm one of those strange people who actually enjoy refactoring, porting, and rewritting legacy code. I'm particularly interested in projects involving tools for maintaining such systems.
I have written a varity of low level kernel code (including bootloaders, drivers, etc..) before, but am somewhat rusty at this point. I will not accept a large project in this space, but if you have something smaller, I might be interested.
For my research, I have recently been working on a number of compiler related projects - particularly using Clang/LLVM. I'm not quite to the point of calling myself an expert yet, but I can accept basic projects using those technologies.
On more of an application level, I have a fair degree of experience writting and debugging threaded code in a Linux environment. I've done some distributed systems design and implementation. I'm moderately proficient in technologies such as OpenMP, and OpenCL. Again, I won't accept large projects in these areas, but smaller ones are welcome. (I'm happy to provide referrals if needed.)
I am experienced and comfortable with all of the following languages and technologies: C/C++, Perforce, Linux, GCC, Clang/LLVM<
I am also proficient (but not expert) in: Java, Python, Perl, Ruby, DCL, MIPS Assembly, ARMv5 Assembly, OpenVMS, Windows 3.1-XP, QEMU, Subversion (SVN), GIT
Before submitting a formal project proposal, I find it helpful to informally discuss the scope and expectations. Depending on the result of that discussion, I may need additional details before I can provide an estimate. In my estimate, I will indicate the agreed upon payment system (fixed amount, hourly, fixed + reduced rate, etc..). The final binding estimate will be explicitly indicated as such.
I make every attempt to be prompt with responding to email and am available for discussions by phone and skype during reasonable hours. Generally, you should expect a response within a day or two for unsolicited email. If you require higher availability, my rates go up substantially.
When contacting me, please include a brief description of the project, your expectations about deliverables, and your budget.
If you have a challenging problem, feel free to send it my way. Generally, I'm happy to take a look free of charge. If it's an obvious answer, I'll probably just send you a reference. If I'm not the right person to answer it, I'll try to refer you to someone who can help you.
My starting rate is around $50 per hour. This is negotiable.
For most of my projects, I require funds to be held upfront in an escrow account. For returning customers, I accept payment via PayPal, bank transfer, and the various freelancing sites I work through. I do not typically accept personal checks.
Generally, I retain all rights to the code and other products I produce. I will provide you with a non-exclusive license as part of the contract, but I reserve the right to reuse the result for other purposes.
Business logic generally belongs to the customer. Code provided by the customer belongs to them unless explicitly agreed otherwise. Any additions to that code made by me, belong to me.
Projects involing contributions to open source projects will recieve a discount and will be more likely to be accepted. I'm a strong believe in the benefits of open source.
If you have issues with this, please feel free to speak with me about it. I am open to other arrangements; these are merely my default terms.
If you want to reach me, send me an email at: public [at] this domain. I am not always the best at responding to email, so if you want to ensure a quicker response, give me a call. (You'll have to ask me in person for my number though.) You can also reach me on LinkedIn. Don't expect quick responses on the latter though.