Search
Write a publication
Pull to refresh
14
-0.5

Инженегр АСУТП

Send message

12 инструментов для отладки .NET-приложений по производительности и по памяти

Reading time7 min
Views22K
В недавнем интервью с Джоном Скитом мы пришли к выводу, что профессиональная работа с любой технологией подразумевает умение диагностировать проблемы и понимать, как ваши приложения работают под капотом. Вдогонку к тому разговору, я узнал у Саши goldshtn Гольдштейна, одного из лучших в мире экспертов по производительности .NET, автора книги «Pro .NET Performance», на какие инструменты следует обратить внимание .NET-разработчикам.

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


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

Here be dragons: Управление памятью в Windows как оно есть [1/3]

Reading time8 min
Views181K

Каталог:
Один
Два
Три

Менеджер памяти (и связанные с ним вопросы контроллера кеша, менеджера ввода/вывода и пр) — одна из вещей, в которой (наряду с медициной и политикой) «разбираются все». Но даже люди «изучившие винду досконально» нет-нет, да и начинают писать чепуху вроде (не говоря уже о другой чепухе, написанной там же):
Грамотная работа с памятью!!! За все время использования у меня своп файл не увеличился ни на Килобайт. По этому Фаерфокс с 10-20 окнами сворачивается / разворачивается в/из трея как пуля. Такого эффекта я на винде добивался с отключенным свопом и с переносом tmp файлов на RAM диск.

Или к примеру μTorrent — у меня нет никаких оснований сомневаться в компетентности его авторов, но вот про работу памяти в Windows они со всей очевидностью знают мало. Не забываем и товарищей, производящих софт для слежения за производительностью и не имеющих ни малейшего понятия об управлении памятью в Windows (и поднявших по этому поводу истерику на пол интернета, на Ars-е даже был разбор полетов). Но самое потрясающее, что я видел всвязи с управлением памятью — это совет переместить pagefile на RAM-диск:
Из моих трех гигабайт под RAM disk был выделен один (на тот момент, когда на лаптопе еще была установлена XP), на котором я создал своп на 768МБ ...

Цель данной статьи — не полное описание работы менеджера памяти (не хватит ни места ни опыта), а попытка пролить хоть немного света на темное царство мифов и суеверий, окружающих вопросы управления памятью в Windows.
Читать дальше →

Проблемы со скоростью выполнения системных вызовов «gettimeofday» и «clock_gettime» в AWS EC2

Reading time8 min
Views6.5K

Кадр из фильма «Матрица: Революция»


В этой статье мы подробно рассмотрим детали одной интересной находки: два часто используемых системных вызова (gettimeofday, clock_gettime) в AWS EC2 выполняются очень медленно.


В Linux реализован механизм по ускорению этих двух часто используемых системных вызовов, благодаря которому их код выполняется в пространстве пользователя, что позволяет избежать переключениям в контекст ядра. Это сделано с помощью предоставляемой ядром виртуальной общей библиотеки (virtual shared library), которая отображается в адресное пространство всех запущенных программ.


Два вышеназванных системных вызова не могут использовать vDSO (virtual Dynamic Shared Object) в AWS EC2, поскольку виртуализированный источник временных меток (virtualized clock source) в xen (и некоторых конфигурациях kvm) не поддерживает получение информации о времени через vDSO.


Обойти эту проблему не получится. Можно поменять источник информации о времени на tsc, но это небезопасно. Далее мы рассмотрим вопрос более подробно и проведем сравнительное тестирование с помощью microbenchmark.

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

MakiseGUI — бесплатная библиотека графического интерфейса для микроконтроллеров

Reading time6 min
Views34K

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


Назвал я её MakiseGui.


Суперсилы WinDbg для .NET-разработчиков

Reading time18 min
Views18K
Продолжая серию публикаций по докладам на конференциях, мы остановились на лучшем докладе DotNext 2016 Moscow, в которой Саша goldshtn Гольдштейн рассказывает о возможностях WinDbg для отладки .NET приложений. Этот действительно мощный инструмент позволяет решать задачи, с которыми не справляется встроенный отладчик Visual Studio.

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


Десять возможностей C++11, которые должен использовать каждый C++ разработчик

Reading time12 min
Views541K
В данной статье рассматривается ряд возможностей С++11, которые все разработчики должны знать и использовать. Существует много новых дополнений к языку и стандартной библиотеке, эта статья лишь поверхностно охватывает часть из них. Однако, я полагаю, что некоторые из этих новых функций должны стать обыденными для всех разработчиков С++. Подобных статей наверное существует много, в этой я предприму попытку составить список возможностей, которые должны войти в повседневное использование.

Сегодня в программе:
  • auto
  • nullptr
  • range-based циклы
  • override и final
  • строго-типизированный enum
  • интеллектуальные указатели
  • лямбды
  • non-member begin() и end()
  • static_assert и классы свойств
  • семантика перемещения
Читать дальше →

Метарегулярные выражения на D

Reading time8 min
Views5.6K

Пробежался по хабам и не нашел ничего написанного одновременно в хабы "D" и "Ненормальное программирование". Может сложиться совершенно ложное представление что на D пишут исключительно нормальные люди, или еще хуже того — что знание D автоматически делает из любого программиста нормального человека. Спешу опровергнуть.


Хотя сам я строго говоря программистом на D не являюсь — у меня нет ни одного промышленного проекта, зато я периодически с удовольствием роюсь в чужом коде выковыривая вкусные изюминки. А еще я пишу для себя небольшие утилиты, чаще всего для обработки текстовых данных, то что обычно делается на скриптовых языках, благо D предлагает очень неслабый набор инструментов для работы со строками.
Ну а там где текстовые процессоры, там и регулярные выражения, как же без них. И здесь D снова оказывается на высоте, по легкости и удобству использования его библиотека регулярных выражений приближается к Perl. Но в Perl регулярки являются частью синтаксиса, можно сказать что сам язык выстроен в значительной мере вокруг них, а в D это вполне себе независимый модуль — std.regex из стандартной библиотеки написанный Дмитрием Ольшанским. Еще один замечательный момент — парсер выражения может быть построен во время компиляции (естественно если само выражение задано литералом), и разумеется я не мог удержаться чтобы не посмотреть как оно внутри устроено.
И вот тут то, разбираясь в деталях у меня слетела шляпа возникла мысль, а нельзя ли вызывать одно регулярное выражение изнутри другого? Не вставить литерал (как тривиально можно сделать в Perl например), а непосредственно вызвать скомпилированный код одного выражения изнутри другого. Достаточно на мой взгляд дурацкая идея чтобы с ней стоило поиграть.
Итак, чего мы хотим? Примерно вот такого (пока это псевдокод):


INT=regexp("\d+");
LIST=regexp("INT(,INT)*");
Читать дальше →

DariaDB. Разработка базы данных для хранения временных рядов

Reading time11 min
Views14K

Уже больше года, как у меня есть свой хобби-проект, в котором я разрабатываю движок базы данных для хранения временных рядов — dariadb. Задача довольно интересная — тут есть и сложные алгоритмы да и область для меня совершенно новая. За год был сделан сам движок, небольшой сервер для него и клиент. Написано все это на С++. И если клиент-сервер находится пока в достаточно сыром состоянии, то движок уже обрел некоторую стабильность.Задача хранения временных рядов достаточно распространена там, где есть хоть какие-то измерения (от SCADA-систем до мониторинга состояния серверов).

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

Графический стек Linux

Reading time19 min
Views105K
(оригинал — Jasper St. Pierre, разработчик GNOME Shell, взято отсюда)

Это обзорная статья о составных частях графического стека Linux и том, как они уживаются вместе. Изначально я написал её для себя после разговоров об этом стеке с Оуэном Тейлором, Рэем Строудом и Эдэмом Джексоном (Owen Taylor — мэйнтейнер Gnome Shell; Ray Strode — мэйнтейнер большого количества десктопных пакетов сообщества RedHat; Adam Jackson — разработчик графического стека Gnome Shell и интеграции с XOrg; прим. переводчика)

Я постоянно дёргал их, снова и снова расспрашивал о всяких мелочах, а потом эти мелочи благополучно забывал. В конце концов, я задал им вопрос — а нет ли какого-нибудь обзорного документа, уткнувшись в который я бы избавил ребят от своего назойливого внимания? Не получив утвердительного ответа я решил написать эту статью, которая по завершению была вычитана Эдэмом Джексоном и Дэвидом Эйрли. Они оба работают над этим стеком.
Читать дальше →

Прокрастинация. Как посадить в клетку демона, который мешал двигаться к цели

Reading time8 min
Views59K
image
Автор иллюстрации — John Kenn

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

Прокрастинация — преступление, в котором виновен каждый.

Главный ингредиент успеха — действие. Поддаваться прокрастинации — то же самое, что вообще ничего не делать. Еще одна проблема в том, что мы все-таки выполняем задуманное. Да, мы откладываем до последнего и ждем дедлайна, но все же беремся за дело. И это плохо, ведь появляется ложная уверенность в завершении задачи независимо от времени начала действий.
Еще хуже когда сроков нет вообще. Как долго мы сможем откладывать, пока возможность не будет упущена окончательно?

У жизненных целей нет дедлайна, а значит и нет последствий его срыва. Так что откладывать мы можем бесконечно и не принимать никаких действий. Но без действий не будет и результатов.
Читать дальше →

Ломаем Android. Как глубока кроличья нора?

Reading time22 min
Views114K

image


Мой первый Android телефон Galaxy Note N7000 был приобретен сразу после анонса в октябре 2011 года. Благодаря одному немецкому умельцу под ником bauner, у меня была возможность использовать последнюю версию CyanogenMod (ныне LineageOS). До тех пор, пока полтора года назад телефон не умер от китайской автомобильной зарядки.


Замену искал долго и остановился на Kyocera (да, они и телефоны выпускают) KC-S701. Он отличается брутальным внешним видом и отсутствием сенсорных кнопок. О root доступе к телефону я тогда даже и не задумывался, полагая, что нынче каждый телефон тем или иным способом имеет возможность получения root. И найдется умелец, который сможет под него портировать CyanogenMod. Я ошибался.


За полтора года было выпущено всего одно обновление — фикс падения ядра от специально сформированного ping пакета. А Android KitKat уже год назад был не первой свежести. Root доступ на этот телефон так никто и не получил, и никакой информации о нем не было. Отмечу, что тоже самое железо используется в американской версии телефона Kyocera Brigadier E6782, в котором по-умолчанию активизирован режим fastboot и нет ограничения на запуск неподписанных ядер (именно запуск, а не прошивку, и только при использовании непропатченного bootloader'а, CVE-2014-4325) и присутствует возможность загружаться в эти режимы путём зажатия кнопок телефона. Стараниями Verizon (а может Kyocera?) версия Android на Brigadier была обновлена до Lollipop.


Итак, я решил разобраться с процессом получения root на Android самостоятельно.

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

Как флитком управляет людьми в онлайновой игре с зашкаливающим уровнем паранойи

Reading time15 min
Views43K


— Слышал, Слон флотом теперь командует?
— В смысле?
— Ну, помнишь, он админил?
— Да.
— Так ты сейчас обсмеёшься, его навыки управления оказались идеальными для управления кланом.

В общем, мне всегда очень хотелось перенять опыт командира флота в Eve Online. Есть такой феномен: люди объединяются в большие корпорации и альянсы, при этом ничего не получают за игру материально, но каким-то чудом все вместе делают общие задачи. Уроки управления местами покруче MBA. И первый — понимание, что Eve — это не космическая игра, а, скорее, соцсеть, к которой прикручена игра про космос. И вести себя надо именно как в соцсети. То есть управление корпорацией — это правильная подача контента.

Очень, очень многое у флиткома перекликается c тем, что нужно знать руководителю. И мне очень жаль, что этот диалог у нас не состоялся лет пять назад.
Читать дальше →

Оптимальные опции для x86 GCC

Reading time4 min
Views57K
      Распространено мнение, что GCC отстает по производительности от других компиляторов. В этой статье мы постараемся разобраться, какие базовые оптимизации GCC компилятора стоит применить для достижения приемлемой производительности.

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

Nuklear — идеальный GUI для микро-проектов?

Reading time7 min
Views68K

Nuklear — это библиотека для создания immediate mode пользовательских интерфейсов. Библиотека не имеет никаких зависимостей (только C89! только хардкор!), но и не умеет создавать окна операционной системы или выполнять реальный рендеринг. Nuklear — встраиваемая библиотека, которая предоставляет удобные интерфейсы для отрисовки средствами реализованного приложения. Есть примеры на WinAPI, X11, SDL, Allegro, GLFW, OpenGL, DirectX. Родителем концепции была библиотека ImGUI.


Чем прекрасна именно Nuklear? Она имеет небольшой размер (порядка 15 тысяч строк кода), полностью содержится в одном заголовочном файле, создавалась с упором на портативность и простоту использования. Лицензия Public Domain.

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

.NET-обёртки нативных библиотек на C++/CLI

Reading time25 min
Views17K

Предисловие переводчика


Данная статья представляет собой перевод главы 10 из книги Макруса Хиге (Marcus Heege) «Expert C++/CLI: .NET for Visual C++ Programmers». В этой главе разобрано создание классов-обёрток для нативных классов C++, начиная от тривиальных случаев и до поддержки иерархий и вирутальных методов нативных классов.

Идея этого перевода появилась после статьи «Unmanaged C++ library в .NET. Полная интеграция». Перевод занял больше времени, чем ожидалось, но, возможно, подход, показанный здесь, также будет полезен сообществу.
Читать дальше →

Руководство новичка по эксплуатации компоновщика

Reading time32 min
Views218K
David Drysdale, Beginner's guide to linkers (http://www.lurklurk.org/linkers/linkers.html).

Цель данной статьи — помочь C и C++ программистам понять сущность того, чем занимается компоновщик. За последние несколько лет я объяснил это большому количеству коллег и наконец решил, что настало время перенести этот материал на бумагу, чтоб он стал более доступным (и чтоб мне не пришлось объяснять его снова). [Обновление в марте 2009: добавлена дополнительная информация об особенностях компоновки в Windows, а также более подробно расписано правило одного определения (one-definition rule).

Типичным примером того, почему ко мне обращались за помощью, служит следующая ошибка компоновки:
g++ -o test1 test1a.o test1b.o
test1a.o(.text+0x18): In function `main':
: undefined reference to `findmax(int, int)'
collect2: ld returned 1 exit status

Если Ваша реакция — 'наверняка забыл extern «C»', то Вы скорее всего знаете всё, что приведено в этой статье.
Читать дальше →

Консолька в роботе на Ардуине

Reading time10 min
Views12K
Переслать роботу на Ардуине несколько байт через вайфай, блютус, последовательный порт или любой другой канал связи в виде команды, а потом принять несколько байт в качестве ответа труда не составляет: достаточно скачать скетч с примером обмена данными «здравствуй мир» и вставить в него несколько строк своего кода, который будет выполнять желаемые действия.

Однако с развитием проекта область вспомогательного кода, который отвечает за связь с внешним миром, раздувается: появляется логика, отделяющая один пакет данных от другого, разрастается лес проверок, что за команда пришла, какие у нее параметры, как её правильно выполнить, что делать, если пакет данных не корректен, если данные пришли не полностью, если они не умещаются в отведенных для них буферах памяти и так далее. Код, обслуживающий вспомогательную логику, переплетается с главным кодом, выполняющим интересную и полезную работу. Заменить один канал связи на другой (например, добавить к последовательному порту вайфай) без переработки накопившейся кодовой базы становится весьма проблематично.

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

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

В качестве побочного эффекта получилась своеобразная командная строка, работающая внутри Ардуины, если подключиться к ней через монитор последовательного порта и отправлять команды вручную:

image

Опыт реального использования LigthBiz OS

Reading time4 min
Views9.3K

Преамбула


Мое хобби с давних пор — использование экзотических платформ в качестве повседневного рабочего места. Началось оно, пожалуй, в середине 90-х с появлением первых дистрибутивов Linux, первых графических оболочек и приложений для Linux. Далее в разные годы я использовал в качестве десктопа то консоль Sony PS3 (с которой пришлось соскочить, когда поддержку Linux прекратили, а сломать ещё не успели), то китайский нетбук Lemote Yeeloong… С появлением телевизионных приставок на Android я перепробовал несколько моделей, начиная с Allwinner A10, после перешел на Rockchip — 3066, 3188, 3288. Все приставки настраивал в dual boot — Android для фильмов и игр и Debian для работы. К слову, наработки позже были использованы в паре проектов.

При этом мне все больше и больше нравился Android как система, особенно в свете последних новшеств в Linux, типа повсеместного насильного внедрения systemd, зоопарка оболочек и тулкитов и проч. Да и постепенно стали появляться или находиться инструменты для решения моих задач, плюс появились задачи по разработке под Android, которые стало можно решать без возни с эмуляторами.
Таким образом, когда в середине прошлого года стали появляться анонсы десктопных версий Android — Remix, LightBiz, позже Phoenix, я понял — хочу!
Читать дальше →

Бунтарская операционная система

Reading time2 min
Views30K
Читать дальше →

Minoca OS: новая свободная операционная система

Reading time3 min
Views70K


Двое отважных разработчиков Ивэн Грин и Крис Стивенс решились на смелый шаг. Они написали с нуля совершенно новую операционную систему Minoca OS и опубликовали её исходный код под свободной лицензией GNU GPL v3.

Это 625 000 строк отлично документированного кода, преимущественно на языке программирования Си, частично на C++ и Ассемблере. Ядро ОС для x86 имеет размер около 750 КБ. С драйверами, сетевым стеком и видеобуфером свежезагруженная система использует 5−7 МБ оперативной памяти.
Читать дальше →

Information

Rating
Does not participate
Location
Россия
Registered
Activity