Pull to refresh
Николай Слободской @wholemanread⁠-⁠only

User

Send message

Потоко-безопасная ленивая инициализация в C++

Reading time9 min
Views14K
Реймонд Чен написал занятную серию блогпостов о беззамочной синхронизации. Мне бы хотелось опубликовать эти заметки и для хаброчитателей. Данный пост — введение в серию, скомпилированное из трёх старых постов Чена.
  1. Ленивая инициализация встроенными средствами C++
  2. Беззамочная синхронизация
  3. Беззамочная потоко-безопасная ленивая инициализация


Ленивая инициализация встроенными средствами C++


Инициализация статических локальных переменных в C++ непотокобезопасна, причём намеренно!

Спецификацией установлено, что статические локальные переменные (в отличие от глобальных) инициализируются при первом выполнении блока кода, в котором они объявлены.

Попытайтесь сами найти рейс-кондишн во фрагменте кода, который вычисляет результат некоторой функции «лениво» — при первом обращении, и затем сохраняет этот результат для последующих обращений.

int ComputeSomething()
{
  static int cachedResult = ComputeSomethingSlowly();
  return cachedResult;
}

(Примерно такой код советуют в популярном C++ FAQ, чтобы не зависеть от выбранного компилятором порядка инициализации глобальных статических переменных.)
Читать дальше →

OpenStreetMap пользуются в ООН и отмечают решающую роль этой карты

Reading time1 min
Views1.1K
United Nations Foundation, Управление ООН по координации гуманитарных вопросов (United Nations Office for the Coordination of Humanitarian Affairs, OCHA) и другие признали решающую роль, которую играет OpenStreetMap в усилиях по оказанию помощи на Гаити и других местах.

Цитата из UN Foundation Disaster Relief 2.0 Fast Facts:

OpenStreetMap (OSM) — это сообщество примерно 150 000 картографов, нацеленное на создание свободной и открытой карты мира. OSM мобилизовало более 640 добровольцев со всех уголков мира, которые сканировали и исправляли старые атласы и карты и отрисовывали гаитянские дороги, мосты и здания в геопространственную вики OpenStreetMap, используя инструменты, которые требуют только простой веб-браузер и время. В результате этого процесса данное сообщество превратило белое пятно на карте в одну из наиболее точно картографированных стран в мире, создав карту гораздо лучшую, чем любые имеющиеся в ООН. К середине марта, OpenStreetMap стали де-факто источником картографических данных по Гаити в большинстве учреждений ООН и EC Humanitarian Unit.
Читать дальше →

Безопасность систем мгновенного обмена сообщениями на базе протокола XMPP: настоящее и будущее

Reading time5 min
Views7.7K
Все чаще многие используют решения на основе протокола XMPP (Jabber) для мгновенного обмена сообщениями, в той или иной степени отказываясь от ICQ. Данный подход, безусловно, является правильным ввиду открытости Jabber – каждый может выбрать какой сервер ему использовать или же вовсе организовать работу своего собственного. Также протокол XMPP прекрасно себя зарекомендовал в корпоративной среде и многие компании уже несколько лет успешно используют Jabber наравне с электронной почтой для обмена информацией.
Принято считать, что коммуникационные решения на базе протокола Jabber являются наименее уязвимыми с точки зрения информационной безопасности. В данной статье я постараюсь проанализировать так ли это на самом деле и какие реальные перспективы имеет протокол XMPP в этом направлении. Вопрос будет рассмотрен в контексте использования протокола для обмена сообщениями как в личных целях на публичных и частных сервисах, так и в корпоративных условиях.

Jabber для личного общения

Нежелательные сообщения

Для личного общения Jabber массово стал использоваться сравнительно недавно, что обуславливает фактическое отсутствие коммерческого спама (или spim’а в терминологии XMPP Standards Foundation). Я специально акцентировал внимание на отсутствии именно коммерческого спама, поскольку в настоящий момент на крупных jabber-серверах имеют место единичные рассылки, которые организовываются при помощи скриптов на Python «школьниками » just for fun и не направлены на продвижение каких-либо товаров и услуг. В ближайшее время возможно появление коммерческого спама в Jabber, однако массового развития как в ICQ он получить не должен. О предпосылках этого хорошо написано в этом посте.
Читать дальше →

Популярные вопросы на собеседовании по C++ и ответы на них

Reading time9 min
Views352K
Здравствуйте!

Те, кто занимается программированием рано или поздно сталкивается с необходимостью прохождения технического собеседования у потенциального работодателя.

О том, что спрашивают на собеседовании у C++ программистов, а также об ответах на эти вопросы и пойдет речь в данном посте.
Читать дальше →

В помощь создания документации

Reading time1 min
Views2.1K
image Сначала эту заметку я хотел добавить только к себе, т.к. у меня перманентная проблема с документацией в проекте. Но решил поделиться со всеми.
Мой проект большой, включает много подсистем. Требования постоянно меняются, а стиль работы ближе к agile.
Как следствие, документация быстро теряет актуальность и я постоянно ищу методы для поддержания этой самой актуальности.
Читать дальше →

Кое-что о Wi-Fi

Reading time7 min
Views306K
Недавно побывал на конференции на тему “Построение беспроводных сетей”. Не смотря на то, что довольно длительный период работаю администратором, мне не каждый день приходится разворачивать беспроводные сети. Спешу с вами поделиться некоторыми нюансами. Всех заинтересованных приглашаю под кат.

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

OpenStreetMap News №4

Reading time2 min
Views2.7K
image
Читать дальше →

Игра с почтой для офисных работников

Reading time1 min
Views1.5K
Каждое утро вы открываете почтовый ящик и видите несколько сотен новых сообщений. Начало рабочего дня омрачено неприятной обязанностью разобрать эту гору корреспонденции. А что если превратить процесс в игру?

Использование игровой механики в бизнес-процессах становится уже традиционным: карма, рейтинги, программы лояльности, баллы для накопительных скидок и другие игры используются в самых различных сферах. Создатели Email Game решили применить этот подход к такому скучному и рутинному занятию, как сортировка электронной почты. Как заявляется, добавление таймера и соревновательного элемента повышает эффективность сортировки почты на 30% и делает этот процесс на 100% более интересным. Игра совместима с интерфейсом Gmail, а платная корпоративная версия поддерживает Outlook/Exchange.
Читать дальше →

Встречай наследника: Первый взгляд на Nokia E6 и Symbian Anna

Reading time2 min
Views18K
Сегодня самыми первыми в России мы потестировали одну из новинок Nokia, представленных 12 апреля. Nokia E6 это клавиатурный моноблок, наследник двух очень популярных моделей – E72 и E71.



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

Поехали!

Reading time3 min
Views29K
Добрый день, уважаемые хабровчане!

Компания Nokia Россия рада присоединиться к главной IT-тусовке в Рунете. Мы очень надеемся, что наше общение на Хабре будет позитивным и продуктивным. В официальном хабра-блоге Nokia, который запускается этим постом, мы постараемся уделить наибольшее внимание самым важным событиям и новостям, связанным с новыми продуктами и разработкой под платформы Nokia.

Пожалуй, начнем с Nokia E6 – нового смартфона под управлением ОС Symbian^3.

Моноблоки с Qwerty-клавиатурой и горизонтальным дисплеем – успешное направление, даже несмотря на сенсорный уклон современных флагманских устройств. Посмотрите на E71 и E72: они невероятно популярны среди любителей почты, мессенджеров и sms, обладают притягательным дизайном и отлично дополняют изысканный деловой стиль. Такой смартфон удобен в использовании и подчеркивает статус владельца.

image

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

Автоматизация OpenOffice: Окончание

Reading time6 min
Views5.2K
Продолжение первой части статьи.

OpenOffice Win C++

2. Повторное использование DLL в своей программе


Возможности:
  • открытие XLS файла,
  • открытие файлов OpenOffice
  • возможность открытия в скрытом режиме
  • чтение данных из электронной таблицы
  • полный спектр манипуляции с данными: вставка текста, числа, форматирование, объединение ячеек, установка границ, установка ширина столбца
  • выгрузка xls таблицы на диск
  • возмоность работы под WINE, при условий установки OpenOffice под Wine
  • использование формул
  • генерация версионно зависимого RDB файла налету (при необходимости)

На работе мы используем C++ Builder для написания внутренних программ, так что я делаю еще одну обертку над DLL для удобной работы с API.
Читать дальше →

Автоматизация OpenOffice: Начало

Reading time14 min
Views22K
По работе мне необходимо было разработать механизм загрузки и выгрузки данных из Excel используя свободные механизмы работающие под разными ОС.
Т.к. необходимо было, чтобы сервис работал под Linux, то механизм взаимодействия через OLE не подходил.
Для реализации был выбран OpenOffice с прямым доступом к API через C++.

Open Office api на Linux

Документация оказалась весьма скудная, а примеров работы не через OLE почти не было. Так что я решил объединить все мои исследования в одной статье на хабре.

Примерный план статьи:
1. Начало работы с API OpenOffice через C++
  1.1. Генерация заголовочных файлов
  1.2. Генерация файла типов RDB
  1.3. Настройка Visual Studiо 2008
  1.4. Собираем динамическую DLL
2. Повторное использование DLL в своей программе
  2.1. Пример небольшой программы по выгрузке данных

В принципе, если возможностей DLL достаточно, то повторять действия п. 1 не обязательно.

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

Знакомство с АОП

Reading time10 min
Views131K

Парадигмы программирования


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

У каждой парадигмы есть свои особенности, однако, главным фактором, различающим их, является понятие основной единицы программы. Вот самые популярные из них:
  • инструкция (императивное программирование, FORTRAN/C/PHP),
  • функция (функциональное программирование, Haskell/Lisp/F#/Scala),
  • прототип (прототипное программирование, JavaScript),
  • объект (объектно-ориентированное программирование, С++/Java),
  • факт (логическое программирование, PROLOG).

Стоит заметить, что в общем случае язык программирования однозначно не определяет используемую парадигму: на том же PHP можно писать как императивные, так и объектно-ориентированные программы.

В этой статье я хочу рассказать о сравнительно молодой, но крайне, на мой взгляд, полезной парадигме программирования – аспектно-ориентированном программировании.

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

Что нужно знать про арифметику с плавающей запятой

Reading time14 min
Views1M


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

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

Один компьютер на двоих (и более) или multiseat на базе Ubuntu 10.04 LTS

Reading time22 min
Views49K
В данной статье рассматривается реализация multiseat на базе Ubuntu 10.04 LTS с аппаратным ускорением. Пример, рассмотренный в этой статье, уже введен в эксплуатацию и работает около полугода в обычном Минском офисе. Описываются проблемы реализации и внедрения готовой системы в работу с точки зрения обычного студента-электроприводчика, который подрабатывает на полставки системным администратором.

Вступление



Вот время работы системным администратором в небольшом офисе при обновлении парка компьютеров появилась небольшая проблема. Современные компьютеры дают уровень производительности, много превосходящий необходимый для офисных компьютеров. Причем реалии рынка таковы, что различия в производительности мало сказываются на цене. И вроде бы дешевые компьютеры на базе Atom по ценовому признаку практически не отличаются от более производительных компьютеров на базе обычных процессоров Amd и Intel (материнская плата с процессором Atom стоит около 100-150 у.е. на май 2010 года, Минск, и та же цена на октябрь 2010 в том же Минске).

Та же ситуация и с жесткими дисками: для офисной работы нет необходимости в объеме диска более 40-80 Гб. Но на рынке такие жесткие диски уже практически не представлены. На момент написания статьи в продаже были жесткие диски емкостью 160 Гб (38$), 250 Гб (39$), 320 Гб (40$), 500 Гб (41$), дальше различия по ценам заметны сильнее. Цена за гигабайт жестких дисков малого объема довольно высока. Та же ситуация и со всеми остальными комплектующими.

Возникает закономерный вопрос, как рационально все это использовать? Давайте подойдем логически — чтобы удешевить систему можно либо купить комплектующие похуже (не сильно удешевляет), либо отказаться от некоторых комплектующих. По сути, в рабочем месте обязательными являются устройства ввода (клавиатура, мышь, планшет и т.д.) и устройства отображения информации (монитор, проектор и т.д.). Остальная часть системы пользователей особо не касается, и от нее можно избавляться. Безусловно, от всего избавиться не получится. Давайте заглянем под крышку системного блока. Тут мы обязательно видим материнскую плату, видеокарту (может быть уже на материнской плате), процессор (тоже может быть на материнской плате) и память. А вот остальные комплектующие уже не так важны. Оптический привод мало востребован, и поэтому его, скорее всего, не будет.
С жестким диском тоже интересная ситуация. Его может и не быть, тогда у нас будет так называемая бездисковая станция. Тут вся информация загружается по сети с сервера (реализация PXE+NFS и немного бубна). Но хочется чего-то большего.
Тогда и возникла идея подключить к одному компьютеру две клавиатуры, две мыши и два монитора и заставить их работать независимо. В зарубежных источниках такие системы называются multiseat.
Но можно на этом и не ограничиваться, а делать бездисковую multiseat-станцию. Этот вариант отлично подойдет для пары multiseat-станций с сервером. В данной статье не рассматривается.

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

Оптимизация для Intel Atom на пальцах

Reading time3 min
Views33K

Начну, пожалуй, с очевидного (слева от этого текста). Изображение, приведенное здесь, довольно известно. Оно показывает, что сотрудники Интел обычно носят на пальцах вместо колец процессоры Atom и рисовые зерна.
Оно демонстрирует размер процессора Intel Atom в сравнении с рисовым зерном. А я продемонстрирую вам буквально «на пальцах» простые и, надеюсь, полезные для программистов на С\С++ советы по оптимизации софта для Intel Atom.
Читать дальше →

Как увеличить точность внутренних часов и начать лучше понимать время

Reading time4 min
Views5.2K


Если вы регулярно пере- или недооцениваете количество времени, которое потребуется на выполнение задания, возможно пришло время перезагрузить внутренние часы. Ниже вы узнаете, как это сделать и достичь большего при меньших нервах.

Точные внутренние часы являются краеугольным камнем тайм-менеджмента. Если оценка единиц времени и того, что за эти единицы можно успеть, вам дается с трудом, то вы всегда будете расстраиваться по поводу дел, которые не удается вовремя закончить.

Психологи Джейн Бурка и Ленора Юэн предлагают в своей книге Procrastination: Why You Do It, What to Do About It NOW ряд конкретных упражнений по совершенствованию управления собственным временем.
Читать дальше →

BigBlueButton: открытое решение организации конференций

Reading time4 min
Views80K

Почти уверен что перед каждым ИТ отделом ставилась задача организовать видеоконференцию, или просто конференцию, например с филиалом. Решений задачи много — от дорогих аппаратных до бесплатных софтовых. Хочу обратить внимание хабрсообщества на одно из бесплатных решений этой задачи — BigBlueButton. На хабре уже была небольшая заметка о нем, я попытаюсь рассказать немного подробнее об этом решении, а так же о опыте его внедрения у нас в компании.
Читать дальше →

Представлен макет нового пользовательского интерфейса LibreOffice

Reading time2 min
Views6.2K
imageНекто Пауло Хосе нарисовал несколько шаблонов пользовательского интерфейса LibreOffice. Он сказал, что главным вдохновлением его был интерфейс Blender'а.

Сделано в: Inkscape/GIMP
Тема GTK2: Atolm
Нативные иконки: Faenza-Dark
Смотреть

OpenLinkMap — путеводитель по ссылкам из OpenStreetMap

Reading time1 min
Views925


Ссылки… В жизни нас окружает бесконечное число ссылок… У многих объектов, что мы видим на улице, есть веб-сайты. Как о них узнать в удобном виде?

Представляю вашему вниманию OpenLinkMap, очередной проект на основе свободной и бесплатной карты мира OpenStreetMap.

Зайдите на сайт olm.openstreetmap.de, приблизьте нужный участок карты, кликните на появившиеся красные кружочки — и перед вами появятся ссылки на веб-сайт объекта или на статью о нём в Википедии. Применять сервис можно по-разному — можно пройтись по сайтам близлежащих кафешек, а можно изучить Париж с помощью Википедии.
Читать дальше →

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity