Обновить
4

Программист

1
Подписчики
Отправить сообщение

Как не переносить весь код на 64 бита

Время на прочтение4 мин
Охват и читатели22K
До чего бывает неприятно: есть 32-битная библиотека на C++, которую вы уже много лет лицензируете клиентам, а теперь все больше и больше клиентов хочет использовать ее из 64-битных программ. Вы развиваете библиотеку, исправляете ошибки, дорабатываете, холите и лелеете ее, она прекрасно работает, а клиентам это не так и важно – они просто хотят 64 бита. Им даже не важно, будет ли она вся 64-битной, они просто хотят ее использовать.
 
Что делать? Очевидно – переписать код так, чтобы он компилировался и на 32 бита, и на 64:
— читаем много статей – например, вот эту и те, что появятся в «похожих публикациях» при ее прочтении;
— быстренько правим код (за неделю должны управиться, правда?);
— ???
— PROFIT
 
А теперь добро пожаловать в реальный мир.
Читать дальше →

Как заставить игру работать с частотой 60fps

Время на прочтение11 мин
Охват и читатели38K
Представьте себе задачу: у вас есть игра, и вам нужно, чтобы она работала с частотой 60 fps на 60-герцовом мониторе. Ваш компьютер достаточно быстр для того, чтобы рендеринг и обновление занимали несущественное количество времени, поэтому вы включаете vsync и пишете такой игровой цикл:

while(running) {
    update();
    render();
    display();
}

Очень просто! Теперь игра работает с 60fps и всё идёт как по маслу. Готово. Спасибо, что прочитали этот пост.


Ну ладно, очевидно, что всё не так хорошо. Что если у кого-то слабый компьютер, который не может рендерить игру с достаточной для обеспечения 60fps скоростью? Что если кто-то купил один из тех крутых новых 144-герцовых мониторов? Что если он отключил в настройках драйвера vsync?
Читать дальше →

Топ-10 докладов конференции C++ Russia 2018: полные видеозаписи, слайды, комментарии

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

В этой статье вас ждёт десять лучших докладов от Андрея Александреску, Дэвида Вандервурда, Джона Калба и многих других.


Фичи компилятора C++, асинхронность, многопоточность, параллелизм, модель памяти, алгоритмы и STL, метапрограммирование и рефлекшен, огромное множество тем.



Всё это — записи с конференции C++ Russia, самой большой в истории. Восемь сотен участников, немаленький зал, спикеры с мировым именем. Прошёл год, но большинство докладов ничуть не утратило своей актуальности. Впрочем, и неудивительно — именно такие доклады и попадают в топ по оценке участников.


Формат таков:


  • Обязательное видео на YouTube
  • Слайды, если есть
  • Подробное описание доклада на русском языке
  • Краткая биография докладчика

Плюс у вас есть комментарии Хабра, чтобы обсудить увиденное. Реклама на ютубе отключена, никто не будет мешать. Есть всё, чтобы начать смотреть прямо сейчас.

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

C++0x (С++11). Лямбда-выражения

Время на прочтение13 мин
Охват и читатели310K
Буквально на днях случайно наткнулся на Хабре на статью о лямбда-выражениях из нового (будущего) стандарта C++. Статья хорошая и даёт понять преимущества лямбда-выражений, однако, мне показалось, что статья недостаточно полная, поэтому я решил попробовать более детально изложить материал.

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

Унифицированная обработка ошибок (C++ вариант для микроконтроллеров)

Время на прочтение12 мин
Охват и читатели10K
При разработке ПО для микроконтроллеров на С++ очень часто можно столкнуться с тем, что использование стандартной библиотеки может привести к нежелательным дополнительным расходам ресурсов, как ОЗУ, так и ПЗУ. Поэтому зачастую классы и методы из библиотеки std не совсем подходят для реализации в микроконтроллере. Существуют также некоторые ограничения в использовании динамически выделяемой памяти, RTTI, исключений и так далее. В общем случае, чтобы писать компактный и быстрый код нельзя просто так взять библиотеку std и начать пользоваться, скажем операторами типа typeid, потому что необходима поддержка RTTI, а это уже накладные расходы, хоть и не очень большие.

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

Карьерные стероиды. Путь Самурая

Время на прочтение13 мин
Охват и читатели30K
Метод карьерного роста «Путь Самурая» как-то язык не поворачивается назвать стероидом, потому что он… Не знаю, правильный, что ли. Честный, настоящий, добрый и пушистый.

Потому в жизни встречается не очень часто. Я смог вспомнить только четыре примера, и не все они из моей личной практики, но эти истории я видел своими глазами. Разумеется, люди, о которых пойдет речь, никогда не читали «Хагакурэ» (кодекс самураев), но их истории, поведение, принципы и подходы лежат очень близко к философии древних японских воинов.



Для начала немного расскажу о самураях и их философии.
Читать дальше →

Не берут на работу. А что, если дело в вас?

Время на прочтение3 мин
Охват и читатели32K
Форумы по поиску работы пестрят сообщениями: “Я уже полгода\год ищу работу и рекрутеры мне отказывают, потому что непрофессиональные, думают, что раз никто не взял, то и нам не нужен”. Знакомо? Давайте разбираться.

Во-первых, рекрутер обычно мало мальски умеет различать эмоции людей и имеет какой-никакой опыт оценки. Как минимум через него проходит в день 5-7 человек, с которыми он подробно общается. Общие черты характера и поведения в этом случае выявить не так уж сложно. (А профессиональные рекрутеры видят и анализируют гораздо больше и за продуктивно проведенный с Вами час могут составить Ваш общий психологический портрет).

Во-вторых, Ваши личностные качества также важны, как и профессиональные, и они половина успеха при собеседовании. Как выглядят большинство кандидатов давно и безуспешно ищущие работу? Озлобленные, подавленные, уставшие. Вы бы хотели такого коллегу? Я — нет. Собеседование — это продажа, рекрутер продает Вам возможность работы в компании, Вы — свою экспертизу. Какой бы Вы не были прекрасный профессионал, Вас скорее всего не возьмут: не очевидно, Вы так всегда с людьми общаетесь или только сегодня.
Читать дальше →

Категории выражений в C++

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

Категории выражений, такие как lvalue и rvalue, относятся, скорее, к фундаментальным теоретическим понятиям языка C++, чем к практическим аспектам его использования. По этой причине многие даже опытные программисты достаточно смутно представляют себе, что они означают. В этой статье я постараюсь максимально просто объяснить значение этих терминов, разбавляя теорию практическими примерами. Сразу оговорюсь: статья не претендует на максимально полное и строгое описание категорий выражений, за подробностями я рекомендую обращаться непосредственно в первоисточник: Стандарт языка C++.

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

Простые и длинные задачи лучше отсеивают кандидатов, чем короткие и сложные

Время на прочтение5 мин
Охват и читатели13K
tl;dr: Вопросы и задачи на собеседованиях по программированию кажутся излишне сложными. Иногда так и есть, что добавляет стресса. Это не единственный довод против них. Наши данные показывают, что более сложные задачи на самом деле хуже предсказывают конечный результат, чем более простые.

Тяжело программировать под давлением времени. Тем более на собеседовании. Задание, которое в нормальных условиях кажется простым, каким-то образом вызывает огромные проблемы в ярком свете комнаты для интервью. Гормоны стресса затуманивают мозг (к сожалению, ни драка, ни бегство не станут эффективным ответом на кодерскую проблему). Возникает ощущение, что вопросы словно специально разработаны с извращённой сложностью. Думаю, эти чувства возникают не на пустом месте.

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

Audio AI: выделяем вокал из музыки с помощью свёрточных нейросетей

Время на прочтение12 мин
Охват и читатели64K
Взлом музыки для демократизации производного контента

Отказ от ответственности: вся интеллектуальная собственность, проекты и методы, описанные в этой статье, раскрыты в патентах US10014002B2 и US9842609B2.

Вот бы вернуться в 1965 год, постучать в парадную дверь студии «Эбби-Роуд» с пропуском, зайти внутрь — и услышать настоящие голоса Леннона и Маккартни… Что ж, давайте попробуем. Входные данные: MP3 среднего качества песни «Битлз» We Can Work it Out. Верхняя дорожка — входной микс, нижняя дорожка — изолированный вокал, который выделила наша нейросеть.

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

Google Drive как хранилище для веб-приложения

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

Предисловие


Мое веб-приложение хранит данные в localStorage. Это было удобно, пока не захотелось, чтобы пользователь, заходя на сайт с разных устройств, видел одно и то же. То есть, понадобилось удаленное хранилище.

Но приложение «хостится» на GitHub Pages и не имеет серверной части. Я решил не делать сервер, а данные хранить у третьей стороны. Это дает существенные преимущества:

  1. Не нужно платить за сервер, не болит голова о его стабильности и доступности.
  2. Меньше кода, меньше ошибок.
  3. Пользователю не нужно регистрироваться в моем приложении (это многих раздражает).
  4. Приватность выше, и пользователь знает, что его данные хранятся в месте, которому он, скорее всего, доверяет больше, чем мне.

Сначала выбор пал на remoteStorage.js. Они предлагают открытый протокол обмена данными, достаточно приятное API, возможность интеграции с Google Drive и Dropbox, а также свои сервера. Но этот путь оказался тупиковым (почему — отдельная история).

В итоге решил использовать Google Drive напрямую, и Google API Client Library (далее GAPI) как библиотеку для доступа к нему.

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

Надеюсь, данная статья сэкономит вам время, если вы решите использовать Google Drive в вашем приложении.
Читать дальше →

Я провел сто собеседований, отказал сотне людей — и только потом научился собеседовать

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

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

Отзывы о работодателях: природа и бессмысленность анонимных отзывов

Время на прочтение7 мин
Охват и читатели42K
Вместе с сайтами вакансий, где вполне открыто можно высказать мнение о той или иной компании, войдя через соцсети, в Рунете активно развиваются “черные списки” работодателей. Это настоящая помойка из негативных эмоций, в которую по воле судьбы я впервые окунулся совсем недавно. Чутье подсказывало, что там должны быть отзывы только от кладовщиков, да сотрудников фастфуда — т.е. с позиций, где низкий порог входа и высокая текучка кадров. Каково же было мое удивление, когда я нашел массу помоев, извергнутых на ИТ-компании, в том числе, на те, где половина отрасли мечтает работать! Неужели на рынке, где правит логика, котируется эта грязь?

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

Интервалы: грядущая эволюция C++

Время на прочтение8 мин
Охват и читатели24K
Уже скоро появится стандарт C++20, в который, скорее всего, добавят концепцию интервалов (ranges), однако мало кто знает, что они из себя представляют и с чем их едят. Доступных широкой аудитории русскоязычных источников про этого зверя мне найти не удалось, вследствие чего в данной статье я бы хотел подробнее про него рассказать, базируясь на лекции Arno Schödl «From Iterators to Ranges: The Upcoming Evolution Of the STL» с конференции Meeting C++ 2015-го года. Я постараюсь сделать эту статью максимально понятной для тех, кто впервые сталкивается с этим понятием, и одновременно расскажу про всевозможные фишки вроде интервальных адаптеров для тех, кто с этим понятием уже знаком и хочет узнать больше.

Библиотеки с ranges


На момент написания данной статьи можно выделить три основные библиотеки, реализующие интервалы:


Первая библиотека, по сути, прародитель данной концепции (что неудивительно, ведь чего только нет в собрании библиотек Boost :) ). Вторая — библиотека Эрика Ниблера (Eric Niebler), про неё будет рассказано позднее. И наконец, последняя библиотека, как нетрудно догадаться, написана компанией think-cell, которая, можно сказать, развила и усовершенствовала Boost.Range.
Читать дальше →

Массовый взлом ВКонтакте [XSS-червь]

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

 
В функционале социальной сети Вконтакте обнаружен и успешно эксплуатировался опасный баг — хранимая XSS с функционалом сетевого червя.


В данный момент уязвимость устранена.

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

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

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


Я чёртовы сутки просидел над таской. Нужно было спроектировать самостоятельный модуль, а людям с тяжелой формой перфекционизма нельзя давать задачи на проектирование.

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

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

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

Как запретить Windows 10 перезагрузку после обновлений

Время на прочтение2 мин
Охват и читатели101K
Всем привет. Удивительно, но ответ на этот вопрос (точнее, «как сделать всё так, чтобы было как раньше») слабо освещён в рунете. Да и в целом готовое решение ещё нужно поискать.
Однако проблема требует решения т.к. система восстанавливает после перезагрузки далеко не все приложения.

Итак:
Читать дальше →

Начало дружбы с VkNet

Время на прочтение2 мин
Охват и читатели16K
Я много дружу с библиотекой VkNet. Но, к сожалению, документация по работе с ней достаточно устарела. Так что я решил поделиться и создать маленький туториал по основам работы с этой библиотекой.
Читать дальше →

Как я год не работал в Сбербанке

Время на прочтение12 мин
Охват и читатели485K
Доброго времени суток, хабровчане!

Про эту компанию знают все. Кто-то в ней даже работал или продолжает работать. Я думаю, сложно найти в РФ, да и на территории СНГ, человека который не слышал о холдинге Сбербанка. Именно холдинг, так как очень много компаний которые обслуживают Сбербанк и контролируются им же. Так вот я поработал в двух таких компаниях за один год — это Сбербанк-Технологии (далее СБТ) и Сбербанк.
Читать дальше →

Инициализация в С++ действительно безумна. Лучше начинать с Си

Время на прочтение17 мин
Охват и читатели105K
Недавно мне напомнили, почему я считаю плохой идеей давать новичкам C++. Это плохая идея, потому что в C++ реальный бардак — хотя и красивый, но извращённый, трагический и удивительный бардак. Несмотря на нынешнее состояние сообщества, эта статья не направлена против современного C++. Скорее она частично продолжает статью Саймона Брэнда «Инициализация в C++ безумна», а частично — это послание каждому студенту, который хочет начать своё образование, глядя в бездну.

Типичные возражения студентов, когда им говорят об изучении C:

  • «Кто-то его ещё использует?»
  • «Это глупо»
  • «Почему мы изучаем C?»
  • «Мы должны учить что-то лучшее, например, C++» (смех в зале)

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность