воскресенье, 14 октября 2012 г.

Интересные перводы

Наткнулся на блог с интересными переводами - http://factorized.tumblr.com/.

Домашний GIT сервер

Недавно озадачился GIT сервером для свои маленьких проектиков и всяких там экспериментов.

Во первых, пришлось выбрать между уже существующим Git хостингом (GITHub, Assemble и т.д.) и попыткой поднять что то свое в домашних условиях. Заверения знакомых о безопасности, стабильности и бескорыстности крупных online сервисов как то не убедили.

Далее было увлекательное знакомство с кучей поделок разной степени зрелости и работоспособности.
Все испытанные серверы можно разделить на две большие группы - а) надстройки над нативным пакетом git и б) надстройки над EGit. В первом случае мы имеем нечто, что работает под управлением Apache и для выполнения действий использует пакет git. Как правило эти умеет отображать историю комитов, изменения и списки репозиториев. Во втором это java решения которые используют EGit для работы с репозиторием (нативный пакет git не требуется). Эти сервера, как правило, по мимо всего прочего, умеют создавать/удалять ропозитории и нормально поддерживает http/https протоколы.
В итоге очень понравилось два продукта:
  • SCM-Manager (http://www.scm-manager.org/). Поддерживает git, svn и Mercurial репозитории. Авторизацию, визуализацию истории коммитов и др.
  • Gitblit (http://gitblit.com/). Работает только с git репозитариями, визуализация истории/коммитов и др.
Оба продукта вполне работоспособны (все заявленные функции работаю), требуют минимум телодвижений для запуска и настройки. А также довольно легко переносятся с Win на Linux и обратно.

пятница, 3 августа 2012 г.

Миграция на .NET платформу: Начальные сведения о платформе

Чтобы начать хоть что то писать, при переходе с Java, мне потребовалось узнать:

Синтаксис

В большинстве случаев, синтаксис Java и C# похожи. Из незнакомого (и того, что нужно знать "уже сейчас"):
  • out параметры - такого в java нету, а в C# используется довольно часто;
  • Область видимости internal;
  • static class - для любителей "Tools" и "Utils" классов :);
  • виртуальные методы и overriding - это по началу вызвало особые недоумения;
  • индексатор([]) и перегрузка операторов - такого тоже нету в Java, но эти механизмы часто используются;
  • делегаты и events - для меня, это оказались самыми непривычными и непонятными темамию (полезная статья и еще одна);
  • Структуры (structure) - очень похожи на классы, но ведут себя по особенному:) (очень рекомендую почитать).

Коллекции

Структура коллекций и их интерфейсы очень отличается от java collections. Особенно "доставляет" класс Dictionary :) (линк).
Также есть интересная библиотека Power Collections - "типа" commons-collections.

Assembly и зависимости

Принципе, ничего сложного и нового. Просто надо знать что это такое, как его создать и настроить.

Resources (строки, файлы, иконки)

Очень полезная штука. В java вопрос хранения и доступа к внутренним строкам, иконкам и др. файлов решался как попало и чем попало. В .NET у assembly есть контейнер, в котором можно хранить именованные ресурсы. Также есть механизм удобного программного доступа к ним. Особенно это радует при разработке UI модулей и иногда, при написании тестов.

четверг, 2 августа 2012 г.

Миграция на .NET платформу: Базовый инструментарий

Просто читать книги по языку не интересно - хочется надо что то пробовать писать. Для этого необходимо понять:
  • в чем писать (IDE)
  • как это запустить
  • где это все хранить

... в чем писать (IDE)?

Альтернатив как бы особо то и нету. Конечно же, кроме Visual Studio есть сторонние IDE для работы с C# кодом, но больше напоминают поделки студентов.

... как это запустить?

есть нечто напоминающее JDK - .NET framework. Включает в себя виртуальную машину, базовый набор библиотек и инструментарии для отладки и разработки. Похоже, что есть 4 основные (переломные редакции):
  • .NET 1.0 - самая первая и самая убогая версия. В данное время практически не используется.
  • .NET 2.0 - первая доведенная до юзабельного состояния версия. Вылечили многие детские болезни 1.0. Начали интересные синтаксические отличия от Java :)
  • .NET 3.5 - не только язык, но и платформу перекопали на столько, что у многих библиотек появились версии до 3.5, и после 3.5. Также, полным ходом внедряется элементы из функциональных языков.
  • .NET 4.0 - уже не самая новая, но вполне свежая и актуальная версия. "Типа" много усовершенствований, новая версия виртуальной машины CLR, доработан UI фреймверк и т.д.

... где это все хранить?

По поводу кода - у VS есть вполне достойные плагины для работы с SVN и Git репозиториями.
По поводу настроек - тут все немножко сложнее (по сравнению с Eclipse). Настройки проектов и солюшенов хранятся в файлах sln и csproj. Как правило, эти файлы вместе с исходниками находятся под контролем версий. А вот глобальные настройки IDE (горячие клавиши, окна и др.) хранятся в "Мои Документы/Visual Studio XXXX" и об этом желательно не забывать, чтобы после перестановки ОС не было "мучительно больно":)

Миграция на .NET платформу

После долгого писания на Java, выдалась возможность вплотную познакомится с MS .NET. В начале, незнание платформы вызывало чувство раздраженности и полной беспомощности, но позже, начал вырисовываться круг того, что надо выучить, понять и выполнить.
Далее мои основные впечатление о том, как перестроиться на .NET платформу в смысле обустройства рабочего пространства и налаживание эффективной работы.
У меня получилось следующие группы того, что срочно необходимо сделать или узнать, для того, чтобы начать эффективно работать:
  1. Базовый инструментарий - в случае с .NET надо разобраться а) какие .NET Frmaework -и бывают. как их ставить; б) определиться с IDE
  2. Начальные сведения о платформе - а) основы синтаксиса C# б) минимум знаний чтобы создать, скомпилировать и запустить проект
  3. Эффективный локальный инструментарий - инструменты на локальном компе
  4. Основная информация о платформе - а) минимальный набор знаний чтобы начать работать б) места, где можно найти нужную информацию
  5. Базовые фреймверки - xUnit, Mock, UI (RCP, Forms), XML (DOM, SAX, serialization etc)
  6. Инструментарий для жизни проекта - Build tool, CI server etc
Чет дофига получается... поэтому буду вставлять ссылки по мере написания сообщений.

суббота, 28 июля 2012 г.

Java Decompiler

Был замечательный проект JD (Java Decompiler). Но, судя по всему, автор забросил этот проект - обновлений нет уже очень давно, eclispe update site не работает...
Но нашелся добрый человек, который взялся поддержать и допилить этот проект - Mchr3k - JDEclipse-Realign (eclipse update site - http://mchr3k-eclipse.appspot.com/).

вторник, 24 июля 2012 г.

Enterprise интерфейсы

Enterprise приложения имеют корявые интерфейсы. И не просто карявые, а исключительно уродливые и неудобные! (крик души :( )

Исходя из наблюдений, этому есть 2 главные причины:
  • 'Нам это не нужно' или 'некогда заниматься'
  • Дизайн делают программисты


'Нам это не нужно' или 'некогда заниматься'

Как ни странно, но заказчику 'некогда' и 'незачем' всякими там красивостями заниматься. Например, на нескольких последних проектах, заказчик 'не смог' найти подходящие иконки для своих кнопочек, тулбарчиков и и даже 'не нашлось' символики для страниц «about». А уж про всякие там дизайн, юзабилити и прочую ересь даже и вспоминать не приходится.

Дизайн делают программисты

Это вообще отдельный предмет восхищения. Вроде бы умные люди, но как начнут рисовать удобные интерфейсы... Достаточно вспомнить корпоративные системы (Service/Help desk, jira и т.д.). А если еще на запутанные страницы визарды натянуть AJAX – так вообще загляденье получается.

Из недавнего

Образцово-показательный подход программиста к проектированию UI: Есть сущность. Допустим человек. И есть около десятка списков, которые характеризуют связи этого человека – например список детей, машин, сотрудников, домов и т.д. Вообщем совершенно разнородные данные.
Так вот, подход программиста к построению UI для управления этими списками: а давайте сделаем таблицу, в которой каждая колонка будет представлять конкретный список. Т.е. есть таблица с сортировкой по колонкам, выделения выбранной строки раскраской четных строк и т.д.. И в этой таблице первый столбец это 'дети', второй столбец это 'машины', третий это 'сотрудники'. И таких столбцов порядка 10-15!. Возникает 2 вопроса: 'Почему именно так?' и 'Что в этом случае будет представлять строка этой таблицы?'.
Ответы поражают еще больше чем предложенная идея: 'Так будет компактней. А то, что столбцы вообще не связаны другом с другом, дык это не беда. Ведь и так же все понятно.'

Assembly Signing Issue (error CS1577 in VS2010)

Сюрприз мля - 2010-ая студия не умеет нормально подписывать manage C++ проекты. Симптомы: "error CS1577: Assembly generation failed -- Referenced assembly 'BlahBlahBlah' does not have a strong name" Лечится напильником: читать здесь - Proposed Workaround for C++/CLI Assembly Signing Issue with VS2010 SP1

пятница, 22 июня 2012 г.

Один на миллион (перепост)

C# и VS - "первые" впечатления

Очень давно не работал с MS Visual Studio и впервые "серьезно" столкнулся с .NET платформой. Общее впечатление: "Насколько многообещающая платформа и настолько убогая IDE".

Язык

Язык платформа богаче чем Java. Есть много полезных и (не очень) плюшек. Впечатлили region-ы для разметки кода... и MSDN на русском. "По управляемости" и "возможностям языка" C# ближе к С++, чем к Java.

MS VS

Студия - убожество. Такое впечатление, что про рефакторинг в MS "узнали" только в 2010 году. Эффективно работать с кодом невозможно (переход по ссылкам, outliner, открыть класс по имени, открыть класс по имени и т.д.). Комбинации клавиш поражают своим удобством.
Особо порадовало, что в начальных версиях не открываются проекты с юнит тестами. Наверное TDD это очень большая роскошь в мире MS.:)

Тулзы

Пока я плохо представляю, как можно работать в "голой" студии. Впечатлил "решарпер". Продукт делает VS пригодной для жизни для эффективной работы с кодом. Также "впечатлила" стоимость этих продуктов (при том, что эту цифру надо прибавить к стоимости самой студии и M$ Win).

пятница, 1 июня 2012 г.

Пора списывать?


FireFox стал громоздким, тормознутым и нестабильным (IMHO). Единственное что удерживает - FireBug. Еще одна Opera?

пятница, 3 февраля 2012 г.

четверг, 2 февраля 2012 г.

Хороший тутор по SWT Layout

В SWT есть такая штука, как Layout. Как оказалось, без понимания о том, что это такое и как оно работает, работать с SWT/Eclipse RCP просто не получится.

Вот хорошая статья по этому поводу: с картинками, примерами и довольно интересно написанная.

В двух словах:
1. Нужно создать объект Layout. Их несколько видов (читай ссылку). У нас самый ходовой - GridLaout. Надо создать экземпляр нужного типа, настроить и засунуть его в родительский Composit (setLayout()).
2. Для каждого дочернего компонента надо создать экземпляр LayoutData, настроить и установить в дочерний компонент (setLayoutData()).

SCA - результаты использования

Прошло некоторое время, и уже можно сделать некоторые выводы относительно использования SCA.

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

Как это было:

Tycho - первые впечатления

Tycho - maven плагин для сборки плагинов, update site и других запчастей для Eclipse.
В принципе, это очень полезная вещь (для PDE разработчиков). Но есть несколько неприятных моментов, которые мешают полноценной работе:(
Итак, мои впечатления от работы с Tycho: