Показаны сообщения с ярлыком java. Показать все сообщения
Показаны сообщения с ярлыком java. Показать все сообщения

12 апреля 2016

Напочитать: К Дню Космонавтики


1. JUnit-QuickCheck и Property-based testing - очередной buzzword или что-то выйдет?
2. EqualsVerifier - для тех, кто хоть раз  налетал с equals в Java
3. tempus-fugit для тестирования многопоточного кода в Java
4. DepAn от Google - инструмент для анализа и манипулирования зависимостями в проекте.
5. Jinq - это типа LINQ для Java.
6. JGiven - очередной BDD инструмент на Java
7. testcontainers - если лень самому стартовать контейнеры для тестов, в том числе Selenium
8. SonarCube+Gradle+Docker - как все это вместе сделать написано здесь.
9. Мистический паттерн Screenplay и как он натягивается на Serenity. Естественно от создателей Serenity.
10. Native Memory Tracker и как docker c java дружит. Или не дружит.
11. Caffeine - модные кэши, Guava style
12. Типа быстрый сканеер classpath - тут
13. Peter Lawrey о библиотеках для High Performance кода
14. Очень странная штука для всяких извратов в тестировании.

Ну и что бы хоть что-то про космонавтику - 10 заповедей NASA для написания кода.

Ну и да - с праздником всех причастных и имсочувствующих.

19 октября 2015

Мероприятия: Joker Conference 2015



В этом году, после настоятельных  приглашений Алексея Федорова в прошлом году, решил посетить Joker.

Место

Санкт-Петербург,Park Inn Пулковская
Огромная гостиница, и если сравнивать ее с организмом человека, то конференц-зал находится в прямой кишке.
Сама по себе площадка неплохая, все что нужно - все есть.

Организация.

Тут что-то говорить бессмысленно.
Чай-кофе, печеньки, обед, вентиляция, навигация  - все хорошо.
Ребята из JUG.ru делают все хорошо и не в первый раз. (Можете считать это неприкрытой рекламой в моем бложике, труд  этих людей мне рекламировать не стыдно)
И другим у них есть чему поучится.


Доклады


Martin Thompson - Practicing at the Cutting Edge
Второе выступление Мартина Thompson, которое я слушал с великим удовольствием. Мартин один из немногих  англоговорящих спикеров которых можно слушать долго и с удовольствием особенно если он не уходит в дебри.
Олег Анастасьев - просто потому что больше не понял куда идти.
Nicolas Fränkel,Evgeny Mandrikov Improve Testing Code Quality with Mutation Testing - хороший рассказ про PIT - инструмент мутационного тестирования с раскрытием многих граблей. Правда аудитория пришла подготовленная поэтому пришлось раскрывать граблей больше, чем предполагалось :).
Алексей Рагозин - отличный рассказ о том что нужно знать при работе с сетью. Я б хотел это все знать раньше :).
Martin Thompson Adventures with concurrent programming in Java: A quest for predictable latency - вот тут слюна текла на пол.  Мартин нырнул в такую жесть, что треть аудитории перестало воспринимать происходящее.
Josh Long - Бодро, весело, но на второй день было лучше.


День  второй


Кирилл Толкачев,Александр Тарасов про дикость микросервисов - бодро, весело, с грувями и spring boot, не хватало только хипстерских бород и смузи. Но по делу и классно.
Ted Neward про что такое Amazon - отличный crash course про то, что есть Amazon. Видимо Amazon думает открываться в России или рядом и начал щупать рынок.
Nicolas Frankel про Spring Boot и DevOps - действительно больше про DevOps. Попробую кое-что у нас прикрутить.
Josh Long с мегапродажный спичем про Spring Boot - неподготовленные умы после этого выступления пойдут и наклепают это в прод. Джош очень сильно подготовился потому что количество шуток на 50 минут написания кода было запредельным. Очень крутой спике.

Ted Neward, Iconoclasm - закрывающий keynote. Очень глубоко, очень круто.

Недоумение. 


Вот вам наверное в почтовый ящик  - я имею ввиду железный, который в подъезде вашего дома или на заборе перед домом - периодически закидывают всякий бумажный спам. Иногда там есть что-то полезное, например буклетик от новой пиццерии. Все остальное - хер знает что. У меня уже давно есть вопрос к тем людям, которые идут на такие отчаянные шаги как засылание такого спама в почтовые ящики  - вы с этого реально получаете хоть что-то ? Кто-то реально к вам приходит через это ?? Ну кроме пиццерий, конечно.

И вот после Joker-а появилась вторая ипостась этого вопроса. Люди, которые в больших IT-компаниях принимают решения поставить стенд на конференции - вы реально задумываетесь что вы хотите получить с этой конференции? Вы реально меряете конверсию ? Хрен с ним, забудем про конверсию. Вы не хотите никого массово нанимать, вам нужно чтобы в профессиональной среде о вашей компании думали хорошо. Вы для этого ставите стенд, на котором с помощью пары-тройки каторжанок из HR, раздаете ручки и блокноты, магнитики, иногда конфеты? Поставьте свой биллборд и play-station с Mortal Kombat - так будет лучше всем, даже вам. Или крутую кофе-машину.

Итог

Конференция отличная.

13 августа 2015

Quality Assurance Tools: Паранойя в квадрате или как проверить собственный код на вшивость.

Преамбула

В пылу работы, особенно если могут отвлекать, люди могут забывать очевидные вещи.
Не потому что они плохие или некомпетентные, не потому что мало времени,а просто потому что вот забыли и всего делов.
Особенно больно становится когда твой код на Java, а люди забыли про определение методов equals и hashCode у объектов представляющих собой сущности в домене. toString конечно еще, но с ним чуть больше нюансов - современные IDE предоставляют хорошую интроспекцию объектов в дебаге, поэтому найти то, что toString продолбан чаще всего получается уже в логах с прода, где он не дает никакой информации.

А вот с equals и hashCode все веселее и проще - они иногда приводят к дням веселой отладки в попытках понять что же происходит.

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


И я решил что нужно попробовать сделать хоть какой-то инструмент для борьбы с этой проблемой.


Почему не статический анализ кода? 

Инструмент для обнаружения проблемы можно построить и не с нуля, используя средства статического анализа кода типа findbugz, checkstyle, pmd.
Все они предоставляют возможность расширения набора правил анализа, и все они open-source.
И все они обладают избыточным набором правил анализа на все случаи жизни, который можно и приходится настраивать.
И ни один из указанных инструментов не может проверить нужные мне условия прямо из коробки.
И самое главное - редко когда и мало кто ставит этот статический анализ кода в таком месте своего жизненного цикла разработки так чтобы он прерывал сборку проекта.
Мне же хотелось иметь средство, которое по умолчанию будет останавливать сборку проекта.

Почему именно так ? 

Мне совершенно не хотелось строить свое решение на построении AST, потому что это сравнительно дорого, так уже делают статические анализаторы кода, и если уж честно хотелось попробовать чего-то нового.
Для решения своей проблемы я решил попробовать использовать инструменты языка , а конкретнее возможности по процессингу аннотаций.
Вообще толковых материалов  о том что такое процессинг аннотаций и как им пользоваться в интернетах не так уж и много.

Идея решения проста - в процессе написания кода нужно поставить одну аннотацию, остальное компилятор при помощи процессоров аннотаций сделает сам.
Естественно процессор аннотации нужно написать, естественно аннотацию нужно повесить на класс, и если этого не сделать, то никакой процессинг не сработает.
Но аннотацию нужно поставить одну, а методов про которые нужно не забыть  - три, так что уже выигрываем.
Аннотаций я пока реализовал две:
@Pojo - проверяет что у класса определены  equals, hashCode, toString
@Helper - проверяет что класс соотвествует идее хэлпера (все методы статические, конструктор приватный, все поля константы, никакого состояния иметь не должен).

В натуре

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

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

Для тех кто не поленится сходить и почитать код сразу предупреждение - там есть говнокод, особенно в местах  по анализу и сравнению типов возвращаемых методами.  Сделано отвратительно, самому не нравится, но пока живет.  Как исправлю - обязательно выложу.


Мысли по ходу.

Мыслей в связи с этим вот pet project у меня накопилось больше, чем сам проект.

  1. Казалось бы фундаментальнейшая и низкоуровнвая вещь, такая как процессор аннотаций, должна быть вылизана, задокументирована и спроектирована очень хорошо. Но вот с документацией вообще швах.
  2. Информации и примеров того как это делать правильно в интернете не очень много. Свою подборку ссылок приведу в конце.
  3. Я не нашел ни одного вменяемого метода для тестирования этих процессоров аннотаций, кроме как создать отдельный проект в котором эти самые аннотации будут развешаны на классах дающих нужные кейсы.(смотри апдейт ниже) В мыслях крутиться использования инфраструктуры для тестирования плагинов к maven, но этот ад мы прибережем для следующей серии нашей мыльной оперы.
  4. Если отбросить лично мои заморочки и скомбинировать подход с построением AST, то анализатор может получится весьма и весьма мощный.
  5. Сразу нужно думать про нормальный репортинг, посколько API процессора аннотаций ничего кроме как минималистичного вывода в консоль делать не дает. То есть проанализировать код, найти плохое место в нем вы конечно можете но вот отрапортовать об этом будет сложно. Нужно писать что-то сбоку.
  6. Чтобы вся эта радость нормально работала библиотеку с аннотациями и процессорами нужно подключать к мавену в scope = provided. Так и только так!!! Иначе зависимость на аннотации и анализатор полезет дальше транзитивно, а мы помним что это всего лишь инструмент, не более того.


Ссылки

  1. Пост на хабре вдохновивший меня сделать это.
  2. Туториал по похожему кейсу.
  3. Фундаментальная статей про процессинг аннотаций в Java. Все разжевано и разложено по полочкам.
  4. Еще один хороший туториал в трех частяхпостах (раз, два, три)


UPD 22.11.2016 В процессе археологических раскопок кургана Гитхаб наша экспедиция нашла древний артефакт для тестирования кода процессоров. Подключили, попробовали - работает!

23 июля 2015

Напочитать: Околосервисный выпуск

1. Gradle отрелизил версию 2.5. Две основные плюшки в релизе - непрерывная сборка при изменении исходников и правила замены исходников чтобы не компилить все и каждый раз.Ну и отличная презенташка на тему того что Gradle умеет.
2. Хорошая статья про монады. Оказывается я давно ими пользуюсь.
3. Amazon выпускает свою имплементацию TLS  - s2n.
4. Отличный маленький и жутко полезный инструмент от Алексея Рагозина - jvm-tools.
5. Интересная оберточка для транслирования исключений - ET (github).
6. Может быть в Java 9 выпилят Unsafe. Непонятно зачем, но понятно что из этого будет.Тут вот контрнаброс про это.
7. Отличное выступление Чеда Фаулера про то как они Wunderlist на микросервисы распиливали.


8. Случилось что-то страшное или Скайп начал поворачиваться лицом к людям. Вот даже релизят АПИ.
9. Maven Best Practices.
10. Отличное  live-demo того что можно сделать с помощью Spring Boot (это если кто не знает платформочка для создания микросервисов)

11. Транзакции в распределенной (как правильно - распределенная или распердЮленная? :)) системе - ну может быть. Паттерн Saga под капотом (еще тут от MS про него же). 

27 мая 2015

Напочитать: Test... Test me harder!!!




 Уже на этой неделе в Минске состоится SQADays. Ну а пока не наступила - выпуск с сильными уклоном в тестирование.

1. Автоматизированное тестирование JavaFX приложений - с примерами и картинками.
2. Очень многие сейчас увлекаются всякими Chef-ами, Puppet-ами и прочими Ansible-ами. А ведь это все надо тоже тестировать  - инфраструктура как код - это небесплатно.
3. Замечательный набор подсказок для тестировщиков что можно делать с консолью Google Chrome.
4. О непростых взаимоотношениях разных версий Opera и как с ними жить из-под webdriver - Алексей Баранцев.
5. О том как построить схему связей модулей в проекте на PowerShell и Graphviz - тут. Причем здесь тестирование и обеспечение качества - а вот сами должны догадаться!
6. Замечательный, хоть и длинный пост про TDD и что "невсетакпросто" и флейм в комментах.
7. Ребята из LMAX Exchange (это контора, которая дала миру Disruptor, если чо) плюют в морду ребятам из Gooogle, которые говорят что end-to-end тесты - это дорогостоящая фигня.
Плюют обоснованно. От себя могу добавить - обращение с большим массивом end-to-end тестов требует принципиально других инструментов и подходов. Существующие инструменты (Continuous Integration решения, большей частью) не обладают теми свойствами которые нужны для постоянно работы с большим количеством end-to-end тестов (отчеты, логи, анализ запусков на разных окружениях, продолжать можно долго). И либо вы дальше строете/пристраиваете/достраиваете что-то свое (как мы - микросервисы), либо начинаете кричать о том, что end-to-end тесты = ( долго + дорого + хрупко + неэффективно * и вообще говно).  Меняйте mindset.


На SQA Days в Минске я как раз буду рассказывать о том как мы строим и используем микросервисы для наших (в том числе end-to-end) автоматических тестов.

18 февраля 2015

Напочитать: React-ивный однострочный выпуск.


1. Отличный крэш-курс по началу работы с PowerShell.
2. Виртуалка из VirtualBox в VmWare - да, теперь легче.
3. React... каждый  год в мире фронтенда появляется очередной "убийца" всех предыдущих достижений. Но в этот раз все серьезно - Netflix и Facebook как бы одобряют. В связи с чем и нам пора бы посмотреть в ту сторону. Раз и два (на мобилках,но нативный)
4. Тесты на JavaScript в Java... Netflix Test Studio - читать тут. Естественно Nashorn и Java 8.
5. Тормозит Android приложение????  Может быть это потому что его написали на Groovy 2.4, который теперь официально поддерживает Android-разработку (вот и примеры уже подоспели). Правда теряет контрибьюторов.
6. В Microsoft родили первый Docker image. И с чем бы вы себе думали??? С ASP.NET 5.
7. О том почему не нужно шарить код между микросервисами. И это  имхо правильно - грабли и баги должны быть в одном месте, нефига их шарить в виде библиотеки.
8. Джери Вайнберг о том во что превращаются хотфиксы - от 42 миллонов до 1,1 миллиарда долларов.
9. Отличный вводный курс про Annotation Processing в Java.
10.  Microsoft заопенсорсило свою сериализацию  - Bond - правда с компилятором на Haskell :)
11. BTrace...Я о нем уже когда-то писал, но он до сих пор не сдох и выглядит няшно. А еще ведь есть Byteman.
12. О том как искать долгоиграющие потоки в Java простым кодом - тут.

P.S. Гуманитарный скоро.

23 декабря 2014

Напочитать: Напосмотреть: Подарочный выпуск.

Предновогодний. Чтобы вам было чем заняться с первого и по тринадцатое.


1. Никита Сальников-Тарновский легко и непринужденно показывает напаркуа вам в Java нужно иногда пользоваться off-heap. Код на гитхабе.



2. Еще один рассказ о том что может или скоро сможет Google Chrome
3. Вот вы все говорите "Нас спасет Model-based testing". Вот теперь сходите и посмотрите что такое MBT на практике а потом подумайте еще раз. Да, я понимаю что это ваще  Clojure Conf речь идет про Ruby а сбоку еще и кложа. Но докладчик все равно все раскладывает по полочкам. Смотрите и впитывайте.

4. Ansible, mon amour. На самом деле я очень люблю декларативный подход, потому прусь от maven. Фраза докладчика "Инфраструктура выросла в два раза, админ пишет на Ruby, а пользователя все нет" меня порвала, но я с ней полностью согласен - Chef он такой.


devclub.ee_32 from devtraining on Vimeo.



5. Рассказ об опыте внедрения холократии в процессы управления "на горячую".



6.Роботы. Везде. Совсвем скоро. Осталось только придумать куда деть людей.



7. Чем дальше живу, тем больше понимаю, что евангелисты/адвокаты в технических  компаниях  - вещь нужная.
Глядя на такое вот выступление, прямо хочется взять и тискать-тискать-тискать этот Docker.

Естественно не все так безоблачно, вот второе видео от того же спикера - там с кровушкой и кишочками докера.

8. 6 этапов, 5(!!!) лет. Если честно то после просмотра этого видео  я как-то даже подуспокоился - если у Atlassian на такие трансформации ушло 5 лет, то мои 2 года на обучение тестировщиков автоматизации тестирования в принципе нормально.
Смотреть всем.

15 декабря 2014

Встраиваем тесты в приложение или интеграционное тестирование с хохломой и гимназистками

Преамбула.


Как-то летом один персонаж сказал, что он собирается встроить тесты внутрь самого приложения. Тогда я молча поржал про себя.
Спустя 3 месяца на Agile Testing Days я побывал на докладе, где рассказывалось о том что Runtastic делал так для того чтобы выявить багу на устройствах пользователей.
The developers decided to build a unit test into the app where they could check the result of the device’s calculation for a well-known distance between two coordinates.
(Чуть более подробно можно прочесть тут, но большая часть отводится рекламе)
Собственно с того самого доклада мысль зудела в голове и вылилась в пару часов  пляски с кодом.

Амбула.

Начнем мы конечно же с первого по важности для аудитории этого уютненького бложека вопроса - нахеразачем оно нужно?

Если вам не достаточно кейса Runtastic приведенного выше, то отвечу.
Если у вас все хорошо, production вам подконтролен, конфигурация зафиксирована и проблем нет - оно вам не нужно.
Но не у всех и не всегда оно так.
Примеры когда оно не так:

  1.  Вы разрабатываете что-то что будет ставится в непонятное окружение или контейнер и вам нужно понимать что окружение соответствует.
  2. Окружение в которое вы ставите свое поделие может динамически меняться и об этом тоже было бы неплохо знать.

В общем и целом оба вопроса выше сводятся к вопросу о доверии к reference implementation чего-то что вам дают снаружи ( в случае с Runtastic таким reference implementation-ом было API  по работе с GPS видимо).
В зависимости от того насколько большому куску мы не доверяем может захотеться написать как Unit-тест, так и интеграционный.
Рассмотрим оба случая :).
Естественно я буду рассматривать это все на Java потому что режиссер так видит (с)  мне так нравится, но все показанное ниже также справедливо и реализуемо для всех остальных промышленных языков программирования.

Покажи мне свой код.



Код собственно на гитхабе.
Клонируем, в консоли запускаем mvn exec:java, видим такое.

Дальше идем в браузере идем на урлы:
http://127.0.0.1:8080/runUnitTests - для запуска Unit тестов

Видим такое


http://127.0.0.1:8080/runIntegrationTests - для запуска интеграционных тестов.

Видим такое
Посмотреть в код под капотом (кому и если будет интересно) вы сможете сами.

Мысли вслух.

Unit-тесты встроенные в приложение позволят вам отловить исключительно мелкие вещи. Вреда от того что они встроены в само приложение не должно быть никакого, разве что только если у вас их там миллион и вы все их будете гонять на production-среде.

В случае  с интеграционными тестами все несколько сложнее. Во-первых для того чтобы они были интеграционными вам их надо интегрировать, как бы ни глупо это звучало.
В приведенном примере кода тесты получают тот же самый инстанс Injector-а Guice, что и основное приложение.
Можно конечно сделать отдельный или шарить между инжекторами/контекстами только нужные вещи - но это все детали конкретной реализации.

Второй интересный момент который я нашел именно в такой реализации заключается в том, что подключение реальных кусков бизнес-логики к интеграционным тестам может помочь ловить баги, которые воспроизводятся только в определенных условиях.
Минусы тоже имеются - если в ваши слои бизнес-логики можно вносить изменения в runtime, то запуск таких  интеграционных тестов может положить вам ваш production.
Еще более просто и конкретно - такая штука может положить нафиг весь ваш prod и данные.
И да - подобного рода трюки не предусматривают никакой защиты от этого кроме code review.


Третье - такой подход тянет за собой все зависимости необходимые для тестов в основной продукт - то есть всякие junit, mockito, hamcrest. Ну и код тестов конечно.
Избежать этого можно - в своем примере я развел это через профили сборки maven.
Единственная корявость которая есть - приходится указывать значение свойства по умолчанию для исключаемых при компиляции пакетов.

При обычной сборке (mvn clean package) с такой настройкой содержимое архива будет выглядеть так.
А при релизной (mvn clean package -P release) вот так

По аналогии можно сделать и с зависимостями - их скоуп тоже можно разрулить через профили сборки.


P.S. Как и обещал.
Хохлома.
Гимназистки.


08 декабря 2014

Напочитать: 12 Java подвигов.

На самом деле не все про Java.
1. Библиотека от  Google для парсинга телефонных номеров
2. Linux shell на Windows. Только не Cygwin и легче.
3. Генерировать красивый equals() и hashCode() в IntelliJ IDEA  с помощью Guava - вот так.
4. Нейронные сети на Java  в виде библиотечки - Encog.
5. Анализ и моделирование графов - GraphStream - библиотечка на Java.
6. Визуализация зависимостей в коде - я не понял работает оно или нет, но все же. Spoiklin.
7. Еще один тул по визуализации зависимостей. Для тестов. Для тестов на Scala. Degraph.
8. Если вам нужно подебажить json-path против куска json то это можно сделать онлайн. Тут.
9. Сравнение производительности Pure Java и Groovy - тут. Сухое резюме ниже.

MethodJava [ns]Groovy [ns]Factor
Fork/Join22.132181.0188.18
Pojos117.914856.3377.26
Quicksort68.728330.1594.80
Quicksort with @CompileStatic67.752147.7922.18

10. Хабракейс - это когда комменты и срач в них инетереснее чем сам пост. Вот вам про тестирование.
11. Про всякие разные дебаггеры в Java - обзорная статейка.
12. почему разработчики не тестируют свой код? - очередная порция суровых, но честных рассуждений от Максима Шульги.

19 августа 2014

Напочитать: 10 заповедей

1. Встала проблема тестирования с использованием системных свойств Java. Нашлась отличная библиотека.
2. Иногда процессы покупки лицензий затягиваются, а жить как-то надо. Выход есть. По крайней мере для VmWare ESXi.
3. Пишем свой простенький Java Agent. Для чего это нужно ?  Ну например потестить как себя ведет система при изменении времени, или остановить это время насовсем.
4. Кроссплатформенное тестирование Android и iOS приложений - на такую задачу пока замахнулся только Sauce Labs со своим Appium. Правда еще одни ребята решили что сделать это можно на Jython и Sikuli. Посмотреть что получилось можно тут и тут.
5. Длинный, но живой рассказ от J.B.Rainsberger про то что интегрированные тесты есмь гавно не есть гут. Рассказ с конференции DevConFu которая проходила в Риге  в прошлом году в ноябре и в этом году тоже будет.


J.B. Rainsberger - Integrated Tests Are A Scam from devtraining on Vimeo.

От себя - концепт описываемый спикером интересный, но вызывает ряд вопросов :
1) этим подходом никогда не обнаружить конфигурационные проблемы, потому что конфигуарция вынесена из контекста тестирования вовсе. Понятно, что никто не ставит перед интеграционным тестированием проблемы поиска неправильной конфигурации (обычно, не ставит), но нахождение этих конфигурационных  проблем является побочным артефактом деятельности интеграционных тестов.
2) все это прекрасно когда ты об этом знаешь и строишь все с нуля. Попытки опрокинуть пирамиду автоматизированного тестирования происходят не просто так, а с каким-то рацио в голове.
3)  Спикер замечательно рисует квадратики обозначающие реализацию интерфейса и эта реализация у интерфейса по ходу рассказа обычно одна. В природе бывает иначе, и это вносит свои радости в будни команд разработки.

6. Еще один добрый (без шуток) человек выложил набор видеоуроков в сеть. Все что вам нужно приложить  - это (как обычно самое сложное) силу воли и самодисциплину.

7. Графики и дэшборды становятся частью повседневной жини IT-компаний. Про графит наверное уже слышали многие если не все, а вот и подборочка инструментов для построения дэшбордов на его основе.

8. Как взять и обосраться с микросервисами - правдиво зато!

9. Контейнеры грядут на смену виртуальным машинам в продакшене. В связи с чем у людей возникает вопрос "А так ли хороши контейнеры???" на который просто обязаны были ответить маркетологи из IBM. Большой отчет для тех кому интересны детали и выжимка для всех остальных.

10. Отличный наброс от качественного набрасывателя
But a lot of everyday programmer’s activities fall into the same category. Dependency management, for example. If you spent a day setting up compilation workflow and getting dependencies right, it’s not a day of good work. It’s a day lost. You haven’t created new value, you haven’t enabled a single person to do anything that wasn’t possible before. You were satisfying other programs’ demands. Even the fact that this activity has its own name indicates there’s something wrong with it. I hope there isn’t an actual job title like “Dependency management engineer”, is there? I probably don’t want to know.
На этом все. Блог уходит в отпуск до середины сентября.

01 июня 2014

Напочитать: Java выпуск

Так уж сложилось что выпуск почти полностью про Java. Извиняйте.

1. Как же иногда хочется своими шаловливыми кривыми ручонками какую-нибудь гаечку подкрутить в продакшене.
Хорошо что этого часто сделать нельзя.
Но все меняется - многие уже научились встраивать маленькие http-сервачки внутрь своих продуктов для того чтобы их можно было мониторить/обслуживать. Кто-то идет дальше - и встраивает целые shell-оболочки.

Статья на хабре в качестве апперетива.
Репозитории на гитхабе - раз и два.

2. Контейнеры. Сколько про них кричали 10 лет назад, а сейчас все развернулось в обратную сторону - долой их!!!
Красочная презентация с JAX Conf о том почему долой.

3. 56 страниц диаграмм и текстов о том чем сейчас дышит мир разработки на Java. Некоторые цифры прям вообще неожиданны для меня.

4. Вот тут вот я рассуждал про большие кодобазы. Мои рассуждения не остались не замеченнымии мой коллега по цеху  - Саша Баяндин  - прислал пару ссылочек в продолжение тематики репозиториев кода размерности более XXXL - вот про Git и про Mercurial тоже есть.
Вот тут еще одно страшное и непонятное место но по той же проблеме от Facebook.

5. В мире Java случалось несколько больших ошибок - одна из них API для работы с датой и временем.
Сейчас это исправляют, по факту внедряя API от JodaTime.
JodaTime разрабатывается уже очень давно и разобраться в нем весьма непросто.
Это пожалуй пока самая лучшая статья которую я видел, но она не про JodaTime, а про Date and Time API Java 8.

6. Вокруг POJO/Java Beans/Value Objects  уже поломана куча копий а сверху преизрядно нагажено. И конца не видно.
Существуют такие вещи как Project Lombok, Project Auto от Google. Вот и еще один - Rekord.

7. Надо и мне пройтись по теме Java 8. Очень рад что она вышла наконец - это действительно что-то большое с момента релиза 5-ки. Переходить пока на нее не буду по двум причинам - не верю я в релизы  с 0 на конце (:-)) и нужно будет кое-что переколбасить внутри своего хозяйства.
В частности многие велосипеды типа RxJava и Guava теперь не нужны - Stream API, Optional и предикаты теперь официально есть в 8-ке.
Молодцы что выпустили. Long live, Java!
Обзорные статьи про возможности.
раз 
два
три
И совершенно отдельно хочется отметить Nashorn - возможность запускать скриптовые языки вообще и JavaScript в частности внутри JVM.
Жду первых  портов node.js проектов на JVM стэк :-D
Обзор того как оно выглядит у Steve Jin

На этом на сегодня все. Любите джаву - это ведь не только язык программирования но и сорт кофе.

13 июня 2012

Гиперпотимизация


Вот что говорят классики

We follow two rules in the matter of optimization:
    Rule 1. Don’t do it.
    Rule 2 (for experts only). Don’t do it yet—that is, not until you have a
       perfectly clear and unoptimized solution.
—M. A. Jackson
Joshua Bloch, Effective Java

А вот что делают не слушая их

23 апреля 2012

Link: Java 8 Milestones via InfoQ

Опубликован график выпуска milestone-ов Java 8.
Лично мне интересно как раз тем, что 7 релиз добавлял только синтаксический сахар, а вот в 8-ом обещали сделать много чего вкусного.
Что ж буду ждать, надеюсь не устроят такой же факап как с первым релизом семерки.

09 апреля 2012

05 марта 2012

Link: Мутационное тетирование

Весьма интересный инструмент и подход приведен по ссылке ниже.
Открытым остается только вопрос контекста использования подбного рода инструментов - аудит качества написания юнит-тестов???
И еще один вопрос - как это все будет работать, если конечно вообще будет в паре с mock objects???
JAVA / Mutation testing на примере Pitest

09 февраля 2012

Опенсорсно-злое

http://selenium.googlecode.com/svn/trunk/java/CHANGELOG

Native events implemented for Firefox 10.

Ну вы бы, блядь, хотя бы NotImplementedYet кидали бы.
А так просто молча не работают операции с мышкой.
И все, типа, заебись, так оно и должно быть.

ЗЫ извините, не сдержался - 3 человека два дня пытались заставить это работать на FF 10

24 января 2012

Kent Beck. Implementation patterns.


Как и грозился - прочитал.
Книга несколько не оправдала моих ожиданий, хотя весьма вероятно они были завышены.
Основная мысль книги такова -  код должен писаться так чтобы его было удобно модифицировать. Чтобы модифицировать код его необходимо читать, следовательно если сделать код удобночитаемым то можно сократить будущие издержки на модификацию кода.
Книга подчеркивает три ценности при написанми кода, выделяет 6 принципов следуя которым в код привносятся указанные ценности, и приводится масса паттернов которые реализуют указанные принципы.
Книга рассказывает о том как сделать код более понятным для дальнейшего чтения в процессе изменения.
Ничего принципиально нового или хрестоматийного как в Effective Java от Joshua Bloch мне в этой книге найти не удалось.
Читать стоит, но не в первую очередь.
3/5.

11 января 2012

Интеграционное тестирование с JUnit

Преамбула
Делаю доклад+презентацию про автоматизацию функционального тестирования на Java.

Амбула
Имею честь наблюдать некоторую массу мнений насчет того, что вот есть TestNG, который как бы наше все.
И все в нем есть и всем он хорош. И даже DI/IoC поддерживает с Google Guice.
А JUnit.... ну он так, для юнит-тестирования и только. Написан программистами для программистов.

И не соглашусь с этим всем безобразием.
Туго скрутив документацию по JUnit в сигару и выкурив ее я за полдня сваял Proof of Concept
того что DI/IoC тоже может работать в JUnit.

Ну а если покурить сорсы TestNG там можно обнаружить много всего жирного для такого кодового фашиста как я.
Например такое