Новое начало, часть 17

НЕДЕЛЯ 14: ПЕРЕСМОТР РУБИНОВЫХ ВЫЗОВОВ… В JAVASCRIPT!

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

Мы погружались в воду JavaScript, и теперь мы создаем целое приложение, которое все происходит на одной странице. (Это приложение «список дел», и вместо того, чтобы переходить к множеству разных страниц, все использует волшебную способность JavaScript изменять то, что появляется на странице ПОСЛЕ того, как оно уже там, и без необходимости перезагрузки страницы. Головоломка!)

Чтобы подготовиться к этому, мы пересмотрели некоторые из первоначальных задач, которые были встроены в первоначальный двухнедельный курс «Посмотрите, хотите ли вы это сделать», например, распечатать последовательность «foobar» для любого числа, или старый любимый способ преобразования температуры в градусах Фаренгейта в температуру в градусах Цельсия. За исключением того, что сейчас мы пишем код для этого на JavaScript.

Когда я сделал это так, как предложили люди из Firehose, моя программа заработала… вроде того. Но вывод был, возможно, немного неуклюжим:

«Введите градусы по Фаренгейту: 84».

«Сейчас 28,912000000000003 градуса Цельсия».

Я погуглил «до 2 знаков после запятой» и обнаружил, что точное округление числа до 2 знаков после запятой на самом деле является нетривиальной задачей для компьютера из-за того, как компьютеры хранят числа с плавающей запятой. (Интересно, что JavaScript не различает целые числа и числа с плавающей запятой — числа с десятичной точкой — как это делает Ruby.)

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

var градусы по ФаренгейтуTo2 = (Math.round((градусы по Фаренгейту) * 100)/100.toFixed(2));

Это впечатляет или что? Я не могу ПОВЕРИТЬ, что несколько недель назад я бы совершенно не понимал, что означает вся эта чепуха. Сейчас это даже кажется чем-то разумным. Думаю, я действительно чему-то учусь.

По крайней мере, так казалось до тех пор, пока в пятнадцатый или около того раз на этой неделе некоторый код, в котором я был УВЕРЕН, не работал… потому что СНОВА я забыл сохранить файл!

НЕДЕЛЯ 15: МИЛЛИОН ПОСЛЕДОВАТЕЛЬНОСТЕЙ КОЛЛАЦА, ОДНОСТРАНИЧНОЕ ПРИЛОЖЕНИЕ НА JAVASCRIPT И ПУСТЬ ВУКИ ПОБЕДИТ!

Я начал неделю, довольный тем, что мне пришлось перенести расписание с моим наставником, потому что мне удалось выяснить для себя, как добавить ссылку в мое приложение видеокурсы, чтобы перейти от одного урока к предыдущему уроку, обратив команду SQL, которую мы сказали использовать, чтобы перейти к СЛЕДУЮЩЕМУ уроку, а мы даже не познакомились с SQL! (Если вы потратите несколько секунд на регистрацию — ваш адрес электронной почты ни для чего не будет использован! — пример ссылки, которую я придумал, можно посмотреть Здесь.)

Когда я встретился со своим наставником, он объяснил, что в своей основе SQL довольно прост: почти каждый SQL-запрос в основном представляет собой «выбрать что-то из чего-то, где что-то…», например, из таблицы с именами в ней, чтобы получить первые имена. всех, чья фамилия foobar, «Выберите имя из имен, где фамилия = foobar». Все, что вы делаете, это строите на сложности этого. Главным образом…

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

А что такое последовательность Коллатца? Возьмите любое число. Если оно четное, разделите число на 2. Если число нечетное, умножьте его на 3 и прибавьте 1. Теперь возьмите полученное число и проделайте то же самое: если оно четное, разделите число на 2. Если число нечетное , умножьте на 3 и прибавьте 1. Продолжайте в том же духе. Математики ДУМАЮТ, но не уверены, что в конечном итоге вы получите 1. (Эта гипотеза была проверена с точностью до очень больших чисел, но ее на удивление трудно доказать.)

Во всяком случае, чтобы написать мою программу (задание Firehose), я закончил тем, что мой компьютер фактически вычислял каждую последовательность Коллатца (многие из которых содержат сотни членов) для КАЖДОГО числа от 1 до миллиона. И мой маленький настольный компьютер сделал это примерно за ДЕСЯТЬ СЕКУНД! Вот что он должен был сказать: «Самая длинная последовательность коллатца для числа от 1 до 1 000 000 составляет 524 шага для числа 837799».

Это действительно впечатлило меня. По какой-то причине, может быть потому, что вычисление всех этих последовательностей — это то, что я могу себе представить, и у меня есть приблизительное представление о том, сколько времени это займет у меня, это сделало меня РЕАЛЬНЫМ, насколько мощными стали наши компьютеры!

Еще два важных шага, которые я предпринял на этой неделе:

Сначала я завершил «Одностраничное приложение», которое мы написали на JavaScript. Как вы, возможно, помните, это способ отслеживать список дел, который обновляет список, когда новый элемент добавляется или завершается «на лету», без обновления страницы.

Поскольку я действительно хотел ИСПОЛЬЗОВАТЬ приложение, я хотел заставить его делать что-то, что не было включено в наши уроки. Вместо добавления нового элемента в самый низ списка всех элементов, которые когда-либо были в списке, я хотел вытащить только «активные» элементы и составить их список.

Чтобы сделать это, я начал с выяснения того, как вытащить только те элементы, которые были завершены (я написал функцию, которая перебирала задачи, и если свойство «выполнено» было «истинным» для данного элемента, я добавлял элемент в список). список, который будет добавлен на страницу вместо списка, который был там в данный момент.) Затем, не зная, действительно ли JavaScript работает таким образом, я снова сделал то же самое, сказав, что если свойство «done» было «false», чтобы добавить элемент в другой список.

Затем я сделал две кнопки для размещения на странице с классом HTML «активный» и «завершенный», чтобы я мог настроить «обработчик кликов» JavaScript для запуска соответствующей функции, когда пользователь нажимал «Активные элементы» или « Кнопка «Завершено». (Затем я сделал то же самое и для элементов «Все».) Это сработало!

С помощью Кена я также модифицировал приложение, чтобы в списке всех элементов активные элементы были вверху, а не в порядке их создания, и вуаля — приложение стало намного полезнее. Он работает, и я использую его каждый день. (Вы можете проверить это, нажав Здесь.)

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

Я действительно взволнован.

Мы разделили первоначальные задачи, и я сразу же обнаружил, что был слишком амбициозен. Одна задача — настроить базовое приложение для всех нас, чтобы добавить в него функциональность — была простой. Но руководитель нашей группы Джейкоб пригласил всех, кто заинтересован, помочь настроить непрерывную интеграцию (Travis CI), чтобы протестировать наш код по ходу работы и развернуть его на сайте heroku, когда он заработает, а Rubocop — для проверки стиля нашего кода.

Трэвис CI, оказывается, НАМНОГО выше моей головы. Так что я с благодарностью вернул это Джейкобу. Тем не менее, Rubocop я почти понял, так что я продвигаюсь вперед.

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

Это будет взрыв!

НЕДЕЛЯ 16: ЗАТЕРЯННЫЕ В СОРНЯХ ВОПСА

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

Это не так.

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

Джейкоб был великолепен. Он прислал мне сообщение о том, что я «невероятно близок», а затем присоединился ко мне в Google Hangout, чтобы сделать последние шаги.

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

Вместо этого мне пришлось вводить команды из веб-терминала с прямым доступом к моему обычному компьютеру. Когда я это сделал, все начало работать!

(Подробнее… нажмите здесь!)