Search
Write a publication
Pull to refresh
7
0
Алексей @boov

User

Send message

Автоматизация сборки на .Net с использованием NuGet

Reading time4 min
Views7.9K

Что имелось вначале


Крупная enterprise-система, являющаяся основной платформой компании. В состав входит ядро системы и набор плагинов под разные задачи. Плагины развиваются независимо друг от друга, требуют внесения изменений и расширений в общие библиотеки.

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

Поэтому было принято волевое решение создать инфраструктуру и настроить сценарии для автоматизации сборки проекта под разные плагины.

При решении задачи использовались следующие инструменты: NuGet, TeamCity, NAnt, Visual Studio 2010, SlowCheetah.
Читать дальше →

Работа с большими файлами экселя

Reading time5 min
Views55K
Что такое большой файл? Ну так чтобы реально большой? В бытность свою я думал, что это файлик на 50-60 тыс строк записей. И оставался я бы в таком неведении до сих пор, но пришлось выполнять один проект, в котором надо было работать с файлами на 600-800 тыс строк. Хождение по мукам — под катом:

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

C# 5 — об async/await с начала

Reading time5 min
Views257K
В недавно вышедшей Visual Studio 11 Beta встроена новая и главная фишка будущего C# 5 — асинхронное программирование с помощью async/await. Про нее уже написано достаточно много статей в том, числе на хабре — например, эта серия статей. Однако, я для себя так и не понял в чем суть нового синтаксиса, пока сам не попробовал его в деле. Данная статья — попытка самому структурировать и до конца разобраться с этим достаточно интересным инструментом и поделиться результатами с сообществом, рассказав про него немного иначе. Итак, поехали…
Читать дальше →

Расширение функциональности готовых программ

Reading time11 min
Views43K
В мире ПО существует огромное количество программ, забытых своими разработчиками. Хорошо, когда уже есть хорошая альтернатива. А если ее нет? В программе может катастрофически не хватать каких-то мелочей, некоторые досадные ошибки могут годами доставлять массу неудобств пользователям, а на новых версиях ОС программа и вовсе может отказаться работать. Далеко не всегда имеются исходные коды, чтобы привести программу в порядок. Если программа простая — не составит труда за короткий срок создать альтернативу. Но если программа большая и сложная, что же делать в таком случае? Не всегда рационально тратить время и деньги на разработку полного аналога, ведь расширить в разумных рамках функциональность и исправить большинство ошибок можно уже в готовом исполняемом файле.
В этой статье будут продемонстрированы методики модификации исполняемых файлов на примере расширения функциональности легендарной игры Age of Empires II (стратегия реального времени).
Читать дальше →

[asio::udp] Не кроссплатформенное поведение

Reading time3 min
Views3.4K
Итак, представьте ситуацию: у нас есть кроссплатформенный сервер который должен получать данные по UDP. Вооружившись Asio вы создаете сокет, создаете буфер для принимаемых данных и начинаете слушать.

udp::socket receiver(ios, udp::endpoint(udp::v4(), port));
char read_buf[buf_len];
udp::endpoint sender_point;
receiver.receive_from(buffer(read_buf, sizeof(read_buf)), sender_point);


Что произойдет если в полученной дейтаграмме будет больше данных, чем вы выделили для буфера?
Читать дальше →

Документация по Grab — библиотеке для парсинга сайтов

Reading time2 min
Views34K
Я ранее уже рассказывал на хабре о Grab — библиотеке для парсинга сайтов и о Spider — асинхронном модуле для парсинга. Рад сообщить, что я наконец-то дописал документацию по Grab. Я решил писать всё на русском языке т.к. на английском языке мне труднее выражать мысли. На деле писанины получилось гораздо больше, чем представлялось в начале, но я таки описал практически все функции библиотеки. Я решил просто вставить сюда, оглавление, кликайте на интересный раздел и читайте о возможностях Grab:
Читать дальше →

MariO — релиз

Reading time1 min
Views8.4K
Устали от политики — вот довольно интересное занятие на сегодня (да и не только).

Mari0 — это довольно удачное сочетание игр Марио и Портал. Быть может кто также ждал релиз этой игры? Так вот — он сегодня. Что примечательно — можно скачать полные исходники, вместе с шейдерами, звуком, графикой. Написана на Lua, на движке для 2D игр LÖVE. Все запаковано в файл с раcширением .love, что по сути есть zip архив, можно распаковать и посмотреть что там внутри на глаз. А можно сходить и посмотреть что это за зверь сюда: https://love2d.org/.

Игра доступна для Windows, Linux и MacOS.

Для пользователей Windows чтобы игра работала может понадобиться vcredist.

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

Автопереводчик через Skype

Reading time4 min
Views5.8K
С чего всё начиналось

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

Немного поисков, и я нашёл библиотеку Skype4COM, которая позволяет взаимодействовать со Skype.

Также, для работы со звуком, я буду использовать NAudio, а чтобы забирать данные с Гугла — xNet.
Читать дальше →

Обзор CUDA отладчика «NVIDIA Parallel Nsight 2.0»

Reading time6 min
Views18K
imageОтладка параллельного кода – процесс утомительный и умозатратный. Ошибки распараллеливания проблематично отловить из-за недетерминированности поведения параллельных приложений. Более того, если ошибка обнаружена, ее часто сложно воспроизвести снова. Бывает, что после изменения кода, сложно удостовериться, что ошибка устранена, а не замаскирована. Чаще всего, ошибки в параллельной программе являются гейзенбагами. Порой испытываешь острую потребность в максимально удобных и функциональных инструментах отладки параллельных программ.
Читать дальше →

Сетевое обращение к библиотекам и рантайм-формирование вызовов функций

Reading time5 min
Views1.4K
Хочу поделиться историей из профессиональной деятельности, которую можно заслуженно поместить в блог с именем crazydev :) Это рассказ о необычных решениях (тех, что я попытался описать в двух словах в заголовке), к которым меня вынудили прийти еще более необычные ограничения и требования.


И вот как-то так, через хитро закрученную ***у, оно и работает ©
Читать дальше →

Python-интерфейс между компьютером и физическим миром

Reading time3 min
Views6K


Американский инженер Ричард Уардлоу (Richard Wardlow) разработал интересный микроконтроллер pyMCU, который он позиционирует как «простой интерфейс на Python между компьютером и физическим миром».

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

Обзор конференции Going Native'2012

Reading time7 min
Views3.6K
Недавно завершилась конференция GoingNative’2012, организованная компанией Microsoft. Она проходила 2 и 3 февраля в Редмонде, и главной темой был C++11. Мне показалось, что это замечательное событие недостаточно полно освящено, и захотел исправить ситуацию.
«C++11 feels like a new language» Bjarne Stroustrup
«We’re all learning C++11» Herb Sutter
«We broke every single book on the planet, and we broke every single programmer on the planet» Herb Sutter

Герб Саттер во вступительном слове посвятил конференцию Деннису Ритчи, создателю языка C, и ключевому разработчику операционной системы UNIX.

Это очень важное событие для сообщества С++, где выступали и отвечали на вопросы люди, ставшие легендами в мире C++, во многом определяющие его развитие. Доклады очень интересные, и я вынес для себя много нового. Дальше идёт обзор всех докладов и сессий вопросов и ответов.
Читать дальше →

Принцип замещения Лисков и контракты

Reading time7 min
Views6.9K
Идея этой заметки навеяна статьей Александра Бындю “Дополнение к LSP” и может рассматриваться, как развернутый комментарий к статье Александра.

Итак, вопрос следующий, предположим, один из членов команды пытается реализовать интерфейс IListofT в классе DoubleListofT таким образом, чтобы при добавлении элемента с помощью метода Add, добавлялся бы не один, а два одинаковых элемента. Поскольку класс ListofT всегда добавляет только один элемент, то можно считать, что данное поведение нарушает принцип замещения Лисков (LSP – Liskov Substitution Principle).

Теперь давайте рассмотрим, так ли это, если речь идет о платформе .NET, ну и вообще поговорим о том, можем ли мы утверждать, что метод нарушает принцип замещения Лисков при отсутствии формальной спецификации того, что этот метод должен делать.

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

Создание прокси-dll для запуска DirectDraw игр в окне

Reading time5 min
Views20K
В продолжение темы расширения функциональности готовых программ хотелось бы рассказать об ещё одном способе изменения логики работы уже скомпилированной программы, который не требует делать изменений в самом исполняемом файле. Это может пригодиться при распространении вашей модификации в США, где прямое вмешательство в исполняемый файл строго осуждается. Речь пойдёт о создании крошечной прокси-dll (всего ≈4 килобайта) для подмены используемой приложением библиотеки на примере ddraw.dll.
Читать дальше →

В IBM говорят, что готовы создавать квантовые компьютеры

Reading time2 min
Views5.4K
Традиционные компьютерные системы, у истока которых стояла IBM, основаны на логических элементах, которые могут находиться одновременно в только в одном состоянии, трактуемом, например, как «0» или «1». Будущее компьютеров — квантовые вычисления (идея квантового компьютера была предложена ещё в 1980 году советским математиком Ю. И. Маниным) — основано на квантовых битах (кубитах), которые могут одновременно (см. кот Шрёдингера) находиться в состояниях «0» и «1»; это их свойство получило название "суперпозиции". Таким образом, компьютерная система из двух кубитов может осуществить четыре вычисления одновременно, из трёх кубитов — восемь вычислений и т.д. Вообще, при увеличении количества кубитов вычислительная способность компьютера будет возрастать экспоненциально.

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

Главным направлением работы было увеличение временного периода, когда у кубита возможно длительное время сохранять его квантово-механические свойства при помощи экспериментирования с химической чистотой полупроводниковых элементов. По словам одного из учёных IBM, участвующих в проекте квантового компьютера, Матиаса Стеффена (Matthias Steffen), уже сейчас квантовые вычисления перестают быть лишь объектом лабораторных исследований.

Узнать подробности

Производительность: LINQ to XML vs XmlDocument vs XmlReader на Desktop и Windows Phone

Reading time6 min
Views12K
Не так давно мне пришлось делать приложение для Windows Phone работающее с xml-файлами. Всё было неплохо, но когда в файле стало ~100.000 записей, чтение их занимало ну уж очень много времени. И я решил сравненить производительность различных способов чтения данных из xml возможных на платформе .Net.

Подробности под катом.
Читать дальше →

Шаблон Bridge дополнительные штрихи

Reading time6 min
Views7.7K
Обсуждение многострадального шаблона Bridge на хабре, выявило много интересных мнений и заблуждений. Попробуем разобраться, реанимировать данный шаблон в глазах тех кто борется с формулировками оригинального каталога GoF, а интересующимся темой шаблонов показать несколько дополнительных штрихов.
Читать дальше →

Динамическое (нелинейное) тестирование GUI

Reading time5 min
Views9.6K
Что такое?

Выполнение действий над элементами графического интерфейса в случайном порядке.

Для чего нужно?

Человек, выполняющий тестирование, это Homo sapiens, т.е. он обладает неким интеллектом. Этот самый интеллект, мешает (очень редко, но мешает) ему находить «нелепости поведения» приложения связанные с непредвиденными ситуациями. Он просто не может представить себе настолько нелогичную ситуацию.
Пользователь же, намного превосходит QA в количестве и может значительно уступать ему в IQ. Отсюда, вероятность непредвиденного поведения пользователя отнюдь не крайне мала.
Итак, что нам, обладая свободными ресурсами и желанием, мешает принять меры по предотвращению подобных ситуаций? — Ничего.
Теперь сформулируем конкретные задачи, в которых «бессмысленное клацанье» по кнопкам может быть полезно:
  • Дополнить существующее тестирование стабильности приложения путем введения модели нелинейного поведения пользователя в GUI.
  • Исследовать потребление ресурсов при всех возможных вариантах работы приложения (инициированные из GUI).

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

Как делать будем?

Дальнейшее описание предназначено для тестирования приложений на платформе Windows.
Предлагаю воспользоваться связкой python + pywinauto. Хотя pywinauto и имеет некоторые ограничения в плане доступа к элементам окна, для большинства случаев этого должно быть достаточно.
Честно говоря, альтернативы я не вижу. Все знакомые мне средства автоматизации тестирования GUI не обладают динамичностью, показанной ниже – уже во время выполнения теста получать список контролов, определять их тип и выполнять допустимое действие.
Также не стоит недооценивать возможностей самого Питона и его модулей. Тут вам можно и видео снять, CPU замерить и сообщение, куда надо, в случае чего отправить…
Читать дальше →

Простой индикатор раскладки клавиатуры в курсоре на С++

Reading time2 min
Views38K
Тема отображения текущей раскладки беспокоила хабрасообщество уже не раз. Я опробовал множество существующих решений, но по разным причинам они меня не устроили. Чтобы подобрать для себя наиболее удобный вариант отображения текущей раскладки, я написал небольшое приложение на C++, которое при нажатии на левый Shift отображает язык в системном курсоре редактирования текста. Менее 100 строк кода и около 4 килобайт в скомпилированном виде — на основе этого вы можете достаточно просто реализовать свой взгляд на то, как на самом деле должна выглядеть индикация текущей раскладки.
Читать дальше →
12 ...
24

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity