173 самых лучших онлайн-курсов программирования [2021] с нуля

173 самых лучших онлайн-курсов программирования [2021] с нуля Сертификаты
Содержание
  1. Что сделано на ruby
  2. Что же с этим делать?
  3. Лямбда — нечто больше, чем просто греческая буковка.
  4. Что анализ покрытия не даёт
  5. Вы получаете все удобства (удовольствия) без уловок.
  6. . Вы можете использовать Rails.
  7. Вы полюбите мелочи.
  8. Больше не нужно использовать точку с запятой.
  9. Все является объектом, как это и должно быть.
  10. Все имеет значение.
  11. Можете изменять окружение любым доступным способом.
  12. XML — реально ненужен.
  13. F.a.q.
  14. Geekbrains
  15. Skillbox
  16. Skillfactory
  17. Xyz school
  18. Блоги
  19. Бонусы от анализа coverage
  20. Все онлайн-школы программирования и их курсы
  21. Где изучать ruby и ruby on rails в 2021 году?
  22. Для чего нужен ruby
  23. И многое, многое другое
  24. Как выбрать лучший курс по программированию?
  25. Книги
  26. Конвертация ключевых пар в формат, понятный openssl
  27. Курсы
  28. Курсы и вебинары ruby association в специалисте
  29. Настройка openssl
  30. Нетология
  31. Общее
  32. Подкасты
  33. Подопытный проект
  34. Покрываем тестами и смотрим покрытие
  35. Послесловие
  36. С чего начать
  37. Сопутствующие источники информации
  38. Цифровая подпись xml (в т.ч. soap) сообщений
  39. Цифровая подпись куска данных и её проверка
  40. В заключение
  41. Вы не сможите получать единорогов из птиц и конец, но вы получите ослов, если захотите.
  42. Заключение
  43. Отзывы учеников которые прошли курсы программирования

Что сделано на ruby

Ruby используют компании разного уровня, в том числе NASA, Motorola, Google или GitHub. Вот часть проектов, которые написаны на Ruby или Ruby on Rails:

Если посмотреть на этот список, то становится понятно, что Ruby особенно хорош в веб-разработке и создании сайтов со сложной структурой.

Что же с этим делать?


Если вы заинтересовались, то значит, вам УЖЕ что-то надо делать. Смотрите, вот лишь малая толика того, что теперь возможно и доступно нам:

Лямбда — нечто больше, чем просто греческая буковка.

Ruby

позаимствовал некую магию из

LispPerl

в объекты и блоки

ProcProc

— это «блок кода, связанный с набором локальных переменных. Однажды связанные, они могут вызываться в различных контекстах и все еще обращаться к тем переменным.». Поглядим на следующе:

def gen_times(factor)
return Proc.new {|n| n*factor }
end

times3 = gen_times(3)
times5 = gen_times(5)

times3.call(12) #=> 36
times5.call(5) #=> 25
times3.call(times5.call(4)) #=> 60


Можно было использовать ключевое слово

lambda

вместо

Proc.new

, на результат это не влияет. Это могло показаться знакомым людям, знающим

PerlPython

(или

Lisp

). Такое можно сдалать даже на

PHP

, но не много людей пользуются этой возможностью.


Кроме того в

Ruby

широко используются блоки типа «несозданные

Proc

», например, для итерации по содержимому объекта и исполнения некоторого кода, подобно методу

each

, доступного для класса

Array[1, 2, 4, 6, 8].each {|c| puts c*2} #=> возвратит каждый элемент, умноженный на 2


Если код не умещается на одной строчке, рекомендуется использовать конструкцию

do… end

, вместо использования скобок. Фаны

Ruby

не любят скобок.

Что анализ покрытия не даёт

Во-первых, стопроцентное покрытие не обеспечивает отсутствие багов. Простой пример: если изменить класс Mother таким образом:

class Mother
  def permit_walk?(child)
    # child.scarf_put_on && child.homework_done
    child.homework_done
  end
end

покрытие класса останется 100%-ым, тесты будут по-прежнему зелёными, но логика будет очевидно неверной. Для автоматического определения “отсутствующих, но нужных” тестов можно использовать гем mutant. Я ещё не пробовал его в деле, но, судя по Readme и количеству звёзд на гитхабе, библиотека действительно полезна. Впрочем, это тема для отдельного поста, до которого я как-нибудь доберусь.

Во-вторых, в Ruby на данный момент возможен анализ покрытия только по строкам, branch- и condition-coverage не поддерживается. Имеется в виду, что в однострочниках вида

some_condition ? 1 : 2
some_condition || another_condition
return 1 if some_condition

есть точки ветвления, но даже если тесты пройдут только по одной возможной ветви исполнения, coverage покажет 100%. Был pull request в Ruby на эту тему, но от мейнтейнеров уже два года ничего не слышно. А жаль.

Вы получаете все удобства (удовольствия) без уловок.

Ruby

позаимствовал все лучшее из других языков программирования, от

smalltalkJava

, от

PerlPython

. Вот базовые возможности, которые вы в принципе могли видеть и в других языках:

  • Исключения. Верите или нет, исключения являются одной из важнейших вещей при разработке программ любого рода. Программисты на PHP4, не знают ничего о них и будут говорить вам, что можно просто печатать(ошибки) на экран или использовать их собственный «супер-пупер» класс для обслуживания ошибок. К счастью для всех нас, Ruby поставляется с try/catch (или еще лучше begin/rescue) блоками и набором предопределенных, расширяемых Исключений, для правильной обработки ошибок.
  • Пространства имен: модули Ruby делают использование пространства имен легким, это должно понравиться энтузиастам C и Java.
  • Встроенные регулярные веражения: Для всех знатоков Perl, вы можете заключить нечто в // и оно становится регулярным выражение, готовым для сравнения (для этого используем оператор =~).
  • Перегрузка операторов: Ruby позволяет определять операторы, такие как , -, >, и т.д. для любого вашего класса.
  • Пакеты: называемые «gems»(камешки), они действительно оправдывают свое название, кроме того — они работают. Пакеты поддерживают зависимости, а еще могут быть как кросс-платформенные, так и платформо-зависимыми.
  • Интерактивная консоль: может использоваться для тестирования кода интерактивно, подобно консоли Python

. Вы можете использовать Rails.


Последнее, но не по важности… Вы всегда можете использовать

Rails

для разработки веб-приложений. Разработка будет не настолько простой, как с

PHP

, но

Rails

были написаны на

Ruby

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

Вы полюбите мелочи.

Ruby

изящен. Почему? Потому-что он не старается делать код лаконичным настолько, что б это мешало читабельности и пониманию. Есть несколько советов, которые могут вам помочь:

  • Вы можите использовать оба оператора, if и unless в условных выражениях. Кончно же вы можите использовать if с противоположным значением выражения, но использования unless обычно приводит к меньшему числу ошибок. Кроме того, вы можите использовать оба оператора, как условные модификаторы, ставя их после выражения, а не до:order.new unless order.exists
  • Можно использовать знаки вопроса и восклицания в конце имени метода. Данное соглашение не навязывается, но знак «?» используется, когда метод возвращает true или false, в то время, как знак «!» используется для методов, делающих нечто необратимое, на подобии удаления записи из базы данных, отщепления последнего символа из строки и т.п.
  • Можно использовать псевдонимы (alias) для уже созданных методов. Таким образом можно получить методы exist и exists, без накладных расходов и без повторений.
  • Вы можете использовать директивы attr_reader, attr_writer или attr_accessor для автоматического создания getter/setteer для членов класса.
  • И еще некоторое соглашение об именах: константы, классы и модули пишут с заглавной буквы, методы и члены класса должны начинатся с маленькой буквы, глобальные переменные именуют начиная с «$», имена переменных объекта начинаются с «@», а имена переменных класса с «@@», ну и т.д.
  • При вызове методов, можно не писать скобки. Можно писать write File.open("/home/h3rald/test.txt") или просто File.open "/home/h3rald/test.txt", что особенно удобно с методами, без аргументов.

Больше не нужно использовать точку с запятой.


Хотите написать следаующую инструкцию? Просто переходите на новую строку. Нажмите «

Enter

» и готово. В

Ruby

как и в

Python

, новая линия разделяет инструкции, так что вам не придется все время ставить точку с запятой. К сожалению это означает, что подобно фанатам

C

, мы не сможем написать программу в одну строчку. Но это не так уж и плохо, правда?

Все является объектом, как это и должно быть.


Когда я изучал

Java

, мне говорили, что все является объектом.

— «Че, 14 и 374346.678 — объекты?»
— «Нет, глупыш, это числа!»
Ruby

числа, символы, булевы значения и все остальное является объектом. Серьезно. Это означает, что можно писать вещи подобно этим:

"YOU SHOULDN'T ALWAYS USE CAPITALS".lowcase # вернет "you shouldn't always use capitals"

, вместо нечто такого:

# PHP Code
strtolower("YOU SHOULDN'T ALWAYS USE CAPITALS")


Этим вы экономите время, экономите скобки и так более логично.

Все имеет значение.

Или «больше не надо использовать

return

для возврата значений». Если побыстрячку, то так: все инструкции в Ruby возвращают значение, даже присваивание переменных, так что вам действительно не нужно использовать ключевое слово «

return

» в конце методов. Значение последнего присваивания всегда будет возвращено.

Можете изменять окружение любым доступным способом.

Впервые увидев это, я был впечатлен. Представьте типичную ситуацию: вы стали использовать системный класс или класс, написаный кем-то другим и поняли, что вам надо некий дополнительный метод в нем. Есть несколько путей для решения этой проблемы в типичных языках программирования:

Ruby

вы можете добавить метод в оригинальный класс, без правки исходных кодов. Это можно сделать даже для системного класса.

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

Numeric

, как показано:

class Numeric
def feet
self*3.2808399
end
end


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

5.feet # возвратит 16.4041995

Классы в

Ruby

никогда не закрываются и могут быть расширены в любой момент, из любого места. Естественно использовать такую возможность надо с осторожностью!

XML — реально ненужен.

XML

— красивый, общеупотребительный, язык разметки, который может быть обработан всеми языками программирования и используется повсеместно. К сожалению, он слишком громоздкий для написания, трудный для обработки(парсинга) и, давайте будем честны — трудный для чтения в большинстве случаев. А вот взгляните на следующий фрагмент:

regexp: !ruby/regexp /a-zA-Z/
number: 4.
string: a string


Безусловно это легче и проще

XML

, правда? Добро похаловать в

YAML

, любимый (но не единственный) язык разметки

Ruby

, с помошью которого любой объект может быть представлен в простом, лаконичном, но полном виде.


Ruby способен работать с

XML

, но простота

YAML

подкупила многих разработчиков, которые теперь используют его вместо

XML

, например для файлов конфигурации (так поступили в

Rails

). Фрагмент, представленный выше, был получен исполнением следующего фрагмента кода:

F.a.q.

Почему некоторые курсы программирования стоят так дорого?

Дорого — понятие относительное. И правильно ответить на него можно лишь в случае, если будет представлен объект сравнения.
Однако, мы не можем не согласиться с тем фактом, что для многих молодых людей сумма в 40.000 или 60.000 рублей за курс может оказаться неподъёмной.
Во-первых, многие онлайн-школы предоставляют беспроцентную рассрочку на весь период обучения.
Во-вторых, есть немало учеников, которые окупили свои вложения в образование, уже на этапе самого курса.
И в-третьих, сумма зависит от гарантий трудоустройства, где на новой работе вы сможете зарабатывать сумму значительно выше той, которую вам пришлись инвестировать.

Geekbrains

Образовательная экосистема ГикБрайнс имеет крупные факультативы для обучения студентов программированию. А также, есть более укороченные версии учебных программ — курсы. Выбирайте то, что вам выгодно:

Программирование для школы GeekBrains является приоритетным направлением. Десятки профессий и факультативов разбиты на отдельные курсы, чтобы создать эффективное движение в направлении программирование. Лучшие курсы выделены в отдельные блоки и прекрасно усваиваются учениками без знаний в программирование. Курсы которые можно соотнести в программирование, разделены на секторы и структуризированы по европейскому стандарту.

Skillbox

В образовательной платформе Скилбокс, направление «программирование» делится на две категории: профессии и курсы. У вас есть возможность выбрать:

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

Skillfactory

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

Skillfactory традиционно относит программирование в первые ряды. Обучающие курсы носят узконаправленный характер. Изучая программирование в данной школе, ученики добиваются внушительных результатов уже через 3 месяца обучения. И это не смотря на то, что сами курсы могут длиться до двух лет. Так как программирование относится к технической части образования, школа позволила себе приобщить преподавателей из Европы. Именно поэтому данные курсы множество раз получали премии и награды в области онлайн-образовании.

Xyz school

Школа обучает программированию и профессиям будущего на основе онлайн игр. Мы рассмотрим только основное, всё что касается программирования. Если вам захочется посмотреть весь спектр курсов школы, то вы можете изучить материалы более детальней на их сайте.

Программирование сильно продвинулось в сфере онлайн-игр. Лучшим доказательством этому стали комиссионные которые получают разработчики. Курсы от School XYZ отвечают сегодняшним требованиям, и выносят программирование на широкую массу. При этом, создавая хорошие кейсы они не забыли о своей прямой обязанности — учить студентов так, чтобы было интересно и прибыльно в обозримом будущем.

Блоги

Подкасты можно назвать голосовой версией блога, хотя и в самих блогах никто не мешает использовать и подкасты, и видео, и текст.

Бонусы от анализа coverage

Из отчёта сразу видно, что не протестирован путь, в котором разрешение спрашивается у отца. Отсюда очевидная польза от анализа покрытия: в условиях неприменения TDD отчёт может показать, что мы забыли что-то протестировать.

Второе возможное применение — автоматическое обеспечение “качества” коммитов. CI-сервер может отбраковывать коммиты, которые приводят к снижению total coverage, резко снижая вероятность появления в репозитории непротестированного кода.

Все онлайн-школы программирования и их курсы

Программированию в разных направлениях обучают специализированные онлайн-школы. Обучение, в основном происходит в видео формате. Курсы могут быть как платными, так и бесплатными (короткие вводные курсы). Прохождение одного курса может потребовать от вас несколько месяцев упорного старания. Также, обычно у платного курса будет свой личный наставник, который ответит на все интересующие вас вопросы. После того как вы пройдёте определённый этап курса, HR-специалисты начнут готовить вас для трудоустройства. Они помогут составить профессиональное резюме и дадут правильные советы. А после пройденного курса, вам будет выдан сертификат об окончании. Это свидетельство того, что вы прошли полный цикл учёбы и что программирование для вас не является пустым звуком.

Мы постарались представить как можно больше школ, которые обучают программированию на разных уровнях подготовки. Вы без проблем сможете найти именно то обучение и тот курс, который подойдёт вашему уровню программирования. В нашем списке представлены как платные, так и бесплатные занятия онлайн. Сохраняйте себе в закладки, чтобы не потерять!

Где изучать ruby и ruby on rails в 2021 году?

Учебные материалы доступны в любой форме: аудио, видео, блоги и сайты, курсы онлайн-университетов или книги. Начнём с классики, т.е. с образовательных онлайн-платформ.

Для чего нужен ruby

Так как Ruby — скриптовый язык, то его можно применять вообще в любых сферах разработки. Например, можно написать парсер страниц, который будет находить на сайте интернет-магазина все карточки товаров и скачивать их название, цену и фото. Или можно сделать генератор сложных паролей для всех посетителей сайта, чтобы им не приходилось придумывать его самостоятельно.

И многое, многое другое

В целом, использование ГОСТовых алгоритмов не отличается от использования, например, RSA. Поэтому все материалы в интернете, такие как Ruby OpenSSL Cheat Sheet вам помогут. Я же, кажется, сказал всё, что знал.

Важно заметить, что OpenSSL (и, соответственно, Ruby) пока что поддерживает только старые алгоритмы: **ГОСТ 28147-89** (симметричное шифрование), **ГОСТ Р 34.11-94** (алгоритм хэширования) и **ГОСТ Р 34.10-2001** (асимметричное шифрование и цифровая подпись).

Патчи для поддержки новых алгоритмов уже отправлены в OpenSSL кем-то, видимо, очень крутым, по имени Дмитрий Ольшанский и на них можно посмотреть на гитхабе: openssl/openssl#68 и openssl/openssl#75, так что ждём и надеемся, что примут.

Как выбрать лучший курс по программированию?

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

  • Какие цели вы преследуете, изучая основы программирования?
  • Сколько времени вы готовы тратить на учебный курс?
  • Какое направление программирования вы хотите изучить?

Ответив по крайней мере на эти 3 вопроса, вы с большей вероятностью сможете подобрать самый лучший курс программирования.

На заметку. Если выбор кажется для Вас неочевидным и слишком большим, то обратите внимание на специальные курсы некоторых онлайн-школ. Они ставят перед собой задачу выявить у вас потенциальное желание в категории программирование. Речь идёт о выявлении нужного направления. С их помощью вам станет легче определиться с обучением. Как правило, такие курсы полностью бесплатны и носят непродолжительный временной отрезок (от 2-х. часов до 3-х. дней).

Также, вы можете просмотреть видео Сергея Немчинского, которое сможет вам помочь с выбором направления программирования.

Книги

Если вас не устраивают курсы, всегда можно учиться по книгам. По Ruby и Ruby on Rails их написано довольно много, но хороший русский перевод есть не всегда.

Конвертация ключевых пар в формат, понятный openssl

Свои ключи и самоподписанные сертификаты можно сгенерировать по официальному мануалу.

Однако интерес, конечно же, представляют оригинальные ключевые пары на токене (скорее всего), либо же в виде папочки с шестью файлами или образа дискеты.

К сожалению, пока что единственным рабочим вариантом экспортировать ключи в нужный формат является утилита P12fromCSP от Лисси-софт. К сожалению, только под Windows и платная. Придётся покупать, но перед этим демо-версией программы можно проверить, поможет ли она вам в принципе.

Вам понадобится машина с Windows и Крипто Про. Силами Крипто Про устанавливаете сертификат из ключевого носителя в систему. Если ключи у вас в виде папки с файлами, создайте виртуальную дискету и скопируйте их туда, эту дискету Крипто Про распознает, как ключевой носитель.

После установки сертификата убедитесь, что он есть в системе (ярлык «Сертификаты» есть в «Пуске» в папке с Крипто Про). И запустите утилиту, она должна показать список, а в нём ваш сертификат, выбираете его и сохраняете в файл (на этом-то этапе утилита и попросит кушать).

Если вы всё сделали верно, но сертификат не отобразился в утилите, то тут возможны две причины:

  1. У вас токен типа «смарт—карта». Закрытый ключ невозможно экспортировать физически. Увы.
  2. Ключ помечен как неэкспортируемый, утилита откажется его экспортировать. Есть ли возможность это обойти — не знаю.


Полученный файлик с раширением .p12 или .pfx тащите на машину с OpenSSL и вытаскиваете из него сертификат и закрытый ключ следующими командами:

Сертификат: openssl pkcs12 -engine gost -in gost.pfx -clcerts -nokeys -out gost.crt

Закрытый ключ: openssl pkcs12 -engine gost -in gost.pfx -nocerts -nodes -out gost.pem

Вот теперь можно и работу работать!

Курсы

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

  1. Udemy. Англоязычный онлайн-университет с огромным выбором курсов. Например, этот предлагает слушателям подборку лекций и шесть веб-приложений в портфолио. Есть курсы по созданию конкретного проекта, например, интернет-магазина.
  2. Codecademy. Англоязычный онлайн-университет с возможностью подписки Pro. За 10 часов обучения студентам предлагается освоить язык Ruby и фреймворком Ruby on Rails в процессе создания восьми веб-приложений. Без Pro-подписки доступна теория и краткая практика, а платный вариант предполагает доступ к дополнительной аналитике и отдельному чату с подписчиками, а также эксклюзивные курсы и полностью готовые проекты для портфолио.
  3. GeekBrains. Российская образовательная онлайн-платформа предлагает обучение на факультете Ruby on Rails. Обещают только качественные знания, присмотр опытных кураторов и диплом после успешного завершения курса. В процессе обучения студенты создают собственные репозитории на GitHub с рабочими проектами для портфолио. Онлайн-площадка помогает выпускникам с трудоустройством.
  4. Thinknetica. Русскоязычный онлайн-университет предлагает собственную платформу для изучения и обещает сосредоточиться на практических навыках.
  5. Gorails. Посвящённый Ruby on Rails сайт открыл бесплатный обучающий курс, где требуется знание не только Ruby, но и CSS/Javascript. Есть и отдельные платные курсы. Обучение ведётся в формате видеогайдов, сертификаты не выдаются.
  6. Хекслет. Русскоязычный онлайн-университет. Вместо сертификатов предлагаю собственные баллы сайта, демонстрирующие общий уровень знаний студента. Обучение строится на видеоуроках с выполнением тестов.
  7. RailsGuides. Не совсем онлайн-университет, но сборник разнообразных гайдов по Ruby on Rails. Большая библиотека под разные версии фреймворка, есть даже возможность самостоятельно поучаствовать в разработке гайдов.
  8. На habr есть неплохой план обучения со ссылками на используемые ресурсы.

Курсы и вебинары ruby association в специалисте

Центр компьютерного обучения «Специалист» при МГТУ им. Н.Э. Баумана первым в России начал преподавание Ruby & Ruby on Rails на курсах «Ruby. Уровень 1. Основы программирования на языке Ruby» и «Ruby. Уровень 2. Создание интернет – приложений в среде Ruby on Rails».

Успешное окончание курса подготовит Вас к сдаче международного сертификационного экзамена RY0-100 – Ruby Association Certified Ruby Programmer Silver.

Ruby on Rails — фреймворк, написанный на языке программирования Ruby. Ruby on Rails предоставляет архитектурный образец Model-View-Controller (модель-представление-контроллер) для веб-приложений, а также обеспечивает их интеграцию с веб-сервером и сервером базы данных.
Ruby on Rails может работать с Apache, Lighttpd или любым другим веб-сервером, поддерживающим FastCGI. Для разработки и отладки приложений часто используется веб-сервер WEBrick, встроенный в Ruby, или Mongrel. При использовании в качестве сервера базы данных поддерживаются MySQL, Firebird, PostgreSQL, DB2, Oracle и Microsoft SQL Server, а также встраиваемая база данных SQLite.
Для разработки AJAX-приложений в Ruby on Rails по умолчанию используется javascript-фреймворк jQuery, однако вместо него можно использовать и другие.

Вокруг Ruby on Rails сложилась большая система разнообразных плагинов, в том числе:

На Ruby on Rails созданы многие популярные сайты, такие, например, как Твиттер, Basecamp, GitHub, Hulu, Scribd, Shopify, Yellowpages.com, Danbooru, Groupon, Look At Me и многие другие.

Воспользуйтесь предложением Центра «Специалист» – изучите Ruby & Ruby on Rails и станьте сертифицированным специалистом Ruby!

Настройка openssl

Для того, чтобы всё, связанное с ГОСТовыми алгоритмами работало, необходим настроенный OpenSSL, версии 1.0.0 или новее. В Linux есть «из коробки», в OS X надо ставить из HomeBrew (потому что Apple — слоупоки):

brew install openssl
brew link --force openssl

Как настраивать OpenSSL для ГОСТ в интернете писали много-много раз, я же рекомендую воспользоваться оригинальным мануалом: README.gost

Нетология

Одна из ведущих школ в российском интернет-пространстве. Нетология помогает ученикам в сфере программирования по трём основным пунктам:

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

Общее

Для того, чтобы всё, связанное с ГОСТовыми алгоритмами работало в Ruby, необходимо сначала «завести» OpenSSL-вский движок gost, вот так:

require 'openssl'
OpenSSL::Engine.load
@gost_engine = OpenSSL::Engine.by_id('gost')
@gost_engine.set_default(0xFFFF) # Решительно не знаю, что бы это значило, но без него не работает

После выполнения этого магического куска кода, все дальнейшие примеры начнут работать. Переменная @gost_engine нам ещё понадобится.

Подкасты

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

  1. RoR Podcast. Еженедельный подкаст о новинках в среде от Бриттани Мартин.
  2. The Ruby Rogues. Еженедельный подкаст действующих разработчиков. Здесь обсуждается всё: от новинок в программировании до влияния RoR на жизнь и карьеру.
  3. Remote Ruby. Еженедельный подкаст во время которого ведущие Крис Оливер и Джейсов Чарнес обсуждают друг с другом Ruby и часто приглашают в гости других разработчиков.
  4. Drifting Ruby. Это не совсем обычный ежемесячный подкаст – здесь каждый эпизод посвящён конкретной технике, поэтому больше ориентирован не на обучение с нуля, а на изучение одной из возможностей фреймворка. Максимальную пользу получат разработчики среднего уровня, но и новички, а также профи тоже смогут узнать что-то новое.
  5. GoRails. Ежемесячный подкаст одноимённого сайта. Получается неплохая экосистема: на сайте есть видео и теория, на машине учащегося – практика, а подкаст позволит взглянуть на это всё под другим углом.

Подопытный проект

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

# Мама очень заботится о своём сыне, и не разрешает ему гулять,
# если он не надел шарф. А ещё она заботится о его успеваемости, поэтому если
# сын не сделал домашнюю работу, гулять ему она тоже не разрешит.
class Mother
  def permit_walk?(child)
    child.scarf_put_on && child.homework_done
  end
end
# Отец тоже следит за тем, чтобы шарф был надет, но не так трепетно относится к учёбе.
class Father
  def permit_walk?(child)
    child.scarf_put_on
  end
end
# Сын любит и уважает родителей, поэтому никогда не уходит гулять,
# не спросив разрешения. Спрашивать он может и у мамы, и у папы.
# Ну и, конечно, он может одеваться и делать ДЗ.
class Child
  attr_reader :homework_done, :scarf_put_on

  def initialize(mother, father)
    @mother = mother
    @father = father
    @homework_done = false
    @scarf_put_on = false
  end

  def do_homework!
    @homework_done = true
  end

  def put_on_scarf!
    @scarf_put_on = true
  end

  def walk_permitted?(whom_to_ask)
    parent =
      if whom_to_ask == :mother
        @mother
      else
        @father
      end      
    parent.permit_walk?(self)
  end
end

Покрываем тестами и смотрим покрытие

Тесты намеренно покрывают не все сценарии:

require "simplecov"
SimpleCov.start

require "rspec"
require_relative "../lib/mother"
require_relative "../lib/father"
require_relative "../lib/child"

RSpec.describe Child do
  let(:child) { Child.new(Mother.new, Father.new) }

  context "when asking mother without scarf and without homework" do
    it "isn't permitted to walk" do
      expect(
        child.walk_permitted?(:mother)
      ).to be false
    end
  end

  context "when asking mother with scarf and with homework" do
    it "is permitted to walk" do
      child.put_on_scarf!
      child.do_homework!
      expect(
        child.walk_permitted?(:mother)
      ).to be true
    end
  end
end

SimpleCov — фактически монополист в области анализа покрытия в мире Ruby 1.9.3 . Он является удобной обёрткой над модулем Coverage из стандартной библиотеки.

Подключение сводится к двум строкам в начале файла с тестами, при этом важно, чтобы инициализация SimpleCov проводилась до подключения файлов проекта. Запускаем тесты:

rspec

Voilà! Сгенерировался файл отчёт coverage/index.html. Посмотреть его можно по ссылке, а здесь я оставлю пару скриншотов, чтобы далеко не ходить (общий отчёт используется в качестве заглавной картинки).

173 самых лучших онлайн-курсов программирования [2021] с нуля
father.rb173 самых лучших онлайн-курсов программирования [2021] с нуля
Выдержка из child.rb

Послесловие

Я предпочитаю писать тесты сразу же после написания кода, и coverage служит мне напоминалкой о ещё не протестированных методах (частенько забываю потестить обработчики исключений). В общем, анализ покрытия вполне может приносить определённую пользу, но 100%-е покрытие не обязательно говорит о том, что тестов достаточно.

Материалы, используемые в статье:

С чего начать

Для старта вам даже не нужно ничего устанавливать на компьютер — используйте онлайн-интерпретатор onlinegdb или rextester.

Чтобы лучше разобраться в языке или его возможностях, почитайте руководство «Ruby за 20 минут» на официальном сайте Ruby. Единственный момент — это машинный перевод оригинальной статьи, как и всех остальных русскоязычных материалов на этом сайте. Поэтому если знаете английский — лучше сразу читайте на нём.

Если есть желание досконально разобраться в языке, рекомендуем книгу Хэла Фултона «Программирование на языке Ruby» (The Ruby Way).

Сопутствующие источники информации

Для обучения лучше всего использовать все возможные варианты получения информации.

Цифровая подпись xml (в т.ч. soap) сообщений

С этим прекрасно справится gem signer, который, после нескольких pull request’ов, прекрасно подписывает «по ГОСТ». Спасибо Эдгарсу Бейгартсу за создание гема, а также терпение и помощь в процессе приёма pull request’ов.

Вот, например, как подписать с помощью signer’а XML для СМЭВ:

Цифровая подпись куска данных и её проверка

Простая подпись:

pkey = OpenSSL::PKey.read(File.read('gost.pem'))
data = 'Same message'
digester  = @gost_engine.digest('md_gost94')
signature = privkey.sign(digester, data)

Проверка простой подписи:

cert     = OpenSSL::X509::Certificate.new(File.read('gost.crt'))
digester = @gost_engine.digest('md_gost94')
data     = 'Same message'
cert.public_key.verify(dgst94, signature, data)                   # Should be true
cert.public_key.verify(dgst94, signature, data.sub('S', 'Not s')) # Should be false

Создание detached-подписи (привет реестру запрещённых сайтов):

cert   = OpenSSL::X509::Certificate.new(File.read('gost.crt'))
pkey   = OpenSSL::PKey.read(File.read('gost.pem'))
data   = 'Some message'
signed = OpenSSL::PKCS7::sign(crt, key, data, [], OpenSSL::PKCS7::DETACHED)


Проверка detached-подписи с проверкой доверености сертификатов:

cert_store = OpenSSL::X509::Store.new
cert_store.set_default_paths # Этой командой можно подгрузить системные корневые сертификаты
# Если же вам этого не хочется, или вам просто не удаётся без плясок с бубном добавить корневой сертификат в систему (например, вы несчастный пользователь OS X)
cert_store.add_file 'uec.cer' # Позволяет добавить свой корневой сертификат, здесь — корневой сертификат УЭК
data = File.read('исходный-файл')                             # Подписанные данные
signature = OpenSSL::PKCS7.new(File.read('файл-подписи.sig')) # Сама подпись
signature.verify(signature.certificates, cert_store, data, OpenSSL::PKCS7::DETACHED) # Можно за-OR-ить ещё OpenSSL::PKCS7::NOVERIFY, если вам плевать на сертификаты

В заключение

Вот так можно приятно и «нативно» работать с ГОСТовыми ЭЦП и прочим. Это действительно здорово, но как всегда есть «но», и главное из них — вопрос о возможности использования всего этого с правовой точки зрения, так как у нас получается несертифицированная СКЗИ, которую можно использовать не всегда.

К сожалению, вам придётся решать этот вопрос для каждого конкретного случая отдельно, и часто ответом может оказаться «нельзя». Увы. Тут я ничего не могу подсказать, в виду моей слабой правовой грамотности, если кто-то может рассказать лучше (или уже рассказал) — с удовольствием выслушаю или прочитаю.

Если у вас есть дополнения, исправления и вопросы — жду с нетерпением!

Вы не сможите получать единорогов из птиц и конец, но вы получите ослов, если захотите.

Я четко помню, как моя учительница по

C

, использовала животных, для иллюстрации основных концепций объектно-ориентированного программирования — классов и наследования. Было нечто загадачно, когда объясняла нам множественное наследование, образовывая «пегаса» из «птиц» и «лошадей». Сумасшедшие вещи,

Ruby

не позволяет множественного наследования. Это выглядит как тренд и в конце-концов это дело вкуса. Я не в восторге от множественного наследования, так как это может привести к непредсказуемым вещам. Несмотря на это есть возможность создания нечто подобного, используя модули

Ruby

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

Заключение

Ruby был разработан в первую очередь для лёгкого освоения и быстрого вовлечения в работу. Rails полностью поддерживает этот подход, так что его изучение не потребует серьёзного перенапряжения. К тому же язык и фреймворк активно разрабатываются, что даёт им серьёзные перспективы – программисты могут не бояться отсутствия работы через несколько лет. Лёгкость вовлечения только поддержит энтузиазм новичков. Удачи в обучении!

Отзывы учеников которые прошли курсы программирования

Про сертификаты:  Пошаговое руководство по расширенному управлению сертификатами
Оцените статью
Мой сертификат
Добавить комментарий