воскресенье, 2 марта 2014 г.

Перетягивание с фиксацией (drag-lock) в Gnome 3

Возможно я ретроград, но мне нравится, когда перетягивая окно я могу оторвать палец тачпада, например когда дошел до края, перенести палец и продолжить перетаскивать окно. Это касается и выделения больших абзацев текста. В OS X эта функция называется "пертягивание с фиксацией" или просто "drag-lock". К сожалению, в Gnome 3 сделать это с помощью стандратных настроек невозможно. Там просто нет соответсвующего пункта:
Но это же Linux! Здесь все можно исправить вооружившись консолью!
Все что нужно это добавить следующие настройки в файл /etc/X11/xorg.conf:

# Drag-Lock on the touchpad
Section "InputClass"
        Identifier "finger-touchpad-draglock"
        MatchDriver "synaptics"

# enable drag-lock
        Option "LockedDrags" "on"
Option "LockedDragTimeout" "3000"
EndSection

и перзагрузить иксы (ну или компьютер целиком).
Это решение было найдено на просторах форума Fedora.

пятница, 10 мая 2013 г.

Отладка Go кода с помощью GDB. Введение


Оригинал

Нижесказанное относится к инструментарию gc. Gccgo имеет встроенную поддержку gdb. Помимо этого обзора Вы можете консультироваться с руководством по GDB.



Когда Вы компилируете и компонуете ваши Go программы с помощью инструментария gc в Linux, Mac OS X или FreeBSD, полученные в результате бинарные файлы содержат отладочную информацию DWARFv3, которую отладчик GDB последней версии (>7.1) может использовать для исследования живого процесса или дампа.

Чтобы опустить отладочную информацию передайте флаг '-s' компоновщику (например, go build -ldflags "-s" prog.go).

Код, генерируемый компилятором gc, включает встраивание вызовов функций и регистеризацию переменных. Эти оптимизации иногда могут сделать отладку с помощью GDB сложнее. Чтобы отключить их на время отладки, передайте флаг -gcflags "-N -l" команде go, которая используется для сборки отлаживаемого кода.

Распространенные операции

  • Показать файл и номер строки кода, установить точку останова и дизассемблировать:
     (gdb) list
     (gdb) list line
     (gdb) list file.go:line
     (gdb) break line
     (gdb) break file.go:line
     (gdb) disas
  • Показать трассировку и раскрученные стековые кадры:
(gdb) bt
(gdb) frame n

  • Показать имя, тип и расположение в стековом кадре локальных переменных, аргументов и возвращаемых значений:
(gdb) info locals
(gdb) info args
(gdb) p variable
(gdb) whatis variable

  • Показать имя, тип и расположение глобальных переменных:
(gdb) info variables regexp


Go расширения

Новый механизм расширений GDB позволяет загружать скрипты расширений для заданного двоичного файла. Инструментарий использует этот факт, для того чтобы расширить GDB небольшим числом команд, позволяющих исследовать внутренности исполняемого кода (такие как горутины) и красиво отображать встроенные типы словарей, срезов и каналов.
  • Красивое отображение строк, срезов, словарей, каналов или интерфейсов:
(gdb) p var
  • $len() и $cap() функции для строк, срезов и словарей:
(gdb) p $len(var)
  • Функция для приведения интерфейсов к их динамическим типам:
(gdb) p $dtype(var)
(gdb) iface var


Известная проблема: GDB не может автоматически находить динамический тип значения интефейса, если его длинно имя отличается от короткого (раздражает, когда выводится трассировка стека, вместо красивого отображения мы получаем короткое имя типа и указатель).
  • Исследование горутин:
(gdb) info goroutines
(gdb) goroutine n cmd
(gdb) help goroutine
     Например:
(gdb) goroutine 12 bt

Если Вы хотите узнать как скрипт расширения работает или хотите расширить его, посмотрите src/pkg/runtime/runtime-gdb.py в директории исходных кодов Go. Он зависит от нескольких специальных магических типов (hash<T,U>) и переменных (runtime.m и runtime.g), описание которых в DWARF коде обеспечивает компоновщик (src/cmd/ld/dwarf.c).

Если Вам интересно как выглядит отладочная информация, запустите 'objdump -W 6.out' и просмотрите секции .debug_*.

Известные проблемы

  1. Красивое отображение строк срабатывает только для типа строка, а не для для типов, наследуемых от него.
  2. Информация о типах отсутствует для частей библиотеки времени выполнения написанных на C.
  3. GDB не понимает определения имен Go и рассматривает "fmt.Print" в качестве неструктурированного литерала с ".", который должен быть помещен в кавычки. Это еще более относится именам методов `pkg.(*MyType).Meth`.
  4. Все глобальные переменные причисляются к пакету main.

пятница, 26 апреля 2013 г.

Я теперь захабренный!

Да, это наконец-то случилось!

Как только я узнал о хабре, я сразу захотел стать частью его сообщества. Но тогда я был зеленым студентом и написать статью, тянущую на инвайт мне было не под силу. Со временем я перестал придавать этому большое значение и бросил попытки. На самом деле их было не так много. Но когда я знакомился с новыми людьми из области IT, я все же робко интересовался, нет ли у них лишнего инвайтика.

Но сегодня, благодаря предыдущей статье из этого блога, это произошло! На самом деле, это не было главной целью для меня. В первую очередь статья писалась (переводилась) именно для этого блога, а не для хабра. Так что это своего рода побочный эффект. Но от этого не менее приятный. Пожалуй пойду отмечу это событие баночкой Löwenbräu.

Крэши, вызванные исключениями

Оригинал

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

пятница, 8 июля 2011 г.

Linux для встраиваемых систем in Google Docs now!

Перевод "Linux для встраиваемых систем для начинающих" плавно перехал в  Google Docs,  но работа продолжается. Если кому-то интересна эта тема, скажите писать ли перевод сюда?

пятница, 1 апреля 2011 г.

Linux для встраиваемых систем. Часть 1.2. Linux для встраиваемых систем сегодня


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

LinuxDevices.com, популярный новостной и информационный портал, основанный Rich Lenhrbaum, проводит ежегодный обзор рынка Linux для встраиваемых систем. В своем последнем исследовании, они сообщают, что Linux стала доминирующей операционной системой, используемой в тысячах новых разработках каждый год. Действительно, почти половина опрошенных сообщили об использовании Linux во встраиваемых устройствах, в то время как ближайшая конкурирующая операционная система, как сообщается, использовалась только примерно одним из восьми опрошенных. Даже если у Вас есть причины подвергнуть сомнению эти результаты, нельзя не принимать во внимание взрывной рост рынка Linux для встраиваемых систем сегодня.

четверг, 31 марта 2011 г.

Linux для встраиваемых систем. Часть 1.1. Почему Linux?

Из-за многочисленных экономических и технических преимуществ, мы видим сильный рост в применении Linux для встраиваемых систем. Эта тенденция вошла практически во все рынки и технологии. Linux применяется во встраиваемых продуктах всемирной коммутируемой телефонной сети, глобальной сети передачи данных, мобильных сотовых устройств, а также в оборудовании, которое управляет этими сетями. Linux пользуется успехом в автомобильных приложениях, потребительских товарах вроде игр и КПК, принтерах, корпоративных коммутаторах и маршрутизаторах. Набирающий темп Linux для встраиваемых систем продолжает расти, и конца этому процессу не видно.

Вот некоторые причины роста Linux для встраиваемых систем:

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

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

Часть 1.2. Linux для встраиваемых систем сегодня