Как стать автором
Обновить
38
0
Павел Маминов @Xobotun

Жаба-программист

Отправить сообщение

90 рекомендаций по стилю написания программ на C++

Время на прочтение20 мин
Количество просмотров411K
От переводчика. Искал в интернете простой и легко применимый гайдлайн по написанию программ на C++. Мне понравился один из вариантов, и я решил его перевести и опубликовать. Если хабрапользователи хорошо встретят этот топик, могу перевести и другие связанные документы, а также гайдлайны по написанию кода от других компаний.

1 Введение


Настоящий документ содержит рекомендации по написанию программ на языке C++.

Рекомендации основаны на установившихся стандартах, собранных из различных источников, личного опыта, частных требований и потребностей определённых проектов, а также почерпнутых из источников (см. ниже).

Но для появления ещё одного списка рекомендаций, помимо указанных источников, есть несколько причин. Основная причина — их излишняя обобщённость, поскольку зачастую требуется задать частные правила (в особенности правила именования). Данный документ содержит комментарии, что делает его более удобным в использовании при проведении ревизий кода, чем другие уже существующие документы. К тому же, рекомендации по программированию обычно вперемешку содержат описания проблем стиля и технических проблем, что не совсем удобно. Этот документ не содержит каких-либо технических рекомендаций по C++, делая упор на вопросах стиля.
Читать дальше →
Всего голосов 181: ↑137 и ↓44+93
Комментарии213

Изолирование приложения с IP-адресом из VPN другой страны на примере Steam

Время на прочтение7 мин
Количество просмотров68K
Abstract: Изоляция приложения на уровне сети использованием network namespaces Линукса. Организация SSH-туннелей.

Традиционно, большая часть статьи будет посвящена теории, а скучные скрипты — в конце статьи. В качестве субъекта для экспериментов будет использоваться Steam, хотя написанное применимо к любому приложению, включая веб-браузеры.

Вместо вступления. Я просто покажу эту картинку:

147%… Что-то мне это напоминает. Впрочем, хабр не для политики.

Цена на игры в Стиме зависит от региона. Регион — от IP'шника. Есть желание иметь цены в рублях, а не в евро.

Для этого мы используем VPN через SSH с использованием tun-устройств, плюс network namespaces для изоляции приложения от всех остальных сетевых устройств.

Network namespaces


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

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

Если у нас есть несколько интерфейсов (один из которых относится к VPN), то нет штатных методов сказать стиму, что надо использовать его, а не eth0/wlan0. Точнее, мы можем «завернуть» весь трафик в VPN, но это не всегда желательно. Как минимум — рост latency и снижение скорости (даже если VPN ведёт на супербыстрый сервер, увеличение latency, оверхед от туннеля и фиксированная ширина локального канала ставят TCP в положение, когда приходится резать скорость). Как максимум — одно дело «покупать через русский VPN», другое дело — пускать туда весь трафик. Меня совсем не прельщает использование VPN для получения защиты роскомнадзором от оппозиции и вольнодумства.

В этих условиях возникает большое желание оставить один на один конкретное приложение и заданный сетевой интерфейс. Один. Сконфигурированный для нужд только этого приложения.

Для решения этой задачи в Linux, уже довольно давно (аж с 2007 года) существует технология, называемая network namespaces, то есть пространства имён для сетей. Суть технологии: над сетевыми интерфейсами создаётся подобие «каталогов», в каждом каталоге может быть несколько сетевых интерфейсов и приложений. Приложение, оказавшееся в заданном сетевом пространстве имён, может использовать (и видит) только те сетевые интерфейсы, которые отнесены к этому пространству.

Картинка ниже поясняет происходящее:

Читать дальше →
Всего голосов 111: ↑105 и ↓6+99
Комментарии84

4 причины, почему люди чего-то не делают или “Как раскачать low-performer’а”

Время на прочтение8 мин
Количество просмотров103K
Так получилось, что тесть и теща у меня доктора педагогических наук. Что приводит к тому, что волей-неволей начинаешь постигать различные полезные методики :)

Однажды, после какого-то ученого совета за виски чаем на кухне тесть говорит: Саш, а вот как ты считаешь, почему люди чего-то не делают?

Честно сказать, вопрос поставил меня в тупик. Я начал фантазировать: ну, обстоятельства мешают, черты характера, недостаток опыта…

Не-не, сказал, тесть, все не так. Если люди чего-то не делают, для этого может быть 4 причины. После чего мой арсенал управленческих инструментов пополнился еще одним. И именно об этом инструменте мы сегодня поговорим, а заодно разберем несколько историй из реальной жизни:
  • Почему менеджеров проектов надо пересаживать в отдельное здание
  • Что делать, когда ваш заказчик не пользуется вашей системой отчетов
  • Как раскачать low-performer’а


Читать дальше →
Всего голосов 139: ↑111 и ↓28+83
Комментарии66

Песочница дополненной реальности

Время на прочтение1 мин
Количество просмотров41K


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

Этот проект создан командой специалистов по геологии и визуализации. Система построна на основе камеры Microsoft Kinect, работающей в связке с топографическим ПО и 3D-проектором. Немало времени ушло у авторов, чтобы научить своё детище быстро и точно реагировать на действия детей.
Читать дальше →
Всего голосов 70: ↑66 и ↓4+62
Комментарии20

Unity3d. Уроки от Unity 3D Student (B17-B20)

Время на прочтение6 мин
Количество просмотров87K
Всем привет. DisaDisa начал хорошее дело по переводу уроков по Unity 3D от сайта www.unity3dstudent.com. Я решил продолжить начатое, чтобы уж на хабре был законченный курс.

Ссылки на предыдущие уроки:

Читать дальше →
Всего голосов 31: ↑29 и ↓2+27
Комментарии2

How-to: Пишем торговых роботов на TradeScript

Время на прочтение7 мин
Количество просмотров45K
image

Тема создания механических торговых систем или попросту биржевых роботов вызывает на Хабре определенный интерес. Мы частенько освещаем теоретические аспекты алгоритмической торговли, но не так часто говорим о ее практической составляющей. Поэтому в сегодняшнем топике будут рассматриваться реальные примеры различных роботов, созданных с помощью скриптового языка TradeScript.
Читать дальше →
Всего голосов 31: ↑20 и ↓11+9
Комментарии9

Пять способов выгореть для программиста

Время на прочтение4 мин
Количество просмотров113K
imageОт переводчика
Выгорание в жизни программиста может случиться по самым разнообразным причинам; если задаться целью перечислить все пути, которыми оно подкрадывается к нам, то одно лишь это перечисление займет немало времени. Это еще один повод, по которому не стоит недооценивать процесс выгорания — иначе однажды вам придется искать дорогу обратно, и стоить это может очень дорого. Последняя строка вовсе не голословна — мне самому однажды смогла помочь лишь любовь к коду — когда уже, казалось бы, все осточертело и ничего не хотелось, чтение подвернувшегося Макконнелла навеяло воспоминания о том, как же когда-то мне нравилось программировать. И сегодня мне нравится делать это снова.
А теперь — слово автору.

Я отошел от своего выгорания только недавно — несмотря на то, что случилось оно несколько лет назад. Да, мне было непросто… очень непросто. Когда я думаю о произошедшем, на ум приходит немало причин тому, что случилось со мной — но самое интересное заключается в том, что каждой из них я никогда раньше не придавал значения. Хотите повторить мой путь и выгореть? Пожалуйста, у меня готов целый список, как следует поступать в таком случае:

1. Думать о проекте и только о нем


Признайтесь себе: бизнес хочет, чтобы вы создавали наилучший продукт «для наших клиентов». Вы откладываете в долгий ящик какой-либо функционал из-за того, что не успеваете к дедлайну. Вы планируете проект и анализируете его со всех сторон для того, чтобы разбить на несколько «перевариваемых» частей, которые затем должны быть воплощены одним из кодеров (в роли обезьянки, или code monkey, кстати говоря, можете быть и вы один). Вы создаете рабочий прототип, затем получаете обратную связь и делаете еще одну итерацию. И все это — без единой мысли о себе любимом.
Читать дальше →
Всего голосов 170: ↑150 и ↓20+130
Комментарии149

Qwt и Qt Creator. Часть 3: график как элемент Designer Form

Время на прочтение6 мин
Количество просмотров25K


В примерах использованы Qt Creator 3.0.0 (MinGW) и Qwt-6.1.0.

Для понимания этой статьи читатель должен иметь начальный опыт разработки windows-приложений в среде Qt Creator, понимать концепцию «сигнал-слот». Также рекомендуется познакомиться с частью №1 и №2 цикла моих статей про Qwt:


habrahabr.ru/post/211204
habrahabr.ru/post/211867

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

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

В части №3 мы сделаем следующее:

• добавим виджет для отображения графика в Designer Form, что позволит использовать элементы управления Qt Creator;
• построим демонстрационную кривую, реализуем базовые удобства работы с графиком: возможность перемещения по полю графика, его приближение/удаление, отобразим координаты курсора при его перемещении;
• отобразим координат клика в строке состояния Designer Form;
• переместим кривую вдоль оси х, используя стандартные элементы управления из Qt Creator.

Читать дальше →
Всего голосов 12: ↑8 и ↓4+4
Комментарии2

Игровой движок Godot отдали в общественное пользование

Время на прочтение1 мин
Количество просмотров44K


Создатели движка Godot опубликовали исходный код под свободной лицензией MIT, так что теперь любой желающий может использовать его для создания собственных 2D- и 3D-игр. Авторы программы утверждают, что Godot предоставляет богатый набор функций и новый подход к разработке игр, что в совокупности «позволяет разработчикам-одиночкам и группам работать более эффективно, чем когда-либо». Они также отмечают простоту и лёгкость освоения программы: язык программирования похож на Python.
Читать дальше →
Всего голосов 74: ↑69 и ↓5+64
Комментарии12

Qwt и Qt Creator. Быстро и просто. Часть 2: элементы отображения и управления

Время на прочтение8 мин
Количество просмотров28K


В примерах использованы Qt Creator 3.0.0 (MinGW) и Qwt-6.1.0.
Для понимания этой статьи читателю желательно:
  • иметь начальный опыт разработки windows-приложений в среде Qt Creator;
  • понимать концепцию «сигнал-слот»;
  • познакомиться с частью №1 цикла моих статей про Qwt: habrahabr.ru/post/211204


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

В части №1 (постепенно разрастающегося) цикла статей мы:
• подключили Qwt к Qt Creator;
• построили график;
• настроили оси координат;
• изменяли масштаб графика (приближали/удаляли его);
• перемещались по полю графика;
• отображали координаты рядом с курсором по щелчку мышкой.

В части №2 мы расширим функциональность нашего визуализатора:
• добавим строку состояния;
• сохраним координаты клика в переменных и отобразим их в строке состояния;
• добавим кнопку на панель управления;
• добавим на панель управления QwtCounter (поле для номера, значение которого можно изменять стрелками, см. картинку).
• зададим с помощью QwtCounter смещение графика x;
• нажатием на кнопку сместим график на ранее заданную величину х.

Примечание: В рамках этой статьи при добавлении элементов управления GUI не используется.

Читать дальше →
Всего голосов 27: ↑26 и ↓1+25
Комментарии13

Управление устройством USB HID на Windows 7

Время на прочтение9 мин
Количество просмотров92K
В статье сделана попытка предоставить пошаговую инструкцию — как соединить самодельное устройство USB HID на микроконтроллере AVR и компьютер с операционной системой Windows 7 x64, чтобы обмениваться данными и управлять портами микроконтроллера. Пример приложения управляет через USB ножкой порта микроконтроллера (к ней подключен индикационный светодиод). Есть возможность также прочитать состояние состояние светодиода — потушен он или горит. Топик предназначен для новичков, поэтому большая просьба к знатокам программирования — приберегите тухлые яйца и гнилые помидоры иронические комментарии для более удобного случая.
Читать дальше →
Всего голосов 35: ↑32 и ↓3+29
Комментарии20

Вы и ваша работа *

Время на прочтение40 мин
Количество просмотров816K
Длинный материал. Время чтения – около 40 минут.

image

Доктор Ричард Хэмминг, профессор морской школы Монтерея в штате Калифорния и отставной учёный Bell Labs, прочёл 7 марта 1986 года очень интересную и стимулирующую лекцию «Вы и ваши исследования» переполненной аудитории примерно из 200 сотрудников и гостей Bellcore на семинаре в серии коллоквиумов в Bell Communications Research. Эта лекция описывает наблюдения Хэмминга в части вопроса «Почему так мало учёных делают значительный вклад в науку и так многие оказываются в долгосрочной перспективе забыты?». В течение своей более чем сорокалетней карьеры, тридцать лет которой прошли в Bell Laboratories, он сделал ряд прямых наблюдений, задавал учёным очень острые вопросы о том, что, как, откуда, почему они делали и что они делали, изучал жизни великих учёных и великие достижения, и вёл интроспекцию и изучал теории креативности. Эта лекция о том, что он узнал о свойствах отдельных учёных, их способностях, чертах, привычках работы, мироощущении и философии.
Читать дальше →
Всего голосов 239: ↑229 и ↓10+219
Комментарии127

Получение «зеленого света» в сервисе GreenLight: советы и рекомендации

Время на прочтение13 мин
Количество просмотров65K

1. Вступление


Всем привет! Не так давно мы стартовали ОБТ нашего нового online-проекта Metal War Online. Со временем мы захотели выйти на глобальный рынок посредством Steam и, как большинство коллег, осуществляем эту затею через сервис Greenlight. Нашему опыту прохождения аппрува и будет посвящен материал.

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

image
Читать дальше →
Всего голосов 82: ↑77 и ↓5+72
Комментарии37

Фантастические сериалы

Время на прочтение5 мин
Количество просмотров122K
Любите ли вы сериалы? Точнее, любите ли вы хорошие сериалы? Конечно, понятие «хорошо/плохо» в искусстве полностью субъективно, поэтому ещё больше уточню свой вопрос: любите ли вы хорошие фантастические сериалы? Полагаю, что подавляющее большинство хабражителей ответят утвердительно. Сегодня я хотел бы рассказать вам о нескольких сериалах, которые стоит посмотреть каждому любителю фантастики.

Светлячок





Если вы ещё не смотрели классику приключенческих фантастических сериалов, «Светлячок», то самое время это сделать. На протяжении 14 (формально — 15) серий мы наслаждались приключениями команды космических наёмников-авантюристов во главе с обаятельным капитаном Рейнольдсом, роль которого исполнил Натан Филлион.
Читать дальше →
Всего голосов 125: ↑74 и ↓51+23
Комментарии245

Wi-Fi: неочевидные нюансы (на примере домашней сети)

Время на прочтение14 мин
Количество просмотров1.4M
Сейчас многие покупают точки доступа 802.11n, но хороших скоростей достичь удается не всем. В этом посте поговорим о не очень очевидных мелких нюансах, которые могут ощутимо улучшить (или ухудшить) работу Wi-Fi. Всё описанное ниже применимо как к домашним Wi-Fi-роутерам со стандартными и продвинутыми (DD-WRT & Co.) прошивками, так и к корпоративным железкам и сетям. Поэтому, в качестве примера возьмем «домашнюю» тему, как более родную и близкую к телу. Ибо даже самые администые из админов и инженеристые из инженеров живут в многоквартирных домах (или поселках с достаточной плотностью соседей), и всем хочется быстрого и надежного Wi-Fi.
[!!]: после замечаний касательно публикации первой части привожу текст целиком. Если вы читали первую часть — продолжайте отсюда.
Читать дальше →
Всего голосов 234: ↑231 и ↓3+228
Комментарии138

Настройка IDEA для чистокодеров

Время на прочтение4 мин
Количество просмотров288K
Я люблю две вещи: Intellij IDEA и чистый код (Clean Code).
IDEA создана для чистого кода. Многие настройки по умолчанию уже стимулируют вас писать как надо.


Но она всё ещё не идеальна.
Когда я устанавливаю новую копию IDEA, я пробегаю по настройкам и выставляю свои любимые галочки.
Хочу ими с вами поделиться в надежде, что когда-нибудь и они станут стандартом.

Мои любимые настройки IDEA с картинками
Всего голосов 103: ↑76 и ↓27+49
Комментарии60

Задачи на собеседованиях в Яндексе

Время на прочтение15 мин
Количество просмотров359K
Открытые вакансии на должность разработчика в Яндексе есть всегда. Компания развивается, и хороших программистов не хватает постоянно. И претендентов на эти должности тоже хоть отбавляй. Главная сложность – отобрать действительно подходящих кандидатов. И в этом плане Яндекс мало чем отличается от большинства крупных IT-компаний. Так что базовые принципы, описываемые в этой статье, могут быть применимы не только к Яндексу.

Однако стоит оговориться, что статья все же про подбор разработчиков. Т.е. собственно тех восьмидесяти процентов сотрудников, на которых держится массовая разработка. Часто мы нанимаем людей на специальные вакансии: например, разработчиков систем компьютерного зрения, лингвистов, экспертов по машинному обучению. В этом случае формат собеседования может заметно отличаться.

image
Читать дальше →
Всего голосов 221: ↑178 и ↓43+135
Комментарии329

Как безопасно читать Хабр на работе с помощью наших экранов защиты информации

Время на прочтение5 мин
Количество просмотров145K
Добрый день, уважаемые хабрапользователи!

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



Мы разберем актуальность проблемы с подсматриванием и расскажем как реализовали технологию с технической стороны.
P.S. Больше никаких TM и .
Читать дальше →
Всего голосов 177: ↑141 и ↓36+105
Комментарии184

Процедурная генерация планов помещений

Время на прочтение7 мин
Количество просмотров72K

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

По процедурной генерации планов помещений есть много, очень много статей. Вот ещё пяток ссылок на статьи. Только исходников ни к одной из них нет.

В этой статье я расскажу о том, как я реализовал на Unity3d один простой метод генерации, который приводит к хорошим результатам и легко модифицируется. С картинками и исходниками.
Читать дальше →
Всего голосов 99: ↑97 и ↓2+95
Комментарии29

Информация

В рейтинге
4 724-й
Откуда
Москва, Москва и Московская обл., Россия
Работает в
Дата рождения
Зарегистрирован
Активность