Всем привет! Меня зовут Андрей, и я работаю DevOps инженером в компании Exness в команде разработки. Моя основная деятельность связана со сборкой, деплоем и поддержкой приложений в docker под операционной системой Linux (далее — ОС). Не так давно у меня появилась задача с теми же активностями, но в качестве целевой ОС проекта стала Windows Server и набор проектов на C++. Для меня это было первое плотное взаимодействие c docker контейнерами под ОС Windows и в целом с приложениями на C++. Благодаря этому я получил интересный опыт и узнал о некоторых тонкостях контейнеризации приложений в ОС Windows.
![](http://habrastorage.org/getpro/habr/hub/158/3a0/ad0/1583a0ad048e5e22d30119cd16b8537f.png)
Visual Studio *
Основной инструмент разработчика на платформе .NET
10 расширений для VS Code, без которых я не могу программировать
![](https://habrastorage.org/webt/w-/b1/qa/w-b1qa1gpw2nwgdt4ybwfx0rbq4.jpeg)
Представляем Visual Studio Codespaces: облачная разработка, где бы вы ни были
![](https://habrastorage.org/webt/ji/3b/-t/ji3b-t8ihdys5mqoxm733wihyt8.png)
Docker и VMWare Workstation на одной Windows машине
VMware Workstation and Device/Credential Guard are not compatible. VMware Workstation can be run after disabling Device/Credential Guard.
Истории
saneex.c: try/catch/finally на базе setjmp/longjmp (C99) быстрее стандартных исключений C++¹
Пока писал эту сугубо техническую статью, Хабр успел превратиться в местное отделение ВОЗ и теперь мне даже стыдно ее публиковать… но в душе теплится надежда, что айтишники еще не разбежались и она найдет своего читателя. Или нет?
Меня всегда восхищала стандартная библиотека Си, да и сам Си — при всей своей минималистичности от них так и веет духом тех самых первых красноглазиков хакеров. В черновике первого официального стандарта (ANSI C, он же C89, он же ANS X3.159-1989, он же, позднее, C90 и IEC 9899:1990) определяется 145 функций и макросов, из них около 25 — это вариации (ввиду отсутствия в языке перегрузок), а 26 чисто математических. K&R во второй редакции² приводят 114 функций (плюс математические), считая остальные за экзотику. В черновике³ C11 функций уже 348, но больше сотни — математика, а еще штук 90 это «перегрузки». А теперь посмотрим на Boost, где одних только библиотек — 160. Чур меня…
И среди этой сотни-полутора функций всегда были: обработка сигналов, вариативные функции (которые до интерпретируемого PHP дошли 25 лет спустя, а в Delphi, бурно развивавшемся одно время, их нет до сих пор) и порядка 50 строковых функций вроде printf() (м-м-м… JavaScript), strftime() (…) и scanf() (дешевая альтернатива регуляркам).
А еще всегда были setjmp()/longjmp(), которые позволяют реализовать привычный по другим языкам механизм исключений, не выходя за рамки переносимого Си. Вот о них и поговорим — Quake World, стеки, регистры, ассемблеры и прочая матчасть, а вишенкой будет занятная статистика (спойлер: Visual Studio непостоянна, как мартовский заяц, а throw saneex.c
в два раза быстрее всех).
![](https://habrastorage.org/webt/cx/fz/jq/cxfzjqci2ud94mxrbl5bwitnobo.png)
Улучшения специальных возможностей в Visual Studio 2019 for Mac
![image](https://habrastorage.org/webt/-y/wv/oz/-ywvozmzcnqzxjs2sd8jtiybehw.gif)
Выпуск Visual Studio 2019 for Mac версии 8.4.4 включает в себя многочисленные изменения в цветовой палитре значков, предупреждений и сообщений об ошибках. Новый внешний вид легко бросается в глаза, а новая цветовая гамма еще более заметна. В это статье я расскажу, почему эти изменения действительно важны и что именно было изменено.
В настоящее время более 1 миллиарда человек имеют ту или иную форму инвалидности. Людям практически ежедневно приходится сталкиваться с различными проблемами. К ним относятся ограничения подвижности, когнитивные и нервные нарушения, проблемы с речью и слухом. В связи с этим мы хотим рассказать об улучшениях визуальной доступности в самых последних версиях Visual Studio for Mac.
Как QA-инженер сэкономил целый день работы, связав автотесты в Visual Studio и Test IT
И зачастую мы, сами того не замечая, тратим драгоценное время на перенос данных из одной рабочей системы в другую. Но почему бы нам не заняться оптимизацией рабочего процесса, пусть даже в мелочах? Пять минут, умноженные на 5 раз в день, дадут нам в сумме более одного рабочего дня в месяц времени, которое можно потратить куда полезнее, чем на выполнение рутинной работы. Так мы пришли к созданию расширения для Visual Studio, позволяющего нам автоматизировать процесс создания автотестов в нашей системе Test IT.
Продолжая историю про вебхуки и то, как они помогают связывать множество сервисов при работе, представляем вашему вниманию наш рассказ о создании расширения для нашей рабочей IDE – Visual Studio. Добро пожаловать под кат!
Эта статья — гостевая публикация от ребят из Test IT
![](https://habrastorage.org/webt/de/p4/sn/dep4snssll0ayy6pne0d8g_kvio.png)
Легко добавляйте, удаляйте и переименовывайте файлы и цели в проектах CMake
![image](https://habrastorage.org/webt/pq/tx/qu/pqtxqu1xuoin4yy_bjgnwjdm5ea.png)
Подробнее под катом.
Просто о NModbus (RTU)
Теория
Modbus — коммуникационный протокол, основанный на архитектуре ведущий-ведомый (master-slave). Использует для передачи данных интерфейсы RS-485, RS-422, RS-232, а также Ethernet сети TCP/IP.
NModbus – большая библиотека на C#, включающая в себя реализацию всех режимов работы с протоколом. Модель реализации классов этой библиотеки позволяет работать с любым Modbus-устройством, но только с одним, поскольку классы библиотеки инкапсулируют в себе порт, не позволяя реализовать синхронизацию между несколькими Modbus-объектами. Данный протокол достаточно популярен при разработке разной периферии для умного дома, а так же интернета вещей.
Итак: для того, чтобы управлять чем-либо, нам необходимо знать, что и куда отправлять. Значит нам нужна карта регистров.
Уточню, что ячейки регистра бывают:
1. Только для чтения
2. Для чтения и записи
3. Только для записи(подтверждение записи допустимо выдавать кодом ошибки)
Самая простая карта, выглядит примерно таким образом:
![](https://habrastorage.org/getpro/habr/post_images/fe7/1e9/db5/fe71e9db5266a1fccdc38522243cbb4a.png)
Начало работы с серверными приложениями Blazor в Visual Studio for Mac
![](https://habrastorage.org/webt/it/v1/lx/itv1lx0attgqlbkwgih9p8w3xle.jpeg)
Как преодолеть страх и начать использовать Azure Machine Learning
Я знаю многих Data Scientist-ов — да и пожалуй сам к ним отношусь — которые работают на машинах с GPU, локальных или виртуальных, расположенных в облаке, либо через Jupyter Notebook, либо через какую-то среду разработки Python. Работая в течение 2 лет экспертом-разработчиком по AI/ML я делал именно так, при этом подготавливал данные на обычном сервере или рабочей станции, а запускал обучение на виртуалке с GPU в Azure.
Конечно, мы все слышали про Azure Machine Learning — специальную облачную платформу для машинного обучения. Однако после первого же взгляда на вводные статьи, создаётся впечатление, что Azure ML создаст вам больше проблем, чем решит. Например, в упомянутом выше обучающем примере обучение на Azure ML запускается из Jupyter Notebook, при этом сам обучающий скрипт предлагается создавать и редактировать как текстовый файл в одной из ячеек — при этом не используя автодополнение, подсветку синтаксиса и другие преимущества нормальной среды разработки. По этой причине мы долгое время всерьез не использовали Azure ML в своей работе.
Однако недавно я обнаружил способ, как начать эффективно использовать Azure ML в своей работе! Интересны подробности?
Ограничение доступа к атрибутам измерения в табличной модели SSAS
Например, пользователь должен видеть обороты по всем товарам, с возможностью полной детализации по ним, но клиенты при этом должны отображаться не все, а лишь некоторые, либо все клиенты, но с частично скрытыми данными в некоторых атрибутах (полях).
Чтобы не дать пользователю возможность просматривать обороты в разрезе клиентов, можно обыграть это через формулы в мерах и выводить пустое значение, если пользователь попытается посмотреть оборот конкретного клиента, один из подобных вариантов описан здесь. Однако это всё не то. Когда мер несколько десятков, то писать в каждой из них формулу… а если забудешь? Но ведь точно забудешь же когда-нибудь… А если пользователю нужны данные из конкретной карточки клиента, то ему ни что не помешает это увидеть без выбора фильтрующей меры. Что же делать?
Нам нужно было добиться вот такого отображения:
![](https://habrastorage.org/webt/4u/id/xl/4uidxloiihdv0ucfozvnt7vypbu.png)
Ближайшие события
![](https://habrastorage.org/getpro/habr/upload_files/024/1bb/2c5/0241bb2c5d9a5d00243fc2f35fd8225f.png)
![](https://habrastorage.org/getpro/habr/upload_files/037/c72/284/037c722846d16a68b94f4735e3bb8560.png)
![](https://habrastorage.org/getpro/habr/upload_files/fd0/255/4d3/fd02554d346912bf8fc4bc81f9406174.png)
![](https://habrastorage.org/getpro/habr/upload_files/2d4/6b0/a40/2d46b0a4097c9ccaba40c1ea81e13fab.png)
![](https://habrastorage.org/getpro/habr/upload_files/8ca/d72/5e6/8cad725e62dafcc18e20f6e3dd3f2ccd.png)
Скрозь тернии к велосипедам, часть первая: изучаем основы кастомизации отладчика Visual Studio с помощью плагинов
![](https://habrastorage.org/webt/kl/8o/1x/kl8o1xvmgggvg_ssk6tb72xz6se.png)
Python в Visual Studio Code – январский релиз 2020
![](https://habrastorage.org/getpro/habr/post_images/95a/334/895/95a3348951cabdd2e63a7720bbe762d4.gif)
В «osu!» играй, про ошибки не забывай
5 расширений и тем для VS Code, которые способны изменить жизнь фронтенд-разработчика
Visual Studio for Mac: управляйте своей IDE с помощью клавиш
Если вы вдруг дадите виртуозному пианисту пианино, где клавиши вдвое шире, а клавиши диез/бемоль находятся ниже, а не выше естественных клавиш, то ему придется постараться, чтобы воспроизвести даже самые простые мелодии, пока он изучает новую аранжировку. Аналогично, когда речь заходит о сочетаниях клавиш в вашей любимой IDE, любое изменение может быстро дезориентировать. К счастью, Visual Studio for Mac предлагает обширные возможности настраивания привязок клавиш, которые позволяют настраивать сочетания клавиш по своему вкусу.
![](https://habrastorage.org/webt/hk/sp/ev/hkspevuww4acqvpk8nxku32hgaq.png)
Делаем один проект плагина с компиляцией под разные версии Revit/AutoCAD
![](https://habrastorage.org/webt/u7/vh/xi/u7vhxitqphrjiza_fsmzmoclmha.png)
При разработке плагинов для САПР приложений (в моем случае это AutoCAD, Revit и Renga) со временем появляется одна проблема – выходят новые версии программ, меняется их API и нужно делать новые версии плагинов.
Когда у вас всего один плагин или Вы еще новичок-самоучка в этом деле, то можно просто сделать копию проекта, поменять в нем нужные места и собрать новую версию плагина. Соответственно, последующее внесение изменений в код повлечет за собой многократное увеличение трудозатрат.
По мере накопления опыта и знаний Вы найдете несколько способов автоматизации этого процесса. Я прошел этот путь и хочу рассказать Вам к чему я пришел в итоге и насколько это удобно.
Работа с библиотекой Newtonsoft.Json на реальном примере. Часть 1
![](https://habrastorage.org/webt/3l/5k/h7/3l5kh7oqau8g7rjl5_urm3bcv-u.png)
![](https://assets.habr.com/habr-web/img/vk.f57448a1.webp)
Вклад авторов
dmandreev 1042.2XaocCPS 998.2n0mo 592.0sahsAGU 561.2tangro 538.8SvyatoslavMC 524.0Andrey2008 480.2maria_gore 437.4msgeek 351.6stasus 273.8