Pull to refresh
0
0
NetGhost @NetGhost

User

Send message

Типобезопасные идентификаторы и фантомные типы

Reading time4 min
Views16K
Довольно часто в программе, работающей с базой данных, в качестве идентификаторов сущностей используются значения целочисленного типа (например, long). Но людям свойственно ошибаться, и программист может по ошибке использовать идентификатор одного типа сущности для адресации другой. Такая проблема может долго оставаться незамеченной, если идентификаторы сущностей пересекаются, а такое бывает довольно часто. К счастью, в языках, позволяющих манипулировать типами, коим является C++, есть довольно простое решение этой проблемы.
Читать дальше →
Total votes 47: ↑46 and ↓1+45
Comments20

LDAP. Настройка отказоустойчивого LDAP сервера

Reading time12 min
Views209K
The Internet Engineering Task Force (IETF)В этой статье я расскажу вам о сервере службы каталогов 389 Directory Server (он же Fedora Directory Server, он же Redhat Directory Server). Так уж повелось, что для доступа к серверу каталогов используется протокол LDAP. Если вы не работали с LDAP, я очень рекомендую ознакомиться со статьями в Wikipedia (тут про cлужбу каталогов, а тут про протокол LDAP).

Итак, сначала кратко о том, зачем же вообще использовать сервер службы каталогов (далее — LDAP-сервер). LDAP-сервера, в основном, применяются для централизованного хранения учетных записей, и всего, что с ними связано. LDAP-сервер представляет собой иерархическую БД, а значит в нем можно хранить любые данные.

Казалось бы, вполне логичен вопрос: а почему именно LDAP? Что мешает хранить учетные записи в MySQL или PostgreSQL? Ответ очевиден — ничего =)

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

  • Это стандарт. Многие приложения поддерживают аутентификацию/авторизацию через LDAP;
  • Данные хранятся как иерархическое дерево, что позволяет делать эффективные операции поиска, выделив нужную часть дерева;
  • Число операций чтения в тысячи раз превышают число операций записи, в связи с этим появляется огромное число плюсов: нет необходимости применения транзакций и rollback'ов, репликация работает без проблем, которые присущи RDBMS;
  • Приложение должно видеть одну и ту же информацию на всех серверах службы каталогов, если сервер не хранит информацию, нужную клиентскому приложению, он может сам запросить ее у другого сервера или перенаправить само приложение к другому серверу;
  • Из-за описанных выше свойств службы каталогов, этот сервис отлично масштабируется горизонтально.


Выбор сервера службы каталогов пал на 389 Directory Server. История этого LDAP сервера тесно связана с компанией Netscape (если интересно, почитать историю можно тут).

Читать дальше →
Total votes 68: ↑60 and ↓8+52
Comments44

Qt: шаблон для корректной работы с потоками

Reading time13 min
Views55K
Всем хабрапривет!
Как-то понадобилось мне в Qt 5.1.1 для WinXP в VS2009 реализовать многопоточное приложение с интенсивным обменом сигналами. Взял я Шлее, вычитал у него, что нужно унаследовать класс от QThread и — вуаля, велком в многопоточность! На всякий случай заглянул в документацию Qt — там никто не возражал против наследования от QThread своего класса. Ну что же — порядок, сделано! Запускаю — вроде как работает, но как-то не так… Начинаю в режиме отладки отслеживать — а там творится черт знает что! То сигналы не выходят, то выходят, но как-то криво и из другого потока. Одним словом, полный бардак! Пришлось основательно по-google-ить и разобраться в теме (мне помогли статьи тут, здесь и там). В итоге я сделал шаблон класса на С++ (вернее, целую иерархию оных), что мне позволило в итоге писать (относительно) небольшой код класса, живущего в другом потоке, который работает правильно и стабильно.
Upd: в комментариях мне подсказали более качественный подход — я его описал в новой статье.
Под катом - подробности!
Total votes 20: ↑16 and ↓4+12
Comments17

Правильное использование QThread

Reading time5 min
Views178K
В недавнем проекте с Qt пришлось разбираться с классом QThread. В результате вышел на «правильную» технологию работы c QThread, которую буду использовать в других проектах.
Читать дальше →
Total votes 35: ↑30 and ↓5+25
Comments7

Qt + MVP + QThread. Строим свой велосипед

Reading time15 min
Views28K
image
Всем добрый день!

Недавно передо мной встала довольно интересная задача, сделать интерфейс пользователя для общения с одной железкой. Связь с ней осуществлялась посредством COM-порта. Так как работа предполагалась с системой реального времени (эта самая железка) в операционной системе Windows, для того, чтобы GUI не тормозил, было решено работу с COM-портом вынести в отдельный поток. Так как требования к самой системе постоянно менялись, для минимизации и ускорения исправлений также было решено писать используя паттерн проектирования MVP. В качестве среды разработки был выбран Qt. Просто потому, что мне нравится данная среда и ее возможности. Так и получилась связка Qt+MVP+Qthread. Кому интересно, что из этого всего вышло и по каким граблям я ходил, прошу под кат.
Читать дальше →
Total votes 18: ↑14 and ↓4+10
Comments47

Параллельное программирование с CUDA. Часть 2: Аппаратное обеспечение GPU и шаблоны параллельной коммуникации

Reading time14 min
Views32K

Содержание


Часть 1: Введение.
Часть 2: Аппаратное обеспечение GPU и шаблоны параллельной коммуникации.
Часть 3: Фундаментальные алгоритмы GPU: свертка (reduce), сканирование (scan) и гистограмма (histogram).
Часть 4: Фундаментальные алгоритмы GPU: уплотнение (compact), сегментированное сканирование (segmented scan), сортировка. Практическое применение некоторых алгоритмов.
Часть 5: Оптимизация GPU программ.
Часть 6: Примеры параллелизации последовательных алгоритмов.
Часть 7: Дополнительные темы параллельного программирования, динамический параллелизм.
Читать дальше →
Total votes 26: ↑23 and ↓3+20
Comments13

Десять возможностей C++11, которые должен использовать каждый C++ разработчик

Reading time12 min
Views532K
В данной статье рассматривается ряд возможностей С++11, которые все разработчики должны знать и использовать. Существует много новых дополнений к языку и стандартной библиотеке, эта статья лишь поверхностно охватывает часть из них. Однако, я полагаю, что некоторые из этих новых функций должны стать обыденными для всех разработчиков С++. Подобных статей наверное существует много, в этой я предприму попытку составить список возможностей, которые должны войти в повседневное использование.

Сегодня в программе:
  • auto
  • nullptr
  • range-based циклы
  • override и final
  • строго-типизированный enum
  • интеллектуальные указатели
  • лямбды
  • non-member begin() и end()
  • static_assert и классы свойств
  • семантика перемещения
Читать дальше →
Total votes 133: ↑125 and ↓8+117
Comments115

VPN в каждый дом

Reading time1 min
Views189K


Всем привет! Желание сделать VPN сервер максимально простым в установке и удобным в использовании назревало уже давно. За основу я взял L2TP/IPsec, эта технология нативно поддерживается всеми устройствами и в отличии от PPTP не вызывает проблем при подключении через сотовых операторов.

tl;dr
Для установки нам потребуется машинка с Ubuntu 14.04 на борту и «белым» IP-адресом, любой VPS подойдет. Достаточно ввести эту волшебную строчку:
 curl -sS https://raw.githubusercontent.com/sockeye44/instavpn/master/instavpn.sh | sudo bash 

и через несколько минут у вас будет рабочий VPN с управлением через браузер (httр://ip-address:8080/) или консоль (instavpn -h).
Читать дальше →
Total votes 88: ↑77 and ↓11+66
Comments245

Организация многозадачности в ядре ОС

Reading time22 min
Views77K
Волею судеб мне довелось разбираться с организацией многозадачности, точнее псевдо-многозадачности, поскольку задачи делят время на одном ядре процессора. Я уже несколько раз встречала на хабре статьи по данной теме, и мне показалось, что данная тема сообществу интересна, поэтому я позволю себе внести свою скромную лепту в освещение данного вопроса.
Сначала я попытаюсь рассказать о типах многозадачности (кооперативной и вытесняющей). Затем перейду к принципам планирования для вытесняющей многозадачности. Рассказ рассчитан скорее на начинающего читателя, который хочет разобраться, как работает многозадачность на уровне ядра ОС. Но поскольку все будет сопровождаться примерами, которые можно скомпилировать, запустить, и с которыми при желании можно поиграться, то, возможно, статья заинтересует и тех, кто уже знаком с теорией, но никогда не пробовал планировщик “на вкус”. Кому лень читать, может сразу перейти к изучению кода, поскольку код примеров будет взят из нашего проекта.
Ну, и многопоточные котики для привлечения внимания.

Читать дальше →
Total votes 92: ↑92 and ↓0+92
Comments19

Многозадачность в ядре Linux: прерывания и tasklet’ы

Reading time6 min
Views75K
Котейка и младшие братьяВ предыдущей своей статье я затронула тему многопоточности. В ней речь шла о базовых понятиях: о типах многозадачности, планировщике, стратегиях планирования, машине состояний потока и прочем.

На этот раз я хочу подойти к вопросу планирования с другой стороны. А именно, теперь я постараюсь рассказать про планирование не потоков, а их “младших братьев”. Так как статья получилась довольно объемной, в последний момент я решила разбить ее на несколько частей:
  1. Многозадачность в ядре Linux: прерывания и tasklet’ы
  2. Многозадачность в ядре Linux: workqueue
  3. Protothread и кооперативная многозадачность

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

Рассказывать я постараюсь подробно, описывая основное API и иногда углубляясь в особенности реализации, особо заостряя внимание на задаче планирования.
Читать дальше →
Total votes 94: ↑93 and ↓1+92
Comments31

Многозадачность в ядре Linux: workqueue

Reading time7 min
Views35K
Продолжаем тему многопоточности в ядре Linux. В прошлый раз я рассказывала про прерывания, их обработку и tasklet’ы, и так как изначально предполагалось, что это будет одна статья, в своем рассказе о workqueue я буду ссылаться на tasklet’ы, считая, что читатель уже с ними знаком.
Как и в прошлый раз, я постараюсь сделать мой рассказ максимально подробным и детальным.

Статьи цикла:
  1. Многозадачность в ядре Linux: прерывания и tasklet’ы
  2. Многозадачность в ядре Linux: workqueue
  3. Protothread и кооперативная многозадачность


Читать дальше →
Total votes 68: ↑68 and ↓0+68
Comments4

Встраивание в ядро Linux: перехват функций

Reading time9 min
Views17K
Перехват функций ядра является базовым методом, позволяющим переопределять/дополнять различные его механизмы. Исходя из того, что ядро Linux почти полностью написано на языке C, за исключением небольших архитектурно-зависимых частей, можно утверждать, что для осуществления встраивания в большинство из компонентов ядра достаточно иметь возможность перехвата соответствующих функций.

Данная статья является продолжением анонсированного ранее цикла, посвящённого частным вопросам реализации наложенных средств защиты и, в частности, встраиванию в программные системы.

Читать дальше →
Total votes 31: ↑26 and ↓5+21
Comments37

Пять подводных камней при использовании shared_ptr

Reading time15 min
Views135K
Класс shared_ptr — это удобный инструмент, который может решить множество проблем разработчика. Однако для того, чтобы не совершать ошибок, необходимо отлично знать его устройство. Надеюсь, моя статья будет полезна тем, кто только начинает работать с этим инструментом.

Я расскажу о следующем:
  • что такое перекрестные ссылки;
  • чем опасны безымянные shared_ptr;
  • какие опасности подстерегают при использовании shared_ptr в многопоточной среде;
  • о чем важно помнить, создавая свою собственную освобождающую функцию для shared_ptr;
  • какие существуют особенности использования шаблона enable_shared_from_this.

Читать дальше →
Total votes 57: ↑56 and ↓1+55
Comments53

Пишем свой драйвер под Linux

Reading time8 min
Views67K
image

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

То, что мы сегодня создадим, корректнее будет назвать LKM (Linux Kernel Module или загрузочный модуль ядра). Стоит сказать, что драйвер – это одна из разновидностей LKM.

Писать модуль мы будем под ядра линейки 2.6. LKM для 2.6 отличается от 2.4. Я не буду останавливаться на различиях, ибо это не входит в рамки поста.

Мы создадим символьное устройство /dev/test, которое будет обрабатываться нашим модулем. Хочу сразу оговориться, что размещать символьное устройство не обязательно в каталоге /dev, просто это является частью «древнего магического ритуала».

Читать дальше →
Total votes 251: ↑240 and ↓11+229
Comments78

Maximum Transmission Unit (MTU). Мифы и рифы

Reading time7 min
Views309K
Maximum transmission unit (MTU) это максимальный объём данных, который может быть передан протоколом за одну итерацию. К примеру, Ethernet MTU равняется 1500, что означает, что максимальный объём данных, переносимый Ethernet фреймом не может превышать 1500 байт (без учёта Ethernet заголовка и FCS — Рис. 1).

image
Рис. 1

Давайте пробежимся с MTU по уровням OSI:
Читать дальше →
Total votes 50: ↑47 and ↓3+44
Comments22

Lagoa Multiphysics 1.0 ― новая версия физического движка (видео)

Reading time1 min
Views1.1K
Тиаго Коста (Thiago Costa), один из разработчиков физического движка Lagoa Multiphysics, сегодня опубликовал в сети новое демо-видео, в котором продемонстрировал возможности Lagoa Multiphysics 1.0. На данном этапе разработки движок может быть использован для создания визуальных эффектов мелкозернистых структур, несжимаемых жидкостей, тканей и т.п. Однако, все эти технические описания не столь интересны, вы посмотрите, что он вытворяет!

Total votes 73: ↑72 and ↓1+71
Comments34

Загрузчик фотографий как vkontakte на Flex

Reading time9 min
Views11K
Неделю назад мои знания action script ограничивались тем, как добавить событие onclick на баннер перед загрузкой в баннерную сеть. В качестве загрузчика файлов я использовал swfupload, и очень не хотел влезать внутрь swf-ника и разбираться в коде. Мне не нравится flash, я ни разу не дизайнер и теряюсь, когда вижу все эти слои, кадры, инструменты для рисования звездочек и motion guides.

Потом я наткнулся на эту эту потрясающе-красивую штуку, и узнал, что есть flex. И что flex — это круто, потому что даже такой супер-начинающий как я, с нуля за несколько дней смог написать загрузчик фотографий с предпросмотром, ресайзом на клиенте и upload-баром, примерно такой, какой используется на сайте vkontakte.ru.

Есть три причины, из-за которых я решил использовать flash для загрузки фотографий. Это FileReference, FileReferenceList и flash.display.Bitmap. В 10-й версии флеш плеера у FileReference появилась функция load(), с помощью которой можно просматривать выбранные фотографии в ролике локально без загрузки на сервер. FileReferenceList позволяет в файловом диалоге с помощью shift-а выбрать сразу несколько фотографий. Bitmap делает ресайз картинок перед отправкой на сервер. Все это нельзя сделать на чистом javascript-е.

Итак, пишем загрузчик фотографий как vkontakte на flex (пошаговое пособие для совсем начинающих).
Читать дальше →
Total votes 92: ↑63 and ↓29+34
Comments49

Составление технического задания (ТЗ) на сайт с использованием ГОСТ

Reading time2 min
Views4.5K
Интересовался я одно время технической документацией и вот такие вот интересные стандарты нашёл на просторах родного Интернета. Стандарты непростые, а ГОСТовые. Они, конечно, не специально для изготовления документации к сайтам созданы, но их вполне хватает для создания достаточно серьёзного технического задания ( далее по тексту — ТЗ ) для сайта средней сложности. Думаю, что при умелом подходе можно их использовать при составлении любой документации, касающейся Интернет технологий.
Читать дальше →
Total votes 15: ↑13 and ↓2+11
Comments12

Midnight Commander: Скины

Reading time2 min
Views8.8K

Схемы по умолчанию


Одна из новых особенностей появившихся в mc это удобная система смены скинов. Теперь чтобы сменить цветовую схему достаточно при запуске mc запустить его с ключем -S <Имя скина> или прописать в секции [Midnight-Commander] параметр skin=<Имя скина>

Примеры скинов

Тема: FAR (Black)
Тема: FAR (Black)

Читать дальше →
Total votes 14: ↑8 and ↓6+2
Comments13

Windows 7 бесплатно для студентов, аспирантов и преподавателей

Reading time2 min
Views33K
Начиная с сегодняшнего дня в рамках подписки MSDN Academic Alliance стала доступной для скачивания и установки Windows 7.

Update. В системе ELMS операционная система теперь также доступна. Если вы ее не видите, попросите администратора поставить галочку напротив образа.

image

Это означает, что теперь любой студент, аспирант, преподаватель факультета, на котором оформлена подписка, может бесплатно получить свою копию Windows 7.

В настоящий момент доступна английская версия. 14 августа в подписке должна появиться Windows Server 2008 R2. 21 августа должны появиться русские версии продуктов.

upd 25.08 C 21 августа началась загрузка третьей волны установочных образов, включая русский. Финальная дата окончания 3 волны — 1 октября (см. также здесь). Мы сообщим отдельно, как только образы станут доступны в рамках MSDNAA.

upd 26.08. Чтобы следить за появлением новых продуктов в подписках можно также подписаться на RSS-ленты: msdn.microsoft.com/en-us/subscriptions/subscription-downloads.rss (En) и msdn.microsoft.com/ru-ru/subscriptions/subscription-downloads.rss (Ru).

Также Windows 7 появилась в подписках MSDN и TechNet.
Читать дальше →
Total votes 122: ↑87 and ↓35+52
Comments245
1
23 ...

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Registered
Activity