Пользователь
Pull request'ы на GitHub или Как мне внести изменения в чужой проект
Итак, что же такое «запрос на включение (сделанных вами изменений)» (именно так я перевёл pull request)? В официальной документации гитхаба говорится следующее:
Pull request'ы позволяют вам рассказать другим о тех изменениях, которые вы разместили в своём GitHub-репозитории. Как только pull request отправлен, заинтересованные стороны рассматривают ваши изменения, обсуждают возможные правки или даже добавляют дополняющие коммиты, если нужно.
Говоря своим языком: Посылая pull request, вы говорите автору изначального репозитория (и всем заинтересованным лицам): «Смотрите, что я сделал, не хотите ли принять мои изменения и влить их в проект?»
Удачная модель ветвления для Git
В этой статье я представляю модель разработки, которую использую для всех моих проектов (как рабочих, так и частных) уже в течение года, и которая показала себя с хорошей стороны. Я давно собирался написать о ней, но до сих пор не находил свободного времени. Не буду рассказывать обо всех деталях проекта, коснусь лишь стратегии ветвления и управления релизами.

В качестве инструмента управления версиями всего исходного кода она использует Git.
Про Git на пальцах (для переходящих с SVN)
Делиться не всегда полезно: оптимизируем работу с кэш-памятью

Мы все «немного читали» об оптимизации работы с памятью, и у нас отложилось, что полезно, когда «кэш остается горячим», то есть данные, к которым часто обращаются потоки, должны быть компактными и находиться в ближайшем к процессорному ядру кэше. Все так, но когда дело доходит до того, чтобы делиться доступом, потоки становятся злейшими врагами [производительности], а кэш не просто горячий, он аж «горит адским огнем» – такая во круг него разворачивается борьба.
Ниже мы рассмотрим простой, но показательный случай возникновения проблем производительности многопоточных программ, а потом я дам несколько общих рекомендаций, как избежать проблемы потери эффективности вычислений из-за разделения кэша между потоками.
DSL для программирования процессов в баг-трекере

Не бывает программного обеспечения без ошибок. Для учета ошибок в процессе разработки, как правило, используются баг-трекеры — программы, которые позволяют пользователям и тестировщикам сообщать о найденных ошибках, менеджерам — определять порядок исправления этих ошибок, а разработчикам — фиксировать факт исправления ошибок. Баг-трекер часто является основным средством взаимодействия команды разработки и пользователей, поэтому эффективность работы с ним так важна. В настоящее время выбор баг-трекеров достаточно велик. Среди них есть как бесплатные (Bugzilla, Mantis, Trac, Redmine), так и коммерческие системы (Jira, Fogbugz).
В нашей компании (JetBrains) долгое время использовалась Jira. Но в какой-то момент проблемы с производительностью и юзабилити этой системы заставили нас разработать свой собственный баг-трекер — YouTrack, ориентированный, как и другие продукты нашей компании, прежде всего на продуктивность команды. О системе YouTrack уже писали на Хабре два года назад, незадолго до выхода первой версии. С тех пор было уже три релиза, и теперь YouTrack для небольших команд стал бесплатным.
Способ работы с баг-трекером сильно зависит от процессов, принятых в той или иной компании. Поэтому создать баг-трекер, который подошел бы всем «прямо из коробки», невозможно. Вместо этого необходимо было предоставить пользователям возможность удобной настройки системы под свои процессы.
Language Oriented Programming (LOP) в действии

В продолжении предыдущей публикации по теме Domain Driven Design, где Николай Гребнёв последовательно свёл тему проектирования при помощи DDD к необходимости использования языка предметной области, — в данной публикации будет обсуждаться практика проектирования и разработки как самих языков, так и программирование на них (опыт компании JetBrains).
Доклад smax Максима Мазина с прошлогодней конференции архитекторов ПО Application Developers Days
Видео доклада:
Скачать
ftp.linux.kiev.ua/pub/conference/peers/addconf/2011/1a1-language-oriented-programming-mazin.avs.avi
Презентация
docs.google.com/present/view?id=dccwwvbq_729dxjj82gc
Текстовка доклада (выполнена Belonesox)
Расставим точки над структурами C/C++

Ностальгия: роемся у «Танчиков» под капотом

Я отношу себя к людям именно таким, и мой интерес к старым играм пошёл в сторону реверс-инжиниринга, что и привело меня в IT-сферу, где я и осел с концами.
Я хочу рассказать вам о том, что же под капотом у железных монстров из знаменитой игры Battle City (в простонародье «Танчики») с не менее знаменитой приставки Nintendo Entertainment System (сокращённо NES, в России более известен её китайский клон «Dendy»). Мне в своё время эта информация показалась довольно любопытной — надеюсь, такой же она покажется и вам.
Размеры массивов в Java
Оптимизируя вычислительный алгоритм по памяти, я наткнулся на то, что при определённых (вполне разумных) входных параметрах создаётся массив float[500][14761][2]. Сколько он может занимать в памяти (на HotSpot 1.6.0_26 32bit, если кому интересно)? Я примерно прикинул, что
TodoMVC — «Hello, world» на стероидах

Приложение TodoMVC — это список дел. Дела можно добавлять, помечать как выполненные и удалять. Список должен сохраняться в локальном хранилище браузера. Приложение должно по возможности использовать стандартный шаблон HTML и CSS. Вот подробная спецификация приложения.
Читаем QR код

В статье рассмотрены базовые особенности QR кодов и методика дешифрирования информации без использования вычислительных машин.
Иллюстраций: 14, символов: 8 510.
Связь на Марсе

12 апреля отмечается международный день полёта человека в космос. Более полувека прошло с того момента, когда Человечество сделало первый шаг в его освоение. Череда блестящих технических и научных побед сделала нас ближе к звёздам. Жажда открытий тянет постигать новые таинственные миры. Марс, красная «звезда» на небосводе, с древних времён притягивал к себе внимание людей. Невообразимо похожий на Землю, но всё-таки чужой мир до сих пор не покидает сознание многих исследователей. Вероятно в скором времени мы можем стать свидетелями тому, как на Марсе станут появляться небольшие исследовательские колонии людей. Инженерам предстоит столкнуться с многими проблемами. На Хабре присутствует большое количество специалистов разных областей, каждый обладает широким кругозором и определёнными знаниями. Предлагаю воспользоваться коллективным разумом и в этой статье поразмышлять о том, как бы выглядела связь на Марсе, если бы там существовали колонии людей.
В данной статье-дискуссии рассматривается гипотетическая техническая задача организации связи на Марсе между исследовательскими поселениями людей. Для участия читателей разного уровня подготовки в статье приводятся краткие описания некоторых базовых технических терминов, основное внимание уделено принципам открытой оптической связи с помощью лазеров, а также некоторым вопросам проектирования стационарных спутников связи.
Иллюстраций: 21, символов: 45 081.
Почему я ушел из цюрихского Гугла
Этот вопрос я часто слышу от разных людей, и сейчас попробую на него ответить.
Наверное ни для кого уже не секрет, но все-таки: как работает Гугл? Они набирают лучших инженеров, платят им достаточно большую (даже для Швейцарии) зарплату и создают удивительные условия для работы: бесплатная еда, массаж в офисе, фантасмагорические зоны отдыха, детская горка спускающаяся прямо в столовую и т.д. Это очень круто, об этом любят писать журналисты, но только это не имеет значения.
Мои первые шаги в SWT: Простенький блокнот со вкладками
Из данной статьи Вы узнаете:
- Какова мотивация использовать SWT в отличии от основного конкурента — Swing
- Основные трудности с которыми я столкнулся при разработке простенького блокнота на связке Java + SWT и Немного кода
- Каким образом упаковать и распространить свое приложение для нескольких платформ
Если Вас заинтересовало — прошу под кат.
Размер Java объектов. Используем полученные знания
Денормализация модели
Итак, давайте рассмотрим следующий код:
class Cursor {
String icon;
Position pos;
Cursor(String icon, int x, int y) {
this.icon = icon;
this.pos = new Position(x, y);
}
}
class Position {
int x;
int y;
Position(int x, int y) {
this.x = x;
this.y = y;
}
}
А теперь проведем денормализацию:
class Cursor2 {
String icon;
int x;
int y;
Cursor2(String icon, int x, int y) {
this.icon = icon;
this.x = x;
this.y = y;
}
}
Казалось бы — избавились от композиции и все. Но нет. Объект класса Cursor2 потребляет приблизительно на 30% меньше памяти чем объект класса Cursor (по сути Cursor + Position). Такое вот не очевидное следствие декомпозиции. За счет ссылки и заголовка лишнего объекта. Возможно это кажется не важным и смешным, но только до тех пор, пока объектов у Вас мало, а когда счет идет на миллионы ситуация кардинально меняется. Это не призыв к созданию огромных классов по 100 полей. Ни в коем случаем. Это может пригодится исключительно в случае, когда Вы вплотную подошли к верхней границе Вашей оперативной памяти и в памяти у Вас много однотипных объектов.
Multithreading in practice
Need to create java CLI programm that searchs for specific files matched some pattern. Need to use multi-threading approach without using util.concurrent package and to provide good performance on parallel controllers.
Перевод
Нужно написать консольную программу, которая ищет файлы по какому-то паттерну. Программа должна быть многопоточная, но нельзя использовать пакет util.concurrent. Требуется добиться максимальной производительности.
В общем идея в принципе была не сложная. Т.к. по условию нельзя использовать util.concurrent, то надо реализовать свой пул потоков, плюс написать какие-то таски, которые в этом пуле потоков будут крутиться.
Так же я не был уверен в том, что при многопоточном использовании IO будет увеличение производительности.
Тестирование в Java. Spock Framework

В предыдущих статьях на примерах JUnit и TestNG я упоминал о test-driven development(TDD) и data-driven testing(DDT). Но есть еще один активно набирающий популярность подход, behaviour-driven development(BDD). Это такое развитие TDD техники, при котором на тест смотрят не как на тестирование каких-то компонентов системы, а как на требования к функционалу. Если TDD оперирует такими понятиями, как тест или метод, то для BDD это спецификация и требования. Про эту технику уже говорили на хабре ранее:
- Эволюция юнит-теста,
- Экстремальное программирование, знакомство с Behavior Driven Development и RSpec
Этот подход применим используя и JUnit, и TestNG. Но есть и другие инструменты заточенные именно под BDD. В этой статье я расскажу про такой фреймворк. Называется он Spock Framework и сочетает в себе не только принципы BDD, но и достоинства Groovy. Да-да, именно Groovy. И хотя используется Groovy, используется он и для тестирования Java кода. Примерами использования могут служить Spring, Grails, Tapestry5. Интересно? Тогда читаем дальше.
Оптимизации в компиляторах. Часть 1
Я попытаюсь выстроить оптимизации в порядке возрастания «сложности понимания», но это исключительно субъективно.
И ещё: некоторые названия и термины не являются устоявшимися и их используют «кто-как», поэтому я буду приводить несколько вариантов, но настоятельно рекомендую использовать именно англоязычные термины.
Постигаем Git
Если вы не понимаете, что побудило сделать git именно таким, то вас ждут страдания. Используя множество флагов (--flag), вы сможете заставить git работать так, как по вашему мнению он должен работать, вместо того, чтобы работать так, как git того хочет. Это как забивать гвозди отверткой. Работа делается, но хуже, медленнее, да и отвертка портится.
Information
- Rating
- Does not participate
- Location
- San Francisco, California, США
- Date of birth
- Registered
- Activity