Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: b8b08cab82
Fetching contributors…

Cannot retrieve contributors at this time

1139 lines (784 sloc) 28.961 kb
0:00:03.630,0:00:07.430
Привет и добро пожаловать на канал. В этот раз
я собираюсь потратить пятнадцать минут
0:00:07.430,0:00:09.919
и создать небольшой движок для блога.
0:00:09.919,0:00:10.950
Я собираю использовать
0:00:10.950,0:00:14.959
Perl Dancer в качестве фреймворка
который можно найти здесь:
0:00:14.959,0:00:16.439
perldancer.org
0:00:16.439,0:00:21.849
и конечно же Padre
и Padre на Strawberry
0:00:22.869,0:00:24.499
И всё это под Windows.
0:00:24.499,0:00:29.410
Нам нужно... Давайте запустим
Strawberry Perl ... Padre
0:00:29.410,0:00:34.030
Нам нужен редактор и когда мы его открываем
то получаем пустую страницу.
0:00:34.030,0:00:40.850
Dancer поставляется с приложениями для командной строки
которые позволяют создать скелет приложения.
0:00:40.850,0:00:43.430
Для этого нужно
0:00:43.430,0:00:45.690
Запустить
0:00:45.690,0:00:50.130
cmd и поменять каталог
0:00:50.130,0:00:51.110
на рабочий
0:00:51.110,0:00:56.160
Я собираюсь создать скелет приложения,
я набираю "dancer -a" и
0:00:56.160,0:00:58.480
имя приложения
0:00:58.480,0:01:00.380
которому я дал имя Dwimmer
0:01:02.330,0:01:04.560
как какого-нибудь... мага
или что-то в этом роде
0:01:04.560,0:01:08.040
Итак, я назову приложение
Dwimmer
0:01:09.050,0:01:12.970
При запуске этого скрипта создастся
подкаталог для
0:01:12.970,0:01:18.400
приложения и различных файлов
которые являются скелетом приложения.
0:01:18.400,0:01:23.680
Если зайти в этот каталог и набрать perl bin
0:01:23.680,0:01:24.640
и имя
0:01:24.640,0:01:29.750
app.pl и запустить приложение.
Это дейтвие запустит скелет
0:01:29.750,0:01:35.750
Можно зайти в браузер и набрать localhost:3000
0:01:35.750,0:01:40.040
и мы получаем стандартную страницу
которую создал для нас Dancer.
0:01:40.040,0:01:41.740
Как она вам?
0:01:41.740,0:01:47.610
Перейду к Padre и открою файл
0:01:49.400,0:01:55.380
Файл в рабочей директории
0:01:55.380,0:01:56.330
Dwimmer
0:01:56.330,0:01:59.509
здесь каталог bin и в нём app.pl
0:01:59.509,0:02:02.469
Скрипт практически пуст, как видите
0:02:02.469,0:02:04.940
он лишь запускает модуль Dwimmer
0:02:04.940,0:02:08.419
модуль Dwimmer находится в директории lib.
Для удобства
0:02:08.419,0:02:11.399
откроем браузер проектов
0:02:11.399,0:02:14.279
и Padre автоматически распознает Perl проект
0:02:15.569,0:02:19.700
Итак, в каталоге lib лежит
Dwimmer.pm
0:02:19.700,0:02:23.900
это определяет, что
0:02:23.900,0:02:27.250
когда пользователь приходит с
GET-запросом
0:02:27.250,0:02:28.450
на главную страницу
0:02:28.450,0:02:30.920
должна быть запущена подпрограмма
0:02:30.920,0:02:34.259
которая загружает шаблон главной страницы.
Шаблоны расположены
0:02:34.259,0:02:37.620
в подкаталоге views и
index.tt
0:02:37.620,0:02:39.749
это наш шаблон
0:02:41.769,0:02:44.629
Dancer поставляется с очень простой
системой шаблонов,
0:02:44.629,0:02:46.720
но я уже установил
0:02:46.720,0:02:48.859
Template::Toolkit
0:02:48.859,0:02:52.939
который идет вместе с Padre на Strawberry Perl
Для начала
0:02:52.939,0:02:55.829
хотелось бы изменить
систему шаблонов.
0:02:55.829,0:02:58.430
Это можно сделать в файле config.yml
0:02:58.430,0:03:01.779
что в коренной директории приложения.
0:03:01.779,0:03:05.869
Можете видеть что здесь прописан шаблон simple
0:03:05.869,0:03:09.599
а я хотел бы использовать
Template::Toolkit
0:03:09.599,0:03:10.760
и здесь же
0:03:10.760,0:03:14.739
я определяю что кодировка utf-8.
0:03:14.739,0:03:19.529
Тэги начала и конца я оставляю какими они были по умолчанию в Dancer
0:03:19.529,0:03:22.259
которые выглядят
0:03:22.259,0:03:24.479
как <% %>
0:03:24.479,0:03:26.989
я их оставляю такими.
0:03:26.989,0:03:30.489
Теперь я настроил это, и надо посмотреть всё ли работает
0:03:30.489,0:03:33.899
Я останавливаю приложение, перезапускаю
0:03:33.899,0:03:36.139
и возвращаюсь в браузер
0:03:36.139,0:03:40.940
То что мы видели раньше было разными видами значений
0:03:40.940,0:03:44.099
которые приходили от
0:03:44.099,0:03:47.160
систем шаблонов. Я перезагрузил страницу
и вижу то же самое
0:03:47.160,0:03:49.790
Всё впорядке.
0:03:49.790,0:03:50.979
Теперь
0:03:50.979,0:03:53.599
Мне не нужен весь этот хлам
0:03:53.599,0:03:55.279
в стандартном виде Dancer
0:03:55.279,0:03:58.489
я перехожу в шаблон главной страницы
0:03:58.489,0:04:00.670
удаляю всё и вместо этого
0:04:00.670,0:04:02.029
пишу hello
0:04:02.029,0:04:03.849
и
0:04:03.849,0:04:08.569
И я предлагаю пользователю перейти на эту страницу
0:04:08.569,0:04:13.019
чтобы создать пост
0:04:13.019,0:04:13.869
Окей
0:04:13.869,0:04:17.029
Итак, это то что я собираюсь делать
0:04:17.029,0:04:18.919
и...
0:04:18.919,0:04:20.630
если перезагрузить страницу
0:04:20.630,0:04:25.889
у нас здесь: hello и
ссылка на создание поста
0:04:25.889,0:04:29.009
которая должна вести на страницу page.
0:04:29.009,0:04:32.539
При переходе по ней я получаю ошибку
404 потому что никто
0:04:32.539,0:04:34.129
еще не определил
0:04:34.129,0:04:34.949
что делать
0:04:34.949,0:04:36.680
если кто-то попадёт на эту страницу.
0:04:36.680,0:04:40.529
и это следуещее что нужно сделать.
Возвращаемся к модулю
0:04:40.529,0:04:42.009
и определяем
0:04:42.009,0:04:43.600
что когда кто-то..
0:04:43.600,0:04:45.259
посылает GET-запрос
0:04:45.259,0:04:47.560
этой страницы,
0:04:47.560,0:04:49.759
нужно запустить подпрограмму
0:04:49.759,0:04:51.710
которая находится здесь
0:04:51.710,0:04:54.330
и
0:04:54.330,0:04:56.880
загрузить шаблон который называется
0:04:56.880,0:04:58.849
"page" в нашем случае.
0:04:58.849,0:05:03.909
Нужно заполнить этот шаблон
и мы возвращаемся к index.tt
0:05:03.909,0:05:05.610
и
0:05:05.610,0:05:07.229
сохраняем
0:05:07.229,0:05:12.620
как "page.tt" и вместо вот этого..
0:05:12.620,0:05:14.720
хотелось бы иметь форму.
0:05:14.720,0:05:17.020
Форма
0:05:17.020,0:05:18.360
должна
0:05:18.360,0:05:29.560
отправлять POST запрос потому что мы что-то посылаем
а также иметь поле ввода
0:05:29.830,0:05:31.200
которое
0:05:31.200,0:05:32.590
будет называться
0:05:32.590,0:05:34.939
title.
0:05:34.939,0:05:38.130
также будет еще одно
0:05:38.130,0:05:40.169
поле ввода
0:05:40.169,0:05:43.759
имеющее тип
0:05:43.759,0:05:45.389
submit
0:05:45.389,0:05:46.760
а между ними
0:05:46.760,0:05:52.870
будет текстовое поле
0:05:52.870,0:05:56.339
в которое нужно будет вводить текст.
0:05:56.339,0:05:58.339
Такой будет страница.
0:05:58.339,0:05:59.469
Теперь идем
0:05:59.469,0:06:00.459
и
0:06:00.459,0:06:02.649
перезагружаем приложение
0:06:02.649,0:06:05.089
выдает ошибку.
0:06:05.089,0:06:09.210
где-то забыл поставить точку с запятой
обычная моя ошибка
0:06:09.210,0:06:11.250
здесь в модуле, да, вот здесь.
0:06:11.250,0:06:15.289
Здесь в конце нужно не забывать
ставить точку с запятой
0:06:15.289,0:06:17.430
хоть это и выглядит как подпрограмма
0:06:17.430,0:06:21.139
но на самом деле это параметр
функции get.
0:06:21.139,0:06:25.370
Я запускаю снова, стало работать лучше
0:06:25.370,0:06:30.680
...я возвращаюсь к page и перезагружаю
страницу и получаю форму.
0:06:30.680,0:06:32.830
Которая немножко странно выглядит
0:06:32.830,0:06:36.299
Давайте сделаем её чуточку красивее
0:06:36.299,0:06:39.249
Возвращаюсь в редактор,
0:06:39.249,0:06:42.889
в этот шаблон и для начала делаю форму
0:06:42.889,0:06:44.569
немного шире
0:06:44.569,0:06:50.400
и поставлю переход на новую строку в конце и
делаю текстовое поле
0:06:50.400,0:06:52.339
например
0:06:52.339,0:06:54.919
в 10 строк, и к примеру
0:06:54.919,0:06:55.820
в 80 столбцов
0:06:55.820,0:06:58.539
оно будет такого размера
0:06:58.539,0:06:59.869
а также
0:06:59.869,0:07:03.810
сделаем кнопку submit,
вместо "Submit Query"
0:07:03.810,0:07:06.219
напишем здесь
0:07:06.219,0:07:07.070
значение
0:07:07.070,0:07:08.969
которым является Post
0:07:08.969,0:07:09.979
и теперь
0:07:09.979,0:07:13.550
Я перезагружаю страницу.
И она выглядит лучше чем раньше
0:07:13.550,0:07:18.599
80 здесь и 80 здесь
не одинаковы. Странно,
Никогда этого не замечал.
0:07:18.599,0:07:21.300
Возможно кто-то из вас объяснит мне это
0:07:21.300,0:07:26.229
и вот здесь кнопка отправки.
Выглядит нормально для первой версии.
0:07:26.229,0:07:31.899
Теперь вводим что-то вроде заголовка
и что-то вроде ...
0:07:31.899,0:07:33.289
моего текста
0:07:33.289,0:07:40.049
теперь, ... давайте напишем что-нибудь другое
например hello, hello HELLO!
0:07:40.049,0:07:42.830
я нажимаю на Post
0:07:42.830,0:07:47.089
затем я получаю что-то странное...
0:07:47.089,0:07:49.210
посылается заголовок
0:07:49.210,0:07:54.069
но не текст...
посмотрим что я сделал не так
0:07:55.149,0:08:00.499
Например я не назвал вот это поле
а это нужно сделать.
0:08:00.499,0:08:01.240
Например text
0:08:01.240,0:08:05.789
а сдесь написано methdo а не method
так что надо ...
0:08:05.789,0:08:06.770
исправить эти недочёты
0:08:06.770,0:08:07.849
теперь
0:08:07.849,0:08:10.619
возвращаюсь сюда
0:08:10.619,0:08:14.540
перезагружаю страницу и пишу здесь hello
а вот здесь
0:08:14.540,0:08:16.270
world
0:08:16.270,0:08:19.669
и если я нажму на кнопку то получу ошибку
Гораздо лучше.
0:08:19.669,0:08:21.379
Почему я получил эту ошибку?
0:08:21.379,0:08:25.219
А потому что был лишь POST-запрос
а не GET-запрос.
0:08:25.219,0:08:26.830
что нормально, именно так как я хотел
0:08:26.830,0:08:29.919
но здесь я не написал
что делать после того как мы
0:08:29.919,0:08:30.770
сделали
0:08:30.770,0:08:31.829
POST-запрос.
0:08:31.829,0:08:34.150
Так что нужно это сделать
0:08:34.150,0:08:35.370
и я пишу
0:08:35.370,0:08:38.470
если POST-запрос этой на эту страницу
0:08:38.470,0:08:43.420
то запускать подпрограмму
0:08:43.420,0:08:45.440
которая делает что-то другое.
0:08:45.440,0:08:48.170
Не забываем точку с запятой.
0:08:48.170,0:08:49.670
Так что же должна она делать?
0:08:49.670,0:08:54.400
Нужно использовать метод params
0:08:54.400,0:08:55.230
к значению title
0:08:55.230,0:08:57.760
для начала выведем только это
0:08:57.760,0:09:00.450
останавливаем приложение
0:09:00.450,0:09:01.939
перезапускаем его
0:09:01.939,0:09:03.079
и смотрим
0:09:03.079,0:09:06.029
если перезагрузить страницу и переотправить данные
0:09:06.029,0:09:10.550
я получаю hello что является заголовком
что я написал
0:09:10.550,0:09:14.420
это работает. Теперь нужно это где-то сохранить.
Можно использовать что-то вроде
0:09:14.420,0:09:15.470
базы данных
0:09:15.470,0:09:20.520
но в данном случае хотелось бы сделать проще. Я собираюсь использовать
0:09:20.520,0:09:21.180
файл JSON.
0:09:21.180,0:09:22.980
А где же этот файл?
0:09:22.980,0:09:25.700
Это нужно определить
в файле конфигурации.
0:09:25.700,0:09:28.540
Здесь я ввожу dwimmer
0:09:28.540,0:09:30.300
это имя приложения
0:09:30.300,0:09:35.700
под ним я сохраняю
все данные приложения
0:09:35.700,0:09:43.340
Я называю поле json п определяю
0:09:43.340,0:09:45.620
расположение файла.
0:09:45.620,0:09:49.130
В котором будут храниться все данные.
0:09:49.130,0:09:52.540
Этот файл будет моей базой данных.
0:09:52.540,0:09:55.310
как мне получать эти данные
0:09:55.310,0:09:57.680
Я пишу config
0:09:57.680,0:10:01.490
эта функция получает все данные конфигурации
0:10:01.490,0:10:05.200
здесь ввожу ключи
0:10:05.200,0:10:10.250
их два. это имя файла
0:10:10.250,0:10:11.600
где должны быть данные.
0:10:11.600,0:10:15.960
Для простоты поместим его в переменную
0:10:17.569,0:10:22.810
Теперь нужно прочитать данные в этом файле.
0:10:22.810,0:10:27.960
Пишем read_file и имя файла
и тоже помещаем в перерменную
0:10:27.960,0:10:31.700
но это и будет содержимое файла json.
Верно? Поэтому то что мы сохраняем
0:10:31.700,0:10:33.510
и будет json. И я
0:10:33.510,0:10:35.510
помещаю в переменную под названием $json
0:10:35.510,0:10:38.250
я всё еще должен включить эти данные
0:10:38.250,0:10:40.480
в структуру данных Perl
0:10:41.640,0:10:44.620
from_json - функция которая
0:10:44.620,0:10:47.780
принимает строку json
0:10:47.780,0:10:52.200
и возвращает данные которые нам нужны
0:10:52.200,0:10:53.790
это структура данных.
0:10:53.790,0:10:58.170
Очевидно, что при первом запуске
json файла еще не будет. В этом случае
0:10:58.170,0:11:00.779
хэш должен быть просто пустым
0:11:01.990,0:11:05.840
Это можно осуществить проверив
0:11:05.840,0:11:07.900
существует ли файл
0:11:07.900,0:11:10.010
если существует, то мы...
0:11:10.010,0:11:12.310
читаем файл, а если нет
0:11:12.310,0:11:13.380
мы просто
0:11:13.380,0:11:16.559
возвращаем строку с двумя фигурными скобками
0:11:16.559,0:11:20.250
именно так обозначается пустой хэш в json.
0:11:20.250,0:11:24.210
Так мы получаем пустой json
0:11:24.210,0:11:29.990
затем переменная data а после нее
нужно добавить новую
0:11:29.990,0:11:31.180
запись в блоге.
0:11:31.180,0:11:35.790
Сначала нужно получить метку.
У нас будет
0:11:35.790,0:11:36.930
новая переменная $now
0:11:36.930,0:11:39.050
и в ней будет храниться метка
0:11:39.050,0:11:40.240
затем
0:11:40.240,0:11:43.550
добавляем в переменную data
0:11:43.550,0:11:46.430
"now" будет ключом
0:11:46.430,0:11:50.279
мы сохраняем части записей
0:11:50.279,0:11:52.320
в соответствии с их меткой,
0:11:52.320,0:11:54.129
добавляем
0:11:54.129,0:11:55.780
заголовок
0:11:55.780,0:12:01.080
который я просто беру отсюда
потому что там он больше не нужен
0:12:01.080,0:12:03.930
также есть текст
0:12:03.930,0:12:05.870
написанный пользователем
0:12:05.870,0:12:09.420
беру его из params text
0:12:10.820,0:12:11.560
Теперь
0:12:11.560,0:12:12.820
имеются данные,
0:12:12.820,0:12:14.779
новая запись хранится в $data
0:12:14.779,0:12:16.510
и нужно просто её сохранить
0:12:16.510,0:12:19.459
используя write_file
0:12:19.459,0:12:21.620
задаём имя файла
0:12:21.620,0:12:22.960
а также
0:12:22.960,0:12:25.890
данные. Теперь $data
0:12:25.890,0:12:27.340
это структура данных Perl и хотелось бы
0:12:27.340,0:12:32.960
сохранить как json, для этого нужно
конвертировать с помощью to_json.
0:12:32.960,0:12:35.729
Всё.
Как только это мы закончили
0:12:37.410,0:12:38.690
нужно бы показать что-то пользователю
0:12:38.690,0:12:42.730
и перенаправить его
0:12:42.730,0:12:47.330
перенаправить пользователя в корень,
0:12:47.330,0:12:48.450
на главную страницу.
0:12:48.450,0:12:50.009
На главной мы пока
0:12:50.009,0:12:52.679
не показываем контент
0:12:52.679,0:12:55.120
но сначала давайте посмотрим, как это работает?
0:12:55.120,0:12:59.790
Для этого нужно остановить приложение
и запустить его снова
0:12:59.790,0:13:02.800
и если я не наделал ошибок,
всё должно работать.
0:13:02.800,0:13:04.770
это
0:13:04.770,0:13:11.560
форма. я её заполняю и нажимаю отправить
и я получаю ошибку в ходе выполнения.
0:13:11.560,0:13:13.699
Невозможно найти метод write_file.
0:13:13.699,0:13:14.890
Очевидно
0:13:14.890,0:13:16.500
это произошло потому
0:13:16.500,0:13:17.470
...
0:13:17.470,0:13:20.990
что from_json и to_json
это часть Dancer
0:13:20.990,0:13:23.460
а read_file и the write_file - нет.
0:13:23.460,0:13:26.900
Нужно подключить модуль
который позволит работать с ними.
0:13:26.900,0:13:27.980
use
0:13:27.980,0:13:29.500
File
0:13:29.500,0:13:31.420
::
0:13:31.420,0:13:32.260
Slurp
0:13:32.260,0:13:37.210
это имя модуля в котором есть функции read_file и
0:13:37.210,0:13:41.230
write_file.
0:13:41.230,0:13:46.260
Я сохраняюсь. Перезапускаю приложение
потому что я сделал изменения в коде
0:13:46.260,0:13:49.490
и пробую снова. я возвращаюсь
0:13:49.490,0:13:50.590
и
0:13:50.590,0:13:52.130
посылаю снова
0:13:54.690,0:13:58.860
вроде всё в порядке. я вернулся ..
0:13:58.860,0:14:02.020
на главную страницу
но я не вижу
0:14:02.020,0:14:05.720
пока никаких данных, узнаем
сохранились ли данные вообще
0:14:05.720,0:14:11.329
Возвращаюсь в Padre перехожу в рабочий каталог.
Здесь должен быть
0:14:11.329,0:14:15.920
dwimmer.json и он здесь. Вот метка
0:14:15.920,0:14:18.880
текст и заголовок.
0:14:18.880,0:14:23.190
Похоже в файл всё сохраняется нормально.
Давайте теперь покажем это
0:14:23.190,0:14:23.950
на
0:14:23.950,0:14:25.010
данной странице.
0:14:25.010,0:14:26.820
Для этого
0:14:26.820,0:14:28.660
будем менять
0:14:28.660,0:14:31.630
главную страницу и нам нужно
0:14:31.630,0:14:33.450
заново прочесть данные.
0:14:33.450,0:14:37.720
Точно так же как и раньше. Просто копируем и вставляем
0:14:40.590,0:14:43.700
и все данные хранятся
0:14:43.700,0:14:45.830
в переменной $data
0:14:45.830,0:14:49.720
и нужно передать её как
параметр в шаблон.
0:14:52.440,0:14:54.030
и мы просто посылаем
0:14:54.030,0:14:56.220
как параметр шаблона.
0:14:57.480,0:15:00.060
Давайте посмотрим что у нас в шаблоне.
0:15:00.060,0:15:01.840
Вот он.
0:15:01.840,0:15:02.890
Здесь
0:15:02.890,0:15:04.549
хотелось бы показать
0:15:04.549,0:15:05.940
те данные
0:15:05.940,0:15:09.670
и нам нужно получить хэш
0:15:09.670,0:15:11.749
в Template::Toolkit
0:15:11.749,0:15:13.530
и показать пользователю
0:15:13.530,0:15:18.220
В Template::Toolkit это встроенная вещь
здесь есть цикл for
0:15:18.220,0:15:22.620
и мы помещаем в переменную например
0:15:22.620,0:15:23.610
page
0:15:23.610,0:15:28.690
и в этом цикле мы можем работать с data
0:15:28.690,0:15:30.720
и перебрать все её ключи
0:15:30.720,0:15:35.450
Нужно чтобы они были отсортированы
0:15:35.450,0:15:36.950
и мы пишем sort
0:15:36.950,0:15:41.200
Так мы пройдем по всем элементам этого хэша
0:15:41.200,0:15:42.340
теперь
0:15:42.340,0:15:44.800
нужно написать END.
0:15:44.800,0:15:47.280
И внутри вывести на страницу
0:15:47.280,0:15:51.430
то что находится в переменной "p"
0:15:51.430,0:15:53.580
которая будет меткой.
0:15:53.580,0:15:55.860
Теперь если я вернусь в...
0:15:55.860,0:16:01.110
Нужно перезагрузить приложение потому что я также изменял код
0:16:01.110,0:16:06.560
Если перезагрузить страницу
то можно видеть метку единственного поста.
0:16:06.560,0:16:08.020
Это конечно мило
0:16:08.020,0:16:09.130
но всё-таки хочется
0:16:09.130,0:16:11.830
видеть заголовок с текстом.
0:16:11.830,0:16:17.080
В Template::Toolkit это можно сделать
написав что нужно выводить
0:16:17.080,0:16:18.170
data
0:16:18.170,0:16:22.380
здесь p уже переменная так что
поставлю знак $ перед ней
0:16:22.380,0:16:25.550
и ключ "title".
0:16:25.550,0:16:29.800
Также хотелось бы видеть текст. Верно?
0:16:32.730,0:16:36.090
Если вернуться на страницу и обновить её,
не нужно перезагружать
0:16:36.090,0:16:39.750
приложение так как лишь шаблон был изменен
0:16:39.750,0:16:44.950
то можно видеть "hello world" это заголовок с текстом
0:16:44.950,0:16:46.630
уже лучше
0:16:46.630,0:16:49.060
Можно поставить тэг H2
0:16:49.060,0:16:53.350
вокруг заголовка
0:16:53.350,0:16:54.409
а также
0:16:54.409,0:16:57.010
горизонтальную линию перед
0:16:57.010,0:17:00.600
перед
0:17:00.600,0:17:03.199
записью в блоге. Итак
0:17:03.199,0:17:07.780
вот место для заголовка и сам заголовок, гласящий “hello”.
Теперь
0:17:07.780,0:17:09.180
создадим еще один пост
0:17:09.180,0:17:14.620
чтобы убедиться в том что все работает...
итак второй пост
0:17:14.620,0:17:16.170
больше текста
0:17:16.170,0:17:17.760
больше текста
0:17:17.760,0:17:19.170
и я нажимаю отправить
0:17:19.170,0:17:22.400
теперь мы видим первый пост
и второй пост
0:17:22.400,0:17:23.700
и есть движок для блога
0:17:23.700,0:17:25.909
Спасибо за просмотр ... если вы хотите
0:17:25.909,0:17:27.590
писать посты на Dwimmer
0:17:27.590,0:17:31.970
то есть dwimmer.org или можете
зайти на perldancer.org и скачать там
0:17:31.970,0:17:34.350
он классный, мне нравится.
0:17:34.350,0:17:35.160
Большое спасибо за просмотр
Пока-пока
Jump to Line
Something went wrong with that request. Please try again.