Перевод документации по Doctrine

Всем привет. Я принял решение продолжить перевод документации по Doctrine. В скором времени ожидайте новую пачку глав. Кроме того, перевод будет обновлен до актуальной версии Doctrine.

Падение Hadoop map/reduce задач с Java Heap Space

Бывает, Map-Reduce программы в Hadoop отлично работают при локально отладке в автономном режиме, тестировании и даже прогоне в pre-Production среде. Но стоит запустить Hadoop в распределенном режиме на реальном наборе данных в продакшне, и практически сразу имеем вылет с ошибкой

java.lang.OutOfMemoryError: Java heap space
at java.util.HashMap.addEntry(HashMap.java:753)
at java.util.HashMap.put(HashMap.java:385)

Причины конечно же кроются в коде, пару раз уже приходилось править такие проблемы. Решать их нужно комплексно. Выявлять даже простые проблемы с утечкой памяти всегда непросто. Как увеличить выделяемую память под Hadoop программу я расскажу ниже.

Проследовать внутрь

Особенность использования IntegerType в Cassandra и ORM Hector

Если вы пишите в кассандру через Hector, например с помощью его ORM, все колонки, имеющие тип Long приводятся к байтовому массиву размером 8 байт, а Integer — к массиву размером 4 байта. Когда ORM восстанавливает модели объектов из данных, хранящихся в кассандре, он разбирает байтовые буферы колонок типа IntegerType, предполагая, что для каждого из значений выделено ровно 4 байта.

Все это прекрасно работает, пока вы не начнете обновлять данные через cassandra-cli.

Проследовать внутрь

Мигрируем на Ruby 2.0 и Rails 4 в Windows

Пришла пора сделать это. Ruby уже стабилен, Rails 4 в первой бете. Проект, который я сейчас делаю как раз на стадии разработки, к продакшну рельсы уже уйдут на золото, так что я убиваю сразу двух зайцев.

Не буду ходить вокруг да около, а просто опишу алгоритм, который я использовал. Процедура будет описана применительно к Windows, а конкретно Windows 7 x64, в Linux много проблем отпадет само собой.
Проследовать внутрь

Сериализация объектов в Java

Часто приходится сталкиваться с сериализацией объектов. Когда просто нужно превратить объект в поток байтов, делается это довольно тривиально. На примере покажу как это выглядит.

Проследовать внутрь

Doctrine 2: Неполные объекты

Переведены глава Partial Objects (неполные объекты). С помощью них можно запросить из базы только часть объекта. В общем случае, они являются обрезанными, применяются только для целей оптимизации и работать с ними надо осторожно.

Doctrine 2: отслеживание изменений

У меня для вас две новости: одна хорошая, вторая плохая. Первое: готов перевод 16 главы руководства по Doctrine 2: Отслеживание изменений. В главе описаны три политики слежения: Implicit, Explicit и Notify. Понять их не составит труда.

Теперь второе: начиная с этого момента я начинаю брать деньги за перевод каждой главы, так что готовьте лаве. Да шутка, поймал я вас. Нет никакой плохой новости. В общем, на сайте Doctrine был закрыт доступ к старой версии документации и теперь все главы будут делаться по оригиналам доков от версии 2.2. Напомню, текущая версия перевода соответствует версии Doctrine 2.1. После того как перевод будет завершен я приведу все предыдущие главы к актуальному состоянию, если конечно к этому моменту не выйдет дока под Doctrine 2.3.

И еще одно: если вы увидели неточности в переводе или вовсе залепу, пишите в комментариях.

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

Doctrine 2: Нативный SQL

Готов перевод главы Нативный SQL. В главе раскрыта, на мой взгляд, одна из сильнейших сторон Doctrine — составление низкоуровневых запросов на чистом SQL и последующее преобразование  результата их работы в ORM объекты. Это дает поистине бесконечные возможности в области оптимизации под конкретные базы данных. Вы вертите запросами как хотите и при этом не теряете высокоуровневую абстракцию. Вначале глава может показаться сложной для понимания, но во второй части приведены примеры, которые раставят все на свои места.

Оставайтесь голодными, оставайтесь безрассудными

Было у меня пару десятков фотографий Стива Джобса, не помню откуда (впрочем помню, но не скажу), решил я было дело накатать пост с пафосным описанием, вложив в него небольшую галерею. Так он и провисел полгода в черновиках. Выложука я его, описание лишь сотру, а фотки оставлю. Все под катом: небольшую подборка фотографий Стива Джобса, которая показалась мне интересной.

А кто не читал его биографию — прочтите.

Стив Джобс с первым макинтошем

Заходи, если безлимит

Удаленное выполнение кода в Ruby on Rails

На прошлой неделе в Ruby on Rails была найдена критическая уязвимость, которой подвержены все версии рельсов, кроме разве что самых старых вроде версии 1.

Злоумышленник может прислать специально сформированный XML-запрос на сервер, который приведет к исполнению произвольного кода. XML-запрос должен содержать встроенный YAML-объект, он будет десериализован и загружен.
Подробности и советы как защититься изложены внутри

Doctrine 2. Создание запросов с помощью QueryBuilder

Я перевел 14 главу доков по Doctrine — Создание запросов с помощью QueryBuilder.

В следующем году я планирую завершить оставшиеся главы документации и сделать это максимально быстро.

А пока спасибо что оставались с нами. Бложек Одизапц уходит на отдых.

Всех с наступающим, и да пребудет с вами сила.

Установка системы отображения графиков Graphite

Graphite — это система отображения и агрегации графиков любых данных в реальном времени. Написана на Python, фронтенд выполнен на основе ExtJS.

Я не буду рассматривать настройку системы подачи входных данных для графита, потому что она у каждого своя. В качестве промежуточного звена между Graphite’ом и бизнес-логикой приложения может выступать тот же StatsD.

Этот краткий мануал будет полезен для тех, кто никогда не устанавливал Graphite и не хочет лезть во все премудрости Пайтона.

Немного черной магии внутри

Неизвестное интервью Стива Джобса

Это интервью одно из самых интересных. Оно состоялось в 1995 году когда Стив Джобс покинул Apple и основал компанию Next. Интервью нигде ранее не публиковалось.

Часть 1:

Часть 2:

Ruby. Конвертируй это

Пара сниппетов на тему конвертации форматов XML, JSON, YAML, Hash и Nokogiri на руби.

За основу возьмем XML-документ, сгенерированный при помощью Nokogiri. Вот он:

require ‘rubygems’

require ‘nokogiri’

builder = Nokogiri::XML::Builder.new do |xml|
    xml.root {
      xml.crackers {
        xml.person{
          xml.id10
          xml.name “Ms rem”
        }
      }
    }
  end

my_xml = builder.to_xml

Проследовать внутрь

jQuery 1.8. Что нового?

9 августа вышла новая версия jQuery. В предверии выхода версии 1.9 ребята не стали вводить концептуальные изменения, например, убирать совместимость с IE 6/7/8. Но тем не менее есть на что посмотреть.
Проследовать внутрь

Doctrine 2. События

Готов перевод 11 главы руководства по ORM Doctrine — События.

В Доктрине во всей красе работает паттерн Observer, это позволяет строить различную логику подписки на события.

Основная мысль, которую нужно вынести после ее прочтения, это то, что существует два принципиально разных типа событий: Event listeners и Lifecycle callbacks. Первые более навороченные, зато вторые просты для понимания.

Doctrine 2. Транзакции и параллелизм

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

Глава может показаться несколько сложной для понимания, если раньше вы с транзакциями не работали. В главе также описаны режимы блокировок, поддерживаемых Doctrine.

Дальнейшие переводы я буду стараться вести в штатном режиме.