I am now working for SourceForge. Kind of

My trip to PyCON 2010 brought about something unexpected. I've got a contract job with Geek.net (owner of SourceForge.net, Slashdot and few other sites). In short, I am helping SF team to build a better SourceForge, in Python.

Mixed feelings so far. We're a doing a major rewrite from scratch, feature set is way too big, we're using a lot of immature tools and the team is assembled anew. Everything I know about software development tells me that these kind of projects have only 1 chance in a 100 to succeed. But this is sourceforge, right? They must know what they are doing, aren't they? We'll see how this plays out.

See you, PyCon

It was my first PyCon ever and the first trip to the United States. Things I've done at PyCon:

  • drove a segway
  • went to the world's largest aquarium
  • sipped a margarita on a skyscraper's under-the-roof bar
  • got into a car accident
  • got a few job inquiries
  • tasted 64 flavors of coca soda (not really 64)
  • bought a nexus one phone
As you see, the conference was quite an event, I look forward to attending more of this kind.

More seriously, I am very glad and happy finally meeting a lot of people I knew through online and making some new acquaintances. As Grig wrote (more or less): "don't bother attending talks, go networking". I definitely should have stayed for sprint days, it's a great opportunity to try and work along with bright people on interesting problems.

Thanks to PSF financial aid to cover registration fee, that's really appreciated. Personal thanks to Joseph Tate and Yarko Tymciurak, I owe you guys.

looking for a project to join


I love programming. I want to make a decent living and (trite as it is) I want to make a difference in this world. I believe in capitalism and markets and to me building a (hi-tech) business seems like the best way to achieve my goals.

I'm looking for a software company or a startup to join. I do not want "a regular job" of being an offshore programmer. Been there, done that, have had enough. I want to work with people I can look up to and learn from, contribute my skills and experience and energy toward common goal.

Ideally, this is a small company or startup environment, pref. 10-15 people or less. Preferably B2B or B2B2C (serving businesses who serve consumers). Technology-wise, Python/Django and Linux (MacOSX) is perfect but not really mandatory: I'm willing to learn any technology, if I'll have time to get up to speed with it.

I am willing to take below-the-market rate or work for free in exchange for being "in the loop" of developing a business, something I eager to learn to. Equity sharing also helps. ;)

I know that I'm far from being the greatest and the brightest programmer in world, my math skills are rusty (to put it mildly) and I'm a few timezones away in a backward country in Eastern Europe, which makes communications harder.

On a positive side: I'm comfortable doing whatever is needed most at the moment: programming, testing, sysadmin tasks, customer support, sales and marketing, bizdev, whatever. I do not need external supervision/motivation to get things done. Time difference can be a good thing: a distributed team can work round the clock. I am willing to fly on-site for a few months when needed. I have excellent network of local developers so I could help ramp up additional development resources when needed.

I can be reached at ischenko@gmail.com, via Skype max.ischenko or by phone at +380 50 1660266 (GMT+2).

P.S.: Feb 16th to Feb 28th I'll be in U.S. for a PyCon trip, just drop me a line if you're interested to arrange a meeting.

Past experience

2009 - current, Co-founder of vse-sto.com.ua

A place to shop for car-related services in Kiev and other Ukrainian cities. Kind of like yelp.com/repairpal.com, but cut down in features.

Built with Django/Python, PostgreSQL, nginx, Mercurial, Linux.

2005 - current, Founder of developers.org.ua

The #1 Ukrainian site for software developers: forum and blogs, company profiles and reviews, salary surveys (a-la glassdoor.com), calendar for local IT events and more.

Integrated, customized and wrote from scratch a lot of code: PHP (Wordpress+BBPress) and Python (Pylons, WSGI). MySQL, Apache, ngninx.

2004 - 2007, Freelancer (contractor)

Did lots of custom software development work for USA and European clients. Specialized in Python and web developement, Linux (Ubuntu). MySQL, PostgreSQL, MSSQL, Apache, shell scripting, Java.

2000 - 2004, Software engineer

Various applications, mostly Linux and network-related (daemons). C++, Lua, Tcl, Perl, Python. From one-man  and two-man projects up to a dozen people.

Other stuff

Contributed to Turbogears, Pylons, Vim and a few other open-source software. TED translator. Have a family, but OK to traveling around the world.

References available upon request, see also my Linkedin page.

cmemcache python library can crash your Django app

EDIT: http://pypi.python.org/pypi/pylibmc is recommended as a cmemcache replacement. It's just as fast and does not crash.

For a past week or so I've experienced sudden crashes of my Django application servers. There were some suspicious entries in /var/log/messages:

Dec 29 09:34:14 london kernel: python[13140]: segfault at 26 ip 40906e2a sp 40db0178 error 4 in libmemcache.so.0.4.0[40904000+c000] Dec 29 09:34:14 london kernel: python[13175]: segfault at 26 ip 40906e2a sp 413b3178 error 4 in libmemcache.so.0.4.0[40904000+c000]

Further investigation showed that cmemcache Python bindings crashes from time to time, destroying the Django app along the way. I switched to pure Python python-memcache and it solved the issue. It's much slower then cmemcache but at least it does not crash.

P.S.: Django has a ticket related to this, #12427 - cmemcache is retired.

round-robin django setup with nginx

Goal: improve site's availablity in the face of unexpected crashes as well as scheduled application updates.

Gist: use multiple copies of the [django] application proxied with nginx load-balancing mechanism.

Implementation is trivial, just take example configuration from nginx doc and customize for your setup. E.g.

upstream django-vsesto {
    server 127.0.0.1:8000;
    server 127.0.0.1:8001;
}

server {
    location / {
        proxy_pass http://django-vsesto/;
        include /etc/nginx/proxy.conf;
        proxy_connect_timeout   2;
        proxy_next_upstream error timeout;
    }
}

Here is the interesting bit. Setting connect timeout to be small enough allows nginx to try another backend server to serve user's request. Which means user won't see any 502 error pages at all, if there is at least one working application server running. I'm using monit that ensures the app servers get started if they crash or hang for some reason.

crude CI script for python/nose

For a quite some time, I wanted to setup continuous integration in my Python project. Setting up buildbot seemed too complex of a task. Shell programming to the rescue! Here is my small hack and may be you'll find it as useful as I do.

#!/bin/bash# # Crude script for CI.# # Updates working copy, runs the tests, sends e-mail if there are test # failures. Sends another e-mail when all tests pass again.## Requires cronjob entry to be called automatically, like this: # */5 * * * * ~/projects/vse-sto/tools/ci_tests.shfunction sendmail () { echo $1|mail -s "[vse-sto] CI" ischenko@gmail.com; }hg pull -u|grep -q "no changes found"[ $? -eq 0 ] && { exit; } # return early if there are no new changesets IFS='' # set magic variable so that shell won't remove newlinesexport DJANGO_SETTINGS_MODULE=vsesto.settings # Run the tests and capture test outputtestoutput=$(./venv/bin/nosetests vsesto 2>&1) if [ $? -ne 0 ]; then sendmail $testoutput; touch .testfailures; else [ -f .testfailures ] && { sendmail "all tests PASS again"; rm .testfailures; } fi