Wednesday, January 1, 2014

Итоги 2013 года

1. По традиции, сделать Секретный Мегапроект.
Тот, который обсуждался последние несколько лет, сделать так и не получилось :-) Зато получилось сделать другой. Запущен. Работает. Половина постоянного пользователя.

2. Собрать некий "джентльменский набор" платформ/технологий/практик для деланья собственных проектов. Речь идёт про веб-приложения. Я хочу делать интересные штуки и видеть как они живут.
Более менее получилось:
Java - на ней можно программировать.
Eclipse - ну просто мне нравится как он в убунте выглядит.
Maven - очень легко подключать миллионы библиотек и плагинов, отличная интеграция с Eclipse.
Jetty - веб-сервер для запусков локально и на Heroku.
Spring - "фреймворк". Spring MVC и Rythm - передней части. Spring Data JDBC + QueryDsl - data access.
JUnit - чтобы писать тесты.


3. Продолжать изучать Java. Изучать Spring и кучу других библиотек/фреймворков. Основная цель - изучить платформу до такого состояния, чтобы 80% задач не вызывали вопросов. Особенно интересуют Apache CXF, spring data jpa, spring security и spring integration.
Это было. Если кто-то зайдёт на гитхаб, сразу подумают, что я Java девелопер.

4. Продолжать изучать .NET. Изучить асинхронные фичи (стыдно, но даже не пробовал - только презентацию видел).
Кстати, так и не попробовал :-)

5. Изучить SQL. Получить общее понимание языка и окружающей его инфраструктуры (например - транзакции, уровни их изоляции).
Было несколько экспериментов, ничего особенного. Больше экспериментов было с точки зрения программирования - всякие LINQ2SQL, Entity Framework, Dapper, Spring Data JPA, Spring Data JDBC, QueryDsl и прочие.

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


7. Продолжить изучать web. Научиться делать более-менее сносный "программистский" дизайн руками, сразу в виде кода. Продолжать изучать Angular JS. Научиться реализовывать long polling на .NET и Java. Научиться делать активный UI (приложение не обязано ждать, пока пользователь нажмёт кнопку, чтобы что-то произошло. Например - чат). Изучить способы интеграции с Facebook, Twitter, Google+. Научиться показывать кнопочки типа "100500 человек любят ваш сайт". Изучить google analytics и способы её применения для веб-приложений (не для "тупо" сайтов).
Вебом - занимался.

8. Разобраться с легальным аспектом получения денег с пользователей.
Как-то не дошло пока :-)

9. Сделать интеграцию как минимум с одной платёжной системой. Запустить как минимум 1 проект с платной подпиской, каким мы чудовищным он не был.
Не дошло.

10. Продолжать битьё головой об стену на тему написания компилятора.
Это всегда с радостью. Как обычно - десятки экспериментов. Последний кажется более менее.

11. Похудеть до стабильных < 75 кг.
Это есть. Последние несколько месяцев вес держится между 65 и 70. Праздник.

12. Научиться ездить manual как минимум на 10 метров.
С велосипедом как-то не получилось.

13. Разобраться с git - изучить branches, merging, tags, sub modules.
Без особого восторга - не сказать, что сильно продвинулся за этот год.

14. Пощупать ruby on rails. Просто чтобы знать что это и насколько оно отличается от Django.
Пощупал. Это ещё страшнее, чем Django.

15. Научиться оформлять тесты на NUnit/JUnit таким образом, чтобы с одной стороны их можно было отлаживать, а с другой, избегать длины больше 30 строк.
Не сказать, чтобы прямо какой-то прогресс. Просто пишу тесты.

16. Научиться писать кодогенерирующие плагины для Maven.
Были робкие попытки попробовать использовать APT. Ни к чему интересном не привело.

17. Научиться использовать AspectJ для реализации cross-cutting concerns.
Не дошло.

Sunday, February 3, 2013

План на 2013 год

Вот такой план на 2013 год.

1. По традиции, сделать Секретный Мегапроект.
2. Собрать некий "джентльменский набор" платформ/технологий/практик для деланья собственных проектов. Речь идёт про веб-приложения. Я хочу делать интересные штуки и видеть как они живут.
3. Продолжать изучать Java. Изучать Spring и кучу других библиотек/фреймворков. Основная цель - изучить платформу до такого состояния, чтобы 80% задач не вызывали вопросов. Особенно интересуют Apache CXF, spring data jpa, spring security и spring integration.
4. Продолжать изучать .NET. Изучить асинхронные фичи (стыдно, но даже не пробовал - только презентацию видел).
5. Изучить SQL. Получить общее понимание языка и окружающей его инфраструктуры (например - транзакции, уровни их изоляции).
6. Очень хочется заиметь опыт построения какой-то распределённой масштабирующейся системы с очередями и всяким таким прочим. Явно увидеть наличие смысла у распределённости и увидеть, что масштабирование работает.
7. Продолжить изучать web. Научиться делать более-менее сносный "программистский" дизайн руками, сразу в виде кода. Продолжать изучать Angular JS. Научиться реализовывать long polling на .NET и Java. Научиться делать активный UI (приложение не обязано ждать, пока пользователь нажмёт кнопку, чтобы что-то произошло. Например - чат). Изучить способы интеграции с Facebook, Twitter, Google+. Научиться показывать кнопочки типа "100500 человек любят ваш сайт". Изучить google analytics и способы её применения для веб-приложений (не для "тупо" сайтов).
8. Разобраться с легальным аспектом получения денег с пользователей.
9. Сделать интеграцию как минимум с одной платёжной системой. Запустить как минимум 1 проект с платной подпиской, каким мы чудовищным он не был.
10. Продолжать битьё головой об стену на тему написания компилятора.
11. Похудеть до стабильных < 75 кг.
12. Научиться ездить manual как минимум на 10 метров.
13. Разобраться с git - изучить branches, merging, tags, sub modules.
14. Пощупать ruby on rails. Просто чтобы знать что это и насколько оно отличается от Django.
15. Научиться оформлять тесты на NUnit/JUnit таким образом, чтобы с одной стороны их можно было отлаживать, а с другой, избегать длины больше 30 строк.
16. Научиться писать кодогенерирующие плагины для Maven.
17. Научиться использовать AspectJ для реализации cross-cutting concerns.

Итоги 2012 года

Итоги 2012 года

1. Сделать Секретный Мегапроект. По состоянию на сегодня фактически изучить полученный прототип, допилить, решить что делать дальше.
Ну тут как всегда. Всё круто, всё в процессе.

2. Изучить веб (именно HTML, CSS, JavaScript, JQuery, Backbone, KnockoutJS и т.д.)
С вебом было очень много экспериментов. В результате проникся сильной любовью к Twitter Bootstrap и Angular JS. Многочисленные читатели моего блога вероятно знают о моей сильнейшей ненависти к вебу. Вот эти самые Bootstrap и Angular дали мне понять как это вообще должно делаться, чтобы не было так печальное. Bootstrap замечателен не тем, что можно построить интересный UI практически нахаляву, а тем, что за ним скрывается вполне явная структура со вполне явными правилами. Он позволил мне лучше понять как вообще писать HTML и CSS. Angular JS в свою очередь это самая сильная иллюстрация того, что на JS можно написать читабельный код. Наибольшее впечатление произвёл их подход с dependency injection: "или делаешь DI, или вообще работать не будет". По состоянию на сегодня - могу сделать одностраничный вебсайт и при этом он не развалится в кратчайшие сроки. Если кто-то из читающих хочет изучить front-end разработку для веб, но при этом либо страшно, либо есть негативный опыт, очень советую попробовать связку Bootstrap + Angular JS.

3. Продолжать изучать .NET: ASP.NET MVC, Entity Framework (ну и хлам вроде Ninject, AutoMapper, и т.д)
Более-менее умею ASP .NET MVC. Умею Entity Framework через "design-first". Очень хочу поэкспериментировать с code first. Повезло с проектом на работе - изучил WCF и LINQ2SQL. По состоянию на сегодня могу сделать веб-сервис/веб-сайт, красиво оформить в плане билд/деплоймент скриптов на MSBuild, с явными конфигурациями и маппингом на конфигурации Teamcity. Продолжнаю безумно любить Teamcity.

4. Продолжать изучать Java: GWT, Android, NHibernate, Spring, AspectJ ну и нечто, что эксперты называют словами "это тебе не C++". Ну и ещё всякие ModelMapper, Log4j, Maven, ANTLR и т.д.
Продолжаю безумно любить Java. Убогость языка с запасом компенсируют хитрые средства вроде AspectJ, а окончательно добивет Maven. Есть большой прогресс со Spring. А именно - с spring mvc, spring data jpa, spring data neo4j, spring integration.

5. Довести до ума компилятор
Начал делать очередную версию на Java. Остановился из-за сложности кода. Несмотря на субъективную вменяемость, дизай получился сложным. В этом году попробую ещё раз.

6. Полюбить JUnit/NUnit, постоянно его использовать.
Тут на меня наконец-то сошло озарение. С помощью JUnit/NUnit можно решать вот такие задачи:
а. Есть какая-то библиотека. Если раньше я делал набор хеллоу ворлд программок, сейчас я просто делаю проект, в котором ничего кроме тестов нет. Тесты показывают какой сценарий использования приводит к каким результатам.
б. Есть задача написать какую-то логику, за которую я не могу ручаться, просто потому что сложно. Покрытие тестами помогает получить минимальные гарантии.
в. Есть какой-то сервис, нужно убедиться, что какие-то основные сценарии работают.

7. Научиться использовать Git
К сожалению, так и остался на уровне pull/commit/push. Честно говоря, не так сильно напрягает. Всё ещё думаю, что обязан разобраться с branches, tags, sub modules.

8. Выучить очередную порцию слов вроде MVC, MVP, MVVM
С этим как-то не срослось. Я отлично понимаю о чём тут идёт речь, какие проблемы есть, могут быть, и как их стоит (не стоит) решать, но вот эта магическая разница между MVC и MVP всё ещё мне неподвластна.

9. Вспомнить Django/Python, изучить Ruby/Rails, сравнить
Замечательно вспомнил Django в некотором тренировочном проекте. Честно говоря, в последнее время любовь к этому всему всё слабее. В моём нынешнем понимании, "трендовое хипстерское веб-приложение" - это как минимум шаблонизация на стороне клиента, поэтому, не смотря на всю их прелесть, шаблоны Django имеют не так много смысла. С другой стороны я всё сильнее люблю строгую статическую типизацию, что понижает мой рейтинг Python. Стоит, наверное, потратить пару недель на обзор RoR, но скорее всего дальше обзора не пойдёт.

10. Изучить какие-нибудь NoSql кроме neo4j/spring-data-neo4j. Их там несколько основных, наверное - все?
Я так подумал - рановато. Это всё, конечно, очень интересно, но с другой стороны я глубоко не эксперт в SQL, поэтому не смогу сделать адекватных оценок. Забил. Планирую изучить SQL.

11. Похудеть до стабильных < 75 кг
Тут, как всегда, не получилось.

Были так же некоторые другие интересные моменты.

1. Много думал и экспериментировал с дизайном всяких сервисов, структурированием логики и всяким таким прочим. Более-менее стал понимать как применять ООП на практике. Были робкие попытки разобраться с разницей между Anemic и Rich domain models, но как-то так же робко и закончились.

2. Побывал наконец-то в Америке. Ел гамбургеры.

Sunday, February 26, 2012

Экранизация "Атлант расправил плечи"

Посмотрел фильм. Пока смотрел, не отпускало ощущение, что что-то не то. Потом дошло, я почему-то был уверен, что Дэгни - брюнетка. В фильме её сделали блондинкой. Сегодня посмотрел, по книге у неё каштановые волосы.

Friday, January 13, 2012

План на 2012 год

План на 2012 год

1. Сделать Секретный Мегапроект. По состоянию на сегодня фактически изучить полученный прототип, допилить, решить что делать дальше.
2. Изучить веб (именно HTML, CSS, JavaScript, JQuery, Backbone, KnockoutJS и т.д.)
3. Продолжать изучать .NET: ASP.NET MVC, Entity Framework (ну и хлам вроде Ninject, AutoMapper, и т.д)
4. Продолжать изучать Java: GWT, Android, NHibernate, Spring, AspectJ ну и нечто, что эксперты называют словами "это тебе не C++". Ну и ещё всякие ModelMapper, Log4j, Maven, ANTLR и т.д.
5. Довести до ума компилятор
6. Полюбить JUnit/NUnit, постоянно его использовать.
7. Научиться использовать Git
8. Выучить очередную порцию слов вроде MVC, MVP, MVVM
9. Вспомнить Django/Python, изучить Ruby/Rails, сравнить
10. Изучить какие-нибудь NoSql кроме neo4j/spring-data-neo4j. Их там несколько основных, наверное - все?
11. Похудеть до стабильных < 75 кг

Friday, December 23, 2011

Итоги 2011 года

1. Сделать Секретный Мегапроект.
В начале года пилил на Django. Получился более-менее интересный прототип. Даже познакомился с JQuery. Но не срослось. Не понравилась работа с client-side. Всё-таки в этом плане Django слишком низкоуровневый, а т.к. я ненавижу HTML, CSS и JavaScript, пришлось отказаться. Весной-летом обнаружил что бывает GWT. И ещё вспомнил, что я немного знаю Java. Всё очень понравилось, но за 2 месяца устал и решил отдохнуть. Сейчас думаю продолжить. Итог - не сделано, но в процессе. Сегодня ухожу в отпуск до конца новогодних каникул, думаю сильно продвинусь.

2. Изучить Python до уровня "более-менее знаю".
Как выяснилось из общения с некоторыми коллегами, я всё-таки скорее его знаю, чем не знаю. Итог - сделано.

3. Изучать Django до уровня "более-менее знаю" (понимание основных концепций, понимание архитектуры, понимание куда что своё прикрутить, чтобы получить то, что хочется)
С этим тоже были эксперименты, особых затруднений не возникло. Хотя как итог - сейчас уже придётся изучать заново, если понадобится.

4. Доделать компилятор.
Этим тоже занимался. Очень кстати подвернулся новый стандарт со своими плюшками. Но по сути ничего не сделано, только пара новых идей появилась.

5. Изучать новый C++ до уровня "более-менее знаю".
6. Изучать Boost до уровня "более-менее знаю и понимаю как работает".
7. Изучать STL до уровня "более-менее знаю".
Некоторые вещи удалось пощупать, но т.к. работа совершенно не способствует занятиями по C++, где-то на уровне "прикольно" оно всё так и осталось. Вообще, по состоянию на сейчас думаю перестать C++, потому что это реально костыль на костыле по сравнению с Java, .NET и Python. Есть сильное желание довести компилятор до более-менее вменяемого состояния, но скорее всего на этом мой C++ закончится.

8. Изучать паттерны проектирования до уровня "более-менее знаю".
Те, которые GoF, как выяснилось, я всё-таки неплохо понял. Но недавно тут подвернулись P of EAA, сейчас плавно знакомлюсь с ними. Как выяснилось, это ответы на те вопросы, которые мучали меня последние пару лет. Хотя книга Фаулера, безусловно, нечитаема. Ещё открыл для себя "читать чужой код". Занимает много времени, выглядит бессмысленно, но можно узнать новое и интересное. Это например про github и google code.

9. Изучать Android/Java до уровня "более-менее знаю".
А вот с этим забавно получилось. Целый год был единственным разработчиком в унылом .NET-проекте и внезапно, в конце года, подвернулась возможность во-первых уйти из него, а во-вторых сразу попасть в другой проект в качестве единственного Android разработчика. За 2 недели вспомнил всё, что делал раньше, а кроме этого, т.к. весь год с переменным успехом занимаюсь Java, сразу же посадил сборку на Maven и прикрутил кучу библиотек, чтобы не писать многое руками. Очень нравится. По поводу Java ещё можно добавить, что прошёл по ней некий тренинг - сокеты, потоки, синхронизация, клиент-серверность, и т.д. Были минорные эксперименты с Hibernate и AspectJ. Было много экспериментов с GWT: request factory и editors. Ну и ещё, прямо сейчас вот, изучаю ormlite, modelmapper, guice/roboguice, crest, simple-xml и всякое прочее. Больше всего радует, что это по работе, а не себе.

10. Изучить свежий .NET.
Наверное можно сказать, что сделано. В этом году я стал-таки Senior .NET developer, много щупал .NET 4.0 (несмотря на то, что в проекте использовался .NET 2.0). Познакомился с такими интересными вещами как Entity Framework, Ninject, AutoMapper. Пытался щупать WPF - не потянул. Ощущение монструозности, неповортливость и как-то слишком overcomplicated. Немного пощупал ASP.NET MVC 4 - очень понравилось кроме того, что HTML нужно писать руками. Были ещё всякие минорные эксперименты с Quartz.NET и NHibernate, но уже всё забылось. А ещё я прошёл некий тренинг по многопоточности в .NET 4. Интересный, кстати.

11. Получить MCSD по .NET (Desktop).
Даже и не думал в эту сторону.

12. Проштудировать Кормена. Полностью. Всё запрограммировать.
Хрен там. Даже не открыл :-) В начале года пару недель занимался тем, что реализовывал всякие алгоритмы сортировки руками, сравнивал как работают, но как-то не пошло. Потом ещё пару недель изучал графы. Дальше BFS и DFS не пошло. Это всё очень интересно, но отдачи нет. В работе это не нужно, а писать какие-то абстракции "для дома, для семьи" уже надоело.

13. Кататься на велосипеде.
Покатался пару раз. Даже прыгал банник. На этом всё и кончилось.

14. Сбросить вес до стабильных < 70 кг.
Скорее до 80 теперь :-)

15. Сделать, чтобы жена не говорила, что у меня дряблая обвисшая задница.
Сорри, жена.

16. Сделать ремонт в квартире и заселиться.
Уже 2 месяца живём. За это время собственноручно нафигачил кучу мебели, а пару дней назад подключал электроплиту и духовку.

17. Разобраться со времена в английском (да, стыдно).
18. Разобраться со всеми непонятностями в английском.
Были унылые попытки - не попёрло.

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

20. Доделать задачку по iPhone (хотя и тошнит).
Решил забить. Совершенно не хочется развиваться в эту сторону. Вот даже в целях познакомиться.

Tuesday, October 18, 2011

Про Dart

А вот по-русски напишу.

Хабр - Почему я не верю в Dart

И это уже не первый. Они там ебанулись все. Гугл очень многое делает ради того, чтобы веб перестал быть "сайтами" и стал, наконец-то, "веб-приложениями", а эти придурки, выучившие JavaScript, HTML и CSS (о, будем "веб-разработчики") возмущаются - "куда ж нам теперь всё это говно засунуть, учили ведь - одни точкозапятые в JS чего стоили".

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

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

Трушные веб-разработчики всех стран - любители скруглённых углов на чистом CSS, ненавистники IE, фанаты HTML5 и WebGL! Я думаю, что вы все мудаки, ублюдки, дегенераты и извращенцы - идите на хуй.

Monday, October 10, 2011

Google Dart

interface IMyClass {
  void dump();
}

class MyClass implements /* java style */ IMyClass {
  int x;

  MyClass(int x) {
    this.x = x;
  }

  void dump() {
    print('MyClass{$x}'); // php???
  }
}

class MagicException implements Exception {
  String message;

  MagicException(String message) {
    this.message = message;
  }
}

main() {
  List<IMyClass> mcs = new List<myclass>();
  for(int i = 0; i<5; ++i) mcs.add(new MyClass(i+1));

  func(IMyClass x) => x.dump();
  // or even this way:
  // var func = (IMyClass x) => x.dump(); // c#!!!

  for(IMyClass mc in mcs) {  
    func(mc);
  }

  print(mcs[0] is IMyClass);
  print(mcs[0] is MyClass);
  print(mcs[0] is !int);

  try {
    throw new MagicException('hai there');
  } catch(MagicException ex) {
    print(ex.message);
  } finally {
    print('finally');
  }
} 

They did it. I CAN WEB NOW!

Thursday, October 6, 2011

empty here

JIRA IS DOWN SOMEBODY FIX IT I HAVE MORE TICKETS PLEASE

Wednesday, August 31, 2011

Java

I really hate it. I always look for something new. This time, it's Java. I've already spent quite a solid amount of time for learning Java and the longer I read a try, the more things I have to do to get satisfied. The problem is, I'm not a Java developer by all means.

The list of what I'm going to learn is: IDEA, GWT, AspectJ, XText, Maven, Maven + TeamCity, Ant, Ant + TeamCity and probably I'm missing something. The reason is: I have to know all these words just to make sure I'm at least a junior-level Java developer. Otherwise, all the time I've already spent for it is just lost.

And then, I know what it means. XText means I gonna learn some more about DSLs, AspectJ means I gonna learn some more about AOP, etc.