• Архитектура open source-приложений: Как работает nginx

    • Translation


    Мы в «Латере» занимаемся созданием биллинга для операторов связи и рассказываем на Хабре о разработке своего продукта, а также публикуем интересные технические переводные материалы. И сегодня мы представляем вашему вниманию адаптированный перевод одной из глав книги «Архитектура open-source-приложений», в которой описываются предпосылки появления, архитектура и организация работы популярного веб-сервера nginx.
    Читать дальше →
  • Пятничный формат: Как писать код, который никто не сможет сопровождать

    • Translation


    Благодаря советам экспертов в области Java вы научитесь писать код, который будет настолько сложно сопровождать, что любому, кто будет с ним работать после вас, потребуются годы, чтобы внести даже малейшие правки. Более того, если будете неизменно следовать этим правилам, вы сможете гарантировать себе пожизненное рабочее место, так как никто кроме вас не сможет разобраться в вашем коде.
    Читать дальше →
  • Рентабельный код 2: крадущийся DDD, затаившийся CQRS

    • Tutorial

    Трем программистам предложили пересечь поле, и дойти до дома на другой стороне. Программист-новичок посмотрел на короткую дистанцию и сказал, «Это не далеко! Это займет у меня десять минут». Опытный программист посмотрел на поле, немного подумал, и сказал: «Я мог бы добраться туда за день». Новичок посмотрел на него с удивлением. Гуру-программист посмотрел на поле и сказал. «Кажется минут десять, но я думаю пятнадцати будет достаточно». Опытный программист рассмеялся.

    Программист-новичок двинулся в путь, но в течение нескольких мгновений, начали взрываться мины, оставляя после себя большие ямы. От взрывов он отлетал назад, и ему приходилась начинать сначала снова и снова. У него ушло два дня чтобы достичь цели. К тому же он весь трясся и был ранен, когда пришел.

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

    Гуру программист пустился в путь, и пошел прямо через поле. Целеустремленно и прямо. Он достиг цели всего за десять минут.
    «Как тебе это удалось?» — спросили двое других — «Как ты умудрился не зацепить ни одной мины?»
    «Легко» — ответил он. «Я не закладывал мины на своем пути».

    Как ни прискорбно, придется признать – мы сами закладываем себе мины. В первой части я подробно разобрал основные риски в разработке ПО и описал технологические и методологические способы ослабления этих рисков. За прошедший год я получил множество комментариев, основной смысл которых сводился к следующему: «все круто, но с чего начать и как все это будет выглядеть в реальном мире». Действительно, первый текст носит скорее теоретический характер и представляет собой каталог ссылок. В этой статье я постараюсь привести как можно больше примеров.
    Читать дальше →
  • Как определить дубликаты картинок с помощью PHP

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



      Потому рано или поздно встает вопрос автоматизации процесса поиска повторов, и тут мы рассмотрим основные, а также попробуем в деле.
      Читать дальше →
    • Реактивное программирование в табличном процессоре



        Табличный процессор (речь идет о MS Excel или LibreOffice Calc) — это довольно занятный и универсальный инструмент. Мне часто приходилось (и приходится) пользоваться его широкими возможностями: автоматизированные отчеты, проверка гипотез, прототипирование алгоритмов. Например, я использовал его для решения задач проекта Эйлер, быстрой проверки алгоритмов, реализовал парсер одного прикладного протокола (по работе надо было). Мне нравится наглядность, которую можно добиться в табличном процессоре, а еще мне нравится нестандартное применение всего, чего только возможно. На Хабре уже появлялись интересные статьи на тему нестандартного применения Excel:
        «Assembler в 30 строк на Excel»
        Чем заняться айтишнику в армии или как я на VBA игры писал
        «RPG-игра в рабочей книге Excel»

        В этой длинной статье я хочу поделиться своими экспериментами в реактивном программировании с помощью формул табличного процессора. В результате этих экспериментов у меня получился «компьютер» с процессором, памятью, стеком и дисплеем, реализованный внутри LibreOffice Calc при помощи одних только формул (за исключением тактового генератора), который можно программировать на неком подобии ассемблера. Затем, в качестве примера и proof-of-concept, я написал игру «Змейка» и бегущуюползущую строку для этого компьютера.
        Читать дальше →
      • Философия программирования — трёхнаправленное программирование

          Программирование рассматривается как процесс создания компьютерных программ. Слово процесс в этом определении не лишнее. Обычно рассуждают в духе «посмотрите, какую замечательную структуру данных можно описать на данном языке программирования». Философия программирования подразумевает оглянуться по сторонам, да и в глубь копнуть.

          Собственно разделение на кодирование, и создание алгоритмов это уже специфика, сначала идёт жизнь, то есть человек опирается на некую мысль вроде «напишу-ка я фреймворк с такими-то свойствами». И вот это начальное направление это вопрос философии. Проблема в том, что часто жена программиста лучше его самого знает, на философском уровне, что он делает и почему. Элементарные философские категории: мышление, сознание, обусловленность программисту неведомы. И это странно, если сравнить способность программиста мыслить, например, читая статьи по функциональному программированию или алгоритмам поиска, вперемешку со статьями видных русских или европейских философов, окажется, что собственно навык мышления у программистов развит не меньше, а то и больше. Вот только язык программиста очень богат пока он рассуждает о паттерн-матчинге и жалок и органичен когда ему надо выйти из своей песочницы, оторваться от IDE и файлового менеджера.
          Читать дальше →
        • Установка, настройка и тестирование Fedora 21 Workstation на личном или игровом компьютере

            9-го декабря вышла новая Fedora 21 Workstation, которую по совокупности параметров можно назвать «самым свежим и стабильным» Линукс-десктопом.

            За время использования и тестирования Fedora я проникся к этой платформе глубокой симпатией и хочу поделиться этим теплом и знаниями о ней с вами.

            В течение года я наблюдал за её работой в качестве рабочего и игрового места в разных ситуациях — от станций с «умирающим» железом до нового игрового ноутбука Asus G750JM с Nvidia Optimus.

            Собранные заметки получились несколько шершавыми, старающимися охватить одновременно и новичков в Линуксе, и опытных пользователей с разработчиками. Прошу простить. Хочу донести большой объем информации в одной статье: и по общей настройке и установке Федоры, и по технологии Nvidia Optimus на ноутбуках, wi-fi с проприетарными драйверами, о настройке симпатичных шрифтов в Java и IDE от JetBrains, запуску игр в Steam на дискретной видеокарте, о результатах сравнительного тестирования игр, графики и браузеров между Федорой и Windows 8.1, и даже об установлении одного «абсолютного» рекорда.

            Хочу отметить, что свежие десктопные Линуксы также отличаются качественной поддержкой дисплеев высокого разрешения с хорошей отрисовкой шрифтов и оконных элементов, предоставляют высочайшую степень различных персональных настроек, «хаков» и возможностей оперирования с приложениями. Всё это позволяет не только значительно повысить эффективность своей работы, но и сделать это с комфортом для глаз.

            Читать дальше →
          • Обработка и оформление отчетов в Excel на PHP

            • Tutorial

            Не редко при разработке некоего проекта, возникает необходимость в формировании отчетной статистики. Если проект разрабатывается на Delphi, C# или к примеру, на С++ и под Windows, то тут проблем нет. Всего лишь необходимо воспользоваться COM объектом. Но дела обстоят иначе, если необходимо сформировать отчет в формате excel на PHP. И чтобы это творение функционировало на UNIX-подобных системах. Но, к счастью, не так все плохо. И библиотек для этого хватает. Я свой выбор остановил на PHPExcel. Я уже пару лет работаю с этой библиотекой, и остаюсь доволен. Поскольку она является кроссплатформенной, то не возникает проблем с переносимостью.


            PHPExcel позволяет производить импорт и экспорт данных в excel. Применять различные стили оформления к отчетам. В общем, все на высоте. Даже есть возможность работы с формулами. Только необходимо учитывать, что вся работа (чтение и запись) должна вестись в кодировке utf-8.

            Читать дальше →
          • Обзор java.util.concurrent.*

            • Tutorial
            В повседневной работе не так уж часто приходится сталкиваться с пакетом для многопоточности java.util.concurrent. Иногда существуют проектные ограничения по использованию java 1.4.2, где нет данного пакета, но чаще всего хватает обычной синхронизации и не требуется ничего сверхъестественного. К счастью, периодически возникают задачи, заставляющие немного пораскинуть мозгами и либо написать велосипед, либо порыться в javadoc'ах и найти что-то более подходящее. С велосипедом проблем нет — просто берешь и пишешь, благо ничего суперсложного в многопоточности нет. С другой стороны, меньше кода — меньше багов. Тем более, что на многопоточность никто в здравом уме юнит тестов не пишет, т.к. это уже полноценные интеграционные тесты получаются со всеми вытекающими последствиями.

            Что выбрать для конкретного случая? В условиях запарки и deadline'ов довольно сложно охватить весь java.util.concurrent. Выбирается что то похожее и вперед! Так, постепенно, в коде появляются ArrayBlockingQueue, ConcurrentHashMap, AtomicInteger, Collections.synchronizedList(new LinkedList()) и другие интересности. Иногда правильно, иногда нет. В какой то момент времени начинаешь осознавать, что более 95% стандартных классов в java вообще не используются при разработке продукта. Коллекции, примитивы, перекладывание байтиков с одного места на другое, hibernate, spring или EJB, еще какая то библиотека и, вуаля, приложение готово.

            Чтобы хоть как то упорядочить знания и облегчить вхождение в тему, ниже идет обзор классов для работы с многопоточностью. Пишу прежде всего как шпаргалку для себя. А если еще кому сгодится — вообще замечательно.
            Читать дальше →
          • PHPUnit: Mock объекты

            Довольно часто при написании модульных тестов нам приходится сталкиваться с тем, что тестируемый класс зависит от данных из внешних источников, состояние которых мы не можем контролировать. К таким источникам можно отнести далеко расположенную общедоступную базу данных или службу, датчик какого-нибудь физического процесса и пр. Либо нам необходимо убедиться, что некие действия выполняются в строго определенном порядке. В этих случаях к нам на помощь приходят Mock объекты (mock в переводе с английского — пародия), позволяя тестировать классы в изоляции от внешних зависимостей. Использованию Mock объектов в PHPUnit посвящается эта статья.
            Читать дальше →
          • Незаметные сложности ракетной техники


              Строительство и эксплуатация ракет-носителей — это своеобразная «черная команда» космонавтики. Большая и сложная работа делается незаметно, а большинство лавров достаются разработчикам полезной нагрузки. Мы забыли о сложности задач, которые решаются при проектировании и производстве ракет-носителей. Эта статья призвана показать важность темы и представить небольшой ликбез тем, кто хотел бы узнать, «как оно летает».
              Читать дальше →
            • Правда о Мариссе Майер: неофициальная биография [вступление]

              • Translation
              Несколько примечаний: во-первых, огромная благодарность хабрапользователю HotWaterMusic за львиную часть работ, связанных с переводом, которые он выполнил. Во-вторых, сейчас ни у него, ни у меня нету возможности продолжать перевод — а это еще около 70 страниц формата A4. Если кто-то вдруг захочет взятся за это, просьба написать мне в личку, чтобы я знал, что есть желающие. Либо создайте ветку комментариев, чтобы желающие могли в ней скоординироваться.

              image

              Теплым летним утром, 12 июля 2012 года, временный CEO Yahoo Росс Левинсон все еще верил в то, что он станет постоянным гендиректором компании.

              Оставалось всего одно собрание до его ухода.

              Это было заседание совета директоров, которое должно было пройти в огромном конференц-зале на первом этаже штаб-квартиры Yahoo в Саннивейл, Калифорния. В Yahoo эту комнату называли “Phish Food (прим. перев: особое мороженое с печеньем в виде рыб)” – это была стильная комната, до верху набитая стеклом, диванами из белой кожи и стульями.

              Повесткой дня было следующее: Левинсон представляет свой план относительно Yahoo, после чего становится постоянным CEO.
              Читать дальше →
            • О человеческом бессмертии



                //Заранее прошу прощения у тех, кто считает неприемлемым публикацию подобных постов, со свободными рассуждениями, на хабре.

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

                Десять лет назад я считал изложенные в данной публикации мысли достаточно банальными. Прочитав последние публикации на Хабре [1] я понял что это не так.

                Термин “Искусственный интеллект” может быть великолепной иллюстрацией понятия прецессии симулякров. Его значение меняется каждый год, в зависимости от настроений рынка или моды философов-гуманитариев. Десятилетия назад шахматная программа считалась ИИ. Сегодня это банальный инжиниринг. Через десятилетия Ватсон и Сири будут стандартной компонентой в очередном фреймворке. ИИ — символ непознанного, как только мы отщипываем кусочек неизвестного — оно сразу теряет свою привлекательность.
                Однако если забыть гуманитарные установки и подойти к делу с точки зрения технаря можно понять следующие вещи.
                Читать дальше →
              • Онлайн размещение документов на сайте

                В наше время, когда Интернет широко шагает по стране, компании все чаще создают собственные сайты. Почти на каждом присутствует информация о ценах на продукцию, услуги и т.д., проще говоря – прайсы. Зачастую прайсы сразу сверстаны в html страницу или дается ссылка на их скачивание. В первом случае хорошо, если на сайте установлена CMS и можно редактировать страницы, а если нет? Во втором, нужно закачать прайс по ftp. Оба случая могут явиться камнем преткновения при обновлении прайса на сайте, если нет собственного вебмастера. Да и копирование информации из готового прайса на сайт, может привести к неточностям и ошибками, особенно если прайс не маленький. А это чревато потерей клиентов. Рассмотрим, как упростить размещение прайсов online. Сразу оговорюсь, что рассматривать мощные системы, где CMS сайта взаимодействует с бухгалтерией компании я не буду.
                Читать дальше →
              • По следам интеллекта

                  По следам интеллекта


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

                    Продолжу «космическую» тему в своих постах. На этот раз хочу рассказать об одном малоизвестном аспекте программы «Энергия — Буран», а именно — о системе автоматической посадки орбитального корабля.

                    Кратко о программе


                    imageО программе «Энергия — Буран» написано немало, я бы порекомендовал всем интересующимся сразу отправиться на специальный сайт buran.ru, на котором очень много достоверной информации.

                    Если вкратце резюмировать, то программа «Энергия — Буран» предусматривала создание универсальной тяжелой ракеты-носителя «Энергия» стотонного класса и, в качестве полезной нагрузки для нее — орбитального многоразового корабля «Буран».

                    Корабль «Буран» во многом был аналогом американской системы Space Shuttle: крылатый и бесхвостый планер, плиточная теплозащита, грузовой люк, сходные массо-габаритные параметры (вывод 30 тонн и возвращение с орбиты 20 тонн груза, экипаж до 7 космонавтов), но, поскольку техника не стоит на месте, а наш корабль разрабатывался позже, имел и существенные отличия. «Буран», в отличие от американского аналога, был изначально предназначен для стыковки с орбитальными станциями и другими кораблями, имел систему спасения экипажа (ее отсутствие погубило в свое время экипаж «Челленджера»), и, самое главное — мог выполнять задачи выхода в космос, работы на орбите и посадки в полностью автоматическом режиме.

                    Читать дальше →
                  • Подключаемся к камерам наблюдения

                      image

                      Зачем нужны камеры наблюдения? Правильно — чтобы наблюдать за происходящим и контролировать ситуацию! В наше неспокойное время эти самые камеры развешаны повсюду — от денежных хранилищ до придорожных кафе. Однако защищая свои владения, хозяева порой забывают о защите самой камеры путем банальной установки пароля на доступ из Интернета. И очень зря. Если пароль не установить — ваша камера «безопасности» превращается в публичную вэб-камеру с реалити шоу для всех желающих.
                      Читать дальше →