No comments, OSCON 2008.
Идеи приходящие в голову. Надеюсь они кому-то помогут. Заранее благодарен за комментарии.
Saturday, September 6, 2008
Семинар It-Talk
Содержание можно посмотреть по ссылке выше.
Жаль только что пропустил первый семинар.
Saturday, August 23, 2008
Простенький броузер
Маленькое отступление:
- Выбор был основан на том что дистрибутивы основаные на пакетах я уже пробовал - не понравилось: так как все равно сам все пытался перекомпилить и установить не стандартные версии :-)
- И перешел на LFS все сам руками установил:-) Поставил нужные мне версии приложений - создал подобие системы установки используя как основу скрипты из установщика Gnome - Garnome.
- Он у меня простоял полгода:-) И тут мне захотелось купить ноутбук. Вот он как раз AMD64 и не него я решил перенести результаты своих трудов - и появились проблемы на 64 битной платформе все было не так гладко: не мог подобрать нужные драйвера под контролер жеских дисков -- нашел нужны а он у меня после компиляции отказывался работать.
- И я вернулся на Ubuntu:-) но долго терпеть не мог. Так Gentoo стояла у моего друга на компьютере, я решил найти что - то подобное, но не Gentoo - в ней был старый гном, а Lunar более новый(мне тогда это казалось достаточно важным - теперь я не особо замечаю различия между версиями или они действительно стали очень мелкими).
- И выбор был сделан с тех пор я пользуюсь им:-) Не все конечно так отлажено как в Gentoo, но очень даже не плохо:-)
- он может нормально обрабатывать кодировки пришедших страниц(gtkhtml понимает только utf8) ;
- он может отобразить html стриницу с картинками:-);
- Он оправляет запросы в независимости от исходной кодировки страницы utf;
- Очень часто ошибаеться в относительных путях если часть стриниц имеет разный путь откуда отсчитываеться относительный путь (причина очень проста - в gtkhtml не храниться кодировка страницы и путь с которого она загружена - сейчас не могу говорить точно может уже и исправили);
- И ужасный интерфейс без кнопочек назад и указание на какую страницу только в логах на терминал.
Вот и весь проект...
Wednesday, August 20, 2008
SilverLight WPF
Sunday, August 17, 2008
SilverLight и Visual Studio Express 2008
Надеюсь это кому-то поможет...
Основа опыта здесь. Но получилось это сделать немного правильнее по моему мнению.
Более подробно можно посмотреть по указанной выше ссылке.
Скачать установочный пакет SilverLight можно с официального сайта.
Удачи всем:-)
Wednesday, August 6, 2008
Портирование приложений СSharp на mono
Начальные действия.
Первое и самое важное что нужно сделать это определить какой именно функционал требуется в результате портирования. Так как скорее всего в результате портирования получается несколько урезанная версия в связи с ограничениями реализации mono и возможным использованием недокументированные функций из .NET в результате чего приложения будет работать некорректно.
Определить, где хранятся основные файлы приложения и важность именно такого расположения файлов и конфигураций. Хранение данных в реестре и использование установочных пакетов удобно в Wiondows, при запуске под Linux второе не используется, а для первого нужно самому внести все данные в реестр. В моем случае это было не критично так как в реестре храниться только версия установленного приложения в системе. И как следствие приложение не сможет себя автоматически обновить.
Для определения соответствия путей можно воспользоваться расположенным ниже списком:
- Environment.SpecialFolder.ApplicationData===домашний каталог/.config
- Environment.SpecialFolder.CommonApplicationData===/usr/share
- Environment.SpecialFolder.CommonProgramFiles===пустое значение
- Environment.SpecialFolder.Cookies===пустое значение
- Environment.SpecialFolder.Desktop===домашний каталог/Desktop
- Environment.SpecialFolder.DesktopDirectory===домашний каталог/Desktop
- Environment.SpecialFolder.Favorites===пустое значение
- Environment.SpecialFolder.History===пустое значение
- Environment.SpecialFolder.InternetCache===пустое значение
- Environment.SpecialFolder.LocalApplicationData===домашний каталог/.local/share
- Environment.SpecialFolder.MyComputer===пустое значение
- Environment.SpecialFolder.MyDocuments===домашний каталог
- Environment.SpecialFolder.MyMusic===домашний каталог/Music
- Environment.SpecialFolder.MyPictures===домашний каталог/Pictures
- Environment.SpecialFolder.Personal===домашний каталог
- Environment.SpecialFolder.ProgramFiles===пустое значение
- Environment.SpecialFolder.Programs===пустое значение
- Environment.SpecialFolder.Recent===пустое значение
- Environment.SpecialFolder.SendTo===пустое значение
- Environment.SpecialFolder.StartMenu===пустое значение
- Environment.SpecialFolder.Startup===пустое значение
- Environment.SpecialFolder.System===пустое значение
- Environment.SpecialFolder.Templates===пустое значение
После того как определились с где будет приложение пытаться получить свои настройки нужно запустить анализатор кода. При его запуске нужно ему указать все используемые библиотеки и исполняемые файлы используемые в проекте. В результате мы получим список не реализованных или реализованных не корректно функций из стандартной библиотеки.
Заменить в проекте все сообщения об ошибках на более информативные с указание стека выполнения. На пример: я добавил новый компонент которые отображает ошибку и в текстовом поле под ним отображает полный стек. Это очень важно так как исключения могут возникать по самым на первый взгляд безобидным причинам и приложение будет отказываться работать.
Установить последнюю версию mono и monodevelop - последнюю - так как скорее всего, именно в ней будет реализовано максимум возможностей из .Net. Если есть ограничение на дистрибутив максимально свежую из доступных в нем.
Сделать копию описания проекта и назвать его как нибудь на подобии проект_под_VS. После этого открыть проект под VS в monodevelop - при открытии, если был установочных проект, то среда сообщит, что он не передерживается. Это нормальная реакция системы после этого проект будет уже сохранен без не поддерживающихся частей и в результате для создания установочного пакета нужно будет использовать копию проекта сделанную ранее. В остальном проект можно использовать в на обоих платформах.
При компиляции возникает 2 типа ошибок(возможен и третий но очень редко.):
- Не корректно по мнению компилятора написанный код - возможно прийдеться раставить в местах ошибок дополнительные скобки чтобы исправить неоднозначности кода.
- Не корректная кодировка файла - самая подлая ошибка:-) Для избежания ее нужно все файлы используемые в проекте перевести из cp1251 в utf8. Ее симптомы компилятор ругается на нормальный на вид код и приложение работает неправильно , идет не по тем путям куда должно было. В моем случае некоторые элементы имели русское название и отображались не те формы или не те компоненты и не срабатывали нужные реакции.
- Не реализованы какие-то функции вообще никак, отсутствие некоторых свойств - очень редкое событие, но вполне возможно. Единственный метод решения этой проблемы не использовать этот код.
Запускаем приложение
При запуске приложения видим, что оно работает как то не корректно, но ошибок не выдает - возможно не все файлы были переведены в нужную кодировку или скрываете ошибки от пользователей. Если первое заменяем кодировку, во втором случае добавляем отображение ошибок. Если указанные выше действия не привели к ожидаемому результату, пробуем отключить часть кода и заставить приложение выводить сообщения по ходу работы.
Если появляются исключения ищем по стеку место, где происходит исключение и заменяем код на более универсальный и стандартный с проверкой всех возможных ошибок если это раннее не сделано. Разработчики предлагают попытаться заменить код эквивалентным - обычно есть несколько способов определить что с компонентом произошли изменения(изменен выбранный текст(в списке выбран другой элемент) и изменился текст). Возможен случай когда это сделать нельзя тогда проверяем возможно можно заменить двойной клик одинарным и тому подобное.
В результате мы определяем какой код является не работоспособным и можем определить какая функциональность будет заменена или вообще отключена.
Теперь добавляем код определения код какой платформой запущено приложение, чтобы можно было на основе этих данных отключать или заменять функции.
Пример таких функций:
///
/// Запущены под моно
///
///нужно урезать объем отображения
public static bool IsRunningOnMono()
{
return Type.GetType("Mono.Runtime") != null;
}
///
/// Запущена не под XP(Считаем ее самой распространенной пользовательской системой)
///
///
public static bool IsTerminalServer()
{
return !(Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor == 1);
}
///
/// Запущены под юникс
///
///нужно запретить специфичные для виндоус операции
public static bool IsUnix()
{
return Environment.OSVersion.Platform == PlatformID.Unix;
}
Исправление внешнего вида
На этом шаге нужно изменить размеры всех элементов которые по каким-то причинам съехали или расползлись. Эта часть скорее относиться к дизайну, а не к функционалу. Но если ее не выполнить приложение будет очень не удобно использовать.
Как результат мы получим приложение которое можно тестировать(бета версия).
Исправление функционала
Зачем это все надо
- При компиляции мы можем обнаружит части кода которые по каким-то причинам были не завершены или сделаны не качественно - присутствуют не используемые переменные, не проверяются ответы от функций и параметры функций не проверяются на корректность.
- Приложение, когда это потребуется, можно будет портировать, и затратить на это меньше времени.
- И как следствие предыдущего факта при смене версии ос даже на одной платформе (XP -> Vista) с большей вероятностью будет работать.