Изучаем потоки, чанки и ищем конец
Примечание: ниже перевод статьи «On Streaming, Chunking, and Finding the End», в которой авторы рассматривают процесс передачи информации по HTTP-соединению и возможности для ускорения этого процесса. Мои комментарии далее курсивом.
Два способа передачи
Как и в большинстве механизмов передачи данных, в HTTP существует два основных способа отправить сообщение: «все и сразу» или «по частям». Другими словами, в HTTP есть возможность отправлять данные до тех пор, пока еще есть хотя бы что-то, что можно отправить, либо отправить все данные как одну логическую единицу, указав предварительно ее размер.
Если вы занимаетесь веб-разработками достаточно продолжительное время, скорее всего, вы уже знаете, как работает сброс буфера (flush) на стороне сервера. Этот метод позволяет начать отправку части данных пользователю, в то время как скрипт может продолжать выполнять некоторые, достаточно медленные, действия (скажем, ресурсоемкий запрос к базе данных). Если вы уже применяли эту возможность, тогда вы, вероятно, использовали преимущества потокового (streaming) механизма, хотя могли и не знать всех деталей работы HTTP-протокола.
Разбиение на чанки

На вход программе подаются две строки, на одной символы, на другой число n. Из первой строки формируется список.
Реализуйте функцию chunked(), которая принимает на вход список и число, задающее размер чанка (куска), а возвращает список из чанков указанной длины.
Формат входных данных
На вход программе подается строка текста, содержащая символы, отделенные символом пробела и число n на отдельной строке.
Формат выходных данных
Программа должна вывести указанный вложенный список.
def chunked(original_list, piece): new_list = [] for i in range(0, len(original_list), piece): new_list.append(list(original_list[i:i+piece])) i += piece return(new_list) original_list, piece = input().split(), int(input()) print(chunked(original_list, piece))
Похожие записи:
- Различные элементы в списке
- Эффективный ввод-вывод в разных языках программирования
- Django — доработка шаблона формы регистрации
- Упаковка дубликатов
Урок 5. Работа с чанками MODx Revolution
Добро пожаловать на 5 урок MODX Revolution для новичков. В предыдущем уроке мы начали рассматривать работу с шаблонами в MODX Revolution. Мы начали со статичного HTML/CSS шаблона и перенесли его в нашу установку MODX Revolution, изменили пути к файлам и начали изучать синтаксис тегов MODX Revolution и как его использовать. В этом уроке мы продолжим работу над нашим шаблоном и изучим концепцию чанков.
В данном уроке я использую шаблон 7-in-1 Business Success Site студии Themeforest. Если вы работаете над шаблоном, который вы скачали или сделали сами, то это даже лучше. Подход к построению сайта одинаков вне зависимости от используемого шаблона.
Давайте начнем. Наш сайт выглядит сейчас точно так же как и загруженный шаблон, потому что мы изменили все пути к css, js и image файлам. Давайте рассмотрим что же такое чанки
Чанки MODX Revolution
Чанки — это куски HTML кода или текста. Важно отметить что чанк — это чистый HTML код без всякой логики. Чанк не может содержать PHP код, он просто не будет выполнятся. PHP код необходимо вставлять в сниппет (разберёмся в этом в следующих уроках). Этот сниппет потом может быть вызван в чанке. В то же время чанк сам по себе не может содержать всередине чистый PHP.
Для чего использовать чанки?
Вы можете использовать чанки для различных целей. Некоторые примеры использования чанков включают организацию вашего шаблона в управляемые части, содержащие HTML или текст, который будет использован снова и снова в вашем сайте, а также для хранения мини-шаблонов для ваших меню и др. Сейчас это может быть не совсем ясно, но ситуация прояснится по ходу дела.
В этом уроке я собираюсь использовать чанки для организации моего шаблона в несколько управляемых частей. Как я уже упомянул в предыдущих уроках, эти занятия отражают лишь моё видение этого процесса, вы можете использовать свой лучший или более удобный вам способ.
Поэтому можете просто бегло ознакомится с данным уроком либо просто прочитать, чтобы понять синтаксис чанков и далее организуйте ваш шаблон как вам удобно.
Если мы посмотрим на код шаблона, над которым сейчас работаем, то увидим длинную страницу кода и в нём при редактировании или изменении части кода можно легко потеряться. Чтобы избежать этого, давайте разделим код на логические секции и далее сохраним эти секции раздельно как чанки, которые я потом смогу вызвать в главном шаблоне.
Видно, что этот шаблон разделён на три различные секции: шапка, подвал и средняя область (по такому принципу делятся почти все шаблоны). Соответственно можно поделить наш шаблон на эти три части. После разделения мы можем далее еще разделить эти секции.
Поэтому первой вещью, что мы сделаем — это создадим два новых чанка, которые назовём: 7in1-header и 7in1-footer.
Для создания чанка зайдем в менеджер и в дереве слева зайдем во вкладку Elements. Можно создать чанк двумя способами: правым кликом на Chunk и выбрать“New Chunk” или кликнуть на иконку Chunk.

В появившемся окне вводим необходимую информацию — имя чанка, описание и категория, если это необходимо.

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

Итак, наши чанки готовы к использованию. Всё, что нужно сделать, это вырезать код из секции нашего шаблона и вставить в чанки. В моём случае, я открою шаблон 7in1 Home, который мы создали в предыдущем уроке и вырежу весь код между отрывающим и закрывающим тегами . Далее я вставлю этот код в средину чанка 7in1-header, который я только что создал и сохраню его.
Если мы теперь посмотрим на наш сайт, то увидим, что он не выглядит так, как должен выглядет.

Это случилось потому что сайт больше не видит наших css и js файлов, так как мы вырезали всю информацию об этом из нашего шаблона. Так как эта информация теперь содержится в чанке, то нам необходимо просто вызвать чанк в шапке шаблона.
Как вызывать чанк в MODX Revolution
Синтаксис чанков в MODX Revolution очень прост:
[[$chunkName]]
В нашем случае мы просто перейдём в наш шаблон и разместим там вызов нашего чанка 7in1-header в области, где мы убрали код шапки. Таким образом верхняя часть кода нашего шаблона будет иметь следующий вид:
Если сейчас вы перезагрузите страницу, то увидите, что она примет нормальный вид. Это значит, что парсер MODx видит вызов чанка, он берёт его содержимое и размещает в области, где сделан вызов. Если вы знакомы с программированием PHP, то вы увидите схожесть с концепцией использования включения файлов.
Отлично, теперь мы знаем что делать дальше и сделаем ту же процедуру с подвалом. В моём случае я выделю весь код от начала div подвала до закрывающего тега и размещу его в чанке 7in1-footer, который мы создали. Затем размещу вызов это чанка в нужном месте. Теперь конец кода моего шаблона выглядит вот так:
Снова напомню, можете делать что угодно и как угодно, можете вообще не делить ваш шаблон :). цель данной демонстрации — это показать как работать с чанками и какой их синтаксис при вызове чанков в шаблоне.
Для моих целей, я собираюсь еще поделить мой шаблон и добавить пару чанков. Эта секция шаблона появляется в основном на каждой странице вебсайта:

Я думаю разумно разместить код для этой секции в собственном чанке и далее вызывать его в наших шаблонах. Я назову этот чанк 7in1-bottomwidgets и таким образом нижняя часть кода моего шаблона приобретёт следующий вид:
Как вы видите, в зависимости от внешнего вида нашего шаблона, мы можем делить его дальше и дальше в отдельные чанки либо же не делить совсем.
Ну вот наш небольшой урок подошёл к концу.
В следующем уроке MODX Revolution для новичков мы будем копать еще глубже и рассмотрим основы переменных шаблона и как использовать их для создания множества редактируемых областей на нашей странице. Если у вас есть какие-либо замечания или исправления — не стесняйтесь, сообщайте мне об этом. Буду стараться их исправить, чтобы уроки были более полезными для всех.
- Чанки MODX Revolution, шпаргалка по чанкам
- Синтаксис тегов MODX Revolution
Alex
12.11.2011 23:22 Немного может путать начинающих тот факт что head называют в этой сатье header.
Header-ом обычно называют шапку сайта, но тут header это содержимое head.
Viktorminator
13.11.2011 00:38 Пусть начинающие не пугаются и читают комментарии. 7in1-header это чанк, название естественно как и содержание — произвольные. Сейчас я вообще создаю два файла site_header.html site_footer.html и динамически вставляю их в шаблон. Об этом и о многом другом, в следующих уроках курса «MODx Revolution для продвинутых» ;).
Sergey Larin
17.09.2013 04:48 Спасибо, уважаемый админ, всё понятно. Недоразуменя вызвали эти head и header, но благодаря вашим подсказкам и примерам я разобрался. Наглядные примеры — это то, что надо. Даже, если не понял теорию о том, как делать, можно посмотреть на пример, с результатом и оттуда уже прийти к пониманию теории.
Сергей
06.03.2012 11:09 Alex, согласен с вами по поводу head и header. Вводит в заблуждение и в дальнейшем новичек (коим являюсь я) может путаться осваивая уроки на других источниках. Я сделал 2 чанка: head и header, соответственно в первом содержимое , а во втором шапка шаблона.
Серж
02.04.2012 12:38 А что с чантом для контента? Не могу никак понять как выводить контент в зависимости от страницы(
anadikt
13.05.2012 04:18 У меня не получается работать с чанками. Делаю как все написано, но не выводит текст чанка. Что делать.
Viktorminator
13.05.2012 07:21 Если чанки не выводятся, то 1ое — проверьте вставляете ли вы их в шаблон, а не в содержимое ресурса и 2ое — назначили ли вы этот шаблон для просматриваемого ресурса.
Евгений
25.10.2012 17:53 Не-не, все нормально написано. ) Имена можно свои задать — это не критично, главное потом не запутаться. Мне вот не понятно что такое 7in1. ))) Я понимаю, что это только название, а что под ним подразумевается?
Алексей
27.10.2012 13:21 Универсальный шаблон, чуть ли ни 7 шаблонов в одном, стиль которых можно изменять внося небольшие правки в стили шаблона (Разные цвета, Плоский и 3D шаблон, различное расположение контента на странице и т.д.)
Sergei Ivin
19.12.2012 17:14 С точки зрения SEO ставить код между. в чанк — это грубейшая ошибка.
keywords и description должны быть уникальны для каждой страницы
Viktor Minator
20.12.2012 12:15 Они и будут уникальны. Для каждой страницы в ресурсе указываете keywords & description, а что в чанк заключена вся верхняя часть, включая меню — это не значит, что вывод этой части будет одинаков на каждой страницы. Можете заглянуть в код этого сайта и увидите, что для каждой страницы у меня они разные, хотя в шаблоне для верхней части я использую чанк site_header: https://gist.github.com/4344398
Артем Котэ
03.07.2013 09:21 Оптимизатор Сергей любит SEO больше, чем сиськи.
lurkmore.to/SEO
Sergei Ivin
20.12.2012 11:51 имел ввиду теги head
Юрий Зюзин
14.05.2013 06:13 Сергей, кстати я вот пришел на MODx с Joomla, потому что с точки зрения оптимизации, она никакая + очень много всего не нужного приходится в ней урезать. Как правильно оформить Сео теги?
Руслан Юнусов
02.01.2014 09:20 Вот в этом месте
чанк подвала стоит не перед тегом
Я так понимаю это ОЧЕПЯТКА?
Руслан Юнусов
02.01.2014 09:41 На последнем примере короче)
Руслан Юнусов
03.01.2014 22:35 Короче в последнем примере чанк подвала стоит за закрывающим тегом div а не перед ним.Если так сделать то подвал будет слишком низко — упадёт в самый низ
Антон Щёлкин
24.09.2014 12:30 Хороший урок. Но шпаргалка по чанкам что-то не открывается у меня, пустую страницу выдает.
- Урок 1. Вступление
- Урок 2. Установка MODx Revolution
- Урок 3. Базовая настройка и установка пакетов
- Советы для начинающих работу с MODX
- Советы для начинающих веб-разработчиков
- Урок 4. Работа над шаблонами
- Урок 5. Чанки MODx Revolution
- Урок 6. Переменные шаблона
- Урок 7. Сниппеты
- Урок 8. Вывод меню с помощью Wayfinder
- Урок 9. Создание контакт-формы с помощью FormIt
- Урок 9-2. Добавление поля вложения в FormIt
- Урок 9-3. Formit с проверкой полей на jQuery
- Урок 10. Вывод контента сниппетом getResources
- Урок 11. Создание карты сайта sitemap.xml
- Урок xPDO 1. Создание классов из таблиц базы данных
- Урок 12. Основы использования getPage
- Урок 13. Создание голосования с помощью Polls
- Урок 14. Использование MIGX. Создание таблицы
- Урок 15. Создание слайдера с помощью MIGx TV
- Урок 16. MIGX галерея с AJAX загрузкой
- Урок 17. Создание RSS-ленты сайта
- Урок 18. Создание галереи в MODX Revolution
- Урок 19. Создание формы поиска с выпадающими подсказками
- Урок 20. Madrass CSS3 паттерн в MODX стиле
- Урок 21. AJAX загрузка Quip комментариев
- Урок 23. Создание удобной формы входа с помощью Login
- Создание компонента Qaptcha в MODX Revolution
- Урок 25. Создание AJAX поиска на сайте
- Урок 26. Создание AJAX формы отправки сообщений
- Урок 28. Работа с csv
- Урок 29. Экспорт ресурсов Modx Revo c TV в csv файл
- Урок 29. AJAX загрузка ресурсов
- Урок 30. Вывод отзывчивой галереи в MODX
- Ext JS урок 1. Ваш первый extJS скрипт. Окна сообщений
- Ext JS урок 2. Использование AJAX
- Ext JS урок 3. Анимация
- Ext JS урок 4. Манипулирование с узлами
6.2. Механизм хранения данных
Для дальнейшего объяснения принципов работы архитектуры DSA необходимо описать механизм использования дискового пространства или, другими словами, как сервера Informix хранят данные на диске.
Только администратор СУБД, отвечающий за выделение памяти на жестком диске под хранение данных, может (и должен) управлять таким этим. Тем не менее, с элементами представления данных на жестком диске работает и прикладной программист. Поэтому рассмотрим механизм размещения данных с обеих точек зрения – как с точки зрения администратора, так и с точки зрения программиста.
С точки зрения прикладного программиста (в том числе, и разработчика схемы конкретной БД) область хранения данных на жестком диске состоит из некоторого пространства областей данных (в фирменной документации используется термин dbspace, который иногда используется в русскоязычной литературе в своем транслитеральном переводе «дбспейс»). Существует пространство данных, используемое для хранения БД по умолчанию. Это пространство называется корневым (root dbspace). В корневом пространстве, кроме баз данных, хранится еще и системная информация, необходимая для работы сервера базы данных целиком. Для прикладного программиста это означает, что объем памяти, отведенной под БД в корневом пространстве данных существенно меньше собственного, физического размера корневого пространства.
Каждая база данных, как правило, может размещаться только в одном пространстве данных. В одном пространстве данных может размещаться несколько баз данных:
С точки зрения прикладного программиста разные пространства данных различаются по следующим параметрам:
- Скорость доступа;
- Вероятность отказа;
- Время восстановления после отказа;
- Размер.
Имена пространств данных используются в операторе CREATE DATABASE, после ключевого слова IN. Например, если мы хотим создать базу данных my_db в пространстве данных work_dbspace, а базу данных phones в пространстве office_db, то надо выполнить следующие операторы:
CREATE DATABASE my_db IN work_dbspace CREATE DATABASE phones IN offiсe_db
С точки зрения администратора сервера БД каждое пространство данных состоит из нескольких компонент – чанков (от английского “chunk” – ломоть, кусок). Каждый чанк является или файлом в файловой системе, или частью этого файла, или частью «сырого» устройства. «Сырое» устройство означает устройство с прямым доступом, но на котором не хранятся обычные файлы ОС.
Каждый чанк определяется именем файла или устройства, на котором он находится, смещением области данных от начала и размером. В случае использования файла именем будет просто имя файла, например /usr/informix/chunks/cook1. В случае сырого устройства именем будет выступать имя файла ОС Unix, ассоциированное с данным устройством, например /dev/dsk/c0d0t1s2.
В качестве примера рассмотрим следующую конфигурацию. Пусть у нас есть два пространства данных – rootdbs и work_dbspace. Первое пространство, размером 100 МБт состоит из двух чанков:
- файла /usr/informix/chunks/cook1 , размером 40 МБт
- первых 60 МБт сырого устройства /dev/dsk/c0d0t1s2
Второе пространство, work_dbspace, размером 150 МБт, состоит из одного чанка, размером, соответственно, тоже 150 МБт, и который находится на том же сыром устройстве, что и второй чанк первого пространства, но занимает область после него:
Для того, чтобы добавить к серверу базы данных Informix Dynamic Server новое пространство данных, можно воспользоваться или утилитой onspaces, или воспользоваться оболочками администратора onmonitor (для терминального режима) или Informix Enterprise Command Center (для графического режима).
Для того, чтобы узнать текущий набор пространств и узнать, из каких чанков состоит каждое пространство данных, надо выполнить команду (для терминального режима) onstat –d:
fili% onstat –d INFORMIX-OnLine Version 7.11.UC1 — On-Line — Up 17 days 00:24:59 — 11480 Ks Dbspaces address number flags fchunk nchunks flags owner name a33e0e8 1 1 1 2 N informix rootdbs a36b9c0 2 1 2 1 N informix db1 a36ba28 3 1 3 1 N informix db2 a36ba90 4 1 4 1 N informix db3 a36baf8 5 1 5 1 N informix db4 a36bb60 6 1 7 1 N informix agspace1 6 active, 2047 maximum Chunks address chk/dbs offset size free flags pathname a33e150 1 1 0 32485 256 PO- /data/chunw a36b228 2 2 0 20000 0 PO- /data/chun1 a36b300 3 3 0 20000 6593 PO- /data/chun2 a36b3d8 4 4 0 20000 1053 PO- /data/chun3 a36b4b0 5 5 0 20000 6957 PO- /data/chun4 a36b588 6 1 0 50000 2024 PO- /data/chun10 a36b660 7 6 0 5000 2283 PO- /data/chun5 7 active, 2047 maximum
По данной выдаче видно, что в данном экземпляре сервера имеется 6 пространств данных (rootdbs, db1, db2, db3, db4 и agspace1). Пространство данных rootdbs состоит из двух чанков (/data/chunw и /data/chun10), остальные пространства состоят из одного чанка каждый (у каждого пространства данных есть свой уникальный номер – поле number, на который указывает поле dbs у чанка).
Для каждого сервера базы данных должен существовать один специально выделенный первичный (или корневой) чанк, являющийся первым чанком в корневом пространстве данных. Для начального запуска сервера в работу требуется иметь только корневой чанк.
Получить информацию о количестве пространств данных, о входящих в них чанках, можно только на работающем сервере.