Сетевой дневник, регулярно пополняемый записями

Человек, разработавший какое-то количество более или менее однотипных приложений наверняка имеет привычный для себя набор инструментов. Это может быть индивидуально сконфигурированная IDE, минимальный набор библиотек и т.д. Если назвать сайты однотипными приложениями, то становится ясно, что эта однотипность в каждом отдельном случае выливается в каркас приложения. Этот каркас называют фреймворком.

Существует множество готовых фреймворков для разных языков программирования. В этом и, возможно, нескольких следующих постах я собираюсь написать свой фреймворк или хотя бы начать это делать, естественно, на величайшем языке программирования PHP. Это все из-за "низкого порога вхождения в язык". Ну, и как обычно: на абсолютность не претендую, just for fun.

Для погружения в таинственную атмосферу пхпшности, расскажу, каким образом я докатился до такой идеи.

Самые первые мои сайты были образцом плохого кода. Я был слабо знаком с приемами и тонкостями программирования на пхп, поэтому, как правило, использовался самый дубовый подход. В частности, сайт представлял из себя один большой файл. Наиболее сложным этапом была поддержка. Чтобы изменить мельчайшую деталь, приходилось сливать файл, лезть в код и там править операторы вывода, которые возвращали хтмл.

Начальным улучшением стала модульность. Со временем я понял, что некоторые части огромной программы можно выносить в отдельные файлы. Таким образом появились конфиги и файлы с функциями. Теперь не нужно было туда сюда гонять одни и те же данные, изменения вносились непосредственно в логику работу, в то время как более или менее постоянные вещи не трогались.

Вторым крупным шагом было введение классов и, как следствие, переход к ООП. Вообще, ООП в пхп есть не нативная штука, а прикрученная в результате давления времени приблуда. Постоянно сталкиваясь с различными проблемами вызванными некоторыми ограничениями пхп, например его динамической типизацией, объектную модель все же начал использовать. Приложения стали более красивыми, более масштабируемыми и еще много "более".

А однажды, когда я, неистово матерясь, в очередной раз "ровнял хтмл", расставляя экранирующие слэши в проклятых echo, мое терпение лопнуло и я полез в интернет, посмотреть, как с такими вещами справляются нормальные люди. То есть возникла естественная необходимость отделения кода от отображения, а это уже какое никакое подмножество MVC. Я выбрал шаблонизатор Smarty, который показался мне наиболее очевидным и не требовал особых извращений. Жить стало еще проще. Тут как раз познакомился с концепцией MVC и стал вводить и модели.

В результате всех этих действий, новые сайты получались следущим образом: я честно делал папку с названием свежего проекта, в ней создавал индех.пхп, а потом чесал репу, удалял это ненужное добро, брал один из старых сайтов и переименовывал его в новый проект. Фактически, это и был фреймворк, но очень неудобный, потому что каждый раз приходилось делать уйму лишних действий.

В принципе на этом предысторию можно заканчивать и переходить непосредственно к тому, чем я собрался заниматься.

 ruz  |    12 августа 2010 года, в 16:10  |    Комментарии (4)

Структура базы этого блога достаточно стандартна. Помимо прочего, есть две таблицы, назовем их records и comments, содержащие в себе записи и комментарии соответственно. И еще имеется табличка record_comments, содержащая отношения комментариев к постам.

В самой первой версии не было классненьких циферок возле слова "Комментарии" у подножья каждой записи, но после они появились. Работало это примерно так: выбирались записи на странице, эта выборка джойнилась с выборкой из таблицы коментов и все группировалось по записям. Таким образом одним запросом на выходе получался набор, в котором для каждой записи уже было подсчитано количество комментариев. Все хорошо, но только у нормального человека при взгляде на такую конструкцию волосы становились дыбом, поскольку фактически при каждом обновлении страницы с записями выполнялось произведение количества записей на количество коментов. Тысячами записями и миллионом посещений в день похвастать не могу, но все-таки надо было доводить до ума.

В первую очередь хотелось совсем отказаться от идеи подсчета коментов, но циферки были столь красивы, что я не смог удержаться. В итоге сделал следующее: в таблицу records добавил еще одно поле comments_count, которое содержало в себе количество комментариев к этой записи. Затем написал и один раз прогнал скрипт, подсчитывающий комментарии и заполнявший новое поле. Ну и для полного счастья рассмотрел все случаи, когда происходит изменение количества комментариев и на каждый повешал обработчик, который лез в базу и делал в ней соответствующие изменения. Этот метод кажется менее очевидным, поскольку налицо потенциальная дыра: рассинхронизация фактического количества комментариев с тем количеством, что указано в поле comments_count. Однако пока все работает и считает нормально. Таким образом запрос для выбора списка записей так и остался простым запросом, без разных там джойнов.

Так вот, в случае с метками я поступил также и теперь помимо прочего таблица records содержит еще и поле tags, в котором хранятся метки записи. Это, конечно, увеличивает избыточность данных, но зато быстродействие не падает. Хотя на самом деле этого никто не замечает.

Кстати, это будет первая запись, у которой проставлены метки.

 ruz  |    11 августа 2010 года, в 01:50  |    Комментарии (10)

Вообще, мне не нравится слово "тэг". А в силу того, что сейчас модно заменять слова, которые не нравятся своими вариантами, я буду называть тэги метками. Итак, поговорим о метках.

Почему-то в системах, использующих метки, принято проставлять их после каждой записи. То есть помимо поста и метаданных пользователь также имеет возможность лицезреть метки этой самой записи. Причем в общем случае эти метки достойны пера Капитана Очевидность. Это приводит к тому, что по истечении некоторого времени количество меток неприлично разрастается, и они теряют тот смысл, что был в них вложен изначально. Чтобы спасти ситуацию, начинают лепить какие-то "облака тэгов", графически выделяя наиболее популярные метки, но это не помогает. В частности, я ни разу в жизни не пользовался облаком тэгов по прямому назначению.

Чтобы не было подобных проблем, я решил сделать две вещи: во-первых, не показывать метки к каждой записи; во-вторых сделать как можно сильнее сократив их количество. Таким образом, под меню теперь появилась новая панелька, в которой будут отображаться те немногие, кто уцелеет и приживется. Сейчас, правда, метки не проставлены в большинстве записей, поэтому смотреть особо не на что.

Следующим постом буду рассуждать о технической реализации.

 ruz  |    09 августа 2010 года, в 17:05  |    Комментарии (7)

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

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

Прежде всего, случилось непонятное с разработчиками. Вместо того, чтобы вести приятнейшие диалоги с пользователями, они стали все чаще светиться на различных мероприятиях, и с каждым разом их лица становились все более и более просветленными, что для рядовых пользователей означало потерю контакта. Пожелания и предложения игнорировались, и вместо нормальных ответов пользователи получали высокопарные фразы о гандонах и д'артаньянах. Это было начало.

Затем случилось непонятное с пользователями. Их становилось все больше, они собирались группами, производили гигабайты ужасных фотографий, выкладывали все это в любимом бложике и вытаскивали друг друга в топ. Появились сладенькие до тошноты комментарии, комментаторы и платформа наполнилась приевшимися лицами, выражающими одно и то же.

А потом обновили саму блог-платформу. Пользователей разделили на категории, стали активно пиарить местных знаменитостей, которые оказались скучными и бесполезными боггерами. Вдобавок ко всему все неожиданно стали жутко ревнивыми до кармы.

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

Пора уже делать свой лунапарк со всеми причиндалами.

 ruz  |    08 августа 2010 года, в 03:25  |    Комментарии (6)

В те далекие времена, когда еще не было кабельного телевидения и из окон квартир не торчали спутниковые тарелки, народ каждую пятницу собирался возле телевизоров в ожидании незамысловатых и до боли знакомых звуков. Барабан, усы Якубовича и соленые огурцы -- такими были признаки той эпохи. Эпохи передачи "Поле чудес".

Помимо хитрого сектора приз, где Леонид Аркадьевич мог наебать человека, вручив вместо 50.000 рублей ключи не от ссаных жигулей, а от навесного замка, в "Поле Чудес" всегда было полно явной и скрытой рекламы. В частности, на протяжении некоторого периода времени следующим образом рекламировалось какое-то страховое агенство: каждому игроку из первых троек предлагалось по три вида страховых случаев. Два банкрота подряд, не дошел ход и не угадал ни одной буквы. То есть человек мог выбрать страховой случай и если такой наступал, то в качестве компенсации выплачивалась какая-то сумма.

Очевидно, что самым заманчивым случаем является вариант "не угадал буквы", поскольку лишь он позволяет игроку распоряжаться своей судьбой, а не отдаваться в руки слепого рока. Были даже отдельные отчаянные пенсионеры, которые, в попытках удержать синицу в руках, называли нелепые буквы типа Ъ или вообще Ц. Дело в том, что мне и всем кого я помню тогда наиболее выгодным казался вариант двух банкротов подряд. Почему это было так -- непонятно. Ведь полечудесовскому барабану, как и сердцу, неприкажешь. Однако спросив недавно об этом у других людей, я с удивлением обнаружил, что их в детстве преследовала таже самая мысль. Видимо раньше мышление у людей другим было.

А еще там были проклятые две шкатулки.

 ruz  |    04 августа 2010 года, в 01:53  |    Нет комментариев

Случилось, однако, так, что на сегодняшний день много людей умеют писАть. Не водить ручкой по бумаге, вырисовывая буквы, а составлять эти самые буквы в слова, а потом располагать получившееся в такой последовательности, что аудитории нравится результат. Блоги, форумы, комментарии -- это все уже поселилось в наших головах, став частью повседневной культуры. Следовательно, среднестатистический человек все чаще пытается излагать свои мысли в читабельной форме, а это, как ни крути, практика. Много людей рано или поздно задают себе вопрос: "А чем я хуже того-то?". Мол, если Толстой написал, то почему я не смогу? Эмоции бурлят и требуют выхода. Таким образом и появляются горе-писатели.

(следующий абзац можно не читать)

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

(предыдущий абзац можно было не читать)

Вообще, этот пост к тому, как отличить хорошего писателя от плохого. Конечно же, это дело вкуса, но матчасть знать необходимо. Для себя, например, я придумал следующее: если человек в своих произведениях использует много шаблонного материала, то смело можно захлопывать книгу/закрывать браузер/злобно бить кулаком по кнопке ресет, поскольку читать такую ересь невообразимо противно. Представлю-ка я небольшой список таких фраз и буду закругляться.

  • предательская слеза [скатилась по щеке],
  • плоский живот, упругая грудь(и другие подобные описания женского тела),
  • ...
 ruz  |    10 июня 2010 года, в 10:33  |    Комментарии (4)

Когда я в школе готовился к олимпиадам по информатике, мне очень помогала одна хорошая книжка. Вообще, в ее названии фигурировало слово Pascal, но в отличие от остальных пятиста миллионов подобных книг в ней больше внимания уделялось не самому языку, а стилю программирования и алгоритмам.

В одной из глав этой книги описывалась программа, определяющая, является ли заданное число простым. Алгоритм построения программы был следующим: вначале писАлась самая "дубовая" реализация, а затем путем улучшений получался красивый и мудрый код.

Таким образом код функции проверки простоты числа в первом варианте программы выглядел примерно так:

	for i:=1 to n do 
		if n mod i = 0 then inc(count);
	if count > 2 then prime := true;

То есть это был совершенно примитивный лобовой подход.

Первым очевидным улучшением стало изменение диапазонов цикла, а также проверка счетчика внутри цикла:

	for i:=2 to n-1 do 
		if n mod i = 0 then 
			begin 
				prime:=false; 
				break; 
			end;

Далее, верхняя граница цикла подвинулась влево, поскольку проверять можно было лишь до корня квадратного из n.

Возможно, были еще улучшения, но их я уже не помню.

Таким образом в кратчайшие сроки реализовав рабочий вариант программы, она улучшается, без ущерба остальным компонентам, при этом оставаясь работоспособной. Мне кажется, что, в общем случае, таким и должен быть процесс разработки.

 ruz  |    08 июня 2010 года, в 15:35  |    Комментарии (2)

В последнее время приходится лопатить много технической литературы. Читая справочники, туториалы и просто описания, красиво оформленные в виде многометровых пдф-файлов и подписанные именитыми Manning и Apress, я пришел к неутешительному выводу, что бОльшая часть написанного особой важности не имеет, даже несмотря на целостность повествования и кажущуюся необходимость.

Рассмотрим, например, книгу, посвященную удобной технологии AJAX. Еще только познавая азы, я уже был удивлен обилию ненужного материала об аяксе, имеющегося в сети. Все это привело к созданию 680-страничного кирпича Ajax in Action издательства Manning. Казалось бы, чего тут описывать? Один пресловутый объект, который выполняет всю грязную работу, несколько триков для симпатичного кода -- вот и вся книжка. Ан нет 107 страниц занимает только введение.

Авторы старательно льют тонны воды, превращая поиск по тексту книги в непосильную задачу. Все это не выбивается из общего контекста, но настолько засоряет мозг, что порой даже сложно вспомнить, какую книгу ты сейчас читаешь. Особо цинично на этом фоне выглядит книга, описывающая одно популярное нынче портальное решение. Автор старательно снял скриншоты с большинства страниц портала, снабдил их незаурядными поясненими("в поле ввода 'Имя' введите свое имя") и получил на выходе руководство, которое кто-то, возможно, даже покупает. Проматывая данный опус, я с восхищением отметил, что автор, возможно, познал смысл вселенской сверхмудрости.

А может просто мне такое добро попадается?

 ruz  |    17 марта 2010 года, в 00:54  |    Комментарии (5)

По теме "умных" ботов, оставляющих осмысленные комментарии к тому или иному посту, могу сказать примерно следующее: производится поиск по ключевым словам(в моем случае слово "фильм") и далее оставляются комментарии со ссылками, по которым я, к сожалению, сходить не успел.

Попробую стрельнуть из пушки по воробьям: прикрутил recaptcha. Работает следующим образом: выдается два слова, одно из которых системе известно. Соответственно, по нему и идет проверка. Второе слово -- это попытка заставить человека совершить несколько движений пальцами для помощи в распознании нераспознаваемого текста. Сравнивать второе слово не с чем, поэтому оно не проверяется.

А теперь тестовая провокация: какой отличный фильм я посмотрел сегодня!

 ruz  |    02 марта 2010 года, в 01:42  |    Комментарии (4)

Просмотрел трейлер фильма "Заблудившийся" от Sataifilm.

Многое можно понять и простить современному отечественному кинематографу. И сюжеты дешевые, и нацеленность на отбивание бабла, и лексусы470 для крутости везде, где только можно. Но единственное, чего не понимаю, так это приглашений уже порядком надоевших Мерзликина, Дюжева, Вдовиченкова. Бесспорно, Бумер и Бригада нравятся подавляющему большинству населения, но все-таки расписываться в низкобюджетности фильма, пригласив вместо какого-нибудь популярного нынче Хабенского недорогого Мерзликина не стоит. Неужели в Казахстане нет своих нормальных актеров, которых можно снимать?

Да хотя бы того же бригадира из "Рэкетира" позвать можно. И стоит дешевле, и смотрелся бы неплохо, и поднаторел бы в данном жанре. Но нет, решили в очередной раз позвать не такого уж и талантливого, в сущности, актера Мерзликина. Никак не могу углядеть в этом смысла.

Сквозь мои розовые очки все выглядит иначе. В отечественных фильмах снимаются отечественные актеры и при произнесении фразы "отечественный кинематограф" не становится как-то неловко.

 ruz  |    04 октября 2009 года, в 16:27  |    Комментарии (4)
1 | 2 | 3 | 4 | 5 | 6