вторник, декабря 18, 2012

Программисты ненавидят open space

Тревожные новости приходят со всех фронтов. Программистов активно сажают в open space даже в тех компаниях, где это раньше не практиковалось.  Может кто-то книжку написал и она стала новой религией? А заветы Спольски забыты?

Краткая справка для тех, кто случайно не знает, что такое open space - это огромная комната без каких-либо перегородок.

Update: поскольку у людей возникли вопросы по поводу open space - вот вам картинка отсюда. Одна команда (человек 10) в одной комнате, где все друг друга знают - это не open space.



Объяснение этому безобразию всегда одно и то же. "Мы делаем это чтобы программисты лучше коммуницировали". Я всегда думала, что программисты должны программировать. Если мне нужно с кем-то поговорить - ну загляну я к коллеге в соседний офис, пройду пару метров.

Отношение программистов к этому однозначное - open space все люто ненавидят. Кьюбиклы вспоминают с нежностью. Работать в open space невозможно, слишком шумно, сложно сосредоточиться. В open space вы узнаете о своих коллегах сильно больше чем хотели. Вы полностью в курсе, что у Васи напряженные отношения с тещей, что Оля любит бормотать когда работает, и что Максим коммуницирует ну просто без остановки и совершенно невозможно заткнуть этот фонтан красноречия. А вон в том углу ребята поют - день рождения у кого-то. Поэтому люди работают либо рано-рано утром, либо сидят на работе ночами. Либо увольняются (как вариант - не идут работать в open space).

Пока единственное разумное объясение рассаживания программистов в open space, которое я смогла придумать - так дешевле на первый взгляд. Но интересно подсчитать насколько при этом падает производительность.

Дорогие друзья! Если вы работаете (работали) в open space, опишите свои ощущения. Особенно интересно послушать людей, которым это нравится. Я пока ни одного не встречала.

понедельник, ноября 26, 2012

Что такое TCP Incast

TCP Incast - неприятная проблема, возникающая в датацетрах, связанная с работой протокола TCP.

Возникает при следующем сценарии: некий сервер шлет запрос кластеру машин. Все эти машины ему одновременно отвечают. Ответ может быть довольно большой, несколько десятков килобайт. Эти килобайты доходят до свитча, за которым находится наш кластер. Свтич, как это сейчас модно, самый обычный. И буфер у него небольшой. Та часть данных, что в буфер не влезла, будет сброшена. Протокол TCP гарантирует доставку, так что все потерянные пакеты будут посланы еще раз. Вопрос когда. Стандартный RTO (retransmission timeout) - 200 ms. Для какого-нибудь облачного сервиса это много. В результате получаем латентность, наша распределенная система работает слишком медленно.

Здесь описание TCP Incast с правильной картинкой: TCP Incast and Cloud application performance
Еще одно хорошее описание: Fine-grained TCP Retransmissions

Как с этим можно бороться. Простой и действенный способ - уменьшить RTO до 1 ms. Еще можно изменить протокол TCP: Data Center TCP (DCTCP)

Еще пара работ с анализом проблемы с красивыми картинками:
Understanding TCP Incast Throughput Collapse in Datacenter Networks[.pdf]
Safe and Effective Fine-grained TCP Retransmissions for Datacenter Communication[.pdf]

воскресенье, ноября 25, 2012

Несколько крупных IT компаний договорились не переманивать программистов

Обсуждаемая новость последних дней - Пакт о ненападении: Parallels договорилась с «Яндексом», «Касперским» и другими не хантить программистов.

Очень странное решение. Во-первых, оно дает преимущество компаниям, которые в данной инициативе не участвуют.
Во-вторых, интересно, насколько это вообще легально и что по этому поводу думает ФАС.

Программисты недовольны, что ожидаемо. (На недовольных программистов можно посмотреть, например, тут)

среда, ноября 21, 2012

Статья Storage Layout of Polymorphic Objects

Начинающим С++ программистам часто бывает непонятно каким образом и где хранятся виртуальные функции. Статья Storage Layout of Polymorphic Objects рассказ в картинках о том, как будут размещены поля и виртуальные функции объекта, рекомендую.

via Code_Analysis

вторник, октября 30, 2012

Статья про сортировку 1 миллиона чисел с ограничением по памяти

На Stack Overflow кто-то сформулировал следующую задачу: по сети приходят восьмизначные числа. Их приходит миллион штук, их надо отсортировать и переслать дальше. Проблема в том, что устройство, на которое они приходят - это компьютер с 1 Мб оперативной памяти. И это вся память что есть, жесткого диска нет. Короче говоря, реализовать сортировку по-тупому не получится, ибо не лезет.

Вот здесь описано решение этой задачи 1MB Sorting Explained. Подход выбран следующий: числа накапливать и сортировать кусками. Отсортированную последовательность хранить в пожатом виде.

понедельник, июля 09, 2012

Отказ амазоновского облака 29-го июня

29 июня, это пятница вечер, в Северной Вирджинии штормило. Что привело к проблемам с электричеством в датацентрах Амазона. Переход на резервное питание прошел не очень гладко, поэтому некоторые американские сервисы, которые используют амазоновское облако, либо не работали вообще, либо работали с перебоями. Среди этих сервисов были Netflix, Instagram и много-много других поменьше. Пользователи расстроились, потому что пятница вечер, хочется фильмов и фоток, а тут ничего не работает.

После этих печальных событий Амазон написал отчет на тему "что это было?". Summary of the AWS Service Event in the US East Region
Netflix написал свой отчет: Lessons Netflix Learned from the AWS Storm
А Дмитрий Самовский проанализировал отчет Амазона Applying 5 Whys to Amazon EC2 Outage

Ссылки по теме:
Отказ Windows Azure 29-го февраля
Перевод статьи Summary of the Amazon EC2 and Amazon RDS Service Disruption in the US East Region

понедельник, июня 18, 2012

Интервью Алексея Пахунова на OpenQuality.ru

Хорошее интервью и название правильное: Нужно дело делать, а не языком трепаться

В послужном списке Алексея Пахунова, известного как «Not a kernel guy», более семи лет работы в трех подразделениях Microsoft (Office, OSD и MSR), участие в двух крупных проектах (Axapta и Windows) и нескольких мелких. Текущее место работы – Google. Низкоуровневая разработка, “серьезность” разработчика, тестирование Windows и Chrome, “шерифы” в Google, TDD “по-взрослому”, время-качество-деньги, импровизация как причина авралов – вот некоторые темы нашей беседы.

понедельник, июня 11, 2012

Обзор исходников Doom3

Некоторое время назад исходники Doom3 были выложены в открытый доступ. Но в исходниках без доков разбираться довольно тяжело. Так вот, Фабьен Санглар написал по ним обзор со схемами, картинками, видео. Также он позадавал вопросы Кармаку по исходникам. Если вы мечтаете писать игры, но не знаете с чего начать, то Фабьен сделал вам прекрасный подарок.

Несколько фактов оттуда:

  • Впервые в истории id Software код написан на С++, а не на С
  • В коде широко используются абстракция данных и полиморфизм
  • Темплейты используются только для низкоуровневого кода
  • По мнению Фабьена это вторая по качеству кодобаза от id Software после Doom iPhone
  • Благодаря инкапсуляции код легко читать
  • Дни оптимизации ассемблерного кода на низком уровне прошли
Бонус: Кармак рассказывает о своих экспериментах с очками виртуальной реальности и о проблемах с задержкой отрисовки. Carmack Being Carmack: A Dozen Minutes With One of Video Game’s Smartest People

понедельник, июня 04, 2012

Статья Hash Functions for C++ Unordered Containers

И еще одна интересная проблема из переписки. С ней сталкиваются все, кто более-менее серьезно пытается использовать хэш-контейнеры в С++. Итак, вы пытаетесь положить свой класс в, скажем, unordered_map. И получаете сообщение об ошибке примерно такого вида:


cannot convert from 'const Name' to 'size_t'
Это крайне невразумительное сообщение об ошибке означает, что вы должны определить хэш-функцию для своего класса, чтобы можно было его использовать с данным контейнером.
О том как это сделать есть хорошая подробная статья Hash Functions for C++ Unordered Containers.
Пример оттуда с самым простым способом определить хэш-функцию


//
// This program uses a simple user-defined function
// to provide a hash function for use in unordered_map
//
// Compile this example with Visual Studio 2010
// or g++ 4.5 using -std=c++0x
//
#include <iostream>
#include <unordered_map>
#include <string>
#include <functional>

using namespace std;

typedef pair<string,string> Name;

size_t name_hash( const Name & name )
{
    return hash<string>()(name.first) ^ hash<string>()(name.second);
}

int main(int argc, char* argv[])
{
 unordered_map<Name,int,decltype(&name_hash)> ids(100, name_hash );
 ids[Name("Mark", "Nelson")] = 40561;
 ids[Name("Andrew","Binstock")] = 40562;
 for ( auto ii = ids.begin() ; ii != ids.end() ; ii++ )
     cout << ii->first.first
          << " "
          << ii->first.second
          << " : "
          << ii->second
          << endl;
 return 0;
}

вторник, мая 15, 2012

Обзор ультрабука ASUS Zenbook UX31E у Экслера

Алекс Экслер написал обзор ультрабука ASUS Zenbook UX31E. У меня такой, только UX31 без E. Отличный ультрабук, скажу я вам. Алекс жалуется на клавиатуру, у меня с ней проблем не возникало. И про камеру он ничего хорошего сказать не смог, тут я с ним соглашусь, фиговая камера.
В остальном - экран с высоким разрешением, шустрый, а главное - легкий. Для меня вес был главным критерием, обычные ноутбуки таскать мне было тяжело. Тихий, не греется, ибо SSD. В комплекте есть простенький чехол.
Короче, рекомендую. Я очень довольна.


четверг, мая 10, 2012

Как работается в Valve

Valve Software находится у нас тут неподалеку в городе Бельвью, занимаются они разработкой игр. Half Life, Counter Strike, слышали наверное. И Steam еще они делают.
Недавно в открытом доступе появилась их New Employee handbook, в которой рассказывается, что в Valve вообще нет менеджеров и начальников и каждый сам себе начальник. Народ в интернетах активно это дело обсуждает.
Valve Handbook for New Employees
Bosses are for slackers like Google - статья на gigaom.com
Valve employee manual describes the greatest workplace I've ever heard of - обсуждение на BoingBoing
Ramblings in Valve Time - блог Майкла Абраша
Valve handbook - пост в ЖЖ anton-irinev

четверг, апреля 19, 2012

Исходники Принца Персии

ТОГО Принца Персии. Конечно ассемблер.
Prince-of-Persia-Apple-II


* auto
DemoDisk = 0
org = $5400
tr on
lst off
*-------------------------------
*
* PRINCE OF PERSIA
* Copyright 1989 Jordan Mechner
*
*-------------------------------
org org

jmp AUTOCTRL
jmp CHECKSTRIKE
jmp CHECKSTAB
jmp AUTOPLAYBACK
jmp CUTCHECK


среда, апреля 04, 2012

First 48 Skate 3 videos

Проблемы с коллизиями и ragdoll'ами в игре Skate 3.




via Jim

воскресенье, марта 18, 2012

Книга Programming Interviews Exposed

Народ периодически спрашивает про книжки для подготовки к интервью. Мой мудрый бородатый коллега посоветовал книгу
Programming Interviews Exposed: Secrets to Landing Your Next Job. Посмотрела ее по диагонали - достойная книга, могу рекомендовать. Хорошо подойдет тем, кто ищет свою первую работу, а если не первую, то кое-какие вещи тоже будет полезно освежить в памяти.

Обложка только у нее странная, напоминает фильм Office Space.

Updated 8.5.2015: Это старое издание, уже есть новое.
 Старое издание можно купить на Озоне здесь.

суббота, марта 17, 2012

Отказ Windows Azure 29-го февраля

The three truths of cloud computing are: hardware fails, software has bugs and people make mistakes.

29-го февраля были серьезные перебои в работе Windows Azure. Вызваны они были багой в коде, работающим с датами, то есть понятно почему именно 29 февраля.

Вот тут подробный постмортем: Summary of Windows Azure Service Disruption on Feb 29th, 2012
Также там есть немного об архитектуре Azure.

Здесь статья на High Scalability: The Azure Outage: Time Is a SPOF, Leap Day Doubly So

Ссылки по теме:
Перевод статьи Summary of the Amazon EC2 and Amazon RDS Service Disruption in the US East Region

вторник, марта 06, 2012

Бесплатные тесты по С++ на Brainbench

Brainbench предлагает бесплатные тесты по C++, С#, Яве, Питону. Обычно такая щедрость длится недолго.

(Brainbench - известный ресурс, предлагающий такое тестирование. Результаты тестов иногда признаются работодателями. Сами тесты хороши, чтобы набить руку перед собеседованием)

Ссылка на страницу с регистрацией.

via Boris Rozenshteyn

пятница, февраля 17, 2012

Рекрутеры Бинга приедут в Москву где-нибудь в начале апреля

Рекрутеры Бинга приедут в Москву где-нибудь в начале апреля. Мэт Коннот (Mat Connot) просил меня запостить объявление и уточнил, что речь идет о позициях Principal Software Engineers, Senior Software Engineers и Software Development Engineers и что крайний срок отправки резюме 21 марта 2012.
(Об этом уже было у меня в твиттере, просто повтор для тех, кто твиттер не читает)



Bing Search Team, Microsoft

Have you ever considered relocating to the U.S.? Do you like to work on the hardest problems in computing with the biggest user impact? Have you ever dreamt about revolutionizing the way the world interacts with the web? Engineers at Bing are working on the biggest challenges in computing related to social search, local, relevance, computer vision, machine learning, semantic discovery, R&D, data mining and NLP and have some of the best resources in the world available to them.
The Bing Search Engineering Team will be visiting Moscow for a recruiting event in early April. If you’re interested in learning more, please email me (Mathias Connot) right away at mconnot@microsoft.com and please include a copy of your curriculum vitae.




We work on the cutting edge of computer science, where a petabyte of data is “small”, ten thousand machines is a “little cluster”, and one second is an “eternity”. Our tools include machine learning models and the world's largest distributed system. We are a high powered startup inside of Microsoft, working on technology and products that are critical to our company’s success and at the heart of the customer experience of the internet.
Hopefully you’ve had a chance to experience Microsoft’s new search engine Bing and seen how we're changing the game in Search. Bing is receiving amazing reviews and generating lots of great buzz. Bing has had a fantastic year so far. After the successful brand launch earlier this year, the team has been working hard, both on closing the gap with our competitors in key areas like relevance, as well as driving thought leadership with new paradigms for search and user experience. This is probably one of most exciting times to be on the team, and you have an opportunity to help shape its future.
We are looking for cream of the crop - motivated developers with excellent architecture, design, coding, debugging and problem solving skills and a track record of shipping high quality software. Qualified candidates should be able to work independently as well in a collaborative team setting to research innovative solutions to challenging business/technical problems.
Although we welcome candidates with experience in one of information retrieval, machine learning, data mining, building large-scale distributed systems or building high-performance systems, we do NOT require it.
Required skills:
• BS in Computer Science or equivalent required. MS/PhD welcome.
• Strong theory/algorithms background and exceptional problem solving and analytical skills.
• Extensive software design and development skills/experience with C/C++/C#/Java
• Excellent communications skills, both verbal and written
• Ability and willingness to work independently and in a team to research innovative solutions to challenging technical problems.

The Bing Engineering Team will be visiting Moscow for a recruiting event in early April. If you’re interested in learning more, please email me (Mathias Connot) right away at mconnot@microsoft.com and please include a copy of your curriculum vitae.

понедельник, февраля 06, 2012

Закончилась конференция GoingNative 2012

GoingNative 2012 закончилась, рассказывали там в основном про C++11. Обещали к настоящему моменту выложить записи всех докладов, но не успели, там есть только часть.

Давайте я расскажу про те доклады, на которых я побывала, а вы уж сами решайте - смотреть вам их или нет.

Страуструп читал длинный несколько затянутый доклад, где давал примеры плохого кода, показывал как его нужно исправить. Просил не использовать голые указатели, а использовать смарт поинтеры и объекты на стеке. Рассказывал про move semantics.

Ханс Боэм рассказывал про потоки, довольно много было про race conditions, примеры кода где они есть, примеры кода где их таки нет...

Лававей рассказывал про STL в С++11 на такой космической скорости, что мне было трудно следить за его мыслью.

Дальше выступал Андрей Александреску. Андрей оказался очень юморным товарищем - поглумился над скоростным Лававеем, зацитировал чей-то твит,

Don't think I'll be able to stay up to see whatever Cthuloid-template-horror Andrei Alexandrescu has in store. #GoingNative

после чего сказал "и я здесь не для того, чтобы вас разочаровать" и показал, что можно закрутить variadic templates по-разному. Что-либо оттуда на практике я не буду применять, думаю, никогда. На следующий день он рассказывал, что один из слушателей ему сказал: "Андрей, мне понравился твой доклад, но я ничего не понял". Очень правильная фраза.

Следующий день начался с доклада Саттера. Прекрасный и полезный доклад, с примерами, разбором каких-то не очевидных вещей. Если у вас особенно нет времени, но вы хотите получить общее представление о С++11 можно послушать только один этот доклад. Он, кстати, привел даты выхода книг по С++11:


Дальше Чандлер Карус рассказывал про Clang. Было бодро и весело, но я так и не поняла, чем все то, о чем он рассказывал, отличается от других статических анализаторов кода.


Неожиданным для меня оказался состав пришедших на конференцию. Индусов и китайцев было очень-очень мало. Больше половины пришедших составляли американцы. И где-то треть - русскоязычные. Если послушаете вопросы-ответы на конференции, то не раз услышите родной акцент. На обеде народ разговаривал на двух языках - русском и английском.

Кстати про обед. Кормили шикарно, причем был не только обед, но и завтрак со свежими фруктами, и перерывы на чай с тортами и печеньками.

Итого: Герб Саттер сказал нам, что C++11 feels like a new language, посмотрим как оно на самом деле.

(Спасибо моему коллеге Артему за фотографии)

суббота, января 14, 2012

Статья "Notes On Scalability"

В статье Notes on Scalability сформулированы пять принципов построения масштабируемых систем. Я привожу краткий перевод, по ссылке все подробнее и интереснее.

1. Build it to Break.
Что бы вы ни разрабатывали, оно сломается. Будьте к этому готовы.

2. Everything is a Feature
Ваше приложение - это набор решений и компромиссов.

3. Scale Out, Not Up
Хорошо, когда проблемы масштабирования можно решить добавлением серверов.

4. Buy More Storage
Много маленьких дисков обычно быстрее одного здорового.

5.You’re Going to Do It Wrong
Вы ошибетесь. Будьте готовы переписывать свой код и пробовать новые идеи.

По ссылке с highscalability.

понедельник, января 09, 2012

Карта С++11

English translation

В последнее время на землях языка С++ происходили масштабные изменения. И старая карта стала безнадежно устаревшей. Поэтому в новогодние праздники мы с Джимом напряглись и изобразили их все на карте. Вернее, изображал все конечно он, умение рисовать не относится к числу моих талантов. Он не только добавил бои за новый стандарт, но и значительно улучшил старые территории.

Так что встречайте новою версию! Осторожно, она здоровая - 13 мегов.



Для тех, кто не осилил закачать 13 мегов (кто вы, люди?) - JPEG на 4 мега

Кроме банального "распечатать и повесить на стену" народ нашел старой карте множество применений. В одном немецком вузе ее используют для обучения студентов. Несколько раз она была использована во время выступления на конференциях. Магазин из какого-то российского города (забыла уже откуда именно), торгующий холодным оружием, зачем-то использовал элемнты карты в своей рекламе.
Мы не против того, чтобы вы делали с картой что угодно. Но помните, что часть картинок честно стырена из интернетов и копирайтов на них у нас нет.

О найденных ошибках и опечатках сообщайте в редакцию, пожалуйста. Updated: опечатку с management поправили

Исходники:
cppmap-2012.cdr - собственно исходник
cppmap-2012.svg - он же, конвертнутый в более популярный формат
reikland_paper.jpg - текстура потертой бумаги

Ссылки по теме:
Карта языка C++ (The C++ Lands) - cтарая карта

пятница, января 06, 2012

CodeFlow - тулза для code review

Обещают нашу внутреннюю тулзу для code review включить в следующий релиз Visual Studio. Статья об этом:
A Bar, an Idea, and a Garage: The Story of CodeFlow

CodeFlow - прекрасная вещь, вся из себя интуитивно понятная, рекомедую. Мы ей пользуемся и довольны.