CS50 IDE

Внимание! Если вы выполняете практические задания в «Виртуальной лаборатории CS50», смело пропускайте этот параграф, проскрольте вниз.

Пришло время для теста! Откройте в Chrome страницу https://ide50-username.cs50.io/, где username — ваше имя (на предыдущем шаге вам этот адрес должен был показаться в командной строке). Вы увидите, что перенаправлены на стартовую страницу C$50 Finance! Если вдруг перед вами возникла строка «Доступ запрещен», это значит, что вы пропустили какой-то из шагов из предыдущей лекции. Попробуйте повторить все шаги, связанные с командой chmod.

Подготовка к практическому заданию. Тестирование (для CS50 IDE и для «Виртуальной лаборатории») - 1

Если вы снова залогинетесь на C$50 Finance с именем (эээмм…) skroob и паролем 12345, то получите ошибку Unknown database. Почему так?

Всё просто: вы не создавали никакую базу данных! В чём вопрос, давайте создадим.

Откройте https://ide50-username.cs50.io/phpmyadmin в отдельной вкладке браузера (username — ваше имя), чтобы зайти на phpMyAdmin, веб-инструмент (который написан на PHP). Здесь вы можете использовать базы данных MySQL.

MySQL — это такая бесплатная, открытая система управления базами данных. Её используют CS50, Facebook и другие сайты.

Зайдите под тем же именем и с тем же паролем, которые вы скопировали в config.json. Вы окажетесь на главной странице phpMyAdmin.

После этого с помощью CS50 IDE откройте ранее загруженный файл pset7.sql. Вы увидите целую кучу SQL (т.е. запросов к базам данных). Выделите их все, а затем выберите Edit > Copy (или нажмите ctrl-c) и вернитесь к phpMyAdmin.

Нажмите на вкладку SQL и вставьте всё, что скопировали, в большое текстовое окно страницы (оно находится под Run SQL query/queries on server «127.0.0.1»). Просмотрите, что вы вставили, чтобы понять суть команд, которые будете выполнять, затем жмите Go.

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

Table 'phpmyadmin.pma_table_uiprefs' does not exist

откройте окно терминала и выполните

sudo dpkg-reconfigure -f, noninteractive phpmyadmin
sudo service apache2 restart

Затем попробуйте вставить и запустить те же SQL-запросы снова. В верхнем левом углу phpMyAdmin будут ссылки на базу данных pset7, под которыми находится ссылка на таблицу users. Правда, последние версии phpMyAdmin полны багов, поэтому, возможно, вам придется перезагрузить страницу. Но об этом позже.

Вернитесь к https://ide50-username.cs50.io/ и перезагрузите страницу. Затем попробуйте залогиниться с именем пользователя skroob и паролем 12345. Вы увидите некую конструкцию.

«Виртуальная лаборатория CS50»

Внимание! Если вы выполняете практические задания в CS50 IDE, смело пропускайте этот параграф.

Пришло время для теста! Откройте Chrome в лаборатории и зайдите на http://pset7/.

Вы увидите, что перенаправлены на стартовую страницу C$50 Finance! Если вдруг перед вами возникла надпись «Доступ запрещен», это значит, что вы пропустили какой-то из шагов в предыдущей лекции. Попробуйте повторить все шаги, начиная с chmod.

Если вы снова залогинетесь в C$50 Finance с именем, эээмм, skroob и паролем 12345, то получите ошибку Unknown database. Почему так? Всё просто: вы ведь не создавали никакую базу данных! В чём вопрос, давайте создадим.

Перейдите к http://pset7/phpmyadmin, используя Chrome внутри «Виртуальной лаборатории», чтобы зайти на phpMyAdmin, веб-инструмент (который написан на PHP). Здесь вы можете пользоваться базами данных MySQL.

MySQL
— это такая бесплатная, открытая система управления базами данных. Её используют CS50, Facebook и другие сайты.

Зайдите под именем John Harvard (с именем пользователя jharvard и паролем crimson). Вы окажетесь на главной странице phpMyAdmin.
В отдельной вкладке (снова из Chrome в «Лаборатории») зайдите на http://cdn.cs50.net/2015/fall/psets/7/pset7/pset7.sql?download, чтобы загрузить файл pset7.sql.

После того откройте файл в gedit (в левом нижнем углу браузера или выбрав File > Open … в gedit и перейдите к Downloads). Вы увидите целую кучу SQL-запросов, то есть, запросов к базам данных. Выделите их все, а затем выберите Edit > Copy (или нажмите ctrl-c), а затем вернитесь к phpMyAdmin.

Нажмите на вкладку SQL и вставьте всё то, что скопировали, в большое текстовое окно страницы (оно находится под Run SQL query/queries on server «localhost»). Пробегитесь глазами по запросам, чтобы понять суть команд, которые будете выполнять, затем нажмите Go. Перед вами должен появиться зеленый баннер, в таком случае все прошло отлично. Если же произошла ошибка, и вы видите

Table 'phpmyadmin.pma_table_uiprefs' does not exist

откройте окно терминала и выполните

sudo dpkg-reconfigure -f, noninteractive phpmyadmin
sudo service apache2 restart

Затем попробуйте вставить и запустить те же SQL-запросы снова. В верхнем левом углу phpMyAdmin вы увидите ссылки на базу данных pset7, под которым находится ссылку на таблицу под названием users. Правда, последние версии phpMyAdmin полны багов, поэтому, возможно, вам придется перезагрузить страницу. Но об этом позже.

Вернитесь к http://pset7/ через Chrome «Виртуальной лаборатории» и перезагрузите страницу. Затем попробуйте залогиниться с именем пользователя skroob и паролем 12345.

Chmod (для CS50 IDE и «Виртуальной лаборатории CS50»)

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

Каждый раз, когда вы создаете новый файл или папку в ~ /vhosts/pset7 («Лаборатория), ~/workspace/pset7 (CS50 IDE) или глубже, вы захотите установить разрешение используя chmod. До этого момента мы полагались на a + r и a + x, но пришла пора для более продвинутых способов установки доступа.

Для любого PHP-файла, который вы создаете, выполните команду:

chmod 600 file

тем самым вы сделаете его доступным только вам (и веб-серверу рабочего пространства). Нам не нужно, чтобы посетители видели содержимое PHP-файлов, нам нужно, чтобы они видели результат выполнения PHP-кода веб-сервером CS50.

Для всех создаваемых (или загруженных) вами не-PHP файлов, выполните команду:

chmod 644 file

это откроет доступ через браузер (если таково было ваше намерение).

А для любой директории, которую создаете, выполните

chmod 711 directory

для того, чтобы и её содержимое стало доступным через браузер.
У вас, наверное, возник вопрос, что это за цифры, и зачем их писать?

600 значит rw- --- ---.  Эта команда делает все PHP-файлы доступными для чтения и записи только для вас.
644 значит rw-r--r--. Все PHP-файлы становятся доступными для чтения всем и для записи — только вам.
711 означает rwx--x--x, то есть все директории становятся доступными для выполнения всем, для чтения и записи — вам. 

Почему мы не хотим, чтобы каждый мог прочитать код вашего PHP-файла? Это сделано для безопасности веб-страницы, основанные на PHP, интерпретируются как «as you». Например, привязанными к имени John Harvard в «Лаборатории» или к вашему имени в CS50 IDE.

Давайте ещё немного разберёмся с цифрами и их обозначениями. Считайте rw-r— r— представлением трёх триплетов бит. Первый из них, чтобы было ясно, — это rw-. Представьте, что «-» представляет ноль, а r, w, и x представляют единицу. Таким образом тройка (rw-) — это просто 110 в бинарной системе или 6 в десятичной! Другие два триплета, r— и r— одинаковы и оба будут равны 100 бинарной и 4 в десятичной! Как тогда выразить rw-r—r— в цифрах? 644.

На самом деле в этом утверждении есть невинная хитрость. Сейчас самое время оправдаться: легко можно понять, что в трех битах можно закодировать только 8 возможных значений. И на самом деле эти цифры (6, 4 и 4) не десятичные, а восьмеричные. Так что смело хвастайтесь перед друзьями, что вы владеете не только бинарными, десятичными и шестнадцатеричными числами, но и восьмеричными.

Yahoo!

Если вы никогда не задумывались об инвестировании и о том, как покупать и продавать акции и что вообще это значит, изучите пособие http://www.investopedia.com/university/stocks/ (на английском). На русском есть сайт http://investassist.ru/university.

Скоро вы запустите C$50 Finance, веб-инструмент, с помощью которого можно анализировать инвестиционные портфели акций. Этот инструмент позволяет вам проверять реальные актуальные цены акций и значение инвестиционного портфеля, а также покупать и продавать (точнее, «покупать» и «продавать») акции! Yahoo мелким шрифтом поясняет: «Котировки поступают с задержкой (в несколько минут), если не указано иное».

Как-то раз я услышал об интересной «копеечной акции» с ироничным биржевым кодом FREEF! Давайте посмотрим на неё. Заходите на Yahoo! Finance http://finance.yahoo.com/ и наберите название для FreeSeas Inc., FREEF в текстовом поле, находится в верхнем левом углу и выберите Get Quotes. Вы увидите примерно такую таблицу:

Подготовка к практическому заданию. Тестирование (для CS50 IDE и для «Виртуальной лаборатории») - 2

Вы можете сохранить данные с Yahoo Finance для дальнейшей работы. Для этого вам нужно ввести в браузере строку:
chartapi.finance.yahoo.com/instrument/1.0[TICKER]/chartdata;type=quote;range=[DAYS]d/csv

где

[TICKER] — биржевой код;
[DAYS]: Запрашиваемый объем данных в днях.

Для нашей FREEF строка будет следующей:

https://chartapi.finance.yahoo.com/instrument/1.0/FREEF/chartdata;type=quote;range=1d/csv

В браузере вы увидите примерно такие сводки:

uri:/instrument/1.0/FREEF/chartdata;type=quote;range=1d/csv
ticker:freef
Company-Name:FREESEAS INC COM USD0.001(POST 
Exchange-Name:PNK
unit:MIN
timezone:EDT
currency:USD
gmtoffset:-14400
previous_close:0.0099
Timestamp:1492435800,1492459200
labels:1492437600,1492441200,1492444800,1492448400,1492452000,1492455600,1492459200
values:Timestamp,close,high,low,open,volume
close:0.0078,0.0122
high:0.0080,0.0122
low:0.0078,0.0122
open:0.0080,0.0122
volume:1000,400000
1492436166,0.0100,0.0100,0.0100,0.0100,1600
1492436331,0.0093,0.0093,0.0093,0.0093,2000
1492436830,0.0100,0.0100,0.0100,0.0100,40400
1492437264,0.0100,0.0100,0.0100,0.0100,106600
1492437474,0.0100,0.0100,0.0100,0.0100,61200
1492437508,0.0100,0.0100,0.0099,0.0099,274500
1492437586,0.0120,0.0120,0.0120,0.0120,1000
1492437862,0.0100,0.0100,0.0100,0.0100,70000
1492437945,0.0100,0.0100,0.0100,0.0100,5200
1492437988,0.0122,0.0122,0.0122,0.0122,30000
1492438032,0.0122,0.0122,0.0122,0.0122,50000
1492441289,0.0120,0.0120,0.0120,0.0120,20000
1492441449,0.0101,0.0101,0.0101,0.0101,38000
1492441574,0.0100,0.0100,0.0100,0.0100,65800
1492441802,0.0101,0.0101,0.0101,0.0101,62000
1492443124,0.0120,0.0120,0.0120,0.0120,1500
1492443551,0.0093,0.0101,0.0093,0.0101,400000
1492444679,0.0090,0.0096,0.0090,0.0096,89700
1492444691,0.0095,0.0095,0.0091,0.0091,209300
1492445343,0.0078,0.0080,0.0078,0.0080,10000
1492447584,0.0100,0.0100,0.0100,0.0100,1900
1492458869,0.0100,0.0100,0.0100,0.0100,10000

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