This fragment is about to be reported (you'll remain on this page):

You can enter a comment to clarify the mistake if you would like to:

Recent posts RSS20

Syndication formats – RSS 0.92, 2.0 & Atom 1.0

My reference document based on official RSS/Atom specifications.

Syndication formats – RSS 0.92, 2.0 & Atom 1.0

This is a reference document I have made for myself in preparation to writing a universal PHP feed creator class. I have studied both RSS 0.92 & 2.0 specs and RFC 4287 that stands for The Atom Syndication Format (Atom 1.0).

General info

I’ll give a brief intro into the RSS versions here because they might be confusing at first glance (asides from Atom which has them straightforward).

There are 2 branches of the RSS format: RDF-like (0.90, 1.0 and 1.1) and XML-valid (0.91, 0.92 and 2.0). The first retains more of the original Netscape specification, RSS standing for RDF Site Summary. The second is a simplified, improved and XML-compliant format that is most popular among the two and Atom (not less than 50% of all feeds according to Wikipedia.

«…»

No comments yet | Read rest of this entry »

gzdecode doesn't work in PHP pre-6

gzencode() function exists since PHP 4 but gzdecode() - only since PHP 6.

Build-in PHP function gzencode compresses a string with all the necessary headings the GZIP specification describes (this is what differs it from gzcompress that omits those headers). However, there's no counterpart gzdecode function – at least if you can't rely on PHP 6 yet.

Lucky for us, there's a function called readgzfile that does the same thing as gzdecode except that it reads GZ data from a file and sends the decompressed string to stdout. We can use this function to imitate gzdecode:

The only difference between the above code and real gzdecode is that the latter returns false on error while the above returns null. The reason for this is because I'm always preferring null over false so I don't have to remember which functions return which «failure value» – look at standard PHP functions half of which return null and another – false (and some others – empty string or -1).

P.S.: you'd probably only need gzdecode in case you need reading or writing the data in standard GZIP format that's produced by a third party library such as those from ZLib.net. In case of server-side-only processing you can use gzcompress / gzdecompress that are both available since PHP 4.

No comments yet | Show this entry »

Пароварка

В пароварке можно готовить всё - начиная от кукурузы и заканчивая обычной картошкой в мундире.

Вот уже где-то месяца полтора, как мы для себя заново открыли пароварку. Пароварка – это такая большая (литров на 10) карстрюля, у которой вниз ставится железный столик с дырками, а под него наливается вода. Вода кипит, а то, что лежит сверху на столике как бы «вариатся». Температура получается чуть меньше, чем при варке в воде, но что важнее всяких полезных веществ из продуктов уходит куда меньше.
Так по крайней мере считается и по моим наблюдениям здесь есть доля истины.

Кукуруза

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

Быстрый поиск в гугле подсказал, что можно использовать пароварку. Оказалось, что при такой готовке кукуруза варится буквально за 15-20 минут. Так мы и сделали.

«…»

No comments yet | Read rest of this entry »

Урожай этого лета

На этих выходных мы собирали урожай тыкв, морковок, реп и редек с площади около 10 соток. Корнеплоды, как, впрочем, и тыквы, порадовали совершенно: морковки с двух грядок получилось 5 вёдер. Картошки тоже порядочно, а иная репа не уместилась бы в два кулака.

А, впрочем, лучше показать, чем рассказывать словами :)

Тыквы

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

«…»

Has 2 comments | Read rest of this entry »

A nginx + FastCGI exploit allowing execution of PHP code

When setting up nginx, PHP and FastCGI make sure you don't leave this open!

We've recently moved one of our projects from Apache + PHP + nginx to nginx + PHP + FastCGI which allowed us to run 10 times as fast as previous setup. However, this opened quite strange (if you think about it) but quite working hole.

Let's assume a common and basic setup of nginx + FastCGI + PHP:

This makes nginx run any file that ends on «.php» as PHP script by passing it to the FastCGI handler. But let's think about it: nginx works on file masks. This means that if a visitor requests http://my.site/something.ext/something.more/something.php nginx will interpret the request as belonging to «something.php» script. But it won't test if that file really exists or not – it'll pass on to FastCGI.

On the other hand, FastCGI no more checks file extensions (it's a mere gateway to the PHP interpretator). If FCGI is requested a non-existing file it will look up the last existing file and execute it, passing the part after its file name as script's query string. Nice, huh?

«…»

No comments yet | Read rest of this entry »

Плывущие облака и иллюзия науки

Плывущие облака и иллюзия науки

Глава из книги Масанобу Фукуока «Революция одной соломинки».

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

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

Однажды он задает вопрос, что такое природа, затем он должен узнать, что такое это «что» и что такое человек, который хочет узнать что такое «что». Он погружается с головой в мир бесконечных вопросов. Пытаясь составить себе ясное представление о том, что вызывает его интерес и наполняет изумлением, он имеет два возможных пути. Первый – заглянуть в глубь самого себя, того, кто вопрошает «Что такое природа?» Второй – изучать природу отдельно от человека.

«…»

Has 4 comments | Read rest of this entry »

Bringing back Phone & Modem support in Windows XP

Today I’ve got a serious glitch with my fresh nLite’d installation that I’ve made for an office PC. The problem arose when I attempted to install the driver for a Huawei USB modem that that office used in its owrk. The error message showing up while Windows was installing 3G connection or something like that was as follows:

The required section was not found in the INF.

Or, as I was using a Russian Windows XP (SP2) it was like this:

Требуемая секция в INF-файле не найдена.

«…»

Has 2 comments | Read rest of this entry »

Суп без обжарки, соли и масла

Сегодня меня пробирает на рецепты и посему не могу не поделиться ещё одним, на этот раз, возможно, менее экзотичным.
Это рецепт приготовления супа «переходного периода» – ведь при сыроедении их нет :)

Берётся горох (тот самый, по 18 рублей за кг) и замачивается на несколько часов. Вообще, горох, чечевица и гречка (коричневая) размокают быстрее прочих круп – даже в течении одного дня, а не ночи. Когда подошло время обедать (или ужинать) горох доводится до кипения и держится на плите ещё минут 15 – те, кто любят поразвареннее, до 20, а те, кто любят жевать – чуть больше 10.

В это время надо порезать перец (я обычно беру два) и лук и потереть на крупной тёрке морковку и кабачок. Можно ещё зелени добавить, но уже в самом конце, перед тем, как снимать кастрюлю с плиты. Собственно, любой из ингридиентов можно опустить – кабачок, например, даёт ощущение «картошки» (кто к ней привык).

Когда горох покипел нужное время (это можно определить и на вкус) в кастрюлю добавляется всё нарезанное и кипит ещё минут 15 – опять же, кто любит хрустящее – поменьше, кто разваренное – побольше.
Кстати, когда горох закипел можно сделать самый тихий огонь – кипеть он всё равнопродолжит, а жарить его ни к чему.

Наконец, огонь выключают и кастрюлю оставляют настаиваться – от пары минут до часа. В горячем супе очень классно чувствуется перецкрасный («Огонёк», его можно выращивать на окне) или чёрный – пробирает так, что любой заложенный нос продувается в течении минуты :)

Приятной еды!

Has 2 comments | Show this entry »