Pull to refresh
-2
0
Send message

Теплый ламповый текстовый интерфейс. Просто о простом

Reading time5 min
Views59K
Периодически просматривая топики на хабре, постоянно ловлю себя на мысли, что ещё чуть-чуть и какой-нибудь нейроинтерфейс в ноутбуке станет реальностью. В работе постоянно натыкаюсь на то, что современные люди не очень понимают и любят простую командную строку. А читать мануалы им тем более лень.
Но в моей практике часто случается так, что нужна небольшая утилита, выполняющая одну или две функции. А где именно она будет выполняться — неизвестно. Это может быть Windows, это может быть исключительно терминальный линукс, загрузочная медия — что угодно. Я не программист, но иногда бывает нужно облегчить жизнь себе или другим. И желательно как можно более наглядно. Сначала я пробовал делать просто консольные утилиты. Собственно, с этого, наверное, начинают все. Но очень быстро оказалось, что средствами printf/sprintf/puts и прочими (а пишу я на С) не очень удобно форматировать текст, выводить какую-то информацию. Окно с постоянным «скроллингом» выглядит не очень красиво, и если информации много — абсолютно нечитаемо. Тогда я вспомнил про ncurses.

Читать дальше →
Total votes 112: ↑101 and ↓11+90
Comments42

Элемент управления Grid… продолжение 1

Reading time7 min
Views6.5K
В первом посте мы разбили функциональность грида на несколько классов. Давайте еще раз быстренько их опишем:
  • Lines — представляет набор колонок или строк.
  • Range — oписывает любую совокупность ячеек.
  • Layout — позволяет размещать данные внутри ячейки.
  • Model — определяет интерфейс доступа к данным для View и Controller.
  • View — показывает информацию в ячейке.
  • Controller — позволяет пользователю менять данные.
  • CacheCell — кеширует данные для видимой ячейки.
  • CacheGrid — кеширует данные для видимой части грида.
  • GridWindow — специальный контрол.

Так же мы описали модели и вью для текстовых данных (ModelText, ModelTextCallback. ViewText). Давайте попробуем создать грид и привязать к нему текстовые данные. Новую функциональность, которая нужна для работы стандартного грида будем добавлять в виде специальных Model/View/Controller.
Читать дальше →
Total votes 4: ↑4 and ↓0+4
Comments0

Простой аудио плеер на GStreamer

Reading time4 min
Views7.4K
Недавно мне понадобилось реализовать небольшой аудио плеер. Я, по различным причинам, выбрал библиотеку Gstreamer. И вот решил поделиться полученными знаниями. Надеюсь, приведенная ниже информация кому-то будет полезна.
Читать дальше →
Total votes 17: ↑16 and ↓1+15
Comments5

Знакомство с GStreamer: Устройства вывода

Reading time9 min
Views31K
И снова здравствуй, хабраюзер, которому интересен GStreamer! Сегодня мы поговорим про устройства вывода (sink) различных медиаданных, напишем примитивный плеер для прослушивания радио и записи потока в файл, и узнаем много нового.
Устройство вывода (sink) — это элемент для вывода сигнала куда-либо, будь то звуковая карта, файл, видеокарта или сетевой интерфейс. По своей сути, устройство вывода — это полная противоположность источника данных, и, в отличие от источников данных, устройства вывода имеют только один pad — sink.
Рассмотрим устройства вывода подробнее.
Читать дальше →
Total votes 11: ↑11 and ↓0+11
Comments4

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

Reading time7 min
Views33K
В своей предыдущей статье я затронул тему грамотной реализации потоков в Qt и предложил свой вариант. В комментариях мне подсказали более верное направление. Попробовал сделать — получилось и вправду легко и красиво! Я хотел было исправить старую статью, но Хабр повис — и все потерялось. В итоге я решил написать новую версию.
Смотрим новую версию!
Total votes 15: ↑13 and ↓2+11
Comments23

Китайские аэромыши

Reading time3 min
Views82K
Дешёвые аэромыши появились совсем недавно. Они позволяют перемещать курсор по экрану, двигая в воздухе руку с аэромышью. При этом двигаться должна лишь кисть руки, а не вся рука. Принцип работы основан на использовании гироскопического датчика. Конечно, пользоваться аэромышью менее удобно, чем обычной мышью. Но она и не предназначена для обычного использования с компьютером. Назначение аэромыши — управлять компьютером, медиаплеером или телевизором с кресла или дивана.

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



Читать дальше →
Total votes 50: ↑41 and ↓9+32
Comments55

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

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

Любовь в пикселях или что такое Love2d

Reading time3 min
Views42K
Что же такое Love2d и о чем этот пост? Это кроссплатформенный фреймворк для разработки 2d игр. Почему именно love2d? Потому что это бесплатный, легкий, кроссплатформенный, с открытым исходным кодом, а главное сделанный с любовью движок.

Читать дальше →
Total votes 16: ↑15 and ↓1+14
Comments25

Крошечный Excel на чистом JavaScript (30 строк кода)

Reading time2 min
Views136K
Особенности:
  • Около 30 строк обычного JavaScript
  • Использованные библиотеки: отсутствуют
  • Синтаксис как в Excel (формулы начинаются с "=")
  • Поддерживаются произвольные выражения(=A1+B2*C3)
  • Обнаруживаются циклические ссылки
  • Автоматическое сохранение в localStorage

image
Читать дальше →
Total votes 238: ↑232 and ↓6+226
Comments98

Пример использования WxPython для создания нодового интерфейса. Часть 5: Соединяем ноды

Reading time6 min
Views6.9K
Медленно, но верно, я продолжаю делать серию туториалов о WxPython, где я хочу рассмотреть разработку ферймворка для создания нодового интерфейса с нуля и до чего-то вполне функционального и рабочего. В прошлых частях уже рассказано как добавлять ноды, в этой же части, мы их будем соединять, а на этой картинке показан результат, который мы в этой статье получим:

Еще не идеально, но уже вырисовывается что-то вполне полезное и рабочее.

Прошлые части живут тут:
Часть 1: Учимся рисовать
Часть 2: Обработка событий мыши
Часть 3: Продолжаем добавлять фичи + обработка клавиатуры
Часть 4: Реализуем Drag&Drop
Часть 5: Соединяем ноды
Читать дальше →
Total votes 11: ↑11 and ↓0+11
Comments0

Пример использования WxPython для создания нодового интерфейса. Часть 4: Реализуем Drag&Drop

Reading time4 min
Views7.4K
В небольшом цикле статей будет описано использование WxPython для решения вполне конкретной задачи по разработке пользовательского интерфейса, да еще и то, как сделать это решение универсальным. Туториал этот расчитан на тех, кто уже начал изучать эту библиотеку и хочет увидеть что-то более сложное и целостное, чем простейшие примеры (хотя начнется все с относительно простых вещей).



В этой части мы добавим поддерку Drag&Drop к нашему приложению и научим его таким образом создавать новые ноды.

Часть 1: Учимся рисовать
Часть 2: Обработка событий мыши
Часть 3: Продолжаем добавлять фичи + обработка клавиатуры
Часть 4: Реализуем Drag&Drop
Часть 5: Соединяем ноды

Кому интересно, добро пожаловать под кат…
Читать дальше →
Total votes 14: ↑13 and ↓1+12
Comments0

Пример использования WxPython для создания нодового интерфейса. Часть 3: Продолжаем добавлять фичи + обработка клавиатуры

Reading time4 min
Views7.7K
В небольшом цикле статей будет описано использование WxPython для решения вполне конкретной задачи по разработке пользовательского интерфейса, да еще и то, как сделать это решение универсальным. Туториал этот расчитан на тех, кто уже начал изучать эту библиотеку и хочет увидеть что-то более сложное и целостное, чем простейшие примеры (хотя начнется все с относительно простых вещей).

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

Часть 1: Учимся рисовать
Часть 2: Обработка событий мыши
Часть 3: Продолжаем добавлять фичи + обработка клавиатуры
Часть 4: Реализуем Drag&Drop
Часть 5: Соединяем ноды

Кому интересно, добро пожаловать под кат…
Читать дальше →
Total votes 21: ↑20 and ↓1+19
Comments0

Пример использования WxPython для создания нодового интерфейса. Часть 2: Обработка событий мыши

Reading time6 min
Views8K
В небольшом цикле статей будет описано использование WxPython для решения вполне конкретной задачи по разработке пользовательского интерфейса, да еще и то, как сделать это решение универсальным. Туториал этот расчитан на тех, кто уже начал изучать эту библиотеку и хочет увидеть что-то более сложное и целостное, чем простейшие примеры (хотя начнется все с относительно простых вещей).

В прошлой части я рассказал о задаче и начал описывать процесс реализации, а точнее рендеринг объектов. Теперь же пришла пора реализовать взаимодействие с пользователем.

Часть 1: Учимся рисовать
Часть 2: Обработка событий мыши
Часть 3: Продолжаем добавлять фичи + обработка клавиатуры
Часть 4: Реализуем Drag&Drop
Часть 5: Соединяем ноды

Кому интересно, добро пожаловать под кат…
Читать дальше →
Total votes 19: ↑17 and ↓2+15
Comments0

Пример использования WxPython для создания нодового интерфейса. Часть 1: Учимся рисовать

Reading time5 min
Views20K
В небольшом цикле статей будет описано использование WxPython для решения вполне конкретной задачи по разработке пользовательского интерфейса, да еще и то, как сделать это решение универсальным. Туториал этот расчитан на тех, кто уже начал изучать эту библиотеку и хочет увидеть что-то более сложное и целостное, чем простейшие примеры (хотя начнется все с относительно простых вещей).

А начиналось все так: понадобилось мне для одного проекта сделать UI, где надо последовательность обработки сообщений редактировать. Что-то наподобии Simulink'а. Соответственно, полез искать готовые либы/фреймворки. Поначалу подумал, что задачка популярная и кто-нибудь уже сделал это велосипед, поискал, поискал и… не нашел. Точнее нашел много антикварных велосипедов, но кто же будет пользоваться чужим старым велосипедом, если можно сделать свой новый. Но раз уж делать новый велосипед, почему бы не сделать его универсальным, мало ли, где еще пригодится.

Так что попробую в нескольких статья описать процесс разработки с нуля до работающего примера. Ну и чтобы было интересно, а ферймворк был универсален, первая задача для него будет не подобие Simulink'а, а софтина для рисования блок-схем а-ля Visio, но со своим блек-джеком и остальными участниками:)

Часть 1: Учимся рисовать
Часть 2: Обработка событий мыши
Часть 3: Продолжаем добавлять фичи + обработка клавиатуры
Часть 4: Реализуем Drag&Drop
Часть 5: Соединяем ноды

Кому интересно, добро пожаловать под кат…
Читать дальше →
Total votes 19: ↑17 and ↓2+15
Comments3

Детский лаунчер и родительский контроль

Reading time3 min
Views60K


История развития проекта «PlayPad Детский Лаунчер» началась год назад. В то время мы работали над заказом «Лаунчер с функциями родительского контроля для детского планшета PlayPad2». Именно тогда пришла мысль о создании детского лаунчера, который можно будет установить на любое Android-устройство.
В Google Play есть множество приложений, решающих проблемы родительского контроля, но мы всё же решили создать лаунчер и сделать его удобнее, проще, красивее и функциональнее аналогов. Вот, что из этого вышло.
Читать дальше →
Total votes 60: ↑45 and ↓15+30
Comments62

SDL2: Основы

Reading time8 min
Views72K
К сожалению, даже на официальной вики почти не возможно найти каких либо примеров использования SDL2.x, что уж говорить о рунете. Пытаясь разобраться, я нашел всего лишь пару статей, которые не покрыли и трети моих вопросов.
SDL 2.x существенно отличается от 1.x и даже, если в прошлом вам приходилось с ним работать — теперь вы рискуете ничего не понять.

Сегодня мы напишем простенькую программу выводящую на экран фон и зумируемый спрайт персонажа перемещающегося с помощью WASD и стрелок. + разберемся как в SDL работать с мышкой.
Туториал ТУТ
Total votes 14: ↑12 and ↓2+10
Comments7

DIY-диммер для современных умелых рук

Reading time4 min
Views132K


Хотите собрать DIY-диммер, но нет желания/возможности возиться с самостоятельным травлением печатных плат? Пожаловав под кат вы научитесь «делать» такие же красивые платы. Готовый ZIP-архив для заказа на Китайских производствах ждет вас внутри.
Читать дальше →
Total votes 65: ↑56 and ↓9+47
Comments67

Как помочь детям учить иностранные языки? Воспользоваться мобильными приложениями, конечно!

Reading time3 min
Views23K

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

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

Читать дальше →
Total votes 22: ↑11 and ↓110
Comments13

Универсальный способ создания пакетов, для различных дистрибутивов GNU Linux

Reading time4 min
Views17K
Различные дистрибутивы предоставляют свои утилиты, для сборки и установки программ.
Например в Debian/GNU Linux — это debuild и dpkg. В Red Hat Linux — rpmbuild и rpm.
Не редко нам приходится собирать пакеты самостоятельно.
Устанавливать программы через make, в обход системы управления пакетами в дистрибутивах — является дурным тоном.
В случаях, когда мы имеем исходный код, и автор программы позаботился о создании Makefile, можно использовать checkinstall.
Но бывает и так, что автор java приложения, не выкладывает ничего кроме jar файла. Или мы хотим на коленке создать какой-то пакет, и положить в репозиторий, что бы в дальнейшем устанавливать/обновлять его на множестве серверов с различными дистрибутивами. В этом нам поможет утилита под названием fpm.
В чем же ее достоинство? Она из коробки позволяет нам собирать пакеты под различные дистрибутивы и даже операционные системы.

Сейчас поддерживаются:
  • deb
  • rpm
  • solaris
  • tar
  • directories
  • Mac OS X .pkg files (osxpkg)

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

Information

Rating
Does not participate
Registered
Activity