• Системный подход лидера в работе с командой. Не повторяем ошибок трижды

      Сначала повторяем чужие ошибки, потом делаем свои, потом свои же повторяем ) Итак...

      Задачи менеджера проекта (лидера) в работе с командой сводятся к повышению эффективности и снижению себестоимости разработки. Эффективность команды во многом зависит от ее участников. Что мешает нам добиться синергетического эффекта? Пробуем разобраться.

      В работе менеджера проектов одно из наиболее ценных качеств – это опыт. Именно опыт формирует интуицию, помогает принимать правильные решения и завершать проекты успехом. Чаще всего наш опыт основан во многом на стандартных ошибках, в стандартных ситуациях. При этом, в текучке проблем, мы придумываем нестандартный выход из них (так проще), и забываем воспользоваться устоявшимся опытом многих предшественников, сведенным в систему. Напрасно. Система «в сознании» позволяет принимать уверенные решения, думать на несколько шагов вперед, и не тратить время на эксперементы с людьми. Описанная ниже схема покажется очевидной многим из нас, но часто мы не берем ее во внимание и совершаем ошибки, которые стоят всем денег.
      Читать дальше →
    • Совершенный код

        Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.
        Damian Conway, co-designer of Perl 6

        Хороший программный код определяется как минимум тремя признаками: однозначность, эффективность и сопровождаемость.

        Однозначность – это в первую очередь стиль кодирования. Однозначность определяется тем, какие имена переменных и функций выбирает программист, как форматирует код, как обрабатывает ошибки и формирует структуру кода.

        Эффективный код — это код, состоящий из эффективных алгоритмов. Эффективный не значит хрупкий, сложный или трудно сопровождаемый. Эффективность кода достигается путем использования сильных сторон языка и в то же время избеганием его слабостей.

        Сопровождаемость заключается в том, что код пишется в первую очередь для тех, кто будет его сопровождать. Сопровождаемость – легкость использования написанного кода, минимизация возможности появления ошибок при его изменении.
        Читать дальше →
      • Эксперты перепрошили «хакерский» Nokia 1100

          Пару недель назад в СМИ проскочила информация от голландской полиции, которая раскрыла банду хакеров, скупавших за десятки тысяч долларов старые модели телефона Nokia 1100, произведённые на уже давно закрытом заводе в Бохуме в 2003 году. Как сообщалось, в этих моделях присутствует некая недокументированная функция, позволяющая получать какую-то секретную банковскую информацию из служебных сообщений от сервиса онлайн-банкинга. Честно говоря, это было похоже на «утку» и очень слабо верилось, что такое действительно возможно.

          Но сейчас информация подтвердилась. «Хакерские» телефоны попали на исследование специалистам, в результате чего открылись новые технические детали.

          В раритетных телефонах устанавливалась особая версия прошивки, которую было относительно легко перепрограммировать, чтобы получать SMS, отправленные на любые номера. Как известно, через SMS некоторые банки Германии и Нидерландов отсылают одноразовые пароли mTAN (mobile Transaction Authentication Number), которые необходимы для доступа к счёту и проведения банковских транзакций. Чтобы воспользоваться чужим mTAN, хакер уже должен знать имя пользователя и пароль к сервису онлайн-банкинга. Но их узнать гораздо легче, чем получить чужую SMS.

          Cпециалисты из Ultrascan приобрели копию глючной модели Nokia 1100 и сообщают, что смогли с её помощью успешно перехватить чужой mTAN. Для изменения прошивки они нашли по своим хакерским каналам программу, которая на обычном ПК осуществляет дизассемблирование прошивки Nokia 1100, позволяет поменять номера IMEI (International Mobile Equipment Identity) и IMSI (International Mobile Subscriber Identity). Измененённая прошивка копируется обратно в ROM-память телефона, которая в этой модели допускает перезапись. После этого клонируется SIM-карта жертвы (это технически тривиальная задача) — и телефон готов к работе под чужим номером.

          Компания Nokia официально пока не комментирует эту информацию. Но раньше она выступала с заявлением, что не верит в существование уязвимости в прошивке Nokia 1100.
        • Причесываем трафик — динамический шейпер на Linux

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

            Сформулируем, что же мы хотим получить в результате:
            1. Чтобы канал поровну делился между пользователями.
            2. Чтобы канал зря не простаивал.
            3. Чтобы онлайн-игры, ssh и telnet не «лагали» даже при полной загрузке канала, например торрентами.
            Читать дальше →
          • Yota + Eeebuntu

              Вчера купила-таки себе Yota-модем. Повлияло два обстоятельства — снижение цены н самсунговский донгл с 4500р до 1990р, а также то, что коллега принес на работу свежеприобретенный ноутбук с WiMAX'ом — и мальчики целый день вместо работы тестировали скорость соединения :) Оказалось — сеть вполне ловится. В результате по дороге домой я заехала в магазин и купила йота-модем. Черный — под цвет моего 901-го. Сразу заставить заработать «бешеный софт» (madwimax) не удалось — поэтому ниже опишу последовательность действий, приведшую меня к успеху.
              Читать дальше →
            • Git Workflow

                1 Вступление



                В топике освещаются не столько подробности работы с git, сколько его отличия от схемы разработки других систем контроля версий, и общий подход (выработанный по большей части личным опытом и Git Community Book) к работе.


                Читать дальше →
              • Обеспечение и сбор доказательств с помощью Интернета

                  Вестник ВАСа № 3 2003 г

                  ОБЕСПЕЧЕНИЕ И СБОР ДОКАЗАТЕЛЬСТВ С ПОМОЩЬЮ ИНТЕРНЕТА. ПРОЦЕССУАЛЬНЫЙ СТАТУС ДОКАЗАТЕЛЬСТВ, ПОЛУЧЕННЫХ С ПОМОЩЬЮ ИНТЕРНЕТА
                  image
                  Cамой сложной проблемой в спорах о правонарушениях, совершенных с помощью сети Интернет, является проблема доказывания состава правонарушения, которая, в свою очередь, распадается на две составляющие:
                  1) правовые основания и порядок сбора и обеспечения доказательств и
                  2) допустимость таких доказательств с точки зрения процессуального права.
                  Интернет является средством делового общения, получения актуальной информации, ведения предпринимательской деятельности, поэтому все большее число пользователей могут стать и становятся жертвами правонарушений' в Сети. Борьба с ними в последние годы перестала быть праздной теоретической задачей. Более того, правонарушения в Интернете могут затрагивать права и интересы лиц, не являющихся пользователями Сети и даже не знающих о ее существовании.
                  Читать дальше →
                • Слушаем вызовы функций в Javascript

                    Многие знают о механизме Event-Dispatcher-Listener'ов, реализованному во многих языках программирования. Я же создам подобный механизм не для Event'ов, а для любого метода объекта JavaScript — Object.
                    Я не претендую на оригинальность, нет. Основная цель статьи — рассмотреть интересные механизмы прототипирования в JavaScript, создание декораторов и, собственно, постараться хоть немного раскрыть мощь и гибкость это чудесного языка, который так часто обижают и недооценивают.

                    UPD1: краткое содержание:
                    1. Создание декоратора на JavaScript
                    2. Создание механизма Function call listener с помощью декораторов

                    UPD2: от 09.06.2009
                    В конце статьи я добавил раздел Update: Decorator Mark II. В нём — исправления и улучшения (я не перекраивал всю статью из-за этого)

                    Итак, первый (и, надеюсь, не последний) рецепт в моей поваренной книге JavaScript.
                    Перейти к рецепту
                  • phpThread: нити в PHP? Запросто

                      Если вы хотите научиться писать многопоточные приложения на PHP или здорово упростить себе жизнь — статья для вас.

                      Раньше для этих целей я пользовался либо запуском несколько копий скрипта, либо же использовал pcntl на более низком уровне, чем хотелось бы. Это, а от части и Java-идеология работы с потоками, побудили меня к написанию пакета phpThread.
                      Читать дальше →
                    • Многоуровневое дерево с маркерами, сохраняющее состояние (HTML, CSS, jQuery, Cookies)

                        Продолжается развитие темы о многоуровневом дереве с маркерами. Многоуровневое дерево с сохранением состояния узлов
                        Теперь дерево выросло и окрепло, стало взрослее и помнит выбранный узел и состояние кажого узла в отдельности.
                        Страницу можно перезагружать, а дерево все равно будет помнить все что вы открыли и выбрали!

                        Читать дальше →
                      • Размышление о программировании и программистах

                          Навеяно в ходе последних событий
                          Необходимость знаний математики
                          и
                          Кризис программиста

                          Несколько слов о программистах для студентов младших курсов и тех, кто еще только собирается поступать в институт.


                          «Понимаете, для того, чтобы создать систему, подобную Linux, недостаточно быть хорошим кодером. Нужно быть еще и коварной сволочью.»
                          Линус Торвальдс


                          Можно дать тысячу интерпретаций данного утверждения, но многие согласятся, что понятие «программист» несколько шире понятия «кодер». Программисты в массе своей субъективны, часто рассуждают о тех или иных темах исходя из своего личного опыта и предпочтений. А опыт и предпочтения у всех различные. Это мешает в обсуждений общих вопросов, так как каждый тянет одеяло в свою сторону.
                          То, что написано дальше — это только моя точка зрения.

                          (Разбор комментариев в конце статьи)
                          Читать далее
                        • Vim Ruby Debugger

                            До недавнего времени я писал Ruby код в Netbeans. Штука клевая и очень удобная, но я давно заглядывался на Vim, уж больно он мощный текстовый редактор, бобам и не снилось. Пытался несколько раз на него перейти, но как только встречался какой-то затык в коде, закрывал Vim, открывал Netbeans, ставил брейкпоинт и начинал разбираться что не так. В общем, привык я к отладчику.

                            Помучившись некоторое время, пришла идея написать Ruby дебаггер под Vim. Открыл код rails.vim, NERDTree.vim и начал учиться VimScript'у. Так что спасибо tpope и Marty Grenfell за уроки (хотя наверно они никогда этого не прочтут и не узнают об этом). Плагин можно сейчас лицезреть на гитхабе.
                            Как это установить и как этим пользоваться
                          • Персональный зоопарк или немного о Pygame — Часть 1

                              image
                              Для тех, кто не в курсе: Pygame — это очень и очень неплохой фреймворк для разработки игр на языке Python. Причем поддерживается не только работа с 2D и 3D, но и при желании можно установить биндинги ко многим популярным графическим и физическим движкам. Кстати, Pygame вовсе необязательно использовать именно для игр, можно также создавать и программы с необычным интерфейсом, например, какой-нибудь трехмерный фронтенд к базе данных.
                              Вот мне, собственно, и захотелось рассказать об основных принципах работы с этим фреймворком, мало ли, может, пригодится кому :)
                              Ну что, погнали?
                            • Python в Latex

                                Использовать Python в LaTeX было бы очень удобно. Сразу предупреждаю, что предложенные методы считаются небезопасными, потому-что Python умеет гадить, если написать соответствующий код, так что проверяйте его (=

                                Существует готовый метод в виде файла стилей, используется так:
                                \usepackage{python}
                                \begin{python}
                                from math import sin
                                a = sin(5)
                                c = sin(9)
                                b =  max(a,c)
                                print b
                                \end{python}


                                Этот пакет, фактически, создает jobname.py, пишет вывод в jobname.py.out, jobname.py.err, и читает его.
                                Метод плох тем, что переменные не сохраняются от кода к коду, и для этого приходится использовать pickle, приходиться каждый раз заново всё import`ить и т.п., а еще мне кажется, что удобно иметь все расчеты в одном месте в отдельном файле, поэтому я построил свой лунапарк…
                                Читать дальше →
                                • +18
                                • 6,9k
                                • 5
                              • SOAP, генерация прокси класса

                                  Преамбула:

                                  SOAP — протокол обмена структурированными сообщениями в распределённой вычислительной среде. Первоначально SOAP предназначался, в основном, для реализации удалённого вызова процедур (RPC), а название было аббревиатурой: Simple Object Access Protocol — простой протокол доступа к объектам. Сейчас протокол используется для обмена произвольными сообщениями в формате XML, а не только для вызова процедур. Официальная спецификация последней версии 1.2 протокола никак не расшифровывает название SOAP. SOAP является расширением протокола XML-RPC.


                                  Итак, делаем proxy-class
                                  Читать дальше →
                                • Мини-обзор музыкального ПО под nix-системы

                                    Мною было неоднократно замечено что хабрапользователи интересуются музыкальным софтом под nix-системы. Поскольку интересуются они как правило при комментировании топиков, то и ответы получают там же. Позже найти какую-либо информацию в комментариях довольно не просто, поэтому было принято решение описать лучшие, на мой взгляд, программы, в отдельной статье.
                                    Читать дальше →
                                  • Нанолого, или как сделать логотип который будет удивлять

                                      image
                                      Существует много способов выделиться среди конкурентов.
                                      Самым простым и самым правильным способом будет сделать что-то уникальное и удивляющее. Такое точно не забудется.
                                      Читать дальше →
                                    • 10 приемов, разрушающих хрупкую красоту кода

                                        Статья приводится в сокращении из-за ограничения на объем материала.

                                        Для меня программирование — это не только технология, но и, во многом — искусство. И, поэтому, большое значение имеет красота кода.

                                        Последние несколько лет я собирал приемы программирования, разрушающие в программном коде его утонченную красоту:
                                        1. Объявление всех переменных в начале программы;
                                        2. Возврат результата функции через ее параметр;
                                        3. Отсутствие локальных функций;
                                        4. Отсутствие else if;
                                        5. Использование параллельных массивов;
                                        6. Хранение размера массива в отдельной переменной;
                                        7. Доступ к свойствам объекта через obj.getProperty() и obj.setProperty(value);
                                        8. Использование рекурсии для вычисления факториалов и Чисел Фибоначчи;
                                        9. Отсутствие именованных параметров функции;
                                        10. Невозможность объявления объектов «на лету».
                                        Наверняка, в некоторых местах вы будете со мной несогласны — ведь чувство красоты у всех разное.


                                        Объявление всех переменных в начале программы


                                        В двух словах:

                                        Переменные должны объявляться в начале логического блока, в котором они используются, а НЕ в начале функции или программы.


                                        Читать дальше →