Как стать автором
Обновить
3
0
Александр Спирин @shakespear

C++ Разработчик

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

Частые ошибки при разработке lockfree-алгоритмов и их решения

Время на прочтение13 мин
Количество просмотров60K
На хабре уже было несколько статей про lock-free алгоритмы. Этот пост — это перевод статьи моего коллеги, которую мы планируем публиковать в нашем корпоративном блоге. По роду деятельности мы пишем огромное количество lock-free алгоритмов и структур данных, и этой статьей хочется показать, насколько это интересно и сложно одновременно.



Эта статья во многом похожа на эту статью, но в той статье рассматриваются не все проблемы, с которыми можно столкнуться, разрабатывая lock-free структуры данных, и уделяется очень мало внимания решению этих проблем. В этой статье хочется детально остановиться на некоторых решениях, которые мы используем в реальной реализации lock-free структур данных в нашем продукте, и больше внимания уделить оценке производительности.
Читать дальше →
Всего голосов 148: ↑147 и ↓1+146
Комментарии52

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

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

1 Введение


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

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

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

intro.js — пошаговое руководство для веб-страницы

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


Эта маленькая библиотека позволяет очень просто создать пошаговое введение для сайта или приложения. Достаточно добавить атрибуты data-intro и data-step с описанием и номером шага соответственно к нужным элементам страницы. Вот так:

<a href='http://google.com/' data-intro='Hello step one!' data-step='1'></a>
Читать дальше →
Всего голосов 139: ↑134 и ↓5+129
Комментарии24

Сказ о том, как один нерадивый провинциал в MIT поступал

Время на прочтение9 мин
Количество просмотров411K
Всем здравствуйте, меня зовут Олег, мне 17 лет, и сегодня я расскажу вам о процессе поступления в MIT.
Дабы сохранить цельность повествования, следует отметить, что статья написана 15 марта 2013 года, в день оглашения вердиктов о зачислении студентов.
image
Картинка для привлечения внимания

Когда я поступал в Массачусетский технологический институт, я с удивлением обнаружил, что в рунете нет не то что мало-мальски съедобной «истории успеха», связанной с поступлением в MIT, а вообще хоть какого-то руководства по поступлению в топовые американские университеты своими силами. Особенно на бакалавриат. Я подумал: «Что ж, видимо, придется написать мне». Я постараюсь донести информацию в наиболее понятном виде.
Читать дальше →
Всего голосов 430: ↑418 и ↓12+406
Комментарии214

AngularJS для привыкших к jQuery

Время на прочтение4 мин
Количество просмотров165K
AngularJS — прекрасный фреймворк для построения веб-приложений. У него замечательная документация, снабженная примерами. В обучающих «пробных» приложениях (вроде TodoMVC Project) он очень достойно показывает себя среди остальных прочих фреймворков. По нему есть отличные презентации и скринкасты.

Однако если разработчик никогда ранее не сталкивался с фреймворками, подобными Angular, и пользовался в работе в основном библиотеками вроде jQuery, то ему может быть трудно изменить свой образ мышления. Как минимум, так было со мной, и я бы хотел поделиться некоторыми заметками на эту тему. Может быть, кому-то это будет полезно.
Читать дальше →
Всего голосов 77: ↑74 и ↓3+71
Комментарии146

Обзор предложений Coursera и edX

Время на прочтение4 мин
Количество просмотров44K
Продолжаю серию обзоров образовательных курсов, начатую Darkus’ом здесь и здесь. С его же разрешения я воспользовался форматом описания.

Расскажу про четыре курса, прослушанных мной осенью 2012 года, на Coursera и edX. На самом деле, курсов я взял чуть больше, но что-то было в рамках самостоятельного просматривания архива оконченных курсов (Computer Science 101, Introduction to Databases), а что-то прекращено по личным обстоятельствам.
Итак, рассмотрим следующие курсы:

Coursera
  1. Fundamentals of Programming
  2. An Introduction to Interactive Programming in Python
  3. Information Security and Risk Management in Context

edX
  1. Introduction to Computer Science and Programming

Если вас интересуют предложенные курсы, добро пожаловать.
Читать дальше →
Всего голосов 13: ↑13 и ↓0+13
Комментарии26

О модульности, хорошей архитектуре, внедрении зависимостей в С/C++ и разноцветных кружочках

Время на прочтение18 мин
Количество просмотров42K
Не в совокупности ищи единства, но более – в единообразии разделения.
Козьма Прутков


Немного воды вначале


Нельзя не заметить, что аспектно-ориентированное программирование с каждым годом берет новые рубежи популярности. На хабре было уже несколько статей посвященных этому вопросу, от Java до PHP. Пришло время обратить свой взор на С/C++. Теперь я в первом же абзаце признаюсь, что речь пойдет не об «настоящих аспектах», но о чем-то, близко с ними связанном. Также рассуждение будет вестись в контексте embedded-проектов, хотя описываемые методы могут применяться где угодно, но именно embedded, это та область, где эффект будет максимально ощутимым. Еще я буду использовать слова «хидер» и «дефайн» для обозначения, соответственно, «заголовочного файла» и «макроопределения». Сухой и академичный язык это хорошо, но в данном случае, мне кажется, все будет проще понять, если пользоваться устоявшимися англицизмами.
Читать дальше →
Всего голосов 46: ↑44 и ↓2+42
Комментарии35

Операция Инвентаризация

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


Потребность


Как вы относитесь к бюрократии? Мне кажется, что почти у каждого из нас сразу возникает ассоциативный ряд «дороги», «дураки» и прочие исконно русские беды. И я был не исключением, пока не стал кем-то вроде завхоза в нашем небольшом коллективе.
Вдруг внезапно оказалось, что с увеличением числа «инвентарных единиц», будь то системный блок, монитор, принтер или кофемашина, потребность в учёте возникает сама собой. А если есть потребность, нужно искать максимально эффективное решение. Своим решением я хотел бы поделиться с вами.
42?
Всего голосов 63: ↑54 и ↓9+45
Комментарии61

Удачная модель ветвления для Git

Время на прочтение10 мин
Количество просмотров993K
Перевод статьи Vincent Driessen: A successful Git branching model

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



В качестве инструмента управления версиями всего исходного кода она использует Git.

Читать дальше →
Всего голосов 180: ↑171 и ↓9+162
Комментарии105

Основы использования бранчинга для параллельной разработки

Время на прочтение9 мин
Количество просмотров36K
Вступление

Как справедливо заметил Fred Brooks, серебряной пули, способной поразить зверя разработки программного обеспечения, не существует. Пока возникают новые требования, идеи и находятся новые баги, программы живут и изменяются. Путь, который проходит код от версии к версии, может быть крайне сложен и извилист. К его созданию причастно много людей: разработчики, тестировщики, бизнес-аналитики, заказчики и т.п. Несмотря на то, что существует много разных видов разработки – аутсорсинг, продуктовая разработка, open-source и т.п., проблемы, стоящие перед командой, остаются примерно одинаковыми. Программное обеспечение – вещь сложная, потребитель хочет получить его как можно быстрее (и дешевле). Качество при этом должно быть приемлемым. Перед командой разработки стоит серьезная задача – наладить эффективное взаимодействие. Одним из самых главных средств коллаборации внутри команды разработчиков является сам код, который они пишут.

Читать дальше →
Всего голосов 37: ↑31 и ↓6+25
Комментарии72

Фильтр Калмана

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


В интернете, в том числе и на хабре, можно найти много информации про фильтр Калмана. Но тяжело найти легкоперевариваемый вывод самих формул. Без вывода вся эта наука воспринимается как некое шаманство, формулы выглядят как безликий набор символов, а главное, многие простые утверждения, лежащие на поверхности теории, оказываются за пределами понимания. Целью этой статьи будет рассказать об этом фильтре на как можно более доступном языке.
Фильтр Калмана — это мощнейший инструмент фильтрации данных. Основной его принцип состоит в том, что при фильтрации используется информация о физике самого явления. Скажем, если вы фильтруете данные со спидометра машины, то инерционность машины дает вам право воспринимать слишком быстрые скачки скорости как ошибку измерения. Фильтр Калмана интересен тем, что в каком-то смысле, это самый лучший фильтр. Подробнее обсудим ниже, что конкретно означают слова «самый лучший». В конце статьи я покажу, что во многих случаях формулы можно до такой степени упростить, что от них почти ничего и не останется.
Читать дальше →
Всего голосов 178: ↑173 и ↓5+168
Комментарии84

Снова о защите персональных данных или готовимся к проверке Роскомнадзора

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

Вступление



Всем доброго времени суток! В этой статье я хотел бы еще раз поднять тему защиты персональных данных (далее будем обзывать их — ПДн), а также тему защиты от регуляторов. Пик дебатов на тему защиты ПДн давно прошел. Приходились эти пики как правило на приближение очередного «самого последнего срока» ввода 152-ФЗ в полную силу. В итоге «самый последний срок» наступил, активные дебаты стихли, но закон «О персональных данных» живет, регуляторы устраивают проверки и наказывают нарушителей. Поэтому тема будет еще долго актуальна.

Сразу оговорюсь, что в этой статье в основном будет информация организационного характера, нежели техническая. «А зачем такая информация нужна нам?» — спросит читатель хабра. Объясняю: так уж получилось, что начальники как крупных, так и не очень организаций не любят выстраивать длинные логические цепочки и вникать в суть вопроса, который лежит далеко от их компетенции. Поэтому при возникновении необходимости обеспечения защиты персональных данных строится вполне логичная по их мнению взаимосвязь: «Защита персональных данных» -> «Защита информации» -> «Информационные технологии» -> «Взвалить вопрос защиты ПДн на IT-шников». И пофигу, что в этом вопросе львиную долю можно поручить юристам и кадровикам, но как говорится в бородатом анекдоте: «кому не нравится грузить люминь, пойдет грузить чугуний».

image
Типичный пример разглашения ПДн специальной категории (сведения об интимной жизни)

Читать дальше →
Всего голосов 65: ↑59 и ↓6+53
Комментарии39

CSS3-генераторы. Лучшее

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








Доброго времени суток! Сразу объяснюсь по поводу оформления поста: однажды, наткнувшись на статью о CSS-генераторах, меня не сильно порадовало безмерное количество информации и навигационных элементов в представленных генераторах, и еще больше — их пользовательский интерфейс! Возмутило то, что инструменты для работы со стилями — сами не выдержаны в рамках возможностей, которые они представляют… как так?!

Когда занимаешься творчеством, хочется иметь подручные средства и инструменты на освоение и работу с которыми тратишь минимум усилий и времени. В результате всего этого, пришла мысль: отобрать лучшие инструменты и организовать их для частого использования (а-ля навигационное меню, такой себе: Quick Launch).

Надеюсь, для многих ноу-хау станет хорошим помощником в процессе веб-разработки.
Читать дальше →
Всего голосов 114: ↑104 и ↓10+94
Комментарии26

Code Signing сертификаты или сертификаты разработчика. Виды, как выбрать

Время на прочтение5 мин
Количество просмотров80K
В прошлый раз мы рассматривали цифровые SSL сертификаты, в этот раз рассмотрим еще один вариант цифровых сертификатов.
Code Signing сертификаты — это сертификат, которым подписывается программное обеспечение или скрипты, который подтверждает автора программы и гарантирует, что код не был изменен, после того, как была наложена цифровая подпись. Также их еще называют сертификаты разработчика.

Итак сертификаты разработчика предоставляют нам несколько возможностей. Во-первых это механизм цифровой подписи, которая подтверждает, что программа, которой вы пользуетесь действительно выпущена той или иной компанией, то есть гарантирует подлинность источника. А во вторых гарантирует целостность содержимого, то есть, что с момента подписания программный продукт не был поврежден или изменен.
Виды сертификатов разработчиков и как выбрать правильный
Всего голосов 28: ↑26 и ↓2+24
Комментарии60

Как работать «в потоке»? Нужны всего 3 ресурса

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

Знакомо ли вам такое состояние, когда вы настолько увлечены идеей, что полностью погружаетесь в процесс ее реализации, забывая о времени и окружающем мире? А завершив, испытываете радость и даже счастье? Значит, у вас есть опыт потоковых состояний – особых ресурсных состояний сознания, когда все внимание сфокусировано на цели, и в результате замечательные идеи рождаются сами собой, и время концентрируется, вмещая гораздо больше, чем в обычном состоянии.
Тема эффективности потоковых состояний для работы и творчества уже несколько раз поднималась на Хабре, и в этой статье мы хотим обсудить практическую часть – что необходимо для того, чтобы вызывать это состояние «на заказ»?

Читать дальше →
Всего голосов 120: ↑110 и ↓10+100
Комментарии110

Top 5 раздражающих моментов в работе программиста

Время на прочтение4 мин
Количество просмотров194K
В процессе работы, будучи программистом, в разные периоды я не раз сталкивался с рядом проблем. Во многом из-за непонимания клиентами и руководителями работы программиста. Хочется собрать наиболее раздражающие моменты, которые делают работу невыносимой и портят все удовольствие, и объяснения начинающим менеджерам на доступном языке, как не быть в глазах разработчика обузой.

1. А сколько займет сделать этот раздел (дается ТЗ из одной строки)?

Как правило, отвлекают от работы вопросом, сбивают с потока. Просят назвать срок, когда неизвестна ни задача, ни требования, только одно предложение. И так настойчиво, что, чтобы отвалили, называешь прикидочный срок.

Менеджеру: поймите, что программист строит в голове модель будущей системы. По одному предложению нельзя смоделировать приложение. И только ваша вина, если вы не потрудились уточнить ТЗ (это ваша работа, кстати) у заказчика, а хотите сразу назвать ему срок (и цену). Потому что оценка с потолка невозможна — вроде как ответить на вопрос «сколько времени займет покрасить комнату неизвестной площади?».

2. Ты же ОБЕЩАЛ сделать за два дня, а прошла неделя! (моют мозг по сроку из пункта 1)

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

Менеджеру: ничто так не демотивирует, как обвинение в некомпетентности и лжи. Постарайтесь давать точное ТЗ и бить задачу на простые кусочки, в чем программист с удовольствием поможет (если хорошо попросить). Тогда можно будет более точно управлять сроками.
Читать дальше →
Всего голосов 195: ↑159 и ↓36+123
Комментарии203

Реализация алгоритма Евклида на Shakespeare

Время на прочтение4 мин
Количество просмотров6.6K
Как известно, сейчас существует довольно много эзотерических языков программирования, среди которых имеется небезызвестный Brainfuck.
В этой статье речь пойдёт о языке Shakespeare, который разработали Джон Аслауд и Карл Хассельстром. Целью создания этого языка является маскировка кода программы под пьесы Уильяма Шекспира. Поскольку программа Hello, world! уже разобрана в документации и имеет довольно объёмный вид, то мы попытаемся написать на нём довольно простой алгоритм Евклида для нахождения наибольшего общего делителя двух целых чисел.

Общая часть


Все слова данного языка делятся на три типа: ключевые слова, которые отвечают за выполнение каких-либо действий, переменные и комментарии.
При этом, всё, что не относится к первым двум группам, в этом языке программирования считается комментарием.

Возникает естественный вопрос, как отличить между собой эти слова. Но прежде разберём структуру программы.

Заглавие программы, которое выполняет роль подобно ключевому слову program в Паскале, и не несёт никакой смысловой нагрузки. Далее идёт перечень лиц, которые участвуют в программе. Всё, что мы здесь объявим, и будет далее нашими переменными. Единственным ограничением на имя переменной является то, что это обязательно должно быть имя персонажа из пьесы Шекспира.
Как и любая пьеса, эта программа делится на акты и сцены, которые занумерованы римскими цифрами. Акты и сцены играют роль меток для переходов, как условных, так и безусловных.

В этом языке роль кирпича играют существительные и прилагательные. При этом существительное имеет значение 1 или -1 в зависимости от того, имеет ли это существительное положительный или отрицательный смысл. В трансляторе этого языка содержатся словари, чтобы правильно определять смысл существительного. Каждое прилагательное, добавленное спереди к существительному, увеличивает его в 2 раза. С помощью этих знаний мы уже можем получить числа, которые являются степенью двойки, и противоположные им.
Для того, чтобы получить другие числа, используютя ключевые слова sum и difference. Кроме того, чтобы узнать значение переменной, которую мы хотим получить, мы можем использовать ключевое слово thyself. Например, число 6 можно получить, например, следующим способом:

You are brave charming hero. You are as good as the sum of cute pony and thyself
В этом способе число 6 представляется как 4 + 2. Слова hero и pony принимают значения 1, поскольку им придаётся положителньый смысл. Соответственно, brave charming hero представляется как 1 * 2 * 2 = 4. Второе предложение разбивается на сумму числа 2, чему соответствует cute pony, и значения переменной, на которое указывает ключевое слово thyself.
В переводе на любой язык программирования указанный фрагмент кода будет выглядеть примерно так:
X = 4;
X = 2 + X;


Для ввода и вывода в этом языке используются следующие фразы:

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

Статистические тесты в R. Часть 1: Бинарная классификация

Время на прочтение5 мин
Количество просмотров25K
Доброго времени суток. Хочу поделиться своими знаниями о работе со статистикой в R.
Многим из нас приходится сталкиваться с различными данными на работе и в повседневной жизни. Качественно и правильно их обработать и проанализировать не так сложно. В этой серии статей я покажу применения некоторых статистических тестов.

Заинтересовались? Добро пожаловать под кат.
Читать дальше →
Всего голосов 13: ↑13 и ↓0+13
Комментарии11

IEC60027-2: Давайте использовать стандарты, или 1024 B == 1 KiB && 1024 B != 1 KB && 1000 B == 1 kB

Время на прочтение5 мин
Количество просмотров130K
Доброго времени суток, уважаемые!

В последнее время, читая различные статьи в хабре, всё больше стал замечать, что многие авторы до сих пор ничего не знают о ISO/IEC стандартах бинарных префиксов (KiB=кибибайт, MiB=мебибайт и т.д.) и постоянно путают их с SI префиксами (kB=килобайт, MB=мегабайт). Поэтому я решил ещё раз заговорить об этом в надежде, что, прочитав статью, ещё пара человек начнёт пользоваться стандартами!

Читать дальше →
Всего голосов 293: ↑232 и ↓61+171
Комментарии380

Спецификатор времени компиляции noexcept в C++11

Время на прочтение5 мин
Количество просмотров70K
С новым стандартом С++ появилось множество интересных и полезных улучшений, одно из которых спецификатор времени компиляции noexcept, которой говорит компилятору о том, что функция не будет выбрасывать исключения. Если интересно, какие преимущества предоставляет этот спецификатор и не пугает код на С++ — добро пожаловать под кат.
Читать дальше →
Всего голосов 23: ↑23 и ↓0+23
Комментарии17

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность