October 8th, 2008
August 31st, 2008
July 25th, 2008
June 18th, 2008
Шаблон проектирования «Active record» представляет собой популярный подход к хранению данных в реляционных базах данных. Впервые упоминается Мартином Фолером (Martin Fowler) в книге «Patterns of Enterprise Application Architecture». Суть шаблона в том, что запись в базе данных представлена как объект (класс) в языке программирования. Обращение к базе данных происходит через методы класса, а не посредством SQL. Изменения свойств объекта ведут к изменению значений полей в базе данных.
June 16th, 2008
Проблема:
Требуется, чтобы несколько взаимодействующих между собой объектов могли управлять логикой определенных методов.
Например: каждый из объектов имеет метод Data(), который возвращает данные, необходимые для отображения объекта на странице (данные для шаблонизатора). Например объект $news класса News должен возвратить 5 последних новостей в приемлемом для шаблонизатора виде,например в виде массива. В свою очередь News::Data() обращается поочередно к объектам $newsPost->Data() для получения данных, касающихся отдельной новости (заголовок, дата и т.д.). Однако в некоторых случаях требуется, чтобы NewsPosе::Data() возвращал не полные данные, а лишь заголовок (например на главной странице сайта), а в другом случае требуется, чтобы вернулись все данные, включая ссылки на «новости по теме».
Применение нескольких методов Data() ( DataShort(), DataFull() ) решило бы проблему, но хотелось бы более элегантного решения.
Управляющий скрипт (допустим, конструктор страницы) «знает» в каком виде NewsPost::Data() должен вернуть данные, однако он не может напрямую взаимодействовать с объектами класса NewsPost, потому как это «забота» класса News. Следовательно, все, что может скрипт, это «попросить» $news «попросить» $newsPost вернуть «сокращенные» данные.
$data = $news->Data('ask newsPost: return short data');
тогда внутри News::Data() будет что-то:
public function Data($askWhat)
{
...
$dataNews = $this->newsPost->Data('return short data');
...
}
возможно, NewsPost::Data() обращается еще к каким-то объектам, допустим NewsPostBody::Data() для получения собственно статьи. Тогда, получив запрос «short data» на NewsPost::Data(), нужно сделать запрос с параметром «body short» к методу NewsPostBody::Data(). Не обязательно «управляющему скрипту» знать об этом, однако нельзя блокировать возможность напрямую «дать указание» объекту класса NewsPostBody вернуть «короткий вариант» статьи. То есть что-то вроде:
$data = $news->Data('ask NewsPostBody: return short article');
Однако, возможна ситуация, когда нужно обращаться к методу NewsPostBody::Data() с разными параметрами, причем за один запрос. Например когда News содержит «новости сайта», где NewsPostBody::Data() должен всегда возвращать «необрезанную» версию. То есть что-то вроде:
$data = $news->Data('ask NewsPostBody(main news only): return short article');
или:
$data = $news->Data('return main news short body');
но тогда News::Data() должен сделать примерно следующее:
или еще сложнее, когда для SiteNewsBody::Data() передаются другие параметры, например 'return SEO friendly body'.
Вырисовываются некоторые технические требования:
управляющая составляющая (команда)
адресат (кому предназначается управляющая команда)
указание лишь класса объекта недопустимо, дополнительно требуется указать «адресата» на уровне «бизнес логики», или «контекст», так как возможно несколько значений одного и того же параметра для одного и того же класса (возможно даже объекта) в различных контекстах.
Context::Class::Command
Class, принципе, тоже в нектором свмсле «контекст», так что можно использовать «вложение контекстов»:
ContextInContextInContex::Command
Также следует подумать о расширенном использовании управляющей составляющей Command и предусмотреть возможность отделения аргумента от собственно «команды», напрмер «body_short=250», что может означать «ограничить статью до 250 символов». Имеем:
ContextInContext::Command[=Argument(s)];
$data = $news->Data(new Parameters('NewsBodyInMainNews:short=250;N
Попробуем набросать интерфейс «в живую»:
function News::Data($params)
{
$newsData = new NewsData();
// добавляем необходимые данные с параметрами в контексте 'SiteNews'
// должен использоваться параметр short=500 и seo_freindly и keepHtml
$params->useContext('SiteNews');
$newsData->add( $this->getSiteNewsData($params) );
$params->dontUseContext('SiteNews');
// добавляем необходимые данные с параметрами в контексте 'MainNews'
// должны использоваться только параметры short=250 и keepHtml
$params->useContext('MainNews');
$newsData->add( $this->getMainNewsData($params) );
$params->dontUseContext('MainNews');
return $newsData;
}
...
function NewsBody::Data($params)
{
$newsBodyData = new NewsBodyData();
$params->useContext('NewsBody');
$bodyLimit = $params->get('short');
$newsBodyData->add('body', $this->getBody($bodyLimit));
$params->dontUseContext('NewsBody');
..
return $newsBodyData;
}
Почти все готово для начала разработки класса. Подведем итог и выделим основные моменты в будущем классе:
Значение параметра можно задать в определенном «контексте», причем контекст может быть «вложенным» (NewsBodyInMainNewsInPage не то же самое что NewsBodyInSiteNewsInPage);
метод get() должен возвращать значение параметра в текущем контексте, заданным в useContext();
возможность «объединения» параметров (двух объектов класса Parameters с возможностью управления перегрузкой значений для одинаковых параметров)
возможность задавать параметры строкой, вида 'ContextInContext:param=value;param2' или вызывая метод set($parameter, $value, $context)
Можно приступать к реализации.
June 11th, 2008
Нетривиальное решение - использование константы SQL_CALC_FOUND_ROWS. Просто добавь её в запрос!
SELECT SQL_CALC_FOUND_ROWS
id
FROM products
LIMIT 3, 25
получаем записи для вывода на страницу (25 штук)
Потом (сразу же, следующий запрос):
SELECT FOUND_ROWS()
Получаем сколько всего записей, допустим 1387.
June 7th, 2008
При проектирование практически каждого веб-приложения приходится иметь дело с «профайлами», или «анкетами» Будь то сайт знакомств или электронный магазин — «профайл» - это совокупность свойств бизнес — объекта. (Прошу не путать со свойствами объекта в программировании).
Например: профайл пользователя содержит свойства пользователя (человека), например имя, фамилию, номер телефона или кредитной карты, email. Наиболее распространенный подход для решения проблемы — добавить соответствующие члены класса User:
class User
{
public $username;
public $email;
public $firstName;
public $icq;
...
}
Однако в этом случае сразу же следует забыть о гибкости — при добавлении\изменении количества или функциональности полей профайла потребуется изменить класс User, что семантический неверно, так как функционал User по сути в этом случае не меняется. Гораздо лучше будет выглядеть:
class User
{
public $username;
protected $profile = array(
'firstName'=>null,
'icq'=>null,
'email'=>null
);
...
}
Уже гораздо лучше! Однако следует затронуть еще один момент...
При выводе на страницу определенного поля, нам, возможно, потребуется особым образом подготовить данные. Например, для email добавить <a href='mailto.. для адреса добавить ссылку на google maps и т.д. То есть, хотелось бы ввести тип данных поля.
class ProfileField
{
protected $name;
protected $type;
protected $value
}
И класс User:
class User
{
public $username;
/**
* массив объектов ProfileField
*/
protected $profile = array(
);
...
}
Теперь при выводе на страницу любого поля мы знаем, какие данные оно в себе несет. Не нужна привязка по имени — можно «взять все поля, содержащие номер телефона и вывести на страницу»
<xsl:apply-templates select='profile-field[@type='email']'/>
<xsl:template match='profile-field[@type='email']'>
email: <a href='mailto:{text()}'><xsl:value-of select='.'/></a>
</xsl:template>
June 6th, 2008
Чаще всего это выглядит как декларация свойств public, а не protected или private. И бывает вызвано "незрелым программированием" - когда программист начинает писать класс, до конца не зная, что он (класс) будет делать.
Как бороться? Проектировать и утверждать интерфейс класса до написания кода.
May 31st, 2008
;)
May 5th, 2008
Нас - около 8ми человек (пока), есть мальчики и девочки. Будем играть в лесочке у Алмазов. Для полного счастья не хватает нескольких желающих человек.
March 21st, 2008
Проголосовать можно тут: http://superloto.by/mis_superloto/
Передайте, пожалуйста, всем своим контактам… Заранее СПАСИБО!
March 8th, 2008
March 6th, 2008
February 27th, 2008
card No: 1234123412341234
Sec code: 123
February 24th, 2008
February 22nd, 2008
February 18th, 2008
February 14th, 2008
$ rm -f a*
ошибка: Argument list too long
решение:
$find . -name 'a*' | xargs rm
January 25th, 2008
Решение:
Добавляем в файл /etc/crontab строчку
DISPLAY=:0
Теперь приложения знают, где дисплей. Потом:
$xhost +
Теперь X-server разрешает всем к себе подключаться.
Всё.
January 23rd, 2008
...позволь тебе представить: пан доктор М. Разум Мой собственный. А «М» – это Мудрый.
Ко мне он обращается не иначе как «Сердце». А мое имя полностью игнорирует. Я уже привыкла. Для него я «Сердце». В этом, наверно, нет ничего оскорбительного?
С ним трудно спорить. Он не умеет чувствовать. Да и пить он стал только после того, как я его разнервировала. Я воспроизвела по памяти то, что он мне говорил. В основном для тебя. Ты ведь любишь такие дискуссии.
January 8th, 2008
January 4th, 2008
проблем несколько:
обычный javascript не позволяет сделать link.click() или что-нибудь подобное. можно жутко извратиться, использовать "глубоко зарытые" API методы и функции...мы этого делать не стали.
если же просто перейти по указанному УРЛу document.location.href = 'url' то REFERER теряется, а это именно то, что чего мы не хотим.
решение нашлось в екстеншне RefControl (https://addons.mozilla.org/en-US/firef
теперь соталось лишь динамически изменять настройки RefContol-а используя простой JavaScript.
firefox referer spoofing готов!
December 29th, 2007
Причина: если первые два символа в CSV файле - ID (что бывает очень часто) то глупый эксэль решает что это фалй SYLK.
Решение: самое простое - поменять ID на что-то другое, например, userID.
December 26th, 2007
долго мучался с sudo, плюнул и пошёл другим путём:
$ ssh -X user@localhost application
устанавливаем ключики как надо чтобы пароль не просил и получам то что нужно и даже больше - можем проделывать эту штуку на удалённой машине!
добавляем тулзу из предыдущего поста и получаем мегавещь!
<?php
shell_exec("nohup ssh -X {$user}@{$host} {$command} > /dev/null 2> /dev/null &");
?>
что в переводе на человеческий означает "запустить $команду с удалённой машины и оставить в фоновом режиме.
remote running on the local background так сказать :)
December 23rd, 2007
December 20th, 2007
December 17th, 2007
- 1 желток
- 150 г сахара
- 150 г масла
- 1 г ванилина
Начинка:
- 700 г творога
- 5 яиц
- 1 ст. сахара
- 150 г крахмала
- 1 ст. молока
- 1 ст. черники
- 1 пакетик желе
Рецепт приготовления
Сахар растереть с маслом и желтком.
Добавить ванилин, муку и замесить тесто.
Тесто скатать в шар, завернуть в полиэтиленовый пакетик и положить на 1 час в холодильник.
Приготовить начинку. Для этого яйца взбить с сахаром.
Добавить творог и крахмал, взбивать около 5 минут.
Влить молоко и взбивать 3-4 минуты.
Чернику вымыть, дать стечь воде, положить в блендер, добавить желе и взбивать до образования пюре (можно взбить миксером).
В форму выложить тесто, сделать бортики.
На тесто выложить творожную массу.
На творожную массу выложить чернику, и с помощью вилки сделать узор. Поставить пирог в духовку, выпекать при температуре 150 градусов в течение часа.
December 13th, 2007
December 12th, 2007
December 11th, 2007
и мысль стартовала
"где же этот мерзавец. где же этот каб..." стоп.
ключ в замке: щёлк.
он. с букетиком. у бабушки купил в переходе за копеечку. улыбается широко. и пахнет.
чем-то древесным.
December 2nd, 2007
| Поздравляем!!! ТЫ ПРОШЕЛ ТЕСТ. ВОТ ТВОЙ РЕЗУЛЬТАТ: |
| У тебя есть девушка, собака и приличная работа. Собака любит, когда ты чешешь ей за ухом; девушка, когда вы занимаетесь сексом на боку; а шеф на роботе вообще твой дядя. Когда все СМИ России будут требовать для тебя смертной казни через вливание в рот расплавленного урана в оправдание приведи этот тест. Ибо только я догадался, что мозг твой мегапортал сексуальных извращений, рождающий такие образы, рядом с которыми акт насилия бездомного парализованного инвалида в тепловом коллекторе посредством половго органа, утыканного острозаточенным пирсингом, выглядит не ужаснее перекатывания яичек соседа по койке в летнем лагере. Девушка для тебя прикрытие Даже ВИЧ-инфицированный наркоман-некрофил будет потрясён оргией, устроенной тобой в доме престарелых Кое о чём девушка всё таки догадывается, вглядываясь в цветную репродукцию картины Апофеоз войны, нанесённую лазером на твой член, но она и представить не может, что твоя самая большая мечта засунуть её вместе с собакой в барокамеру НИИ Сексологии и сексопаталогии и выяснить, сколько проживет собачьи сперматозоиды под черепной коробки в условиях сверхвысокого давления. |
| Пройти тест |
November 30th, 2007
одни верят, что в современном мире (ладно, рассматриваю только свою страну) - женщины и мужчины имеют равные приемущества. или не имееют их вовсе, тоесть, грубо говоря, они счетают что "без мужиков мир не остановится" или "я сама всего могу достичь" или "от них проблем больше чем пользы" ну и так далее. бедные. они ПЫТАЮТСЯ тащить на своих худеньких плечах весь этот тяжкий груз, постоянно убеждая себя в том, что они сильные, целеустремлённые и независимые. всё это так. только ко всему прочему, они упускают из виду один интересный момент - они при этом... ммм... как бы это помягче... не совсем рациональные... не совсем разумные что ли.
особенно, если сравнить их с девушками и женщиными из другой группы...
у них внешне почти всё то же самое - дела, интерес к жизни, цель, независимость. они точно также могут справится с трудностями самостоятельно. без чьей либо помощи. но они без лишнего героизма признают лидерство мужчин. они чётко понимают, что как бы там ни было, последнее слово будет за мужчиной, и никак иначе, по крайней мере в ближайшем обозримом будущем. и поступают.... нет, не умнее. просто умно. они ПРОСЯТ мужчин сделать для них то, что, впринципе, мужчине сделать ничего не стоит. ну или, по крайней мере, что займёт у него гораздо меньше сил и времени. конечно, за миллионы лет эволюции это "просят" стало очень многогранным, переливным и, возможно, сложным. а может и наоборот - всё значительно упростилось...
если совсем по-простому: одни знают, кто тут главный и живут вместе без дополнительных трудностей. другие же, наоборот, прибавляют себе кучу проблем, не соглашаясь с "сильными", за что не редко получают "подзатыльники" от этих самых "сильных" и ещё больше начинают винить "злой мир" во всех своих бедах.
November 20th, 2007
Разместите данный пост у себя в жж, зачеркнув те навыки, которыми вы владеете
Если два действия написаны через слэш, то первое относится к мальчикам, а второе – к девочкам
1.
2.
3. завязывать во рту черенок вишни в узел
4. кататься на сёрфе
5.
6. готовить глинтвейн
7. приделывать на ботинок зеркальце, чтобы заглядывать под юбки/ дать мужчине пощёчину
8.
9.
10.
11.
12.
November 17th, 2007
(c) сергей чиграков
November 15th, 2007
на ломпасы.
Его погоны горят как ртуть.
Он так прекрасен, что нас колбасит!
(c) Максим Кучеренко
November 9th, 2007
November 5th, 2007
October 25th, 2007
не совсем моя, но точно будет моей - то-ли по наследству достанется, то-ли при каком-то условии, но я чувствую себя почти хозяином.
со мной в постели - проститутка... как бы это... не очень молодая.
лет 55-60.
но такая не чахлая - просто бабушка.
тоже проснулась.
а проснулись мы (ужас! мы!) от того, что в квартиру вошла какая-то молодая женщина.
прилично так одета... с видеокамерой в руках.
и начинает договариваться с это проституткой о каких-то съёмках.
из разговора я понимаю, что я проснулся с какой-то мега-порно-звездой с садо-мазо уклоном.
и вот старушка начинает одеваться - кожаные высокие сапоги, плётки какие-то перебирает, попутно говорят кого ещё позвать, мол "та с такой-то улицы не приедет, а вот та, которая там-то может быть... нужно позвонить."
и тут старушка говорит мне "ну что, максим? бросил курить? придется вспомнить как это делается. пойди на улицу покури пару часиков".
я раздосадованно обуваюсь и выхожу.
а город какой-то странный. люди вроде как наши, минские.
а вот здания - не совсем. небоскрёбы, какие-то музеи с огромными колоннами.
гулял я гулял... не помню что и как.
вернулся назад.
открываю дверь, захожу.
вроде тихо.
в одну комнату заглянул, во вторую. захожу в третью и кого я там вижу?
Илья Лагутенко!
Слушает кассетный магнитофон!
October 23rd, 2007
October 11th, 2007
мимо проплывают какие-то предметы...
а ты - стоишь.
течение не сносит тебя.
но движение это - относительное.
правда в том, что ты стоишь на месте.
идти по течению - это...
наверное, это по крайней мере кое-что.
хоть какое-то движение, но...
ощущения движения не будет - всё плывёт так же как и ты.
и кажется что всё стоит на месте.
идти против течения?
трудно....
ещё как...
зато дух захватывает от проносящихся мимо "плавающих предметов".
главное - не стоять в движущейся воде
это и есть движение.
Спасибо, Течение, что ты есть!
October 8th, 2007
September 24th, 2007
написано на бутылочке: "ароматизатор. поставить в комнате. не вдыхать прямо из бутылочки"
в интернете писали: "поднести к носу и сильно вдохнуть прямо из бутылочки"
пробовал "нюхать" в одиночку - эффекта почти нет (скорее вообще нету, разыве что фантазия разыгралась) или же настроение не было.
не пробовал "вдыхать прямо из бутылочки" с партнёром... ставлю рядом - через некоторое время мысли о том чтобы "взять и понюхать" не приходят :)
боялся что больше не захочу "без этого чуда"... через некторое время наверное привык - уже не было такого яркого эфекта - сделал перерыв - всё снова повторилось - уход в нирвану с потерей ощущения пространства и времени :) запах остаются ещё на пару часов, так что часто случается "второй приход"
советую всем. около 10 евро за бутылочку (10мл) должно хватить раз на 15-20 (очень быстро испаряется)
September 17th, 2007
September 14th, 2007
"корабли" в моей гавани. не взлетим - так поплаваем?
September 13th, 2007
September 11th, 2007
Тест «Какое у тебя настроение?»: Максим
Возможно, вы просто переработали. Негативных переживаний накопилась куча. Слабо отключиться от проблем и оттянуться по полной? Сейчас вам это необходимо как никогда. </b> Пройти тест «Какое у тебя настроение?». |


