Search
Write a publication
Pull to refresh
5
0
Михаил @mlurker

User

Send message

8 полезных регэкспов с наглядным разбором

Reading time2 min
Views274K
О мощи и гибкости регулярных выражений написано много, и их использование давно уже является стандартом для различного рода операций над текстом. Пожалуй, чаще всего регэкспы работают при валидации вводимых данных — здесь им практически нет альтернативы, если не считать громоздкий циклический разбор с кучей неочевидных проверок. Начнём с самого простого:

1. Часть ЧПУ (человекопонятный URL)


По сути, слово с дефисами.

Паттерн: /^[a-z0-9-]+$/
short_url

Примеры посерьёзнее

Менеджер пакетов для .NET

Reading time3 min
Views2.5K
Менеджеры пакетов в том или ином их проявлении есть практически везде: Gems и Rip для Ruby, Maven для Java и море разливенное для различных дистрибутивов Linux и Unix. И только .NET-разработчики по старинке ползают по сайтам в поисках той или иной версии необходимой библиотеки.

Будучи одним из таких разработчиков и устав от постоянных поисков требуемых компонентов, я решил, что с этим пора заканчивать. Результатом такого решения стал таки менеджер компонентов для платформы .NET
Продолжение

Software Configuration Management // Конфигурации и baselines

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

Ниже речь пойдет о следующих вещах:
— Рабочие продукты и конфигурации;
— Компонентная разработка;
— Продуктовые линейки;
— Стабилизация результатов работы;
— Baselines AKA базовые конфигурации;
— Конфигурации при компонентной разработке;
— Конфигурации при наличии продуктовых линеек.

Рассказывай, не тяни!

Цикл статей по основам Software Configuration Management

Reading time5 min
Views24K

Пролог


Что такое управление конфигурацией в разработке ПО? Зачем оно нужно? Думаю, немногие способны полностью и внятно ответить на этот вопрос. Большинство обычно вспоминает системы контроля версий, которые сами используют. Кто-то упоминает багтрекинг. Кто-то считает вершиной CM отращивание веток в любимой системе контроля версий. А кто-то вообще уходит в сторону и начинает говорить про ITIL и про то, как он записывает в какую-нибудь базу параметры всего софта, который установлен у него в фирме.

Несколько странно и немного досадно наблюдать за этим. Дело в том, что я проработал в SCM в общем сложности около 5 лет, из них 3 года — интегратором в Motorola, на одном из проектов по разработке софта для сотовых телефонов. По ходу дела прочитал кучу материалов по этой теме и получил большой практический опыт — в том числе по работе с одной из мощнейших систем контроля версий IBM Rational ClearCase (см. linkedin в профиле). В итоге в голове сформировалась некоторая целостная картина того, что же это на самом деле — software configuration management.
Ну а дальше-то что?

Программирование по контракту в .NET Framework 4

Reading time9 min
Views9.4K
Столкнувшись с проблемой смены работы и желания работать разработчиком в хорошей конторе, понял, что мне не хватает знаний в области архитектуры, проектирования, ООП и прочих, не специфичных для платформы или языка вещах. Источники получения информации, кроме личного опыта, стандартные – книги и Интернет.

К тому времени были прочитаны книги Фаулера о рефакторинге и книга GoF. Эти книги многое мне дали и были очень полезными, но хотелось чего-то более основополагающего об ООП. Поискав по форумам, я нашел несколько книг, которые меня заинтересовали:
Бертран Мейер «Объектно-ориентированное конструирование программных систем»
Гради Буч, Объектно-ориентированный анализ и проектирование
Барбара Лисков. Использование абстракций и спецификаций при разработке программ

К сожаление последней не нашел в электронном виде, а в бумажном не знаю даже где искать. Из наличия в магазине на тот момент была только книга Мейера, ее я и взял.

Читать дальше →

Создаем OLAP куб. Часть 2

Reading time4 min
Views66K
OLAP

Итак, продолжаем создавать куб.
Напомню, что в предыдущей статье, мы создавали Data Warehouse для хранения голосов хабра-пользователей за хабра-топики. Для тех, кто хочет начать сразу создавать куб, я выложил скрипт, который создает и наполняет хранилище (на моей машине скрипт занял 10 минут и нагенерил 1866268 хабра-голосов).
Для того, чтобы создать OLAP куб, нам понадобится:
  • SQL Server, на котором хранится наш HabraDW (подойдет любой);
  • Microsoft SQL Server, с запущенными Analysis Services (2005/2008);
  • Business Intelligence Studio, которая входит в пакет клиентских приложений для Microsoft SQL Server-а, и интегрируется с Visual Studio, если она у вас установлена (2005/2008);
Читать дальше →

Динамическая компиляция кода в C#

Reading time5 min
Views33K
Использовать компилятор из кода C# достаточно просто. А вот зачем – это другой вопрос :).

Hello World


Напишем первый простой пример. Создаем консольное приложение и напишем следующий код:
using System;<br>using System.CodeDom.Compiler;<br>using System.Collections.Generic;<br>using Microsoft.CSharp;<br><br>namespace ConsoleCompiler<br>{<br>  internal class Program<br>  {<br>    private static void Main(string[] args)<br>    {<br>      // Source code для компиляции<br>      string source =<br>      @"<br>namespace Foo<br>{<br>  public class Bar<br>  {<br>    static void Main(string[] args)<br>    {<br>      Bar.SayHello();<br>    }<br><br>    public static void SayHello()<br>    {<br>      System.Console.WriteLine(""Hello World"");<br>    }<br>  }<br>}<br>      ";<br><br>      // Настройки компиляции<br>      Dictionary<string, string> providerOptions = new Dictionary<string, string><br>        {<br>          {"CompilerVersion", "v3.5"}<br>        };<br>      CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions);<br><br>      CompilerParameters compilerParams = new CompilerParameters<br>        {OutputAssembly = "D:\\Foo.EXE", GenerateExecutable = true};<br><br>      // Компиляция<br>      CompilerResults results = provider.CompileAssemblyFromSource(compilerParams, source);<br><br>      // Выводим информацию об ошибках<br>      Console.WriteLine("Number of Errors: {0}", results.Errors.Count);<br>      foreach (CompilerError err in results.Errors)<br>      {<br>        Console.WriteLine("ERROR {0}", err.ErrorText);<br>      }<br>    }<br>  }<br>}<br><br>* This source code was highlighted with Source Code Highlighter.

Запускаем и проверяем:
First Sample
Первое, на что стоит обратить внимание – это использование двух пространств имен (namespace):
  • Microsoft.CSharp
  • System.CodeDom.Compiler
В данных классах и содержится ключ к возможности компиляции. В нашем примере мы указываем что компилировать будем под .NET Framework 3.5, а так же указываем что мы хотим получить на выходе – Foo.exe, с возможностью запуска данного приложения.
Читать дальше →

Повышение работоспособности: как я избавился от бессонницы

Reading time2 min
Views13K
У многих айтишников есть проблемы со сном. Ниже — описание моей проблемы и метод, которым я её решил.

image
Несколько недель назад я получил сразу три крупных заказа, каждый из которых был жёстко ограничен сроками. Проекты были действительно интересными и хорошо оплачиваемыми, поэтому первые несколько дней я работал практически без сна. Естественно, производительность начала снижаться. Дошло до того, что я начал ловить себя на том, что несколько минут(!) я «тупо втыкал» в монитор, ничего при этом не делая, и даже не замечая своего аут-состояния.

Тогда я решил: всё, пора нормально выспаться. Сохранив всё «как есть», я отправился в постель… и понял, что проблема отнюдь не решена.
Читать дальше →

Text Template Transformation Toolkit (T4), часть 2: генераторы шаблонов

Reading time9 min
Views4.3K
Приветствую, Хабр!

Эта статья продолжит тему автоматической кодогенерации в Visual Studio с помощью T4 — Text Template Transformation Toolkit. Часть №1, чуть ранее опубликованная в этом блоге, описывала синтаксис T4 и элементарные принципы его использования. В этот же раз я решил подробнее осмотреть блог уважаемого Олега Сыча и ещё немного адаптировать к хабрааудитории некоторые из его наработок. В частности, сегодня обсудим следующие темы:
  • Создание повторно используемых и параметризируемых шаблонов
  • Создание генераторов шаблонов
  • Отладка, тестирование и расширение генераторов (ссылки)

Я не стал изобретать каких-то особенных примеров. История развития запроса с созданием хранимой процедуры, описанная Олегом, идеально подходит для иллюстрации проблемы, при которой могут потребоваться генераторы. Причем, что характерно, — не надуманной проблемы. Также статья придерживается принципа «меньше слов — больше кода».
Здесь и далее предполагается, что у вас установлена Visual Studio 2005/2008/2010, а также T4 Toolbox.

Да, я не прочь почитать ещё

Text Template Transformation Toolkit (T4): генератор кода в Visual Studio

Reading time8 min
Views29K
Приветствую, Хабр!

Сегодня мы поговорим о рутине. Время от времени каждому программисту приходится совершать много нудной, объемной и шаблонной работы, которую постоянно так и хочется автоматизировать, да руки не доходят. Вот об одном малоизвестном способе упростить себе жизнь с помощью кодогенерации я и хочу сегодня рассказать сообществу дотнетчиков. Способ известен как Text Template Transformation Toolkit или попросту T4.

А что это такое?

10 фраз, после которых ваше резюме отложат в сторону

Reading time1 min
Views14K
На TechRepublic опубликована любопытная заметка о том, какие слова и словосочетания лучше всего не использовать при составлении резюме. Дело не в том, что они заведомо плохие, а в том, что они уже стали шаблонными и любого опытного эйчара приведут в разражение. Итак, 10 стандартных клише, которым не место в современных резюме:

* Results-oriented professional (специалист, ориентированный на достижение результата)
* Cross-functional teams (имеется различная специализация)
* More than [x] years of progressively responsible experience (более, чем столько-то лет опыта, в чем-то отмеченного и зафиксированного)
* Superior (or excellent) communication skills (высочайшие способности к коммуникации)
* Strong work ethic (строгое соблюдение трудовой этики)
* Met or exceeded expectations (соответствую или превосхожу ожидания)
* Proven track record of success (есть подтверженный список достижений)
* Works well with all levels of staff (умение хорошо срабатываться с сотрудниками всех уровней)
* Team player (умею работать в команде)
* Bottom-line orientation (ориентирован на результат)

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

Интересно, как обстоит с этим дело в России — у нас же многое перенималось по западным канонам раньше?

Скругление углов на чистом CSS с анти-алисингом

Reading time5 min
Views8.9K
Вношу свои 5 копеек в проблему скругления уголков. Хочу предложить метод, который не революционный, а просто несколько усовершенствует другой.

Многие знакомы с методом скругления уголков средствами CSS, который активно использует Гугл. Я лично познакомился с ним на сайте Шторкин.ру.

Метод сделан на чистом CSS, без картинок, без JS, полностью кроссбраузерный. Он спокойно тянется в ширину и высоту. Единственный его недостаток: отсутствие сглаженности (алиасинг). В принципе, все вполне поправимо.
Немного кода и все работает

Microsoft Object Builder

Reading time9 min
Views2.1K
Всем привет! Это моя первая статья в Хабре. Столкнувшись сегодня в ленте на описание Java-фреймворков Spring и Tapestry, решил просмотреть Хабру и найти ценителей «конкурирующих» фреймворков от Microsoft – в частности Composite UI Application Block (CAB) и Unity. К моему удивлению, ничего не нашел. Увидев в коментах в статье про Java-фреймворки просьбу описать механизм инъекций зависимостей, решил начать свой цикл статей про .Net-фреймворки именно с разъяснения вопросов IoC. Итак, встречайте – краеугольный камень (в прошлом) замечательного движка CAB – Microsoft Object Builder.
Читать далее

Максимальный поток минимальной стоимости

Reading time15 min
Views86K
Транспортная задача (классическая) — задача об оптимальном плане перевозок товара со складов в пункты потребления на транспортных средствах.

Для классической транспортной задачи выделяют два типа задач: критерий стоимости (достижение минимума затрат на перевозку) или расстояний и критерий времени (затрачивается минимум времени на перевозку).

Под катом очень-очень много текста, т.к. рассказывается один из вариантов решения данной задачи «в картинках» для тех, кто мало знаком с графами. Листинг прилагается.

Путешествие в тысячу миль начинается с первого шага

Первые шаги с Unity: DI/IoC & AOP

Reading time7 min
Views71K

Введение


Если Вы когда-нибудь слышали такие слова, как IoC, DI, AoP, но не имеете четкого понимания этих терминов, надеюсь, эта статья поможет в них разораться на примере работы с Microsoft Unity контейнером.
Читать дальше →

Влияние звука на песок

Reading time1 min
Views4.4K
Звук может вдребезги разбить стакан или выбить окна в целом здании! Но оказывается, формирующую силу звука можно легко продемонстрировать…


Использованные видеоролики: 1, 2 и другие
Аудиоряд: Yonderboi — Riders On The Storm (The Doors Remix)
Монтаж и пояснения: www.SmartVideos.ru


Осуществить данный опыт можно и дома. Необходимо закрепить в центре металлический или стеклянный диск и поводить по нему смычком. Можно и просто рассыпать немного тонкого песка на корпус скрипки (или гитары) и слегка, так чтобы песок не рассыпался, провести смычком по одной из струн.

Перевод: эффективный способ работы с памятью в Compact Framework

Reading time5 min
Views1.2K
Оригинал статьи находится в блоге Роба Тиффани.

Кто-нибудь ещё помнит старые добрые времена DOS, когда мы проводили время, пытаясь выжать более 640Кб для драйверов, программ, резидентов и даже Windows? Такие вещи как QEMM, HIMEM, EMM386.EXE пробуждают у меня теплые воспоминания.

Читать дальше →

Простой способ добавить роутинг /key/value в ASP .NET MVC

Reading time6 min
Views2.8K
На днях представился случай познакомиться с ASP .NET MVC 1.0, о которой уже не раз читал в блогах и здесь, на Хабре. С первого взгляда понравилась простота используемой концепции и логичность связи с архитектурой ASP .NET (привычные aspx, ascx, masterpages, Global.asax — только теперь используемые несколько иначе). Однако, при всех удобствах, способа задания роутинга и передачи параметров в виде {Controller}/key1/value1/key2/value2 я не нашел. Их можно задать сколько угодно, но, к сожалению, при этом они должны стоять строго на указанном месте, а это иногда очень неудобно, особенно при передаче большого количества значений. Ведь какие-то аргументы могут иметь значения по умолчанию, и запихивать их в URL принудительно — не лучшее решение. Конечно, можно было бы воспользоваться стандартным, ?key1=value1&key2=value2 способом, но лично мне почему-то захотелось иметь возможность задавать параметры именно в таком, «MVC-style», если можно так выразиться :)
В общем, решил посмотреть, можно ли это исправить.

Подмена time.windows.com локальным ntp-сервером

Reading time1 min
Views19K
Демократия есть искусство управления цирком изнутри обезьяньей клетки.
Генри Луис Менкен


В крупных, постоянно меняющихся и развивающихся гетерогенных сетях установка адреса локального ntp-сервера на всех машинах может представлять определенную проблему. В данном случае можно воспользоваться возможностями DNS-сервера BIND и подменить выдаваемый по запросу «time.windows.com» ip-адрес.
Читать дальше →

Information

Rating
Does not participate
Location
Philadelphia, Pennsylvania, США
Registered
Activity