Хочу показать и рассказать о небольшой программке, которая принесла пользу.
Однажды на работе мне написал друг. Диалог у нас состоялся примерно следующий:
- Привет, я тут обучаюсь технике слепой печати. Дело в том, что на линуксе нет программки, которая могла бы мне помочь. В общем, может ты сможешь быстренько написать такую?
Так как помочь другу - святое дело, да и задача выглядела интересной, помочь я согласился.
В итоге получилось вот что:
Кому интересно, подробности ниже
Предупреждение
Я не претендую на звание гуру питона, поэтому в коде (и я почти уверен в этом) присутствуют забивания гвоздей микроскопом и прочие нелепости.
Принцип её работы программы следующий - после запуска на рабочем столе появляется окно со схематическим изображением клавиатуры. При нажатии кнопок на реальной клавиатуре, на схематическом изображении нажатые кнопки вдавливаются.
Это помогает выработать рефлекс смотреть на монитор во время печати на клавиатуре.
Главные требованиями к программе:
Общее описание внутренностей программы:
Для чтения клавиш используется найденная в google строчка на bash, позволяющая читать клавиши, нажимаемые на клавиатуре через утилиту xinput. Данный способ выбран в угоду пункту 1 требований. Процесс чтения символов запускается в отдельном потоке. Так же реализовано и чтение языка раскладки (опять таки пункт 1). Выдача информации о нажатых кнопках производится в очередь. Работа с очередью в главном окне программы производится путем периодического вызова функции periodicCall. Таким образом два потока пишут в очередь, один поток читает.
Завершение работы программы производится своеобразно - через статусные переменные в потоках.
Немного кода
import os
...
filename="program.conf"
home = os.path.expanduser("~")
if os.path.isfile(home+"/.key_trainer/"+filename):
filename=home+"/.key_trainer/"+filename
...
Еще немного кода
from ConfigParser import RawParser
...
myParser=RawConfigParser(allow_no_value=True)
myParser.read(path_to_file)
# Получаем секции
self.sections = myParser.sections()
# Используем генератор чтобы вытащить ключи, заданные в секции KEYBOARD SETTINGS
keyboard_settings_keys=
Формат записей в keyboard.conf
[код кнопки]:"[строчной символ в английской раскладке],[заглавный символ в английской раскладке],[строчной символ в русской раскладке],[заглавный символ в русской раскладке]":[номер строки кнопки],[номер столбца кнопки]
Вот несколько записей для примера:
24:«q,Q, й, Й»:3,2
25:«w,W, ц, Ц»:3,3
26:«e,E, у, У»:3,4
27:«r,R, к, К»:3,5
Чтение символов с клавиатуры производится в два потока. Почему два - потому что на практике так оказалось проще. Один поток читает раскладку клавиатуры, второй нажатые кнопки. Оба потока порождаются через Thread , в каждом потоке затем через subprocess Popen будет запущен соответствующий процесс чтения клавиш или раскладки. Для чтения выходного потока процесса используется subprocess.PIPE . Как только текст пришел в поток выхода процесса, он читается, обрабатывается, и, если нужно, ставится в очередь Queue :
Код
from subprocess import Popen
from subprocess import PIPE
import threading
...
def doReadingKeys(self):
self.myProcess=Popen("xinput list "+"|"+" grep -Po \"id=\K\d+(?=.*slave\s*keyboard)\" "+"|"+" xargs -P0 -n1 xinput test",shell=True,stdout=PIPE)
while self.proc_started:
symbol=self.myProcess.stdout.read(1)
if symbol in press_release_dict:
symbol_pressed=press_release_dict
while symbol!="\n":
symbol=self.myProcess.stdout.read(1)
if symbol.isdigit():
symbol_index=symbol_index*10+int(symbol)
self.myQueue.put((symbol_index,symbol_pressed))
symbol_index=0
...
keysThread=threading.Thread(target=self.doReadingKeys)
keysThread.start()
...
Замечание
У данного подхода есть один недостаток - разблокировка(а значит и дальнейшее завершение потока и процесса) метода read, который внутри цикла не произойдет до тех пор, пока что-нибудь не считается с выходного потока процесса myProcess. Но на практике проблем из-за этого не возникало, так как нажимаем мы на кнопки часто.
Код добавления кнопок
from Tkinter import *
import tkFont
...
self.buttonFont=tkFont.Font(family=config.font_name,size=config.font_size)
self.boldUnderscoredButtonFont=tkFont.Font(family=config.font_name,size=config.font_size,weight="bold",underline=1)
for row_index in xrange(1,config.getNumOfRows()+1):
self.gui_rows=Frame(master)
self.gui_row_buttons=
for button_num in xrange(1,config.getNumOfKeysInRow(row_index)+1):
newButton=Button(self.gui_rows)
if self.config.padx!=-1:
newButton.config(padx=self.config.padx)
if self.config.pady!=-1:
newButton.config(pady=self.config.pady)
if (row_index,int(button_num)) in config.key_pos_to_index:
self.gui_all_buttons] = newButton
self.gui_row_buttons.append(newButton)
newButton.pack(side=LEFT)
self.gui_rows.pack()
self.reconfigure_text_on_buttons(config,shift_pressed=0,lang=0)
...
Помимо прочего, в класс добавлена функция processQueue, которая со стороны потока графического интерфейса достает из очереди кортежи (tuple) с событиями нажатых кнопок и изменяет внешний вид кнопок - «нажимает» их, «переключает раскладки» и «нажимает» кнопку shift:
Обработка очереди со стороны графического интерфейса
def processQueue(self):
while not self.queue.empty():
msg = self.queue.get(0)
if msg == -1: # -1 message is for changing language
self.currentLang=int(msg)
if self.config.debug:
print "Changed lang!"
self.reconfigure_text_on_buttons(self.config,0,msg)
if msg in self.gui_all_buttons:
if msg in self.shift_key_codes:
self.reconfigure_text_on_buttons(self.config,msg,self.currentLang)
if msg==1:
self.gui_all_buttons.config(relief=SUNKEN)
if self.sticky_key_behaviour:
if self.last_sticky_button!=msg:
self.gui_all_buttons.config(relief=RAISED)
self.last_sticky_button=msg
else:
if not self.sticky_key_behaviour:
self.gui_all_buttons.config(relief=RAISED)
if self.config.debug:
print msg
Класс, инкапсулирующий GuiManager
class ThreadedClient:
def __init__(self, master):
self.master = master
self.config=ConfigManager()
self.keyTrainer=keyboardStatus(self.config)
keyTrainer=self.keyTrainer
master.protocol("WM_DELETE_WINDOW", self.kill_and_destroy)
self.guiManager=GuiManager(master,self.config,keyTrainer.myQueue,keyTrainer)
keyTrainer.begin_scan()
self.running = 1
self.periodicCall()
def kill_and_destroy(self):
self.running = 0
self.keyTrainer.stop_scan()
if self.config.debug:
print "Stopping scan..."
self.master.destroy()
def periodicCall(self):
self.guiManager.processQueue()
if not self.running:
# import sys
# sys.exit(1)
self.kill_and_destroy()
self.master.after(20, self.periodicCall)
Нажата левая клавиша Alt:
Окно программы после перенастройки:
При наведении курсора мыши окно программы «уезжает» под заголовок (цвета, которые остаются на белом фоне - артефакты сжатия ролика):
Нажатие клавиши shift и переключение языка:
В данной статье пойдет речь о клавиатурных тренажерах. Многие пользователи, которые пробовали в свое время «Соло на клавиатуре», нудят, что в Линуксе программы для обучения слепой печати немного не такие. То скучные, то кнопочки не так, то то не сяк. Я скажу так — все проблемы находятся в нашей голове. Если хочешь научиться быстро печатать, то программ, которые есть в репозитории Убунту, хватит с головой. Я в свое время точно так-же переходил с любимого Photoshop на GIMP. Я просто ненавидел GIMP за его странный интерфейс. Но прошла неделя обучения (видео уроки, книги, статьи) и теперь для меня лучше Гимпа ничего нет.
Это клавиатурный тренажер для Linux.Программа поможет вам в обучении слепой печати на клавиатуре. Имеет теоретический курс и четыре практических. Мультиязычна, включая украинский и русский языкы. Есть возможность настройки шрифта, просмотр статистики ваших результатов.
В повседневной жизни периодически встречаются «странные слова», которые мы крайне медленнее и неуверенно набираем. Благодаря тому что символы в ходе упражнения генерируются случайным образом, в этом случае у вас не должно быть проблем после прохождения курса «Адаптивность».
Установить Klavaro можно выполнив команду в Терминале:
sudo apt-get install klavaro
KTouch — программа по обучению метода слепой печати. Этот клавиатурный тренажёр входит в пакет образовательных программ KDE Education Project. Создавалась для графического оформления KDE, но без проблем может быть установлена в Ubuntu, Lubuntu, Linux Mint и т.д.
Возможности KTouch:
Поддержка всевозможных раскладок клавиатур.
Имеется возможность добавлять новую раскладку.
Редактирование упражнений.
Статистика результатов выполненых заданий.
Подсчёт скорости и качества(аккуратности) печати.
Разные цветовые схемы интерфейса.
Установить KTouch можно командой в Терминале:
sudo apt-get install ktouch
GTypist — это консольный клавиатурный тренажер, которые тоже предназначен для обучения слепой печати. Установим программу командой:
sudo apt-get install gtypist
Чтобы запустить GTypist выполните в Терминале команду:
gtypist
Если программа не запуститься и выдаст сообщение об ошибке, то скорее всего нужно просто увеличить окно вашего Терминала. Просто растяние окно и запустите команду снова.
Программу можно запускать как для русской, так и английской раскладки.
Английская раскладка.
Если вы запустили программу командой gtypist, то запустятся уроки для английской раскладки.
Чтобы перейти на следующий урок, вам придется переключать раскладку на русскую, для того, чтобы работали клавиши управления.
Что нужно сделать? Нужно запустить программу в Терминале с английской локалью. Для этого выполним следующую команду:
LANG=en_US.UTF-8 gtypist
Клавиши управления GTypist.
Стрелками (вверх-вниз, вправо-влево) выбираем серию уроков. Клавишей Enter прощелкаем текст.
После начала урока, можно нажать 2 раза клавишу ESC, а затем:
Нажмите в русской раскладке:
`П’ для повторения,
`С’ для следующего упражнения,
`В’ для выхода
либо в английской раскладке:
`R’ для повторения,
`N’ для следующего упражнения,
`E’ для выхода
Внизу Терминала есть подсказки по клавишам.
Многие пользователи Linux хотят научится быстро печатать. Сегодня есть много онлайн тренажеров клавиатуры , в силу событий иногда нужен обычный клавиатурный тренажер. В репозитории Убунту есть много клавиатурных тренажеров. В этой статье я сделаю короткий обзор этих тренажеров и расскажу, как их установить и настроить.
Начнём с того, как устанавливать программы в Linux Ubuntu. Если вы уже давно пользуетесь Linux, то этот раздел можно пропустить. Информация для тех, кто только начал пользоваться Linux Убунту.
Программы в Ubuntu устанавливаются в основном из ранее упомянутого репозитория, с помощью терминала. Терминал вызывается с помощью компанды Ctrl + Alt + T . Терминал — это «командная строка», привычная в Windows.
Чтобы установить приложение нужно запустить терминал и выполнить в нём команду (набрать нужный текст и нажать enter). Команды для установки клавиатурных тренажеров в Линукс вы увидите под описанием каждого клавиатурного тренажера.
klavaro — пожалуй самый популярный и совершенный клавиатурный тренажер для Linux (так же есть версия klavaro для Windows). В программе есть курс теории и четыре практикума. Главное меню программы очень простое, разработчики клавиатурного тренажера в справке говорят, что нужно не боятся нажимать кнопки в главном меню, и что ничего плохого в результате не произойдёт. В клавиатурном тренажере есть множество языков и раскладок. А также есть возможность включать виртуальную клавиатуру.
Для установки клавиатурного тренажера набираем в терминале:
sudo apt-get install klavaro
Для удаления клавиатурного тренажера набираем:
sudo apt-get remove klavaro
Возможно придётся ввести пароль к вашей учётной записи Ubuntu (если вы его не знаете, то возможно 12345678, если не подходит — обратитесь к администратору). Обратите внимание, что при вводе пароля в терминале — символы не отображаются, просто вводите и нажимайте ↵ Enter
Если вы всё сделали правильно — klavaro появится в главном меню:
Вот и всё, можно приступать к занятиям, запускаем тренажер и выбираем нужные упражнения. В тренажере присутствует статистика, есть различные языки и раскладки, возможность обучаться с нуля. Так выглядит упражнение по слепой печати в klavaro для Ubuntu:
KTouch — клавиатурный тренажер для увеличения скорости печати и развитие безошибочности печати. Тренажер предоставляет специальный текст и указывает зоны пальцев для каждой клавиши. Присутствуют уроки для многих раскладок и языков. В программе есть статистика которая поможет настроить уровень сложности при обучении.
Для установки клавиатурного тренажера в Ubuntu в терминале набираем:
sudo apt-get install ktouch
Если нужно — вводим пароль к учётной записи и жмём ↵ Enter. У меня установка длилась долго, около 3 минут. После установки — программа появится в главном меню.
Возможно вы столкнётесь с проблемой переключения уровня. Для этого нужно запустить тренажер от имени администратора.
Клавиатурный тренажер работает в терминале, в основном ориентирован на обучение на английской раскладке, но имеются и русские уроки. Запускать нужно также с терминала.
Для установки GTypist — набираем в терминале:
sudo apt-get install gtypist
Для запуска тренажера набираем в терминале:
LANG=en_US.UTF-8 gtypist
gtypist (возможны проблемы с клавишами управления)
Для запуска русской версии тренажера набираем в терминале:
Если возникла ошибка:
gtypist: строка 42: строка слишком длинна для экрана:
:In the Q series of lessons, we will be learning to touch-type on the standard
Нужно просто растянуть окно терминала, оно слишком маленькое для правильной работы тренажера клавиатуры.
Навигация по пунктам меню:
стрелки вверх, вниз;
Начать с начала:
клавиша R
;
Выйти в главное меню:
клавиша E
;
Следующий урок:
N
Выбрать пункт меню:
↵ Enter
или пробел;
Возврат назад:
Esc
.
Оказывается, уже года три как существует нативная версия 8-й версии “Соло на клавиатуре” для Linux! Написана с использованием GTK2, довольно прилично(по меркам юзабилити, как минимум), активно поддерживается, есть сборки для большинства дистрибутивов, реализован фактически полный функционал Windows-версии. Особенно приятно, что это не порт из Windows, а именно клон - написанный с нуля, с максимальным уважением к стандартам программирования в *nix.
Программа, как и её Windows-версия предлагает бесплатные уроки(40 первых уроков) - для дальнейшего обучения нужна регистрация. Регистрация стоит 150 рублей, оплатить можно прямо с сайта множеством способов, включая СМС.
О “Соло на клавиатуре”
“Соло на клавиатуре” появилась довольно давно - лично моё знакомство с этой программой состоялось лет этак 8 назад. И после знакомства с Linux, на обочине с включённой аварийкой остались и Windows и “Соло на клавиатуре”. Хотя я регулярно пробовал различные самоучители слепого набора для Linux, всё таки такой пошаговой структуры и тщательно составленных уроков, пока встретить не довелось. Кириллицей печатать вслепую я научился методом “клавиатура без русских букв”, но латинскими буквами всё же слепой метод ещё не освоил, поэтому интерес к подобному софту остался и новость(хоть и запоздалую) от появления нативной “Соло” для Linux, надеюсь, разделят многие пользователи. А те, кто пробовал обучаться слепому методу набора на других тренажерах и разочаровался или счёл, что это “не его”, то имхо стоит попробовать “Соло” - всё таки грамотно составленные уроки тут играют большую роль.
Юзабилити
Перед тем, как скачать Linux-версию, уже привычно ожидал что-то, использующее Mono или Java, но в зависимостях были лишь библиотеки GTK2, что порадовало. Далее, как и “положено” проприетарному софту, ожидался некий wizard-подобный бинарник инсталлятор, и опять же мимо - на сайте выложены красиво разложенные по каталогам с именами дистрибутивов собранные RPM- и DEB-пакеты(а также сборки для PCBSD).
Из представленных нескольких beta- и pre- версий, я скачал последнюю доступную на момент написания стать - pre4. Установив все пакеты и запустив программу, опять же приятно порадовали приятное оформление и удобный интерфейс.
Курсы для разных языков оформлены в виде отдельных пакетов, поэтому можно скачать только те, которые интересуют.
Не менее порадовали и настройки - видно, что программу писали с опытом разработки и работы в Linux - это ведь всегда заметно
(кликабельно)
Далее, непосредственно сами курсы и уроки. Тут вылезла первая мелочь - слишком маленький шрифт задан по-умолчанию. Лечится это, впрочем, в настройках, но всё равно шрифты требуют чуть более тщательного внимания в финальной версии. Равно как и полуторные интервалы между строками затрудняют восприятие текста.
Небольшие мелочи есть и главном окне упражнения, но я бы отнес это к “nice to have” багам, и, полагаю, в финальной версии всё это будет красиво выглядеть “из коробки”(возможно это нюансы, актуальные лишь в сборке для Ubuntu).
Установка
Я приведу пример установки для Ubuntu Jaunty. В репозиториях по понятным причинам этих пакетов нет, поэтому необходимо скачать.deb-пакеты и установить вручную.
Идем по ссылке на сайте в файловый архив: ergosolo.ru/download/linux/. Выбираем самую свежую версию(pre4, в нашем случае), архитектуру(i586) и дистрибутив(Ubuntu). В каталоге лежат два пакета - один представляет собственно программу, второй - пример плагина для “Соло”, его качать не обязательно. Скачиваем первый.deb:
wget ergosolo.ru/download/linux/pre4/i586/Ubuntu_8.10/solo8_8.X.pre4-8_i386.deb Переходим снова в каталог с выбором архитектур и выбираем noarch/DEBS. Оттуда можно качать все.deb пакеты, а можно выборочно(у меня были проблемы с пакетами для уроков по translit’у - их я удалил). Предполагая, что все пакеты мы скачали в один каталог(допустим /tmp), устанавливаем их все вместе:
sudo dpkg -i /tmp/*.deb Всё, можно запускать команду solo8 - позже в настройках можно нажать кнопку “Поместить ярлык на Рабочий стол”(брр, виндуз…) и запускать его оттуда.