суббота, 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 .