• Стенограмма доклада про Фантом-ОС, сделанного Дмитрием Завалишиным на ADD-2010

      Аннотация


      Дмитрий Завалишин рассказал о текущем состоянии в разработке своего любимого детища — оригинальной операционной системы PhantomOS, близкой по концепции Microsoft Singularity, но при этом open-source (опубликована большая часть исходных кодов этой операционной системы).

      Микроядерная операционная система без файлов и процессов, только с вечно живущими объектами/нитями/тредами, привлекала любопытных даже на уровне концепции, а теперь она стала оживать, загружаться, и готова превратиться в настоящий коллективный проект.
      Читать дальше →
    • Отдел ошибок

        Здание Jcraft поражало весь Нью-Йорк. Величественные, устремленные в небо шпили загадочного творения архитектуры, сотни этажей, десятки лифтов…

        Как хорошо работать в такой большой компании, думал Фокс. Стабильный оклад, большие возможности для карьерного роста, социальный пакет – а что еще нужно от работы? Пусть то, чем он занимался, не было особенно интересным – какая разница, главное, платят за это внушительно.

        — Эй, Фокс, поди сюда. Тебя босс вызывает. – сказал Джон.
        — Да, уже иду.
        Читать дальше →
      • Миссия невыполнима. Мертворожденные проекты

          «Когда человек не знает, к какой пристани он держит путь, для него ни один ветер не будет попутным». (С) Сенека, Луций Анней



          Предисловие

          Как-то один из топов уважаемой компании, которая занимается продуктовой разработкой ПО, пригласил меня, как эксперта, чтобы я оценил качество нового продукта. Я внимательно просмотрел и прослушал презентацию. Видно было, что коллеги очень старались и работали по 10-12 часов, чтобы продукт выглядел на высшем уровне. После чего меня спросили: «хороший получился продукт или нет?» Я поблагодарил за представленную презентацию, но попросил ответить на свой последний вопрос: «А какие процессы, и с какой целью вы собираетесь автоматизировать с помощью этого инструмента?» Вопрос почему-то вызвал замешательство у докладчиков. После небольшой паузы, топ, который, видимо, был идеологом нового продукта, ответил: «Был бы инструмент хороший, а какие процессы с его помощь автоматизировать мы найдем!» Мне пришлось сказать, что оценить продукт я не смогу. Не зная бизнес-целей, невозможно понять степень их достижения.

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

          Для иллюстрации используем проект «Экспедиция за сокровищами Флинта»
          Девять пунктов концепции проекта
        • Опыт по краудфандингу геймерского фестиваля NextCastle Party

            Доброго времени суток, хабражители!

            Осенью в Санкт-Петербурге пройдет геймерский фестиваль NextCastle Party и сейчас близится к завершению кампания по сбору средств на краудфандинговой платформе Бумстартер. И если сбор денег на разработку игр уже давно стал обыденным явлением, то сбор средств на подобный фестиваль является скорее исключением. Поэтому в данной статье я бы хотел рассказать о том, почему мы решили использовать краудфандинг, какие ошибки мы совершили и какой опыт получили.

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

            Читать дальше →
          • 5 способов, которыми игры пытаются вызвать зависимость

            • Translation
            Итак, в новостях снова пишут, что кто-то еще умер из-за игромании. Да, опять Корея.

            Какого ...? послушайте, я не пытаюсь доказать что видео игры — это героин. Я полностью понимаю, что в данном случае у жертвы было много проблем в жизни. Но, половина из вас знает что World of Warcraft затягивает и что доктора считают игровую зависимость серьёзной проблемой. А вопрос вот в чем: может быть какие-то игры намеренно разрабатывались, чтобы заставлять вас играть в них, даже если вы не получаете от этого удовольствия?
            Давайте посмотрим как это работает
          • Секреты JDK


              Про Unsafe в Java не слышал только ленивый, однако это не единственный магический класс в Sun/Oracle JDK, стирающий границы Java платформы и открывающий тропинки, не нанесенные на карту публичного API. Я расскажу про некоторые из них, принесшие пользу в реальных проектах. Но помните: недокументированные возможности лишают ваше приложение переносимости на другие Java платформы и, кроме того, являются потенциальным источником нетривиальных ошибок. Я даже зря написал слово «приложение». Лучше сказать, что описанные ниже классы вовсе не годятся для приложений! Скорее, они представляют интерес лишь для системного ПО и для любознательных программистов, т.е. для вас :)
              Читать дальше →
            • Как работает yield

              • Translation
              На StackOverflow часто задают вопросы, подробно освещённые в документации. Ценность их в том, что на некоторые из них кто-нибудь даёт ответ, обладающий гораздо большей степенью ясности и наглядности, чем может себе позволить документация. Этот — один из них.

              Вот исходный вопрос:
              Как используется ключевое слово yield в Python? Что оно делает?

              Например, я пытаюсь понять этот код (**):
              def _get_child_candidates(self, distance, min_dist, max_dist):
                  if self._leftchild and distance - max_dist < self._median:
                      yield self._leftchild
                  if self._rightchild and distance + max_dist >= self._median:
                      yield self._rightchild
              

              Вызывается он так:
              result, candidates = list(), [self]
              while candidates:
                  node = candidates.pop()
                  distance = node._get_dist(obj)
                  if distance <= max_dist and distance >= min_dist:
                      result.extend(node._values)
                      candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
                      return result
              


              Что происходит при вызове метода _get_child_candidates? Возвращается список, какой-то элемент? Вызывается ли он снова? Когда последующие вызовы прекращаются?

              ** Код принадлежит Jochen Schulz (jrschulz), который написал отличную Python-библиотеку для метрических пространств. Вот ссылка на исходники: http://well-adjusted.de/~jrschulz/mspace/

              Подробный и обстоятельный ответ
            • Хочется взять и расстрелять, или ликбез о том, почему не стоит использовать make install

                К написанию сей заметки меня сподвигло то, что я устал делать развёрнутые замечания на эту тему в комментариях к статьям, где в качестве части инструкции по сборке и настройке чего-либо для конкретного дистра предлагают выполнить make install.
                Суть сводится к тому, что эту команду в виде «make install» или «sudo make install» использовать в современных дистрибутивах нельзя.

                Но ведь авторы программ в руководствах по установке пишут, что нужно использовать эту команду, возможно, скажете вы. Да, пишут. Но это лишь означает, что они не знают, какой у вас дистрибутив, и дистрибутив ли это вообще, может, вы вступили в секту и обкурилисьчитались LFS и теперь решили под свою хтоническую систему скомпилять их творение. А make install является универсальным, хоть и зачастую неправильным способом это сделать.

                Читать дальше →
              • О вреде синтаксического сахара

                  О чём речь? Конечно, использование синтаксического сахара не приводит к синтаксическому диабету, но он может мешать вам думать. Это может звучать странно, учитывая, что синтаксический сахар призван облегчить нам жизнь: обернуть в интуитивные обёртки операции над абстракциями, сделать программы легко читаемыми, да и просто симпатичными. Однако, всякий инструмент, который направляет нашу мысль одновременно удерживает её на этом направлении.
                  Ситуация здесь как в анекдоте о дорогах,...
                • Использование Spring в OSGi-контейнере


                    Вряд ли найдётся Java разработчик, который не знает что такое Spring Framework. Одними из базовых технологий данного фреймворка являются IoC контейнер и поддержка AOP. Эти технологии позволяют успешно разбивать архитектуру приложения на обособленные слои, как на уровне классов, так и на уровне компоновки объектов во время выполнения. Казалось бы, что приложение отлично структурировано на элементы/слои, но по своей сути оно остаётся монолитным. Монолитным во время выполнения (runtime)! Только в рамках данного фреймворка не существует универсальных решений этой проблемы. Чуть меньшее количество Java разработчиков слышало об OSGi. Это спецификация модульных систем для Java платформы. Использование конкретной реализации данной спецификации в качестве основы приложения позволяет сделать его модульным, как во время выполнения, так и на физическом уровне (уровне файлов). О синергии этих технологий и пойдёт речь в этой статье.
                    Читать дальше →
                  • Синхронные движки RTS и история рассинхронизаций

                    • Translation
                    Случалось ли Вам играть в игру вроде StarCraft или Supreme Commander и получать сообщение об ошибке вроде “Обнаружена рассинхронизация”, за которым следует закрытие игры? Хотите узнать отчего так происходит? Это наследие архитектуры игрового движка, часто используемой стратегиями в реальном времени.1

                    Мой опыт в этой области происходит из работы с движком Supreme Commander в студии Gas Powered Games. В период бета тестирования в Starcraft и Warcraft 3 тоже были проблемы с синхронизацией, так что можно сказать что в целом они работают так же. Для простоты я буду говорить именно о движке Supreme Commander. Нахождение сходства с другими играми оставлю как упражнение для читателя :)
                    Читать дальше →
                  • Анонимности нет, смиритесь! (русские субтитры)

                    • Translation

                    Выступление Стива Рамбама на конференции Hackers On Planet Earth (часть I)


                    Это выступление Стива Рамбама на последней конференции H.O.P.E. (Hackers On Planet Earth)

                    Стив выступает на каждой хакерской конференции H.O.P.E. с 1994 года.
                    Если вы не знаете про Стива и не видели его выступления — обязательно посмотрите это видео.

                    Покажите его тем, кто плохо знаком с миром IT: бухгалтерам, продажникам, маркетологам…
                    Обычным людям.

                    Видео с русскими субтитрами на Universal Subtitles
                    (хабр не позволил вставить скрипт):
                    Ctrl+ www.amara.org/ru/videos/YSEgofMg2wgv/info/steven-rambam-privacy-is-dead-get-over-it-part-1

                    Это же видео без наложенных субтитров, для англоговорящих:

                    Читать дальше →
                  • Java Logging: история кошмара

                      Вступление


                      Тернист и извилист путь Java-платформы к правильному способу записи строчек в лог-файлы. История logging в Java довольно познавательна в плане изучения особенностей Open Source, в том числе его взаимодействия с корпорациями и единичными программистами. Я собираюсь рассказать столько, сколько возможно, об истории развития Java logging, а также о том, к чему все пришло и как жить дальше.
                      Вперед и с песней!
                    • Функциональное тестирование веб-приложений без боли

                      Иногда в жизни бывает так — вот ждёшь, ждёшь чего-то, изучаешь теорию по данному вопросу, рассматриваешь разные подходы к решению, дискутируешь с такими же ищущими как ты, внимаешь гласу признанных гуру, но не продвигаешься дальше ни на дюйм. Потом бросаешь, забываешь вообще об этом вопросе, занимаешься другими делами, и вдруг — на тебе, всё встало на свои места, из разрозненных элементов сложилась чудесная мозаика, нагрянуло просветление, а волосы вдруг стали густыми и шелковистыми.
                      Читать дальше →
                    • Как делать качественные печатные платы в домашних условиях.

                        Любой электронный девайс требует соединения воедино кучи деталей. Конечно, можно спаять девайс на монтажной плате, но при этом велик риск наделать кучу ошибок, да и сам девайс будет выглядеть весьма стремно. Торчащие во все стороны провода оценят только любители трешдизайна. Поэтому, будем делать печатную плату!

                        А чтобы тебе было проще, я сделал видео урок на тему изготовления печатных плат методом Лазерного Утюга ака ЛУТ.

                        Полный цикл, от подготовки платы с куска текстолита, до сверления и лужения.
                        Читать дальше →
                      • Анти-паттерны Test Driven Development

                        • Translation
                        Я надеюсь, что как грамотный разрабочик, вы имеете представление о unit-тестировании и сделаете себе в голове пару мысленных отметок о том, чего надо избегать при написании тестов. Знакомьтесь:

                        Лжец (The Liar)

                        Unit-тест, который успешно выполняет все кейсы и выглядит работающим правильно, однако при более детальном рассмотрении обнаруживается, что он на самом деле не тестирует то, что должен.

                        Читать дальше →
                      • Метод критической цепи

                          Метод критической цепи: эффективное управление проектами с использованием буферов времени и ресурсов


                          Работа стремится занять все время, отпущенное на нее.
                          Закон Паркинсона.
                          Если какая-нибудь неприятность может произойти, — она случается.
                          Закон Мерфи.

                          Немного статистики


                          Одной из причин выделения управления проектами в отдельную область знаний является неопределенность. То, как мы управляем неопределенностью в проекте (в том числе и рисками), напрямую влияет на длительность проекта, на его успех.
                          По данным многочисленных исследований Standish Group1 для традиционных методов управления проектами, только 44% проектов обычно завершаются вовремя. В среднем проекты занимают 222% процента от изначально запланированной длительности, 189% от начального бюджета. 70% проектов сокращают исходный объем работ проекта, 30% проектов закрываются досрочно.
                          И хотя в последнее время, с развитием инструментов и техник управления проектами, эти цифры стали уменьшаться, общая картина говорит о том, что мы как менеджеры проектов плохо делаем свою работу.
                          Данная статья рассматриваем использование относительно новый метод управления проектами, метод критических цепей (МКЦ), сравнивая его с традиционным подходом к управлению проектами.
                          Читать дальше →