Pull to refresh
48
0.6
Филипп @bak

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

Send message

Vim

Reading time3 min
Views18K
Всё начиналось в меру невинно. На первом курсе ты экспериментировал один или два раза, но Nano и Pico были проще, они были ближе к тому, чем ты уже пользовался в средней школе на машинах с Windows и Mac. Но время текло, твой багаж знаний пополнялся тем, что вам давали в вузе, и ты начал что-то замечать: все действительно великие программисты, люди, которым под силу было уместить в 4 строчки, то, для чего тебе требовалось 10 страниц кода, те, у которых богатое функциональностью решение учебного проекта было готово через день, в то время как ты неделями мучался лишь с базой, никто из них не пользовался Nano или Pico.

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

«Как ты это делаешь?» — недоверчиво спросил ты.

Твою жизнь изменил лаконичный ответ, состоящий из одного слога: «Vim.»

Вначале ты был раздражен и куда менее производителен. История браузера являла полный индекс документации Vim, твои Nano и Pico-друзья считали тебя сумасшедшим, Emacs-товарищи умоляли одуматься, ты заплатил деньги за ламинированный экземпляр пямятки Vim. Даже спустя недели тренировок, ты всё ещё по привычке иногда тянулся к мыши, но затем одергивал руку, понимая, что придется искать в сети нужную комбинацию для выполнения рутинной операции, о которой раньше тебе никогда не приходилось задумываться.
Читать дальше →

CCV: современная библиотека компьютерного зрения

Reading time1 min
Views15K
Спустя два года разработки состоялся релиз библиотеки ccv 0.1, которая использует ряд современных алгоритмов компьютерного зрения.

Библиотека ccv написана на C и позиционируется как компактная, лёгкая альтернатива OpenCV, поэтому из неё старательно изъяты все несущественные функции. Таким образом, ccv предназначена не для экспериментов с разными алгоритмами, а для практического использования в конкретных приложениях.
Читать дальше →

Юнит-тестирование в Qt

Reading time6 min
Views85K

gollum подметил что в тексте картинки есть ошибка

Салют, хабр! Как дела?

Хотел немного подучится чему-то. Искал на хабре в хабе «Qt Software» хоть какой-то пост про юнит-тестирование в Qt. Не нашел. Тут я расскажу базовые вещи про юнит-тестирование на Qt (не ожидайте могучего шаманства). На самом деле, юнит-тестить в Qt довольно просто. Что бы узнать как это делать, приглашаю читать дальше.
Читать дальше →

Цитаты о разработке программного обеспечения

Reading time3 min
Views14K
Несколько цитат о дизайне и разработке программ. Думаю, каждый найдет что-нибудь себе по вкусу. В дополнение к этому топику.

Простота — дух эффективности. // A. Freeman
Читать дальше →

Рандомизированные деревья поиска

Reading time8 min
Views58K

Не знаю, как вы, уважаемый читатель, а я всегда поражался контрасту между изяществом базовой идеи, заложенной в концепцию двоичных деревьев поиска, и сложностью реализации сбалансированных двоичных деревьев поиска (красно-черные деревья, АВЛ-деревья, декартовы деревья). Недавно, перелистывая в очередной раз Седжвика [1], нашел описание рандомизированных деревьев поиска (нашлась и оригинальная работа [2]) — настолько простое, что занимает оно всего треть страницы (вставка узлов, еще страница — удаление узлов). Кроме того, при ближайшем рассмотрении обнаружился дополнительный бонус в виде очень красивой реализации операции удаления узлов из дерева поиска. Далее вы найдете описание (с цветными картинками) рандомизированных деревьев поиска, реализация на С++, а также результаты небольшого авторского исследования сбалансированности описываемых деревьев.
Читать дальше →

Учимся писать модуль ядра (Netfilter) или Прозрачный прокси для HTTPS

Reading time19 min
Views34K
Эта статья нацелена на читателей, которые начинают или только хотят начать заниматься программированием модулей ядра Linux и сетевых приложений. А также может помочь разобраться с прозрачным проксированием HTTPS трафика.

Небольшое оглавление, чтобы Вы могли оценить, стоит ли читать дальше:
  1. Как работает прокси сервер. Постановка задачи.
  2. Клиент – серверное приложение с использованием неблокирующих сокетов.
  3. Написание модуля ядра с использованием библиотеки Netfilter.
  4. Взаимодействие с модулем ядра из пользовательского пространства (Netlink)

P.S. Для тех, кому только хочется посмотреть на прозрачный прокси-сервер для HTTP и HTTPS, достаточно настроить прозрачный прокси-сервер для HTTP, например, Squid с transparent портом 3128, и скачать архив с исходниками Shifter. Скомпилировать (make) и, после удачной компиляции, выполнить ./Start с правами root. При необходимости можно поправить настройки в shifter.h до компиляции.
Читать дальше →

Построение минимальных выпуклых оболочек

Reading time7 min
Views143K

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

Рисование сеточных графиков трехмерных функций и изолиний к ним

Reading time5 min
Views27K

Статья представляет собой нечто вроде “практического руководства” для построения весьма интересных трехмерных графиков функций вида z=f(x,y), с примером реализации на C#.
Читать дальше →

Практика работы с сигналами

Reading time6 min
Views113K
Хочу запечатлеть небольшой опыт работы с сигналами в Linux. Ниже будут представлены примеры использования наиболее значимых конструкций в этой области. Постараюсь разложить все по отдельным полочкам, чтобы всегда было легко глянуть и вспомнить, что и как использовать.
Читать дальше →

Менеджер паролей с web доступом

Reading time2 min
Views51K
В нашей компании используются десятки серверов на которых крутятся сотни сервисов. Их настраивают и администрируют разные люди, которые могут заболеть, перейти на другой проект или уволиться. Уже не один раз возникала ситуация, когда вдруг оказывалось, что никто не знает пароля от той или иной базы данных, web сервера или иного ресурса требующего авторизации. В данной ситуации есть только один выход — единый сервер хранения паролей.

Выбор софта был осложнён тем, что требовалось решение с возможностью установки на локальный сервер и именно под Linux. Наконец после долгого поиска мною был установлен и опробован TeamPass — Collaborative Password Manager. Данный продукт полностью удовлетворил мои потребности в централизованном хранения паролей. Я не буду описывать установку. Она довольно простая и достаточно подробно описана тут. Моей целью было рассказать про решение которое я долго искал. Авось кому-нибудь тоже пригодится.
Читать дальше →

Пользовательские литералы в C++11

Reading time5 min
Views42K
Более полугода прошло с момента принятия стандарта C++11. В сети можно найти много материалов посвященных новому стандарту, однако большинство из них касаются самых простых возможностей, самых сладких. Я говорю о лямбда-функциях, системе автоматического выведения типов, новых спецификаторах, умных указателях и т.д. Да, это действительно интересные вещи и, можно смело сказать, они одни из самых полезных и часто используемых. Но на них свет клином не сошелся, и новенький C++11 предлагает нам не только их.

Ниже я хочу рассказать о пользовательских литералах — весьма полезном средстве, хоть и не в повседневных целях.
Читать дальше →

Smart pointers для начинающих

Reading time6 min
Views207K
Эта небольшая статья в первую очередь предназначена для начинающих C++ программистов, которые либо слышали об умных указателях, но боялись их применять, либо они устали следить за new-delete.
Читать дальше →

Пишем драйвер для самодельного USB устройства

Reading time13 min
Views178K
Целью этой статьи является пошаговая демонстрация процесса разработки всего набора программного обеспечения необходимого для организации связи самодельного устройства с компьютером посредством USB.

На данный момент, большинство радиолюбителей реализуют такой тип подключения используя чипы переходники USB в RS232 таким образом организуя связь со своим устройством посредством драйвера виртуального COM порта поставляемого с чипом переходником. Минусы такого подхода думаю понятны. Это как минимум лишний чип на плате и ограничения накладываемые этим чипом и его драйвером.
Мне же хочется осветить весь процесс организации такого взаимодействия так как оно и должно быть сделано, и как делается во всех серьезных устройствах.
В конце концов, сейчас 21-й век, модуль USB есть почти во всех микроконтроллерах. Именно о том, как наиболее быстро воспользоваться этим модулем и будет эта статья.
Читать дальше →

Ещё более современный C++

Reading time6 min
Views49K
“C++11 feels like a new language.” – Bjarne Stroustrup

Не так давно Герб Саттер открыл на своём сайте новую страничку — Elements of Modern C++ Style, где он описывает преимущества нового стандарта и то, как они повлияют на код.
А под катом прячется вольный перевод содержимого этой странички.

Детектор попадания мячика с использованием OpenCV

Reading time3 min
Views21K


Недавно мне довелось поучаствовать в одном интересном проекте. Моя сестра учится на дизайнера в БВШД, и им дали задание сделать проект на тему Street Interactive. Идея была выбрана довольно простая. На экране демонстрируется анимация движущегося медведя, всем желающим предлагается попасть в него из рогатки импровизированным снежком. Результат продемонстрирован на видео, кому интересна техническая реализация, добро пожаловать под кат.
Читать дальше →

Виртуальные функции в C

Reading time4 min
Views29K
Недавно мне задали вопрос: как бы я реализовал механизм виртуальных функций на языке C?

Поначалу я понятия не имел, как это можно сделать: ведь C не является языком объектно-ориентированного программирования, и здесь нет такого понятия, как наследование. Но поскольку у меня уже было немного опыта с C, и я знал, как работают виртуальные функции, я подумал, что должен быть способ сымитировать поведение виртуальных функций, используя структуры (struct).

Краткое пояснение для тех, кто не знает, что такое виртуальные функции:
Виртуальная функция — это функция, которая может быть переопределена классом-наследником, для того чтобы тот имел свою, отличающуюся, реализацию. В языке C++ используется такой механизм, как таблица виртуальных функций
(кратко vtable) для того, чтобы поддерживать связывание на этапе выполнения программы. Виртуальная таблица — статический массив, который хранит для каждой виртуальной функции указатель на ближайшую в иерархии наследования реализацию этой функции. Ближайшая в иерархии реализация определяется во время выполнения посредством извлечения адреса функции из таблицы методов объекта.


Давайте теперь посмотрим на простой пример использования виртуальных функций в C++
Читать дальше →

Уроки Python от компании Google

Reading time1 min
Views120K
Отличный способ освоить Python — учебный класс Python в Google Code University. Уроки для этого класса написал Ник Парланте из Стэнфорда, и прошедшие курс люди отмечают не просто высокое, а фантастически высокое качество уроков.

Курс включает в себя шесть видеолекций на Youtube, где Ник проводит обучение новичков-гуглеров и подробно рассказывает о разных хитростях и фичах Python. Некоторые видеолекции длиной до 50 минут.

Есть ещё скачиваемые задачки. Они довольно простые и созданы специально для начинающих. Курс идеально подходит для изучения Python программистами, имеющими опыт работы с другими языками программирования.

Работаем с модулями ядра в Linux

Reading time7 min
Views269K

Ядро — это та часть операционной системы, работа которой полностью скрыта от пользователя, т. к. пользователь с ним не работает напрямую: пользователь работает с программами. Но, тем не менее, без ядра невозможна работа ни одной программы, т.е. они без ядра бесполезны. Этот механизм чем-то напоминает отношения официанта и клиента: работа хорошего официанта должна быть практически незаметна для клиента, но без официанта клиент не сможет передать заказ повару, и этот заказ не будет доставлен.
В Linux ядро монолитное, т.е. все его драйвера и подсистемы работают в своем адресном пространстве, отделенном от пользовательского. Сам термин «монолит» говорит о том, что в ядре сконцентрировано всё, и, по логике, ничего не может в него добавляться или удаляться. В случае с ядром Linux — это правда лишь отчасти: ядро Linux может работать в таком режиме, однако, в подавляющем большинстве сборок возможна модификация части кода ядра без его перекомпиляции, и даже без его выгрузки. Это достигается путем загрузки и выгрузки некоторых частей ядра, которые называются модулями. Чаще всего в процессе работы необходимо подключать модули драйверов устройств, поддержки криптографических алгоритмов, сетевых средств, и, чтобы уметь это правильно делать, нужно разбираться в строении ядра и уметь правильно работать с его модулями. Об этом и пойдет речь в этой статье.
Читать дальше →

Использование паттерна синглтон

Reading time7 min
Views99K

Введение


Многие уже знакомы с таким термином, как синглтон. Если описать вкратце, то это — паттерн, описывающий объект, у которого имеется единственный экземпляр. Создать такой экземпляр можно разными способами. Но сейчас пойдет речь не про это. Я также опущу вопросы, связанные с многопоточностью, хотя это очень интересный и важный вопрос при использовании данного паттерна. Рассказать бы я хотел о правильном использовании синглтона.
Читать дальше →

Видеоплеер на базе ffmpeg

Reading time8 min
Views64K
Привет, Хабр!

В этой статье речь пойдет о разработке простейшего плеера с использованием библиотек из проекта FFmpeg.
Я не нашел на хабре статей на данную тематику, поэтому решил восполнить этот пробел.
Декодирование видео будет осуществляться с помощью библиотек FFmpeg, отображение — с помощью SDL.

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

Information

Rating
2,777-th
Date of birth
Registered
Activity