четверг, 3 декабря 2009 г.

Чтобы не потерялось: расшифровка кодов ошибок программ Microsoft

Вот тут есть описание того, как выяснить по коду ошибки (откуда-нибудь из Events Log) что именно сломалось в программе/сервисе от Microsoft. Основной принцип следующий:
Для того чтобы докопаться до истины нам нужно взять из кода ошибки 0x800706ba последние четыре цифры 06ba. Затем с помощью калькулятора или вручную перевести их в десятичную систему исчисления. Получаем число 1722. Идем на сайт MSDN и смотрим там текстовое описание ошибки: http://msdn.microsoft.com/en-us/library/ms681381(VS.85).aspx

Тестирование сайта на нагрузку

Набор ссылок на сайты, которые умеют тестировать веб-сайты на нагрузку:

вторник, 1 декабря 2009 г.

Анализ выполнения SQL-запроса в MS Sql

А знаете ли вы, что в MS Sql можно использовать команду SET SHOWPLAN_ALL ON/OFF, чтобы посмотреть как именно выполняются запросы и, соответственно, вовремя что-то поправить для получения большей производительности. Использовать можно вот так:

USE [MusicInfo.old]
GO

SET SHOWPLAN_ALL ON
GO

SELECT artists.name, albums.title, albums.uid_album
FROM dbo.albums, dbo.artists
WHERE dbo.albums.uid_artists=artists.uid_artists and artists.name='Taylor Swift'
GO

SET SHOWPLAN_ALL OFF
GO
Результат выглядит вот так:



А подробнее о возвращаемых значениях можно почитать в MSDN.

пятница, 27 ноября 2009 г.

Как отлавливать лаги в программе


Стоит взять метод на вооружение:
Природа лагов может быть разной, но сейчас речь пойдет о внутрисерверных лагах. То есть когда процесс игрового сервера, вместо того чтобы быстро обрабатывать запросы игроков, длительно тупит, занимаясь чем-то непотребным.

Чтобы выяснить, чем же именно непотребным занимается сервер во время лагов, была сделана очень простая штука: lag detector. Это специальный thread, который каждые 50 миллисекунд просыпается и смотрит на счетчик внутреннего цикла основного рабочего потока. Если счетчик не менялся уже длительное время (например, 200 миллисекунд), то что-то не в порядке. Lag detector пишет в лог сообщение об ошибке и call stack основного потока.

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

воскресенье, 22 ноября 2009 г.

Отличие операции приведения типа от оператора as

По ссылке - подробнее, а основное вот:

Во-первых, поскольку результатом оператора «as» может быть null, целевым может быть только такой тип, который допускает значение null: либо ссылочный тип, либо Nullable тип-значение. Нельзя сделать «as int», это не имеет никакого смысла. Если аргумент не int, то каким должно быть возвращаемое значение? Выражение «as» всегда возвращает указанный тип, так что он должен быть типом, допускающим null.


Оператор «as» не станет делать изменяющие представление преобразования из short в nullable int, как стал бы оператор приведения. Аналогично, если у вас есть класс Alpha и несвязанный с ним класс Bravo, с пользовательским оператором преобразования из Bravo в Alpha, то «(Alpha)bravo» применит это преобразование, а «bravo as Alpha» – нет. Оператор «as» учитывает только ссылочные преобразования, и упаковку/распаковку типов-значений.

А то по незнанию можно и нарваться :)

среда, 11 ноября 2009 г.

Новое в .Net Framework 4 beta 2 (продолжение)

Thread-safe структуры данных .NET 4 (ч.2) - описание одной, но зато очень полезной структуры
Краткий обзор Parallel Extensions для .NET Framework - ну очень краткий, но все равно почитать стоит

четверг, 29 октября 2009 г.

Сисадминское

Если в один прекрасный день вместо привычного рабочего стола при включении компьютера вы наблюдаете черный экран и курсор мыши - значит что-то сломалось :) Прежде чем кидаться переустанавливать операционную систему - попробуйте проверить ветку реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

Найдите там строковый параметр Shell и проверьте, чтобы там было значение "Explorer.exe". Как правило, описанная проблема возникает из-за того, что какая-то программа изменила данный параметр. По моему опыту обычно этим занимаются вирусы и драйвера Hewlett-Packard :)

среда, 28 октября 2009 г.

Thread-safe структуры данных .NET 4 (ч. 1)

Продолжаем изучать новое в .Net Framework 4 - на этот раз статья "Thread-safe структуры данных .NET 4 (ч. 1)". Лично для меня больше всего полезна структура ConcurrentDictionary. Причем главное ее достоинство даже не в том, что она потокобезопасна - а в том, что она не выкидывает исключений, если из/в словаря попытаться получить/записать данные которые там уже есть/нет.

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

Новое в .Net Framework 4 beta 2

Крайне рекомендую изучить статью ".NET 4.0: что нового в базовых классах (BCL)? Подробный обзор" - она того стоит. В целом, среди улучшений есть много полезных - например, SortedSet и Enum.TryParse.

О повышении производительности работы

Иногда встречаются вот такие статьи "Как повысить эффективность рабочего дня с помощью интеллект-карт". Нет, вы ничего не подумайте - ничего плохого про такой подход я сказать не хочу. Однако есть некоторая проблема :) Если задача имеет четкое решение (т.е. в данном случае я составлю четкий план на день-неделю-месяц), то такая задача не будет решаться вообще. Ибо решение уже есть...

пятница, 23 октября 2009 г.

Проверка версии сборки

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

  • запуск обновления в отдельной (независимой от обновляемых) сборке, причем работа обновляемого приложения должна быть завершена
  • динамическое создание (на лету) сборки с алгоритмом обновления, запуск ее через Process.Start, выход из основного приложения
  • запуск файла приложения с использованием механизмов службы теневого копирования, что опять таки требует наличия отдельной (внешней) сборки

В любом случае мы приходим к тому, что необходимо будет узнать текущую версию файла, который мы собираемся обновить, чтобы проверить устарел ли он. Сделать это можно следующим способом:

FileVersionInfo fi = System.Diagnostics.FileVersionInfo.GetVersionInfo(path);

версия файла (по частям) содержится тут::
            fi.FileMajorPart;
            fi.FileMinorPart;
            fi.FileBuildPart;
            fi.FilePrivatePart;
или тут:
            fi.FileVersion;

Так же я рекомендую изменять номер версии приложения в файле AssemblyInfo.cs только в атрибуте AssemblyFileVersion. Если номер версии задавать в атрибуте AssemblyVersion, то это будет приводить к полной перекомпиляции всех сборок текущего проекта, которые ссылаются на файл с изменившимся AssemblyVersion, даже если сами сборки не менялись. Если же номер версии задавать в AssemblyFileVersion, то компилироваться будут только изменившиеся сборки.

Версию уже запущенной сборки можно будет получить через Application.ProductVersion.

четверг, 22 октября 2009 г.

Microsoft, I love you! :)

Ну вот люблю я такие сообщения :



P.S.: там вообще-то silverlight 3 не установился, ну да ладно - он у меня уже давно ставиться не хочет :) Но от этого картинка хуже не становится, не так ли? :)

Upd: установка заняла 1 час времени и 3 перезагрузки - повезло, что я не ставил SQL Server - а, скорее всего, еще пару раз перезагрузиться пришлось бы :)

среда, 21 октября 2009 г.

пятница, 2 октября 2009 г.


Периодически попадаются разные опросы (или их результаты), в которых пытаются выяснить какие книги читают люди.

Вообщем-то, я ничего против этого не имею, однако всегда удивляла всеобщая убежденность в том, что "надо читать классику!". Я не знаю никого моего возраста или моложе, кто бы смог дочитать, например, "Войну и мир". Хотя многие читали произведения Жуль Верна.

Казалось бы, произведения написаны в одно время людьми, жившими в одно время, а как сильно отличается к ним отношение (русских) читателей!

Жуль Верн:
"20 000 лье под водой" (1869-1870)
"Вокруг света в 80 дней" (1872)
"Таинственный остров" (1875)
 "Пятнадцатилетний капитан" (1878)

Лев Толстой:
"Война и мир" (1863-1869)

Вообще, мне все-таки сложно сравнивать данные произведения ("Войну и мир" читал по диагонали, кусками), однако по моему субъективному мнению главная проблема в произведениях Толстого – это язык и описания. Они в прямом смысле убивают произведение. То есть сюжетно – произведение интересно, но читать его трудно/невозможно.

И еще. Произведения Жуль Верна можно читать в детстве. До тех пор, пока вам не попалась современная фантастика (или вообще современные произведения). После этого читать классику становится совершенно невозможно. Слишком все медленно, лирично, много лишних подробностей – в результате существенная часть произведения будет в лучшем случае просто пролистана, а в худшем – оно вообще не будет прочитано.

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

Классика умирает потому что она не вписывается в современный темп подачи материала – она рассчитана на длительное вдумчивое чтение, а современный мир требует быстрого получения и обработки информации. И возникает конфликт.

Кстати о конфликтах. Особенно не повезло фантастам середины 20-го века. Их представления о будущем настолько отличаются от современной реальности (данной нам в ощущениях :) ), что возникает – как говорят психологи – когнитивный диссонанс.

А вообще, чем дальше тем мне все сильнее кажется что скоро фантастическая литература на западе вообще умрет (хотя скорее всего просто выродится в нечто непотребное).

Посмотрите на современное американское фэнтези – фактически оно выродилось в сказку, причем для детей.

Посмотрите на современную американскую НФ. Ну как?, как??!! как можно космическим кораблем рулить при помои штурвала, а наводить пушки – вручную??? Где вообще хоть какие-то компьютеры??? Я уж не говорю о чем-то большем…

Кмберпанк вообще уже лет десять как умер.

Хотя стоит заметить, что есть один жанр, который успешно развивается на западе – это городское фэнтези. Вообщем, вампиры/оборотни/демоны/маги в современном мире. Эти произведения читать можно и интересно :)



суббота, 26 сентября 2009 г.

Полезное про базы данных


Наткнулся на интересную статью "Индексы в MySQL: многоколоночные индексы против комбинированных индексов". Очень интересное сравнение скорости выполнения запроса в зависимости от типа индексов в базе данных. В частности:
"В большинстве случаев использование комбинированных индексов по нескольким колонкам является лучшим решением, если вы используете AND между подобными колонками в WHERE. Использование пересечения индексов в принципе улучшает производительность, но она всё равно значительно хуже, чем при использовании комбинированных ключей. В случае, если Вы используете OR между колонками Вам потребуется иметь по индексу на каждой из колонок, чтобы MySQL смог найти их пересечения, а комбинированные индексы не могут использоваться в таких запросах."
P.S.: интересно, как с этим дело обстоит в MS Sql...


четверг, 24 сентября 2009 г.

SourceMonitor

Если вас не устраивает цена NDepend ($400+) и уговорить ее работать не удалось - то вот еще одна программа для анализа кода - SourceMonitor







Пользуйтесь :)


среда, 23 сентября 2009 г.

Нет слов :)

Это невообразимо! У меня нет слов чтобы корректно прокомментировать эту ситуацию:

SVN является продвинутым средством для организации совместной разработки десятков, а то и сотен разработчиков. В силу особенностей архитектуры, SVN хранит в каждой директории проекта свои метафайлы, аккуратно сложенные в скрытую директорию .svn. В одном из файлов под названием entries находится список всех файлов и директорий, расположенных в той же папке, что и .svn. Так же там находится информация о расположении репозитория, размере файлов, даты их изменения и логины пользователей, работающих над проектом. Уже не плохо, правда? Объясню, получается, если проект разрабатывается с помощью SVN, то заглянув по адресу draftcopy.ru/.svn/entries мы увидим файловую структуру корня проекта с авторами, последними изменениями, ссылкой на основную ветку репозитория итп.

Но можно пойти и далее. В той же папке .svn находится директори text-base, в которой лежат последние версии всех файлов, находящихся в репозитории. Картину дополняет так же и то, что файлы имеют не стандартное расширение (например .php), которое позволяет их сразу отправить на интерпретатор, а дополнительное расширение .svn-base, благодаря которому файл отдается запросившему его человеку «как есть», т.е. голый исходный код!

Для зоны .RU:
Просканировано доменов: 2253388
Уязвимых: 3320

XAML Power Toys

Как пишут - обновились XAML Power Toys. Это расширение для Visual Studio 2008, облегчающее создание XAML кода для WPF и Silverlight приложений. Скачать и прочитать подробнее можно здесь. Рекомендую обратить внимание на видео ролики внизу страницы - из них многое будет понятнее.

P.S.: однако я по прежнему считаю что xaml - это тупиковый путь. По крайней мере - в своей текущей реализации. Слишком ущербен GUI-редактор, а набивать все что надо текстом - мазохизм.

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

Особенности восстановления Vista на ноуте

Недавно поучаствовал в процессе восстановления ОС Windows Vista Home Basic на ноуте. В один прекрасный момент система начала терять сетевое подключение - т.е. пакеты просто переставали ходить через сетевую карту. Правда, как выяснилось несколько позже, причиной такого странного поведения был антивирус Касперского, фильтр пакетов которого банально глючил. Но поскольку на момент возникновения проблемы об этом еще никто не знал - было принято решение использовать диск восстановления ОС.

Итак, вставляем диск - загружаемся, восстанавливаем ОС, вставляем второй диск с драйверами - вообщем, процесс занял где-то около часа. (Как выяснилось - ноут принадлежал к первому поколению ноутов с ОС Vista, поэтому для восстановления и использовалось два диска вместо одного).

После окончания установки, как любой нормальный админ я предложил поставить все доступные на данный момент обновления - поскольку с момента выхода висты было довольно много критических изменений сильно улучшающих ее производительность и уменьшающих количество глюков.

Итого Windows Update насчитал 87 обновлений на 278 Мб объемом. Казалось бы - ну что тут страшного?

Процесс установки обновлений занял более 4 часов.

Так что берегитесь старых ноутов - их починка может занять неопределенно-долгое время :)

среда, 16 сентября 2009 г.

Знаете ли вы...

... что несмотря на то, что в блоках case оператора switch нельзя "проваливаться" между case'ами (т.к. компилятор требует обязательного наличия оператора break для каждого блока case), сделать это все-таки можно. Вот так:

switch(attitude)
{
  case Attitude.HighAndMighty:
   Console.WriteLine("High");
   goto case Attitude.JustMighty;
  case Attitude.JustMighty:
   Console.WriteLine("Mighty");
   break;
}

Про обобщения и перегрузку функций

Вот вопрос, который мне задают довольно часто:

public class C
{
  public static void DoIt<t>(T t)
  {
    ReallyDoIt(t);
  }

  private static void ReallyDoIt(string s)
  {
    System.Console.WriteLine("строка");
  }

  private static void ReallyDoIt<t>(T t)
  {
    System.Console.WriteLine("всё остальное");
  }
}

Что происходит при вызове C.DoIt<string>? Многие люди ожидают, что выведется «строка» в то время, как на самом деле всегда печатается «всё остальное», независимо от того, какой T использовать.


Почему? Читайте в блоге Эрика Липперта.

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

Рекомендую...

... почитать вот это "Негласные истины управления гиками".

Статья рассказывает об особенностях поведения ИТ-шников, которое несколько отличается от поведения обычных людей. Основная причина - человек связанный с ИТ оценивает всё с позиции логики (что, вообщем-то, ему и необходимо из-за выбранной профессии), что приводит к интересным эффектам, когда в действиях руководства этой самой логики недостает :)

пятница, 4 сентября 2009 г.

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

Трюки C#

Интересная статья про разные хитрости языка. В частности:


  • Операторы | и & против || и &&
  • Передача null в качестве исключения
  • Странная стрелка при перечислении
  • Полезный оператор ??
  • Методы расширения
  • Лямбды вместо строк
  • Возврат значения из try-finally
  • Креативное использование Dispose()
  • Делегат-заглушка

Кстати, последняя фишка позволит сократить код активно использующий делегаты.

P.S.: порадовала конструкция while (count --> 0). Когда дошло - долго смеялся :)

вторник, 25 августа 2009 г.

Code Contracts - продолжение

Те, кого заинтересовал предыдущий пост про Code Contracts, могут почитать еще один обзор - на этот раз на русском. Однако, основной вопрос - о преимуществах данного подхода перед используемыми сейчас - остается открытым.

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

Amazon Product Advertising API сломался. Точнее его починили, поэтому начиная с 19-го августа 2009 года он теперь просит подписанные запросы. Соответственно, все кто делал не так - теперь не могут запрашивать данные с сервиса. Чтобы починить, можно воспользоваться подробной инструкцией (на английском) или же просто скачать оттуда пример проекта и сделать как там.

четверг, 13 августа 2009 г.

Сохранение положения иконок на рабочем столе

Вообщем, вот такая утилита. Есть версия под 64-битную Windows. Работает вот так:

пользуйтесь :)

вторник, 11 августа 2009 г.

Маразм крепчал... Или как научить Windows писать по русски

Как вы наверняка уже знаете (ну если не знаете, то вам сильно повезло) - на Windows Vista или Windows 7 версии Home Premium нельзя установить языковые пакеты. Т.е. если вы стали счастливым обладателем ноутбука с предустановленной англоязычной версией Windows - вам не повезло :)

Вообще, есть несколько путей скормить такой системе русский языковой пакет (хотя лично у меня это пока не получилось).

На TheVista.ru появилась статья как можно русифицировать систему еще одним способом. Способ выглядит еще более извращенно, чем предлагаемые ранее, но есть некоторая вероятность что он сработает :)

понедельник, 3 августа 2009 г.

\Мысли вслух...

Почитал тут интересную статью "Data Mining → Анализ рыночной корзины и ассоциативные правила" и возникла странная идея реализовать похожий подход для используемых сейчас в переводчике правил. Соответственно, можно улучшить работу алгоритма, выбирая как основную цепочку правил (т.е. последовательность срабатывающих друг за другом правил) такую, вероятность появления которой наибольшая. Правда все упирается в то. что сначала надо будет проанализировать работу алгоритма и выяснить последовательность применения правил...

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

Software Transactional Memory

Как пишут - в ..Net Framework будет добавлен механизм Software Transactional Memory.


Software Transactional Memory (STM) — это альтернатива блокировкам и другим традиционным механизмам синхронизации асинхронных операций и потоков при доступе к общему участку памяти. Механизм STM похож на работу транзакций в современных СУБД и, хотя его использование в общем случае медленнее использования механизма блокировок, STM предлагает разработчику более простой способ управления параллельными вычислениями.
Использование STM в .NET крайне просто:
Atomic.Do(()=> { 
});
где statements — это выражение которое должно выполняться в транзакции.

вообщем, выглядит интересным... Оффсайт - тут.

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

Тест

пройти тест

вторник, 21 июля 2009 г.

NDepend

Рекомендую обратить внимание на программу анализа кода NDepend. На сайте программы есть много демо-роликов.




P.S.: лицензия стоит 411 баксов, но для русского человека это же не является проблемой? ;)

понедельник, 13 июля 2009 г.

Слетаем на луну?

Как вы помните - будущее уже наступило.

НАСА запустило сайт, на котором спустя 40 лет заново будет показан полет американцев на луну (обещают использовать реальные записи!).

История музыкального пиратства в России

Просто интересная статья. Как видите - спустя сто лет история пошла по кругу, но уже на новой технологической основе :) История музыкального пиратства в России. Часть 1 История музыкального пиратства в России. Часть 2

Поисковик иконок

Вот здесь рекомендуют поисковик иконок. Вдруг кому надо...

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

Интересная статья

Рекомендую почитать статью "Почему Mono хорош"

А вот тут другое мнение, от Столлмана "Почему свободное ПО не должно зависеть от Mono и C#". Имхо - полный бред.

P.S.: вообще, последнее время линуксоиды стали похожи на какую-то секту - практиечски в любой статье про Windows (на любую тематику) первым комментарием будет что-то вроде "А у меня стоит линукс - и у меня все замечательно" (подразумевается - "у меня линукс, а вас Windows - вы лохи")

воскресенье, 28 июня 2009 г.

Мда...

В новостях пишут о что новость о смерти Майкла Джексона привела к перегрузке известных интернет сайтов. Гугль думал что они под хакерской атакой

News of Jackson’s death spread quickly online, causing many websites to experience technical difficulties under the unanticipated swell of users. Google announced technical difficulties after a sudden swell in searches for “Michael Jackson” led the company to believe it was under attack from hackers, while social networking site Twitter reported a crash after record numbers of users used the site to spread the news of Jackson’s death.[175] Wikipedia experienced technical difficulties, and crashed at 3:15 PDT reportedly due to excessive edits and user overload.[167]


Я тоже сначала думал что нас в Viigo атакуют. Трафик обычных запросов прыгнул на 15% в течении 10-20 минут. Трафик запросов к рекламным банерам - на 40%. Целый час потратил, что бы понять кто все эти люди и откуда они взялись. Мысль про Джексона приходила в голову, но я ее отмёл как несостоятельную.

Если бы мне кто-то сказал, о таком несколько дней назад, я бы не поверил…


P.S.: вам не кажется, что мир последнее время начинает напоминать стадо леммингов?

суббота, 27 июня 2009 г.

Чтение на ночь

Рекомендую почитать серию постов про многопоточное программирование:

Эпоха параллельности. (часть 1-я)
Эпоха параллельности. (часть 2-я)
Эпоха параллельности. (часть 3-я)
Эпоха параллельности. (часть 4-я)

Тест


По профессии вы: Айтишник
Герой анекдотов и компьютерных программ. Хлад- нокровен, с аналитическим складом ума. Втайне смеется над беспомощными ламерами в офисе и за его пределами. Лучше всех разбирается в технике. Постоянно видит во сне ужасы про упавший сервер или сломавшийся ноутбук. Переиграл во все возможные онлайн-игры. Хотя бы раз, но смотрел аниме.
Пройти тест на www.dreamemployers.ru

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

вторник, 23 июня 2009 г.

До чего дошел прогресс...

Как многие, наверное, уже слышали - недавно к луне был запущен зонд. Основная цель - поиск воды.
Так вот, за полетом уже можно следить здесь, причем процесс комментируется в твиттере.
Безусловно, видео со скоростью 1 кадр в секунду - это маловато, но следует помнить, что это чуть-ли не первое такое вещание в реальном времени!

суббота, 20 июня 2009 г.

ы!


P.S.: не слов...

понедельник, 15 июня 2009 г.

Про оптимизации компилятора C#

Если вы все еще не читаете блог Эрика Липперта , то рекомендую начать. Сегодня там опубликовали замечательную информацию про то, что именно оптимизируется когда включается оптимизация кода при компиляции.

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

Изменения в Wow64 в Windows 7

Обращаю внимание программирующих работу с реестром в 64-х битных версиях Windows на вот этот пост "Что нового в Windows 7: изменения в Wow64 "

среда, 10 июня 2009 г.

Рекомендую!

Перевод блога Эрика Липперта на русский язык. Этот человек проектирует C# :) Читать перевод - тут .

понедельник, 8 июня 2009 г.

Распознавание речи в Visual Studio

Смотрите и наслаждайтесь!

Рекомендую

Интересный пост, стоит почитать:

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

вторник, 2 июня 2009 г.

:)

Кстати, Гуй - это у китайцев демон-оборотень, дух умершего грешника. Так что не надо приличное слово GUI так на русский коверкать :)

Изучаю Windows Workflow

Попробовал в рамках изучения технологии написать простенькую программу используя .Net Workflow. Программа берет строку и делит ее на слова.

Обычный алгоритм выглядит так:


int CIndex = 0;
int CWordLength = 0;
string InputString = inputTB.Text;
List<string> Result=new List();
char[] CWord=new char[100];

while(CIndex<InputString.Length)
{
 if(Char.IsLetterOrDigit(InputString[CIndex]))
 {
  if (CWordLength >= CWord.Length)
  {
   char[] CWord2 = new char[CWord.Length * 2];
   CWord.CopyTo(CWord2, 0);
   CWord = CWord2;
  }

  CWord[CWordLength] = InputString[CIndex];
  CWordLength++;
 }
 else
 {
  _result.Add(new string(CWord, 0, CWordLength));
  _result.Add(InputString[CIndex].ToString());
  CWordLength = 0;
 }

 CIndex++;
}

Переписал на WF - работает... Но скорость...



Как-то меня это не воодушевляет...

суббота, 30 мая 2009 г.

Компилятор регулярных выражений в сборку

На codeplex'e есть интересный проект Regex Compiler. Скармливаем компилятору специальный текстовый файл - и получаем .dll с нашими скомпилированными регулярными выражениями.

Зачем это надо:
  • скомпилированные регулярные выражения работают примерно на 30% быстрее.
  • все находится в одной сборке, которую можно подключить к приложению. Будет работать intellisense :)
Вообщем, полезная штука :)

Контрол DebugWriterTextBox

Выложил на codeplex контрол, которым я постоянно пользуюсь - DebugWriterTextBox. Делает он две вещи:

выводит в текстбокс (на форме) тот текст, что передается в Debug.Write() или Debug.WriteLine()
выводит то же самое в заданный файл

фактически, это просто TraceListener для вывода текста в любой текстбокс плюс функционал для инициализации вывода в файл, только теперь для того чтобы красиво выводить логи вашей программы нет необходимости писать код - достаточно положить на форму соответствующий контрол :)



Бонус: внутри есть класс DebugWriter. Это тоже самое, но без наследования от TextBox. Т.е. его можно прикрутить к любому текстбоксу уже существующему на форме.

Пользуйтесь :)

четверг, 21 мая 2009 г.

Hyper-V

Вот почему когда за какую-нибудь технологию берется Microsoft - результат выглядит странно?

Вот казалось бы - что такое, по сути, Hyper-V? Это всего лишь виртуальные машины + удобные (хм...) консоли управления к ним. То, что все это дело интегрировано чуть ли не в ядро ОС - это простого пользователя не волнует.

Итак, что мы получаем в итоге:

1. Поддержку Aero. Так же через одно место как у VMWare (но те хотя бы исправятся со временем, а от Microsoft этого уже никто не ждет). Чтобы получить Aero-интерфейс на виртуальном компе надо подключиться к нему с Aero-машины (Vista, Win7) через RDP (удаленный рабочий стол).
Думаете все так просто? Нифига - превьюшек окон на панели задач у вас не будет. Причина в том, что в виртуальной видео карте всего 4 Мб памяти и этого недостаточно для превьюшек.
Увеличить нельзя.

2. Отсутствует звук. Как класс. Т.е. вообще нет вирутального звукового адаптера. На вопрос в форумах технета как бы включить звук на виртуальной машине последовал недоуменный ответ - "а что, это кому-то надо?". Да, блин, надо! Виртуалки иногда используются и для тестирования софта, знаете ли...

3. Отсутствует аналог VMWare'ских Integration Tools. Т.е. чтобы перекинуть файлик с/на виртуальную машину будьте добры настроить между реальной и виртуальными машинами сеть. Извращение, не правда ли?

Люди еще пишут о проблемах с RDP-подключениями к реальной машине на которой поднято Hyper-V. Не проверял - но не удивлюсь если так.

Ну и напоследок.
Знаете как включить Aero-интерфейс на удаленной Windows Server 2008, если на ней не поднят сервер терминалов (потому что нафиг не надо) и вы подключаетесь с машины с Windows XP через "удаленный рабочий стол"? Надо на некоторое время лишить Windows Xp-машину сети. Чтобы окошко "подключения к удаленному рабочему столу" сообщило, что связь прервана и попыталось переподключиться (вам дается порядка 20-30 попыток, прежде чем отключат от удаленной машины окончательно). Вот если в это время вернуть сеть и дождаться когда подключение к удаленному рабочему столу восстановится - у вас будет Aero. Мило, правда?

Все-таки у Microsoft какая-то своя, особая логика... Простыми смертными она не постижима.

Update
Выложили Visual Studio 2010 Beta 1. На оффициальной странице ссылка на скачивание ведет сюда. А там! Там! Там веб инсталлер весом 5,4 Мб... Устанавливайте на здоровье... Особенно если у вас интернет на скорости 56 Кб/сек...

вторник, 19 мая 2009 г.

Axum

Специалисты Microsoft работают над новым языком программирования Axum. Особенность новой разработки заключается в том, что этот язык изначально предназначен для написания многопоточных параллельных приложений, оптимизированных для работы на современных многоядерных процессорах. 

Формально Axum - это инкубационный проект, помогающий разработчикам использовать технологии параллельного программирования в рамках среды .Net, но позже, как утверждают в Microsoft, Axum станет полноценным языком. 
Джошуа Филлипс, программный менеджер Microsoft Parallel Computing Platform заявил, что пока каких-то утвержденных дат релиза Axum нет. "Новый язык в большей степени ориентирован на профессионалов, он предлагает безопасный и эффективный интерфейс для Net-программирования. Этот язык строится на веб-архитектуре, а также на принципах изолированности, масштабируемости и производительности", - говорит он. 
Ранее в документах Microsoft язык Axum фигурировал под названием Maestro. Филлипс говорит, что в корпорации сейчас работают над интеграцией Axum в среду Visual Studio, оптимизацией языка для сетевого использования и повышением устойчивости платформы в целом. 
Возможно первые варианты Axum появятся уже в среде Visual Studio 2010 в качестве движка, инкубированного в некоторые технологии. "Наша основная задача - создать безопасную, масштабируемую и более производительную модель программирования в .Net-окружении. Концепция Axum основана на полной изолированности процессов, которые будут между собой обмениваться контрольными сообщениями", - рассказывает Филлипс. 
Также как и многие другие современные языки, Axum будет базироваться на декларативной модели. Синтаксис Axum будет в значительной мере похож на C#. В Microsoft говорят, что новую синтаксическую модель там не стали делать намеренно, чтобы легче было использовать новый язык. 
"Ранее для того, чтобы получить повышенную производительность приложения, нам приходилось ждать выхода более быстрого процессора, сейчас перед нами стоит задача эффективного использования многоядерности процессоров", - отмечает Филлипс. 
"В Axum будет пять основных концепций: домен, канал, агент, схема и слой. Язык также будет поддерживать глубокую инкубацию объектов кода", заключает он. 
В блоге корпорации отмечается, что одна из задач, которую ставили перед собой создатели языка, заключается в снижении сложности программирования, при повышении мощности и произвоодительности кода. 
качать тут
дополнительно можно почитать тут

пятница, 15 мая 2009 г.

Улучшенный ListView

Проект - тут. Собственно, всем приходится сталкиваться с тем, что надо в разные колонки ListView вывести определенные поля какого-то собственного класса. Так вот - используя данный проект можно указать (при помощи спец. атрибута) маппинг полей к колонкам ListView и резко сократить код :)

четверг, 14 мая 2009 г.

Windows® API Code Pack for Microsoft® .NET Framework

Собственно, те кто заинтересовался как бы прикрутить новые фишки Windows 7 к своей программе (в частности - библиотеки или ProgressBar в кнопке приложения на панели задач) могут смело качать вот это. Там есть все что нужно :)

среда, 13 мая 2009 г.

Создание символической ссылки на папку или файл

Собственно, вещь полезная :) Кто не знает - в Far Manager'е это можно сделать нажав Alt+F6. А на C#-пе вот так:




using System;
using System.Runtime.InteropServices;
using System.IO;

namespace mklink
{
   class Program
   {
      [DllImport("kernel32.dll")]
      static extern bool CreateSymbolicLink(string lpSymlinkFileName, string lpTargetFileName, int dwFlags);

      static int SYMLINK_FLAG_DIRECTORY = 1;

      static void Main(string[] args)
      {
         //
         // Symbolic file link bar.txt <<===>> foo.txt
         //
         string symF = "bar.txt";
         string targetF = "foo.txt";

         Console.WriteLine(">echo \"Hello World\" > {0}", targetF);
         StreamWriter sw = File.CreateText(targetF);
         sw.WriteLine("Hello World");
         sw.Close();
         Console.WriteLine();

         Console.WriteLine(">mklink {0} {1}", symF, targetF);
         if(CreateSymbolicLink(symF, targetF, 0))
            Console.WriteLine("symbolic link created for {0} <<===>> {1}", symF, targetF);
         Console.WriteLine();

         Console.WriteLine(">type {0}", targetF);
         Console.WriteLine(File.ReadAllText(targetF));
         Console.WriteLine();

         //
         // Symbolic directory link bar <<===>> foo
         //
         string symD = "bar";
         string targetD = "foo";

         Console.WriteLine(">mkdir {0}", targetD);
         Directory.CreateDirectory(targetD);
         Console.WriteLine();

         Console.WriteLine(">echo \"Hello World\" > {0}\\demo.txt", targetD);
         StreamWriter sw2 = File.CreateText(targetD + \\demo.txt);
         sw2.WriteLine("Hello World");
         sw2.Close();
         Console.WriteLine();

         Console.WriteLine(">mklink /d {0} {1}", symD, targetD);
         if (CreateSymbolicLink(symD, targetD, SYMLINK_FLAG_DIRECTORY))
            Console.WriteLine("symbolic link created for {0} <<===>> {1}", symD, targetD);
         Console.WriteLine();

         Console.WriteLine(">dir {0}", targetD);
         foreach (string f in Directory.GetFiles(targetD))
            Console.WriteLine(f);
      }
   }
}


(код взят здесь)

Результатом работы программы будет файл bar.txt ссылающийся на файл foo.txt и папка bar ссылающаяся на папку foo.

:)

Читать, плакать и смеяться :)

http://community.livejournal.com/fantasy_proda/73999.html
http://community.livejournal.com/fantasy_proda/74432.html

понедельник, 11 мая 2009 г.

Информация к размышлению

Несмотря на то, что я пишу преимущественно о C#, .Net Framwork и все что с ними связано - иногда попадаются вещи мимо которых просто нельзя пройти. Вот одна из таких вещей - перевод поста работника Google:
...
Это хорошая сторона масштаба: способность анализировать огромные объёмы данных — очень полезный инструмент в научных исследованиях. Но есть и другая сторона: вещи которые легко сделать с обычным набором данных становятся невыполнимыми в большом масштабе.

Граница между вычислимым — и вычислимым, но за неприемлемое время, обычно проводится по вычислительной сложности алгоритмов. В традиционной теории алгоритмов вычислимыми считаются алгоритмы с полиномиальной сложностью и ниже, невычислимыми — с экспоненциальной сложностью и выше. Но масштаб это меняет. На больших объёмах данных алгоритм с полиномиальной сложностью тоже оказывается непригоден. Даже если вы делаете что нибудь тривиальное — вроде сортировки.
...

воскресенье, 10 мая 2009 г.

Data Mining

Оказывается на codepelex'е есть проект посвященный алгоритмам Data Mining'а. Выглядит интересным...

четверг, 7 мая 2009 г.

Windows 7 Libraries

В новой версии операционной системы от Microsoft появилась новая фича - называется "Библиотеки". По сути - это набор ссылок на папки с пользовательскими данными, которые собраны в одном месте. Попутно - папки добавленные в библиотеки автоматически индексируются для более быстрого поиска.

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

На русском, статьи:
Библиотека Windows 7 Libraries .NET Sample Library (ч.1)
Библиотека Windows 7 Libraries .NET Sample Library (ч.2)
Библиотека Windows 7 Libraries .NET Sample Library (ч.3)
Библиотека Windows 7 Libraries .NET Sample Library (ч.4)
Библиотека Windows 7 Libraries .NET Sample Library (ч.5)

На английском, видео:

Windows 7: Find and Organize Part 1 - The User Experience
Windows 7: Find and Organize Part 2 - Building Federated Search applications
Libraries Feature in Windows Explorer

Ну и как бонус - просто много видео про Windows 7 .

четверг, 30 апреля 2009 г.

В продолжение темы копирайта

Рекомендую почитать вот этот пост . Это, пожалуй, лучшее из того, что я читал по теме "борьбы с защитой авторского права". Автор пишет про то, почему перестали покупать музыку. В принципе, я во многом с ним согласен....

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

Магия чисел...

   Если у последней колонки ListView в режиме Details поставить ширину равную -1 - то ее ширина будет равно ширине максимального элемента данной колонки.
   Если у последней колонки ListView в режиме Details поставить ширину равную -2 - то ее ширина будет автоматически меняться так, чтобы занимать все оставшееся свободное место.

Отладка собственного контрола в Visual Studio

...оказывается сделать это можно просто - необходимо запустить вторую Visual Studio и выбрать меню Debug->Attach to process и выбрать там первую запущеннуюVisual Studio с нашим разрабатываемым контролом. После этого можно будет использовать точки останова и другие фишки отладочного режима.

четверг, 23 апреля 2009 г.

Интересная мысль


А продажи падают от того, что временной ресурс у людей ограничен 24 часами в сутки. А с развитием технологий просто поменялись распределения траты этого времени. Например, большую часть досуга оттяпал телеящик, предоставляя все большее и большее число каналов. Развитие ночных клубов тоже на самом деле отнимает время, а не рекламирует музыку для последующей покупки — просто активному клаберу некогда слушать купленую музыку. Человеку завязшему в соцсетях некогда искать и скачивать интересную музыку, куда уж до ее покупки. И т.д.


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


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


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



  Мне кажется это самое логично объяснение падения продаж... Лично я уже года три как практически полностью отказался от игр. Не потому что надоело, нет - просто у меня нет столько времени. Я лучше книжку почитаю... 
  Если бы не пиратская музыка - я бы и от музыки уже отказался бы. Потому что нереально тратить СТОЛЬКО денег на покупку музыки, которую потом не будешь слушать. А оценить по другому - невозможно. Пока нет в руках полного альбома - понять, будешь ли ты его слушать - не получается...

вторник, 21 апреля 2009 г.

Создание собственной панели инструментов для панели задач проводника

Если есть желание/необходимость научиться создавать собственную панель инструментов для панели задач проводника a la "Панель Windows Media", "Быстрый запуск" и т.п., то рекомендую почитать вот эту статью . Тогда вы сможете сделать нечто подобное:







Продолжим

Как выяснилось - тулбар не отображается в Vista + IE 7/8. В комментариях предлагается множество способов решения проблемы - мне ни один не помог при том, что все нормально работает в WinXP + IE 8.

Однако, была обнаружена модифицированная версия проекта, портированная под VS2005 .

P.S.: как пишут в комментарии ко второй статье - нет необходимости регистрировать сборки в GAC. Достаточно установить в настройках проекта флажок "Register assembly for COM interop" и далее использовать "regasm "MyAssembly.dll" /codebase". Использование /codebase обязательно - без него тулбар не будет отображаться.

воскресенье, 19 апреля 2009 г.

пятница, 10 апреля 2009 г.

Будущее - оно уже наступило...

... просто этого никто не заметил.

Когда Microsoft анонсировала облачную платформу Azure - первым вопросом, возникающим у всех, кому я про нее рассказывал был - "А зачем это надо?". А вот теперь выясняется, что при помощи "облаков" можно сделать разные интересные вещи :) Например, собственную отказоустойчивую веб-ОС.

Встречайте:
iCloud
G.ho.st
не совсем cloud (точнее совсем не), но принцип тот же:
YouOS
eyeOS

Начнем по порядку.

iCloud

Обзор можно почитать тут и тут . А пока немного скриншотов.


G.hos.st

обзор можно почитать тут и тут . Скриншоты:


YouOS

Обзор можно почитать тут .


EyeOS

Обзор можно почитать тут .


Заключение

На мой взгляд, это и есть наше будущее - Cloud + Software+Services + WebOS.

Будет очень интересно наблюдать борьбу с пиратством в таких условиях :) Представьте себе - WebOS развернута на сервере, физически расположенном где-нибудь в Китае, софт для которого написали в Америке, а тех поддержку осуществляют индийцы (ну они сейчас везде в тех поддержке ;) ). При этом сервером пользуется злостный пират Вася Пупкин из России через прокси-сервер в, например, Финляндии...

Кстати! Сервер-то тот - он же не один, их много. Для дублирования информации, большей надежности и ускорения доступа. Так что сегодня наш Вася работает на китайском сервере, а завтра на его копии - в, например, Бразилии :)

четверг, 9 апреля 2009 г.

Особенности работы с потоками

Вот здесь пишут, что произойдет, если попытаться создать действительно много потоков и чем ограничено их количество.

P.S.: Предполагаю что для 64-х битных систем описанная проблема не настолько актуальна...

среда, 8 апреля 2009 г.

Если нельзя, но очень хочется...

Как известно, обновить операционную систему Windows 7 с бета версии до RC и тем более - до релизной сборки будет нельзя. Но если очень-очень хочется - то можно :) Для этого необходимо сделать следующее:




  1. Загрузить ISO-образ и записать его на DVD
  2. Скопировать образ туда, откуда вы планируете начать обновление (загрузочный флэш-драйв или любой раздел на компьютере с предрелизной версией Windows 7)
  3. Перейти в папку Sources
  4. Открыть файл cversion.ini в текстовом редакторе
  5. Изменить номер сборки у параметра MinClient на более низкое значение. Например, измените 7100 на 7000 (см. скриншот)
  6. Сохраните файл
  7. Запустите процесс установки из модифицированной копии образа - это позволит обойти проверку версии.
     
Ну, первый пункт можно и опустить :) Microsoft, видимо, до сих пор не знает про такие замечательные программы как WinRar и UltraISO :)

вторник, 7 апреля 2009 г.

Интересный блог про "облачные" вычисления

рекомендую: "По дороге с облаками ". Рассказывают про Azure, Google...

пятница, 27 марта 2009 г.

Полечиться не хотите?

... на Марсе :)

среда, 18 марта 2009 г.

Склонение слов

Случайно обнаружил проект по склонению слов - Morpher . Интересен тем, что дают .Net dll бесплатно для некоммерческого использования. Насколько качественно работает алгоритм пока что мне известно только со слов авторов :) Главное - оно умеет спрягать глаголы!!! Думаю попросить и попробовать использовать в составе переводчика... Еще есть проект Яндекс.Склонятель . По запросу выдает xml с вариантами склонения слов. К сожалению - работает только с именами и фамилиями....

понедельник, 16 марта 2009 г.

Библиотека для замены XmlSerialiser

Очень интересная библиотека - YAXLib .

Основные особенности:

  • контроль за процессом сериализации при помощи атрибутов.
  • сериализация стандартных коллекций и совместимых с IEnumerable
  • контроль за процессом десериализации - можно определить действия, совершаемые при отсутствии нужных данных в файле

Пример использования:


public class Warehouse
{
    [YAXAttributeForClass()]
    public string Name { get; set; }

    [YAXSerializeAs("value")]
    [YAXAttributeFor("Location")]
    public string Address { get; set; }

    [YAXSerializeAs("value")]
    [YAXAttributeFor("Area")]
    public double Area { get; set; }
}

Результат:

<Warehouse Name="Foo Warehousing Ltd.">
   <Location value="No. 10, Some Ave., Some City, Some Country" />
   <Area value="120000.5" />
</Warehouse>

Хорошая новость!

Хорошие новости - в Британии музыканты первой величины создали специальную коалицию по защите своих прав, чтобы бороться с лейблами и упырскими организациями типа IFPI и BPI, представляющими интересы правообладателей. Два дня назад исполнители заявили, что поддерживают нелегальное распространение своей музыки. 

А уж список исполнителей там...

суббота, 14 марта 2009 г.

Полностью согласен!

Пять советов производителям фаерволов.
1) Определяйте подключение к сети.
Подозреваю, что Windows может подключаться к интернету конечным числом способов. Подозреваю, что при этом она использует очень стандартные программы и действия.
Позаботьтесь о том, чтобы фаервол сам определял подключение к сети и делал его разрешенным, не задавая мне глупых вопросов.

2) У меня есть антивирус.
Мне не нужны ваши убогие потуги изобразить его, перехватывая влияние одного процесса на другой, при этом конфликтуя с настоящей антивирусной программой. Вместо дурацких проверок на adware лучше увеличьте базу известных приложений, чтобы мне не приходилось создавать правил для стандартных почтовых и ICQ клиентов.

3) Если я доверяю приложению - я доверяю ему до конца.
Если я разрешил приложению любые действия - ему должны быть разрешены любые действия на всех уровнях. Я не хочу копаться в вашей трехуровневой системе разрешений, выясняя, на каком этапе режутся пакеты для якобы доверенного приложения. Разрешение на любые действия означает разрешение на любые действия, без ограничений.

4) Сделайте автоматическое разрешение для отслеженных попыток соединения.
Каждый фаервол ведёт журнал событий, где указывается программа, адрес, порт и так далее.
Не желаю выписывать их из журнала на бумажку (потому что они ещё и не копируются из журнала), а потом вручную создавать для них правило.
Я хочу просто выбрать строку в журнале, нажать кнопку "разрешить эти соединения" - и чтобы именно эти соединения стали разрешены.

5) Не мешайте работе компьютера.
Тормозящий на двухпроцессорнике фаервол - жалкое зрелище. Фаервол, который влезает с вопросами и предупреждениями в полноэкранные игры, полностью их завешивая - ещё более жалкое зрелище. Фаервол, который выкидывает синий экран из-за конфликтов - это вообще за гранью. Отлаживайте.
 

Каждый программист написавший программу ОБЯЗАН поработать с ней НА РЕАЛЬНЫХ ДАННЫХ как минимум месяц!

четверг, 12 марта 2009 г.

Контекстная реклама :)


Настоящая контекстная реклама! Для производителей-конкурентов Microsoft Office :)

пятница, 6 марта 2009 г.

Статья про OWL

Довольно интересная статья про OWL, онтологии и проблемы описания нечетких знаний. Рекомендую.

четверг, 5 марта 2009 г.

День обломов...


   Дома вырубили свет - упс вырубил комп. Когда свет включили - комп загрузился, но как-то криво. Когда пришел домой по экрану мигали разные куски рабочего стола и нифига не работало. Пришлось жать ресет...
   Попутно, как обычно после выключения света - сбились настройки на оборудовании Ланты (откуда я интернет получаю)
   Соответственно, инет тоже умер
   Выяснилось что еще я забыл телефон техподдержки Ланты. Куда не звонил - из друзей никого не было на месте - спросить не у кого было... Аська не работала - на компе нет инета, а на телефоне стоит старая версия, которую я последний раз использовал летом :(
   Комп упорно не хотел получать интернет даже из телефона. Пришлось лезть на сайт Ланты напрямую с телефона.
   Когда я телефон техподдержки все-таки нашел и позвонил - это мне не помогло, т.к. там никто не брал трубку.
   ... Спустя полтора часа мучений один хороший человек наконец-то снял трубку и вопрос решился :)
вообщем, жесть какая-то...

   .... и на работе сегодня взорвался счетчик - тоже пол-дня без света...

воскресенье, 1 марта 2009 г.

Новое в C# 4.0 - именованные аргументы функций

Что такое именованные аргументы функций и зачем это надо? Как известно, C# не имеет поддержки значений по-умолчанию для аргументов у функций. Так вот - именованные аргументы нужны как раз для этого :)

Синтаксис выглядит так:


public class ContactList
{
    List SearchForContacts(
        string name = "any",
        int age = -1,
        string address = "any") { ... }

    static void Main()
    {
        ContactList list = new ContactList();
        var x = list.SearchForContacts(age:26);
        var y = list.SearchForContacts(address:"home", name:"sam", age:30);
    }
}

Если у функции есть как аргументы со значениями по-умолчанию, так и без, то при вызове первыми идут аргументы без значений по-умолчанию, а потом уже - со значениями по-умолчанию. Причем для аргументов без значений порядок обязателен, а для остальных - нет.

Источник

четверг, 26 февраля 2009 г.

Новый вид Visual Studio 2010

На мой взгляд интересные изменения в интерфейсе. Судите сами:

источник

вторник, 24 февраля 2009 г.

Поубивал бы!..


Cообщение
"Неоходимый модуль безопасности не активируется.
Это программа не может быть исполнена (5024)."
при попытке запустить игрушку означает что у вас запущена программа Process Explorer.

За столь информативные сообщения об ошибках надо бить! :(

Code Contracts

Заметил вот такую статью "DevLabs: Code Contracts for .NET" . Выглядит интересно, правда я пока не уверен стоит ли это использовать. Надо поэкспериментировать...

суббота, 21 февраля 2009 г.

ExcelExportLib v1.0.0.0

Решил оформить предыдущий эксперимент по выгрузке данных в Excel .xml файл в виде библиотеки. Встречайте - ExcelExportLib v1.0.0.0

Примечание: немного доработал код, добавил возможность задавать свои стили ну и так, мелкие усовершенствования.

А знаете ли вы что...

... преобразовать значение System.Drawing.Color в шестнадцатеричную строку и обратно можно вот так:


System.Drawing.Color c = System.Drawing.ColorTranslator.FromHtml("#F5F7F8");
String strHtmlColor = System.Drawing.ColorTranslator.ToHtml(c);


пятница, 20 февраля 2009 г.

Хочу, чтобы Far был таким...


... причем я даже примерно представляю как это можно осуществить. Вариантов два:

  1. пишем программу которая запускает из под себя Far перехватывая консольный ввод-вывод. Пишем плагин к Far, который оповещает программу о выборе файла (можно без плагина, но геморроя с отслеживанием нажатий клавиш слишком много будет)
  2. вариант 1 наоборот - плагин рисует окна с доп. информацией


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

Контрол для отображения графиков

Наконец-то нашел относительно простой контрол для отображени графиков . Причем позволяющий отобразить несколько графиков одновременно. Например вот так:

Пользоваться довольно просто и вообще удобно. Что я , собственно, и искал. Попадалось только в основном нечто или слишком простое или слишком навороченное :(

пятница, 13 февраля 2009 г.

Запись и чтение из файлов Excel при отсутствии установленного Excel #2

Иногда просматриваю статистику по блогу в Google Analytics. С момента публикации поста про Запись и чтение из файлов Excel при отсутствии установленного Excel он уверенно держится в топе по посещаемости :) Хотя последнее время пост про горячие клавиши Windows начал выходить на первое место. Ну да ладно...

Решил я тут еще немного поделиться сакральным знанием про Excel, а именно - рассказать еще один способ формирования файлов, понятных для этой программы.

Как известно, Excel понимает много разных форматов файлов. Среди них есть "Таблица Xml (*.xml)". Достоинств у этого формата аж три штуки:

  • корректно распознается системой как файл Excel, несмотря на то, что имеет расширение .xml
  • имеет относительно простую структуру, легко просматривается/правится даже в блокноте
  • полностью сохраняется форматирование страниц, таблиц и ячеек, заданное посредством Excel

Формат предельно простой. Все что нужно можно узнать методом "научного тыка" путем создания документа с нужным форматированием и последующего его просмотра в блокноте. Условно можно разделить на 4 блока:
описание документа/книги
описание применяемых к ячейкам стилей (это чтобы можно было, например, использовать разные цвета/шрифты в ячейках)
описание таблиц
описание параметров печати - можно выкинуть, пусть пользователи сами настраивают :)

Каждая таблица содержит набор колонок, строк и ячеек.

Колонки задают размеры колонок, способ форматирования текста (например, перенос по словам) и т.п. Внимание! Автоматическое расширение колонки работает только для числовых полей и дат (имхо - извращение, впрочем, это совершенно нормально для Microsoft).
Пример:
   <column ss:width="200.25">
   <column ss:autofitwidth="1" ss:width="60">
Каждая строка имеет номер (индекс) и разные параметры. Если индекс не указан, считается, что строка находится ниже предыдущей. Индексация начинается с единицы.

Каждая ячейка имеет номер (индекс), стиль и разные параметры. Тип данных в ячейке задается через вложенный тэг . Пример:

   <cell ss:styleid="s21"><data ss:type="DateTime">2009-02-02T00:00:00.000</data></cell>
   <cell><data ss:type="String">строка</data></cell>
Вообщем-то и все. Остальное можно прочитать в мануале или же сформировать файл в Excel, сохранить и посмотреть что получилось.

Посидев немного я написал соответствующий набор классов , которые позволяют сформировать простенький Excel-xml файл. Я сознательно не использую никакие функции для работы с xml и формирую файл как обычный текст. Так быстрее. Универсальность как конечная цель не ставилась - соответственно можно сделать только одну таблицу, стили жестко зашиты в коде. Ну и т.д. и т.п.

Пример использования:


   ExcelTable table = new ExcelTable("Таблица");

   table.columns.Add(new ExcelColumn(false, 260));
   table.columns.Add(new ExcelColumn(true, 60)); //autofit = 1

   ExcelRow row = new ExcelRow();
   row.AddCell("Заголовок1");
   row.AddCell("Заголовок2");
   table.AddRow(row);

   row = new ExcelRow();
   row.AddCell("дата");
   row.AddCell(DateTime.Now, eDateType.Date);
   table.AddRow(row);

   row = new ExcelRow();
   row.AddCell("отмеченное число");
   row.AddCell(25, true);
   table.AddRow(row);

   table.Save("test.xml")

Как видите - ничего сложного. Пользуйтесь :)

Обновилась библиотека Vista Bridge

Обновилась библиотека Vista Bridge до версии 1.4. Добавили:
  • Custom Controls for Common File Dialogs
  • BreadCrumb Bar Control
  • Aero Glass

Как пишут , скоро библиотеку переименуют в Windows Bridge и добавят поддержку Windows 7:
  • Find and Organize
  • Win7 Taskbar
  • Sensor and Location Platform
  • DirectX
  • Ribbon
  • MultiTouch

Вообщем, чем дальше - тем все интереснее...

четверг, 5 февраля 2009 г.

Утилита для генерации диаграмм классов

Совершенно случайно наткнулся на интересную утилиту для генерации диаграмм классов . Для генерации используются dll или exe файлы. В комплекте есть аддон к рефлектору. Выглядит вот так:


А вот так выглядит диаграмма для самого главного набора классов в моем переводчике, отвечающего за описание одного слова в предложении вместе с его переводами и различными параметрами:

К сожалению, строить диаграммы для более чем одного файла утилита не умеет :( Было бы интересно посмотреть как бы выглядела общая диаграмма для всего проекта...

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

Редактор XAML

Один добрый человек навел на редактор XAML-файлов . Надо будет посмотреть...

вторник, 27 января 2009 г.

Чудеса случаются!..

Дорабатывал свою программу автоматического получения и обработки почты. Присылаемые данные я сохраняю в соответствующую папку. Причем для того, чтобы узнать - были ли уже получены эти данные, я проверяю наличие соответствующего присланного файла в папке. Проблема была в том, что иногда данные присылают повторно, причем имя файла - тоже самое что уже было. Естественно, что более старые данные - правильнее. Естественно, что алгоритм их отбрасывал, т.к. считал что эти данные он уже сохранил.

Самый простой способ решения проблемы - привязаться к датам файла и письма. Если дата письма больше даты файла, то такое письмо содержит новую версию файла и его необходимо заменить. Казалось бы - ну где тут можно найти проблемы?

А проблема-то очень интересная :) Делаем следующее:

  1. создаем файл с именем А
  2. переименовываем этот файл, например, в Б (некритично, можно и удалить)
  3. создаем файл с именем А

Вопрос - какое будет время создания нового файла А?

Неа, не угадали - временем создания нового файла А будет время создания старого файла А.

Вот такие дела. В итоге пришлось принудительно ставить время создания файла :(