В целом, я читаю мало и это конечно очень печально. Но если честно, редко попадаются книги, которые не выносят, а вправляют мозг. Первые я обычно бросаю на второй сотне страниц, потому что мне и на работе хватает сложностей, чтобы их еще прибавлять себе чтивом. Как по мне, писатель-технарь(или манагер) должен писать просто и доступно и очень захватывающе. Хороший пример роман DeadLine.
Но сегодня я хочу написать о книге Head First Design Pattern от Kathy Sierra.
Head First Design Pattern on Amazon
Паттерны (и принципы ооп) это то, что должен знать и понимать каждый программист, но одолеть произведение Большой Четверки я если честно заставить себя не могу и не смогу никогда это факт. А вот найти достойную, но более веселую замену я хотела всегда, просто до сих пор это было не выполнимой задачей. Поэтому о паттернах у меня сложилось весьма размазанное и не структурированное знание.
И вот оно чудо :) Head First Design Pattern написана так, что чтение становится увлекательным. Разжевано все до мелочей в лучших американских традициях, но в тоже время нет постоянных повторений, зацикливаний и нудятины на Н страниц, которые обычно так раздражают русского читателя. Много иллюстраций, схем и прочего. Неожиданно грамотные и короткие примеры, над которыми можно крепко подумать. Много диалогов, в которых почти всегда можно найти ответы на свои вопросы:)
В общем, весело и рекомендую тем кто чувствует пробелы в своих знаниях:)
Кстати примеры на Java.
среда, 2 марта 2011 г.
uDig: Как убрать Tool с CoolBar'a:
Описанный в предыдущем посте подход тем не менее не сработал для элементов uDig coolbar'a. Поэтому пришлось сочинять, кое что дополнительное. Надо сказать, что uDig производил и производит на меня угнетающее впечатление отсутствием документации, тем не менее зацепка нашлась:
http://www.mail-archive.com/udig-devel@lists.refractions.net/msg05384.html
однако в новых версиях совсем по жесткому хардкорить уже не надо. В целом получилось вполне симпотично:
1. Добавляем extension point:
2. Этот extension point лишь регистрирует "кандидатов" в ToolManager'ы. Но тот, который будет рулить в вашем плагине задается в Preferences с ключом IToolManager.P_TOOL_MANAGER. Мы можем задать это значение явно прописав в файле plugin_customization.ini:
3. Tеперь у нас есть кастомный ToolManager и можно бесчинствовать сколько влезет. К тому же специально для преследуемой нами цели авторы Udig оставили костыль. Перееопределяем метод filterTool в котором отфильтровываем все тулы, которые не нужны:
4. Запускаем и радуемся, что исчезла вторая часть не нужных элементов :)
http://www.mail-archive.com/udig-devel@lists.refractions.net/msg05384.html
однако в новых версиях совсем по жесткому хардкорить уже не надо. В целом получилось вполне симпотично:
1. Добавляем extension point:
<extension
point="net.refractions.udig.project.ui.toolManagers">
<toolManager
class="com.neopux.udigproject.plugin.CustomUDIGToolManager"
id="com.neopux.udigproject.customUDIGToolManager">
</toolManager>
</extension>
И класс CustomUDIGToolManager, который наследуем от ToolManager.2. Этот extension point лишь регистрирует "кандидатов" в ToolManager'ы. Но тот, который будет рулить в вашем плагине задается в Preferences с ключом IToolManager.P_TOOL_MANAGER. Мы можем задать это значение явно прописав в файле plugin_customization.ini:
net.refractions.udig.project.ui/toolManager = com.neopux.udigproject.customUDIGToolManager
3. Tеперь у нас есть кастомный ToolManager и можно бесчинствовать сколько влезет. К тому же специально для преследуемой нами цели авторы Udig оставили костыль. Перееопределяем метод filterTool в котором отфильтровываем все тулы, которые не нужны:
@Override
protected boolean filterTool(String categoryId, ToolProxy proxy,
Class categoryType)
{
String filter = "net.refractions.udig.tool.info.infoMode";
return filter.equals(proxy.getId());
}
4. Запускаем и радуемся, что исчезла вторая часть не нужных элементов :)
пятница, 25 февраля 2011 г.
Eclipse RCP: Фильтрация UI элементов.
Недавно столкнулась с задачей по отфильтровыванию из моего плагинчика элементов графического интерфейса чужих плагинов.
Суть в том, что вместе со всеми чудесами и приятностями uDig'овского интерфейса, мой плагин наследует от него пару не нужных
мне совершенно кнопок и views, вот и пришлось их выкарчевывать. Ниже описывается стандартный для Eclipse подход.
1. Добавляем экстенш пойнт org.eclipse.ui.activities (примочка появилась с версии 3.0). В целом экстенш используется для управления элементами
пользовательского интерфейса и дает возможность временно или перманентно отфильтровывать эти элементы.
2. Создаем свою activity, задаем ей name и id. По умолчаию activity задизаблена. Тем не менее любители андерстабельных
xml'ей могут прописать явно:
3. Биндим activity:
4. Радуемся что view исчезла :)
Суть в том, что вместе со всеми чудесами и приятностями uDig'овского интерфейса, мой плагин наследует от него пару не нужных
мне совершенно кнопок и views, вот и пришлось их выкарчевывать. Ниже описывается стандартный для Eclipse подход.
1. Добавляем экстенш пойнт org.eclipse.ui.activities (примочка появилась с версии 3.0). В целом экстенш используется для управления элементами
пользовательского интерфейса и дает возможность временно или перманентно отфильтровывать эти элементы.
2. Создаем свою activity, задаем ей name и id. По умолчаию activity задизаблена. Тем не менее любители андерстабельных
xml'ей могут прописать явно:
<enabledWhen>
<with variable="true">
<equals value="false"/>
</with>
</enabledWhen>
3. Биндим activity:
<extension point="org.eclipse.ui.activities">
<activity name="Disablement" id="disablement">
<enabledWhen>
<with variable="true">
<equals value="false"/>
</with>
</enabledWhen>
</activity>
<activityPatternBinding activityId="disablement"
pattern="net.refractions.udig.tool.info/net.refractions.udig.tool.info.infoView"/>
</extension>
4. Радуемся что view исчезла :)
воскресенье, 16 января 2011 г.
Java вкусности: отрицаем, отрицаем, да не выотрицаем.
(запостчено позднее чем написано, все-таки по воскресеньям еще не работаем:)
Бывают такие нудные дни, когда компиляция отбирает все силенки у моего компа, и валится каждый раз за несколько минут до конца (причем не на моем. бля,
коде!)...Тогда остается только жрать печеньки и курить сановские трейлы. Сегодня как раз такой день, и поэтому я накопала интересную штуку:
Знаете, что выражение (-Integer.MIN_VALUE == Integer.MIN_VALUE) всегда верно? Если не знаете, то задумайтесь над этим.
Но фишка в общем-то не в этом. С одной стороны этот факт чистая теория, с другой он приводит к тому, что, например, делать так:
return -r1.name.compareTo(r2.name);
для получения обратного порядка сортировки, просто не прилично. Ведь, по джава доку, compareTo() может вернуть любой инт, а не только привычные -1, 0 и 1.
Бывают такие нудные дни, когда компиляция отбирает все силенки у моего компа, и валится каждый раз за несколько минут до конца (причем не на моем. бля,
коде!)...Тогда остается только жрать печеньки и курить сановские трейлы. Сегодня как раз такой день, и поэтому я накопала интересную штуку:
Знаете, что выражение (-Integer.MIN_VALUE == Integer.MIN_VALUE) всегда верно? Если не знаете, то задумайтесь над этим.
Но фишка в общем-то не в этом. С одной стороны этот факт чистая теория, с другой он приводит к тому, что, например, делать так:
return -r1.name.compareTo(r2.name);
для получения обратного порядка сортировки, просто не прилично. Ведь, по джава доку, compareTo() может вернуть любой инт, а не только привычные -1, 0 и 1.
Подписаться на:
Сообщения (Atom)