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.

"I know that programming language"

1. You'll never manage to learn the only programming language. You don't know language unless you have something to tell about it. There's nothing you can tell about the language unless you can compare it to anything else.

2. I don't understand the people who only know either Java or C#: both these languages (platforms) are too similar to atone for one's familiarity with only one of them.

3. I go mad when someone tells me that I have to think specially, write specially and build specially when I use "language A", because "it's not the same what you always do in your language B". Especially, when the person who tells it to me is not both p.1- and p.2-compliant.

Thursday, June 16, 2011

Anonymous classes in C++


int main() {
[] {
struct A {
void func() {
std::cout << "hello" << std::endl;
}
};
return A();
}().func();
}


The most amazing feature of new C++0x, I believe.

Friday, June 10, 2011

New Android tablet

Lol I can connect mouse and keyboard to my new android tablet. Looks like I need HDMI-enabled display :-)

Saturday, April 30, 2011

WiX installer

WiX is the best thing to illustrate the Bad Tool Design. It's absolutely fine as long as your application's install process only consists of copying the files and creating the shortcuts. You just write 20 lines of XML and it works. But when you need to add a couple of custom steps to the wizard, you have to copy all the code related with standard steps and fix it as you want. No ways to extend it, you either take what they give, or implement 90% of things from scratch. I know about Microsoft Installer limitations and all other stuff. But what the fuck? Why don't they do all this stuff the right way? There's no way to inherit the UI. If you create the dialog, you have to implement all the stuff it should do. You have to describe all the controls from scratch. Moreover, the manner you should do it is like X=10, Y=20, Width=100. What the fuck is Width? Why do I have to spend my time for deciding whether 100 is enough for "qwerty"? I DO FIRMLY believe that WiX is ideal crap.

Tuesday, April 12, 2011

Disappointment of the year

Hello [here comes my name],

We have some exciting news to share. Intel Capital, Andreessen Horowitz and Advanced Publishing have made a $30 million investment in Kno.

As part of the deal, we are working with Intel to accelerate the design of education tablet computers for students around the globe. This partnership allows us to focus on creating the world's leading education software for different devices and platforms. It also means that we will no longer be manufacturing and distributing the Kno tablet.

I wanted to personally thank you for your support and contributions in helping us reimagine what is possible in education. We’re currently baking up some amazing products and we will continue to call on you for your feedback and advice. To stay in the Kno on what were whipping up in the kitchen, like us on Facebook.

Thanks again for your continuing support.


Osman Rashid,
Chief Executive Officer and Co-Founder


I DO FIRMLY believe that in a year we'll have 14" tablets from Shenzhen. Just for $100. With free shipping.

Sunday, March 13, 2011

Compiler's thoughts


result is error:
false, because:
shit happened
false, because:
failed to get bin op result type
false, because:
shit happened
false, because:
cant get condition value, because condition failed
false, because:
shit happened
false, because:
cant get left type rank
false, because:
shit happened
false, because:
cant get type
false, because:
shit happened
false, because:
no such type
cant get right type rank
false, because:
shit happened
false, because:
cant get type
false, because:
shit happened
false, because:
no such type

Tuesday, March 1, 2011

Compile-time humor


struct Govno {};
struct Konfetka {};

int main() {
Govno g;
Konfetka k(g);
}
-----------------------
main.cpp(6): error C2440: 'initializing' : cannot convert from 'Govno' to 'Konfetka'

Sunday, January 16, 2011

Bug tracking software

During the last couple of years I had an idea to have a bug tracker for my home projects. Here's a summary:

1. Trac
Looks very raw. Really hard to understand what it does and how to do what I want. Installation is really painful, too.

2. JIRA
Is fine, but requires much more powerful hardware than I used to run it: Samsung netbook with 2GB of RAM. I believe that this hardware should be enough for hosting a 1-project 5-user bugtracker. Also, JIRA is not free. You either have to pay, or use it for open source project.

3. Redmine
Is great. It's simple, intuitive and it runs fine on my "server". So, I think it's what I'm going to use. Can be easily installed using Bitnami.

Also going to try Mantis.

Update:
No, I like Redmine more, than Mantis

BitNami

I have just stumbled upon this site. Have not yet tried, but the whole idea looks great. They provide a minimal packages to use a "technology" or "software" which requires 3-rd party services to run (if you want to use Django you have to install Apache/MySQL/Python). The packages are either Windows/Linux installers or VMWare/VirtualBox images.

Friday, January 14, 2011

This blog is now in Terrible English

This blog is now in Terrible English, because Terrible English is more popular than fine Russian and like any other 13 year old girl I love being popular.

Мысли

Я ранее уже писал про динамическую типизацию. Особенно про слабую. Пару недель назад. С тех пор в моей жизни многое изменилось. Много воды утекло.

Я хочу извиниться перед динамической типизацией. Динамическая типизация иногда бывает крайне удобна. Вот слабая динамическая типизация - это плохо. А более-менее строгая динамическая типизация иногда позволяет намного легче реализовывать некоторые вещи.

Я не знаю как у других сишных (плюсплюсных) разработчиков (скорее всего такое есть у многих), но меня некоторое время преследовали страхи по поводу производительности. В частности, легенды о том, что виртуальный вызов - это очень медленно, что RTTI - это жуткие тормоза и так далее. Эти страхи хитрым образом переползли из си на уровень выше. Они стали повсеместными. В C# есть рефлексия? Наверное это жутко тормозит. В Python тоже есть? Ну наверное тоже не стоит.

Некоторое время назад я подумал: "А какого хрена, вообще?". Нужно решать задачи, а не думать (в 99% случаев - заблуждаться), что какое-то решение будет тормозить. Нужно просто решать задачи и не думать о том, как оно работает внутри. Абстракция ЯП на это и дана.

На душе стало значительно легче. Я стал спокоен. Меня больше не смущают гетерогенные списки в питоне, не смущает питоновская setattr().

И это здорово.

Monday, January 10, 2011

Планы на 2011

1. Сделать Секретный Мегапроект.
2. Изучить Python до уровня "более-менее знаю".
3. Изучать Django до уровня "более-менее знаю" (понимание основных концепций, понимание архитектуры, понимание куда что своё прикрутить, чтобы получить то, что хочется)
4. Доделать компилятор.
5. Изучать новый C++ до уровня "более-менее знаю".
6. Изучать Boost до уровня "более-менее знаю и понимаю как работает".
7. Изучать STL до уровня "более-менее знаю".
8. Изучать паттерны проектирования до уровня "более-менее знаю".
9. Изучать Android/Java до уровня "более-менее знаю".
10. Изучить свежий .NET.
11. Получить MCSD по .NET (Desktop).
12. Проштудировать Кормена. Полностью. Всё запрограммировать.
13. Кататься на велосипеде.
14. Сбросить вес до стабильных < 70 кг.
15. Сделать, чтобы жена не говорила, что у меня дряблая обвисшая задница.

16. Сделать ремонт в квартире и заселиться.
17. Разобраться со времена в английском (да, стыдно).
18. Разобраться со всеми непонятностями в английском.
19. Научиться играть на гитаре.
20. Доделать задачку по iPhone (хотя и тошнит).

Нежирным отмечено неприоритетное.