Заметки по созданию приложений Android

14 августа 2016 г. 21:16 Android   Java  

 В статье собраны несколько заметок и шаблонов кода для разработки приложений на Android с использованием Android SDK.

Статья не претендует на полноценный разжеванный туториал но тем не менее я постарался описать кратко основные понятия.

Осторожно, статья содержит много англоязычного сленга, например Интент (Intent), Вью (View), Лейяут (Layout), Евент (Event), etc. Так удобней писать и надеюсь что читателю будет удобней привыкать к правильным понятиям читая документацию в оригинале.

 

Передача пакетов через поток TCP

21 июня 2016 г. 21:08 python  

Сокеты Беркли придоставляеют возможность передавать датаграмы без гарантии доставки (UDP) либо поток байт с гарантией (TCP). Смысл потока в отличии от датаграм состоит в том что при передачи определенного колличества байт на передающей стороне функцией send нет гарантии что вы получите ровно столько же за один вызов recv на принимающей стороне. Например вы можете передать один раз 1000 байт а получить сначала 400 а потом 600 байт. Аналогично в потоке возможен и обратный процесс - склейки - вы можете 3жды отправить по 200 байт а получите сразу 600. Причиной такого поведения есть алгоритм Нейгла позволяющий за счет накапливания байт и последующей отправке значительно повысить эффективность передачи данных. Но что если передавать нужно именно пакеты целиком, то есть датаграмы целиком. Один из вариантов - использовать подход TLV (Tag-length-value), пример на Python приведен в статье.

Сеть между двумя инстансами/интерфейсами OpenVPN

20 июня 2016 г. 21:57 Linux   OpenVPN  

Иногда бывает что на сервере приходится запускать по несколько инстансов openvpn-сервера. Бывает это чаще всего из-за того что один инстанс не умеет биндиться сразу на разных портах либо сразу на разных протоколах (TCP и UDP), поэтому приходится копировать конфиг и заменять в нем параметры port nnn или proto yyy, ну и подсети server x.x.x.x (Подразумивается что мы используем topology subnet, остальные параметры как правило не конфликтуют но бывают исключения). Новый конфиг приводит к созданию нового инстанса и нового интерфейса. Но что если вам нужно что бы узлы сетей OpenVPN могли работать друг с другом.

Building Yocto linux for Intel Edison with 3G USB modems support

26 мая 2016 г. 20:55 Linux   Intel Edison  

Today we are going to build custom Yocto Linux image for embedded IoT computer called Intel Edison. My main aim why I need to build image was enabling mobile internet USB dongles support, but this guide can be also used if you want to do any other image tuning. To achieve USB modems support we need:

1. Include USB to Serial drivers for modem (to have /tty/USBx ports which will allow communicating with GSM/CDMA module inside of our USB Dongle)

2. Most of the dongles plugged in the system as USB storage Device. But to enable internet connection we need to switch dongle in USB Modem mode. This will lead to changing USB Vendor ID and appearing /tty/USBx ports (of course only if USB serial drivers will be installed). To implement switching, we need to include usb_modeswitch package in our Linux.

3. We need to enable PPP kernel drivers for creating PPP data connection to our mobile provider. 

4. We will also install pppd which will make a call to the mobile operator, create connection and create network interface (e.g. ppp0) which will connect our device to big world of the internet!

Часовые пояса в Django на простых примерах

8 апреля 2016 г. 10:57 django  

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

Поведение BRAM FIFO при переполнении

10 марта 2016 г. 11:10 ПЛИС  

Небольшая заметка с результатами симулации переполнения простой однотактовой FIFO с счетчиком объема data_count в симуляторе Xilinx ISIM.

 

Собираем Yocto Linux для Intel Edison

6 марта 2016 г. 17:44 Linux   Intel Edison  

Yocto Project - это Open Source инфраструктура которая позволяет самостоятельно собрать дистрибутив Linux с нужными функциям для встраиваемых систем на архитектурах ARM, PowerPC, MIPS, x86 и x86-64. Название Yocto происходит от приставки дольних единиц измерения в СИ, эквивалентную 10-24. Для использования Yocto на встраиваемой системе необходимо включить в дистрибутив так называемый BSP (Board Support Package), который будет состоять из драйверов и пакетов обеспечивающих работу аппаратного обеспечения. В частности на основе Yocto создаются дистрибутивы для Intel Edison с названием Yocto* complete image, которые предлагается скачать на стринице загрузки https://software.intel.com/en-us/iot/hardware/edison/downloads. Самостаятельная сборка дистрибутива дает намного больше возможностей в разработке - вы можете включать дополнительные бинарные пакеты в систему, конфигурировать ядро Linux (в частности добавлять в ядро модули для поддержки новых устройств), добавлять патчи с исправлениями которые выходят еще до выпуска дистрибутива, имеете возможность создавать бинарные пакеты ipk для менеджера opkg, используемого в Yocto, запускать дистримутив в эмуляторе QEMU. В статье мы собрем дистрибутив и слегка модефицируем его для своих нужд.

Оптимизация конфигурации ПЛИС по площади (Уменьшение занимаемых ресурсов)

28 февраля 2016 г. 13:32 ПЛИС  

Конкретная микросхема выбранного для разработки семейства ПЛИС обычно выбирается уже после разработки конфигурации и тестирования ее в симуляторе исходя из занимаемого объема. Тем не менее бывают случаи когда в конфигурациию добавляется новый функционал и она перестает помещаться в существующую микросхему, либо  когда еще при выборе процент переполнения очень мал (например синтезатор говорит что занят 101% LUT), и не хочется переплачивать много за следующую микросхему. В обоих случаях можно попробовать уменьшить объем занимаемый ПЛИС. Второй случай конечно не рекомендуется рассматривать если в дальнейшем функционал будет расширятся хотя бы минимально - всегда лучше оставлять небольшой запас.

Сборка Chromium Embedded Framework

16 февраля 2016 г. 17:01 web  

CEF - мощнейший продвинутый открытый кросплатформенный фреимворк, созданный в качестве пользовательской обвертки над открытым браузером Chromium, который позволяет встраивать браузер в свои приложения. Сам фреимворк написан на С++ однако наиболее популярны биндинги под разные популярные языки. В основном самые развивающиеся на сегодня это биндинги для C#, среди них CefSharp, Chromium FX, CefGlue. Также есть биндинг под Python2 от поляка Czarek Tomczak, но он уже год как заброшен, хотя в текущих планах автора есть его обновление до новой версии Chromium и поддержка Python3.4-3.5.

Не зависимо от языка все биндинги используют DLL-ку libcef.dll (и еще несколько файлов включая всякие ресурсы). Несмотря на то что фреимворк дает возможность на уровне биндингов настраивать много полезнейших настроек, и переопределить пользователю кучу обработчиков, иногда все же возникает необходимость подпилить небольшую часть брауза под свои нужды. Собственно в статье пойдет речь о самом главном - как собрать этот CEF. Собирать на этот раз мы будем в Windows.

Сборка IAX2 клиента testcall (libiaxclient)

12 февраля 2016 г. 17:05 C   Voip   Asterisk  

Открытая библиотека iaxclient для реализации IAX-транков поставляется с набором демок одну из которых мы соберем в этой статье (вместе с библиотекой). Скачать библиотеку можно на sourceforge. Мы соберем самую простую консольную демку testcall которая умеет регистрироваться на шлюзе IP телефонии (например Asterisk), принимать звонки и звонить, а в качестве интерфейсов использовать системные аудио-устройства, доступные с помощью библиотеки port-audio

Пример синхронизации асинхронных сигналов и симуляции асинхронных схем на VHDL

30 января 2016 г. 23:44 ПЛИС  

При захвате любых входных сигналов которые могут измениться асинхронно по отношению к основному синхросигналу микросхемы могут возникать некоторые проблемы в работе микросхемы, а точнее триггеров которые выполняют захват.  Эти проблемы связаны с переходом триггера в некое метастабильное состояние при котором данные в нем могут принять вообще стать неопределенными (не 0 и не 1) и в результате приведут к неправильной работе схемы. Особенно часто эта проблема стоит при "стыковании" микросхем по различным интерфейсам. Например сигнал RX у приемника UART может изменится в любое время произвольное по отношению к синхросигналу тактирующего конечный автомат самого приемника, что может вывести из устойчевого состояния триггер который будет захватывать этот сигнал. Также это касается интерфейсов вроде SPI Slave либо даже обычной тактовой кнопки. Безусловно понимание проблемы метастабильности требует куда более глубокого рассмотренния и должно затрагивать  принципы работы триггера и его характеристики, однако в этом посте я приведу чисто практический пример решения этой проблемы.

Вставка картинок из буфера обмена в TinyMCE4 и загрузка на сервер

6 января 2016 г. 12:10 python   django  

Черкая статьи в блоге приходится нередко вставлять изображения, загружать их отдельными кнопками и диалогами на сервер не всегда удобно. Намного проще вставлять из буфера обмена скриншоты либо всякие зарисовки из Gimp. Как это реализовать и будет рассказано в статье. В качестве редактора я использую популярный TinyMCE 4ой версии, на бэк-енде у меня Django на python3. 

Основы Asterisk. Установка, пиры, диалплан

3 января 2016 г. 19:22 Voip   Asterisk  

Приветстувую уважаемые читатели блога. В этой статье мы будем разбираться в основах телекомуникационных программных средств, которые в частности применяются во встраиваемых системах. Основным таким средством есть сервер VOIP-телефонии (VOIP, Voice over IP), в нашем случае это открытое ПО Asterisk, разрабатываемое фирмой Digium Inc и написанное на языке Си. Основной функций сервера VOIP есть возможность подключения различных клиентов и маршрутизация звонков между ними. Клиентом в данном случае может быть как программный телефон (так называемый Софт-фон, например Microsip или Ekiga), так и аппаратный телефон. Также в качестве клиента может быть и дроугой сервер VOIP, например внутри VOIP-телефона может стоять микропроцессор на котором запущен Linux с Asterisk умеющий не просто маршрутизировать звонок а обрабатывать его (то есть передавать голос удаленного абонента в наушник телефонной трубки и отправлять голос абонента-пользователя из микрофона обартно канал).

Создание прозрачного GIF c помощью Imagemagick

13 декабря 2015 г. 20:11 image  

В статье предоставлен Windows .bat-скрипт который на вход принимает папку с непрзрачными изображениям (с любыми именамами) и одним цветом фона и создающий один анимированный gif-файл. Скрипт сначала конвертирует изображения из исходной папки в прозрачные а затем создает из них анимированый GIF. Для работы скрипта нужно установить Imagemagick (http://www.imagemagick.org/script/binary-releases.php). В начале скрипта определены переменные, которыми вы можете настроить скрипт:

  • IM_DIR - Папка с imagemagick (в которой лежит convert.exe)
  • SRC_DIR - папка с картинками
  • SRC_FORMAT - расширение исходных изображений (JPG, PNG, GIF и т.п.)
  • TRANS_COLOR - цвет который считать прозрачным (может быть символьное имя red, green, так и hex-значение, например '#00FF00', читайте тут)
  • FUZZ_RATE=5 - процент захвата оттенков цвета, чем больше тем более отдаленный от цвета оттенок будет заменятся прозрачным
  • TRANSP_DIR - папка куда будут складываться временные прозрачные изображения
  • RESULT - имя файла результата
  • REBUILD_TRANSP - 1 если каждый раз нужно удалять прозрачные изображения и переконвертировать их в прозрачные заново  (иначе этот длинный шаг можно будет пропустить)
  • DELAY - задержка между кадрами
  • SHOW_RESULT - 1 чтобы открыть браузер с результатом

Virtualbox без GUI на ArchLinux

15 марта 2015 г. 22:19 Linux   Arch Linux   VirtualBox  

Иногда возникает надобность запустить виртуальную машину на сервере без X11 к которому у вас есть доступ только по SSH. Запустить виртуальную машину на компьютере без X11 можно при помощи утилиты VBoxHeadless входящей в поставку VirtualBox. Создание и управление виртуальными машинами тоже легко осуществляется утилитой VBoxManage. А получить доступ к удаленному рабочему столу можно при помощи VirtualBox Remote Desktop Extension входящим в VirtualBox Extension Pack. Это позволит пробросить виртуальный экран который вы обычно видите в GUI-версии виртуалбокса по протоколу RDP. Как это все настроить, будет рассказано в статье.