• А как же всё-таки работает многопоточность? Часть I: синхронизация

    • Tutorial
    картинка для привлечения внимания(пост из серии «я склонировал себе исходники hotspot, давайте посмотрим на них вместе»)
    Все, кто сталкивается с многопоточными проблемами (будь то производительность или непонятные гейзенбаги), неизбежно сталкиваются в процессе их решения с терминами вроде «inflation», «contention», «membar», «biased locking», «thread parking» и тому подобным. А вот все ли действительно знают, что за этими терминами скрывается? К сожалению, как показывает практика, не все.

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

    Перед прочтением глубокого описания полезно убедиться в том, что вы в достаточной мере разбираетесь в Java Memory Model. Изучить её можно, например, по слайдам Сергея Walrus Куксенко или по моему раннему топику. Также отличным материалом является вот эта презентация, начиная со слайда #38.
    Читать дальше. Много.
  • Как зарабатывать деньги на Android-играх

      Извиняюсь за заголовок в стиле «for Dummies», но это именно то, о чем я хочу сегодня поговорить — о монетизации. В двух словах о себе: занимаюсь инди-геймдевом с 2010 года, на данный момент у меня около десятка изданных игр на Play Store с общим количеством загрузок чуть-чуть не дотягивающим до 20 млн. Я не люблю распространяться о финансовой стороне, но понимаю что в теме о деньгах, без этого никак. На КДПВ вы можете видеть мою статистику за несколько последних дней (на момент написания статьи). В общем, бывало хуже, но бывало и лучше! Цифры не из тех, что поражают воображение, но, согласитесь, довольно неплохие. Особенно, учитывая что я всего лишь любитель, клепающий игры по вечерам.



      В этом топике, я попробую поделиться выводами и наработками, которые сделал за это время. На всякий случай disclaimer: мое мнение не претендует на истину и основано лишь на моем субъективном опыте. Я всегда готов поучиться у более опытных коллег, так что если я в чем-то ошибаюсь — прошу в комменты. И второе: это взгляд на геймдев с точки зрения бизнеса, если вы не разработчик, вам может не понравиться то что я скажу.
      Читать дальше →
    • По следам Spring Pet Clinic. Maven/ Spring Context/ Spring Test/ Spring ORM/ Spring Data JPA

      • Tutorial

      Здравствуйте!
      Spring MVC, согласно обзору инструментов и технологий Java за 2014 г. от RevbelLabs, является самым популярным веб фреймворком.
      Далее тот же обзор называет лидера ORM — Hibernate и лидера веб-контейнеров — Apache Tomcat. Добавим сюда самую используемую java script библиотеку jQuery, самый популярный css фреймворк Bootstrap, до сих пор самую популярную (несморя на наступление Gradle) инструмент сборки Maven, абсолютный лидер среди тестовый фреймворков JUnit и получим пример приложения на Spring от его создателей:
      Spring Pet Clinic (демо приложение).
      Кроме перечисленного, в этот достаточно несложный по функциональности проект влючены также Spring-Jdbc, Spring-ORM,
      Spring Data JPA,
      Hibernate Validator,
      SLF4J,
      Json Jackson,
      JSP,
      JSTL,
      WebJars,
      Dandelion DataTables,
      HSQLDB,
      Hamcrest,
      Mockito и десятки других зависимостей.
      Читать дальше →
      • +11
      • 40.5k
      • 9
    • Нисходящий парсер с операторным предшествованием

      • Translation
      Дуглас Крокфорд

      2007-02-21

      Введение


      В 1973 году на первом ежегодном симпозиуме «Принципы языков программирования» (Principles of Programming Languages Symposium) Вон Пратт представил статью «Нисходящий парсер с операторным предшествованием» (Top Down Operator Precedence). В этой статье Пратт описал метод синтаксического разбора, который объединяет лучшие стороны рекурсивного спуска и метода операторного предшествования Флойда. Метод Пратта очень похож на рекурсивный спуск, но требует меньше кода и работает гораздо быстрее. Пратт заявил, что его метод прост в освоении, реализации и использовании, необычайно эффективен и очень гибок. Благодаря своей динамичности он может использоваться для расширяемых языков.

      Но если метод действительно безупречен, почему же разработчики компиляторов по сей день его игнорируют? В своей статье Пратт предположил, что БНФ-грамматики и их многочисленные модификации, а также связанные с ними теоремы и автоматы заняли нишу раньше и теперь препятствуют развитию теории синтаксического анализа в других направлениях.

      Есть и другое объяснение: этот метод наиболее эффективен для динамических, функциональных языков программирования и использовать его в статическом, процедурном языке куда сложнее. Свою статью Пратт иллюстрирует на примере Lisp и играючи строит синтаксические деревья по потоку лексем. Но методы синтаксического разбора не особо ценятся в сообществе Lisp-программистов, которые проповедуют спартанский отказ от синтаксиса. С момента создания Lisp предпринималось немало попыток придать этому языку богатый синтаксис в стиле ALGOL: CGOL Пратта, Lisp-2, MLISP, Dylan, Interlisp's Clisp, оригинальные М-выражения Маккарти и так далее. Но все они провалились. Для Lisp-сообщества согласованность программ и данных оказалась важнее выразительного синтаксиса. С другой стороны, подавляющее большинство программистов любит синтаксис, поэтому сам Lisp так и не стал популярен. Методу Пратта нужен динамический язык, но сообщество динамических языков исторически не пользовалось синтаксисом, который так удобно реализуется методом Пратта.
      Читать дальше →
      • +26
      • 11.6k
      • 7
    • Монады с точки зрения теории категорий

      • Translation

      Введение

      Кажется, монады в программировании стали загадкой века. И для этого есть две причины:
      • недостаточное знание теории категорий;
      • многие авторы стараюстся не упоминать категории вообще.
      Это как говорить об электричестве не используя мат. анализ. Достаточно для замены предохранителя, не хватит, чтобы спроектировать усилитель.

      Мы начнём с простого введения в категории и функторы, затем дадим определение монады, приведём простые примеры монад в категориях и в конце приведём монадическую терминологию используемую в языках программирования.

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

      Содержание

      1. Категория
      2. Функтор
      3. Естественное преобразование
      4. Монада
      5. Монады исключения и состояния
      6. Монады в программировании
      7. Ссылки
      Читать дальше →
    • Чему я научился, собирая миллион долларов на стартап без бизнес-плана и финансовых прогнозов (потягивая при этом пивко)

      • Translation
      От переводчика. Автор этой публикации — Роберт Мэй (Robert May), основатель компании Backupify, которая позволяет осуществлять резервирование, архивацию и экспорт информации, находящейся в различных онлайн хранилищах.


      Как и многие из вас, я немало лет читал блоги про стартапы и венчуры. Я перечитал уйму постов о том, что надо писать в своих бизнес-планах и как делать финансовые прогнозы. Но в итоге это неизменно меня утомляло. Я всегда был человеком действия, а не планирования; я проявлял изобретательность, а не искал деньги. При мысли о трате бесценного рабочего времени на корпение над бизнес-планом меня изрядно мутило.

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

        Сразу раскрою мысль, вынесенную в заголовок. Использование потоков (также именуемых нити, треды, англ. threads) и средств прямой манипуляции ими (создание, уничтожение, синхронизация) для написания параллельных приложений оказывает столь же пагубное влияние на сложность алгоритмов, качество кода и скорость его отладки, какое вносило использование оператора Goto в последовательных программах.
        Как когда-то программисты отказались от неструктурированных переходов, нам необходимо отказаться от прямого использования потоков сейчас и в будущем. И так же, как каждый из нас использует структурные блоки вместо Goto, вместо потоков должны использоваться структуры, построенные поверх них. Благо, все инструменты для этого появились во вполне традиционных языках.
        Автор фото: Rainer Zenz
        Читать дальше →
      • ZooKeeper в качестве системы гарантированной доставки для Яндекс.Почты

          Ежедневно Яндекс обрабатывает входящий поток из миллионов писем и файлов. Их количество постоянно и непрерывно увеличивается. При этом уровень входящей нагрузки неравномерный, он сильно зависит от времени суток и дня недели. Кроме того, периодически случаются ботнет-атаки.

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

          image

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

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

          В этих случаях нам помогают очереди. Они позволяют сгладить всплески входной нагрузки: выиграть время и дождаться, когда кластер обработки писем станет доступен.
          Читать дальше →
        • Заовнил, вонзился, запилил: словарь IT-шника

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

            Про код и изменения





            Код добра – программный код, очевидно содержащий непоправимые улучшения.
            Котятоемкий код — очень некрасивое техническое решение. Выражение обязано своим происхождением предположению, что каждый раз, когда программист пишет строчку некрасивого кода, бог убивает котенка.
            Непоправимо улучшить – запилить годное, но не до конца проверенное изменение функционала. Синоним — необратимо улучшить.
            Мясной коммит (ковровый коммит) – правка, судя по количеству и характеру изменений, наверняка содержащая непоправимые улучшения.
            Тупач – очень срочная задача, результаты работ по которой должны попасть в бранч для выкатываемой версии. Образовано от to patch.
            Минорный тупач – задача горит – сильнее некуда, но уж очень мелкая.
            Глубокий ToDo Later — (отправить задачу в глубокий тудулейтер) статус задачи в таск-трекере отложена на неопределенный срок.
            Подпереть костылями – реализовать функциональность за счет непредусмотренного временного решения.
            Шрапнельные правки – огромное количество мелких правок по всему проекту, которые очень сложно оттестировать.
            Скриптюня — очень классный скрипт, экономит кучу времени, практически лучший друг оператора.
            Читать дальше →
          • Лекториум запускает направление MOOC

              Друзья! Мы шли к этому чертовски долгие 5 лет. ЛЭТИ, ИТМО, Политех и ЕУСПб запускают свои первые онлайн-курсы на Лекториуме. Итак, мы открываем регистрацию на следующие курсы:

              Инженерное дело


              Санкт-Петербургский государственный политехнический университет (СПбГПУ)
              Автор: Игорь Асонов iasonov



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

              • Translation
              Длинный материал. Время чтения – около 40 минут.

              image

              Доктор Ричард Хэмминг, профессор морской школы Монтерея в штате Калифорния и отставной учёный Bell Labs, прочёл 7 марта 1986 года очень интересную и стимулирующую лекцию «Вы и ваши исследования» переполненной аудитории примерно из 200 сотрудников и гостей Bellcore на семинаре в серии коллоквиумов в Bell Communications Research. Эта лекция описывает наблюдения Хэмминга в части вопроса «Почему так мало учёных делают значительный вклад в науку и так многие оказываются в долгосрочной перспективе забыты?». В течение своей более чем сорокалетней карьеры, тридцать лет которой прошли в Bell Laboratories, он сделал ряд прямых наблюдений, задавал учёным очень острые вопросы о том, что, как, откуда, почему они делали и что они делали, изучал жизни великих учёных и великие достижения, и вёл интроспекцию и изучал теории креативности. Эта лекция о том, что он узнал о свойствах отдельных учёных, их способностях, чертах, привычках работы, мироощущении и философии.
              Читать дальше →