Поки у всьому світі обговорюють 89-ту церемонію вручення нагород премії «Оскар» і складають різні рейтинги акторів і їх костюмів, ми вирішили підготувати оглядову статтю в IT-сфері. Мова піде про найбільш цікавих помилках, допущених у проектах з відкритим вихідним кодом в 2016 році. Цей рік був примітний тим, що наш аналізатор PVS-Studio став доступний і в операційних системах, заснованих на Linux. Представлені помилки напевно вже виправлені, і кожен читач може переконатися в серйозності помилок, які допускають розробники.

Читати далі →

Я тільки що закінчив серію змін в коді браузера Chrome, яка зменшила розмір його бінарника під Windows приблизно на 1 мегабайт, перенесла близько 500 КВ з read/write сегмента в read-only, а також зменшила споживання оперативної пам'яті загалом приблизно на 200 KB на кожен процес Chrome. Дивовижне полягає в тому, що конкретно дана серія змін складалася виключно з видалення і додавання ключового слова const в деяких місцях коду. Так, компілятори — дивні.

Ця задача виникла, коли я писав документацію для деяких утиліт, які я використовую для дослідження регресій коду, пов'язаних із збільшенням розміру скомпільованих бінарників під Windows. Я запустив утиліту, скопіював у документацію її висновок та почав його описувати, коли помітив щось дивне: кілька великих глобальних об'єктів, які згідно архітектурі повинні були бути константними, чомусь знаходилися в сегменті read/write даних. Скорочена версія того висновку утиліти показана нижче:

image

Більшість виконуваних форматів мають як мінімум два сегмента даних — один для read/write об'єктів і ще один для read-only. Якщо у вас є константные дані, такі, наприклад, як kBrotliDictionary, то їх буде логічно помістити в read-only сегмент, який є сегментом «2» в бінарники Chrome під Windows. Однак деякі константные дані, такі як unigram_table, device::UsbIds::vendors_ blink::serializedCharacterData були в секції «3», тобто read/write сегменті.

image

Читати далі →

Visual C++ for Linux Development: Практика використання для Windows розробників

enter image description here
Так вийшло, що за досить довгу кар'єру Windows Embedded розробника доля звела мене з серйозного з Linux всього лише кілька місяців тому. Потрібно було написати не дуже складну консольну програму. На той момент всі мої знання про Linux були взяті з курсу за операційним системам у внз (10 років тому). Але Stackoverflow, google і досвід дозволили досить швидко впоратися із завданням. У результаті все було написано в Visual Studio Code під Ubuntu 14.04. Правда, додаток під Linux було лише невеликою клієнтом для Windows сервера. Тому результат не дуже задовольняв мене, так як був відірваний від основного проекту в Visual Studio. І тільки зараз я зміг перенести код в основний проект з допомогою Visual C++ for Development Linux. У процесі мені довелося вирішити ряд супутніх проблем. Про це я розсаджені під катом.
Читати далі →

Visual C++ for IoT Development: Прорив чи розчарування?

enter image description here
Як відомо світ не стоїть на місці і активно розвивається. Особливо в сфері IT і конкретно розробки ПО. Найважче в цій справі це встежити за всіма новинками і вихопити найбільш цінні і корисні з них. Ось і я тільки недавно натрапив на додаток до Visual Studio під назвою Visual C++ for IoT Development, яке існує вже майже рік. Потенційно — дуже корисна штука, але поки це більше яскраву назву, ніж даний Visual C++ для IoT. Давайте розберемося чому.
Читати далі →

Розширення Visual C++ for Development Linux

Розширення Visual C++ for Development Linux дозволяє створювати рішення на C++ для серверів, настільних ПК і пристроїв під управлінням Linux. Керувати підключеннями до них можна безпосередньо в Visual Studio. VS буде автоматично копіювати і віддалено збирати вихідний код програм. Також середовище дозволяє запустити вашу програму в режимі налагодження. Система управління проектами підтримує створення рішень для конкретних архітектур, в тому числі APM. Під катом ми розповімо, як почати роботу з новими проектами для Linux.



Читати далі →

Як я написав систему візуалізації для стенду

По-перше, спочатку треба сказати про те, що таке система візуалізації внекабинного простору літака. Це програма, яка показує те, що бачить льотчик, коли летить у літаку. При цьому я не маю на увазі приладів і взагалі всього того, що знаходиться всередині кабіни — вище не дарма вжито термін «внекабинное простір». Робити, звичайно, доводиться частково і прилади, але це окрема, набагато більш просте завдання, і про неї не можна говорити. У вузькому значенні «візуалізацією» називається саме зображення внекабинного простору, так що я буду говорити саме про це.

Нижче наведен приклад того, що бачить льотчик в моїй програмі при зльоті. Всі приклади в подальшому як раз і взяті з реальних візуалізаційних кадрів моєї програми.



Читати далі →

Visual Studio "15" Preview 5

5 жовтня 2016-го року вийшов Visual Studio «15» Preview 5. Команда розробників сфокусувалася на підвищення продуктивності IDE. У цій статті ми розглянемо деякі з поліпшень. Запускайте інсталятор і, поки він встановлюється, читайте про нововведення в цій статті або в оригінальних release notes.

Значний крок вперед у продуктивності і економії пам'яті
Я хотів би почати з відео, яке дуже добре показує зростання продуктивності в даному превью. Тут показана завантаження проекту Roslyn, яка раніше займала 60 секунд, а в новому превью повністю закінчується вже до 30-ій секунді.



Читати далі →

Боротьба з загадковими падіннями MSBuild на XamlTaskFactory

Наша команда розробляє багатоплатформовий ядро додатків, яке має збиратися на Windows під Visual Studio 2015, Linux з gcc 4.9+, MacOS, iOS, Android і Windows Phone 8.1+. Для автоматичної перевірки коду на Jenkins налаштовані складання під всі необхідні конфігурації. Завдання збірок відловити код, який не збирається на одній або декількох з платформ або не проходить юніт-тести і не дати йому потрапити до команд кінцевих додатків до внесення відповідних виправлень. Такий процес CI дозволяє розробнику локально використовувати зручну йому операційну систему і середовище розробки, будь то Visual Studio, XCode, QtCreator або взагалі vim + ninja, при цьому не боятися, що його зміни не зберуться або будуть валити тести в іншому оточенні.

В ідеальному світі червона зборка на Jenkins (саме він у нас використовується в ролі билдсервера) говорить про проблеми в коді. Побачивши червоне світло на висить у кутку кімнати моніторі, «черговий за збірку» повинен піти і поправити знайдену проблему. В реальності ж причини падіння білду можуть бути самими різними, наприклад, обрив з'єднання з нодой, на якій проходила компіляція, що закінчилося місце на диску або приліт інопланетян. Такі помилкові спрацьовування забирають зайвий час у команди, притупляють увагу і в цілому знижують довіру до CI в команді. Історію боротьби з однією з таких проблем я хочу розповісти.

Читати далі →

Microsoft позбавиться від телеметрії в Visual C++ в Update 3

image

Місяць тому Євген Гречников grechnik опублікував пост «бібліотека для Visual Studio 2015 і телеметрія», в якому розповів про цікаву знахідку: виявилося, що в будь-якому бінарники, скомпільованому VS2015 з програми на C чи C++, є код, який може писати логи — і виглядало це все злегка підозріло, особливо в силу відсутності исходников telemetry.cpp.

Три дні тому це питання було знову піднято на Reddit, де час від часу в коментарях з'являються розробники Visual Studio — і ось сьогодні громадськості нарешті вдалося отримати цілком собі офіційну відповідь від представника Microsoft.

Найважливіше: телеметрія буде прибрана з статичних бібліотек в оновленні Update 3.

Читати далі →

Новий профілювальник пам'яті в Visual Studio 2015

Довгі роки З++ програмісти, що пишуть під Linux уїдливо нарікали розробникам на С++ під Windows відсутністю в Visual Studio нормального профилировщика пам'яті. Ось в Лінуксі, мовляв, є Valgrind, який вирішує всі проблеми, а в студії: розставляй якісь макроси, аналізуй якісь логи — морок. Наклеп! Хоча і правда. Вірніше, це було правдою до виходу Visual Studio 2015, в якій нарешті (ура 3 рази!) присутній нормальний профілювальник пам'яті, що дозволяє ловити витоку пам'яті з закритими очима, однією лівою і навіть не прокидаючись!

У цій статті ми подивимося, що він вміє і як ним користуватися.



Читати далі →