Как стать автором
Поиск
Написать публикацию
Обновить
249.9

Linux *

Пишем под *nix

Сначала показывать
Порог рейтинга
Уровень сложности

От паспортного сканера к автономному распознающему устройству

Время на прочтение3 мин
Количество просмотров16K
Прошло около трех месяцев с момента создания нашего первого рабочего образца паспортного сканера. Получив хорошие результаты по качеству и скорости распознавания, мы, подняв на флаг практически Олимпийский девиз “Быстрее! Качественнее! Компактнее!”, приступили к созданию следующей модели ПАК. Если вам интересно, что у нас получилось в результате, добро пожаловать под кат.


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

Nix как менеджер зависимостей для C++

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

Nix loves C++


В последнее время много разговоров идет о том, что для C++ нужен свой пакетный менеджер подобный pip, npm, maven, cargo и т.д. Все конкуренты имеют простой и стандартизированный механизм подключения нестандартной библиотеки. В C++ же все действуют как умеют: кто-то прописывает в README список пакетов для Ubuntu, CentOS и других дистрибутивов, кто-то использует git submodule и скрипты для их сборки, кто-то использует CMake ExternalProject, кто-то копирует все исходники в один гигантский репозиторий, кто-то делает образ Docker или Vagrant.


Чтобы решить проблему был даже создан стартап — biicode, но он обанкротился и его будущее неизвестно. Взамен появился conan, дополняя зоопарк конкурентов — nuget, cget, hunter, cpm, qpm, cppget, pacm и даже gradle for c++.


Меня не устраивал ни один из перечисленных способов. Я было начал писать пакеты для Conan, но столкнулся с большим числом хаков, неразвитым API, отсутвием гайдлайнов и, как следствие, низкой вероятностью переиспользования чужих пакетов. И тут вспомнилось, что когда-то мне очень понравились идеи пакетного менеджера в NixOS. И подумал — а зачем плодить пакетный менеджер специально для C++, если те же задачи решает обычный пакетный менеджер? Нужно только чтобы он был достаточно гибким и простым в части описания пакета. И Nix идеально подошел на эту роль.

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

Что нового в Visual Studio 2015 для энтузиастов C#, Visual Basic и Linux

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


Всем доброго дня!

На прошлой неделе завершилась конференция Build 2016, на которой были представлены главные новости для разработчиков от компании Microsoft.

В их числе и выпуск Visual Studio 2015 Update 2, который уже можно скачать и установить себе на компьютер, а также превью следующей версии инструмента:


Разберемся, какие нововведения ожидают разработчиков с Visual Studio 2015 Update 2. Начнем с новостей для разработки на C# и Visual Basic.
Читать дальше →

Red Hat Enterprise Linux теперь бесплатен для разработчиков

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

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

Однако, парни из Red Hat решили в очередной раз напомнить миру, что «бесплатное» должно быть «бесплатным» без дополнительных условий и приписок мелким шрифтом в стиле «вы обязаны смотреть нашу рекламу каждое полнолуние». Поэтому теперь продукт «Red Hat Enterprise Linux» для разработчиков распространяется по системе «no cost»-подписки, о чем сообщается в пресс-релизе на официальном сайте компании.
Читать дальше →

Проверка проекта Samba с помощью PVS-Studio под Linux

Время на прочтение7 мин
Количество просмотров15K
Проверка Samba с помощью PVS-Studio под LinuxЕсли вы следили за новостями о последних разработках в области инструментов анализа C/C++ кода, то, должно быть, слышали про инструмент PVS-Studio. Я узнал о нем благодаря статьям, которые разработчики публикуют на своем сайте и в которых они рассказывают о проверках проектов с открытым кодом. К настоящему времени уже проверено внушительное число проектов, включая ядро Linux, Qt, Unreal и т.д., и каждый раз им удается находить интересные ошибки, подолгу живущие в коде, никем не обнаруженные. Опечатки, неаккуратное копирование, неопределенное поведение, бессмысленный код, синтаксические ошибки, которые чудесным образом пропускаются компилятором…

Как сказал Джон Кармак, "Все, что является допустимым с точки зрения синтаксиса и пропускается компилятором, в конце концов окажется в вашей кодовой базе".
Читать дальше →

Некоторые особенности разработки под Ubuntu Touch

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


Пришла весна. Коты думаю о кошках, мужчины о женщинах, а программист — куда бы ещё портировать имеющийся код. Я ещё прошлой осенью стал обладателем Meizu MX4 Ubuntu Edition, и поэтому выбор был давно очевиден. А тут нашлось и время, и силы.
Читать дальше →

В помощь DevOps: сборщик прошивок для сетевых устройств на Debian за 1008 часов

Время на прочтение10 мин
Количество просмотров5K
Сегодня мы расскажем об успешно реализованном проекте для крупного немецкого производителя телекоммуникационного оборудования (хабы, роутеры, сетевые серверы и пр.)



Задача


Embedded Debian не предоставляет готовой к использованию среды для сборки произвольных образов системы. Чтобы ее подготовить, требуется использовать стандартный дистрибутив Debian, обладать навыками системного администрирования, подобрать и настроить набор утилит, написав при этом ряд shell скриптов для автоматизации процедуры кросс-компиляции пакетов. Проделав всю ручную работу, вы получите консольный инструмент, пользоваться которым может исключительно технический персонал с определенным уровнем навыков работы с ОС Linux, а это не удобно, встает вопрос по организации многопользовательского доступа к этой среде и ограничению прав, а также постоянной поддержки среды в актуальном состоянии.

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

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

Делаем автономную фотобудку на raspberry pi

Время на прочтение8 мин
Количество просмотров24K
В век «онлайна», печатная фотография стала больше походить на диковинку, как это было раньше с фотографией цифровой. В последнее время, различного рода фотобудки, стали набирать популярность, как интересный способ развлечь гостей и получить памятный сувенир в виде фотографии. Я фотограф, который увлекается программированием, и при этом сочетании, было бы странно не попробовать сделать себе фотобудку.
В отличии от коммерческих моделей фотобудок, которые есть в продаже, мне хотелось сделать действительно компактную и автономную систему. Чтоб я параллельно основной работе, мог за пару минут ее установить хоть в поле и не таскать с собой лишние десятки килограмм веса. И у меня это получилось.
Под катом будет рассказ о железе, raspberry pi и программировании всего этого под linuх и конечно же мой любимый python. Забегая вперед, скажу, что мне хотелось именно качественных фотографий, поэтому съемка ведется не на веб камеру, а на DSLR, поэтому статья должна получиться еще больше и интересней.

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

Дистрибуция приложений. Часть 1: создание Formula для Homebrew

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

Вступление к серии


Передо мной недавно встала задача, как распространять одну консольную утилиту? Обычные мои инструменты вроде pip, npm и gem не подходили в силу языка самой утилиты — bash. Тогда стало понятно, что нужно распространять свое приложение в том числе и через системные пакетные менеджеры. Для Mac — в силу отсутствия встроенного — таких пакетных менеджеров несколько. И у каждого из них есть свои особенности и недостатки. И в первой части я хочу более подробно остановиться на Homebrew, и как создавать пакеты для него.

Ну а чтобы установить приложения на Linux, то нужно будет собирать пакеты таких форматов: .tar.gz, .deb и .rpm. О чем я расскажу во второй части.
Читать дальше →

Мой велосипед или о том как я сэкономил свои нервные клетки

Время на прочтение7 мин
Количество просмотров19K
Приветствую хабровчане!

Вот уже пол года как мой основной Desktop работает на Ubuntu, о плюсах и минусах Linux писать не буду, пост не об этом.
Так вот… я к сожалению не владею слепым методом набора текста, да и не было смысла обучаться так как в окнах меня вполне сносно спасала программа PuntoSwitcher которой пользовался около 5-ти лет, однако её аналог Xneur на Ubuntu мягко говоря работал «не очень» и вовсе не работал в Skype.

Некоторое время я мирился с этим, потом пробовал безуспешно написать небольшую программку на Java.

Требования к программе:

  1. Быстрый запуск
  2. Иконка в трее для выхода из приложения и отмены конвертации
  3. Конвертация по глобальной комбинации клавиш


— это тот функционал которым я и пользовался в PuntoSwitcher.

image

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

Тестирование Bash-приложений

Время на прочтение6 мин
Количество просмотров19K
Недавно передо мной встала задача протестировать приложение, написанное на Bash. Изначально я решил использовать unit-тесты на Python, однако, мне не захотелось добавлять лишние технологии в проект. И пришлось выбирать тестовый фреймворк, родным языком которого является многострадальный Bash.
Читать дальше →

Асинхронное параллельное исполнение в PHP

Время на прочтение14 мин
Количество просмотров63K
Много пик сломано в мире на тему того, можно ли и как создавать многопоточность в PHP. Чаще всего все сводится к тому, что так делать нельзя или дискуссия материализуется в какие-то ужасные костыли (ох, сколько я их уже повидал). Я хочу изложить свою точку зрения на этот вопрос. Легко догадаться, что если бы моя позиция была “так нельзя” или “это зло”, то я бы не писал эту статью. Вот только погодите, не спешите доставать тухлые яйца и вооружаться мелкими бытовыми предметами для рукопашной схватки. Я постараюсь дипломатично изложить тему и максимально объективно раскрыть ситуацию. Так что самые смелые из моих читателей могут прочитать молитву от ереси и открыть статью.


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

Снова про STL: контейнеры

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

Под термином библиотека стандартных шаблонов (STL, Standard Template Library) понимают набор интерфейсов и компонентов, первоначально разработанных Александром Степановым, Менг Ли и другими сотрудниками AT&T Bell Laboratories и Hewlett-Packard Research Laboratories в начале 90-х годов (хотя и позже ещё весьма многие приложили руку к тому, что стало на сегодня стандартным компонентом C++). Далее библиотека STL перешла в собственность компании SGI, а также была включена как компонент в набор библиотек Boost. И наконец библиотека STL вошла в стандарты C++ 1998 и 2003 годов (ISO/IEC 14882:1998 и ISO/IEC 14882:2003) и с тех пор считается одной из составных частей стандартной библиотек C++.

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

Ближайшие события

Опыт домашнего марсоходостроения

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

Привет Хабр! Я работаю RnD-художником в минском центре разработки Wargaming. А в свободное время даю волю своей инженерной фантазии. В этой статье я хочу поделиться своим опытом домашнего марсоходостроения.
Читать дальше →

Паспортный сканер своими руками

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


Привет, Хабр! В предыдущих статьях мы уже рассказывали вам про то, как нам удалось превратить ввод паспортных данных на мобильных устройствах из рутины в простую и быструю процедуру. Следующим закономерным шагом мы превратили наш Smart PassportReader SDK в серверную компоненту, облегчив тем самым крупным финансовым организациям работу с документами в бэк-офисах. Наконец, проявив изобретательскую смекалку и инженерный подход, нам удалось разработать программно-аппаратный комплекс (забегая вперед, представим его название — Smart PassportBox), позволяющий оптимизировать работу фронт-офисов и СКУД-решения. Поэтому, если вам интересно сколько директоров, программистов, паяльников, лобзиков и отверток требуется для создания полноценного ПАК, добро пожаловать под кат.
Читать дальше →

RISC'овый Debian под QEMU

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

Для встраиваемых систем на базе процессоров с архитектурами MIPS и ARM нередко используются специализированные генераторы дистрибутивов ОС GNU/Linux: buildroot, openwrt и прочие Yocto.
Но иногда интересно запустить на такой системе универсальную ОС Debian. Установить Debian на ЭВМ с процессором архитектуры x86/amd64 — дело несложное, а вот со встраиваемыми системами, поверьте, у нас не всё так однозначно...
В данной публикации я расскажу как можно при помощи debootstrap установить, а затем как при помощи QEMU запустить ОС Debian для ЭВМ с процессорами MIPS и ARM.
Читать дальше →

Снова про STL

Время на прочтение8 мин
Количество просмотров22K
Эта подборка коротких заметок относительно контейнеров C++ появилась как результат просьбы подготовить для начинающих коллег программистов сжатый обзор STL. Зачем это было нужно, когда по этому предмету есть оригинальная документация и много целых отдельных книг, из которых как минимум 5-6 превосходного качества существуют в переводах и на русский язык?
Но смысл, однако, есть и он вот в чём:

  • Все книги изданы в конце 90-х — начале 2000-х. Более поздние стандарты языка C++ (вплоть до C++11) вводят новые синтаксические конструкции, которые в применении с STL дают кросс-эффект … с очень интересной интерференцией. Это позволяет часто использовать конструкции STL с гораздо большей лёгкостью.
  • Книги обычно описывают предмет слишком детализировано (это хорошо для студентов, но избыточно для программистов, пусть даже уровня джуниоров, которым, после других языков, например, нужно только базовое ознакомление). Оригинальная документация, наоборот, напичкана формальными синтаксическими определениями (это замечательно в качестве справочника под рукой, но избыточно для знакомства). Настоящие заметки, полностью избегая формальных определений, строятся вокруг примеров использования, в большей части понятных программисту даже без каких-либо дополнительных пояснений.
  • Контингент, для которого первоначально готовились тексты, помимо прочего в значительной степени ориентирован на численные математические методы, обработку данных в потоке, на что не рассчитаны существующие публикации. Мне тоже ближе такой уклон, и такой акцент будет заметен в примерах, на которых построено описание.

Из-за требований обязательной однотипности объектов в контейнерах, их можно было бы с уточнением называть регулярными контейнерами, это много проясняет (не делается такое уточнение только потому, что и так всем ясно о чём речь). Речь, конечно, идёт о контейнерах STL, но и традиционный массив C/C++ — это такой же регулярный контейнер, и они будут фигурировать в тексте и примерах. (Структуры, а ещё более обще, классы с полями данных тоже являются контейнерами, но их никак не назовёшь регулярными.)

Хотелось бы надеяться, что эти заметки окажутся полезными кому-то из осваивающих STL, упростят этот процесс понимания. А предложения и замечания, когда они будут по существу, от тех читателей, кто уже профи в C++, позволят улучшить эти тексты на будущее, когда они смогут пригодиться ещё кому-нибудь.
Читать дальше →

Патчим gnupg или пара RSA-32768 за 106 минут

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

На самом деле патчим gnupg и libgcrypt…

Когда-то давным давно, чтобы использовать 8192 и 16384 RSA ключи я правил размер в keygen.c и размер SECMEM буффера по соседству. Дела давно минувших дней, теперь SECMEM вынесена в config.h и именуется SECMEM_BUFFER_SIZE.

В итоге после скачивания верии 2.0.29 под свежий debian 8.3, за место убитой 12й убунты апдейтом на 14ую, я быстренько подкрутил размер ключика и размер буфера и радостно сгенерировал на 5200U 16кбит ключ за 18 (или 19) минут, что раньше занимало 45-50 минут на P6200.

Но вот 32кбит дали мне пачку ошибок. Свободное время есть — разбираемся.
Читать дальше →

Embedded World 2016: куда катится embedded-мир?

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

Давненько мы ничего не писали. А тем временем...

В тридевятом царстве, в тридесятом государстве, в баварской вотчине, в средневековом городе Нюрнберге проходит выставка под названием Embedded World. Цель выставки — собрать в одном месте производителей, разработчиков, студентов и других заинтересованных граждан. Проходит она три дня — с 23 по 25 февраля.




Сайт выставки: http://www.embedded-world.de

Около 900 участников, примерно 25 тысяч посетителей. Двух дней еле-еле хватает, чтобы понять, что к чему. Поэтому выставка длится три дня :)

Судьба забрасывает меня на это мероприятие уже не в первый раз: мы с коллегами по НТЦ Метротек посещали выставку в 2013, 2014 и 2015 годах. Именно здесь мы впервые увидели Cyclone V SoC (System On Chip c ARM и FPGA на борту), который впоследствии лёг в основу новых девайсов производства НТЦ Метротек (это — Беркут-ЕТ, EthOnd, BlueSoM, ETL-N). Именно здесь мы нашли производителей корпусов EMKO и наладили с ними сотрудничество, теперь все стоечные приборы (свитч Metrotek X10-24, Беркут-МХ) выглядят единообразно. Здесь мы узнаём о новинках и трендах.

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

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

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


Исследователи Google обнаружили критическую уязвимость в библиотеке glibc (GNU C Library). В функции getaddrinfo(), которая отвечает за разбор доменных имен, происходит переполнение буфера — ошибка позволяет злоумышленникам осуществлять удаленное выполнение кода.

Эксплуатация уязвимости, получившей обозначение CVE-2015-7547, возможна в случаях, когда уязвимые устройства или приложения отправляют запросы контролируемым хакерами доменам и серверам, а также в случае проведения атаки типа man-in-the-middle.
Читать дальше →

Вклад авторов