• Почему чемпионы по стратегическим играм становятся плохими руководителями?

      imageВероятно, многие замечали, что, как только хорошего программиста назначают руководить другими программистами, он сразу становится плохим руководителем, а иногда ещё и плохим программистом. Плохим программистом он становится обычно, потому что ему не дают сосредоточиться на программировании, а постоянно дергают по менеджерским вопросам, потому многие тим-лиды предпочитают програмить либо рано утром, либо поздно ночью, когда никто не отвлекает.

      Но почему же он становится плохим руководителем? Причин на самом деле много, детально о них можно почитать у Саши Орлова, я расскажу про одну из наиболее ярких.

      Почему же нам программистам сложно научится управлять людьми, мы же за свою жизнь сыграли в столько стратегических игр как компьютерных, так и настольных. Казалось бы, знаем практически все про стратегию и тактику. Многие даже с блеском выигрывали не только военные, но и экономические стратегии. В чём же причина?

      Читать дальше →
    • Помогите, нас захватывают

        Доброго дня, друзья!

        Мы понимаем, что хабр это не площадка для выяснения отношений и уж тем более не наша личная армия, но ситуация, описывыемая в этом посте, чрезвычайно важна для всей IT-индустрии в нашей стране. Мы, сотрудники компании Dream Industries (сервисы Zvooq, Bookmate, Теории и практики и Третье место), хотим заявить о продолжающемся в данный момент рейдерском захвате нашей компании.



        Читать дальше →
      • IPO for dummies. Часть VI: сложности выбора — два Lamborghini Gallardo или один Aventador?

          Начало и оглавление см. в первой части.

          Итак, моя компания вышла на IPO. Теперь я, как основатель, могу наконец-то сбросить свои акции и купить Lamborghini Gallardo! Да, я помню, что их придётся продавать «ниже рынка», но уж очень хочется прокатить Тамарку с пятого этажа на красивой спортивной машинке…

          Ты весь бизнес затеял ради наживы, что ли?

          (Возмущённо) Ради чего затеял — моё дело. Продам акции, куплю тачку-яхту-остров, буду наслаждаться, а дальше хоть трава не расти!

          «Трава не расти», говоришь? Я правильно понимаю, что ты, основатель, хочешь выйти из бизнеса и забросить его?

          У меня для тебя неприятная новость.
          Читать дальше →
        • Пишем одностраничный клиент на javascript

            Данная статья является вольным переводом. Оригинал тут.

            Введение


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

            Предлагаю ознакомиться с решением на базе backbone.js, underscore.js и jQuery, которое поможет решить эту проблему.

            Постановка задачи


            Каким бы мы хотели видеть наше приложение? Вот основные моменты, которые мне кажутся важными:
            1. Должен быть удобный способ описать модели нашей предметной области.
            2. Любые изменения в модели должны немедленно отражаться в пользовательском интерфейсе, если модель в нем представлена каким-либо образом.
            3. Понятная и легко-поддерживаемая структуризация кода в стиле MVC.


            Попробуем решить эти задачи на примере простого приложения «Каталог фильмов».
            Поехали!
          • Итераторы и генераторы на основе функций

              Поддержка итераторов и генераторов в качестве языковых конструкций появилась в javascript только в версии 1.7, и об использовании этих чудесных вещей в браузерах еще долго можно будет только мечтать. Однако использовать итераторы и генераторы в виде паттернов проектирования в javascript можно уже сейчас, и более того, делать это достаточно легко, а иногда даже приятно :)
              Добро пожаловать под кат
              • +34
              • 3,3k
              • 9
            • Iterators & Generators

                Обработка элементов коллекции/массива обычная и частая операция. В JavaScript есть несколько способов обхода коллекции начиная с простого for(;;) и for a in b

                var divs = document.querySelectorAll('div');
                for (var i = 0, c = divs.length; i < c; i++) {
                    console.log(divs[i].innerHTML);
                }
                

                var obj = {a: 1, b: 2, c: 3};
                for (var i in obj) {
                    console.log(i, obj[i]);
                }
                

                У объекта Array есть методы обхода всех элементов map(), filter()
                var numbers = [1, 2, 3, 4, 5];
                var doubled = numbers.map(function (item) {
                    return item * 2;
                });
                console.log(doubled);
                

                В Firefox есть "заполнитель массива" (Array comprehensions)
                var numbers = [1, 2, 3, 4];
                var doubled = [i * 2 for each (i in numbers)];
                console.log(doubled); // [2, 4, 6, 8]
                

                Итераторы и Генераторы появились в JavaScript 1.7 (по версии Mozilla) они есть пока в Firefox 2+ (в статье будет упомянут способ как их можно «эмулировать» почти во всех браузерах с костылем) Итераторы и Генераторы вносят механизм, позволяющий управлять поведением for in и инкапсулировать процесс получения следующего элемента в списке объектов.

                Часто для обхода и обработки элементов массива мы пишем большие конструкции, часто копипастим их части. Задача Генераторов и Итераторов усовершенствовать этот процесс, добавив синтаксический сахар.
                Читать дальше →
              • Обходим чужие тормоза

                  Бэкапил историю сообщений из Skype самописной утилиткой, год назад она работала отлично, а теперь стала люто тормозить. Это неприемлемо, тк. в том числе ради скорости экспорта она и была написана, поэтому полез в профайлер. По итогам узнал всякое и получил множественные просветления. Оказывается, breakpoint на функцию в подгруженной системной DLL ставить приходится с подвывертом, а не просто по имени, но таки можно и нетяжело. Оказывается, Skype API написан местами зверски криво, отчего и тормозища. Оказывается, чужие бинарники иногда можно очень легко подхачить и подоптимизить (слава MS Research!). Оказывается, профайлер может сильно врать, а не просто слегка подбрехивать. Ключевые слова для нетерпеливых: C++, VS, CodeAnalyst, Skype COM API, MS Research, Detours, SQLite; а для всех остальных подробности под катом.
                  Читать дальше →