Как стать автором
Обновить
64
0

Пользователь

Отправить сообщение

Visual Studio 11 -> Visual Studio 2012?

Время на прочтение1 мин
Количество просмотров3.4K
Только что заметил в MSDN:

image

Официальной новости о присвоении имени найти не удалось.

Непреднамеренная утечка? Ошибка?

p.s. То, что 11 — внутренний номер версии, а не год, было понятно. Не было понятно, каким будет финальное название продукта. 2012, 2013, RT или что ещё. Официальных заявлений на эту тему не было.

На MSDN до последнего времени висела надпись Visual Studio 11. И изменение её на 2012 какбэ намекает…
Всего голосов 32: ↑10 и ↓22-12
Комментарии12

.Net, UTF-16 и регулярные выражения

Время на прочтение3 мин
Количество просмотров2.3K
Как-то мне понадобилось проверить, является ли XML-имя правильным. Что может быть проще? Смотрим стандарт, где четко описано, какими символами может имя начинатся, а какими — продолжаться, все просто и понятно:

[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
[5] Name ::= NameStartChar (NameChar)*


Практически готовое регулярное выражение, легкая обработка напильником Ctrl+H…

    public const string NameStartCharPattern = @"\:|[A-Z]|_|[a-z]|[\u00C0-\u00D6]|[\u00D8-\u00F6]|[\u00F8-\u02FF]|[\u0370-\u037D]|[\u037F-\u1FFF]|[\u200C-\u200D]|[\u2070-\u218F]|[\u2C00-\u2FEF]|[\u3001-\uD7FF]|[\uF900-\uFDCF]|[\uFDF0-\uFFFD]|[\u10000-\uEFFFF]";
    public const string NameCharPattern = NameStartCharPattern + @"|-|\.|[0-9]|\u00B7|[\u0300-\u036F]|[\u203F-\u2040]";
    public const string NamePattern = @"(?:" + NameStartCharPattern + @")(?:" + NameCharPattern + @")*";

* This source code was highlighted with Source Code Highlighter.


Пишем тест…
Assert.That(Regex.Match("4a", Patterns.NamePattern), Is.False);
* This source code was highlighted with Source Code Highlighter.

Чисто, просто, понятно… Упал!
Как, почему?
Всего голосов 37: ↑31 и ↓6+25
Комментарии18

Атипичные клавиатуры

Время на прочтение7 мин
Количество просмотров18K
Говорят, что обычная QWERTY-клавиатура была изобретена с целью уменьшить скорость набора, потому что у слишком быстрых машинистов первые машинки клинили. Не знаю, сколько в этом утверждении правды, но то, что раскладка далеко не идеальна — факт. Факт также то, что разрабатывалась она для печати десятью пальцами на больших клавишах размещенных в три ряда.

В неизменном виде она перекочевала на электрические пишущие машинки, а затем и на компьютерные клавиатуры, где все стало ещё удобнее — теперь клавиши срабатывали от легкого нажимания, и по ним не приходилось лупить со всей дури.
Все было бы просто отлично, если бы не страсть к минимизации. Ноутбуки, нетбуки, классические смартфоны (не «тачфоны») — QWERTY-клавиатура стремительно уменьшалась в размерах, сохраняя при том свою сущность. Для некоторых таких творений впору вести набор спичками. Были и неплохие инженерные решения — например на Sony-Ericsson M600i клавиши-качели содержали по две-четыре символа, и они выбирались в зависимости от способа нажима.

Но когда это добро перекочевало на экраны… возьмем в качестве образца айфон(да, исторически первым [массовым] тачфоном все-таки было яблоко): три с половиной дюйма диагонали, отношение сторон — 2:3. Кто помнит теорему Пифагора, какова ширина экрана?
x² + (3x/2)² = 3,5²
x² = 49/13
x ≈ 1,94" ≈ 49,3мм.
Итак, ширина экрана — меньше 5 сантиметров. В ряду — 10 клавиш. Получается — около 5 мм на клавишу, и это включая промежутки между ними. Не знаю как у вас, а меня пальцы ощутимо шире, да и печатать на приборе таких размеров я могу только одним, ну максимум двумя большими пальцами одновременно. Ну не могу я печатать на ЭТОМ, при всей его умности! Хватит обратной совместимости! Я печатать вслепую научился за неделю, так дайте мне клавиатуру, где не придется целится в клавиши! Я её изучу! Я хочу комфортно и быстро печатать!

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

Их я и попытаюсь сегодня осмотреть.
Читать дальше →
Всего голосов 161: ↑148 и ↓13+135
Комментарии157

NuGet — качаем пакеты из интернета в процессе сборки

Время на прочтение3 мин
Количество просмотров19K
UPD: Метод, аналогичный использованному здесь включен в поставку NuGet 1.6. Соответственно статья устарела.

Вот что мне всегда нравилось в джаве, так это Maven. Один файл со списком всего нужного, и никаких бинарников в репозитории. Когда появился NuPack, я решил — ура, вот оно, счастье пришло на нашу улицу. Но не тут то было. NuPack представлял удобный интерфейс для работы с пакетами… но без возможности нормально вкрутится в процесс сборки.

Поковырял я его тогда, посмотрел, но так реальной пользы и не увидел. Не больно большая помощь — качать ручными powershell-командами пакеты поименно. Ну да, удобнее, чем скачивать фиг знает откуда, да еще руками references добавлять, но ведь мне это далеко не каждый день нужно. В общем, игра не стоит свеч.

Но в один прекрасный день я понял, что с папкой Shared\Bin в моем сорц-контроле нужно что-то делать, ибо распухла она уже неимоверно. Решил глянуть я, не изменилось ли что-нибудь с NuPack-ом, который уже NuGet-ом стал именоваться? Нет, воз и дальше там.

Но у nuget.exe появилась интересная фича…
Читать дальше →
Всего голосов 35: ↑32 и ↓3+29
Комментарии14

Частотный анализ украинского языка

Время на прочтение3 мин
Количество просмотров15K
Понадобилась мне для благого дела таблица частот пар букв (так называемых биграмм или диграмм) для украинского языка. Причем не просто украинского языка, а современного живого интернет-языка, именного того, на котором происходит современное общение в украиноязычной среде. Единственные известные мне результаты были построены на довольно малой выборке, отличной от того, что мне нужно было, да и серьезная преобработка текста в них могла повлиять на результат (и наверное таки повлияла, но об этом далее).

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

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

Следующая идея: форум.

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

… Сами виноваты, сказал я и запустил wget.

Читать дальше →
Всего голосов 77: ↑65 и ↓12+53
Комментарии152

OnPropertyChanged со строгими именами

Время на прочтение2 мин
Количество просмотров4.6K
Меня дико бесит OnPropertyChanged. Он требует передачи ему строки с именем идентификатора… Мало того, что такой код не верифицируется компилятором, так еще и никакого Intellisence — тайпи весь идентификатор от начала до конца… А если опечатаешся — так проглотит и во время выполнения. Вобщем, нехорошая вещь. Но в MVVM без нее никуда, как и в WPF без MVVM.

Последняя проблема худо-бедно решалась вот таким костылем, содранным отсюда, который вызывался из OnPropertyChanged:
[Conditional("DEBUG")]
[DebuggerStepThrough]
public void VerifyPropertyName(string propertyName)
{
  // Verify that the property name matches a real, 
  // public, instance property on this object.
  if (TypeDescriptor.GetProperties(this)[propertyName] == null)
  {
    string msg = "Invalid property name: " + propertyName;

    if (this.ThrowOnInvalidPropertyName)
      throw new Exception(msg);
    else
      Debug.Fail(msg);
  }
}


И вот сегодня я совершенно случайно нашел красивый способ избавится от него.
Читать дальше →
Всего голосов 43: ↑28 и ↓15+13
Комментарии23

Две раскладки в одном флаконе

Время на прочтение2 мин
Количество просмотров11K
Раньше мне приходилось использовать три раскладки клавиатуры. И в этом топике я хочу рассказать, как мне удалось сократить их число до двух. Эта хитрость универсальна и в большинстве случаев позволяет сократить количество раскладок к количеству алфавитов. Не претендую на оригинальность — идея лежит на поверхности, и сразу предупреждаю — если у вас и так только две раскладки — топик этот вам, скорее всего, не поможет.

Первая — английская, рабочая. Вторая — украинская, родная, основная для общения. Третья — русская, в общем обычно не используемая, разве иногда — погуглить что-нибудь, вот, на Хабре комент или топик написать. При этом третья раскладка висела в списке активных, но при работе и постоянном переключении украинская-английская-украинская постоянно приходилось нажимать лишний раз Alt+Shift или Ctrl+Shift. Кроме того, часто случалось, что начал печатать, вроде как все хорошо, ан нет — раскладка русская, вместо 'і' пошли 'ы', вместо 'є' — 'э', и тому подобное. Мучился я так, мучился, и вот в один прекрасный день решил это дело как-то
оптимизировать
Всего голосов 80: ↑61 и ↓19+42
Комментарии137

К айтишнику — на мальчишник

Время на прочтение1 мин
Количество просмотров613
У меня женится боевой товарищ. Завтра. Сегодня будет боулинг, сауна и много пива. Чтобы это дело не превратилось в обычную пьянку, нужно сделать ему какой-то необычный подарок.

Например — такую вот футболку, за неимением времени на хорошую печать нарисованную CD-маркером от руки:


Да, знаю — код не совсем валидный, сначала параметром метода Where должна была быть лямбда. Но в целях экономии места на футболке часть "woman =>" была выброшена.
В числе других подарков — медаль «За мужество/Game over», бита с надписью «Последнее слово (то, что сверху)», розовый поводок для жены.

Ох, чувствую, напьюсь сегодня :)
Всего голосов 185: ↑90 и ↓95-5
Комментарии32

Введение в Continuous Integration

Время на прочтение5 мин
Количество просмотров177K
Недавно я попал на новый проект, с задачей создать небольшое приложение с нуля. Разговариваю с тестером:
— А как тебе новые версии поставлять?
— Можешь как все остальные на проекте, через SVN.
— То-есть ты сама билдить будешь?
— Да нет… Бинарники оттуда беру.


Оказывается, очень много программистов, даже имеющих в подписях слова вроде Senior или Superior никогда в жизни не стыкались с понятием CI, или слабо себе представляют что это такое. Не найдя отдельных публикаций на Хабре на эту тему, решил восполнить пробел, а заодно и по возможности заработать желанный инвайт.
Читать дальше →
Всего голосов 104: ↑91 и ↓13+78
Комментарии65

Информация

В рейтинге
Не участвует
Откуда
Львов, Львовская обл., Украина
Дата рождения
Зарегистрирован
Активность