Pull to refresh
7
0
Влад @vladon

Пользователь

Send message

Оптимизируем шаг за шагом с компилятором Intel C++

Reading time8 min
Views26K


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

Итак, весь тернистый путь компиляции и оптимизации нашего приложения можно разбить на 7 шагов. Пошагали!
Читать дальше →
Total votes 29: ↑25 and ↓4+21
Comments3

Step-by-step: подготовка инсталляционных пакетов Mac OS. Часть вторая. Создание пакета в среде Package Maker

Reading time3 min
Views6.7K
Первая часть статьи здесь.

В качестве примера продемонстрируем создание установочного пакета Mozilla Firefox 31.5.3 esr в среде Pakage Maker. Firefox достаточно популярен среди наших заказчиков и при этом является достаточно показательным.

Для начала скачаем последнюю версию пакета с официального сайта (на момент написания статьи была доступна Mozilla Firefox 31.5.3 esr). Запускаем DMG файл на MAC-машине. Firefox.app переносим в Applications:

image
(под катом много фото)
Читать дальше →
Total votes 15: ↑14 and ↓1+13
Comments0

Step-by-step: подготовка инсталляционных пакетов Mac OS. Часть первая

Reading time3 min
Views8.7K
Аналитики Gartner говорят, что доля Mac платформы в корпоративном секторе растет год от года. Поэтому вопрос централизованного управления Mac пакетами в корпоративных средах становится все более актуальным. Каковы преимущества использования централизованного управления ПО? Среди них:

  1. возможность устанавливать приложения на большое количество клиентов с едиными настройками;
  2. минимизация количества проблем и инцидентов с ПО за счет применения единых стандартов подготовки установочных пакетов;
  3. установка инсталляционных пакетов не требует действий от пользователя и каких-либо дополнительных привилегий.

Тема управления ПО достаточна обширна. Выше приведены лишь наиболее яркие и бытовые примеры. Поэтому в нашей компании подготовка инсталляционных пакетов Mac OS предоставляется в качестве отдельного сервиса.

План первой части статьи:

  1. Форматы, типы пакетов. В данном разделе рассмотрим разновидности пакетов и их структуру.
  2. Краткий обзор наиболее популярных инструментов для подготовки инсталляционных пакетов.

(под катом много фото)
Читать дальше →
Total votes 12: ↑11 and ↓1+10
Comments10

Microsoft анонсировала кроссплатформенный редактор для Windows, OS X и Linux

Reading time1 min
Views58K
Сегодня Microsoft анонсировала запуск Visual Studio Code. Это кроссплатформенный редактор для работы с современным стеком .NET. Visual Studio Code будет работать в OS X, Linux и Windows. Приложение уже доступно для скачивания.

Visual Studio Code может похвастаться всеми возможностями, что присутствуют в современных редакторах, включая автодополнение, сниппеты и поддержку систем контроля версий. Редактор поддерживает несколько языков и технологий, среди них: JavaScript, TypeScript, Node.js, C# и ASP.NET 5.



Microsoft, впервые в своей истории, представила кроссплатформенный редактор. Полная версия Visual Studio по-прежнему доступна только для Windows, но этот анонс, как и предшествующие действия компании, показывают, что Microsoft нацелена на поддержку других платформ.
Total votes 98: ↑87 and ↓11+76
Comments96

Реализуем безопасный VPN-протокол

Reading time12 min
Views47K
Снова тема VPN, конфиденциальной передачи данных, безопасности и криптографии. Сейчас, в эру пост-Сноудена, стало модно клепать безопасные, уважающие приватность, невзламываемые, защищённые от спецслужб и цензуры программы. Однако эта статья – не очередной маркетинговый пиар, а, скорее, демонстрация того, как применяются криптографические примитивы и на что стоит обращать внимание при разработке подобного программного обеспечения.



Результатом этой работы предполагается создание работающего клиент-сервера, пригодного для review разработчиками (то есть немного кода на высокоуровневом языке), достаточно производительного, чтобы использоваться в промышленных условиях, имеющего высокий порог безопасности: GoVPN.
Читать дальше →
Total votes 47: ↑46 and ↓1+45
Comments56

Вычислите длину окружности

Reading time6 min
Views90K
«Пожалуйста, напишите на C++ функцию, которая получает диаметр круга как float и возвращает длину окружности как float».

Звучит как задание на первой неделе курса по C++. Но это только на первый взгляд. Сложности возникают уже на первых этапах решения задачи. Предлагаю рассмотреть несколько подходов.

Студент: Как вам такой вариант?

#include <math.h>
float CalcCircumference1(float d)
{
    return d * M_PI;
}

Преподаватель: Да, этот код может нормально откомпилироваться. А может и нет.
Читать дальше →
Total votes 155: ↑139 and ↓16+123
Comments141

delete, new[] в C++ и городские легенды об их сочетании

Reading time5 min
Views73K
Если в коде на C++ был создан массив объектов с помощью «new[]», удалять этот массив нужно с помощью «delete[]» и ни в коем случае не с помощью «delete» (без скобок). Разумный вопрос: а не то что?

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

В соответствии со Стандартом C++, в этой ситуации поведение не определено. Все предположения – не более чем популярные городские легенды. Разберем подробно, почему.
Читать дальше →
Total votes 69: ↑63 and ↓6+57
Comments30

Открой Open Source 2ГИС

Reading time3 min
Views43K
Open Source 2ГИС
2ГИС выпускает справочники и карты городов с 1999 года. За это время мы прошли большой технологический путь — от одного ПК-приложения с данными для Новосибирска до API карт и справочника, десктопных приложений на Windows, Ubuntu и OS X, мобильных приложений на Android, iOS, Windows Phone и Blackberry с данными по 270 городам мира.

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

Этими инструментами с удовольствием делимся на Гитхабе, а для удобства сделали ещё и Open Source раздел на 2ГИС.Технологиях. Чтобы вы разобрались, что есть что, мы расскажем о наших флагманских инструментах с открытым кодом.
Читать дальше →
Total votes 101: ↑97 and ↓4+93
Comments10

Шифрование ГОСТ 28147-89 на х86- и GPU-процессорах

Reading time6 min
Views30K
В статье представляются результаты тестирования оптимизированных алгоритмов шифрования ГОСТ, полученные в сентябре и марте 2014 г. компанией “Код Безопасности”, на новых серверных процессорах Intel, а также на графических процессорах различных производителей.

Ускорение шифрования ГОСТ 28147–89


С развитием ИТ-технологий резко возросли объемы данных, передаваемых по глобальной сети Интернет, находящихся в сетевых хранилищах и обрабатываемых в «облаках». Часть этих данных конфиденциальна, поэтому необходимо обеспечить их защиту от несанкционированного доступа. Для защиты конфиденциальных данных традиционно используется шифрование, а при шифровании больших объемов используют алгоритмы симметричного шифрования, такие как широко известный блочный алгоритм – AES. Для соответствия российскому законодательству при шифровании таких сведений, как персональные данные, необходимо использовать отечественный алгоритм симметричного блочного шифрования ГОСТ 28147–89.
Читать дальше →
Total votes 28: ↑25 and ↓3+22
Comments32

Лекции Техносферы. 1 семестр. Алгоритмы интеллектуальной обработки больших объемов данных

Reading time3 min
Views48K
Продолжаем публиковать материалы наших образовательных проектов. В этот раз предлагаем ознакомиться с лекциями Техносферы по курсу «Алгоритмы интеллектуальной обработки больших объемов данных». Цель курса — изучение студентами как классических, так и современных подходов к решению задач Data Mining, основанных на алгоритмах машинного обучения. Преподаватели курса: Николай Анохин (@anokhinn), Владимир Гулин (@vgulin) и Павел Нестеров (@mephistopheies).



Объемы данных, ежедневно генерируемые сервисами крупной интернет-компании, поистине огромны. Цель динамично развивающейся в последние годы дисциплины Data Mining состоит в разработке подходов, позволяющих эффективно обрабатывать такие данные для извлечения полезной для бизнеса информации. Эта информация может быть использована при создании рекомендательных и поисковых систем, оптимизации рекламных сервисов или при принятии ключевых бизнес-решений.
Читать дальше →
Total votes 47: ↑46 and ↓1+45
Comments15

Делаем скриншоты правильно: практические советы

Reading time8 min
Views188K
Устройство для снимка экрана на первых компьютерах (Command-Shift-3)
Устройство для снимка экрана на первых компьютерах (Command-Shift-3)

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

Ведь кажется, что скриншот — это “секунда работы, Alt+PrintScreen и Ctrl+V!”. Некоторые клиенты удивляются, когда слышат, что скриншот в мануале может стоить и $2 и даже $5.

В этой статье я расскажу, как правильно делать скриншоты, почему это не просто “два клика” и какие подводные камни встречаются на пути неопытного скриншотера. Рассматривайте ее как чеклист или список практических советов для тех, кто документирует ПО. Надеюсь, это поможет вам избежать разочарований и порадовать юзеров красочными понятными картинками.
Читать дальше →
Total votes 81: ↑69 and ↓12+57
Comments76

Гомоморфное шифрование

Reading time3 min
Views49K

Что это такое?


Полностью гомоморфное шифрование (Fully Homomorphic Encryption) очень долго было самым ярким открытием в молодой и бурно развивающейся области Computer Science — криптографии. Вкратце, такой тип шифрования позволяет делать произвольные вычисления на зашифрованных данных без их расшифровки. Например, гугл может осуществлять поиск по запросу не зная, что это за запрос, можно фильтровать спам, не читая писем, подсчитывать голоса, не вскрывая конверты с голосами, делать DNA тесты, не читая DNA и многое, многое другое.
image
То есть, человек/машина/сервер, производящий вычисления, делает механические операции с шифрами, исполняя свой алгоритм (поиск в базе данных, анализ на спам, и т.д.), но при этом не имеет никакого понятия о зашифрованной внутри информации. Только пользователь зашифровавший свои данные может расшифровать результат вычисления.

Здорово, правда? И это не из области фантастики — это то, что уже можно «теоретически» воплотить в жизнь.

Читать дальше →
Total votes 64: ↑58 and ↓6+52
Comments70

Как перестать беспокоиться и начать жить без Flash

Reading time5 min
Views163K
В этой статье — небольшая мотивационная часть и рабочий сценарий, как полноценно жить в сети без Flash-плагина

Сценарий будет состоять из трёх рецептов:


  • Рецепт для сайтов, замечающих Flash через feature detection.
  • Рецепт для сайтов, которые обращают внимание на User agent.
  • Рецепт для сайтов, которые просто всегда дают Flash.
  • + Запасной вариант на случай, если Flash понадобится.

Советы будут снабжаться примерами для Safari и Firefox.
Если вы полностью довольны Flash, не беспокоитесь и не планируете от него отказываться — это практическое руководство вам будет не интересно
Читать дальше →
Total votes 49: ↑33 and ↓16+17
Comments173

N+4 полезных книг

Reading time5 min
Views81K


Привет! В посте блиц-обзор книг, которые будут полезны IT-специалистам, бизнесменам и тем, кто просто любит читать интересные технические вещи. Рядом с каждой – пояснения, чем оно может быть нужно. Этот обзор, в отличие от других ежегодных, более технически-прикладной.

Начнём со «Справочника по инженерной психологии» Вудсона и Коновера.

«Справочник по инженерной психологии» — Вудсон, Коновер


Книга о том, какие бывают кнопки и рычаги, как на них нажимают люди. И как проектировать так, чтобы люди работали с системой эффективно. Радует тем, что рассматривает пользователя как базовую систему ввода-вывода, замеряя его среднюю скорость передачи информации (около 20 бит в секунду на кнопочные интерфейсы), скорости ввода и вывода.
Читать дальше →
Total votes 58: ↑55 and ↓3+52
Comments8

Результаты опроса популярности PHP фреймворков от Sitepoint

Reading time1 min
Views68K
Месяц назад на Sitepoint был опубликирован опрос популярности PHP фреймворков. За это время всего проголосовало 7800 людей, и вот его результаты:

На работе

image

В персональных проектах
image

Больше различной статистики на самом сайте

Из интересного еще замечу, что в России самым популярным остается Yii2, в Украине же победил PHPixie. Также PHPixie стал самым популярным фреймворком в возрастной групе до 18 лет.
Total votes 35: ↑31 and ↓4+27
Comments146

Как могла бы выглядеть поддержка JSON в современном С++

Reading time5 min
Views62K
Хорошо в плане поддержки JSON живётся программистам на Javascript — по какому-то невероятному стечению обстоятельств там JSON входит в спецификацию самого языка: есть JSON — есть объект. Удобно. Неплохо дело обстоит и в языках, где JSON не входит в сам язык, но поддерживается стандартной библиотекой (Python, Ruby): импортируешь модуль — и готово.

Жизнь программистов на С++ никогда не была особо простой — поддержки JSON у нас нет ни на уровне языка, ни в стандартной библиотеке. И не будет, возможно, никогда. «Тоже мне проблему нашел!» — скажут мне опытные коллеги — «Её там и не должно быть, С++ поставляется без „батареек“. Для решения этой задачи мы...» и вот здесь они разделятся на два лагеря:

1. «Мы используем большой фреймворк (boost, Qt, POCO, другой), который применяется во всех наших проектах и умеет 150 000 разных вещей, в том числе и JSON.»
2. «Мы придерживаемся подхода в котором для каждой задачи применяется своя легковесная библиотека. В частности, для JSON мы уже 150 000 лет назад выбрали отличную библиотеку %JSON_LIB%, которая прекрасно работает.»

Да, всё так и есть. Вот только…

Чем плох подход с использованием фреймворков
Во-первых, тянуть в проект огромный фреймворк ради одного JSON — как-то уныло. Ну ладно, допустим фреймворк у вас был и так. Но тогда придётся писать работу с JSON в терминах фреймворка, а это, как правило, тихий ужас. Посмотрите, например, на документацию по JSON в Qt — куча собственных типов вроде QJsonArray, QJsonDocument, QJsonObject, QJsonValue и т.д. и их придётся использовать. О том, чтобы потом перенести код в другой проект (где этого фреймворка нет) можно сразу забыть. Ну или вот Boost: парсер JSON находится очень логично в модуле Boost.PropertyTree. Ага, так бы я и догадался. Т.е. нам предлагают плясать не от формата JSON, а от структуры данных «дерево», которая умеет себя читать в том числе и из JSON.

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


Чем плох подход с использованием библиотек
Плох он вот этой частью: "...150 000 лет назад выбрали отличную библиотеку...". Скорее всего речь идёт о чём-то, что начинало писаться чуть-ли не во времена DOSа и, без сомнения, работает, но при этом, пытаясь быть совместимым со всеми платформами и стандартами языка совершенно отстаёт от прогресса. Да, всё компилируется и работает, даже тесты проходит. Но библиотека совершенно не знакома с такими вещами, как ключевое слово auto, range-based циклы, строковые литералы, raw-строки, конструкторы перемещения, списки инициализации и прочие классные вещи, делающие код одновременно более эффективным и более легко читаемым. А ведь у библиотеки, созданной годы назад, есть обязательства по обратной совместимости, а значит просто так взять и добавить это всё она не может.


Давайте немного помечтаем.

А что, если бы JSON вошел в стандартную библиотеку нового стандарта С++? Что, если бы он был написан в терминах С++11\14 и без требований обратной совместимости со старыми стандартами языка? Что, если бы синтаксис этого модуля попытались бы сделать максимально приближенным к родному для JSON использованию «а-ля Javascript», но в том же время сохранить дух С++ (эффективность, минимальное потребление памяти, совместимость с STL)? Что, если бы его можно было включить в проект одним инклюдом и не беспокоиться о его сборке и линковке? Как бы это всё выглядело и работало?

И у нас есть ответ на этот вопрос! Давайте посмотрим на JSON-библиотеку для С++ написанную в соответствии со всеми этими принципами, ну и вообще написанной людьми для людей, а не чужими для хищников, как это обычно бывает.
Читать дальше →
Total votes 67: ↑62 and ↓5+57
Comments51

Как я спас несколько жизней оптимизацией и немного о работе в Zeptolab

Reading time30 min
Views38K
Привет!

23derevo перед выступлением на Mobius попросил меня рассказать немного о процессе клиентской разработки в Zeptolab.



Начну с того, что мы пишем на C++ и на своём фреймворке, от любого клиентского устройства нам нужен только контекст OpenGL. Дальше мы с нуля строим свой интерфейс, свои контролы и так далее. Соответственно, чтобы взять девелопера в команду, в теории, ему достаточно знать плюсы. На практике это немного не так.

Читать дальше →
Total votes 56: ↑50 and ↓6+44
Comments62

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

Reading time10 min
Views979K
Перевод статьи Vincent Driessen: A successful Git branching model

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



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

Читать дальше →
Total votes 180: ↑171 and ↓9+162
Comments105

Как отобразить количество оповещений в названии вкладки браузера

Reading time3 min
Views32K


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

Существует пара наиболее распространенных способов оповещения пользователя. С одной стороны, социальные сети Facebook, Twitter и LinkedIn указывают определенное число, которое соответствует количеству обновлений. С другой стороны, Trello отображает небольшой красный кружок поверх favicon.

Trello Facebook and Twitter notifications
Оповещения Trello, Facebook и Twitter

В этом уроке мы воссоздадим подобные оповещения. Посмотрите демо (англ.), чтобы понять, чем мы будем заниматься.

Посмотреть на GitHub
Демо (рус.)
Читать дальше →
Total votes 53: ↑40 and ↓13+27
Comments17

Ваш wi-fi расскажет мне, где вы живёте, где работаете и где путешествуете

Reading time3 min
Views146K

Москва вайфайная

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

Пробы WiFi


Чтобы соединиться с уже известными сетями, которые не сообщают о своём присутствии, все ваши мобильные устройства отправляют пробные пакеты, чтобы найти известные им сети. Эти пакеты можно перехватить, когда телефон включается, или когда он отсоединяется от сети. Для этого используются обычные инструменты — airodump / tcpdump. Пример:

# airodump-ng -w wifi-dump wlan0
# tcpdump -n -l -e -r wifi-dump.cap |
    grep 'Probe Request ([^)]'


Вывод содержит время, MAC-адрес устройства и имя сети. Пример:

16:32:26.628209 BSSID:ff:ff:ff:ff:ff:ff DA:ff:ff:ff:ff:ff:ff SA:50:ea:d6:aa:bb:cc
    Probe Request (SUBWAY) [1.0 2.0 5.5 11.0 Mbit]


То бишь, устройство 50:ea:d6:aa:bb:cc проверяло, есть ли сеть SUBWAY в пределах доступности.

Ну и что тут плохого?


Ну испускают они эти пакеты с именами сетей. Подумаешь.
Читать дальше →
Total votes 64: ↑61 and ↓3+58
Comments51

Information

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

Specialization

Backend Developer