вторник, 16 октября 2012 г.

Пикселизация текста в IE8

Столкнулся с совершенно непонятной для меня проблемой. В IE8 текст выглядит пикселизированным если для него в css:
font-weight: bold;
Хотя рядом другой текст с точно таким же css выглядит отлично.

Решение оказалось таким же непонятным. Нужно в css добавить следующее:
background-color: white;

среда, 19 октября 2011 г.

Маркированные списки в LibreOffice Writer

Заметил непонятный глюк в LibreOffice Writer (версия 3.4.3). Если документ, содержащий маркированные списки, сохранить в формате doc, то при последующем открытии дефолтный маркер для списка заменяется на другой (какую-то непонятную звезду).

Решение я нашел, но оно просто поражает своей "интуитивностью". Нужно в меню выбрать Tools - Options (Сервис - Параметры), и сделать так, как показано на скриншоте:

среда, 20 июля 2011 г.

VirtualBox 4.1

В только что вышедшем VirtualBox 4.1 появилась возможность клонировать жесткие диски и виртуальные машины не прибегая к помощи командной строки.

вторник, 4 января 2011 г.

Она красива, ветрена, порочна...

Все таки полезно просматривать статистику блога. После просмотра фраз, по которым люди попадают в мой блог, я решил по некоторым из них поискать. И мой поиск принес результаты - я нашел замечательное стихотворение Игоря Терентьева "Она красива, ветрена, порочна...".

вторник, 12 октября 2010 г.

Клонирование жесткого диска VirtualBox

Был очень удивлен, что в VirtualBox нельзя клонировать жесткий диск. Точнее, как оказалось, все таки можно, но с помощью следующей команды в консоли:

VBoxManage clonehd

Не понимаю, почему нельзя было добавить такую возможность в меню программы.

UPD
В VirtualBox 4.1 появилась возможность выполнять это не прибегая к помощи командной строки.

среда, 24 февраля 2010 г.

Apache Cayenne родом из Беларуси

Оказывается Apache Cayenne родом из Беларуси. Вот цитата из газеты "Компьютерные вести":
Мало кто знает, но Apache Cayenne имеет белорусские корни. Основатель проекта, который до передачи его фонду Apache вела компания ObjectStyle, сам родом из нашей страны, и разработка проекта в настоящее время ведется усилиями белорусских разработчиков. Так что можно гордиться нашими земляками, которые сумели создать и продвинуть такой удобный и эффективный ORM-фреймворк.
Ну что сказать, молодцы!

понедельник, 22 февраля 2010 г.

NetBeans Java Shortcuts

В статье "Top 10 Interesting NetBeans IDE Java I never new existed" наткнулся на такой шоткат - если набрать sout и нажать Tab, то получим
System.out.println("");
Жаль не знал об этом раньше. Стоит все таки изучить полный перечень Code Templates (если руки дойдут :)

четверг, 21 января 2010 г.

Интересное сравнение web frameworks для Java

На форуме sql.ru наткнулся на ссылку на статью про интересное сравнение фреймворков для создания web-приложений для Java. Забавно :)

вторник, 10 ноября 2009 г.

JRuby и логи 2

Я уже писал, что для логирования в jruby я использую Logging. Сегодня обновил эту библиотеку до версии 1.2.2. И как оказалось ей для работы требуется еще одна дополнительная библиотека - little-plugger. Это уже третья дополнительная библиотека. Что-то многовато...

понедельник, 7 сентября 2009 г.

Докатились...

Вчера, спускаясь в подъезде по лестнице, мы с женой взглянули в окно и увидели несколько мальчишек 7-8 лет, которые стояли прямо перед подъездом и... курили. Когда мы вышли из подъезда, мальчишки бросились в рассыпную. Сигарета была одна на всех, но от этого не легче. Мне вот интересно, что их сподвигло на это? Желание быть взрослым?

среда, 26 августа 2009 г.

Как найти себя?

Очень понравилось высказывание Олега Сатова:
Вопросов об этом задается много — «Как найти себя? Как найти работу по душе? Как достичь успеха?» Ответ на все эти вопросы один — изучайте и следуйте за собственными интересами. Делайте то, что нравится ВАМ, даже если это идет вразрез с тем, чего от вас ожидают окружающие. Это единственный способ быть в миру с собой и при этом занять свое место в жизни, в том числе и социальной.
Полностью с ним согласен.

среда, 29 июля 2009 г.

Разработчики JRuby переезжают

Сегодня новостная лента пестрит сообщениями о том, что разработчики JRuby ушли из Sun в Engine Yard. В одном из сообщений есть предположение, что после покупки Sun'а Oracle'ом некоторым продуктам Sun грозит исчезновение, в том чимле и JRuby. Что ж, если это так, то надеюсь этот шаг позволит не исчезнуть JRuby.

пятница, 24 июля 2009 г.

JRuby - новая версия и новый сайт

Зашел я на сайт JRuby и увидел, что дизайн-то сменился. Надо сказать, что очень красиво получилось.

Кроме этого, увидел, что уже больше месяца назад вышла новая версия - 1.3.1. Что-то я стал пропускать события из мира JRuby. Несмотря на то, что в новой версии сайта появилась иконка RSS, самого RSS на сайте до сих пор нет :(

UPD
Начал копаться на сайте и нашел ссылку на блог JRuby Team Blog, который появился чуть раньше выхода JRuby 1.3.1. Подписался на RSS этого блога.

пятница, 17 июля 2009 г.

Валидаторы в JVCL. Часть 2

Начало в предыдущем посте.

Валидация с помощью JvValidators

У компонента JvValidators реализуем обработчик события OnValidateFailed. Обработчик предназначен для вывода сообщений об ошибке и может выглядеть так:
RichEdit1.Lines.Add(Format('%s',[BaseValidator.ErrorMessage]));
Естественно, вместо RichEdit можно взять любой другой компонент.

Валидация осуществляется с помощью следующего кода:
JvValidators1.Validate;
Валидация с помощью JvValidationSummary
Размещаем на форме компонент TJvValidationSummary и получаем JvValidationSummary1. У компонента JvValidators1 устанавливаем свойство ValidationSummary в значение JvValidationSummary1 и реализуем обработчик события OnChange. Обработчик предназначен для вывода сообщений об ошибке и может выглядеть так:
RichEdit1.Lines.Text :=
TJvValidationSummary(Sender).Summaries.Text;
Валидация осуществляется с помощью следующего кода:
JvValidationSummary1.Summaries.Clear;
JvValidators1.Validate;
Валидация с помощью JvErrorIndicator
Размещаем на форме компонент TJvErrorIndicator и получаем JvErrorIndicator1. У компонента JvValidators1 устанавливаем свойство ErrorIndicator в значение JvErrorIndicator1. Валидацию можно осуществить с помощью следующего кода:
JvErrorIndicator1.BeginUpdate;
try
JvErrorIndicator1.ClearErrors;
JvValidators1.Validate;
finally
JvErrorIndicator1.EndUpdate;
end;
Рядом с элементами управления, не прошедших валидацию, появится предупреждающая иконка:

За ее появление отвечает компонент JvErrorIndicator.

При необходимости сообщение об ошибке можно куда-нибудь вывести, но при большом количестве валидаторов удобно реализовать метод, который облегчит нам работу. Сигнатура метода следующая:
procedure ProviderErrorValidateFailed(Sender: TObject; BaseValidator: TJvBaseValidator; var Continue: Boolean);
Код метода может выглядеть например так:
JvErrorIndicator1.Error[BaseValidator.ControlToValidate]:= BaseValidator.ErrorMessage;
RichEdit1.Lines.Add(Format('%s', [BaseValidator.ErrorMessage]));
Надеюсь, чта это информация кому-нибудь пригодится :)

четверг, 16 июля 2009 г.

Валидаторы в JVCL. Часть 1

Вчера полдня потратил на то, чтобы разобраться как работать с валидаторами из библиотеки JVCL. В интернете никакой информации на эту тему нет, хелп самой библиотеки оказался крайне скуп. Пришлось разбираться с исходниками примеров, которые к сожалению оказались не слишком очевидны. Тем не менее, все оказалось достаточно просто.

Итак, на палитре компонентов в пункте «Jv Validators» имеем три компонента:
  • TJvValidators – фактически содержит список компонент типа TJvBaseValidator или их наследников;
  • TJvValidationSummary — является коллекцией для сообщений об ошибках при неудачной валидации;
  • TJvErrorIndicator — предоставляет пользовательский интерфейс для индикации ошибки в элементе управления.
Размещаем на форме компонент TJvValidators. Соответственно получаем JvValidators1. Далее на панели «Structure» на JvValidators1 нажимаем правой кнопкой и выбираем в появившемся меню пункт «JvValidators Items Editor...»:

В появившемся редакторе добавляем валидатор необходимого типа:

После этого уже можно работать с валидатором. Рассмотрим их подробнее. У валидаторов всех типов есть общие свойства:
  • ControlToValidate - элемент управления, с которым ассоциируется валидатор;
  • ErrorMessage - сообщение об ошибке;
  • PropertyToValidate - свойство элемента управления, подлежащее валидации;
  • Valid - результат валидации.
Required Field Validator используется для проверки наличия значения какого-либо свойства у элемента управления (например, у компонента TEdit можно проверить свойство Text, т.е. ввел пользователь что-нибудь или нет).

Regular Expression Validator используется для проверки соответствия значения какого-либо свойства элемента управления регулярному выражению (например, для вышеупомянутого TEdit можно проверить сответствует ли заданному регулярному выражению свойство Text, т.е. введенные пользователем данные). Регулярное выражение указывается в свойстве ValidationExpression.

Range Validator используется для проверки вхождения значения какого-либо свойства элемента управления в заданный диапазон. Минимальное и максимальное значения диапазона указывается в свойствах MinimumValue и MaximumValue. Кроме этого, у этих свойств имеется свойство Type, в котором указывается тип минимального и максимального значений диапазона. (Для компонента TUpDown можно проверить свойство Position.)

Custom Validator позволяет выполнить произвольную проверку какого-либо свойства элемента управления. Для этого необходимо реализовать обработчик события OnValidate. Сигнатура обработчика выглядит следующим образом:
procedure JvCustomValidator1Validate(Sender: TObject; ValueToValidate: Variant; var Valid: Boolean);
В параметре ValueToValidate содержится значение свойства элемента управления, указанное в свойстве PropertyToValidate валидатора. Все необходимые проверки необходимо производить с этим параметром, и в случае успешного результата параметру Valid необходимо присвоить значение True, в обратном случае — False.

Compare Validator позволяет сравнить значение какого-либо свойства элемента управления со значением, задаваемым с свойстве ValueToCompare валидатора. Также в свойстве Type можно указать тип этого значения. Свойство Operator позволяет задать оператор, при помощи которого будет производиться сравнение (менее чем, менне или равно и т.д.).

Controls Compare Validator позволяет сравнивать значения какого-либо свойства двух элементов управления (видимо одинакового типа). Свойство элементов управления для сравнения задается в свойстве валидатора PropertyToValidate, свойство Operator аналогично описанному в предыдущем пункте. Второй элемент управления задается в свойстве валидатора CompareToControl.

Продолжение в следующем посте.

четверг, 11 июня 2009 г.

Netbeans 6.7 RC2 на русском языке?

Сегодня скачал и установил недавно вышедший Netbeans 6.7 RC2. Не ожидая никакого подвоха запустил и... был удивлен, когда на splash-screen'е увидел мелькающие сообщения на русском языке. Через несколько мгновений появился сам Netbeans, и я увидел, что меню тоже на русском языке, но неполностью. Как-то неприятна такая мешанина русского и английского языка... Да и непривычно на русском. И что самое интересное, я не нашел как это отключить.

UPD
В релизе все опять на английском. Сразу стало привычнее :)