К основному контенту

Сообщения

Про налоги немного

Вот в ленте РБК чего нашел: Вопрос о снижении НДС может быть решен в течение месяца Вопрос о возможности снижения налога на добавленную стоимость (НДС) до 12% должен быть решен в течение месяца. Как сообщила журналистам министр экономического развития РФ Эльвира Набиуллина по итогам совещания по вопросам долгосрочного развития РФ в Новоогарево, соответствующее поручение дал сегодня профильным ведомствам премьер-министр РФ Владимир Путин. По словам Э.Набиуллиной, по итогам рассмотрения проекта Стратегии социально-экономического развития России до 2020г. "дан один месяц на доработку... Читать далее > РБК. Финансы Снижение НДС – это, конечно, хорошо. Но лучше бы они про ЕСН чего-нибудь придумали. А то рассказывать всем, что у нас один из самых низких подоходных налогов (НДФЛ) все могут, а про то, что предприятие, чтоб эту зарплату заплатить отчисляет государству еще 30% в виде Е...

Значение именованного параметра

Совсем крошечный метод, который можно поместить в AppController. Возвращает значение именованного параметра, или null , если такого параметра нет. Просто чтоб не повторять одинаковый код в разных методах. /************************************ * Returns a value of named parameter * or null if it isn't exists ************************************/ protected function named($paramName) { if (!array_key_exists($paramName, $this->params['named'])) { return null; } return $this->params['named'][$paramName]; }

Яндекс изменил принцип подсчета количества показов рекламных объявлений

В новостях Яндекс.Директа вот что написано: С 21 августа 2008 года на сайтах-партнерах Рекламной сети Яндекс учитывает показы только реально увиденных пользователями блоков объявлений Яндекс.Директа. То есть, если блок объявлений Яндекс.Директа расположен, например, внизу страницы, показ объявления будет засчитан при условии, что пользователь не только загрузил страницу, но и реально просмотрел страницу до самого низа. Это, несомненно, хорошая новость. Вот только интересно – а как? Как они отслеживают, что блок показан? Будет время, поковыряюсь файрбагом. :-)

Составные первичные индексы и CakePHP

Общеизвестный факт: CakePHP не поддерживает составные первичные индексы. Разработчики предлагают добавить в качестве первичного индекса поле id, а составной индекс из нескольких полей просто сделать уникальным. Это, в общем-то, разумно — первичный индекс используется в моделях для установления и проверки связей, поэтому добавление процедур для работы с составными индексами неплохо увеличит объем кода, что, в свою очередь, скажется на производительности. Более того, использование составных индексов в качестве первичных — редкое явление, хотя я сходу придумал пару ситуаций когда это оправданно. Схема с добавлением еще одного поля, предлагаемая разработчиками Cake неплохо функционирует, однако контроль за уникальностью составного индекса перекладывается на веб-разработчика. Для определения, вставляется-ли новая запись (INSERT…) или обновляется старая (UPDATE…) при вызове из метода save(), Cake поступает очень просто: продеряет наличие в элемента массива $this->data[‘Model’][‘id’]...

Используем TreeBehavior в CakePHP 1.2

Это вовсе не полное руководство, а пара замечаний к практическому использованию. TreeBehavior – весьма полезный компонент CakePHP, реализующий паттерн Nested Sets для указанной модели. Если что-то непонятно, то вот ссылки: Про паттерны древовидных структур Что такое Behavior в CakePHP 1.2 TreeBehavior TreeBehavior позволяет хранить несколько корневых элементов, у которых родительский id равен NULL. Не поддавайтесь искушению – для себя сделайте отдельный корневой элемент. Большинство функций, например Model::children не работают с идентификатором записи равной NULL. Поэтому, если возникнет необходимость получить всех потомков корня, придется сначала выбрать самостоятельно все элементы с parent_id=NULL, а потом для каждого из них вызвать Model::children(). То есть, если создается, скажем, структурированный каталог сайтов, не надо поддаваться искушению добавить основные разделы, как корневые – создайте сначала “совсем-совсем” корневой элемент с именем, скажем, ROOT,...

Легкий способ заработать

Я тут подумал — как написать 4 строчки кода и неплохо заработать? А просто. Надо заявить авторские права и зарегистрироавть их на, скажем, такой код: int main() { printf("Hello, world!\n"); return(1); } И дело в шляпе. Смешно? Вот в свеженьком «Русском Newsweek» прелюбопытная статья о владельцах товарных знаков . И вовсе несмешная. Кому лень читать, краткое содержание: Россия, стремять попасть в ВТО и показывая такую борьбу за мир с контрафактной продукцией, что камня на камне не остается, приняла весьма неадекватный закон об охране интеллектуальной собственности. Кроме всего, из этого закона следует, что ввезти в Россию любой товар можно только с разрешения владельца товарного знака. В статье описан случай, как я понял не единичный. Мужик, владелец бизнеса по импорту из США и продаже здесь подержанных автомобилей лишился на таможне автомобиля Porsche Cayenne. Не потому, что он его неправильно растаможил и т.д. Просто юристы компании ООО «Порше Руссланд» пода...

Раскраска гениальных строчек

Обновился скрипт Ивана Сагалаева и Ко, подсвечивающий синтаксис в блоках кода, публикуемых в блогах, форумах и т.д. Изменение, не слишком для меня важное, – теперь подсвечивается еще и код на Lisp’е . Скрипт полезен тем, что подсвечивает синтаксис уже после генерации страницы – это важно, если исходный текст страницы набран с помощью, например, wiki-синтаксиса или, например BB-кода. Также скрипт отлично работает на блогохостингах, например на Blogger, движок которых не имеет функции подсветки синтаксиса и не позволяет добавлять различные плагины. highlight.js вполне может быть расположен на совсем другом сервере, это не помешает его работе. Подключить highlight.js к Blogger’у очень просто. Самое сложное – найти сервер, на который можно положить собственно сам файл со скриптом. Самые отчаянные могут попробовать использовать скрипт с «чужого» сервера, но это чревато – владелец в любой момент может изменить его расположение или убрать подсветку синтаксиса ненужных ему языков. После ...

SEF — ЧПУ

Собственно говоря, термины SEF и ЧПУ несут в себе разную смысловую нагрузку, хотя, в конечном счете, обозначают одно и тоже. Во, загнул! SEF подразумевает, в первую очередь, улучшение индексации поисковыми серверами, а ЧПУ все-таки указывает на ориентированность в сторону живого человека :-) Откровенно говоря, поисковики отлично индексируют как URL mysite.com/dir/doc/param1 , так и mysite.com?di=dir&do=doc&p=param1 . А если какой-то поисковик, вдруг, этого не делает — это уже его личная проблема: пусть догоняет лидеров, которые кроме html уже научились индексировать кучу других форматов, а не то, что URL с GET параметрами. Google как-то туманно сообщает в «Руководстве для веб-мастеров» : Если вы решили использовать динамические страницы (например такие, в URL которых содержится символ "?"), учтите, что не все сканеры поисковых систем сканируют динамические страницы так же успешно, как и статические Но сам-то он отлично их индексирует, проверено! :-) Во...

Значения полей created/updated по-умолчанию в CakePHP

Не секрет, что некоторые поля в моделях Cake умеет заполнять самостоятельно, основываясь на названии поля. Например в поля created и updated (или modified ), если у них тип DATETIME, будут подставляться даты создания и изменения. При создании таблицы надо выбрать значение по умолчанию для этих полей. В документации на Cake 1.2 недавно появилось предупреждение на эту тему, но ктож все время будет документацию перечитывать? :-) У created и updated значение по-умолчанию должно быть NULL . В общем-то все будет прекрасно работать и со значением “0000-00-00 00:00:00”, которое phpMyAdmin пытается установить самостоятельно, но ровно до того момента, когда появится необходимость добавить несколько записей и, в соответствии с рекомендациями ВЦСПС разработчиков, перед каждым вызовом $Model::save(…) вызывать $Model::create(…). $Model->create() заполняет $Model::data значениями по-умолчанию для всех полей, а $Model::save() изменяет значения created / updated только если они не опреде...

Sitemap для Shop-Script

С недавних пор наш национальный поисковик присоединился к славной компании поисковиков, умеющих обрабатывать файлы sitemap . Наверное, это связано с какими-то общеланетарными амбициями. Как бы то ни было, теперь есть возможность скормить Яндексу файл(ы) sitemap . Я решил, что обрабатывать сайт какой-нибудь сторонней приблудой много дольше, чем просто сгенерировать файлы sitemap с помощью скрипта. Тем более, что у shop-script в общем-то довольно простая структура. Новая версия Shop-Script с ЧПУ пока недоступна, получу — модифицирую скрипт. :-) Скрипт простенький, делает sitemap для aux-страниц — это у shop-script так называются обычные статические html страницы; страниц с категориями. Без разбивки на страницы 1, 2 и т.д. на мой взгляд эти страницы не слишком важны страниц с товарами и обсуждениями товаров Можно запускать из браузера, можно по cron’у. Корневую страницу сайта, страницу с новостями, страницу с формой обратной связи и т.п. надо записать в отдельный файл sitemap ...

Забавное доменное имя

А самое забавное — владелец. domain: DAITE-DENEG.RU type: CORPORATE nserver: ns1.msft.net nserver: ns3.msft.net nserver: ns4.msft.net state: REGISTERED, DELEGATED org: Microsoft Corporation phone: +1 4258828080 fax-no: +1 4259367329 e-mail: domains@microsoft.com e-mail: admin@internationaladmin.com registrar: RUCENTER-REG-RIPN created: 2008.03.21 paid-till: 2009.03.21 source: RU-CENTER А вообще этой компании в зоне .RU принадлежит, на сегодняший день день, 340 доменов. Среди них много не менее забавных: bezmuzha.ru, chicks-for-free.ru, doch-tankista.ru и .т.д. Полный список здесь .

У ZendFramework теперь есть полноценный layout

Модуль Zend_Layout перебрался из инкубатора в основную ветку. Ура! Непонятно почему создатели этого фреймворка не начали с создания именно удобной структуры самого паттерна MVC, а озаботились совершенно второстепенными вопросами. И только теперь дело дошло до правильных View. Шустрые пользователи ZendFramework уже настрочили неплохой пример использования: http://akrabat.com/2007/12/11/simple-zend_layout-example/

Построение деревьев

Небольшое введение . Весь пост написан с оглядкой на MySQL, из-за ее распространенности в web. Конечно, у Oracle возможностей больше, но хостинг с Oracle (или, например, с PostgreSQL) поискать еще надо. Нас же интересует практическое применение в веб-приложениях и обычных сайтах. Для построения сложных систем вообще надо сильно подумать над возможностью применения реляционной БД и рассмотреть другие варианты. Ведь не строчно-табличным видом все БД ограничиваются. Основным посылом к написанию этого поста послужили частые обсуждения темы хранения древовидных структур на различных форумах и комьюнити. Я с удивлением узнал, что многие люди просто не знают методов, отличных от первого, " родитель-дети ". Я точно помню, что в начале 90-х видел статью, посвященную этой проблеме, но уже не помню где. Может, вPC Magazine или в Компьютерпресс? Может даже это было в безруковской Софтпанораме. Так или иначе статья я не нашел, может, плохо гуглил. Родитель-дети Это самый распростране...

CakePHP l10n

Собственно этот пост скорее всего лучше было бы не писать, а просто положить ссылку в del.icio.us. А вдруг еще кому-нибудь пригодится? :-) На данный момент это, пожалуй, самое подробное описание локализации CakePHP 1.2 . Добавить совершенно нечего. :-)

Такая вот история

8 мая 1886 года в небольшом тогда американском городе Атланта, на заднем дворе дома, фармацевт Джон Пембертон сварил в медном тазу не совсем обычный сироп. Джон позвал своего бухгалтера Френка Робинсона и поделился с ним открытием: — Френк, друг, попробуй, что у меня здесь вышло! — А в этом что-то есть, Джон! Запиши быстрее рецепт, а то забудешь! Сироп, был сладким и густым. Джон отнес его в самую крупную в городе "Аптеку Джекобса". В тот же день первые порции сиропа, по пять центов за стакан, были проданы посетителям. Вскоре продавцы в "Джейкобсе" стали смешивать сироп с газированной водой. На протяжении своего первого года существования "Кока-Колу" раскупали в количестве девяти стаканов в день.

Pagination в CakePHP 1.2. Небольшая хитрость

Этот пост устарел! Читайте по ссылке исправленную и сильно переработанную версию ! This is totally outdated article! Follow the link to see a more complete version! Sorry. The newwer post in russian too. Как уже писал , Containable behaivior , который отлично справляется с задачей выборки только нужных для данного действия (action). И при небольшой модификации отлично работает с методом pagination . Однако есть одна неприятная вещь, опять же связанная с тем, что pagination вызывает последовательно 2 метода модели — сначала для подсчета количества записей, а потом для выборки. При попытке подсчитать количество записей у модели с большим количеством связей, paginator делает SQL запрос SELECT COUNT(*) со всеми положенными JOIN'ами, что при больших объемах данных существенно увеличивает время выполнения запроса. Особенно, если при этом еще и сортировку делать надо. Этот факт сильно раздражает, если в итоге нужно всего-лишь количество записей в основной модели. Выход есть. ...

В общественном парижском туалете есть надписи на русском языке

В 70 годах у советских военных, да и не только у них, были очень популярны американские компьютеры. Покупка такого компьютера была настоящей спецоперацией, возможно с участием КГБили ГРУ, потому, что эти компьютеры было запрещено экспортировать в СССР. Понятно, что в промышленных количествах получать американские компьютеры было невозможно и советские инженеры вовсю копировали импортную технику. Продукция компании Digiatal (PDP, VAX), если не путаю, вдохновила на создание серии СМ ЭВМ, а продукция IBM — ЕС ЭВМ. Американские разработчики, конечно, были в курсе, что их компьютеры пользуются повышенным спросом за "железным занавесом" и активно там копируются. Создатели процессора CVAX, который использовался в компьютерах VAX 3000 и VAX 6200 даже оставили на кристалле послание для русских инженеров, которые будут копировать их чип. Написано: «СВАКС... Когда вы забатите довольно воровать настоящий лучший» У известной компании Hallmark , выпускающей открытк...

Ругайтесь по-русски

Картинка из раздела "юмор" бортового журнала испанской авиакомпании Vueling Airlines . Взято у schreibikus .

Модели в CakePHP

Беда какая-то с реализацией моделей в Cake. Не то, чтобы совсем уж плохо, или не то, чтобы их совсем нет, как в Zend Framework , но реализация пока хромает. Особенно с рекурсией туго. Т.е. если 1 уровень рекурсии, то все хорошо, но если нужно 2 уровня, то уже плохо. Например, есть у нас модель "Лекарство", связанная с моделями "Производитель" и "Цена", а "Цена" связана с моделью "Валюта". Связи примерно такие: Лекарство belongsTo Производитель Производитель hasMany Лекарство Лекарство hasOne Цена Цена belongsTo Валюта Обратная связь от Производителя — чтоб можно было получить все продукты, ему принадлежащие. Однако при попытке получить данные о лекарстве получается полная фигня — либо, при recursive=1 не получаем Валюту, либо при recursive=2 получаем на втором уровне все продукты от Производитель. Для этого есть несколько решений. как для версии 1.1, так и 1.2. Чаще всего предлагается сде...

Гугл раздает бесплатный офис

Это старая новость, конечно. Просто я не слежу за изменениями в составе набора Google Pack. Но тем не менее, с удивлением обнаружил, что в Google Pack входит еще и StarOffice 8. У этого офисного пакета длинная и непростая судьба. Он всю дорогу был, насколько я помню, платным. Платным остается, вроде бы и до сих пор, но Google раздает его за так. Теперь StarOffice это практически то же самое что и OpenOffice, но с добавлением дополнительных bells & whistles вроде дополнительных шаблонов, шрифтов и т.п. Альтернативные офисные пакеты, наверняка, в скором времени получат большшое распространение, особенно, если MS продолжит свою борьбу с нелицензионным ПО. Уж больно недешев ее офис. Я знаю по крайней мере одну фирму, не компьютерную, в которой OpenOffice — корпоративный стандарт. Загрузить StarOffice можно по ссылке: Основные отличия StarOffice от OpenOffice.org: улучшенная проверка орфографии и более полный тезаурус. Вот уж неизвестно, как у него  с русским яз...