Метка «.net» - 27

Одним из самых замечательных и притягательных свойств языка Common Lisp является, безусловно, его система обработки исключений.

Более того, по моему, лично, мнению, подобный подход к исключениям является единственно правильным для всех императивных языков, и вот по какой простой причине:

Механизм «исключений»(или, как они называются в мире CL — conditions) в Common Lisp отделен от механизма раскрутки стека, а это, соответственно, позволяет обрабатывать любые всплывающие в программе исключительные(да и не только исключительные) ситуации прямо в том месте, где они возникли, без потери контекста выполнения программы, что влечет за собой удобство разработки, отладки, да и вообще, удобство построения логики программы.

Наверное, следует сказать, что Common Lisp Condition System, несмотря на свою уникальность в среде высокоуровневых языков программирования, очень близка известным многим разработчикам низкоуровневым средствам современных операционных систем, а именно: синхронным сигналам UNIX и, гораздо ближе, механизму SEH(Structured Exception Handling) из Windows. Ведущие реализации CL основывают такие элементы управления потоком вычислений, как механизм обработки исключений и раскрутка стека, именно на них.

Несмотря на отсутствие похожего механизма во многих других(если не всех) императивных языках программирования, он поддается реализации в более-менее вменяемом виде на большинстве из них. В данной статье я опишу реализацию на C#, по ходу дела разбирая в деталях саму концепцию данного подхода к «исключениям».
Читать полностью »

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

Да, C++ был почти идеальным языком в этом плане. Но времена меняются, старые технологии уходят и на их место приходят новые более продуктивные и удобные. Так наша команда перешла на .NET. Но в обмен на простоту разработки и удобство отладки, мы в придачу получили в довесок и простоту декомпиляции нашего ПО. Теперь хакер мог не просто обойти лицензионные ограничения, но и получить почти полный исходник нашей программы просто скормив ее рефлектору.
Разумеется, в качестве решения этой проблемы на рынке было представлено множество различных обфускаторов. Но, как ни странно, большинство из них разочаровывали меня сразу с двух сторон: и ценовой политикой (даже минимальная лицензия некоторых превосходила стоимость нашего ПО в несколько раз), и «интеллектуальностью» алгоритма. Так, после некоторых обфускаторов, умудрялись падать даже простые WinForms приложения. Что же касалось WPF, то без долгого-долгого черного шаманства над эксклудами, запустить среднего размера программу не представлялось возможным в принципе.

Так сформировалось понимание проблемы и четкое желание создать свой продукт, сводящий озвученные выше проблемы к минимуму. И появился SaaS обфускатор и протектор .NET кода AppFuscator.com

Обфускатор и протектор .NET кода appfuscator

Читать полностью »

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

Как все должно было быть? Я запускаю свое приложение — будильник, выставляю в сколько часов он должен меня будить и какую программу при этом запускать (телик, музыку ...) и перевожу ПК в спящий режим, по истечении времени программа должна была подать ОС какой то сигнал типу «Вставай пора будить хозяина!» и запустить нужное мне приложения.

Для этого я перелопатил пол интернета, прочитал множество статей про спящий режим компьютера, что делает в этот момент ОС Windows и т.д. задавал вопросы на разных форумах и все что они могли мне сказать это «Будильник есть в телефоне, зачем тебе этот геморрой» или что та в этом роде, правда на майкрософте написали что можно сделать но это будет довольно таки сложно, короче посоветовали мне использовать технологию WOL там как то все это делается через сеть, при этом один комп должен быть постоянно включен чтоб подать сигнал другом компе и тот должен проснутся! Но мне показалось что это как то не удобно получится. Но ничего я не отчаялся и пошел в сторону WinAPI, и вот момент истинны… «Ура, Нашел!».
Читать полностью »

При работе с WPF/Silverlight, периодически приходится создавать кастомные DependencyProperty, в основном при создании контролов. Стандартный подход объявления и работы с ними не идеальный и имеет минусы, о которых будет сказано ниже. Соответственно, появилась идея упростить запись регистрации и работы с DependencyProperty.
Читать полностью »

Иногда требуется написать маленькую программу, которая будет распространяться в виде исполняемого файла, и при этом не хочется, чтобы с программой ещё было море файлов. Один exe-шник и всё, да при этом хочется, чтобы его написание не занимало много времени (какой-нибудь лёгкий язык).
CPython в комплекте с py2exe или cx_Freeze не даёт требуемого результата: много файлов и большой размер программы, хотя и работает очень быстро.
Даже попробовал в Racket Creating Stand-Alone Executables, но хотелось всё же использовать Python, так как много наработок. Да и Racket тоже сгенерировал немало дополнительного «мусора».
Чистое решение смог получить в IronPython с помощью встроенного компилятора pyc. Даже IDE не потребовалась. Подробности под катом.
Читать полностью »

При написании приложений, одной из важнейших вопросов являются потребление памяти и отзывчивость (скорость работы).

Считается, что сборщик мусора – черный ящик, работу которого нельзя предугадать.

А еще говорят, что GC в .NET практически не настраиваемый. А еще, что нельзя посмотреть исходники как классов .NET Framework, так и CLR, GC и т.п.

А я скажу как бы ни так!

В данной статье мы рассмотрим:

  • структура организации размещения объектов в памяти
  • CLR 4.5 Background Server GC
  • правильная настройка сборщика мусора
  • эффективный апгрейд приложений до .NET 4.0+
  • правильное ручное управление памятью

Читать полностью »

Для чего надо.

Кэширование часто используемых нестатических данных, для генерации которых требуется некое неудовлетворительное время, например – ответ от некоего сервиса в сети. Родилось ввиду того, что очень удобно использовать single-value функции в запросах, но нет возможности записи из них в таблицу по понятным причинам.Читать полностью »

Так получилось, что год назад, мне пришлось написать билд-план с использованием ant. Он предназначался для нашего небольшого веб-проекта, исполнялся на Hudson и должен был производить: компиляцию, прогон NUnit тестов, подсчет % покрытия кода тестам, поиск дублирующегося кода и выявление основных стилистических несоответствий в коде. Но это вступление, а далее поговорим, о написании билд-плана для анализа файлов проекта, посредством FxCop.

И так! Поехали!

Читать полностью »

В недавнем прошлом столкнулся со следующей проблемой: в реализуемом проекте (под .net) необходимо было организовать взаимодействие с внешними ресурсами (аппаратное обеспечение, специфическая полнотекстовая БД). Доступ к этим ресурсам осуществлялся средствами библиотек содержащих API функции, которые были написаны с использованием различных языков (С++, Delphi), и объединяло их одно свойство: они не поддерживали вызовы из различных потоков. В то время как архитектура разрабатываемого приложения, продиктованная функциональными требованиями, подразумевала необходимость доступа к этим ресурсам из различных потоков.Читать полностью »

Создание и регистрация Metro style компонента для WinRT Официальный релиз Windows 8 приближается с каждым днём, и всё больше разработчиков задумывается о том, чтобы создать своё приложение в стиле Metro. А если же вы делаете сразу несколько таких приложений, то скорее всего у вас возникнет потребность использовать один и тот же код в разных проектах.

В этой статье приведена пошаговая инструкция по созданию простого Metro style компонента, а также особенности регистрации такой библиотеки для дальнейшего использования в WinRT проектах.

В качестве примера компонента мы выбрали анимированный индикатор загрузки в стиле Metro, похожий на тот, который многие из нас уже видели в новой версии Windows. К концу этой статьи вы будете не только знать всё о регистрации компонентов, но и иметь возможность добавить готовый индикатор загрузки в своё Metro приложение.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js