2009/03/31

Мотивация блоггеров

Мотвация и прочая статистика по блогосфере рунета
http://subscribe.ru/archive/optin.custom/200904/01194537.html
пример, как котерову сносит крышу http://habrahabr.ru/blogs/php/54785/
dklab.ru/lib/Dklab_ShortXSLT/ "упрощённый" XSLT

не мог не выматериться

Yass + jQuery

Сначала немного пиара Yass (вдруг кто не в курсе, что это - так это JavaScript библиотека для работы с селекторами http://yass.webo.in/)
Что видит юзер, когда приходит на сайт? Он видит несколько примеров, код и таблицу сравнения скорости работы. О, прикольно! быстро работает! - говорит юзер и уходит дальше, потому как непонятно, для чего всё это надо. На самом деле, надо это только для выборки селекторов.

Как мне рассказал один username%#javascript@rusnet.ru, который достал разрабов, функциональность yass укладывается в несколько методов:
_ (селектор, корень, неКэшировать) -- основной метод для выбора элементов
_.ready (функция) - позволяет назначать функции на выполнение по загрузке DOM-дерева на странице.
_.bind (объект(ы) или CSS-строка, событие, обработчик) -- метод для назначения обработчиков для элемента, эементов или эементов, соответствующих заданному CSS-селектору
_.load(алиасы, обработчик) -- метод для модульной загрузки произвольных модулей. Зависимости модулей на данный момент разделены - , в последней редакции это будет изменено на #. Обработчикзадается в виде строки, а не функции (и вызывается при загрузке каждого модуля через eval).
_.postloader (элемент script) -- проверяет, загружен ли текущий тег script и запускает всю логику обработчиков (если удовлетворены все зависимости для загрузки данного модуля).

Возникает вопрос: а дальше? Хочется ведь какой-то функциональности, кроме выборки всех первых абзацев с определённым классом внутри всех блоков? Хочется как-то подружить yass и jQuery.

Как подружить yass и jQuery? Решение простое как враппер

<script type="text/javascript" src="http://yass.webo.in/yass.0.3.8.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script>
    jQuery.noConflict();
    var $ = function(.){return ('string'==typeof .)?jQuery(_(.)):jQuery(.);};
</script>

* This source code was highlighted with Source Code Highlighter.


ps для тех, кто не понял (надеюсь, в этом блоге нет таких): для всех строковых параметров (предполагается, что это запрос селектора), делается обращение к yass, все другие вызовы пересылаются напрямую к jQuery. Все результаты работы yass оборачиваются в jQuery-объекты.
ps2: точка в параметрах - ради лулзов :)

2009/03/29

7 этапов построения масштабируемых веб-приложений.

это перевод со слайдов отсюда http://www.profyclub.org/articles/290/3341
  1. Семь составляющих веб-приложений
    автор: John Engates
  2. На повестке (регламент встречи):
    • Что мы ждём от веб-приложений
    • Типичный сценарий работ
    • Неплохие примеры
    • Вопросы и ответы

  3. Чего мы ждём от сайтов

    • Масштабируемость
    • Высокая степень эксплуатационной готовности (полезности), высокая отдача
    • Производительность (эффективность работы?)
    • Простота управления
    • Низкая стоимость (обслуживания, в том числе)
    • Изобилие рюшечек Множество приятных неожиданностей
    • И что он будет нам делать бабло, много бабла!

    Это и есть семизначная мантра клиента-директора, думающего о заказе корпоративного сайта

  4. Высокая готовность. Определение:
    Высокая готовность (High Availability HA) - это такой подход к проектированию и реализации, который бы гарантировал известную степень уверенности в их (проектирования и разработки) непрерывности. Так-то!
    Как это выглядит на примерах:
    • ваш сайт всегда работает и доступен
    • юзеры счастливы
    • вы не теряете денег из-за технических простоев
    • (и это не увеличивает затраты на обслуживание сверх необходимого)

    Это была мантра техдира проекта

  5. Что на самом деле называется масштабируемостью
    Масштабируемость (расширяемость) - это ожидаемое свойство системы, которое показывает её возможность к росту доходов в приятной форме, или легко увеличиваться по необходимости
    (Дядька загнул круто. Масштабируемость - это способность системы к расширению и росту. Ну и увеличению доходности, да)

    Чем не выражается масштабируемость:
    • чисто наращиванием мощностей (2МГц -> 3МГц)
    • чем-то вроде операционных систем (Solaris vs Linux)
    • особенностью софтовых технологий (Java - Python - Rails)
    • особенностями платформ (Intel - AMD)
    • оптимизацией кода (10 строк против 1000, утверждает этот дядька, ничего не решает)
    • выбором технологии хранения (SAN vs NAS)

  6. большими красными буквами

    РАСШИРЯЕМОСТЬ И ПРОИЗВОДИТЕЛЬНОСТЬ - НЕ ОДНО И ТОЖЕ

  7. картинки с примерами
    красивые машинки, автомобильные развязки и писсуары





  8. Истина первая:

    Ничто не может множится, если таковым не спроектировано.

  9. Истина вторая:

    Если что-либо было спроектировано частями, может их наращивать без проблем.

  10. Очень интересная "шкала боли" (игра слов с предыдущими пунктами)
  11. Типовые сценарии развития

    Этап 1. Начало
    • Простая архитектура
      - файрвол и балансировщик
      - пара веб-серверов
      - сервер БД
      - внутреннее хранилище

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

  12. Этап второй, всё тоже самое, но чуть-чуть по-больше
    • Успешное ведение бизнеса - залог хороших отношений с законом
    • Добавим немного файрволов и балансировщиков
    • Добавим чуть больше веб-серверов для производительности
    • Устаканим схему БД и соптимизируем её с помощью DBA (консультанта)
    • Добавим баз
    • Переведём хранилище на SAN или DAS
    • Всё ещё просто, подходит для перспективных приложений

  13. Этап третий - Первые симптомы
    • Публичность
    • Устанавливается Squid или Vanish в режиме обратных прокси, или очень хороший балансировщик - для кеширования статичного контента
    • Добавляем ещё сколько-то веб-серверов (управление контентом уже доставляет немалый головняк)
    • Единственная БД не будет разделена когда-либо (раздельные операции чтения-записи - вся запись ведётся на единственный мастер сервер с несколькими вторичными серверами для чтения)
    • Может возникнуть необходимость чё-нить переписать в приложении

  14. Картинка "Расширяемость применительно к серверам баз данных"
  15. Этап четвёртый - Боли усиливаются
    • Кеширование на memcache
    • Репликация не работает для всего (единственная база для записи - много баз для записи - результат: репликация работает долго)
    • Приходит осознание необходимости разделения баз (конечно же, если ваша БД поддерживает этот механизм)
    • Приходит осознание распределённых хранилищ для контента
    • Необходимо серьёзное преобразование архитектуры приложения и базы (а разрабы могут не обладать подобным скилом)

  16. Этап пятый - Реально головняк!
    • Приходит м-р Паника и остаётся жить.
      Разве мы не могли сделать всё это раньше? (Список этого:
      - Полное переосмысление приложения\бизнес-модели
      - И почему мы не запланировали расширяемость системы на момент принятия решений по архитектуре? )
    • Невозможность делимости как фичи приложения - что ещё мы можем использовать? (Варианты
      - Разделение основанное на географическом принципе, по фамилии, по userID, etc
      - Создание кластеров пользователей (пользовательская кластеризация)
    • Поведение приложения должно быть идентично на каждом пользовательском кластере
    • Использование стурктуры хешей или мастер-сервера БД для определения какого пользователя на какой кластер подключить

  17. Этап шестой - Приход, мал-мала полегчало
    • Расширяемая архитектура приложения и базы
    • Удовлетворительное быстродействие
    • Снова можно добавлять новую функциональность
    • Оптимизация чего-нибудь в коде
    • Продолжаем расти, но теперь вполне управляемо

  18. Этап седьмой - Исход в неизвестность
    • Где нас ещё поджидают узкие места?
      - Обеспечение питанием, площадь размещения
      - Каналы и прочее - насколько велик ваш хостер?
      - Проблемы систем защиты и балансировщиков нагрузки
      - Хранилища данных
      - Люди и проблемы
      - Технологические ограничения расширяемости баз данных - всё ещё хотите хранить данные по схеме ключ-значение?
    • Что там насчёт "все яйца в одну корзину"?
      - один датацентер
      - одна копия данных
      - проблемы репликации данных и балансировки по географичекому принципу

  19. Добрые советы
    • Не изобретайте колесо, скопируйте у кого-нибудь другого
    • Думайте просто
      - Все вещи, сделанные проще некуда - не так уж просты. - А. Эйнштейн
    • Думайте горизонтально... не вертикально... в любых случаях (может, это идиома такая?)
      Насколько затратно? - вместо - Насколько быстро?
    • Используйте подходящее обеспечение и оборудование
    • Решайте проблемы легко и просто
      - Приводите планы в действие
      - Разделяйте различные сервисы
      - Не проводите много изменений за один раз (это называется итеративность)
  20. Ещё немного добрых советов
    • Не тратьте времени на оптимизацию оптимизации ("Преждевременная оптимизация преждевременна" (c)#phpclub@undernet.org)
      - Возьмите вашу [правильно спроектированную] архитектуру, часто подстраивайте решения [под неё], и редко оптимизируйте (или никогда)
    • Проверяйте возможности к расширению подходящими нагрузочными тестами
      - Сделайте это привычной практикой до того, как вы начнёте думать об их необходимости
    • Используйте кеширование до того, как почуствуется необходимость
    • Много памяти и 64-битная платформа помогут вам (Use the Force, Luck! :)
    • Проверяйте новые возможности до того, как выбор между производительностью и масштабируемостью станет проблемой
      - Nice to have vs. have to have. И будет вам щасте:)

  21. Управляйте изменениями помня об доступности сайта
    • Нельзя недооценивать необходимость правильной постановки технологического процесса и документации
    • Избавьтесь от управленцев
      - Разработка - тестирование - выпуск
      - Работайте уместно сохраняя конъюнктуру
    • Используйте системы контроля версий
      - Понятно, да: RCS, CVS, Subversion
    • Отслеживайте выпуски (короче, issue tracking - добрый совет использовать трекинговую систему. имхо помощь в разработке оказывают специализированные системы багтрекинга, а не хлам типа trac - у него другие задачи. Если и использовать систему контроля, то это должен быть комбайн, в котором прозрачно отслеживаются таймлайны, что-то типа eGroupWare. Кстати, этот совет противоречит отказу от менеджмента)
    • Используйте стандарты кодирования
    • Измените схему работ
      - Планирование - тестирование - выполнение
      - Оптимизированная на высокую доступность инфраструктура
Дальше там реклама и спасибы.
1080слов, 7530знаков

x00.yeap Принципы мега-системы

Ориентиры:
  1. Модульность (ох, как много светлых вострых копий разбилось об эту стену и дерзких сердец угасло. Но мы-то - старые циники; плюс - терять уже нечего)
    Модульность - это система блоков и плагинов. Необходимо разработать и воплотить такой принцип движка, чтобы наращивание (урезание) функциональности не оказывало влияния на прочий функционал.
    зы: модули не отменяют нормальных уровней абстракции
  2. KISS - Keep It Simple, Stupid (вдруг кто не в курсе) - "Будь проще, идиотина"
    & JMS - Just Make Simple - "Тупо сделай проще". Принцип был придуман совместно во время работы в %companyname%. Одна из любимых программерских фраз была: "Давай сделаем это ещё проще"

  3. В принципе, на этом можно было бы и закончить ;) потому что дальше технические подробности.
    Внутренний формат представления данных: XML (andnearbird), включая протоколы, интерфейсы и пр. (кроме, разве что, JSON)
  4. База данных (наверняка, понадобится ;) PostgreSQL.
    Почему? По сумме критериев: она достаточно мощна (вдруг кто-нить соберётся делать порталы?), распространена у хостеров, не-MySQL, на постгре можно делать нормальную бизнес-логику. Тем более, что нас модули - желющие могут и поменять.
    Кстати, подключение конкретных обработчиков и надо сделать модулями-плагинами.
  5. Шаблонизатор. Какой шаблонизатор?! о_О
    а) PHP - лучший шаблонизатор
    б) у нас же XML - для него есть XSLT
    в) можно сказать, что это будет шаблонизатор pull типа (смарти типа push)

Ядро.
Ядром системы будет пхп. Что за странный выбор, спросите вы? Что эдакового вы хотите видеть в ядре, чего нет в пхп, спрошу я вас?

MVC.
МВЦ не существует.

Модули.
Плагины являются самодостаточными или наследованными компонентами.
На вход получают дозу XML, или не получают. Выдают свой XML, как правило. Плагинов без вывода очень мало.
Подключаются

Виджеты!
Работают только с визуальной частью плагинов.
Очень интересно, но непонятно пока, как это подключать.

Helpers
Хелперы - весьма полезная штука. Посмотрим, как оно уживётся с пул-шаблонизатором.

ps: http://code.google.com/p/yeap/

2009/03/27

авторское право

http://habrahabr.ru/blogs/copyright/55609/#comment_1491273
цитаты законов, регулирующих право автора на интеллектуальный труд. с чувством, с толком, с расстановкой, наездами и распальцовкой. рекомендую
Два сообщения.
а) Просто информация.
jumpidea.com хорошая идея. унылое воплощение. им нужен дизайнер и корректор

б) Слухи.
компания (холдинг?) a1 скупает стартапы. первоначально это выглядит как организация конкурсов и преложения о сотрудничестве. без комментариев.

2009/03/26

Apache, PHP, MySQL, Windows, SVN (part 2)

Apache 2.2

Server Information
Если сервер находится в домене, и вы хотите светиться в интранете, и в сети правильно настроены днс+дхцп, то лучше согласиться с автоопределёнными параметрами, кроме почты.
Но в принципе, localhost www.localhost admin@localhost тоже удачный выбор.
(Всё равно нам локалхост не нужен будет, все сервера будем разворачивать на виртуальных хостах.)
+ Установить как сервис.

Custom setup
Я оставляю только Apache Runtime и меняю каталог \server\apache

Всё.
Обратившись браузером на localhost видим оптимистичное It Works!

Останавливаем службу apache2.2

Идём в каталог конфига апача (у нас \server\apache\conf\) редактируем httpd.conf
раскомментируем строки относящиеся к mod_rewrite и vhost

Устанавливаем PHP
Выбираем путь. Все привыкли уже? \server\php
Ставим как модуль апача2.2 (в следующем окне указываем путь к конфигу апача, только что его редактировали)
Самое интересное ;) экстеншены - расширения. Джентельменский набор:
CURL
gd2
Multi-byte string functions
MySQL
PDO - MySQL (PDO - PostgreSQL, PDO - SQLite, PDO - Firebird)
Sockets
XSL
zip

ну ещё PostgerSQL себе поставил, mcrypt, mhash, Tidy, XML-RPC
Finish

Проверяем: в httpd.conf внизу появились строки про загрузку пхп5 как модуля

Если у вас в процессе установки появились ошибки, значит что-то вы сделали неправильно. Скорее всего, вы забыли остановить службу веб-сервера.

SVN-client
Как говорил Джон Коннор: "Easy money". Сами.
В свн надо запомнить две основные команды: update (up) и commit, и две дополнительные: checkout (co) - сливает инфу из репозитория с внешнего сервера на локаль, import - вылить инфу из локаля в предварительно сформированный(!!!) репозиторий.

Apache-VHOST
Настройки находятся в extra\httpd-vhost.conf
Копируем одну из секций. Настраиваем:

# много инструкций, найдите две самые нужные
<VirtualHost dummy-host2:80>
    ServerAdmin webmaster@dummy-host2
    DocumentRoot "C:\htdocs\dummy-host2\trunk\htdocs"
    ServerName dummy-host2
    ServerSignature Off
    ServerAlias www.dummy-host2
    ErrorLog "logs/dummy-host2.error.log"
    CustomLog "logs/dummy-host2.access.log" common

# так подключают mod_rewrite
    <Directory "C:\htdocs\dummy-host2\trunk\htdocs" >
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
#         ^ вот так
        Order allow,deny
# это порядок уровней доступа
        Allow from all
    </Directory>

# тоже полезно
    <FilesMatch "^\.ht">
        Order allow,deny
        Deny from all
        Satisfy All
    </FilesMatch>

</VirtualHost>


* This source code was highlighted with Source Code Highlighter.


Редактируем файл hosts. Куча манов в интернетах
Запускаем сервис

Alles gut!
:)

Apache, PHP, MySQL, Windows, SVN

MySQL
Разумеется, выборочная установка
Изменяем пути на что-нибудь типа \server\mysql\ и для хранения данных \server\mysql\data\
Я ещё и документацию отключаю - только потому, что её всегда можно на сайте посмотреть.

Соглашаемся на конфигурацию. Внимание! Конфигурация проводится один раз! Если не получится - самое простое решение: переустановить сервер.
Хмм... у меня не запустилась. Идём в старт-меню, ищём там конфигуратор.
Детальная конфигурация.
Девелоперская машина.
Мультифункциональная.
Для движка InnoDB указываем путь хранения файлов, желательно не на FAT-разделе - это связано с особенностями движка.
Колличество коннектов не особенно важно для нас.
Включить доступ через порт 3306 (можно изменить, если несоклько серверов). Я за Strict mode.
Далее мультиязычность: установка второй кнопы равнозначна выбору utf8 в треттьем пункте.
Устанавливать как сервис (можно выбрать имя сервиса для использования в команде net start или для нескольких серверов).
Включить каталог mysql/bin в системные пути, и тогда можно просто запускать консоль командой mysql в любом месте.
Внимание! root password! запомните его. Восстановлению забытых рутовых паролей посвящено много страниц в интернетах.
Execute.
У меня не стартовал сервис. Думаю, я забыл перезагрузку. Сейчас проверим

ps: действительно, перезагрузка устанавливает mysql как сервис.
проверяем работу. консоль (Winkey+R, cmd, Enter), mysql -uroot -p{вашпароль}
подключилось? - хорошо, сервер работает.
У меня не подключилось.
mysql -uroot
help set password;
set password for root = password('вашпароль');
упс, не получилось, читаем хелп внимательней, исправляем.
quit;

Настраиваем Komodo

Edit - Preferences
a) enable Show Buton Text, disable Show Start Page
code) enable autocomplite
editor) show line number
key bindings) delete line Ctrl-Y, duplicate line Ctrl-D, previous file Ctrl-Shift-Tab, next file Ctrl-Tab, Undo Alt-Backspace, Redo Alt-Shift-Backspace, Focus on Project Pane Ctrl-1, Focus on Editor Ctrl-2, Focus on Toolbox Pane Ctrl-3, Focus on Bottom Pane Ctrl-4
indentation) width on each tab = 4, Language settings: PHP, HTML, JavaScript - enable Prefer 4 4
smart editing) Use tab - на любителя, disable Hyperlinks, Syntax Checking я ставлю 2500мсек
save options) Clean trailing whitespace
font&colors) я ставлю схему medium
internationalization) Language specific utf-8 without BOM
language) после установки пхп вернуться и поставить правильные значения
в серверах можно поставить фтп и прочее, но мы-то ведь пользуемся умным свн-ом ;)

Идем Tools - Add-ons ищем и ставим Komodo Source Tree
удаляем или отключаем ненужное

Инструментарий разработчика, или как нам обустроить винду

очень быстро и кратко

http://portableapps.com/suite Firefox, Thunderbird, OpenOffice + ещё что-то в одном флаконе
для разработчика к Firefox комплект плагинов Adblock plus, Web Developer, Firebug, Regular Expressions Tester, SQL Injection

двухпанельный filemanager http://www.freecommander.com/ru/fc_u3_ru.htm или http://portableapps.com/apps/utilities/xenon_portable (не смотрел ещё)
архиватор 7-zip
маленький редактор (чтоб где-нить подправить) с поддержкой юникода и подсветкой Notepad++
плейер http://www.aimp.ru/
видео плейер + комплект кодеков K-Lite Codec Pack

аська (в принципе, переносима) http://rnq.ru/ , или http://mdc.ru/download.php (+jabber+irc), или миранда, или выбери себе сам
irc http://www.kvirc.ru/
скайп 3.8
ластфм
что ещё?

для параноиков без корпоративной прокси файрволл+антивирус http://www.personalfirewall.comodo.com/download_firewall.html

Apache, PHP, MySQL качаем с официальных сайтов последние stable версии (*.msi желательно), и PostgreSQL для души :)
ах да, комплект WAMPS: SVN клиент здесь: http://tortoisesvn.tigris.org/
SVN Server for Windows также существует, но уже не устанавливается на мой лицензионный в2к

ИДЕ: http://www.activestate.com/komodo_edit/ правильный выбор. Есть зенды, эклипсы и прочая муть типа нетбинс от СанМС - пробовал всё, остановился на Komodo
к нему не забываем ставить плагин SourceExplorer

ничего не забыл?
semagic ещё, чтоб в блоги писать :)
Семаджик умеет отправлять записи в блоггер, вокс и на ещё какие-то хитрые сервера

2009/03/24

Концепция изменилась!

Итак, концепция изменилась.
Мне надоело работать унылую работу над унылым проектом в унылом недоофисе (бывш. складской барак 19века постройки) без отопления и без коллег. И я не пошёл на работу. Как я вчера ответил одному иностранному другу на вопрос "Каг делО?" - I want drop my job & will have my work (конечно, это неверная конструкция :) надо бросить работу и заняться, наконец, делом.
А дело будет такое: я хочу, чтоб работа нашла меня сама :)
И в промоцелях буду
  • вести этот блог
  • писать очередную CMS (принципы и условия позже)
  • писать статьи с пометкой "заказные". Их можно купить.
  • писать в ленту http://www.plurk.com/zenaround (на твиттере так же https://twitter.com/zenaround) об успехах, объявлениях и разном
Ах да, "высокие цели". Помимо ожидания горы будем копить на ноутбук.