Идеальные закладки
Спустя годы развития браузеров разработчикам остался всего один шаг до идеальных закладок.
Попробовали уже все — и восстановление открытых страниц при выходе и быстрые панели и отмену закрытия страниц. Это все почти закладки, потому что позволяют быстро восстанавливать «сохраненные» страницы. Только удобнее, потому что не надо совершать никаких специальных действий.
И сами закладки стали не нужны, потому что браузер и так может хранить открытой тысячу страниц.
Осталось всего ничего: если в Опере, например, сделают в группе вкладок/табов не два пункта «Разгруппировать» и «Закрыть», а три, и третьим пунктом будет «Сохранить» — то получатся, наконец-то, идеальные закладки.
Оно все равно там уже рассортировано фактически «по папкам», не давать это сохранять в один клик — преступление перед человечеством.
Таскттер
А теперь — о йоге. Отщепенцы из фейсбука создали очередной таск-трекер, называется «Асана». Штука клевая, как обычно не работает в опере и перегружена фичами.
Для малых рабочих групп нужен таскменеджер, сделанный по принципу твиттера: есть поле для ввода текста, есть лента сообщений.
Если в тексте написать @username, то уведомление уходит соответствующему пользователю, если сообщение начать со, скажем, звездочки, то оно превращается в пункт todo, который надо зачекать при выполнении.
У пользователя есть mentions и mentions/task (эти самые чеклисты).
На «твит» можно ответить, тогда это «комментарий», цепочки ответов подклеиваются друг к другу и создают треды обсуждений (в твиттере они подклеивают, но показывают только последний, приходится прокликивать), если в треде есть @упоминание, то он шерится с пользователем.
Короче, тупо твиттер с нормальными тредами и возможностью из твита сделать элемент todo.
Предназначено для маленьких проектов/команд, когда все в контексте, ну чтобы твит «жопа на странице с жопой» понималась адресатом правильно, и не было необходимости «заполнять все поля», как в серьезных таскменеджерах «проект А — серверная часть — блок Б — третий поворот слева — тип „баг“ — приоритет 4».
Файлы в базе
Люди, которые хранят файлы в базе — больные извращенцы.
Если это MySql, хехе.
В Монго есть специальный механизм для хранения файлов в «базе», называется GridFS.
Полезностей у него минимум две:
1. Легкий бэкап кучи файлов с помощью репликации базы.
2. Все равно нужна таблица с метаинформацией к файлам, тут все хранится «вместе».
Цитата раз:
A: The nice thing about GridFS is that it streams the data back to the client, so you never need more than 4MB of memory.
Q: Now I know.
Цитата два:
There is currently no method that automatically streams chunks, but it would be fairly easy to write by querying the $grid->chunks collection.
Кто-то из них явно пиздит. Скорее всего, везде, кроме Советской России, файл и правда отдается чанками, но конкретно в PHP такого способа нет (MongoGridFSFile::getBytes() грузит файл целиком в память).
Пришлось делать как-то так, короче:
foreach($cursor as $chunk) echo $chunk['data']->bin;$cursor = $M[chunks]->find(array("files_id" => $img->file['_id']))->sort(array("n" => 1));
В общем, я на очередном дейтинге проекте пока сделал «все картинки в базе», а там поглядим.
R3
Вы, наверное, ждете, что я, как какой-нибудь Бирман, буду расписывать прелести нового движка? (Он называется, кстати, R3 — только потому, что предыдущий назывался R2).
Так вот, не буду.
В серверной части от тривиален. Нет, ну все же знают эту старую фишку, что разница эффективности программистов может достигать 20 раз, про это писали все, кому ни лень. Я не говорю, что я ровно в 20 раз эффективней остальных. Максимум в 19,95.
(Иными словами, я допускаю, что кому-то на что-то подобное потребуется 19 дней, но это не делает задачу нетривиальной).
Тем не менее, mongodb — документная база данных, прелести которой я уже расписывал. Очевидно, что комментарии к заметке хранятся прямо в документе «заметка», в комментариях хранятся «пользователи», про всякие мелочи, типа тэгов и поискового индекса я молчу.
И на все хватает одной «таблицы», которая называется «заметки». Удивительно!
Очевидно, что utf-8, потому что некуда деваться.
«Приводить примеры кода» просто бессмысленно, ну, скажем, выборка по тэгу делается «примерно так»:
$entries -> find (array ("tag" => "mongodb"));
Писать подобное глупо, потому что это просто обычный синтаксис выборки, — то же самое, что описывать SELECT в mysql, например.
Вся «серверная» часть занимает не больше дня (смотри про 19 дней выше), а делать блог без ояксов в наше время просто стыдно. Поэтому очевидно, что основные усилия пришлось приложить к html-ю, js и css — вещам, которые я совсем забыл/не знал. Тут тоже ничего такого нет, комментарии аяксом — тоже мне невидаль. Особенно если ты это умеешь (я не умею, но это не повод для гордости).
Прогресс не стоит на месте, сейчас даже девушка может собрать свой блогодвижок на каком-нибудь junko или boobie on trains за 15 минут, поэтому любой человек, который всерьез пишет о своем лучшем в мире движке блога сейчас (а не лет 10 назад), просто неадекватен.