Michael Dalessio
http://mike.daless.io mike.dalessio@gmail.com 201.602.9038 Madison, NJ

I write code for a living, but I also do it for fun. I’ve had success as a manager and a technical lead. I encourage agile software development practices which emphasize early and continuous delivery of valuable software.

TL;DR
Technology Skills
Ruby.
I am a rubyist, though I'm comfortable with many other languages. I have experience building language extensions in both C and FFI.
C, C++, STL.
I've done large-scale OO design and implementation. I have experience writing portable code: Linux gcc, Solaris CC, AIX; Windows VS6 and VS7; Intel, Portland Group, Compaq compilers; 32/64-bit.
Web development with Rails and Javascript.

I’ve successfully deployed highly-available data-intensive web applications supporting multiple (read: old) browsers.

I’ve written large Javascript applications using many of the common libraries you’d expect: jQuery, underscore.js, etc.

High performance parallel computing.
I've got experience with PVM and MPI toolkits. I've hand-rolled data serialization as well as used libraries like protobuf and ASN.1/BER. I've built a fault tolerant load balancer and implemented job scheduling algorithms.
System-level programming.
I've got experience with threaded and evented processing models. I'm familiar with various methods of IPC, including message queues and sockets. I've done network programming on both *nix and Windows using TCP and UDP.
Linux system administration.
Notably, I've performed this role on large compute clusters, though it was quite a few years ago.
Debugging and profiling.
My go-to tools include strace, valgrind, gdb, gprof, Google perftools and Wireshark.
FORTRAN.
Yup, I've got deep knowledge of FORTRAN. I've also got experience integrating it with C and C++ at the source level and at linktime.
Other languages.
I've been known to write Lisp, Clojure, and Scala in addition to what's listed above; though I wouldn't claim to be an expert in any of them. I've got extensive scripting experience, primarily in Ruby, Perl and bash.
Screen scraping.
I've done screen scraping for fun and for profit, including HTML+JS and proprietary terminal applications. Some tools I like to use include Mechanize and Nokogiri, two open-source projects that I help maintain.
Soft Skills
Team Building.
I've had success building and managing strong development teams, and improving existing teams.
Environment Building.
I've bootstrapped development environments on mulitple occasions, from sane build environments to custom debugging and meta-programming tools to wikis and customer support systems.
Framework Building.
I've designed and built application frameworks to deliver complex functionality to domain-expert developers without cognitive overhead. Think pub/sub without having to understand UDP.
Technology Integration.
I've successfully dealt with technology integration issues such as consensus, training, documentation and inertial resistance while meeting business demands.
Mentoring.
I'm able to mentor developers in technology and design, both in an informal office setting and in formal training classes. I'm also an experienced technical trainer, having run many large "developer boot camps".
Financial and Energy Markets.
I have experience building trading systems for equity and fixed income financial markets, and for energy markets.
Figuring It Out.

I can read man pages. I know what an RFC is. I like reading other people’s code. I will run with the ball.

Mad Communication Skillz.
Me talk good. Me also write good.
Curriculum Vitæ
Education
The Johns Hopkins University (Sept 1991 — May 1995)
Graduated with a B.A. in Physics.
Learned to focus intensely. Learned to think logically. Learned to seize the day. Learned to love writing code. Learned how to learn.
Undergraduate Experience
Rowland Department of Physics @ The Johns Hopkins University (1992 — 1993)
Assistant System and Network Administrator for the Department of Physics and Astronomy.
Learned that *nix rules. Learned how networks work, the hard way. Learned how to disassemble and fix a computer. Learned how to run a data center.
Rowland Department of Physics @ The Johns Hopkins University (1993 — 1995)
Research assistant to Dr. Doyle T. Hall.
Learned how to code in Emacs. Learned how to learn a language from its reference manual. Learned how to build 3-D graphic visualizations. Learned how to catch a hacker.
NASA Space Telescope Science Institute (1993 — 1995)
Research assistant to Dr. Rex Saffer.
Learned FORTRAN and bash. Learned how to parallel-process big jobs across a cluster. Learned that raw data is often noisy. Learned that minimizing an objective function with many dimensions using noisy data is hard. Learned that meta-knowledge is often more important than knowledge. Learned that you have to love what you do to be good at it.
Professional Experience

Chief Architect for Bloomberg Launchpad @ Bloomberg, L.P. (Jun 1995 — Aug 2003)

Wrangled a huge time-series dataset. (1995 — 1999)
Learned how to be coherent on a 3AM phone call. Learned to be careful and how to plan. Learned that some query optimizers are truly terrible.
Coordinated and taught the Bloomberg "boot camp" developer training classes. (1996 — 2000)
Learned how to speak in front of an audience of developers. Learned how to teach. Learned how to tell A developers from B developers.
Built and maintained a set of customer-facing TCP/IP feeds. (1997 — 2000)
Learned networking the hard way. Learned the art of abstraction. Learned why meta-programming rules.
Helped integrate C into a land of FORTRAN. (1997 — 1998)
Learned how the call stack works. Learned how linkers work. Learned that some technologists are secretly Luddites.

Designed and built the Trading Systems Desktop (“TW”) using the new Bloomberg UI (Win32 controls). (1997 — 2001)

Learned the value of providing policy on top of mechanism. Learned that it's possible to make a system do things it wasn't designed to do, and that it's a hallmark of good design. Learned how a lack of developer frameworks can slow forward progress for even talented developers. Learned to love building developer tools.

Designed, built, and led development on Bloomberg Launchpad, the next-gen Bloomberg UI. (2001 — 2003)

Learned how to implement malloc. Learned that mmap rules. Learned how C++ and FORTRAN program initialization work. Learned how to implement a polymorphic OO type system in C. Learned that leveraging open source is a really, really good idea. Learned the power of targetting a known interface (GTK+) to a completely new technology (Bloomberg Win32). Learned why building specialized debugging tools are sometimes necessary. Learned that office politics can ruin a good time.
Extended the Launchpad OO platform to provide services, like pub/sub, IPC and instant messaging. (2002 — 2003)
Learned how to lead a team of A developers. Learned that customer IT policies are complicated. Learned the value of enabling developers to do complex things without specialized knowledge.
Infrastructure Applications Lead @ Moneyline/Telerate (Nov 2003 — Aug 2004)
Implemented a high-performance UDP feed to integrate third-party data vendors.
Learned about multicast networking. Learned how to do I/O using a threaded model, and why it's hard (harder than it should be) to do right.
Managed a team of offshore developers building an internal application for browsing ticker plant data.
Learned why managing offshore developers is hard.
Managed a team porting applications to a new pub/sub API as the last phase of a ticker plant rollout.
Learned that smart developers, without business context, invariably work on the wrong problems. Learned that projects get shut down if they don't deliver business value early-and-often.
Head of Software Development @ ASPEED Software (Aug 2004 — Apr 2006)
Managed a team of developers building SDKs for parallel computing on large clusters.
Learned how to demo a product. Learned how to present to business stakeholders. Learned how to quickly set up a sane development environment. Learned how to set up sane customer support.
Assisted clients in parallelizing applications (Professional Services).
Learned how build a static code analyzer. Learned how to read and use profiler output. Learned how to support customers. Learned what a sane deployment process looks like. Learned how to read terrible legacy code.
Lead developer on parallel-computing SDK.

Learned that the USPTO will grant software patents on practically anything. Learned how to build a load-balancer. Learned how to administer large clusters. Learned how to serialize data efficiently. Learned how to implement efficient, portable network code.

Director of Application Development @ USPOWERGEN (May 2006 — Dec 2007)
System architect and lead developer for an Energy Management System.
Learned that developer efficiency is the most important thing for a startup. Learned how to write Ruby extensions in C. Learned how to scrape data. Learned how robust and awesome the Ruby open-source community is.
Directory of Technology across multiple power plants.
Learned what the M&A due diligence process looks like. Learned how an integration projects can turn into a train wreck. Levelled up in dealing with office politics. Learned how annoying it is to have to write and enforce corporate IT policies. Learned how time-consuming regulatory audits are (SOX 404 and NERC Cybersecurity). Learned how to manage a cap-ex budget.

Founder and Managing Partner @ Pharos Enterprise Intelligence (Jan 2008 — Present)

Architect and lead developer for a turn-key Energy Management System.

Learned how critical the “minimum viable product” is to success. Learned how important an early-alpha client is to success. Learned how unimportant long-term planning often is to success. Learned how important it is to choose the right business partner.

Director and Agile Software Developer @ Pivotal Labs (Nov 2008 — Feb 2010)

Agile Software Developer. (Nov 2008 — Sept 2009)
Learned the value of pair-programming, and where it's most effective. Learned the value of test-driving. Learned Agile and XP methodologies. Learned how to aggressively refactor. Learned what a sustainable development process looks like.
Director, NYC office. (Sept 2009 — Feb 2010)
Learned how to feed and care for awesome developers. Learned that pair-interviewing is the best way to determine a developer's skill level and fitness.

Director of Technology @ Benchmark Solutions (Feb 2010 — Aug 2012)

Agile evangelist and cat herder. (2010 — Present)
Manager and lead developer of web application team. (2010 — 2011)
Manager and lead developer of infrastructure team. (2011 — Present)
Manager of reference data and database teams. (2012 — Present)

Director @ Pivotal Labs NYC (Sept 2012 — Present)

Yup, I'm back and helping run Pivotal's NYC practice.
Open Source Experience

Co-Author of nokogiri

Nokogiri is currently the most popular XML/HTML parsing library for Ruby developers. It supports CSS and XPath querying, has push and pull SAX parsers, validates DTD and XSD schemas, performs XSLT transformations, and has a very simple and usable API. It's implemented in Ruby, C and Java.

Author of loofah and loofah-activerecord

Loofah is an HTML sanitizer (based on Nokogiri) which can be used to prevent cross-site scripting (XSS) attacks. It provides a variety of methods to clean or remove unsafe HTML, and delivers ActiveRecord plugins for Rails applications.

Core Maintainer of mechanize

Mechanize is a Ruby library used for automating website interaction and screen-scraping. It fully supports browser history and cookies, and allows easy authentication and form submission.
Selected Smaller Projects and Contributions