Серёжа Пономарёв aka stokito

I'm Java & Grails developer, coach and founder of IT community #kranonit in my native city.

«Comparing JVM Web Frameworks» by Matt Raible

It’s very cool talk about qestions that every Java developer must decide on new project. Overview of all popular Java frameworks from JSF and Struts to Play and Vaadin.

Оставить комментарий »

Функциональные тесты в Grails: Spock + Geb = Кайф

Вообщем если вы хотите знать почему я прусь по Груви и Греилс посмотрите это видео

Я сам хотел такой доклад сделать но Богдан всё отлично рассказал за меня.
Всем приятного просмотра и расширения сознания

Оставить комментарий »

Very special time indeed.

stokito:

It’s like an Evolution: we live here, because only we can live here

Originally posted on The Object Matrix:

Why Now?

This is the brief history of time. Showing Y — axis as density of matter as the universe is expanding and X — axis as the age of the universe, and it looks like energy density is constant as the universe is getting bigger. And we are living in a time where energy density of empty space is three time bigger than energy density of matter. This is the only time in the entire history of universe when this two lines intersects, we are living in a very special time.

[Source: Lecture from Lawrence Strauss]


View original

Оставить комментарий »

[Чтиво] Три очень классные практические статьи-инструкции для программистов

Периодически почитываю что накопилось в закладках. Вот отличные прагматичные статьи вкурив которые сразу получите +2 к экспе девелопера.
Экстремальное программирование: Pair Programming чёткая инструкция по делу что такое парное программирование как его делать на практике и самое главное как его НЕ делать.

Парное программирование в аутсорсинге: достижение взаимопонимания с техническими специалистами заказчика Классная статья которую обязан прочесть каждый программист-аутсорсер. Вывод: если у вас есть часть удалённой команды то парно педалить код вы просто обязаны.

Практика рефакторинга в больших проектах в сотый раз о вечном. Для тех кто ещё халтурит и не прочёл замечательную книгу Working Effectively with Legacy Code

Оставить комментарий »

[Grails] Пару последних граблей с GORM

В последнее время несколько раз получал ошибки из-за неопытности в некоторых аспектах GORM и Hibernate. В этом плане GORM постоянный источник неприятных сюрпризов.
И сегодня увидев отличную статью Advanced GORM Features: Inheritance, Embedded Data, Maps and Lists Storing решил записать пока не забыл.

1. Если вы используете наследование в доменых объектах, то не забывайте миграцию при изменении имён классов

GORM позволяет использовать наследование. Классы наследники могут сохранятся либо в разные таблицы table-per-subclass либо все в одну table-per-hierarchy (по умолчанию).
Обратите внимание, что если у вас в одной таблице (table-per-hierarchy) то у вас будет ещё одно поле discriminator с именем class по которому собственно GORM и будет понимать какого конкретно класса эта запись.
Например для такой иерархии классов

class Content {
    String title
    User author
}

class Blog extends Content {
    Date dateCreated
}

class Book extends Content {
    String isbn
}

Будет такая таблица

+---------------------------------------------------------------------------------------+
| content                                                                               |
+---------------------------------------------------------------------------------------+
|id | class            | title            | author_id | date_created | isbn             |
|1  | com.example.Blog | My post          | 1         | '2014-1-1'   | null             |
|2  | com.example.Book | Grails in action | 2         | null         | '978-1933988931' |
+---------------------------------------------------------------------------------------+

Как вы видите, в поле class сохраняется полное имя класса. В момент выборки GORM по этому полю пытается создать этот класс и гидрировать данные из записи.
И тут кроется опасность: если вы допустим поменяли у себя имя класса или его пакет, то все старые записи не смогут извлечься. И самое противное что об этом вы можете узнать только когда уже задеплоите новую версию на продакшен.
Поэтому, если вы поменяли имя доменного класса, не забудьте добавить в скрипт миграции с помощью migration plugin (надеюсь, вы профессионалы, и используете его).
Например, если вы поменяли пакет класса Content и его наследников с com.example на com.example.content то вам следует написать примерно такой скрипт миграции:

databaseChangeLog = {
    changeSet(author: 'John Doe', id: '033_change_content_class-1') {
        update(tableName: "content") {
            column(name: "class", type: "varchar(255)", value: 'com.example.content.Blog')
            where("class = 'com.example.Blog'")
        }
    }
    changeSet(author: 'John Doe', id: '033_change_content_class-2') {
        update(tableName: "content") {
            column(name: "class", type: "varchar(255)", value: 'com.example.content.Book')
            where("class = 'com.example.Book'")
        }
    }
}

2. Не помечайте абстрактные доменные классы модификатором abstract, глючит

Наткнулся на какой-то хитрый баг. Если допустим вы пометите Content как абстрактный, что так и есть, то биндинг подклассов перестаёт почему то работать. Уже забыл детали, забыл зафайлить багу. Grails 2.2.3, возможно поздние версии работают.

Оставить комментарий »

Интервью с Андреем Замовским, CEO HolyTransaction.com

Интересная дружеская беседа с одним из пионоеров криптовалют и CEO компании https://HolyTransaction.com/ о биткоинах, стартапах, Кремниевой долине и личностном развитии.

Также есть другое, более серьёзное и профессиональное интервью с Андреем

5 Комментарии »

Несколько замечаний про код стайл

Тема код стайла очень хорошо раскрыта в замечательной книге Clean Code.
От себя я бы хотел обратить внимание на пару не очень очевидных вещей к которым пришёл со временем.

1. Во первых это вертикальная плотность кода (Vertical Density). Где-то я слышал что программист не может в голове держать больше 400 строчек кода. Собственно это и есть лимит на количество строк в вашем файле. Если больше — разбивайте на другие классы.
Скролить файл вниз — утомляет. Более того, иногда похожие или связанные методы идут рядом и хотелось бы их сразу видеть рядом.
Ещё один момент — обычно вертикально идут сами команды а горизонтально их параметры.
Обычно когда ты смотришь в код тебе более важно понять логику и последовательность команд а не их уточнения.
По сути это визуальное отображение принципа High Cohesion (Сильное Сцепление).
Поэтому я начал очень сильно следить за вертикальной плотностью и несколько следующих принципов вытекают из этого требования.

2. Принцип неразрывности — когда вы избегаете писать пустые строки внутри методов потому что обычно являются запахом что тут следовало бы экстрактнуть метод.
В IntelliJ Ctrl+S > Code Style > Java > Blank lines всё выставьте по нолям или максимум 1

2. Не переносите строки: сегодня у нас очень широкие мониторы и уже следует избегать переносов команд на две строки. На моём мониторе спокойно влезает по 256 символов. Это более чем достаточно, но обычно IDE переносят строки по границе в 120 символов. Более того, обычно если у час всё равно длинная строчка и не влезает полность на экран то это не страшно — обычно там идут неинтересные параметры вызова метода. В любом случае горизонтально скролить приходится в тысячу раз реже чем вертикально.
Поэтому сразу полезайте и отключайте эти переносы или ставьте им границу в 400 символов.
В IntelliJ Ctrl+S > Code Style > General > Right Margin

3. Джавадоки тоже пытайтесь делать однострочными.
Т.е. вместо

/**
 * Some method description
 */
void someMethod() {
  ...
}

пытайтесь писать так

/** Some method description */
void someMethod() {
  ...
}

В IntelliJ Ctrl+S > Code Style > Java > Java Doc > Do not wrap one line comments

4. Отключите выравнивание (arange) кода. Очень многие IDE по умолчанию наводят «красоту» и выравнивают (тут я отметил нижним подчёркиванием _)

void someMethod() {
  def params = [
      firstName:_'John',
      lastName:__'Doe',
      age:_______42
  ] 
}

С одной стороны принято считать что это добавляет красоты и читаемости. С другой стороны, если вы удалите например первую строчку то вам придётся перевывравнивать соседние сточки и эти изменения подзагадят вам diff в системе контроля версий.
В IntelliJ Ctrl+S > Code Style > Java > Wrapping > Align when multiline

Вместо заключения

На стиль кода влияют несколько вещей:
1. Удобство чтения кода — большую часть мы код читаем
2. Возможности IDE — очень многие вещи они могут отображать более удобно (сворачивать гетеры и сетеры, копирайт заголовки, импорт лист).
3. Система контроля версий — очень важно чтобы изменения были как можно более атомарными и в diff’е не было слишком много строк чтобы было проще понять суть.
4. Дебагинг — иногда лучше вместо method chaining выделить переменную потому что дебагер идёт построчно.

Оставить комментарий »

Як я потрапив в IT.

stokito:

Небольшая статейка о том что если есть голова на плечах то устроится в IT не будет проблемой

Originally posted on animator404:

Відносно не так давно на DOU була стаття, як молодим людям отримати першу роботу. В ній був перелік компаній, зацікавлених в молодих перспективних людях, студентах, які бажають отримати перший досвід в IT сфері. Також там були і електронні адреси цих компаній, куди можна було слати свої резюме, що я власне і почав робити.

Bionic University на базі Національного університету «Києво-Могилянська академія»

Крім самих компаній там була загадка про курси програмування Bionic University, де можна зареєструватися на будь-яких з доступних напрямків в сфері IT — від підприємництва до власне мов програмування та фронт-енду. З офіційного сайту: “BIONIC University – освітня ініціатива інноваційного парку BIONIC Hill. Основною метою BIONIC University є створення інноваційної системи, яка забезпечує підготовку кваліфікованих фахівців для компаній-флагманів IT-індустрії та інших високотехнологічних галузей України.” Реєстрація проста та швидка, тому я подав заявку на Java SE та EE, оскільки на той час я вже майже…

View original ещё 875 слов

Оставить комментарий »

Анонсик

Хочу поделиться мыслями и планами на ближайшее время.
До конца недели я хочу накидать статью «Как переехать в Киев айтишнику«. Ужасные потрясения которые выпали на нашу долю делают этот вопрос даже ещё актуальнее чем раньше. Очень много людей вынужденны были бежать из своих городов захваченных оккупантами.
Я давно и публично всех айтишников зазывал перемещаться в Киев из других городов. Это относительно комфортный для проживания город, с преимущественно нормальным климатом, с развитой IT индустрией и профессиональной тусовкой, хорошей природой, адекватными жителями, «вечный город». По статистике опросов DOU здесь сосредоточено больше половины всех айтишников Украины.
Я хочу объяснить зачем нужно сюда переезжать, мотивировать, подсказать как искать работу и квартиру и тому подобные приколы.
Если  у вас есть свой опыт, поделитесь пожалуйста им — напишите в своём блоге или пост в соцсетях а я обязательно сделаю на вас ссылку.

Далее я немного займусь опен сорсом, прежде всего залью и оформлю пару плагинов для Grails которые болтаются на диске. Также закрою все нон критикал ишью которые сейчас есть по моим уже опубликованным плагинам.

Также хочу сделать небольшой поисковик плагинов для Grails по Github — чтобы сразу можно было оценить качество проекта: количество старов, форков, комитов, тестов и других метрик по которым можно будет определить стоит ли вообще с ним связываться.
В идеале таким поисковиком я предложу заменить текущий Grails Plugin Portal также как это сделано в jQuery.
Вообще, я попробую изучить возможность и целесообразность создания механизма чтобы прописывать зависимости в Grails \ Gradle сразу на ревизию из репозитория системы контроля версий (Git или SVN). Это очень сильно упростит жизнь если использовать форки библиотек и устранит проблему с их версионированием облегчая модель Базара.

Следующее чем я хочу заняться это завести небольшой spare time project. Тут у меня две основные идеи которые я хочу реализовать:

1. Строгий переводчик и лексический конструктор.

Мне нужно выучить грамматику английского языка, что делать конечно же лень и не интересно. Я и русскую грамматику то не учил никогда, как вы наверное уже заметили, поэтому когда начинаю учить грамматику английского то вхожу в ступор от терминологии «подлежащее и сказуемое», «страдательный залог» и прочие герундии. Я себя чувствую как будто ты семиклассник который попал на курс по высшей математике и который диференциал dx/dy  решил сокращением дроби.
И я решил поступить так же как поступил на первом курсе с вышкой: взять и написать программу которая это всё будет решать. «лучший способ что-то изучить это научить этому компьютер» (с) кажись Дейкстра.
Теперь я хочу написать штуку которой реально всем не хватает: лексический конструктор предложений.
Допустим я вбиваю предложение «I read a book». Конструктор подсветит где тут глагол, где существительное. Затем я могу с помощью конструктора перевести это предложение в другое время или превратить в вопрос.
То есть это эдакий переводчик но с множеством кнопочек и подсказок. Обычные переводчики что я видел обычно просто имеют инпут и аутпут и переводят «примерно» и если были какие то проблемы с пониманием текста они это молча схавают и переведут «лучшая среда разработки» как «the best wednesday of development».
Тут есть большой прикол в том что этот проект прекрасно можно разработать в TDD стиле. Поэтому я свою попробую скринкастить и сделаю из него небольшое реалити шоу на своём ютуб канале где с нуля на глазах буду его создавать.

2. Консольная тула для рефакторинга.
Это более глобальный проект по реализации моего видения языка программирования следующего поколения, но тут конкретно я сделаю небольшой, но уже рабочий и полезный кусок чтобы использовать прям сегодня.
На сегодняшний день одна из самых больших проблем IT индустрии это обратная совместимость. Очень яркий тому пример это Java. На этом языке программирования написано тонны кода в больших проектах.
И теперь добавить новую фичу в язык очень сложно, потому что старый код может потом просто не скомпилироваться. Также в библиотеках джавы полно старых классов и методов помеченных как deprecated но которые не удаляют для поддержки обратной совместимости.
Например есть такой класс для индексированных массивов как Vector. Он старый, и тянется ещё с первой Джавы. Он имеет два недостатка: все его методы синхронизированны что гасит производительность и он не типизируемых дженериками.
Эти два недостатка исправлены в новом классе ArrayList, но никто же не будет вручную переписывать весь старый код на новый класс. Некоторые IDE имеют такой рефакторинг как Миграция (замена) класса.
Но это нужно чтобы каждый на своём проекте ткнул куда надо и нажал нужную комбинацию.
А теперь представьте что вы делаете библиотеку и в новой версии у вас у метода вы удалили лишний параметр. Всем пользователям вашей библиотеки теперь нужно просто удалить во всех местах где вызывается ваш метод этот redundant параметр. Элементарно, но изначально с новой версией вашей библиотеки у них код не будет компилироваться. Что вы тогда делаете? Обычно делаете новые метод без параметра рядом а старый помечаете как deprecated. И он так и болтается в коде до следующей майорной версии.
Теперь что я предлагаю: сделать небольшую консольную тулу которая автоматически пройдёт по коду и исправит всё так как надо. Так же как например миграции баз данных DBMaintain и LiquiBase. Код, это ведь то же данные по сути.
Тут особо придумывать ничего не нужно будет — можно попробовать вырезать рефакторинг из IntelliJ и просто к нему прилепить консольный интерфейс.

Если кому интересно — я буду рад любому сотрудничеству и идеям.
Надеюсь справлюсь ;)

 

3 Комментарии »

What Makes America the Greatest Country in the World?

Originally posted on Yakov Fain's Blog:

My son Dave bought the DVDs with the first season of the HBO’s series «The Newsroom», and we watched the first episode today. In the beginning, they showed a press conference, where a journalist asked a TV anchor, «What makes America the Greatest Country?». He could not give a decent answer, which got me thinking, «How would I answered this question?»

I live in the USA for twenty one years. Before that I lived in the USSR. I’m an American citizen. I don’t have any other citizenships. I can compare. I can observe. I can speak up freely.

To put it short, the USA is the most wanted country in the world. That’s why it’s the greatest country in the world. Of course, not 100% want to relocate to America. But most of the people do even if they say otherwise.
People vote for America by putting the money (or…

View original ещё 629 слов

Оставить комментарий »

Отслеживать

Get every new post delivered to your Inbox.

Join 621 other followers