Profile cover photo
Profile photo
Dan Kruchinin
Software engineer, open-source contributor, eternal learner
Software engineer, open-source contributor, eternal learner


Post has shared content
Киев, ищем веб-джависта. Желательно сеньора, потенциально тим-лида.
Заказчик хороший, денег платят, проект спокойный.
Никого не интересует?

G+ hasn't lived up my expectations (unfortunately), time for twitter (which I erroneously tried to avoid all the time). So, you can find me here:

Post has shared content

Post has shared content
It’s review time at my work. I’m supposed to review myself. I’m supposed to:

“Provide an overall summary of your performance against your objectives, expectations and the high performance bar.”

I started trying to write my review, not sure what to say, and this is what came out. Some names have been changed to protect the innocent.


My journey begins in August with no objectives or expectations. Some code representing a half dozen discreet but interoperable services is gestured at. "We're building on this. It belongs to Team X. We have branched it for now. It will require only minor changes to support our use case, which is very similar to theirs. Then we will merge back." I am told.

Laughter spills from a far corner of the room. “Don’t listen to him,” I am told.

"Have at it," I am told.

Naively, I have at it. In a small shed underneath my desk I find a hand-trowel and a leaky bucket, and bearing these tools I wade knee deep into the muck of system software gifted to us by Team X. The sludge which soaks through my boots and numbs my feet is, under examination, impenetrable to the human mind, constructed in a perversion of the language sensible only when read with an absurd literalism, a rigidly formal mode of interpretation known only by the compiler. As I attempt to step through the muck, a miasma wafting over me confounds my senses. I grow dizzy, topple over, wretch, stand, and stumble back to my desk dripping a mire of filthy bytecode and coughing up tab-ridden xml configuration files. I begin to wipe myself clean and my coworkers chuckle, and I chuckle, and we commiserate on the sorry state of our copy of System X, and collectively, we have back at it. There is much confusion, wringing of hands, and pulling of hair. Great efforts are undertaken to make minor changes to a system whose fragility and brittleness are matched only by its whorling convolutions of logic and dependencies. Tests which test nothing nevertheless break and fail, are fixed to test nothing successfully, and break again, failing with a ruthlessness beyond reason. A fog of confusion gives rise to sadness and despair, accompanied by gnashing teeth and shaking fists. Velocity is near zero as the effort required to keep from slipping backwards as a continuous stream of changes to merge from System X/mainline pour into our branch is nearly all-consuming.

Meetings are held with Team X: we are doing it wrong. If we wish to share in and enjoy the spoils of System X, we must join the family, roll as Team X rolls. Participate in Team X scrum, have changes reviewed by Team X (at a projected latency of weeks, months even), or else touch naught upon which Team X relies. The claim that our different use cases are "very similar" acquires a cruel, black humor. Since our system is of a differing genus, if not family or even order, than System X, our changes must either drastically intrude on how System X presently operates, or be different entirely. Drastic changes are unfeasible to coordinate with Team X if we wish to make progress at all, and if our changes are to be separate, isolated, then there is no reason to remain shackled to System X. The heavens rip open and a Fork falls, prongs spearing the earth between our cubes and the cubes of Team X and vibrating at a frequency which rings in our ears: abandon System X, fork permanently, never to merge back, consume what exists only as samples and hints, a shadowy outline of a system for us to trace and fill in as we see most fit.

After months, work done to enable the most basic operations of our service, to do Foo and to do Bar, and to do both according to the byzantine rules of System X, is scrapped. The process begins to trace and fill from System X to ourselves, to make Foo and Bar work again. The process begins to dig our own pit of muck. Sisyphus would be proud.

Foo and Bar operations are rewritten; Foo and Bar utilities are rewritten, and Foo and Bar work again. Reaching the end of a five month long trail of tears, we are functionally back at the beginning, but now emancipated, lugging cases and trunks of pieces and parts, fragments and shards of toys to discard or reassemble as we see fit, to fashion our own toys anew, to bind them with our own tape, wire, and string. To throw them into our own pit with confidence that we have Done Things Right and with complete understanding of how Right works, and to gift this to those who will come after us.

Post has shared content

Post has attachment

Post has attachment
Supporting Multiple Page Sizes in the Solaris™ Operating System (pdf)

Post has attachment

Post has shared content
Google turned off Code Search earlier this week. Creating and launching the initial public version of Code Search was my first project at Google, and, like many programmers, I'll miss it.

To mark the occasion, I have posted at an explanation of how Code Search worked, and at a set of command-line tools to run regular expression searches against large amounts of code, quickly. It's obviously not a complete replacement, but it's the core of what Code Search did, and now you can run it on your own machine.

I want to thank everyone at Google who worked on or supported Code Search over the past five years. There are too many to name individually, but it was truly a team effort and a lot of fun.

P.S. Perhaps the best picture of source code ever published:

Post has attachment
Wait while more posts are being loaded