Введение В связи с широким распространением компьютерных технологий работа с компьютером (через взаимодействие при помощи его средств ввода, самыми распространёнными из которых являются клавиатура и мышь) становится необходимой и обыденной задачей. Однако обычным при начальном изучении компьютера является т. н. «зрячий» или «двухпальцевый» метод набора, «найти и нажать», когда набор текста производится, отыскивая каждый следующий символ каждый раз заново, зрительно, ориентируясь по маркировке на клавишах (что значительно замедляет набор, но, с другой стороны, — не требует никакой предварительной подготовки пользователя). Обучение же «слепому» методу может (в некоторых случаях — менее чем за месяц ежедневных получасовых тренировок), при благоприятных условиях, позволить вводить текст «вслепую», быстро и безошибочно. Таким образом, потратив некоторое время, человек приобретает умение, которое может сэкономить ему массу времени при работе с клавиатурой и компьютером. При слепом методе печати бо́льший упор делается на мышечную память и тактильные ощущения пальцев, чем на зрение. Однако этот метод требует специального обучения, для чего существуют курсы машинописи, а также бумажные и интерактивные компьютерные самоучители. Понаблюдав за своими знакомыми, я сделала вывод, что даже постоянные пользователи компьютера не всегда владеют этим методом. Именно это и сподвигло меня попробовать сделать свою программу для обучения «слепому» методу набора текста. Особенность моей программы состоит в том, что в ней нет отвлекающих элементов. Все внимание пользователя сфокусировано на исходном тексте. Это позволяет увеличить продуктивность занятий в разы. История появления «слепого» метода Слепой метод набора — методика набора текста «вслепую», то есть не глядя на клавиши печатной машинки или кнопки клавиатуры, используя все (или большинство) пальцы рук, ранее был известен как американский слепой десятипальцевый метод. Был открыт в 1878 года, широкое распространение начал получать с 1888 года. В XIX-XX веках слепым методом печати на печатных машинках обучали машинисток и секретарей. Это позволило сузить сферу использования стенографии, увеличить производительность труда секретарей. Слепой метод набора был разработан Франком Эдгаром Макгуррином, стенографистом суда из Солт-Лейк-Сити. 25 июля 1888 года Макгуррин, будучи единственным известным человеком, в то время использующим данный метод, одержал решающую победу над Луисом Тробом, который пользовался восьмипальцевым зрячим методом печати. Это было первым соревнованием по печатанию, проводилось оно в Цинциннати. Результаты соревнования появились на титульных листах многих газет. Макгуррин выиграл 500 долларов, что в пересчёте по индексу потребительских цен на 2008 год составило 11 675 долларов[2]. Эта победа вызвала широкий интерес и к слепому методу печати, и к пишущим машинкам. Этот день можно назвать днём рождения слепого метода печати, на основании которого в дальнейшем строилось большинство методик набора «вслепую». Раскладка клавиатуры Раскла́дка клавиату́ры — форма, размеры и взаимное расположение клавиш на клавиатуре (механическая раскладка) — это, большей частью, относится к служебным клавишам, так и маркировка клавиш соответствующими знаками (визуальная раскладка) — цифры, буквы и доп. символы. Хотя сейчас раскладки и стандартизированы, однако и та и другая могут иметь некоторые (иногда и существенные) отличия от клавиатуры к клавиатуре, затрудняя, тем самым, привыкание и скоростной набор. Обычно средний ряд у клавиатуры именуется домашним рядом или клавиши ФЫВА ОЛДЖ, над которыми и располагаются при печати вслепую восемь (большие над пробелом) пальцев. Большинство компьютерных клавиатур имеют выступы в виде точек или полосок на тех клавишах, где должны находиться указательные пальцы (F/J в английской раскладке QWERTY, А/О в русской раскладке ЙЦУКЕН). Таким образом, человек, набирающий текст, может на ощупь определить правильное (над домашним рядом) положение пальцев. Рядом авторов для изучения слепой печати на русском языке рекомендуется использовать раскладку под названием «Русская (машинопись)». Объясняется это отсутствием необходимости на этой раскладке использовать клавишу SHIFT для ввода большинства знаков препинания, которые используются при печати зачастую чаще, чем цифры, к тому же цифры зачастую имеются на цифровом блоке, который рекомендуется для изучения тем, кому приходится в больших объёмах вводить цифры. Переход пользователя с одной раскладки на другую (например с QWERTY на Dvorak, либо с «Русской» на «Русскую (машинопись)») зачастую требует значительных усилий по переучиванию. Рекомендации к выполнению упражнений В основу слепого набора положен тот факт, что за каждым пальцем закреплена своя постоянная зона клавиш, которую тот обслуживает. Весь процесс обучения сводится к тренировке "мышечной памяти" пальцев. Если заниматься регулярно (желательно 2-3 раза в день), то уже очень скоро можно будет хорошо печатать десятью пальцами, не глядя на клавиатуру. Посадка Сидеть желательно на стуле или вращающемся кресле со спинкой. Угол между позвоночником и бедром и между бедром и голенью должен составлять 90 градусов. Сидеть необходимо прямо, не нагибаясь и не наклоняя голову. Взгляд должен быть направлен вперед, в центр экрана монитора. Запястья не должны провисать. Расстояние от глаз до экрана монитора — от 40 до 70 сантиметров. Исходная позиция пальцев Пальцы в нерабочем состоянии должны находиться над буквами ФЫВА, ОЛДЖ — основным рядом клавиатуры. Этот ряд называется основным потому, что он содержит буквы, которые наиболее часто встречаются при написании текстов. Для удобства на клавишах А и О, где расположены указательные пальцы, находятся небольшие выступы. Это позволяет ориентироваться на клавиатуре вслепую. Схема клавиатуры Обязательно используйте только правильные пальцы для набора каждой из букв. Всегда возвращайте пальцы в исходную позицию «ФЫВА — ОЛДЖ». Набирая, представляйте себе расположение символа на клавиатуре. На пробел нажимает большой палец той руки, которая противоположна последней «рабочей» руке. Поначалу такой метод может показаться неудобным, но со временем всё начнёт получаться быстро, легко и удобно. Скорость печати Сфокусируйте внимание, прежде всего, на качестве (вначале старайтесь набирать медленно, но без ошибок). Небольшая поначалу скорость со временем станет возрастать, а высокое качество печати сохранится. Следите за ритмом, держите пальцы невысоко над клавиатурой. Структура программы и инструкция к применению Программа состоит из двух форм и модуля. В модуле заявлены основные, глобальные переменные и функции, которые можно вызвать из любой формы. Программа стартует со второй формы, на которой пользователь может выбрать номер упражнения и задания. После выбора автоматически появляется форма№1, на которой находится непосредственно упражнение и строки для ввода. Только после того, как пользователь три раза набрал строку упражнения, он может увидеть количество своих ошибок, а также время, за которое он выполнил упражнение. Подсчет времени ведется с учетом заданных параметров. В скобках пишется время, на которое вы превысили норму. На первых упражнениях вы не имеете права на ошибку. Если в одной из трех строк допущена ошибка, то Вы не можете прейти на следующее задание. Это сделано для того, чтобы пальцы не запоминали ошибок. Выбор языка программирования Для создания этой программы я выбрала Visual Basic. NET по причине того, что это современный язык, а так же он базируется на платформе framework. .NET Framework — программная платформа, выпущенная компанией Microsoft в 2002 году. Основой платформы является исполняющая среда Common Language Runtime (CLR), способная выполнять как обычные программы, так и серверные веб-приложения. NET Framework поддерживает создание программ, написанных на разных языках программирования. Одной из основных идей Microsoft .NET является совместимость программных частей, написанных на разных языках. Например, служба, написанная на C++ для Microsoft .NET, может обратиться к методу класса из библиотеки, написанной на Delphi; на C# можно написать класс, наследованный от класса, написанного на Visual Basic .NET, а исключение, созданное методом, написанным на C#, может быть перехвачено и обработано в Delphi. Каждая библиотека (сборка) в .NET имеет сведения о своей версии, что позволяет устранить возможные конфликты между разными версиями сборок. Заключение Данный метод набора текста позволяет существенно сэкономить время и упростить работу за компьютером. За период написания работы она была опробована на нескольких пользователях, которые подтверждали ее эффективность. При регулярных тренировках и выполнении всех рекомендаций, Вы без особых усилий сможете за неделю освоить «слепой» метод набора текста. Основной код программы: Модуль. Module basTypeLetter Public arNumExercise(9) As String Public strCurExercise As String Public arFileLine(9, 19) As String Public lngColomn, lngRow, lngError As Long Public Sub InitVar() Dim i, c, r As Long Dim strFileExercise, strExercise, strCurLine As String Dim arLine() As String strFileExercise = My.Application.Info.DirectoryPath & "\TypeLetter.txt" 'Dim orFile As New System.IO.StreamReader(strFileExercise, System.Text.Encoding.GetEncoding(1251)) strExercise = My.Computer.FileSystem.ReadAllText(strFileExercise, System.Text.Encoding.GetEncoding(1251)) arLine = Split(strExercise, ControlChars.CrLf) For i = 0 To arLine.Length - 1 strCurLine = arLine(i) If strCurLine.Substring(0, 1) = "#" Then c = CInt(strCurLine.Substring(1)) - 1 r = 0 Else arFileLine(c, r) = strCurLine arNumExercise(c) = r r = r + 1 End If Next 'For c = 0 To 9 ' For r = 0 To 19 ' MsgBox(c & " arFileLine(c, r)) ' Next 'Next " & r & " " & End Sub End Module Форма №1 Public Class Form1 Dim datNullTime As Date Dim lngDifTime, lngTimeVeryWell, lngTimeWell As Long Dim strDifTimeWell, strDifTimeVeryWell As String Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed ExitExercise() Form2.Show() End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Dim i As Long 'MsgBox(My.Application.Info.DirectoryPath) 'Dim a As New System.IO.StreamReader("F:\VB\1.txt", System.Text.Encoding.GetEncoding(1251)) 'Dim b As String 'b = a.ReadLine 'a.Close() 'MsgBox(b) strCurExercise = arFileLine(lngColomn, lngRow) lngTimeVeryWell = strCurExercise.Length * 0.6 lngTimeWell = strCurExercise.Length * 0.8 'MsgBox(strCurExercise & "' " & dblCorrectTimeLine) btnNext.Visible = False Me.Text = "Упражнение №" & (lngColomn + 1) & ", задание №" & (lngRow + 1) Me.btnBegin.Text = "Начать" Me.rtxtOrigText.ReadOnly = True Me.rtxtOrigText.Text = strCurExercise txtTry1.Enabled = False txtTry2.Enabled = False txtTry3.Enabled = False Me.rtxtTry1.ReadOnly = True Me.rtxtTry2.ReadOnly = True Me.rtxtTry3.ReadOnly = True txtTry1.PasswordChar = "*" txtTry2.PasswordChar = "*" txtTry3.PasswordChar = "*" End Sub Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click ExitExercise() Form2.Show() Me.Close() End Sub Private Sub btnBegin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBegin.Click NextExercise() datNullTime = Now End Sub Private Sub txtTry1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtTry1.KeyPress 'e.Handled = True If txtTry1.TextLength + 1 = strCurExercise.Length Then lngDifTime = DateDiff(DateInterval.Second, datNullTime, Now) 'MsgBox("Вторая попытка" & vbCrLf & "Общее время: " & lngDifTime & "cек") datNullTime = Now Exercise(2) End If End Sub Private Sub txtTry2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtTry2.KeyPress If txtTry2.TextLength + 1 = strCurExercise.Length Then lngDifTime = lngDifTime + DateDiff(DateInterval.Second, datNullTime, Now) 'MsgBox("Третья попытка" & vbCrLf & "Общее время: " & lngDifTime & "cек") datNullTime = Now Exercise(3) End If End Sub Private Sub txtTry3_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtTry3.KeyPress If txtTry3.TextLength + 1 = strCurExercise.Length Then lngDifTime = lngDifTime + DateDiff(DateInterval.Second, datNullTime, Now) MsgBox("Большое спасибо" & vbCrLf & "Общее время: " & lngDifTime & "cек") txtTry3.Text = txtTry3.Text & e.KeyChar EndExercise() End If End Sub Private Sub Exercise(ByVal NumExercise As Long) Select Case NumExercise Case 1 txtTry1.Enabled = True txtTry2.Enabled = False txtTry3.Enabled = False txtTry1.Focus() Case 2 txtTry1.Enabled = False txtTry2.Enabled = True txtTry3.Enabled = False txtTry2.Focus() Case 3 txtTry1.Enabled = False txtTry2.Enabled = False txtTry3.Enabled = True txtTry3.Focus() End Select End Sub Private Sub EndExercise() Dim i As Long Dim strType As String txtTry1.Visible = False txtTry2.Visible = False txtTry3.Visible = False rtxtTry1.Visible = True rtxtTry2.Visible = True rtxtTry3.Visible = True rtxtTry1.Text = txtTry1.Text strType = txtTry1.Text For i = 0 To strType.Length - 1 If strType.Substring(i, 1) = strCurExercise.Substring(i, 1) Then rtxtTry1.Select(i, 1) rtxtTry1.SelectionColor = Color.Green Else lngError = lngError + 1 rtxtTry1.Select(i, 1) rtxtTry1.SelectionColor = Color.Red End If Next rtxtTry2.Text = txtTry2.Text strType = txtTry2.Text For i = 0 To strType.Length - 1 If strType.Substring(i, 1) = strCurExercise.Substring(i, 1) Then rtxtTry2.Select(i, 1) rtxtTry2.SelectionColor = Color.Green Else lngError = lngError + 1 rtxtTry2.Select(i, 1) rtxtTry2.SelectionColor = Color.Red End If Next rtxtTry3.Text = txtTry3.Text strType = txtTry3.Text For i = 0 To strType.Length - 1 If strType.Substring(i, 1) = strCurExercise.Substring(i, 1) Then rtxtTry3.Select(i, 1) rtxtTry3.SelectionColor = Color.Green Else lngError = lngError + 1 rtxtTry3.Select(i, 1) rtxtTry3.SelectionColor = Color.Red End If Next If lngDifTime - lngTimeVeryWell > 0 Then strDifTimeVeryWell = "+" & CStr(lngDifTime - lngTimeVeryWell) Else strDifTimeVeryWell = CStr(lngDifTime lngTimeVeryWell) End If If lngDifTime - lngTimeWell > 0 Then strDifTimeWell = "+" & CStr(lngDifTime lngTimeWell) Else strDifTimeWell = CStr(lngDifTime lngTimeWell) End If lblTime.Text = "Ваше время: " & lngDifTime & "cек" & vbCrLf & "Отличное время: " & lngTimeVeryWell & " (" & strDifTimeVeryWell & ")" & vbCrLf & "Хорошее время: " & lngTimeWell & " (" & strDifTimeWell & ")" If lngError = 0 Then lblNumError.ForeColor = Color.Green If arNumExercise(lngColomn) = lngRow And lngColomn = 9 Then MsgBox("Вы совершили 0 ошибок. Это последнее задание. Спасибо!", MsgBoxStyle.Information) Form2.Show() Me.Close() End If lblNumError.Text = "Вы совершили 0 ошибок. Нажмите ""Продолжить"" для перехода к следующему упражнению." Me.btnBegin.Text = "Продолжить" If arNumExercise(lngColomn) = lngRow Then lngColomn = lngColomn + 1 lngRow = 0 Else lngRow = lngRow + 1 End If Else lblNumError.ForeColor = Color.Red If lngColomn > 4 Then lblNumError.Text = "Вы совершили " & lngError & " ошибок." Me.btnBegin.Text = "Повторить" btnNext.Visible = True Else lblNumError.Text = "Вы совершили " & lngError & " ошибок. Пожалуйста, повторите еще раз." Me.btnBegin.Text = "Повторить" End If End If End Sub Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click If arNumExercise(lngColomn) = lngRow And lngColomn = 9 Then MsgBox("Вы совершили 0 ошибок. Это последнее задание. Спасибо!", MsgBoxStyle.Information) Form2.Show() Me.Close() End If If arNumExercise(lngColomn) = lngRow Then lngColomn = lngColomn + 1 lngRow = 0 Else lngRow = lngRow + 1 End If NextExercise() End Sub Private Sub ExitExercise() txtTry1.Enabled = False txtTry2.Enabled = False txtTry3.Enabled = False Me.rtxtTry1.ReadOnly = True Me.rtxtTry2.ReadOnly = True Me.rtxtTry3.ReadOnly = True txtTry1.PasswordChar = "*" txtTry2.PasswordChar = "*" txtTry3.PasswordChar = "*" rtxtTry1.Visible = False rtxtTry2.Visible = False rtxtTry3.Visible = False txtTry1.Text = "" txtTry2.Text = "" txtTry3.Text = "" txtTry1.Enabled = False txtTry2.Enabled = False txtTry3.Enabled = False txtTry1.Visible = True txtTry2.Visible = True txtTry3.Visible = True lngError = 0 lblNumError.Text = "" lblTime.Text = "" End Sub Private Sub NextExercise() btnNext.Visible = False Me.Text = "Упражнение №" & lngColomn + 1 & ", задание №" & lngRow + 1 Me.btnBegin.Text = "Начать" strCurExercise = arFileLine(lngColomn, lngRow) Me.rtxtOrigText.ReadOnly = True Me.rtxtOrigText.Text = strCurExercise txtTry1.Enabled = False txtTry2.Enabled = False txtTry3.Enabled = False Me.rtxtTry1.ReadOnly = True Me.rtxtTry2.ReadOnly = True Me.rtxtTry3.ReadOnly = True txtTry1.PasswordChar = "*" txtTry2.PasswordChar = "*" txtTry3.PasswordChar = "*" rtxtTry1.Visible = False rtxtTry2.Visible = False rtxtTry3.Visible = False txtTry1.Text = "" txtTry2.Text = "" txtTry3.Text = "" txtTry1.Enabled = False txtTry2.Enabled = False txtTry3.Enabled = False txtTry1.Visible = True txtTry2.Visible = True txtTry3.Visible = True lngError = 0 lblNumError.Text = "" lblTime.Text = "" Exercise(1) End Sub Private Sub txtTry3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTry3.TextChanged End Sub Private Sub txtTry1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTry1.TextChanged End Sub Форма №2 Public Class Form2 Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim i As Long InitVar() For i = 1 To 10 ComboBox1.Items.Add(CStr(i)) Next ComboBox1.SelectedIndex = 0 End Sub Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click Me.Close() End Sub Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click lngColomn = ComboBox1.SelectedIndex lngRow = ComboBox2.SelectedIndex Me.Hide() Form1.ShowDialog() End Sub Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged Dim i As Long ComboBox2.Items.Clear() For i = 1 To arNumExercise(ComboBox1.SelectedIndex) + 1 ComboBox2.Items.Add(CStr(i)) Next ComboBox2.SelectedIndex = 0 End Sub End Class