» » Соло на клавиатуре для линукс. Клавиатурный тренажер под линукс. Клавиатурный тренажер Gnu Typist или GTypist

Соло на клавиатуре для линукс. Клавиатурный тренажер под линукс. Клавиатурный тренажер Gnu Typist или GTypist

Василий | 3-03-2013, 05:16
Абсолютно отупляющая программа. Тычешь одним пальцем сто и более раз в одну букву, а палец всё равно не может запомнить её расположение. Нервы на пределе. Немного успокаивают анекдоты, хотя и старьё. Если за анекдоты ещё и такие деньги платить, то это перебор.

аноним | 3-02-2013, 18:04
Совершенно бестолковая прога и ещё платная 300 р.! А бестолковая потому, что в ней много ненужного давления, как-будто В.В. Шахиджанян такой идеальный, а все дураки и рукожопые! Короче в топку! А есть бесплатные классные проги Stamina и VerseQ - вот там постарались на славу, даже можно их купить, хотя они совершенно бесплатны!

Андрей | 28-01-2013, 10:51
Это худшее, что Вам может попасться из ПО. Эта программа подходит только для троечников по характеру. Тем же, кто был в школе четвёрочником или пятёрочником - я бы её не рекомендовал. Нервы вытягивает в струну.

Диана Иванова | 23-02-2008, 11:44
Здравствуйте, Шахиджанян. Я начала ваш курс соло на клавиатуре. Но немного я хочу написать о себе. Я - десятилетняя девочка, учусь в четвёртом классе, хочу стать художницей. Мне очень нравится ваш курс. Особенно когда делаешь упражнения и в окне анимашка - мальчик который быстро печатает. Хочу закончить все 100 уроков.

Ильвир Ринатович | 19-10-2007, 07:58
Здравствуйте, Евгений! Что значит "несколько неудачное обучение - позанимался и бросил"? Здесь программа не виновата; просто Вам не хватило терпения, воли; а можеть быть "СОЛО" просто Вам не подходит (хотя я убежден, что СОЛО подходит каждому и научиться набирать текст слепым десятипальцевым методом с помощью "СОЛО" может каждый). Вот если бы Вы сказали - "несколько неудачное обучение - прошел программу и не научился", - тогда другое дело. Между прочим, по программе "СОЛО на клавиатуре" научились набирать текст более 200 000 человек.

Евгений | 18-10-2007, 23:02
Несколько нудное обучение, позанимался и бросил. Потом наткнулся на Stamina (ver.2.5) Абсолютно бесплатна, более (блин ну наверное более простая и удобная что-ли) заинтересовывающая (меня)программка. Весит 1.5 мега.

Михаил | 25-07-2007, 21:20
Программу пробовал проходить 3 раза дошёл до 67 упр. потом сломал палец и всё пошло на смарку. Дома я печатаю на ноутбуке полулёжа, так удобней. Для тех кто много печатает прога в самый раз: 1 раз отмучился и на всю жизнь польза.

Феликс | 18-07-2007, 12:44
Однако закусило Ильвира Ринатовича:), такой многословный пост, сразу видно, что в совершенстве овладел "слепым десятипальцевым методом" (аж 4 раза употребил это выражение, видимо, набирает быстрее, чем это можно произности вслух). А так программа нормальная, но пройти до конца весь курс не хватило терпения.

Ильвир Ринатович | 18-05-2007, 06:36
Отличная программа, которая, действительно, обучает слепому десятипальцевому методу набора текста на клавиатуре. В добавок - стоит недорого, а оплатить ее можно через СМС. Сам учился по этой программе - прошел все три курса (русский, английский и транслитерацию) - и сейчас набираю тексты слепым десятипальцевым методом. Легко ли, красиво ли, элегантно ли? Легко, свободно. А тем, кто видел, как я набираю тексты - пройдя курс "СОЛО" - нравится. И они удивленно спрашивают: "Как ты это делаешь?" Да, просто - отвечаю - прошел курс "СОЛО на клавиатуре" и Вам рекомендую... Полученный навык лишним не будет. В общем, скачивайте программу и учитесь слепому десятипальцевому методу набора текста на клавиатуре - не пожалеете. Гораздо проще и удобнее набирать тексты слепым десятипальцевым методом, а не двумя-четырьмя пальцами.

Важным программным обеспечением в информатике является клавиатурный тренажер. От детей я постоянно требую совершенствование скорости набора текста. Под Линукс ОЧЕНЬ МНОГО подобного софта. Небольшой обзор:

TuxType - это клавиатурный тренажер, рассчитанный в первую очередь на детей.

Сделана больше как игра чем как полнофункциональный тренажер. Игра сводится к тому, что пингвин Tux ловит рыб с изображенными на них буквами.

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

Десятиклассникам программа тоже понравилась:)

Установка: sudo apt-get install tuxtype

KTouch — клавиатурный тренажёр, входящий в пакет образовательных программ KDE Edutainment Project.

Возможности программы:

* Поддержка различных раскладок клавиатур.
* Возможность добавления новой раскладки.
* Редактирование упражнений.
* Детальная статистика по результатам выполняемых упражнений.
* Подсчёт скорости и качества(аккуратности) печати.
* Различные цветовые схемы интерфейса.

Установка: sudo apt-get install ktouch

Соло на клавиатуре - Культовый клавиатурный тренажер, который проходили (или пытались пройти) большинство отечественных пользователей, теперь доступен и для Linux. Установил, но программа не пошла - так как требовалось еще что-то установить.

Для работы СОЛО для *nix требуется:

  • компьютер с x86-совместимым процессором
  • графическая система >= X11R6
  • Gtk+ >= 2.4.0
  • GtkHtml2 >= 2.6


Спасибо человеку, хорошо написал.

Оказывается, уже года три как существует нативная версия 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 - позже в настройках можно нажать кнопку “Поместить ярлык на Рабочий стол”(брр, виндуз…) и запускать его оттуда.

Хочу показать и рассказать о небольшой программке, которая принесла пользу.

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

Так как помочь другу - святое дело, да и задача выглядела интересной, помочь я согласился.

В итоге получилось вот что:

Кому интересно, подробности ниже

Предупреждение

Я не претендую на звание гуру питона, поэтому в коде (и я почти уверен в этом) присутствуют забивания гвоздей микроскопом и прочие нелепости.


Вместе с другом сделали постановку задачи:

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

Это помогает выработать рефлекс смотреть на монитор во время печати на клавиатуре.

Главные требованиями к программе:

  1. Реализовать её очень быстро;
  2. Показывать нажатые клавиши в режиме реального времени;
  3. «Переключать раскладки» в окне при переключении языка клавиатуры;
  4. Производить настройку программы через текстовый конфигурационный файл.
В процессе написания также добавились:
  1. Режим «залипания» последней нажатой клавиши (помогает сообразить куда нажимать пальцами дальше);
  2. Работа с клавишей shift;
  3. Возможность пометки цветом позиций для пальцев на клавиатуре;
  4. Возможность настройки шрифта;
  5. Возможность настройки ширины кнопок;
  6. Автоматическое сокрытие содержимого окна при наведении мышки.
На момент появления программы уже имелся опыт работы с Tkinter, работы с несколькими потоками. Плюс, по роду деятельности приходится бывать и сисадмином, поэтому работа с командной строкой была не чужда.

Общее описание внутренностей программы:

Для чтения клавиш используется найденная в google строчка на bash, позволяющая читать клавиши, нажимаемые на клавиатуре через утилиту xinput. Данный способ выбран в угоду пункту 1 требований. Процесс чтения символов запускается в отдельном потоке. Так же реализовано и чтение языка раскладки (опять таки пункт 1). Выдача информации о нажатых кнопках производится в очередь. Работа с очередью в главном окне программы производится путем периодического вызова функции periodicCall. Таким образом два потока пишут в очередь, один поток читает.
Завершение работы программы производится своеобразно - через статусные переменные в потоках.

Работа с настройками программы

Настройки программы загружаются и хранятся в экземпляре класса ConfigManager. Чтение из главноего текстового файла настроек производится с помощью ConfigParser . Данный модуль позволяет использовать похожий на INI формат конфигурационных файлов. В конструкторе класса производится проверка существования конфигурационного файла, расположенного по пути "~/.key_trainer/program.conf". Если его нет, программа читает файл program.conf, расположенный в текущей папке с программой.

Немного кода

import os ... filename="program.conf" home = os.path.expanduser("~") if os.path.isfile(home+"/.key_trainer/"+filename): filename=home+"/.key_trainer/"+filename ...


ConfigParser - замечательный модуль. Можно считать названия всех секций, а также считать ключи с их значениями внутри секций как кортежи (tuple). Так, например, реализовано считывание названий секций, и ключей в секции «KEYBOARD SETTINGS».

Еще немного кода

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». Он используется для настройки отображаемых кнопок, а именно кода кнопки, текста на кнопке (с шифтом и в раскладках), положения кнопки. Убирая/добавляя записи в этот файл можно менять количество и качество кнопок (и строк с кнопками) в главном окне программы.

Формат записей в keyboard.conf

[код кнопки]:"[строчной символ в английской раскладке],[заглавный символ в английской раскладке],[строчной символ в русской раскладке],[заглавный символ в русской раскладке]":[номер строки кнопки],[номер столбца кнопки]

Вот несколько записей для примера:

24:«q,Q, й, Й»:3,2
25:«w,W, ц, Ц»:3,3
26:«e,E, у, У»:3,4
27:«r,R, к, К»:3,5

Чтение символов с клавиатуры

Для чтения символов написан класс KeyboardStatus, который принимает входным параметром класс конфигурации (см. выше). Внутрь этого класса инкапсулирована потокобезопасная очередь Queue .

Чтение символов с клавиатуры производится в два потока. Почему два - потому что на практике так оказалось проще. Один поток читает раскладку клавиатуры, второй нажатые кнопки. Оба потока порождаются через 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() ...


Чтобы завершить поток используется переменная класса proc_started. При закрытии главного окна программы она устанавливается в значение False, производится выход из цикла чтения, выполняется завершения процесса чтения клавиш через terminate, а затем wait - для того чтобы дождаться пока процесс завершился.

Замечание

У данного подхода есть один недостаток - разблокировка(а значит и дальнейшее завершение потока и процесса) метода read, который внутри цикла не произойдет до тех пор, пока что-нибудь не считается с выходного потока процесса myProcess. Но на практике проблем из-за этого не возникало, так как нажимаем мы на кнопки часто.

Графический интерфейс

Для того чтобы быстро сделать графический интерфейс использовался Tkinter . Данный модуль позволяет легко работать с простыми графическими интерфейсами (окна, кнопки, галочки и т.п.). Класс окна GuiManager на вход, помимо других параметров, принимает класс конфигурации. Из неё берутся настройки кнопок, затем эти кнопки создаются и добавляются на главное окно программы.

Код добавления кнопок

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) ...


При добавлении кнопок на форму попутно создаются словари с ключами номера строки и значениями - объектом Frame в каждый из которых помещаются кнопки. Как видно из кода, кнопки формируются построчно, по завершении формирования строки виджет кладется в окно методом pack().

Помимо прочего, в класс добавлена функция 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 инкапсулирован внутрь класса ThreadedClient, который принимает на вход главный поток Tkinter и выставляет вызов функции разбора очереди каждые 20 миллисекунд:

Класс, инкапсулирующий 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 и переключение языка:

Заключение

Что же получилось в итоге? А получилась неплохая программа для того, чтобы помогать людям учиться печатать вслепую на клавиатуре. Да, у нее есть недостатки и неэффективности, а именно:
  • Запускаемые со стороны процессы с командами bash для чтения символов;
  • Жестко заданные языки (только русский и английский);
  • Квадратный интерфейс;
  • Работает на Ubuntu и Linux Mint (MATE), на других дистрибутивах не опробована;
Код можно скачать/посмотреть здесь: