Обновить
90.11

C# *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Бот для сапера с изюминкой

Время на прочтение8 мин
Охват и читатели60K
Наверное у многих такое бывает: на работе нечего делать, или нужно подумать перед выполнением очередной задачи, да или попросту нет ничего вкусненького к чаю, тогда рука автоматически тянется к мышке и начинает играть в сапера. И вот в порыве очередного приступа саперомании меня посетила мысль о том, что я уже не думаю, как раньше, где расположены мины, а просто на автомате по выработанному алгоритму тычу по полю, ломая мышку. А раз я действую по алгоритму, без особых творческих усилий, то можно написать бота, который будет играть вместо меня, наверняка внимательнее и быстрее.
Читать дальше →

Functional C#: Primitive obsession (одержимость примитивами)

Время на прочтение6 мин
Охват и читатели30K
Это вторая статья из миницикла статей про функциональный C#.

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

Incoding Framework — Get started

Время на прочтение23 мин
Охват и читатели11K
IncFramework-logo

disclaimer: данная статья является пошаговым руководством, которое поможет ознакомиться с основными возможностями Incoding Framework. Результатом следования данному руководству будет покрытое юнит-тестами приложение, реализующее работу с БД (CRUD + data filters). О Incoding framework ранее уже были статьи на habrahabr, но в них раскрываются отдельные части инструмента.

Часть 0. Введение


Для начала приведем краткое описание фреймворкаIncoding Framework состоит из трех пакетов: Incoding framework – back-end проекта, Incoding Meta Language – front-end проекта и Incoding tests helpers – юнит-тесты для back-end’а. Эти пакеты устанавливаются независимо друг от друга, что позволяет интегрировать фреймворк в проект частями: Вы можете подключить только клиентскую или только серверную часть (тесты очень сильно связаны с серверной частью, поэтому их можно позиционировать как дополнение).
В проектах, написанных на Incoding Framework, в качестве серверной архитектуры используется CQRS. В качестве основного инструмента построения клиентской части используется Incoding Meta Language. В целом Incoding Framework покрывает весь цикл разработки приложения.
Типичный solution, созданный с помощью Incoding Framework, имеет 3 проекта:

  1. Domain (class library) отвечает за бизнес-логику и работу с базой данных.
  2. UI (ASP.NET MVC project) клиентская часть, основанная на ASP.NET MVC.
  3. UnitTests (class library — юнит-тесты для Domain.

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

Functional C#: Immutability

Время на прочтение4 мин
Охват и читатели48K
Это первая статья из небольшой серии, посвященной программированию на C# в функциональном стиле. Серия не про LINQ, как можно было бы подумать, а про более фундаментальные вещи. Навеяно F#-ом.


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

Еще одно сравнение производительности С++ и C#

Время на прочтение5 мин
Охват и читатели46K
Навеяно вот этой статьей.

Существует три мнения относительно производительности C++ и C#.

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

Люди из первой категории все время пытаются доказать свою правоту. При этом приводят примеры оптимизированного кода на C++ и самого пессимизированного кода на C#.
Читать дальше →

Сравнение производительности С++ и C#

Время на прочтение7 мин
Охват и читатели83K
Существуют различные мнения относительно производительности С++ и C#.

Например, сложно поспорить с тем, что код C# может работать быстрее за счет оптимизации под платформу во время JIT компиляции. Или например с тем, что ядро .Net Framework само по себе очень хорошо оптимизировано.

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

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

Попадались и утверждения о том, что код на С++ примерно в десять раз быстрее кода на С#.

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

Компилируемые привязки данных в приложениях Windows 10

Время на прочтение7 мин
Охват и читатели13K

Одним из нововведений Windows UAP является то, что стало возможным создавать биндинги которые будут скомпилированы. Такое нововведение значительно улучшает производительность (в том числе и скорость загрузки) приложения. Ранее привязки данных были основаны на рефлексии, а потому медленны. Плюс ко всему, стало гораздо удобнее проводить отладку кода компилируемых биндингов.
Читать дальше →

Зачем выполнять рутинную работу, когда её можно поручить машине?

Время на прочтение11 мин
Охват и читатели22K
В очередной раз пересматривая «Железного Человека» вместе с другом, меня снова пропитывало желание стать супергероем создать свой железный костюм, ну или хотя бы Джарвиса. И вдруг меня посетила гениальная идея.

Лирическое отступление
Пару дней назад был матч СуперКубка Европы 2015 по футболу, который я включил лишь на 70 минуте. Да, я досмотрел оставшуюся часть игры, но все равно остался неприятный осадок из-за того, что 70 минут отличного футбола я смогу посмотреть лишь в записи (что, как вы понимаете, совсем не то), ведь я как-то напрочь забыл про то, что летом тоже идут официальные матчи. Поплакали и хватит.

Так вот, с недавнего времени я начал активно пользовался системным календарём на Mac, и подумал, а почему бы не добавить все игры Барсы в этот самый календарь?



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

Пишем Лабиринт на XNA 4.0 C#

Время на прочтение6 мин
Охват и читатели15K
image
Сегодня я поделюсь своей наработкой игры «Maze». В этой игре реализован алгоритм DFS. На днях мне поручили сделать курсовую работу по Алгоритмам, а именно по DFS в лабиринтах. Отказываться было нельзя. Пришел домой, выпил чашечку крепкого кофе и начал творить.
Читать дальше →

Wake on Lan бот для Telegram

Время на прочтение4 мин
Охват и читатели32K
После открытия API ботов для Telegram их популяция начала стремительно расти. Я решил не отставать и обзавестись собственным для возможности удаленно включать компьютер. Для разработки был выбран язык C#, а в качестве хостинга выбор пал на Azure.

Задача

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

Примечание: в статье не рассматриваются получение токена для бота и деплой сайта на Azure. На эти вопросы без труда находится ответ на хабре или Google.
Читать дальше →

C# — Моделирование «разумной» жизни на базе нейронных сетей

Время на прочтение4 мин
Охват и читатели85K
Данная статья посвящена исследованию возможностей нейронных сетей при их использовании в качестве основы для индивидуального разума моделируемого объекта.

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

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

Пишем программу для кражи данных с USB-носителя в Windows

Время на прочтение5 мин
Охват и читатели23K
Задача:
Написать ПО несанкционированно копирующее файлы с легально подключенного USB — устройства, не требующее установки и прав администратора.
Т.е. легальное ПО, которое может быть использовано злоумышленниками для нанесения вреда (согласно трактовке одного из антивирусных средств).
Алгоритм работы программы
Аудитория:
Новички в программировании и просто интересующиеся.
Читать дальше →

О пользе изучения языков семейства С

Время на прочтение5 мин
Охват и читатели56K


Если вы задумались о том, чтобы освоить первый в своей жизни язык программирования, то вам придётся поломать голову над тем, а что же выбрать из многообразия существующих языков. В мире веб-разработки царит JavaScript, во многих ВУЗах и школах предлагают изучать Python. Если поспрашивать на форумах, то вам вывалят кучу вариантов, включая Haskell, Scala и Erlang. Богатство выбора хорошо почти в любом деле, и обилие языков программирования свидетельствует о том, что это направление научно-прикладной деятельности продолжает развиваться. Одному человеку уже не под силу изучить все существующие языки, поэтому приходится решать какой же язык лучше всего начать осваивать. Зачастую изучают то, что принято в конкретной компании или сегменте рынка. Но если вы только собираетесь сделать первые шаги на ниве программирования, то можно порекомендовать начать с одного из языков семейства С. Это будет наиболее дальновидным выбором, который поможет вам в карьере. Возможно, вы не станете ежедневно писать на этом языке, или не будете изучать его очень глубоко. Но если вы хотите, чтобы к вам относились как к серьёзному разработчику, то вам обязательно нужно владеть одним из языков семейства С.
Читать дальше →

Ближайшие события

Коварный роутер или почему порты надо открывать

Время на прочтение9 мин
Охват и читатели49K

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

Речь об «автоматической» пробросе порта, через технологию UPnP, без использования «стандартной» библиотеки NATUPnPLib.

О том, в силу чего был выбран такой непростой путь и почему он все-таки непростой — читайте ниже.
Подробности эксперимента

Об ограничениях в применимости метрики Минковского в цифровой обработке данных

Время на прочтение8 мин
Охват и читатели20K
Как-то давным-давно я наткнулся на вот статью на хабре, в которой народ пишет как все круто и как хорошо работает метрика Минковского. Время шло и шло, а я все хотел и хотел. Наконец подвернулась задача к которой я захотел применить сие чудо, и вот что вышло:

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

Триггеры и фоновые задания в приложениях Windows Store

Время на прочтение11 мин
Охват и читатели12K


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

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

Впридачу к этому можно добавить проверку на соответствие состояния устройства/системы определенным условиям. В случае срабатывания триггера будут проверяться все заданные условия.

Кроме системных триггеров существуют различные другие триггеры, которые могут срабатывать по таймеру или в результате особых событий.
Читать дальше →

Code contracts vs валидация входящих данных

Время на прочтение4 мин
Охват и читатели13K
Правила валидации входящих данных часто принимают за контракты в коде (как, собственно, и наоборот). Давайте разберемся в чем отличие между этими двумя понятиями и в каких случаях они применимы.
Читать дальше →

Знакомство с внутренним устройством .NET Framework. Посмотрим, как CLR создаёт объекты

Время на прочтение27 мин
Охват и читатели61K
Вниманию читателей «Хабрахабра» представляется перевод статьи Хану Коммалапати и Тома Кристиана об внутреннем устройстве .NET. Существует альтернативный вариант перевода на сайте Microsoft.

В статье рассматривается:

  • Системный домен (SystemDomain), Домен общего доступа (SharedDomain) и домен по умолчанию (DefaultDomain)
  • Представление объекта и другие особенности организации памяти
  • Представление таблицы методов
  • Распределение методов

Используемые технологии: .NET Framework, C#

Содержание


  1. Домены создаваемые начальным загрузчиком
  2. Системный домен
  3. Домен общего доступа (разделяемый)
  4. Дефолтный домен
  5. Загрузчик куч
  6. Основы типов
  7. Экземпляр объекта
  8. Таблица методов
  9. Размер базового экземпляра
  10. Таблица слотов метода
  11. Описатель метода
  12. Карта таблиц виртуальных методов интерфейсов и карта интерфейса
  13. Виртуальное распределение
  14. Статические переменные
  15. EEClass
  16. Заключение

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

Назад в будущее – Декапсуляция

Время на прочтение9 мин
Охват и читатели23K
image

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

Затрагиваемые вопросы:
  • Влияние программной архитектуры на потребление памяти и производительность;
  • Различия при работе в 32 и 64 битных режимах;
  • Различия между указателями и индексами массива;
  • Влияние выравнивания данных внутри классов/структур;
  • Влияние кеша процессора на производительность;
  • Оценка стоимости поддержки ООП в языках высокого уровня;
  • Признание факта необходимости учитывать низкоуровневые особенности платформы даже при разработке на языках высокого уровня.

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

Sell Side Platform

Время на прочтение4 мин
Охват и читатели6.7K
Добрый день, дорогой читатель! Продолжая цикл статей о реализации стека RTB нашей компанией, предлагаю вам ознакомиться с реализацией нашей SSP — VOX Ad Exchange.


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

Вклад авторов