![]() |
|||
![]() |
great money for great people | ||
| Overview | Vacancies | Projects |
Test details | Application form | Contact us |
PROJECTSJust a few lines about some of them, just to whet your appetite. Business C++ developmentWe have a distributed server application sitting on hundreds of computers, across several data centers processing hundreds of millions of requests per day. You need to rewrite part of its core to make it faster. Say, twice as fast. OK? Alternatively, you may need to reduce the size of the data streams that needed to be piped between the data centers to keep the computers “in sync” with each other. A factor of 10 will do fine. Thanks. Or, yes, and fix that memory leak while you are at it. Or, at least, implement thatr critical business driven feature. Here is the ticket number from support queue, where a user requested it. Ask the people around what it was all about. I almost forgot - — we need it in production in 3 days. All the bits above are 100% real requests, and you can do them because you work in a team. Quality assuranceYou have an application with a seriously convoluted business logic used by thousands of users daily. You need to make sure that this logic is implemented correctly. Even when parts of the engine change (as they do all the time). So our client tells you that “we will implement feature X in the release two weeks from now.” You say “Ok, I'll do the tests.” Two weeks from now your tests are ready, the implementation is ready, it passes the tests with flying colors and everybody is happy. You bet. We'll tell you more at the interview what this job is really like, but more often than not you will need to extend the tester framework (all very clean OO Perl) in order to be able to test the new feature. And the deadline is still there, and the code your are extending in the framework is not the one you wrote yourself. And you need to leave it back as clean as you touched it, because somebody will extend it after you. You get the idea... Client integration or Client APIThe “admin” web interface to a server application spans hundreds of pages, and allows everybody to do whatever they want. Brilliant. Well, not quite. Somebody wants more — they want to do it all from a program, because they want to tweak the admin parameters every 5 minutes. And you should give them some sort of API for that. Probably via XML — maybe using SOAP. You can use the code from existing web interface or you can code required logic from scratch. Whatever you choose, you should always keep in mind few things. First, all the code you write should be clean and clear — no one in the team should spend days wondering what your black magic is or completely refactoring your code. Second, all the code should be automatically tested — not only every feature you create, but also every SOAP library clients currently use to work with your API. Examples are very important too. And third — things should work. And work well. Really well. Social networking applications based on REST/SOAP services became very popular recently - take a look at facebook ! And you can implement this application using your favorite language (Perl, PHP, Ruby, .NET and so on) with this technology. Java developmentOur client made a bold decision to junk their ultra-expensive Oracle DB and store all their data in a hadoop cluster. All 35TB of it, and constantly growing. They still want a near real-time reporting, and they have 1000s of reports, each of those being just a sequence of map-reduce jobs. How would you approach this task? Hand craft each report separately with some framework to abstract away the common bits ? Or will you be bold enough to build the infra-structure that would allow end-users to build the code themselves? With some UI on top of it? Whatever you do, remember that the end-users want their reports right now, and they are not developers, so whatever you build must be user friendly and you must move quickly. JavaScript developmentYou think JavaScript coding is easy? Well, think again. Here are 6000 JavaScript scripts, each of them ultimately load some image across from the network. Does it have virus inside? Does it work without any harm to client system? Is it fast enough? Your job is to find out which site(s) the request travels through before the image is fetched. There are literally hundreds of ways to produce a document with a single image in JavaScript — think of all the way the DOM tree can be manipulated. And pretty much every conceivable solution (and a few not so conceivable solutions) are represented in the 6000 scripts I mentioned. Data analysisYou have a very complicated system dealing (among other things) with lots of money flows. At some point, your colleagues find money “leaks”. Your task is to find which clients fool others and where do they steal money. What instruments should you use? Good question! Generally, there are lots of monitoring tools: log files, MySQL tables, sample clients' requests, … Except, you have full access to the system source code (which is partly C, partly php, and partly perl) as well as to documentation (coders wrote where and how they implemented 100s of different features). Your task is to grep, awk, sed, … these data (of course, invention of the way how you process data is a part of the task) and to introduce some hypothesis on where money is stolen. And to prove this hypothesis. Or else deny it and find another. And suggest a new mechanism of marking suspicious clients continuously. Yes, forgotten to mention: all logs tend to be incomplete, so you need to put different kinds of information together in some clever manner. Next week, you get another task: how to spot and forecast, if possible, spikes in data. And so on. And yes, you should grab knowledge from online conversations with your customer! Cluster operationsYour application works on cluster in 24x7 mode, processes billion requests daily, takes into account new data and reports results to users. How can you monitor this application runs OK? What if some boxes are out of order or not responding? How to distribute request load at day and night for requests coming all over the world? How to avoid data loss? Client asked for new feature and you implemented it in time. How to push new release in cluster smoothly? How can we help client to analyze data flow, detect abnormal behavior and inform him in time? This is operation challenge. We are using hadoop (the open source implementation of MapReduce) and extending it to work for other clients to do things similar to what google is doing (see here). The computers are hosted on EC2 (Amazon Elastic Compute Cloud), we have permission to run 100-core cluster there, whenever we want. In parallel, we are building a complex of multiple data centers (in LA, NY and somewhere in Europe) that will also have facilities for high-performance reliable computing, the aim is to process 100s of TB of data on behalf of our customers on around about 1000 cores. The cool thing is that we are well positioned to not just use, but to build out this kind of technology a well, and have working relationships with a few cutting edge startups that are pushing the envelope in the distributed computing. The previous system we helped building (and are still working on today) had about 12000 cores, and while it was more of a "task farm" than a grid, the experience we got there were very valuable. Virtualized DatacentersHave you ever heard of cloud computing? Let's look from the client perspective: with his super-duper web application, client is going to serve several thousands requests per second. How many exactly? Even he's not sure. Ideally, he wants to have ability to start from 2--3 instances of his application, then add 10--20 (when necessary) and shut them down when he hits a lull. Seems he should use (Amazon EC2)? Ah, forgot to mention: all instances should be load balanced in some clever manner. And - yes, you know - terabyte storage will be required at some moment. What else? Monitoring! It is good to know, when application suddenly crashes... Your task is to prepare all the infrastructure for this. Several teams are involved in this project:
Perspective researchThings are good at the moment — right? So we can relax a bit. Right? Well, usually wrong. The competition never stops and neither should you. You need to look ahead and keep thinking of new ideas, rejecting the vast majority of them, testing a few that remain viable and pushing for them to be implemented. This works needs analytical mind and determination. A good science education (math/physics or computer science) will not hurt either. Are you up to this job? |
Open PositionsHelp Information |
|
+7 499 940-47-58 |