Search
Write a publication
Pull to refresh
74
0
Виталий Чужа @hDrummer

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

Send message

То, что нужно помнить о десятичном разделителе

Reading time2 min
Views42K
Все, кто когда-либо писали программы на C#, использовали такую простую функцию как
Convert.ToDouble(string value);
у меня, как и у остальных, до определенного момента никаких проблем с ней не возникало. У этой функции есть такая особенность, которая не всем известна — это то, что разделитель по умолчанию используется тот, который стоит в системе.
image
Читать дальше →

О том, как я на Android Market пошел

Reading time6 min
Views4.5K
Здесь уже было несколько статей о первых шагах на маркете, и каждая вызывает интерес. Во всяком случае, у меня. И я подумал, что не лишним будет поделиться банальной, в общем-то, историей о еще одном случае. Я не собираюсь в этой статье пиарить свое приложение, а намерен рассказать о некоторых аспектах жизни проекта в первый месяц и способах его продвижения, доступных каждому. Ну и немного лирики, разумеется…
Читать дальше →

Учебный курс. Работа с параллелизмом с Entity Framework в приложении ASP.NET MVC

Reading time12 min
Views13K
Это заключительная часть цикла статей, посвященного разработке с помощью Entity Framework и ASP.NET MVC 3. Первые главы вы можете найти по следующим ссылкам:
В предыдущих уроках вы работали со связанными данными. В этом уроке мы рассмотрим вопросы одновременного доступа. Вы создадите страницы, работающие с сущностью Department, и страницы для редактирования и удаления сущностей Department будут также обрабатывать ошибки параллелизма. Результаты работы изображены на иллюстрациях.

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

Когда использовать Parallel.ForEach, а когда PLINQ

Reading time13 min
Views78K

Введение


Обычно, при оптимизации программы для многоядерных компьютеров первым шагом является выяснение возможности разделения алгоритма на части, выполняющиеся параллельно. Если для решения задачи необходимо параллельно обрабатывать отдельные элементы из большого набора данных, то первыми кандидатами станут новые возможности параллельности в .NET Framework 4: Parallel.ForEach и Parallel LINQ (PLINQ)

Parallel.ForEach


Класс Parallel содержит метод ForEach, представляющий собой многопоточную версию обычного цикла foreach в C#. Подобно обычному foreach, Parallel.ForEach выполняет итерации над перечислимыми данными (enumerable), но с использованием множества потоков. Одна из более часто используемых перегрузок Parallel.ForEach выглядит следующим образом:

public static ParallelLoopResult ForEach<TSource>(
			 IEnumerable<TSource> source,
			 Action<TSource> body)

Ienumerable указывает на последовательность, по которой нужно выполнить итерации, а Action body задает делегат, вызываемый для каждого элемента. Полный список перегрузок Parallel.ForEach можно найти здесь.

PLINQ


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

Выполнение независимых операций


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

Разбираем KCaptcha, собираем заново… под .NET

Reading time4 min
Views3.1K
KCaptcha – довольно распространенная PHP библиотека для генерации CAPTCHA. Я довольно давно знаком с этим проектом, и так же давно меня не покидает одна мысль: «как там внутри все работает, как оно все устроено»? Да, бывает такое: мозг выделяет что-то, на первый взгляд крайне неприметное и непритязательное, но затем долгое время не упускает это что-то из головы. Так было с программированием, когда я впервые увидел кусочек кода на JavaScript, так стало и с библиотекой от Сергея Круглова, которую я и решил изучить.

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

Шло время, я то брался за KCaptcha, то опять бросал. Но раз за разом, по маленьким шажочкам приходило понимание кода. Общая картина постепенно вырисовывалась. Возможно, кому-то это покажется смешным: подумаешь, генерация случайного ключа плюс вывод на изображение! Мне так не казалось. Сейчас я смотрю на данные алгоритмы немного свысока, но память о попытках понять, казолось бы запутанный и временами не поддающийся осмыслению код, не дает возможности посмеяться над собой.

А зачем вообще ковыряться в коде? Подключил, и используй себе на здоровье! Благо, библиотека позволяет легко абстрагироваться от ненужных деталей. Этот вопрос я задавал и себе, пока мне не пришлось работать над одним ASP.NET проектом. Тогда возникла необходимость в защите некоторых страниц от спаммеров. Думаю, не нужно объяснять, что самый простой и распространенный способ защититься от ботов это каптча.

Раньше я не использовал в работе ничего кроме PHP и, рузумеется, никогда не видел CAPTCHA-решений под .NET. Быстрый поиск в гугле ничего кроме оберток ReCaptcha на C# не дал. Более глубокий анализ хостингов для opensource проктов привел к некоторым результатам, но то были давно заброшенные, незаконченные поделки. Они даже отдаленно не напоминали знакомую и уже частично изученную KCaptcha.

За все предыдущее врямя я немножко поднабрался опыта, да и с мотивацией теперь был полный порядок. Решено! Мне предстоит перенос KCaptcha с PHP на .NET.
Читать дальше →

Пишем архиватор на основе ZLib в .NET

Reading time4 min
Views18K

Зачем пишем


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

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

Пишем модульное приложение на .Net Framework

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

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

И снова скриншоты в один клик (C#)

Reading time4 min
Views28K

Синопсис


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

Сложно о простом или особенности Linq to objects

Reading time6 min
Views4.9K
LINQ to objects сейчас прочно вошел в нашу жизнь, победоносными шагами ступая по всему стеку .net приложений. В этой статье я бы хотел привести примеры нескольких не очевидных вещей, с которыми довелось столкнуться, работая с LINQ. Интересно — прошу под кат.
Читать дальше →

IIS + .NET + Json. Пишем свой Application Server

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

И так, что же такое «Сервер приложений»?
Читать дальше →

Пьеса «Разработка многопользовательской сетевой игры.» Часть 2: Это страшное слово «протокол»

Reading time7 min
Views19K


Часть 1: Архитектура
Часть 3: Клиент-серверное взаимодействие
Часть 4: Переходим в 3D

Итак, продолжим создание многопользовательской игры.
Сегодня мы рассмотрим создание протокола передачи данных.
А также создадим заготовки TCP сервера и соответственно клиента.

Добро пожаловать в зрительный зал.

[Киев] Семинар по асинхронному программированию в .Net

Reading time5 min
Views2K
Вчера я был на первом семинаре вообще и по .Net в частности и, так уж вышло, что вел этот семинар я  (да, кроме меня, там тоже были люди, правда). Семинар был посвящен асинхронному программированию на платформе .Net, который состоялся вчера в учебном центре Люксофта.

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

Семинар, по сути, был основан на основе двух моих статей по асинхронному программированию: “Асинхронное программирование и AsyncEnumerator” и “Знакомство с асинхронными операциями в C# 5”, а также статьи про внутреннее устройство итераторов: “Итераторы в языке C#”. Реактивные расширения, которые я тоже собрался рассмотреть, решительно не влезли; на рассмотрение только лишь RX-ов двух часов будет мало, так что я решил не распыляться.

В результате получилась презентация на 50 слайдов, примерно со следующей структурой:
Читать дальше →

Взлом матановой капчи на C# — это просто!

Reading time4 min
Views42K
В этом топике я хочу вам рассказать о взломе т.н. «матан-капчи», пример которой был представлен в недавнем топике Матановая капча на PHP — это просто!.
Прочитав статью автора об этой замечательной капче, мне захотелось написать программу для её распознавания, как говорится just for fun ;)
Читать дальше →

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

Reading time11 min
Views334K
C# довольно простой и гибкий язык. Вместе с .NET поставляется довольно много уже готовых классов, что делает его еще проще. Настолько, что вполне можно написать простой многопоточный HTTP-сервер для отдачи статического содержимого всего за 15 минут. Можно было бы использовать уже готовый класс HttpListener и управиться еще быстрее, но цель этой статьи — показать, как вообще можно сделать нечто подобное в C#.
Читать дальше →

Скрипты в .NET/Mono средствами самой платформы

Reading time6 min
Views5.1K

Введение


Работая тут над одним проектом, потребовалось мне, что бы функциональность проекта расширялась на лету и сторонними разработчиками, причём возможностей к расширению было как можно больше, с возможностью правки кода на лету. Соответственно плагины для этого не очень годились из-за необходимости их постоянной перекомпиляции после любой правки. Выход: скрипты. До этого со скриптами я работал достаточно давно и это была Lua на C++. Вариант хороший, если бы не несколько минусов:
  • Отсутствие нормальной реализации или прослойки под .NET/Mono — во всех что я видел были какие-то недоработки (может и плохо искал — как минимум пропустил Lua в TaoFramework)
  • По всей видимости, нужно было писать кучу биндингов что бы среда исполнения .NET/Mono могла нормально взаимодействовать со средой Lua и обратно.

Тогда-то я и задался вопросом — а может быть в .NET/Mono уже есть что-нибудь для реализации скриптов? И ответ был да. Пространство имён "System.CodeDom.Compiler" было как раз то, что мне надо — возможность реализовать скрипты которые максимально соединялись со средой .NET/Mono.
Читать дальше →

Настоящее понимание ViewState'а

Reading time30 min
Views63K
От переводчика: Это перевод статьи от одного из разработчиков ASP.NET, в которой подробно рассказывается о механизме управления состоянием страницы — ViewState'е. Несмотря на то, что статья написана в 2006 году, она до сих пор не потеряла своей актуальности.

ViewState — очень непонятное существо. Я попытаюсь положить конец всяческим кривотолкам, и постараюсь объяснить, как на самом деле работает механизм ViewState'а, от начала до конца, посмотрев на него с различных точек зрения.

Есть множество статей, авторы которых пытаются развеять мифы о ViewState'е. Можно даже подумать, что это все — борьба с ветряными мельницами (где ViewState – ветряные мельницы, а Интернет – инструмент борьбы). Но, я вам доложу, мельницы ещё не остановились. Как раз наоборот, они вертятся и заполняют собой вашу гостиную. Пора бы нанести по ним ещё один удар. Не тревожьтесь, при написании этой статьи ни одна ветряная мельница не пострадала.
Читать дальше →

Распознавание некоторых современных CAPTCHA

Reading time15 min
Views79K
Именно так называлась работа, представленная мной на Балтийском научно-инженерном конкурсе, и принёсшая мне очаровательную бумажку с римской единичкой, а также новенький ноутбук.

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

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

Простой web scraping на f#

Reading time6 min
Views7.4K
imageДостаточно законный вопрос почему такая избитая тема как web scraping и почему f#. 1. на f# web scraping намного увлекательней чем на c#  2. хотелось попробовать насколько f# применим для разработки не демо примеров а что то реально делающих программ 3. У f# есть интерактивная консоль, что при ковырянии в недрах HTML становится просто спасением. Сегодня с помощью f# будем покупать VW Touareg.
Если интересно...

Html Agility Pack — удобный .NET парсер HTML

Reading time5 min
Views165K
Всем привет!
Как-то раз мне пришла в голову идея проанализировать вакансии размещенные на Хабре. Конкретно интересовало, есть ли зависимость между размером зарплаты и наличия высшего образования. А еще сейчас у студентов идет сессия (в том числе и у меня), то возможно кому-то уже надоело трепать нервы на экзаменах и этот анализ будет полезен.
Так как я программист на .Net, то и решать эту задачу — парсить объявления на Хабре я решил на C#. Вручную разбирать строки html мне не хотелось, поэтому было придумано найти html-парсер, который помог бы осуществить задачу.
Забегая вперед скажу, что из анализа ничего интересного не вышло и сессию придется сдавать дальше :(
Но зато немножко расскажу про весьма полезную библиотеку Html Agility Pack
Читать дальше →

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

Reading time6 min
Views116K
image

Речь пойдёт о далёком 2005 году, когда только-только вышла Civilization4 от Sid Meier. К тому времени я плотно висел в Civilization3, прошёл её раз дцать на самых разных картах, и тут вышла долгожданная четвёрка. Это были годы P3-512Mb для mid-end и P4-1Gb в hi-end. Только топовые конфиги в те годы имели два гига памяти на борту.

Civilization 4 вышла с графикой уровня года 2002-2003го, что в принципе нормально для мэинстрима тех времён, особенно учитывая что это пошаговая стратегия, а не шутер. Но жрала с течением игры до 900Mb оперативки, что приводило к жуткому свопу, особенно на больших картах, особенно к концу игры, особенно на ноутбуках. Народ недоумевал, я тоже. Учитывая, что в те же годы вышел Far Cry с куда более красивой графикой, и который вполне игрался на максимуме даже с 512Mb на борту, такое поведение Civilization 4 выглядело крайне странным. Захотелось разобраться и покарать…
Читать дальше →

Information

Rating
Does not participate
Location
Украина
Date of birth
Registered
Activity