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

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

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

Событийно-ориентированный HTTP-сервер на C# с помощью Rx и HttpListener

Время на прочтение4 мин
Количество просмотров26K
Достаточно большое название? Да? В этом посте я покажу Вам альтернативный подход в создании простого событийно-ориентированного HTTP-сервера на C#, используя мощь Reactive Extensions.
Читать дальше →
Всего голосов 52: ↑48 и ↓4+44
Комментарии4

Небольшой лайфхак для uTorrent, помогающий разгрести мусор в папке закачек

Время на прочтение2 мин
Количество просмотров63K
Наверняка у многих из нас на компе есть папочка «Downloads» (или «Unsorted», или какая-нибудь еще), куда мы сохраняем скачанные торрентом файлы. Обычно в этой папке у меня творится сущий ад и бардак, ибо что-то я еще не послушал, что-то не посмотрел, а что-то попросту забыл удалить или оставил раздаваться, ибо перехешировать лень. В этом небольшом топике я предлагаю простой способ (для Windows) использования меток в uTorrent, чтобы автоматизировать процесс раскидывания файлов по категориям.
Читать дальше →
Всего голосов 115: ↑93 и ↓22+71
Комментарии87

Ненавязчивая валидация в ASP.NET MVC3

Время на прочтение5 мин
Количество просмотров8.9K
Не так давно я начал разрабатывать сайты на ASP.NET MVC и в одном из моих проектов у меня появилась потребность в нестандартном валидаторе, который проверял бы обязательность заполнения элемента формы в зависимости от значения другого элемента. Именно об этом я и хочу рассказать.

Сайт разрабатывался на автомобильную тематику. Необходимость в валидаторе появилась на форме регистрации. Пользователь может зарегистрироваться как частное лицо и как автодиллер. Если пользователь хочет зарегистрироваться как автодиллер, то ему необходимо заполнить несколько дополнительных обязательных полей. Можно было конечно сделать регистрацию в несколько этапов, но хотелось чтобы весь процесс регистрации проходил за один шаг.
Читать дальше →
Всего голосов 29: ↑22 и ↓7+15
Комментарии11

Dropbox + AutoIt + utorrent

Время на прочтение4 мин
Количество просмотров8.5K
Добрый день. Читал про разные связки Dropbox и utorrent, но не одна мне не подходила. Исходя из опыта закачек ранее, следовало только одно, если сразу не указать место куда сохранять и нужное название файла, потом он так и останется в папке «Не разобранное» с название «Avatar.2009.Extended.Collectors.Cut(1080p).mkv». Если даже потом разобрать скаченное, надо будет перезапускать торрент файлы и указывать уже новый путь к файлу, чтобы их раздавать. А если учесть, что дома помимо меня смотрят фильмы еще родители и племянница, то такое название оставлять было нельзя.

Итак необходимые требования к программе:


1. добавление торрентов удаленно не подключаясь к домашнему компьютеру (ДК);
2. возможность указать путь к файлу на ДК;
3. возможность указать имя скачиваемого файла;
4. удаленно отслеживать какие файлы поставились на закачку, какие завершили закачку.
Читать дальше →
Всего голосов 42: ↑35 и ↓7+28
Комментарии37

App.Config и Custom Configuration Sections

Время на прочтение5 мин
Количество просмотров125K
Данная статья может показаться банальной, но иногда что-то полезное забывается, а читать на импортном языке лень и книжки под рукой нет. Поэтому я, обратившись к гуглу, нашел хорошее описание процесса создания обработчика конфигурационной секции файла app.config в .net приложениях, перевел его, дополнил замечаниями (курсив) и комментариями и решил опубликовать.

Я уверен, что многим из вас приходилось использовать файл конфигурации App.Config для хранения инициализирующих или конфигурационных данных приложения. И я так же уверен в том, что многим из вас хотелось создать в данном файле свои собственные структуры для хранения настроек. Но в итоге приходилось использовать встроенные возможности секции <appSettings> и получать значения, используя конструкцию вида:


ConfigurationManager.AppSettings["MyKey"]


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

Итак, для того что бы загрузить свою структуру данных из файла App.Config нам потребуются следующие классы:
  1. ConfigurationSection — Этот объект вернет нам пользовательскую секцию.
  2. ConfigurationElementCollection — Это собственно коллекция элементов, которые мы определим в пользовательской секции.
  3. ConfigurationElement — Это сам элемент, описывающий какую-от определенную вами сущность.


Приступим к реализации.
Всего голосов 31: ↑26 и ↓5+21
Комментарии15

Собственная страница ошибки 404 на ASP.NET MVC

Время на прочтение6 мин
Количество просмотров27K
При разработке проекта на ASP.NET MVC возникла необходимость сделать собственную страницу ошибки 404. Я рассчитывал, что справлюсь с этой задачей за несколько минут. Через 6 часов работы я определил два варианта ее решения разной степени сложности. Описание — далее.
Читать дальше →
Всего голосов 36: ↑29 и ↓7+22
Комментарии28

Приложения для приема цифрового телевещания средствами DirectShow

Время на прочтение8 мин
Количество просмотров3.7K
Приложение написано под ОС Windows7, DirectX 9, модель тюнера – AverTV Duo Hybrid PCI-E2, язык C#

Microsoft TV Technologies Internals. В этой статье описан граф для приема цифрового телевещания, а также фильтры, которые используются при постороении графа.

Для создания приложения необходимо:
1. Построить граф.
В своем графе я использую следующие фильтры:
• Microsoft DVB-T Network Provider
• AVerMedia 716x BDA DVBT Tuner (в зависимости от вашей модели Тюнера)
• AVerMedia 716x BDA Digital Capture (в зависимости от вашей модели Тюнера)
• MPEG2 Demultiplexer
• BDA MPEG2 Transport Information Filter
• MPEG-2 Sections and Tables
• Microsoft DTV-DVD Video Decoder
• Video Mixing Renderer 9
Читать дальше →
Всего голосов 27: ↑22 и ↓5+17
Комментарии16

Строим DSL на C# при помощи парсер-комбинаторов

Время на прочтение9 мин
Количество просмотров13K

Перевод статьи Николаса Блумхардта, известного .NET разработчика, автора IoC/DI контейнера Autofac. В этой статье Николас показывает на реальном примере как с наименьшими усилиями написать парсер предметно-ориентированного языка программирования с помощью Sprache, библиотеки парсер-комбинаторов.


Наш текущий проект включает в себя небольшой процесс подачи и утверждения заявок на создание учетных записей пользователей. Это хороший пример для обсуждения предметно-ориентированных языков и Sprache. Сейчас я опишу некоторые требования.

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

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

Читать дальше →
Всего голосов 50: ↑44 и ↓6+38
Комментарии11

Применение паттерна MVP в классическом ASP.NET

Время на прочтение3 мин
Количество просмотров5.8K
Приходилось ли Вам сталкиваться с долгоиграющими проектами на ASP.NET?
Может быть Вы сейчас над таким проектом как раз и трудитесь?
Если да, то вы скорее всего сталкивались со сложно переплетенным набором событий, логики и валидаций внутри классов страниц.
Эта статья рассказывает о том как можно упростить жизнь на таких проектах используя все тот же шаблон Model-View-Presenter.
Читать дальше →
Всего голосов 16: ↑11 и ↓5+6
Комментарии24

Как сделать собственный видео-плеер на HTML5 Video

Время на прочтение9 мин
Количество просмотров189K
Ранее мы уже рассмотрели общие вопросы использования HTML5 Audio и Video и начали погружаться в детали, начав с задачи определения поддержки браузером нужного кодека. Сегодня мы рассмотрим задачу создания собственного видео-плеера на HTML5 Video.


Напомню, что video-элемент сам по себе уже обеспечивает необходимый набор контролов для управления проигрыванием. Чтобы была видна панель управления воспроизведением, достаточно указать атрибут controls.

<video src="trailer_480p.mp4" width="480" height="270" poster="poster.gif" controls />

Однако, как я отмечал в вводной статье, со стандартными контролами есть проблема, которая заключается как раз в том, что выглядят они нестандартно. Другими словами, в каждом браузере они выглядят по-своему (проверить, как выглядят контролы в разных браузерах, можно на примере Video Format Support на ietestdrive.com — просто откройте его в двух-трех различных браузерах).
Читать дальше →
Всего голосов 99: ↑84 и ↓15+69
Комментарии17

20 бесплатных дополнений для Visual Studio

Время на прочтение4 мин
Количество просмотров39K
Для Visual Studio 2010 создано уже около 900 дополнений. Многие из них позволяют облегчить решение рутинных задач, добавить удобства. Ниже представлено двадцать популярных дополнений, которые вы возможно найдете полезными для вашей работы.
Читать дальше →
Всего голосов 146: ↑135 и ↓11+124
Комментарии55

Поработаем с MongoDb

Время на прочтение4 мин
Количество просмотров105K


В текущее время появляется всё больше high-load проектов оперирующие колоссальным объемом данных. И уже нельзя обойтись классической реляционной моделью хранения этой информации. Всё более популярными становятся NoSQL базы данных (NoSQL — обозначает Not only SQL). Одной из таких баз данных является MongoDB, которая уже заслужила внимание к себе таких компаний как Disney, craiglist, foursquare. К тому же тут неоднократно писали о ней:
NoSQL, используя MongoDB, NoRM и ASP.NET MVC
Шардинг MongoDB на пальцах
Репликация MongoDB на пальцах

Это еще одна статья о работе с MongoDb в среде .net.

Что потребуется:
1. Скачайте (http://www.mongodb.org/downloads), распакуйте и запустите mongod (это сервер)
2. Драйвер (https://github.com/mongodb/mongo-csharp-driver/downloads)
3. Поехали

Читать дальше →
Всего голосов 47: ↑37 и ↓10+27
Комментарии22

Content editable в HTML5

Время на прочтение2 мин
Количество просмотров60K
HTML5
Одним из нововведений HTML5 стала возможность редактировать часть страницы прямо в браузере. Эта фича получила название content editable. Она работает во всех современных браузерах. Чтобы сделать часть страницы редактируемой, нужно поставить тегу атрибут contenteditable="true". Под тегом может стоять практически всё: текст с форматированием, картинки, списки и даже flash-ролики. Но пользователь может добавлять толко текст, остольное он может только удалять. В этом посте я покажу пример использования content editable на веб-сайте.
Читать дальше →
Всего голосов 71: ↑58 и ↓13+45
Комментарии28

Многопоточный сервер на C# за 15 минут

Время на прочтение11 мин
Количество просмотров332K
C# довольно простой и гибкий язык. Вместе с .NET поставляется довольно много уже готовых классов, что делает его еще проще. Настолько, что вполне можно написать простой многопоточный HTTP-сервер для отдачи статического содержимого всего за 15 минут. Можно было бы использовать уже готовый класс HttpListener и управиться еще быстрее, но цель этой статьи — показать, как вообще можно сделать нечто подобное в C#.
Читать дальше →
Всего голосов 94: ↑77 и ↓17+60
Комментарии72

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

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

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

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

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

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

Добавляем информативности RSS-лентам от RuTracker.org

Время на прочтение5 мин
Количество просмотров16K

Введение


В своем первом топике я писал как организовать скачивание избранных раздач с любимого torrent-трекера, не отвлекаясь от чтения новостей. В этом топике будет описан оверкилл-способ, позволяющий еще более упростить процесс получения информации о каждой конкретной раздаче, пришедшей к нам в виде записи RSS-ленты. Как известно, сам по себе RuTracker.org публикует в RSS-ленте только ссылки на соответствующие ветки форума. Никакого описания раздачи элемент ленты не содержит, а хотелось бы иначе.

Предвидя возражения в духе «Хватит изобретать велосипед, лучше возьми готовые RSS. Например, от xpoft.ru» (спасибо egor_bulychev за наводку; без сарказма, правда, спасибо), скажу следующее: инструмент интересный, шустрый, лента с нужным содержимым формируется в несколько кликов мышью. Но, к сожалению, сгенерированные им RSS-ленты не радуют постоянством содержимого элементов: то придет исчерпывающая информация о раздаче, а то только название, да постер. Причем зависимости содержимого ленты от фактического описания раздачи на RuTracker.org выявлено не было. Такой расклад меня не устраивает: хочется и описание почитать, и media-info со скриншотами посмотреть, да еще и не переходя на оригинальную страницу с описанием.
Далее в картинках описан вариант решения такой задачи
Всего голосов 41: ↑39 и ↓2+37
Комментарии14

Как качать торренты не выходя из Google Reader – способ для ленивых

Время на прочтение4 мин
Количество просмотров5.6K

Введение


Я активно пользуюсь сервисом Google Reader для чтения RSS-каналов в общем и для отслеживания появления интересующих меня раздач на torrent-трекерах в частности. А также частенько качаю с торрентов любимые сериалы. В некоторый момент захотелось избавиться от промежуточных шагов между просмотром записи канала и скачиванием торрента и немного автоматизировать процесс вылавливания из сети интересной и нужной информации.

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

На этом месте внимательный читатель непременно заметит: так ведь можно на каждый RSS-канал средствами torrent-клиента настроить фильтры и выкачивать только те раздачи, которые представляют реальный интерес. Заметит и получит резонный, по-моему, ответ: на все случаи жизни фильтры не настроишь. Нужен более универсальный вариант.

Таким вариантом для меня стала автоматическая закачка раздач, отмеченных в Google Reader. О том, как это реализовать подручными средствами, рассказано под катом.
Читать дальше →
Всего голосов 66: ↑60 и ↓6+54
Комментарии36

StructureMap — краткий справочник для работы (1/3)

Время на прочтение10 мин
Количество просмотров12K
Сегодня я хочу рассказать о IoC контейнере StructureMap (и это не перевод устаревшей официальной документации), который мне приглянулся гораздо больше чем Unity. Хотя, честно сказать, мои взаимоотношения с Unity не сложились с самого начала, когда я увидел километровые файлы конфигурации к нему или же двухсот знаковые строки конфигурации в коде. Не будем о грустном.

StructureMap не только мне показался более удобным чем другие реализации DI\IoC, достаточно набрать в гугле StructureMap vs Unity и получить кучу ссылок, где люди обсуждают и показывают наглядно, что в работе самым удобным, гибким и естественным является StructureMap.

Ссылка раз, два и три. Ко всему прочему StructureMap еще и достаточно быстрый.
Вот еще очень интересные подборки материалов по сравнению фреймворков http://www.sturmnet.org/blog/2010/03/04/poll-results-ioc-containers-for-net

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

В чем, на мой взгляд, плюсы StructureMap:
  • Настройка с помощью DSL
  • Очень гибкая настройка всего
  • Простота конечного использования
  • Возможности для проверки внутренних связей
  • Поддержка тестирования out-of-the-box

Еще много есть интересных и полезных вещей в StructureMap, но их было бы неправильно отнести к плюсам, лучше назвать их приятным дополнением, которые только облегчают жизнь.
Читать дальше →
Всего голосов 27: ↑22 и ↓5+17
Комментарии24

jQuery UI как инфраструктура для плагинов

Время на прочтение6 мин
Количество просмотров21K

Введение


jQuery UI больше всего известен как набор готовых виджетов. Главное их преимущество, на мой взгляд, — консистентное API: каждый виджет управляется одинаково. Второе их преимущество — они хранят свое состояние: если повторно навесить виджет на элемент, то результатом будет уже существующий инстанс виджета.
Но jQuery UI — это не только набор окошечек и табов (далеко не всеми любимых). Это еще целая инфраструктура для создания своих виджетов: с удобным консистентным API, с хранением состояния и с возможностью наследования. Как ни странно, это для многих новость, в результате чего и появилась эта статья — так же, как это было новостью для меня всего несколько месяцев назад.
Все, что вы хотели узнать о jQuery UI, но стеснялись спросить
Всего голосов 87: ↑86 и ↓1+85
Комментарии51

Построение индекса для поисковой машины

Время на прочтение4 мин
Количество просмотров14K
Полное содержание и список моих статей по поисковой машине будет обновлятся здесь.

В предыдущих статьях я рассказывал про работу поисковой машины, вот и дошел до сложного технически момента. Напомню что разделяют 2 типа индексов – прямой и обратный. Прямой – сопоставление документу списка слов в нем встреченного. Обратный – слову сопоставляется список документов, в которых оно есть. Логично, что для быстрого поиска лучше всего подходит обратный индекс. Интересный вопрос и про то, в каком порядке в списке хранить документы.

На предыдущем шаге DataFlow от модуля-индексатора мы получили кусочек данных в виде прямого индекса, ссылочной информации и информации о страницах. Обычно у меня он составляет около 200-300mb и содержит примерно 100 тысяч страниц. Со временем я отказался от стратегии хранения цельного прямого индекса, и храню только все эти кусочки + полный обратный индекс в нескольких версиях, чтобы можно было откатиться назад.

Устройство обратного индекса с виду, простое, – храним файл, в нем в начале таблица адресов начала данных по каждому слову, потом собственно данные. Это я утрировано. Так получается самый выгодный для оптимизации скорости поиска формат — не надо прыгать по страницам — как писали Брин и Пейдж, — 1 seek, 1 read. На каждой итерации перестроения, я использую 20-50 кусочков информации описанных выше, очевидно загрузить всю инфу из них в память я не могу, тем более что там полезно хранить еще кучу служебных данных об индексе.
Читать дальше →
Всего голосов 33: ↑32 и ↓1+31
Комментарии9

Информация

В рейтинге
Не участвует
Откуда
Newmarket, Ontario, Канада
Дата рождения
Зарегистрирован
Активность