Сначала картинка. А вы так можете (не по цифрам, а по группировке данных)? Более подробные картинки будут ниже.
Я не знаю, есть ли нормальные средства статистики для блоггеров. Наверное, для простых случаев — есть. В ЖЖ можно поставить один из множества ЖЖ-счетчиков (уж не знаю, хороши ли они), на standalone-блог можно поставить обычный счетчик. Но это — для простого случая.
Предыдущая моя статья на эту тему
была написана в феврале 2007 года, сразу после выхода первой публичной бета-версии
CUDA Toolkit/CUDA SDK. Представители NVidia предупреждали,
что в бета-версии производительность не является оптимальной, к релизу она будет улучшена.
Сегодня меня порадовали, дескать подписка на комментарии в твоем блоге не работает.
Действительно, на ряде записей ссылка "подписаться на комментарии к этой записи по RSS" была битая, вела на несуществующий фид.
Разбирательство показало, что:
Это касается только записей, где последняя буква (буквы) в title - непечатная (мягкий-твердый знак или знаки препинания). Эти символы дирифицируются в подчеркивание.
Сами такие записи имели URL вида date/bla_bla_.html (фиды: bla_bla_.xml).
Ссылки из списков записей (по месяцам, по рубрикам) были правильными.
А вот ссылки, сформированные через <$MTEntryBaseName$> вели на bla_bla.html.
Засучив рукава, я полез читать исходники MovableType и мне открылось страшное.
А знаете ли вы, что плагин Crossposter (к MT4) не работает с ЖЖ по двум прозаическим причинам
Во-первых, автор XML::Atom::Client при постинге новой записи делает POST (как и положено), а при обновлении имеющейся - PUT (вот ударило ему в голову). Мораль: не тестировали, даже не пытались.
Во-вторых, тот же модуль не забывает перекодировать текст из utf-8 в &#xNNNN (нафига, спрашивается?), ничего не делает с title и не передает кодировку принимающей стороне.
Всех бы убил, но боюсь один остаться. Попатчил в очередной MTLJPost (видели бы вы, как он конфигурируется под MT4, просто смех один), расслабился.
К MT3 был отдельный плагин nofollow, который приписывал атрибут rel=nofollow ко всем ссылкам в комментариях.
В четвертой версии эта функциональность есть прямо в самом движке. Ее несколько расширили, в частности в комментарях от доверенных комментаторов можно такую функциональность выключить (и тем их поощрить).
Естественно, о российских реалиях и теге <noindex> в SixApart не знают. Прилагаемый
решает эту проблему. На глаз - работает.
P.S. Если вы не знаете что такое "патч", то он вам не нужен
Те, кто программировал календарь для показа на вебе (и вообще в программах) знает, какая это мучительная задача. Тут и високосные годы и заполненные/не заполненные недели и много всего разного.
В то же время, иметь календарик в блоге — приятно, особенно если он не сильно пустой. По счастью, авторы Movable Type дают готовый Calendar Widget, который даже работает. И я даже им долгое время пользовался, но полного счастья не было:
Календарик - одинаковый на всех страницах. Включая, например, архив за ноябрь прошлого года. Хотя разумнее в архиве за прошлые месяцы показывать календарь за эти месяцы.
А если быть точным, то календарик на странице отвечает моменту ее генерации. Для архива за прошлый месяц - это будет дата последней записи за тот месяц, другими словами там будет правильный календарь пока вы не перегенерируете страницу.
Одним словом, бардак. Впрочем, есть средства его починить, но сначала нужно поставить задачу.
Голосом зануды: MovableType 4.x. Казалось бы, давно имеем систему Widget Set, можно собрать сайдбар из этих самых виджетов мышкой и разместить в блоге. Прекрасная штука, была еще в 3-й версии.
Однако в 4-й версии про них явно забыли и включаемые элементы настраиваются переменными (по сути, дефайнами) в шапке страницы. Как-то так:
Ну скажите пожалуйста, если widget set - это плохо, то нафига для них отдельный пункт меню завели ?
При этом, естественно, набор переменных новых темплейтов в документации не описан, несмотря на то, что одно из ключевых Release Notes у четверки озвучено как Kick-ass documentation. Впрочем, если kick-ass переводить буквально, то ощущение от документации сходится. Попробуйте там найти что-нибудь действительно нетривиальное....
MT-Colorer. Кажется прекрасной заменой для кривого, косого и т.п MTCodeBeautifier-а (который, извините уже непонятно как скачать, хорошо что в заначке был).
Но он тянет за собой ports/devel/colorer, который в свою очередь хочет принести все известные ему библиотеки и компиляторы java, после чего все ломается. Видите-ли JDK 1.4 не собирается GCC 4.2, а у меня это, пардон, системный компилятор (FreeBSD-current) и другого тут не носят.
Эх, хорошо что я незлобивый. Другой бы давно всех убил, один бы остался. (С) Успенский, близко к тексту.
Как и обещал ранее, родил скрипт для упрощения работы по переносу темплейтов MT:
Это не замена 97-баксового Template Exporter, а именно скрипт для легкой автоматизации работы (переносить через dump/restore не всегда удобно):
Предназначен для работы с Template Installer, в частности кормится его конфигурационным файлом.
Работает с командной строки, если у вас хостинг, то нужен shell-доступ, ftp недостаточно.
Назначение: сохранить результаты работы через интерфейс MT в виде, пригодном для установки TemplateInstaller (например, в другой блог). Сохраняются только темплейты, уже определенные в Template Set
Все настройки перевода (<__trans=..) естественно пропадают, ибо в базе данных оно сидит уже переведенное.
После десятка экспериментов на кошках, была отработана (и проделана на данном блоге) процедура апгрейда на Movable Type 4.x с третьей версии. В общих чертах она совпадает с рекомендованой авторами MT4, хотя имеются, конечно, и всякие локальные отклонения.
В пошаговом виде процедура выглядит так:
После десятка экспериментов на кошках, была отработана (и проделана на данном блоге) процедура апгрейда на Movable Type 4.x с третьей версии. В общих чертах она совпадает с рекомендованой авторами MT4, хотя имеются, конечно, и всякие локальные отклонения.
Разработчики MovableType, судя по всему, предполагают, что вся работа с темплейтами должна происходить внутри интерфейса системы. В ряде сортов колбасы потребности, очевидно, нет. В частности, нет способов сделать:
backup/restore только темплейтов;
использование темплейтов одного блога для другого;
редактирование внешним редактором, а не встроенным уебибожеством.
Понятно, что разработчики плагинов в стороне не остались и Mark Carey предлагает готовое решение в виде плагинов Template Exporter и Template Installer. Есть правда одна закавыка, Installer бесплатен для некоммерческого использования, а вот за Exporter автор хочет $97.
Так как мне экспорт нужен однократно, перенести то что надевелопил дома на рабочий сервер, то за стобаксофф я удавлюсь. И комплект из двух плагинов мы заменяем вот такой вот командой:
<b>pg_dump -E UTF8 -F c -t mt_template movabletype | ssh server pg_restore -d movabletype -c </b>
Это, естественно, для инсталляции MT на PostgreSQL. C MySQL я практически не знаком, но уверен что средства побэкапить-поресторить табличку есть и там. Для переноса Archive Mapping нужно таскать табличку mt_templatemap. Конечно, мы неявно предполагаем что:
blog_id на двух инсталляциях совпадает
нужно перенести все темплейты всех блогов.
Естественно, для чуть более сложной задачи: экспортировать не все, а только для одного блога, экспортировать в файлы (и импортировать из них) придется попрограммировать. На первый взгляд, экспорт в формате, пригодном для импорта через Template Installer должен уложиться строчек в 20.
Несколько дней поковырял в фоновом режиме на тестовом сервере 4-й Movable Type и таки решил апгрейдиться.
Причин тому несколько (из cписка новых фич перечислены только важные для меня):
Главная причина апгрейда. Новая система темплейтов хоть и не идеально соответствует моим желаниям, но все же гораздо ближе к ним, чем старая.
Старые темплейты я последний раз проклинал пару дней назад, переводя RSS-фид на Feedburner: пришлось исправить всего то мест пять (в идеале должно быть одно).
Возможность сделать ветвящиеся комментарии, этот плагин был и для версии 3.3, но заставить его работать я так и не смог.
Встроенная поддержка OpenID, отчего использование этой авторизации стало менее замысловатым.
Активные авторы плагинов будут делать их (и исправлять ошибки) под 4-ю версию, а на старые — очевидно забъют.
К несчастью, стандартная процедура апгрейда, занимающая буквально несколько минут, категорически не подходит: все темплейты останутся старыми, а значит главная задача апгрейда не будет выполнена.
Помимо этого, не подходят и старые стилевые файлы. Т.е. любимый Cutline придется рихтовать самому.
Таким образом, задача явно не на пару часов, а скорее на пару дней. Будем, значит, мучаться, описывая мучения в блоге.
Вердикт после попытки пару часов поработать: глюкало. Пусть сначала 4.2 выпустят, потом поговорим
Посмотрел на 4-й Movable Type с точки зрения "апгрейдиться или нет".
Впечатления двойственные:
Очень красивая новая панель управления, кнопочки, все мигает и переливается.
Появился бэкап (как я понимаю, полный), а не только экспорт.
Переделана система темплейтов, явно учли мои замечания :).
Есть готовый плагин для кросспоста в ЖЖ, не такой уродский, как используемый мной MTLJpost. Немножко недоделаный, имя аккаунта не видно где должно, но пользоваться можно.
А мне вот тут дали добрый совет. Дескать разрешить комментировать во всех зеркалах моего блога, и в ЖЖ-шном и в бетаярушном и чтобы везде были одинаковые ветки и все такое (и все транслировалось бы туда-сюда)
И мне даже в порядке эксперимента оно было бы интересно. BUT HOW ?
Есть ли готовое или частично-готовое решение ? Ну хрен с ним с я.ру пока, но даже двусторонняя синхронизация MT<->ЖЖ похоже малореальна. Как, например, вылить дерево комментариев из ЖЖ ?
Update. В силу излишнего AI у скрипта синхронизации с ЖЖ, пришлось комментирование тут запретить (синхронизации то нету :). Комментируйте ЖЖ-шную копию пожалуйста
Опуская обычные охи "ну почему этому не учат на ВМК" - все в наших руках и я думаю, что через пару лет такие курсы будут и у нас, тема вкусная - хочу обратить внимание на слайды и транскрипты лекций, доступные вот тут. Читают приглашенные лекторы из NVidia, поэтому основное внимание уделено, сюрприз, NVidia 8800. Курс
включает в себя лабы, которые сделаны очень интересно: есть готовая рыба, делающая подготовительную работу (I/O, печать результаты) и студент должен только написать несколько десятков-сотен строк изучаемой функциональности. Что, конечно, экономит кучу
непроизводительного времени (смотреть тут)
Я успел посмотреть не все, из того что посмотрел - многое нравится, а многое
не нравится: Не нравится то, что танцы идут от предыдущего поколения видеокарт. Если говорить о программировании вообще (а все примеры - про это), а не про видеоигры, то надо забывать про шейдеры и текстурные буферы. Ведь студентов учат, которые, я надеюсь, всего этого ужаса не нюхали.
Нравится, как практику, подробный разбор аппаратуры. Вылезает множество подробностей, которые нигде не опубликованы.
В предыдущей части мы рассматривали чтение из глобальной памяти Geforce 8800 напрямую ("как из массива C"). При этом отсутствует кэширование, но при оптимальной схеме доступа получается (согласно указаниям NVidia) наибольшая производительность.
В то же время, скорость доступа при неоптимальном паттерне очень маленькая. Для решения этой проблемы (помимо оптимизации паттерна) NVidia CUDA предлагает доступ к памяти как к текстуре. При этом работает двумерное кэширование (оптимизированное под локальный доступ), пиковые скорости должны получаться меньше, а наихудшие варианты - наоборот лучше.
После чтения руководства по NVidia CUDA,
остается ощущение сложности модели программирования: треды, блоки тредов, warp-ы, иерархическая память.
Непонятно, какие параметры вычислительной задачи оптимальны и какие у них вообще допустимые значения.
Само руководство точных рекомендаций не дает, дает лишь приблизительные.
Из общих соображений, понятно что самая медленная часть суперкомпьютера - память. С одной стороны,
теоретическая пропускная способность (bandwidth) составляет 900MHz * 384 бита * 2 (DDR) = 86.4 GB/sec.
С другой стороны, раздел 6.1.1.3 руководства говорит о 200-300 циклах memory latency (при, по всей видимости,случайном доступе).
К счастью, проблема легко изучается: если взять достаточно много данных (скажем, полгигабайта) и, например,
сложить все 4-байтовые значения (как float), то основные затраты времени будут именно на чтение из памяти,
а всей прочей арифметикой можно пренебречь (или подсчитать ее отдельно).
На удивление мало жизни происходит по запросу 'NVidia CUDA' в поиске по блогам и новостям. Что у Яндекса, что у Google. Мне это сильно удивительно - штука многообещающая, первая версия SDK датирована ноябрем (появилась примерно 1-го декабря), публичный SDK появился практически месяц назад, а большинство упоминаний в духе "вот вышло", в крайнем случае "читал доку". Таких текстов - навалом, маркетинг NVidia работает. Но скучно.
Помимо форумов NVidia, где заводится по 5-6 новых топиков в день, интересных публикаций немного.
Для начала: Beyond3D опубликовал большой текст про CUDA. Более подробный, чем все что я видел до сих пор (ну, кроме собственно документации).
Экспериментально выяснилось, что содержимое shared memory не сохраняется между запусками кода на G80. Всякий раз оно инициализировано, причем значения разные, то 10 (float), то 125.
Плакала идея синхронизации между мультипроцессорами путем завершения kernel. Нет, синхронизироваться можно, конечно, но если хочется сохранить результат, то надо писать в глобальную память.