Архив категории «Разработка»
Трудности перевода
Несколько раз пришлось столкнуться с проблемами при чтении/записи кириллицы на Java. К примеру, есть файл в кодировке UTF-8, который читается с помощью java.io.FileInputStream. В результате русские буквы портятся. Бывает, что портятся не все, а только «И» и «ш». Проблема проявляется только на Windows, классический случай — разработчик сидит на Linux: «а у меня всё работает!».
Пришло время привести в порядок базовые знания.
04.02.2010
Метки: Java Рубрики: Разработка, Языки
Комментариев нет
Если не запускается Eclipse
Пару месяцев назад разбирался, почему у коллеги Eclipse отказывается стартовать, выдавая вот такое окошко:

Решение нашел и благополучно забыл. А сегодня эта напасть добралась и до моего ноутбука. Еле вспомнил решение: надо в файле eclipse.ini уменьшить значение параметра --launcher.XXMaxPermSize, экспериментально подобрать максимум, при котором Eclipse стартует. Смешно, в свое время боролись с другой ошибкой — во время работы Eclipse жаловалась, что PermGen space не хватает (точный текст уже не помню). А лечилось это увеличением значения того же параметра. Много хорошо — тоже плохо...
17.12.2009
Метки: Eclipse Рубрики: Инструменты, Разработка
Комментариев нет
Google выкатил Simple
Google изобрел велосипед придумал BASIC Simple. Это диалект BASIC для разработки приложений на платформе Android. Исходные файлы на Simple описывает компоненты — формочки и код, причем формочки в текстовом виде описаны в файле с кодом. Предполагается, что среды разработки будут скрывать текстовое описание GUI, предоставляя визуальный редактор.
Начнем с названия. Люди из этой компании вообще думают, как это искать?
Игрался я с языком, который называется Nice. Как вы считаете, сколько результатов Гугл выдаст по запросу Nice Programming Language? 2.5 миллиона! И это для малоизвестного языка. А для только что объявленного Simple Programming Language уже почти 19 миллионов!
Естественно, проект расположился на Google Code. Интересно стало посмотреть в исходники, тема трансляторов мне близка (TreeDL хоть и дает всего 1.5 тыщи ссылок, зато релевантность существенно выше). Транслятор Simple написан на Java 6. Парсер рукописный, дерево гетерогенное, рукописное. Классы для узлов дерева содержат методы для генерации байт-кода JVM (У Microsoft на .NET был Basic, теперь и на JVM есть
). Решение достаточно эффективное, но плохо расширяемое.
Прежде чем на Windows удалось скомпилировать пустую программу, пришлось исправить три критические ошибки. Забавно, первые четыре баг-репорта — мои. Для версии 0.1.0 это, конечно, простительно, но осадочек остался. Нехорошо это — выкладывать сборку для платформы и ни разу ее не запустить... Впрочем, у проекта, похоже, один участник — Herbert Czymontek, он же simplecompiler.
Но самое главное — пока, судя по всему, есть только язык и транслятор с библиотекой. Средств визуального проектирования GUI нет. А пока их не будет, Simple своё название не оправдает. Впрочем, даже если они будут, не понимаю, чем BASIC проще нормальных языков. Ладно, поживем — увидим, деньги могут многое.
30.07.2009
Метки: Google Рубрики: Разработка, Языки
Один комментарий
Конфликт Venkman Debugger и Firebug в Firefox 3.5
После обновления Firefox до 3.5 и соответствующих обновлений расширений в Venkman Debugger перестали работать точки останова. Говорят, это конфликт с Firebug. Действительно, если выключить Firebug, точки останова начинают работать. Ну и что мне делать, если Firebug понадобится? Судя по отзывам, Firebug 1.4 сырой, можно попробовать откатиться на 1.3.3.
27.07.2009
Метки: Firebug, Firefox, Venkman Debugger Рубрики: Mozilla, Разработка
Комментариев нет
Улучшенный поиск автомобиля на auto.ru
Предлагаю вашему вниманию Greasemonkey скрипт, который обрабатывает результаты поиска автомобилей на cars.auto.ru:
- Все страницы таблицы результатов объединяются в одну.
- В таблицу результатов добавляются опции и другая информация из объявлений, которая отсутствует в стандартном варианте.
- В таблицу добавляются кнопки, позволяющие удалить запись об автомобиле или информацию об опции.
Все это позволяет анализировать результаты поиска не открывая дополнительных страниц.
Вот пример стандартного вывода результатов и вид таблицы результатов, обработанной скриптом (подсказка всплывает при наведении курсора на ссылку на объявление):
26.07.2009
Метки: Firefox, Greasemonkey, JavaScript, автомобили Рубрики: Mozilla, Интернет, Программы, Разработка
Один комментарий
Конфликт расширений для Firefox
На бегу, потому в двух словах:
Кажется, нашлась причина конфликта расширений для Firefox. Симптомы: при установленном «неправильном» расширении пропадают кнопки на панели инструментов расширения Web Developer, а у Firebug на вкладке HTML исчезает текст. Популярное решение View -> Toolbars -> Customize -> Restore Default Set не спасает.
Удаляя по одному файлы «неправильного» расширения дошел до prototype.js, который, как известно, меняет базовые классы типа Object. В этом, видимо, и причина...
Вопрос: можно ли как-нибудь все-таки использовать prototype.js в расширениях для Firefox? И как его правильно подключать? Сейчас в browserOverlay.xul тупо стоит
<script src="prototype.js"/>
03.07.2009
Метки: Firefox, JavaScript, prototype.js, XUL Рубрики: Mozilla, Разработка
Один комментарий
XUL Gear (ex. XULPIX): визуальный редактор для XUL
Очень я не люблю заниматься разработкой графических интерфейсов (GUI) — дело муторное, трудоемкое, результаты часто не заметны. Но иногда приходится. Платформа Mozilla, где для декларативного определения пользовательского интерфейса используется язык XUL, основанный на XML, а для определения поведения — JavaScript, почти примирила меня с этим занятием. Для полного счастья требовалось найти визуальный редактор, который позволяет обойтись без написания XUL кода вручную и сразу же показывает результат. И тут есть две новости, как всегда — одна хорошая, и одна плохая, но не очень. Хорошая новость в том, что такой редактор нашелся — это XUL Gear. Плохая — автор Kenchabi его не поддерживает, не очень — потому что первоначальная версия редактора была переименована из XULPIX в XUL Gear и выложена под открытой лицензией на Google Code.
19.06.2009
Метки: XUL, xulgear, XULPIX Рубрики: Mozilla, Инструменты, Разработка
Комментариев нет
blink и underline в XUL
Понадобилось в XUL сделать мигающим текст метки. Попробовал text-decoration:blink — не работает. Погуглил — чудеса, оказывается, текст мигает только если он внутри тега label, а не в атрибуте value. Самое смешное, что подчеркивается он строго в обратной ситуации, то есть сделать одновременно мигающий и подчеркнутый текст, похоже, невозможно
Firefox покажет результат здесь:
Если вы видите этот текст, значит ваш браузер не поддерживает фреймы
<?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin" type="text/css"?> <?xml-stylesheet href="mycss.css" type="text/css"?> <window title="test01.xul" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <groupbox> <caption label="Underline problem"/> <label style="color: red;text-decoration: underline">Text as element content: underline doesn't work.</label> <label style="color: red;text-decoration: underline" value="Text as an element attibute: underline works!"/> </groupbox> <groupbox> <caption label="Blink problem"/> <label style="color: red;text-decoration: blink">Text as element content: blink works!</label> <label style="color: red;text-decoration: blink" value="Text as an element attribute: blink doesn't work."/> </groupbox> </window>
Пример подсмотрен на форуме xulfr.org.
17.06.2009
Метки: CSS, Firefox, XUL Рубрики: Mozilla, Инструменты, Разработка
Комментариев нет
Ruby: рассуждения о наследовании
Конечно, классы в Ruby открыты для расширения. Но порядок интерпретации влияет на результат. Пример:
class A end class B < A end class B def m end end
Так работает. Но если поменять местами два последних определения, то возникает сообщение об ошибке: superclass mismatch for class B (TypeError), поскольку указать базовый класс можно только при первоначальном определении класса.
Вообще, возможность добавления методов в существующий класс заставляет переосмыслить роль механизма наследования. На первый взгляд, в Ruby с открытыми определениями классов, динамической типизацией и duck typing наследование не требуется!
Программисты, «думающие» на C++/Java часто используют наследование не по назначению. Обсуждая с коллегой вопрос «зачем нужно наследование?» я наткнулся на быстрый ответ: для переиспользования кода. В этом и есть корень зла — при отсутствии нормальных механизмов повторного использования кода в этом качестве начинают использовать наследование. Но в Ruby-то такие механизмы есть. Так зачем наследование?
Похоже, что в Ruby и подобных языках наследование вернулось к своему первоначальному назначению — выразить намерение программиста, что один тип является подтипом другого. Кстати, если вспомнить принцип подстановки Лисков (Liskov substitution principle), то становится понятно, что подтип (subtype) тесно связан с подстановкой (substitution).
Вывод: используйте наследование в первую очередь как способ описания используемой модели, проектного решения. А уж потом реализуйте в классах требуемые методы.
07.04.2008
Метки: Ruby Рубрики: Разработка, Языки
4 комментария
Ruby: всякая всячина
Продолжаю погружаться в мир Ruby. Для систематического рассказа пока не время, но путевых заметок уже накопилось, пора записывать для памяти.
25.03.2008
Метки: Ruby Рубрики: Разработка, Языки
Комментариев нет

