• Почему Gradle?

    • Перевод
    Если вы еще не знаете, что такое Gradle, то о нём можно почитать в предыдущих двух обзорах:
    1. Gradle: Better Way To Build
    2. Gradle: Tasks Are Code

    Не так давно c Maven на Gradle была переведена сборка Hibernate Core. На что информационное сообщество отреагировало неоднозначно. Я хочу представить вашему вниманию перевод статьи, посвященной миграции сборки Hibernate. В статье раскрываются причины принятия такого решения, описываются преимущества Gradle и проблемы с Maven2. Дальнейшее повествование ведётся от лица Steve Ebersole.
    Читать дальше →
    • +1
    • 94,5k
    • 7
  • Преодоление технической пропасти

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

    Все мы знаем, что такое iPhone. Мы примерно знаем, кто его придумал и за счёт чего он стал таким популярным. Мы знаем, что пятая версия длиннее, чем 4S, и что у неё выше разрешение экрана. Мы знаем, что в iPhone 4S два ядра вместо одного в iPhone 4 и кучу других деталей. Наконец мы знаем, что проект коммерчески невероятно успешен, и вывел Apple из производителя железа для гиков и профессионалов в мейнстрим, сделав её из самых богатых компаний мира.

    Внимание, ключевой вопрос: можем ли мы воспроизвести iPhone? Повторить его. Ничего не выдумывая, взять и сделать точно такой же или хотя бы нечто, отдалённо его напоминающее? Пусть даже самую простую, старую и слабую его модель? Своими руками отлить из металла спаять, собрать, свинтить, скрепить, вырезать, вырастить…
    Читать дальше →
  • Google запустила странный сайт Niantic Project



      В интернете появился сайт Niantic Project за авторством поискового гиганта — при этом никакой явной и прямо очерченной функциональности проект, по всей видимости, ещё не имеет.

      Оформленный в мрачном стиле сайт стилизован под доску, которую обычно используют полицейские в голливудских фильмах, чтобы прикреплять на неё доказательства в виде фотографий или некоторых записок. Среди записей на «доске» можно обнаружить видео, имитирующее запись со спутника с обозначенными широтой и долготой и с неким QR-кодом, сканирование которого даёт plain-text с длинной последовательностью цифр, похожей на шифрованное сообщение.
      Узнать подробности
    • Symfony Components, Event Dispatcher (теория, часть 2)

      • Перевод
      image
      Привет. Это вторая часть перевода документации по Symfony компоненту Event Dispatcher, первая часть здесь. Вторая часть перевода представляет собой сборник общих рецептов по использованию компонента Event Dispatcher. Для тестирования приведенных примеров не нужно подключать фреймворк Symfony — как отмечалось в первой части, компоненты независимы от фреймворка. Еще раз хочу отметить, что код Symfony компонентов сейчас перерабатывается для использования с Symfony 2 (PHP >= 5.3.2). Данный перевод относится к стабильной версии компонента Event Dispatcher. Но, насколько я понял из сравнения стабильной версии компонента с текущей под Symfony 2, — функционально они мало чем отличаются, то есть документация будет полезна и использующим новую версию компонента (PHP >= 5.3.2). Итак начнем.
      Читать дальше →
    • PHPUnit. Автоматические тесты

      • Перевод
      Предисловие переводчика:
      Недавно начал изучать PHPUnit (framework семейства xUnit) и с удивлением обнаружил, что на русском языке нет статей про автоматические тесты для самых-самых чайников.
      В первой главе документации по PHPUnit на примерах очень доступно рассказывается, что такое автоматическое тестирование.


      Даже хорошие программисты допускают ошибки. Разница между хорошим программистом и плохим заключается в том, что хороший программист как можно чаще использует тесты, чтобы найти свои ошибки.
      Чем раньше Вы начнете тестировать, тем выше Ваши шансы найти ошибку, и тем ниже цена исправления.
      Это объясняет, почему откладывание тестирования до момента передачи программы заказчику является очень плохой практикой. Большинство ошибок так и не будет найдено, а цена исправления станет такой высокой, что Вам придется составить большой график работы, т.к. сразу Вы не сможете их все исправить.
      Читать дальше →
    • Правильный Singleton в Java

        Уверен, каждый из читателей, знает что такое шаблон проектирования “Singleton”, но не каждый знает как его программировать эффективно и правильно. Данная статья является попыткой агрегирования существующих знаний по этому вопросу.

        Кроме того, можно рассматривать статью как продолжение замечательного исследования, публиковавшегося на Хабрахабре ранее.
        Читать дальше →
      • Исследуем производительность JOIN в MySQL

          Я думаю, ни для кого не секрет, что JOIN считается достаточно дорогой операцией, и многих начинающих программистов (которые юзают MySQL) любят запугивать, что JOIN — это плохо, и лучше всего обойтись без них, если есть возможность.

          Давайте исследуем этот вопрос более подробно и посмотрим, действительно ли JOIN — это плохо, и когда вообще стоит задумываться об этом.
          Читать дальше →
        • Солим пароли

            Данная заметка призвана пролить свет на использование соли при хешировании пароля. Если посмотреть в комментарии к этому топику habrahabr.ru/post/145642, то возникает подозрение, что некоторые люди неправильно понимают предназначение соли. На примерах постараюсь показать, для чего используется этот механизм. Всех заинтересовавшихся прошу под кат.
            Читать дальше →
          • Composer — менеджер зависимостей для PHP

              Composer (getcomposer.org) — это относительно новый и уже достаточно популярный менеджер зависимостей для PHP. Вы можете описать от каких библиотек зависит ваш проект и Composer установит нужные библиотеки за вас! Причём Composer — это не менеджер пакетов в классическом понимании. Да, он оперирует с сущностями, которые мы будем называть «пакетами» или библиотеками, но устанавливаются они внутрь каждого проекта отдельно, а не глобально (это одно из основных отличий от старого-доброго PEAR).

              Кратко, как это работает:
              1. У вас есть проект, который зависит от нескольких библиотек.
              2. Некоторые из этих библиотек зависят от других библиотек.
              3. Вы описываете в своём проекте те библиотеки, от которых непосредственно зависит ваш код.
              4. Composer находит нужные версии требуемых библиотек для всего проекта, скачивает их и устанавливает в папку вашего проекта.

              При создании Composer авторы черпали идеи и вдохновение из аналогичных проектов: npm для Node.js и Bundler для Ruby.

              Изначально он был спроектирован и разработан двумя людьми Nils Adermann и Jordi Boggiano, сейчас в проекте участвует более двадцати контрибьюторов, Проект написан на PHP 5.3, распространяется под лицензией MIT и доступен на github.

              Первые коммиты были сделаны апреле 2011 года и на сегодняшний день Composer находится в стадии «alpha3». Однако, он уже достаточно стабилен и используется многими популярными PHP проектами (например, Symfony 2). Список проектов использующих Composer можно посмотреть на сайте packagist.org — это официальный репозиторий Composer пакетов. Кстати, на недавней конференции Devconf 2012 разработчик фреймворка Yii в своём докладе упомянул, что Yii2 скорее всего тоже будет использовать Composer.

              В этой статье я кратко опишу основные возможности Composer и мы попробуем создать демонстрационный проект использующий Composer для загрузки необходимых библиотек. Все примеры будут доступны на github.com и bitbucket.org.

              Читать дальше →
            • Создание красивого образа .dmg для программы в [Mac] OS X

              • Tutorial
              Приветствую достопочтенных жителей Хабра!

              Сегодня я расскажу вам о том, как красиво преподнести пользователю инсталлятор своей программы. Наверняка каждый, кто пользуется не только программами из AppStore, сталкивался с красивыми образами диска .dmg, как вот у Адиума, к примеру. Такой образ представляет из себя, так сказать, интерактивный инсталлятор, в котором дана чёткая подсказка: перетащи значок вот сюда. Всё предельно понятно и просто.

              Конечно, для бывалого маковода и zip-архив сгодится, но ведь все любят, чтоб было красиво и удобно. Так что мы с вами, дорогие читатели, озаботимся сегодня созданием такого вот красивого образа диска для своей (ну или чужой) программы.

              Можно, конечно, проделать это всё вручную, но это не_наш_метод™, так что мы будем писать shell-скрипт для автоматизации сего процесса. Автоматизация нам так же пригодится в случае ввода в эксплуатацию билд-сервера, тогда этот сервер будет не только собирать программу из исходников, но и делать образ диска для дистрибьюции.

              Если Вам не нужно знать как работает такой скрипт, а нужен лишь инструмент — в конце имеется ссылка на весьма универсальный скрипт, готовый к применению.
              Приступим
            • Как я писал Футболоид под iOS

              • Tutorial
              Приветствую достопочтеннейших Хабралюдей!


              Не так давно, во время поиска новой работы, я получил очень интересное тестовое задание от ZeptoLab: написать за пару рабочих дней арканоид под iOS без использования сторонних библиотек типа Cocos2d/Box2d и т.п., то есть, на «чистом» OpenGL, что показалось мне весьма интересным. Кстати, об этом задании на Хабре уже писали, и даже устраивали разбор полётов. Итак, я бросил вызов судьбе и взялся за геймдев впервые после школьных упражнений с васиком в графическом режиме!

              Уточню, что некоторые знания OpenGL у меня уже были, но весьма и весьма поверхностные. Можно сказать, что их не было ну почти совсем, я просто знал, что такое вьюпорт и что бывают какие-то там спрайты, что существуют матрицы преобразования… Так что данная статья могла бы быть озаглавлена "Как написать простую игру под iOS на чистом OpenGL, не зная его", но это слишком уж длинно.

              В общем, если Вам интересно, как я это сделал за ~10 часов разработки и ~2 часа чтения, прошу под кат. (осторожно! много кода! мало картинок! ссылка на гитхаб и расслабляющее видео в конце!)
              Поехали
            • OPTIMIZE огромных таблиц в условиях ограниченных ресурсов или закат солнца вручную

              Предыстория


              Есть проект, в рамках которого приходится работать с большим объем данных. В частности есть одна денормализованная таблица, в которой хранятся все актуальные предложения существующих клиентов, а также устаревшие предложения, помеченные is_deleted = 1, ожидающие удаления.

              Количество записей в данной таблице до недавнего времени колебалось от 30 до 50 миллионов. Обычный OPTIMIZE даже при таких условиях не всегда срабатывал. Поэтому отец-основатель (Евгений Васильевич) придумал пересобирать таблицу таким образом: все актуальные (is_deleted = 0) копировались в таблицу с идентичной структурой с добавлением префикса по дате и времени, а когда копирование завершалось, оставалось только удалить исходную таблицу, а новую переименовать в исходную.

              Такой подход работал надежно, пока не потребовалось повысить скорость поиска предложений. И тут начинается наша небольшая история.
              Читать дальше →
            • GC и большой heap: друзья или враги?

                Споры о том, что лучше: ручное управление или автоматическое ведутся во многих областях науки и техники. Положиться на человека или отдаться на откуп бесстрастным механизмам и алгоритмам? Похоже, что в мире создания Enterprise решений чаша весов склонилась все-таки в сторону автоматического управления памятью, большей частью из-за того, что возиться с указателями, ручным управлением памятью и закрашивать седину после каждого бага, появившегося из-за «неправильного» компилятора С/C++ не хочется сейчас уже никому. Но до сих пор возникают на форумах топики, где не сдающиеся суровые приверженцы ручного управления памятью яростно и непримиримо отстаивают свои ретроградные взгляды в борьбе с прогрессивной частью человечества. Пусть их, оставим их в покое.

                Одной из наиболее часто использующихся платформ с механизмами автоматического управления памятью стала Java. Но, автоматическое управление памятью принесло не только комфорт в нелегкий труд программистов, но и свои недостатки, с которыми приходиться сталкиваться всё чаще и чаще. Современные многопользовательские приложения, способные обработать огромный поток транзакций, требуют значительных аппаратных ресурсов, размеры которых раньше было трудно даже вообразить. Однако, дело не в размерах этих ресурсов, дело в том, что сборщик мусора, существующий в большинстве современных JVM, не может работать эффективно с большими объемами памяти.
                Читать дальше →
              • Сергей Белоусов: Мы инвестируем в тех, кто хочет решить какую-то проблему, а не заработать деньги



                  Основатель венчурного фонда Runa Capital Сергей Белоусов дал эксклюзивное и почти часовое интервью телеканалу Дождь и рассказал о истории своего успеха и секретах венчурного бизнеса.
                  Читать дальше →
                • Как поймать «поток», и как сделать так, чтобы он не сорвался

                    Вступление


                    Я, как руководитель проектов, всё больше и больше замечаю, что эффективность работы команды (и каждого программиста в частности) – это ключевой фактор, определяющий успех проекта. При эффективной работе даже самые тяжёлые проекты со сжатыми сроками удаётся завершить успешно, а неэффективная способна «завалить» простейшие проекты с минимумом рисков. Поэтому, я хотел бы поделиться своими мыслями об одном из ключевых понятий – понятии «работы потоком».

                    Читать дальше →
                  • Автоматизация ИТ процессов в условиях низкой мотивации и/или квалификации исполнителей

                    Основная сфера моей работы на протяжении 16 лет – автоматизация деятельности предприятий. Поскольку начиналось все еще в 1996 году, в небольшом городе и в отсутствии литературы по программированию персональных компьютеров – то все делалось методом проб и ошибок или «методом научного тыка». Времена поменялись, появилось множество методик (сам ими не пользуюсь) по автоматизации, внедрению и поддержке ПО для автоматизации деятельности.
                    Читать дальше →
                  • Против лома нет приёма: OpenJDK hack vs. Class Encryption

                    Цель этой статьи предостеречь разработчиков от использования обфускаторов с функцией шифрования class-файлов для защиты своих приложений и от бессмысленной траты денег на них.
                    Вопросы защиты байт-кода от реверс-инжиниринга и обхода этой защиты подробно рассмотрены в фундаментальной работе Дмитрия Лескова — Protect Your Java Code — Through Obfuscators And Beyond.
                    Механизм шифрования class-файлов предполагает, что содержимое классов хранится в зашифрованном виде, а при старте приложения через специализированный СlassLoader или JVMTI-интерфейс, расшифрованный байт-код грузится в виртуальную машину Java.
                    Читать дальше →
                  • Почему весёлым быть выгоднее, чем умным: исследования EQ в IT-среде

                      Исследователь Дэвид Карузо и пара его коллег – это как раз те парни, из-за которых технические навыки и интеллект при приёме на работу в крупные IT-компании часто оцениваются заметно ниже, чем эмоциональный интеллект. То есть тот факты, что вы умный, означает гораздо меньше, чем то, что вы узнаёте вот этого парня с картинки:


                      Он пристально наблюдает за постом

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

                      Читать дальше →
                    • Ошибки трансферта технологий №4 / «Ошибки авторства» + АПДЕЙТ

                        Оказывая помощь в выводе разработок и бизнесов на внешние зарубежные рынки, приходится постоянно наблюдать одни и те же ошибки, и как следствие — неудачи и потери.
                        Читать дальше →
                      • Google Chrome хакеру не помощник

                          О том, как Chrome мешает мне искать XSS-уязвимости.
                          


                          Почему я ищу уязвимости?


                          Как и многие из вас, я делаю Code Review и первое, что ищу это конечно уязвимости. Когда уязвимость найдена в коде, хорошо бы проверить есть ли она на самом деле через браузер, потому что бывают «ложные тревоги». Это те случаи, когда данные уже приходят фильтрованными и XSS невозможен. Всегда полезно иметь возможность показать разработчику атаку в действии, потому что это хороший аргумент и помогает быстрее перейти к конструктивному решению проблемы, если есть сомнения, что уязвимость таки существует. Но проверку в браузере я делаю не часто — либо проблема очевидна прямо из кода, либо верят на слово. В общем искать уязвимости — это интересно.

                          Начало этой истории


                          Друг скинул ссылки на сайт, который ещё год назад имел XSS-уязвимость, о чем я писал владельцам ресурса. Стало интересно проверить снова. Проверил — XSS есть, но вот простейшего подтверждения выполнения JS я получить не смог!..



                          Я не ломаю сайты и не занимаюсь аудитом безопасности, поэтому возможно то, что я выяснил давно известно для специалистов, но для меня это было открытием.

                          Первые подозрения


                          Итак, стал проверять всевозможные варианты внедрения кода — но без результата. По ходу дела выяснил что и как фильтруется, какие есть проверки и прочее, но alert(1); упорно не выполнялся. По ходу дела нашелся ещё и XSRF — приятный бонус!
                          Далее я расскажу как я потреля кучу времени, но выяснил одну важную особенность браузера Chrome.