Программа-тренажер английского языка на Bash

4 Июн
2012

Важнейшим из языков для IT сферы является технический английский.
Именно на нем пишутся все доки, мануалы, хелпы и проч.
К сожалению, ВУЗовское образование далеко не всегда позволяет изучить английский язык настолько, чтобы полноценно понимать техническую литературу. Поэтому, если программист или любой другой айтишник желает больше развиваться в своей сфере деятельности, ему необходимо самообразовываться в английском.
Ниже я предлагаю придуманный мной простой способ для расширения словарного запаса, которым пользуюсь сам.
1. Литература.
Находим в интернете интересующее нас руководство, книгу. Начинаем читать.
2. Список незнакомых слов и фраз.
Выделяем, переводим и сохраняем их в файле input_file.txt в формате:
незнакомое_слово: перевод
незнакомое_слово2: перевод
незнакомое_слово3: перевод
и т.д.
Это будет наш личный словарик.
Для перевода я пользовался дополнением к браузеру firefox «S3.Google Translator». Вы можете использовать любой удобный для вас метод.
На данном этапе нас интересует конечно же не «машинный перевод», а то, что фраза непосредственно означает в контексте IT, поэтому переводы мы делаем осмысленные (нам же потом ими пользоваться).
3. Запускаем описанный ниже скрипт, написанный на bash.
Смысл скрипта в том, что он случайным образом отображает вначале «незнакомое слово» (до двоеточия), а после нажатия любой клавиши — перевод.
Наша задача — видя «незнакомое слово» — попытаться мысленно вспомнить, что оно означает. После нажатия клавиши мы видим правильный ответ. Через какое-то время слова повторяются. Таким образом происходит запоминание.
В качестве разделителя используется символ двоеточия. Почему не просто пробел — чтобы можно было использовать выражения.
По мере запоминания словарик можно изменять/дополнять.
#!/bin/bash

#~ this programme scaned lines from a file and show them to user line by line


#~ declare global variables
declare -a lines	#~ array with word lines


#~ show to user words
func_user_input_lines() {
    local i					#~ line index
    local line				#~ single line
    local quantity=${#lines[@]}		#~ quantity (number) of lines

    [ $quantity == 0 ] && exit 0		#~ if input file is empty
    echo 'Type the "Q" button to exit the programme'

    while true; do				#~ infinite loop
        i=$(( $RANDOM % $quantity ))	#~ make random index
        line=$( echo "${lines[$i]}" | awk -F ':' '{print $1}' )
        echo -ne $line
        read -s -n1			#~ press any key
        echo -e ${lines[$i]#$line}
        [ "$REPLY" == "q" ] && break	#~ if "Q" is pressed - quit the loop
    done
    echo
    return 0
}


#~ read input file line by line into $lines array
func_read_file() {
    local i=0	#~ lines array conter (lines index)
    local line	#~ single line
    local input_filename="$1"

    while read line; do		#~ read input file line by line
        [ "$line" == "" ] && continue
        lines[$i]=$line
        (( i++ ))
    done < $input_filename
}


#~ main function - begin to work
func_main() {
    func_read_file "input_file.txt"	#~ read input file into $lines array
    func_user_input_lines		#~ user input words
}


func_main	#~ call the function and begin to work
Словарик input_file.txt
above: выше
absence: отсутствие
accessible: доступный
accurate: точный
advance: перенос строки (line advance) (продвижение)
Although: Хотя
Among others: , Среди прочего,
Among: Среди
annoys: раздражает
approach: подход
arbitrary: произвольный
as follows: следующим образом
assignment statements: операторы присваивания
assignment: назначение, задание, присваивание
assumes: предполагает
at a glance: с одного взгляда
attempt: попытка
augmented: дополнена
augment: увеличивать
behaviour: поведение
beliefs: убеждений
Besides: Кроме того
bogged: погрязнуть
botched: неудачной
braces: фигурные скобки
brevity: краткость
brief: краткий
cause: заставлять, основание (для)
centigrade: стоградусная шкала (по Цельсию)
clarify: прояснить
communicating data: передача данных
comparatively: сравнительно
complicated: сложных
comprehension: понимание
concepts: понятия
concise: краткий
condition: состояние
conforms: соответствует
consistently: последовательно
constrained: ограничен
control flow: управление потоком (в книге - управляющие конструкции или управляющие операторы)
convenient: удобный
conventionally: условно
convey: передать
corresponding: соответствующий
couple: пара
dash: тире
defer: откладывать
definition: определение
derivative: производное
discarded: отбрасываются
distinguished: выдающийся
division: деление
elimination: ликвидация
emphasizes: подчеркивает
essentially: по существу
evaluated: оценка
evolved: эволюционировали
exceeds: превышает
exceptions: Исключения
except: за исключением
exclusively: исключительно
explanations: объяснения
explicitly: ясно
exposition: ОПИСАНИЕ
extensive: обширный
familiarity: знакомство
features: особенности
follows: следует, следующим
fractional: дробный
further: далее
generalization: обобщение
general-purpose: общего назначения
however: однако, тем не менее
implemented: реализованы
implementers: исполнителей (разработчиков)
improved: улучшенный
increment: увеличить (увеличение)
indent: отступ (indentation)
In either case: В любом случае
initial: начальный
instance: случай
instance: случай (For instance - Например)
instead: вместо
intentionally: намеренно
introductory: вводный
is paired: в паре
itself: сам
least: как минимум (at least - по крайней мере)
listed: перечисленные
magnitude: величина
major: основной
mastered: освоено
match up: совпадают
merely: просто
mere: простой
might: может быть
misspelling: неправильное написание
Nonetheless: Тем не менее
notation: представление (обозначение)
noted: отметили
observation: наблюдение
occurrence: случай
occur: происходить
omitting: опуская (пропуск буквы)
order: порядок
originally: первоначально
parentheses: круглые скобки
particular: особый
passionate: страстный
performing: выполнение
perform: выполнять
permits: разрешений
Pick: Выбирать
plenty: много
precise: точный
precision: точность double-precision (с двойной точностью)
preface: предисловие
proper: надлежащий
provide: обеспечивать (предоставлять)
purpose: цель
quantity: количество
quotes: кавычки
range: диапазон
rather than: а не
ratio: соотношение (деление)
readily: легко (readily distinguished - легко отличить)
recognizes: признает
related: связанные
remains: остается
represent: представляет
requires: требуется
restrictions: Ограничения
retain: сохранять
revising: пересмотр
rudiments: основы
section: раздел (в книге)
semicolon: точка с запятой
separate: отдельный (независимый)
sequence: последовательность
significant: значительный
specifies: указывает (устанавливает)
specify: указывать
stages: этапы
statements: операторы (блок операторов в функции)
subroutines: Подпрограммы
substituted: замещенный
suggestions: предложения
suits: (глагол) подходит
summary: резюме (описание, справочник)
supposedly: предположительно
Thereafter: После этого
thoughtful: вдумчивый
tied: связанный
treatment: трактовка (изложение)
truncates: усекает (при делении целые числа)
typing: (the command) ввод (комманды)
until: до
variation: изменение
vice versa: наоборот
whatever: любой (независимо от)
worthwhile: стОящий
consider: рассматривать
processing: обработка
regardless: независимо
responsibility: ответственность
interleave: чередовать, перемежать
amount: количество
surprising: удивительный
relational: отношения сравнения (реляционный)
relational operator: оператор сравнения
specifically: конкретно
subtle: тонкий
distinguishing: различая
distinctive: отличительный
internally: внутренне
valid: достоверный (действительный)
confused: спутанный
addition: дополнение
reach: достигать
reference: ссылка
shrink: сокращаться
get carried away: увлекаться
impenetrable: непроницаемый
curb: обуздать
precedence: приоритет (операторов)
undesired: нежелательный
similar: аналогичный
efficient: эффективный
either: или
stick: придерживаться
accumulate: накапливать, собирать, аккумулировать
relatively: относительно
overflow: переполнение
conversion: преобразование
Описание алгоритма скрипта: Состоит из трех функций: func_main - как в Си - главная - с нее начинает работать программа. func_read_file - читает построчно файл, в качестве аргумента получает имя файла "input_file.txt" и записывает строки в массив lines. func_user_input_lines - выводит пользователю часть строки до символа ":", а после нажатия любой клавиши - остальную часть строки. Если нажали клавишу "q", то завершает программу. Скрипт несложный, при желании его можно перенести на стандартный Си или любой другой язык программирования. Такое вот ЕШКО.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх