<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Вовата, s. Hamaelleon ™ &#187; PHP</title>
	<atom:link href="http://www.vlkomarov.info/blog/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.vlkomarov.info/blog</link>
	<description>Почти сериозен блог на една гола цица</description>
	<pubDate>Sun, 31 May 2009 20:01:50 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.1</generator>
	<language>en</language>
			<item>
		<title>jQuery (jQuery UI) базирана администрация на галерия</title>
		<link>http://www.vlkomarov.info/blog/2009/05/25/jquery-based-administration-of-gallery/</link>
		<comments>http://www.vlkomarov.info/blog/2009/05/25/jquery-based-administration-of-gallery/#comments</comments>
		<pubDate>Mon, 25 May 2009 07:42:02 +0000</pubDate>
		<dc:creator>Hamaelleon</dc:creator>
		
		<category><![CDATA[Web development]]></category>

		<category><![CDATA[admin]]></category>

		<category><![CDATA[freelancer]]></category>

		<category><![CDATA[Jcrop]]></category>

		<category><![CDATA[jQuery]]></category>

		<category><![CDATA[jQuery UI]]></category>

		<category><![CDATA[lightBox]]></category>

		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[web developer]]></category>

		<category><![CDATA[галерия]]></category>

		<category><![CDATA[снимки]]></category>

		<guid isPermaLink="false">http://www.vlkomarov.info/blog/?p=169</guid>
		<description><![CDATA[Бях решил да не пиша повече в този блог (и не съм го правил от 09.2008 насам), но тъй като от един месец си работя вече само от вкъщи като web developer freelancer, имам малко повече свободно време. Вкл. смятам да отделя такова и да вдигна отново този блог на крака (само че на този [...]]]></description>
			<content:encoded><![CDATA[<p>Бях решил да не пиша повече в този блог (и не съм го правил от 09.2008 насам), но тъй като от един месец си работя вече само от вкъщи като web developer <strong>freelancer</strong>, имам малко повече свободно време. Вкл. смятам да отделя такова и да вдигна отново този блог на крака (само че на този адрес: <a title="www.vlkomarov.info Blog" href="http://www.vlkomarov.info/post/" target="_blank">www.vlkomarov.info/post/</a>), както и въобще да се погрижа за личния си сайт.</p>
<p>Темата днес е <strong>jQuery</strong> и защо това е един <strong>прекрасен javascript framework</strong> (<a title="jQuery" href="http://www.jquery.com" target="_blank">www.jquery.com</a>):</p>
<p><span id="more-169"></span></p>
<p><strong>1.</strong> Лесен за усвояване (изучаване) основен синтаксис: в сравнение с други библиотеки, върху които имам поглед (mooTools, YUI), синтаксисът на jQuery е много по-лесен за изучаване, четивен е и спестява - както и другите библиотеки - време и усилия на разработчиците.<br />
<strong>2.</strong> Наистина пести време: в сравнение с обема на кода, времето за debug-ване и обема на вложеното време и усилия, писането на jQuery, сравнено с native javascript или native Ajax (а не ползването на методи $.load, $.get, $.post, $.ajax via jQuery) e просто като забавна игра.<br />
<strong>3.</strong> Има десетки и стотици вече разработени от jQuery общността плъгини, които без или с леко модване на кода могат да влязат веднага в употреба и да спестят още повече време, осигурявайки обаче добра функционалност за вашия сайт.</p>
<p>Например, в демото, което можете да видите ползвам два стандартни плъгина:</p>
<p><strong>1.</strong> Единият осигурява lightBox ефектa, който мисля всички помним в първоначалния му prototype (+ scriptaculous) вариант: <a title="jQuery lightBox plugin" href="http://leandrovieira.com/projects/jquery/lightbox/" target="_blank">jQuery lightBox plugin</a> (сега има много и най-различни варианти).<br />
<strong>2.</strong> Вторият осигурява <em>една изключително полезна функционалност</em>, а именно crop = изрязване на снимки (вижте демото): <a title="jQuery Image Cropping Plugin" href="http://deepliquid.com/content/Jcrop.html" target="_blank">jQuery Image Cropping Plugin</a>.</p>
<p>Освен тези два основни jQuery плъгина в употреба влиза и функционалността, която jQuery UI (=User Interface) предлага за лесно създаване и манипулация на диалогови прозорци, както и за такива неща като sortable списъци: <a title="jQuery UI" href="http://www.jqueryui.com" target="_blank">www.jqueryui.com</a>.</p>
<p>През юли 2008, когато кодвах back-end-а за сайта на XGround Models (<a title="XGround Models" href="http://www.xgroundmodels.com/" target="_blank">www.xgroundmodels.com</a>) все още не знаех за jQuery и jQuery UI. Ползвах javascript библиотека от 2005 (jQuery стана на 3 години през януари 2009, т.е е от началото на 2006) за sortable функционалност, стана страхотно; а за crop-ването, заедно с колега Flash developer, писахме едни чудесии, комуникация PHP &lt;-&gt; Flash, XML &lt;-&gt; PHP (целият сайт е Flash и XML базиран, но във втората версия, която ще разработвам т.г. това вече няма да е така), всичко стана много добре, работи прекрасно, беше забавно, научих нови неща.. и загубих една седмица!</p>
<p>След това, през ноември 2008, когато кандидатствах за работа в ICDSoft писах едно домашно, което ако трябва да пиша сега (с използване на jQuery) щеше да е много по-добро: <a title="PhoneBook Demo" href="http://www.vlkomarov.info/projects/icdsoft/phonebook/" target="_blank&lt;br &gt;&lt;/a&gt;">Demo</a>.</p>
<p>През декември 2008 започнах наистина сериозно да следя за всичко около jQuery и мисля, че това беше крачка в правилна посока. Ако все още не сте я направили и вие, съветвам ви да побързате: това е неоценима помощ за всеки web developer.</p>
<p>Така, и в края, ето едно демо. Става дума за администрация на галерия - всеки 2-3-4 сайт има такава, нали? Сега, с помощта на jQuery (вкл. Ajax via jQuery), jQuery UI, плъгините, нещата стават в пъти по-бързо, с по-малко и по-чист код..</p>
<p>Функционалност:<br />
- проверка за тип, разширение, размер на файла и т.н.<br />
- предварително автоматично оразмеряване на всяка качена снимка<br />
- добавяне на max на брой нови снимки<br />
- смяна на всяка една снимка<br />
- изрязване на thumbnail чрез Jcrop от всяка снимка, при качване и във всеки един момент след това<br />
- изтриване на снимки<br />
- преподреждане на снимките<br />
- преглед на снимките (lightBox)</p>
<p style="text-align: center;"><!-- Smart Youtube --><span class="youtube"><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/EHJLdLxbZl0&amp;rel=1&amp;color1=d6d6d6&amp;color2=f0f0f0&amp;border=&amp;fs=1&amp;hl=en&amp;autoplay=&amp;showsearch=0"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/EHJLdLxbZl0&amp;rel=1&amp;color1=d6d6d6&amp;color2=f0f0f0&amp;border=&amp;fs=1&amp;hl=en&amp;autoplay=&amp;showsearch=0" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="355" ></embed><param name="wmode" value="transparent" /></object></span></p>
<p style="text-align: right;"><strong>jQuery (jQuery UI) базирана администрация на галерия</strong></p>
<p>Препоръчително е да го гледате на Full Screen, HD, иначе не се вижда май май нищо особено.</p>
<p>И един скрийншот от подобна галерия:</p>
<p><a href="http://photos-b.ak.fbcdn.net/hphotos-ak-snc1/hs001.snc1/4141_1107561580903_1582729260_261609_8336606_n.jpg" rel="lightbox" title="jQuery Based Gallery"><img src="http://photos-b.ak.fbcdn.net/hphotos-ak-snc1/hs001.snc1/4141_1107561580903_1582729260_261609_8336606_n.jpg" alt="jQuery Based Gallery" width="500" /></a></p>
<div align="right"><script type="text/javascript"><!--
svejo_url='http://www.vlkomarov.info/blog/2009/05/25/jquery-based-administration-of-gallery/';
svejo_bgcolor='[FFFFFF]';
svejo_skin='compact';
svejo_theme='blue';
// --></script><br />
<script src="http://svejo.net/javascripts/svejo_button.js" type="text/javascript"></script></div>
<p><strong><span style="color: #008000;">Владимир Комаров, PHP | MySQL | XML | jQuery web developer, Freelancer</span></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.vlkomarov.info/blog/2009/05/25/jquery-based-administration-of-gallery/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Преглед на печата</title>
		<link>http://www.vlkomarov.info/blog/2008/09/09/ad-jobs/</link>
		<comments>http://www.vlkomarov.info/blog/2008/09/09/ad-jobs/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 09:00:05 +0000</pubDate>
		<dc:creator>Hamaelleon</dc:creator>
		
		<category><![CDATA[Бля-бля]]></category>

		<category><![CDATA[IT специалисти]]></category>

		<category><![CDATA[jobs]]></category>

		<category><![CDATA[jobs.bg]]></category>

		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[WTF?]]></category>

		<category><![CDATA[виц]]></category>

		<category><![CDATA[обяви]]></category>

		<category><![CDATA[обяви за работа]]></category>

		<category><![CDATA[подигравка]]></category>

		<guid isPermaLink="false">http://www.vlkomarov.info/blog/?p=134</guid>
		<description><![CDATA[Уф! Видях днес нещо в jobs.bg, което ме накара да се усмихна накриво. Беше нещо като виц, ама кофти разказан..
Вижте тази обява, после погледнете и тази. Да, точно така, една и съща фирма е, интересно какво впечатление прави това да пуснеш в един и същи ден две почти еднакви обяви.. с единствената разлика в и [...]]]></description>
			<content:encoded><![CDATA[<p>Уф! Видях днес нещо в jobs.bg, което ме накара да се усмихна накриво. Беше нещо като виц, ама кофти разказан..</p>
<p>Вижте тази <a title="Обява за работа" rel="lightbox[ads]" href="http://www.vlkomarov.info/blog/wp-content/uploads/2008/09/ad-jobs-01.gif">обява</a>, после погледнете и <a title="Обява за работа" rel="lightbox[ads]" href="http://www.vlkomarov.info/blog/wp-content/uploads/2008/09/ad-jobs-02.gif">тази</a>. Да, точно така, една и съща фирма е, интересно какво впечатление прави това да пуснеш в един и същи ден две почти еднакви обяви.. с единствената разлика в и без това смешното заплащане?! Какво като е Пловдив? Та Пловдив не е някакво малко провинциално градче? Подиграват ли се тия хора с IT специалистите? Че пък и чужда фирма.. че и езици искат.. че и обектно-ориентирано програмиране, което по принцип все пак си е за по-напреднали разработчици. И накрая, пляс, некви шест стотачки заплата!? Смешка. Абсурдна!</p>
<p><span id="more-134"></span></p>
<p>Бях гледал някаква обява на Добричка фирма, която даваше от 600 до 900 лв заплата на подобни специалисти. За Добрич, похвално!</p>
<p>Пак добре, че посочват поне още в началото на какво можеш да се надяваш (на едно голямо нищо, ама все пак <em>явно нищо</em>). Има едни други работодатели, дето изпишат три страници с изисквания и просто забравят да посочат какво все пак дават насреща. Трябва да се излъжеш да отидеш на интервю, та да загубиш и своето, и тяхното време за да останеш с пръст в уста, щото се оказва, че си отишъл на нещо като бит пазар тип кой кого ще надлъже. Тъпо! Дядо ми Коледа, знам, че си зает чиляк, ама аре нашия да ти се помолим, направи така, че господата работодатели освен да искат от нас просто и да посочват какво ни дават, ок? Мерси, човече!</p>
<p>Та чудя се, връзва ли се някой на тия обяви.. освен хора без работа.. или млади студенти (нищо против! нищо лично!), които все още тежат на мама и на тати на гърбовете? Щото нали знаете, и хубави очи да имаш, сиренето в магазина е с пари <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> Всъщност, познавам не един и двама, които не си ценят особено труда или просто се подценяват и са навити да работят като впрегнатни волове за едно украсено нищо. Уважаеми, не се цепете от колектива, че.. <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Ето още <a title="Обява за работа" rel="lightbox[ads]" href="http://www.vlkomarov.info/blog/wp-content/uploads/2008/09/ad-jobs-03.gif">една обява</a> от този тип, макар че тя звучи малкооо по-добре. Проблемът с обявите с толкова разтеглен диапазон на заплатата e, че обикновено почваш с долната граница, т.е вероятно ще почне на 600, ако не и по-ниско и някой ден, ако има търпение може да стигне до 1000, а ония 1200 си остават някакъв мираж. Тъпото е, че обикновено, ако искаш да увеличиш месечния си доход се налага просто да си смениш работата, а не да чакаш на сладки приказки от рода на &#8220;на всеки три или шест месеца увеличение на заплатата&#8221; и бла-бла-бла истории, с които шефовете умират да си хранят подопечните им <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Колко от вас, които са наети на работа по обява са почнали на нещо много по-различно от долната граница?</p>
<p>(За справка, когато кандидатствах за тази работа, където съм сега обявата гласеше от 1000 до 1500 лв - почнах на 800, и - поне това е ок, след първия &#8220;изпитателен&#8221; (никъде не споменат) месец ми я качиха на 1000. Лека преебавка, кво да се прави.. ама точно заради това си имам едно наум.. нали знаете, &#8220;парен каша духа&#8221;.)</p>
<p>Сега, ето още <a title="Обява за работа" rel="lightbox[ads]" href="http://www.vlkomarov.info/blog/wp-content/uploads/2008/09/ad-jobs-04.gif">една обява</a>, и <a title="Обява за работа" rel="lightbox[ads]" href="http://www.vlkomarov.info/blog/wp-content/uploads/2008/09/ad-jobs-05.gif">още една</a>, които звучат добре. Аз лично съм фен на RDBMS (Relational Database Management System) и с удоволствие бих работил само това, но засега няма да стане, малък съм още за такива работи. Притеснителното и хлъзгавото е обаче, когато тези обяви почнат да се появяват отново и отново.. какво, толкова ли не могат да си намерят човек (или хора)? Прекалено високи изисквания ли? Какво има? Почваш да си мислиш.. та това е друг проблем с обявите. Самата обява звучи ок, искаш обаче да поровиш в нета (логично) и да видиш за каква фирма иде реч.. и изведнъж се оказва, че няма нищо, дори фирмен сайт не можеш да изровиш.. бате Гугъл мълчи кат муле и тва е.. Хлъзгаво, нали? Внимавайте за сапуна <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Та, в края на тази сладка раздумка кой, как, къде и за колко се опитва да *** в IT бранша, ето и <a title="Обява за работа" rel="lightbox[ads]" href="http://www.vlkomarov.info/blog/wp-content/uploads/2008/09/ad-jobs-06.gif">една обява</a>, която може да се ползва за образец <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> Всичко си има, кратко и ясно описание какво се иска от кандидатите, посочено заплащане и при това, отбележете!, посочено е нето и бруто, което ме навежда на мисълта, че това е от малкото фирми, където те осигуряват на нещо по-различно от минималната работна заплата и не се водиш, как беше.. &#8220;компютърен оператор&#8221; <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Изобщо, такива обяви ме надъхват и мотивират да продължавам с ученето.. с надеждата, че някой ден, някой хубав ден&#8230;..</p>
<p>Сега, аз като един отворен junior PHP &amp; MySQL developer, да си кажа в резюме мнението за някои неща. Пък! <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Първо, мисля, че е неприлично дори и на средно напреднали разработчици да се дават заплати под илядо лева. Точка. Мисля, че трябва да започнем от 1200-1400 нагоре. Говорим за хора, които се оправят наистина добре с XHTML, XML, CSS, PHP, SQL и в рамките на няколко дена или седмица-две могат да наваксат с нещо пропуснато (все пак никой не може да знае всичко, нали?).. примерно, наложи ми се юни да работя със Smarty.. ами седнах и за един уикенд изядох документацията. Всичко може да се учи в движение, желание само да имаш, нали?</p>
<p>Второ, не може да се очаква, че даден служител ще остане лоялен към фирмата, ако на всеки три или хайде, шест месеца не получава адекватно увеличение на заплатата. Това го има на приказки по обявите, ама не е реалност навсякъде. Няма и да бъде, ако всеки си натиска мълчаливо стола и си копа там ден за ден в кода. Все пак, освен, ако не си седиш с ръце в задника за няколко месеца можеш доста да напреднеш с материала, ако четеш и експериментираш с наученото всекидневно? Е ли така или не е? Наскоро някакво измислено шефче ми рече, че един служител се доказвал в рамките на от 2 до 3 години! Мисля, че бирите му бяха в повече <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Батенце, нЕма кой да те чака 3 години, след 3 години IT секторът ще е друг, много неща се променят за 3 години.. няма време. Такова време може да си позволи някой, който тепърва започва и има кой да го храни през това време, докато е някакви подаяния.</p>
<p>Та така, аз си казах на висок глас мнението (както обикновено), сега сте вие на ред, или с коментари, или просто давайки вот в анкетите анонимно. И за двете, благодаря предварително!</p>
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll. Note: There is a poll embedded within this post, please visit the site to participate in this post's poll. Note: There is a poll embedded within this post, please visit the site to participate in this post's poll. Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
<p>&#8212;</p>
<p>В известен смисъл това е, което исках да кажа по темата, която е засегната в последните два броя на <a href="http://www.netmag-bg.com/" target="_blank">списание .net</a> за IT кадрите. Чакам с нетъперпение следващия брой с обещано разискване на темата за freelancer-ството.</p>
<div align="right"><script type="text/javascript"><!--
svejo_url='http://www.vlkomarov.info/blog/2008/09/09/ad-jobs/';
svejo_bgcolor='[FFFFFF]';
svejo_skin='compact';
svejo_theme='blue';
// --></script><br />
<script src="http://svejo.net/javascripts/svejo_button.js" type="text/javascript"></script></div>
]]></content:encoded>
			<wfw:commentRss>http://www.vlkomarov.info/blog/2008/09/09/ad-jobs/feed/</wfw:commentRss>
		</item>
		<item>
		<title>It&#8217;s Show &#124;&#124; Race &#124;&#124; MicroTime</title>
		<link>http://www.vlkomarov.info/blog/2008/08/26/its-show-race-microtime/</link>
		<comments>http://www.vlkomarov.info/blog/2008/08/26/its-show-race-microtime/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 12:19:37 +0000</pubDate>
		<dc:creator>Hamaelleon</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Web development]]></category>

		<category><![CDATA[Excel]]></category>

		<category><![CDATA[export]]></category>

		<category><![CDATA[import]]></category>

		<category><![CDATA[microtime]]></category>

		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[race]]></category>

		<category><![CDATA[showtime]]></category>

		<category><![CDATA[XML]]></category>

		<category><![CDATA[бъзик]]></category>

		<category><![CDATA[експорт]]></category>

		<category><![CDATA[импорт]]></category>

		<category><![CDATA[почивка]]></category>

		<category><![CDATA[състезание]]></category>

		<category><![CDATA[улеснение]]></category>

		<category><![CDATA[функционалност]]></category>

		<guid isPermaLink="false">http://www.vlkomarov.info/blog/?p=111</guid>
		<description><![CDATA[
Точно приключих с един експорт/импорт скрипт (export XLS - XML via PHP from MySQL Database / import Excel Spreadsheet as XLS - XML to MySQL DB) и съм почти доволен.. даже и работи  Остава и клиентите да го оценят. Ама като се замисли човек, ако имаме база данни с няколкостотин или хиляди продукта и [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.vlkomarov.info/blog/wp-content/uploads/2008/08/php-race.jpg" alt="Газ до ламарината :)" /></p>
<p>Точно приключих с един <strong>експорт/импорт скрипт</strong> (export XLS - XML via PHP from MySQL Database / import Excel Spreadsheet as XLS - XML to MySQL DB) и съм <em>почти</em> доволен.. даже и работи <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Остава и клиентите да го оценят. Ама като се замисли човек, ако имаме база данни с няколкостотин или хиляди продукта и се наложи да обновим ценовата листа, например, сещате ли се колко време ще е нужно за да се свърши това през админ панела, продукт по продукт, за всеки по няколко различни цени. Тегаво, a? Жестока досада! А така, експортваш шаблона (настоящата ценова листа), редактираш в Excel, каквото там е нужно, записваш като XML Spreadsheet, оп, качваш през админ панела файла и след <strong>няколко секунди</strong> цялата работа е свършена! Мммм, благинка. Та сега след като помогнахме на някой си някъде там да има повече време да се задява с колежките, да се позанимаем и ние с малко глупости. It&#8217;s showtime <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Оп, microtime(), обърках се <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><span id="more-111"></span></p>
<p>Да ви преставя концепцията на състезанието:</p>
<p>Имаме две кучки бегачки, и двете са резачки (split). Задачата им ще е да отрежат главата на <em>мистър Файл</em> един милион пъти и да я върнат. Борим се за всяка милипунта, щот не можем да си позволим излишен разход на ценни милисекунди <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Първият състезател:</p>
<pre class="syntax-highlight:php">
function getExtByArrayMethod ($file, $allowableExtensions) {
$split = array_reverse(explode(&#039;.&#039;, $file));
if (in_array(strtolower($split[0]), $allowableExtensions)) {
return $ext = $split[0];
}
}
</pre>
<p>Той се състезава така: първо му го нацепва на <em>мистър Файл</em> по всяка негова чувствителна точка с explode(&#8217;.', $file), после го обръща у лево с array_reverse (виждате ли какви неща има в PHP-то!!!).  След това взема първото отсечено след обръщането, смалява го (strtolower) и проверява дали пасва на това, което търси (масив $allowableExtensions с разрешени файлови съкращения). Ако пасне го изплюва сдъвкано - и така един милион пъти <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Другата кучка:</p>
<pre class="syntax-highlight:php">
function getExtByStringMethod ($file, $allowableExtensions) {
$ext = strtolower(substr($file, strrpos($file, &#039;.&#039;) + 1));
if (in_array($ext, $allowableExtensions)) {
return $ext;
}
}
</pre>
<p>Туй говедо не ползва масиви, а третира <em>мистър Файл</em> като простоват низ (string). Първо нанюхва важната последна точка в низа чрез strrpos, и с 1 идея напред, с един удар реже остатъка. Смалява го, проверява дали пасва и ако да, го изплюва - и така един милион пъти.</p>
<p>Ето го семплото циклене:</p>
<pre class="syntax-highlight:php">
for ($i = 1; $i &lt; = ITR; $i++) {
getExtByArrayMethod(FILENAME, $allowableExtensions);
}
</pre>
<p>Тук имаме константи и един масив, които ще ползваме за състезанието:</p>
<pre class="syntax-highlight:php">
$allowableExtensions = array(&#039;avi&#039;, &#039;mpg&#039;, &#039;mp4&#039;,
&#039;mov&#039;, &#039;wmv&#039;, &#039;flv&#039;, &#039;mpeg&#039;, &#039;gp3&#039;,
&#039;vob&#039;, &#039;rm&#039;, &#039;txt&#039;, &#039;psd&#039;, &#039;exe&#039;);

define(&#039;FILENAME&#039;, &#039;video4560289703.public.gp3&#039;;);
define(&#039;ITR&#039;, 1000000);
</pre>
<p>Ползваме microtime() заедно с една полезна функцийка от php.net за превръщане на резултата в нещо лесно разбираемо и.. Старт! <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Begin getExtByArrayMethod: 1219751738.47<br />
End getExtByArrayMethod: 1219751748.79<br />
Result: <span style="color: #ff0000;">10.3256812096</p>
<p>Begin getExtByStringMethod: 1219751748.79<br />
End getExtByStringMethod: 1219751755.35<br />
Result: <span style="color: #ff0000;">6.55777096748</span></p>
<p>Както виждате при един милион итерации моята кучка бие тази на колегата с близо 4 секунди или цели 4000 милипунти, представяте ли си?! <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Колегата явно хич не го е*е за разхищаване на ценно процесорно време <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Извън кръга на майтапа и чуденката, работа с масиви или със стрингове за конкретното приложение.. нещо сериозно: никога не проверявайте при upload формуляр само за MIME Type на качваните файлове. Това е лесно заобиколимо препятствие и освен, ако не сте фенове да ви го хакват изотзаде, проверявайте винаги комбинирано и за MIME Type, и <em>за разширението на файла</em>, и за големината, и т.н., и т.н. Ама пак мое ви го хакнат, спасение няма <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>&#8212;</p>
<p>Ето го <a href="http://www.vlkomarov.info/blog/wp-content/uploads/2008/08/race.php.txt" target="_blank">тестовият файл</a>, можете да пробвате..</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vlkomarov.info/blog/2008/08/26/its-show-race-microtime/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP Security - преглед на печата</title>
		<link>http://www.vlkomarov.info/blog/2008/08/17/php-security-books-review/</link>
		<comments>http://www.vlkomarov.info/blog/2008/08/17/php-security-books-review/#comments</comments>
		<pubDate>Sun, 17 Aug 2008 18:22:44 +0000</pubDate>
		<dc:creator>Hamaelleon</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Security]]></category>

		<category><![CDATA[books]]></category>

		<category><![CDATA[Cross-Site Scripting]]></category>

		<category><![CDATA[file upload]]></category>

		<category><![CDATA[PHP5]]></category>

		<category><![CDATA[Remote Execution]]></category>

		<category><![CDATA[review]]></category>

		<category><![CDATA[SQL Injection]]></category>

		<category><![CDATA[XSS]]></category>

		<category><![CDATA[книги]]></category>

		<category><![CDATA[сигурност]]></category>

		<guid isPermaLink="false">http://www.vlkomarov.info/blog/?p=101</guid>
		<description><![CDATA[И като продължение на темата от предишната публикация - сигурността при разработване на уеб приложения - кратък преглед на печата.

За съжаление, но и без да буди кой знае какво учудване, на български език за PHP Security има издадена само една книга: Essential PHP Security, Chris Shiflett, 2006. Българското издание е на издателска къща ЗеСТ Прес [...]]]></description>
			<content:encoded><![CDATA[<p>И като продължение на темата от предишната публикация - сигурността при разработване на уеб приложения - кратък преглед на печата.</p>
<p><a rel="lightbox[php-security-books]" href="http://www.vlkomarov.info/blog/wp-content/uploads/2008/08/pro-php-security.jpg" title="Pro PHP Security"><img src="http://www.vlkomarov.info/blog/wp-content/uploads/2008/08/pro-php-security-th.jpg" alt="Pro PHP Security" style="position: relative; float: right; margin-left: 15px;" /></a></p>
<p>За съжаление, но и без да буди кой знае какво учудване, на български език за PHP Security има издадена само една книга: <strong>Essential PHP Security, Chris Shiflett, 2006</strong>. Българското издание е на издателска къща ЗеСТ Прес от 2007, ISBN-13: 978-954-9341-20-1. Ако случайно все още не притежавате тези 120 страници в книжен формат, <a href="http://www.book.store.bg/c/p-p/m-514/id-17946/osnovi-na-php-sigurnostta-kris-shiflet.html" target="_blank">препоръчвам ви ги</a>. Книгата, макар и хубава, е прекалено малка и надали ще задоволи очакванията ви.. по-скоро е като вкусен залъгващ залък преди основното ястие.</p>
<p>Мисля, че сте попадали на поне една от тези три книги. Ако ли пък не, ето сега имате тази възможност:</p>
<p><strong>Pro PHP Security, Chris Snyder &amp; Michael Southwell, 2005</strong></p>
<p><span id="more-101"></span></p>
<p>ISBN (pbk): 1-59059-508-4<br />
Тези над 500 страници четиво определено си заслужават. Ето го съдържанието в кратък вариант:</p>
<p>PART 1 - The Importance of Security<br />
CHAPTER 1 Why Is Secure Programming a Concern?<br />
PART 2 - Maintaining a Secure Environment<br />
CHAPTER 2 Dealing with Shared Hosts<br />
CHAPTER 3 Maintaining Separate Development and Production Environments<br />
CHAPTER 4 Keeping Software Up to Date<br />
CHAPTER 5 Using Encryption I: Theory<br />
CHAPTER 6 Using Encryption II: Practice<br />
CHAPTER 7 Securing Network Connections I: SSL<br />
CHAPTER 8 Securing Network Connections II: SSH<br />
CHAPTER 9 Controlling Access I: Authentication<br />
CHAPTER 10 Controlling Access II: Permissions and Restrictions<br />
PART 3 - Practicing Secure PHP Programming<br />
CHAPTER 11 Validating User Input<br />
CHAPTER 12 Preventing SQL Injection<br />
CHAPTER 13 Preventing Cross-Site Scripting<br />
CHAPTER 14 Preventing Remote Execution<br />
CHAPTER 15 Enforcing Security for Temporary Files<br />
CHAPTER 16 Preventing Session Hijacking<br />
PART 4 - Practicing Secure Operations<br />
CHAPTER 17 Allowing Only Human Users<br />
CHAPTER 18 Verifying Your Users’ Identities<br />
CHAPTER 19 Using Roles to Authorize Actions<br />
CHAPTER 20 Adding Accountability to Track Your Users<br />
CHAPTER 21 Preventing Data Loss<br />
CHAPTER 22 Safely Executing System Commands<br />
CHAPTER 23 Handling Remote Procedure Calls Safely<br />
CHAPTER 24 Taking Advantage of Peer Review</p>
<p>Общо взето си има за всичко по-малко, обяснено с различни примери.</p>
<p><a rel="lightbox[php-security-books]" href="http://www.vlkomarov.info/blog/wp-content/uploads/2008/08/guide-to-php-security.jpg" title="Guide To PHP Security"><img src="http://www.vlkomarov.info/blog/wp-content/uploads/2008/08/guide-to-php-security-th.jpg" alt="Guide To PHP Security" style="position: relative; float: right; margin-left: 15px;" /></a></p>
<p>Една друга, заслущаваща внимание книга е <strong>Guide to PHP Security - A Step-by-step Guide to Writing Secure and Reliable PHP Applications, Ilia Alshanetsky, 2005</strong></p>
<p>ISBN 0-9738621-0-6<br />
И тази книга не е от вчера, което обаче не пречи написаното да е все още актуално. Покрива PHP5, както и предишната. И без това - както предполагам знаете - от 8 август е спряна поддръжката за PHP4, а и на хоризонта вече се задава PHP6. От съдържанието:</p>
<p>1 Input Validation<br />
2 Cross-Site Scripting Prevention<br />
3 SQL Injection<br />
4 Preventing Code Injection<br />
5 Command Injection<br />
6 Session Security<br />
7 Securing File Access<br />
8 Security through Obscurity<br />
9 Sandboxes and Tar Pits<br />
10 Securing Your Applications</p>
<p><a rel="lightbox[php-security-books]" href="http://www.vlkomarov.info/blog/wp-content/uploads/2008/08/hacker-web-exploitation.jpg" title="Hacker Web Exploitation"><img src="http://www.vlkomarov.info/blog/wp-content/uploads/2008/08/hacker-web-exploitation-th.jpg" alt="Hacker Web Exploitation" style="position: relative; float: right; margin-left: 15px;" /></a></p>
<p>И още една благинка, която съм засякал: <strong>Hacker Web Exploitation Uncovered, Marsel Nizamutdinov, 2005</strong></p>
<p>400 pages, ISBN:1931769494<br />
Тази още не съм я прегледал, но като гледам съдържанието мисля, че и тя покрива основни теми като XSS, SQL Injection, Remote File Inclusion, etc.</p>
<p>И още нещо за десерт. Ако имате в приложението си формуляр за upload на файлове, прочетете този документ (.pdf, 20 стр.). Сигурен съм, че ще ви е полезен, както беше и за мен <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> (<a href="http://www.net-security.org/dl/articles/php-file-upload.pdf" target="_blank">Secure File Upload In PHP Web Applications</a>)</p>
<p>Ами приятно четене и повечко спокойни нощи (след n на брой не толкова преди това).. Честно казано, колкото повече чета, толкова повече си мисля дали не е добре да се върнем 15 години назад към абсолютно статичен web модел <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.vlkomarov.info/blog/2008/08/17/php-security-books-review/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mr GET Clean</title>
		<link>http://www.vlkomarov.info/blog/2008/08/17/mr-get-clean/</link>
		<comments>http://www.vlkomarov.info/blog/2008/08/17/mr-get-clean/#comments</comments>
		<pubDate>Sun, 17 Aug 2008 15:07:05 +0000</pubDate>
		<dc:creator>Hamaelleon</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Web development]]></category>

		<category><![CDATA[GET]]></category>

		<category><![CDATA[SQL Injection]]></category>

		<category><![CDATA[XSS]]></category>

		<category><![CDATA[заявка]]></category>

		<category><![CDATA[проверка]]></category>

		<category><![CDATA[сигурност]]></category>

		<guid isPermaLink="false">http://www.vlkomarov.info/blog/?p=86</guid>
		<description><![CDATA[Златни правила на уеб разработчика (web developers golden rulez):
1. Няма абсолютна и универсална защита, всичко подлежи на хакване!
2. Най-добре си го хаквай {скрипта} често, често сам и се.. оправяй.. сам, преди да те оправят други!
3. Грам никакво доверие на потребителя, т.е на каквото и да е идващо от GET, POST, COOKIE, SESSION, REQUEST (ако някой [...]]]></description>
			<content:encoded><![CDATA[<p><strong><span style="color: #ff9900;">Златни правила на уеб разработчика (web developers golden rulez):</span></strong></p>
<p><strong>1</strong>. Няма абсолютна и универсална защита, всичко подлежи на хакване!<br />
<strong>2</strong>. Най-добре си го хаквай {скрипта} често, често сам и се.. оправяй.. сам, преди да те оправят други!<br />
<strong>3</strong>. Грам никакво доверие на потребителя, т.е на каквото и да е идващо от GET, POST, COOKIE, SESSION, REQUEST (ако някой все още го ползва), HTTP Headers, etc.<br />
<strong>4</strong>. 13 проверки са по-добре от една или николко, но все пак не се знае дали са достатъчни..<br />
<strong>5</strong>. Ученето трябва да продължи!</p>
<p><span id="more-86"></span></p>
<p>Във връзка с една тема от миналата седмица в BGDev, ето един метод за почистване на GET заявки от излишни боклуци. </p>
<p>В заявката са допустими само параметри, дефинирани в масива $allowableParams и са забранени символите, посочени в другия conf масив: $forbiddenSymbols.</p>
<p>Разбира се, подобна реализация има своите ограничения (modRewrite, кирилица, search формуляри, събмитващи през GET и т.н.), така че в зависимост от приложението може да се променя съдържанието на масивите и изобщо цялата реализация на метода. Също така, при установяване на непозволени параметри или забранени символи (опити за XSS или SQL injection), освен логването на опита и редиректването към страница с &#8220;чиста&#8221; GET заявка, може да се добави и друга някаква функционалност: мейл до администратор, бан на потребител и т.н. </p>
<p>Така, ето как изглежда началото на една страница, която ще използва този клас:</p>
<pre class="syntax-highlight:php">
&lt; ?php
define(&#039;CLASSES_PATH&#039;, &quot;.&quot;);

$forbiddenSymbols	= array(&#039;&lt;&#039;, &#039;&gt;&#039;, &#039;(&#039;, &#039;)&#039;,
	&#039;..&#039;, &#039;%&#039;, &#039;*&#039;, &#039;+&#039;, &#039;!&#039;, &#039;@&#039;);
$allowableParams	= array(&#039;p&#039;, &#039;id&#039;);

if (isset($_SERVER[&#039;QUERY_STRING&#039;]) &amp;&amp;
	!еmрty($_SERVER[&#039;QUERY_STRING&#039;])) {

	require_once(CLASSES_PATH . &quot;/class.clean.php&quot;);
	$clean = new MrGETClean;

	$queryString = $clean-&gt;queryWalk($_SERVER[&#039;QUERY_STRING&#039;],
		$forbiddenSymbols,
		$allowableParams,
		$_SERVER[&#039;SCRIPT_NAME&#039;]);

	if ($queryString != $_SERVER[&#039;QUERY_STRING&#039;]) {
		$newURL = basename($_SERVER[&#039;SCRIPT_NAME&#039;]) .
			&#039;?&#039; . $queryString;
		header(&quot;location: &quot; . $newURL);
	}

}
</pre>
<p>Ето го и самия клас с основния метод <strong>queryWalk</strong>:</p>
<pre class="syntax-highlight:php">
&lt; ?php
define(&#039;LOG_PATH&#039;, &quot;log&quot;);

class MrGETClean {

function queryWalk($queryString,
	$forbiddenSymbols,
	$allowableParams,
	$scriptURL) {

	$flag = false;

	$queryFragments			= array();
	$queryArr				= array();
	$cleanedQueryFragments	= array();

	$queryFragments = explode(&quot;&amp;&quot;, $queryString);

	foreach ($queryFragments as $key =&gt; $value) {
		$queryArr[$key][&#039;p&#039;] =
			substr($value, 0, strpos($value, &#039;=&#039;));
		$queryArr[$key][&#039;v&#039;] =
			substr($value, strpos($value, &#039;=&#039;) + 1);
	}

	foreach ($queryArr as $key =&gt; $value) {
		if (!in_array($queryArr[$key][&#039;p&#039;],
				$allowableParams)) {
			$queryArr[$key] = null;
			$flag = true;
		}

		foreach ($forbiddenSymbols as $symbol) {
			if (stristr($queryArr[$key][&#039;v&#039;],
					$symbol)) {
				$queryArr[$key] = null;
				$flag = true;
			}
		}
	}		

	foreach ($queryArr as $key =&gt; $value) {
		if ($queryArr[$key][&#039;p&#039;] != null) {
			$cleanedQueryFragments[$key] =
				$queryArr[$key][&#039;p&#039;] . &quot;=&quot; .
				$queryArr[$key][&#039;v&#039;];
		}
	}

	if ($flag) {
		$this-&gt;MrGETCleanMakeLog($queryString,
			$scriptURL);
	}

	$queryString = implode(&quot;&amp;&quot;, $cleanedQueryFragments);

	return $queryString;

}
</pre>
<p>А това са методът, който генерира лог файла и този, който връща IP адреса на &#8220;атакуващия&#8221;:</p>
<pre class="syntax-highlight:php">
function MrGETCleanMakeLog($queryString, $scriptURL) {

	$date = date (&quot;d-m-Y @ H:i:s&quot;);
	$log = LOG_PATH . &quot;/log.txt&quot;;
	$handle = fopen($log,&quot;a+&quot; );
	fputs ($handle, &#039;Attack Date: &#039; . $date .
	&#039; | Attacker IP: &#039; . $this-&gt;getIP() .
	&#039; | Query: &#039; . htmlentities(urldecode($queryString)) .
	&#039; | Script: &#039; . $scriptURL . &quot;\r\n&quot;);
	fclose($handle);

}

function getIP() {

	$IP = &#039;&#039;;

	if (isset($_SERVER)) {
		if (isset($_SERVER[&#039;HTTP_X_FORWARDED_FOR&#039;])) {
			$IP = $_SERVER[&#039;HTTP_X_FORWARDED_FOR&#039;];
		}
		elseif (isset($_SERVER[&#039;HTTP_CLIENT_IP&#039;])) {
			$IP = $_SERVER[&#039;HTTP_CLIENT_IP&#039;];
		}
		else {
			$IP = $_SERVER[&#039;REMOTE_ADDR&#039;];
		}
	}
	else {
		if (getenv(&#039;HTTP_X_FORWARDED_FOR&#039;))	{
			$IP = getenv(&#039;HTTP_X_FORWARDED_FOR&#039;);
		}
		elseif (getenv(&#039;HTTP_CLIENT_IP&#039;)) {
			$IP = getenv( &#039;HTTP_CLIENT_IP&#039; );
		}
		else {
			$IP = getenv(&#039;REMOTE_ADDR&#039;);
		}
	}

	return $IP;

}
</pre>
<p>Файловете, които са ви нужни са примерният <a href="http://www.vlkomarov.info/projects/mr-get-clean/index.php.txt" target="_blank">index.php</a> и класът <a href="http://www.vlkomarov.info/projects/mr-get-clean/class.clean.php.txt" target="_blank">class.clean.php</a>. Демото можете да пробвате тук: <a href="http://www.vlkomarov.info/projects/mr-get-clean/index.php?p=7&#038;id=13" target="_blank">www.vlkomarov.info/projects/mr-get-clean</a> (Log: <a href="http://www.vlkomarov.info/projects/mr-get-clean/log/log.txt" target="_blank">log.txt</a>). </p>
<p>Променяйте съобразно вашите нужди и спецификата на приложението. </p>
<p>Линкването на това демо не е задължително, но ще съм ви благодарен, ако го правите <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.vlkomarov.info/blog/2008/08/17/mr-get-clean/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Flash, XML, PHP, CMS - основата</title>
		<link>http://www.vlkomarov.info/blog/2008/07/12/flash-xml-php-cms_basic/</link>
		<comments>http://www.vlkomarov.info/blog/2008/07/12/flash-xml-php-cms_basic/#comments</comments>
		<pubDate>Sat, 12 Jul 2008 17:18:28 +0000</pubDate>
		<dc:creator>Hamaelleon</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Web development]]></category>

		<category><![CDATA[XML]]></category>

		<category><![CDATA[back-end]]></category>

		<category><![CDATA[CMS]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[Xground]]></category>

		<category><![CDATA[xgroundmodels]]></category>

		<category><![CDATA[администрация]]></category>

		<category><![CDATA[базисни положения]]></category>

		<category><![CDATA[Ексграунд]]></category>

		<category><![CDATA[основа]]></category>

		<guid isPermaLink="false">http://www.vlkomarov.info/blog/?p=83</guid>
		<description><![CDATA[
Абе просто съм се побъркал: вместо да ходя да.. разходя някоя подобна кака, аз седя отново зад компютъра (в събота) и работя. Мой ли проект? Ами не! Всъщност съм се закрастил яко с тази администрация на сайта на XGround Models.. ако беше &#8220;официално&#8221; поръчано щеше да ме домързи и да го работя вероятно в понеделник [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.vlkomarov.info/blog/wp-content/uploads/2008/07/lora-georgieva-xground.jpg" alt="Лора Георгиева - рекламно лица на XGround Models" /></p>
<p>Абе просто съм се побъркал: вместо да ходя да.. разходя някоя подобна кака, аз седя отново зад компютъра (в събота) и работя. Мой ли проект? Ами не! Всъщност съм се закрастил яко с тази администрация на сайта на XGround Models.. ако беше &#8220;официално&#8221; поръчано щеше да ме домързи и да го работя вероятно в понеделник към 4-5 сутринта.. ама не, като ми е интересно и си го човъркам по всяко време, без значение, че никой не го изисква..</p>
<p>Та, имаме <a href="http://www.xgroundmodels.com" target="_blank">Flash сайт</a>, който вече е изграден (т.е приемаме го за константа). Той използва семпли XML файлове като база данни. Задачата е да се напише back-end, чрез който да се редактират тези XML файлове, респективно да се променя обликът на front-end-a. <a href="http://www.vlkomarov.info/blog/2008/07/06/atom-solutions/" target="_blank">В предишната публикация</a> споменах за тази задача.</p>
<p><span id="more-83"></span></p>
<p>Оставяме настрана файловите операции (имам предвид качване, преоразмеряване, рязане на снимки, създаване на thumbnail-и, etc.) настрана, не се занимаваме и с DTD на този етап. Ползваме DOM за парсване и създаване на XML-ите и това е всичко. Основата..</p>
<p>Ако имаме XML файл със структура и съдържание подобно на следното:</p>
<pre class="syntax-highlight:xml">&lt; ?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;models&gt;
&lt;model name=&quot;Флейта Тромпеткова&quot; age=&quot;23&quot;
readonly=&quot;1&quot;/&gt;
&lt;model name=&quot;Блонди Свиркова&quot; age=&quot;19&quot;
readonly=&quot;1&quot;/&gt;
&lt;model name=&quot;Ганка Заблейкова&quot; age=&quot;20&quot;
readonly=&quot;1&quot;/&gt;
&lt;model name=&quot;Учтивост Лицемеркова&quot; age=&quot;18&quot;
readonly=&quot;1&quot;/&gt;
&lt;model name=&quot;Съска Змейкова&quot; age=&quot;22&quot;
readonly=&quot;1&quot;/&gt;
&lt;/models&gt;
</pre>
<p>..то можем да извършваме базовите операции с помощта на методите от този примерен PHP клас. Тези операции са:<br />
- добавяне на нов елемент<br />
- редактиране на даден елемент<br />
- изтриване на елемент<br />
- пренареждане в произволен ред (не просто сортиране) на елементите</p>
<pre class="syntax-highlight:php">
&lt; ?php
class xmlLib {

// XML File Parse -&gt; PHP Array

function getXML($xmlFile) {
$xmlArr = array();
$c = 1;
$xml = new DomDocument(&#039;1.0&#039;, &#039;UTF-8&#039;);
$xml-&gt;load($xmlFile);
$root = $xml-&gt;documentElement;
$children = $root-&gt;childNodes;
foreach ($children as $element) {
if ($element-&gt;nodeType == XML_ELEMENT_NODE &amp;&amp;
$element-&gt;nodeName == &#039;model&#039;) {
$xmlArr[$c][&#039;name&#039;]	=
$element-&gt;getAttributeNode(&#039;name&#039;)-&gt;value;
$xmlArr[$c][&#039;age&#039;]	=
$element-&gt;getAttributeNode(&#039;age&#039;)-&gt;value;
$xmlArr[$c][&#039;readonly&#039;]	=
$element-&gt;getAttributeNode(&#039;readonly&#039;)-&gt;value;
$c++;
}
}
return $xmlArr;
}

// Add Entry

function addEntry($add, $xmlArr, $xmlFile) {
$p = sizeof($xmlArr) + 1;
$xmlArr[$p][&#039;name&#039;] = $add[&#039;name&#039;];
$xmlArr[$p][&#039;age&#039;] = $add[&#039;age&#039;];
$xmlArr[$p][&#039;readonly&#039;] = $add[&#039;readonly&#039;];
if ($this-&gt;saveXML($xmlFile, $xmlArr)) {
return true;
}
}

// Edit Entry

function editEntry($edit, $xmlArr, $xmlFile) {
$who = $edit[&#039;who&#039;];
foreach ($xmlArr as $key =&gt; $person) {
if ($xmlArr[$key][&#039;name&#039;] == $who &amp;&amp;
$xmlArr[$key][&#039;readonly&#039;] != &#039;1&#039;) {
$xmlArr[$key][&#039;name&#039;] = $edit[&#039;name&#039;];
$xmlArr[$key][&#039;age&#039;] = $edit[&#039;age&#039;];
}
}
if ($this-&gt;saveXML($xmlFile, $xmlArr)) {
return true;
}
}

// Remove Entry

function removeEntry($remove, $xmlArr, $xmlFile) {
$who = $remove[&#039;name&#039;];
foreach ($xmlArr as $key =&gt; $person) {
if ($xmlArr[$key][&#039;name&#039;] == $who &amp;&amp;
$xmlArr[$key][&#039;readonly&#039;] != &#039;1&#039;) {
$xmlArr[$key] = null;
}
}
if ($this-&gt;saveXML($xmlFile, $xmlArr)) {
return true;
}
}

// Set Entries Order

function setOrder($order, $xmlArr, $xmlFile) {
$tmp = array();
for ($i = 1; $i &lt; = sizeof($xmlArr); $i++) {
for ($j = 1; $j &lt;= sizeof($xmlArr); $j++) {
if ($order[$i - 1] == $xmlArr[$j][&#039;name&#039;]) {
$tmp[$i][&#039;name&#039;] = $xmlArr[$j][&#039;name&#039;];
$tmp[$i][&#039;age&#039;] = $xmlArr[$j][&#039;age&#039;];
$tmp[$i][&#039;readonly&#039;] =
$xmlArr[$j][&#039;readonly&#039;];
}
}
}
if ($this-&gt;saveXML($xmlFile, $tmp)) {
return true;
}
}

// Save PHP Array -&gt; XML File

function saveXML($xmlFile, $xmlArr) {
$xml = new DomDocument(&#039;1.0&#039;, &#039;UTF-8&#039;);
$xml-&gt;formatOutput = true;
$root = $xml-&gt;createElement(&#039;models&#039;);
$root = $xml-&gt;appendChild($root);
foreach ($xmlArr as $key =&gt; $person) {
if ($xmlArr[$key][&#039;name&#039;] != null) {
$model = $xml-&gt;createElement(&#039;model&#039;);
$model = $root-&gt;appendChild($model);
$name = $xml-&gt;createAttribute(&#039;name&#039;);
$name = $model-&gt;setAttribute(&#039;name&#039;,
$xmlArr[$key][&#039;name&#039;]);
$name = $model-&gt;appendChild($name);
$age = $xml-&gt;createAttribute(&#039;age&#039;);
$age = $model-&gt;setAttribute(&#039;age&#039;,
$xmlArr[$key][&#039;age&#039;]);
$age = $model-&gt;appendChild($age);
$readonly = $xml-&gt;createAttribute(&#039;readonly&#039;);
$readonly = $model-&gt;setAttribute(&#039;readonly&#039;,
$xmlArr[$key][&#039;readonly&#039;]);
$readonly = $model-&gt;appendChild($readonly);
}
}
if ($xml-&gt;save($xmlFile)) {
return true;
}
}
}
?&gt;
</pre>
<p>Кодът е семпъл и няма нужда от допълнителни коментари, старал съм се да пиша максимално чисто. Некондензиран и с допълнителни инденти го има и в <a href="http://www.vlkomarov.info/projects/xgroundmodels/cms/demo/index.php" target="_blank">демо страницата.</a></p>
<p><a href="http://www.vlkomarov.info/projects/xgroundmodels/cms/demo/index.php" target="_blank">Пробвайте демото</a> и си кажете мнението. Мързи ме да пиша повече. Точка.</p>
<p>Тъй като такива (изтрито) красавици като Лора надали се сещат за съществуването на моя милост мисля да отида да си купя един-два кроасана с шоколад и да се натъпча подобаващо.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vlkomarov.info/blog/2008/07/12/flash-xml-php-cms_basic/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Е, как е?</title>
		<link>http://www.vlkomarov.info/blog/2008/07/06/atom-solutions/</link>
		<comments>http://www.vlkomarov.info/blog/2008/07/06/atom-solutions/#comments</comments>
		<pubDate>Sun, 06 Jul 2008 10:17:55 +0000</pubDate>
		<dc:creator>Hamaelleon</dc:creator>
		
		<category><![CDATA[Web development]]></category>

		<category><![CDATA[Лично]]></category>

		<category><![CDATA[AJAX]]></category>

		<category><![CDATA[Atom]]></category>

		<category><![CDATA[Atom Solutions]]></category>

		<category><![CDATA[back-end]]></category>

		<category><![CDATA[CSS]]></category>

		<category><![CDATA[DOM]]></category>

		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[web]]></category>

		<category><![CDATA[web developer]]></category>

		<category><![CDATA[XHTML]]></category>

		<category><![CDATA[XML]]></category>

		<category><![CDATA[Атом]]></category>

		<category><![CDATA[нова]]></category>

		<category><![CDATA[ООП]]></category>

		<category><![CDATA[предизивикателство]]></category>

		<category><![CDATA[работа]]></category>

		<category><![CDATA[споделяне]]></category>

		<category><![CDATA[учене]]></category>

		<guid isPermaLink="false">http://www.vlkomarov.info/blog/?p=81</guid>
		<description><![CDATA[
Е, как е? Справяш ли се с новата работа? Доволен ли си? Похвали се нещо..

Това бяха въпроси, които чувах постоянно през изминалия месец от приятели, които знаеха, че съм започнал нова работа.
Сега ще ви разкажа накратко.
Фирмата се казва Atom Solutions, www.atomsolutions.net. Офисът е в &#8220;центъра&#8221; на София.
Само няколко човека сме и няма нито една колежка..
Работа [...]]]></description>
			<content:encoded><![CDATA[<p><a title="XGround Models Back-End ScreenShot #050708" rel="lightbox" href="http://www.vlkomarov.info/blog/wp-content/uploads/2008/07/ss-xground-photos-050708.jpg"><img style="border: 0;" src="http://www.vlkomarov.info/blog/wp-content/uploads/2008/07/ss-xground-photos-050708-th.jpg" alt="XGround Models Back-End ScreenShot #050708" /></a></p>
<p>Е, как е? Справяш ли се с новата работа? Доволен ли си? Похвали се нещо..</p>
<p><span id="more-81"></span></p>
<p>Това бяха въпроси, които чувах постоянно през изминалия месец от приятели, които знаеха, че съм започнал <a href="http://www.vlkomarov.info/blog/2008/05/25/new_work/" target="_blank">нова работа</a>.</p>
<p>Сега ще ви разкажа накратко.</p>
<p>Фирмата се казва <a href="http://www.atomsolutions.net/" target="_blank">Atom Solutions, www.atomsolutions.net</a>. Офисът е в &#8220;центъра&#8221; на София.</p>
<p>Само няколко човека сме и няма нито една колежка..</p>
<p>Работа има доста. Първите две седмици беше тежко. В началото на втората седмица даже се чудех сутрините &#8220;да отида ли днес на работа или да си остана вкъщи&#8221; <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Абе беше си шаш и паника. Даже си направих комбинация от <a href="http://bach.vlkomarov.info" target="_blank">Бах есенции</a>, нещо, което не бях правил от две години, може би и повече (Орех, Бряст, Трепетлика, Кестенови пъпки, Лиственица)..</p>
<p>Има три неща, свързани с работата, които жестоко ме изнервят, но за съжаление и трите са неразделна част от нея и не може да мине без тях: 1. Мразя да работя в <em>крайни срокове</em>, особено пък в срокове &#8220;за вчера&#8221;, а в началото първите няколко задачи бяха точно такива и със сигурност ще има и още подобни. 2. Мразя да се чувствам <em>неспособен</em>, да нямам усещането, че ще се справя с поставената задача.. а в началото усещах прекалено осезателно колко много пропуски имам и колко неща не знам и не съм правил. 3. Клиентите, които <em>не са наясно</em> с ограниченията на web и искат от теб сайтът им примерно да пържи яйца на челна стойка, докато свири 349 симфония на Моцарт. Няма такава ли? Е, ти нали си уеб програмист, ще заложиш в сайта и възможност да композира гениални произведения, разбира се. Преекспонирам, но мисля, че схванахте идеята, нали? <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>В началото се борех със задачи от английски клиент.. това беше първата и част от втората седмица. Писах една търсачка, борих се с едни класове за mass mail.. в крайна сметка клиентът е останал доволен, а това е важното. А аз научих доста нови неща.</p>
<p>След това имаше някакъв сайт за ъпдейт, трябваше да свършим за два дена, направихме го (с клиента до мен, казващ ми това тук така, онова еди как си го искам) за един следобед. Пак доволен клиент.</p>
<p>На 11 юни ми възложиха един проект с &#8220;това е спешно.. ако можеш да го свършиш този уикенд.. и няма нищо сложно, само малко промени по CSS-а на сайта&#8221; <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Става дума за сайт, писан от румънски колеги, използващи <a title="Smarty Template Engine" href="http://www.smarty.net/" target="_blank">Smarty Template Engine</a>. Имах бегла представа за Smarty, но се наложи експресно да изчета <a title="Smarty Template Engine" href="http://www.smarty.net/manual/en/" target="_blank">цялата документация</a>, празнуването на рождения ми ден (13 юни) отиде по дяволите.. изискваните промени изобщо не бяха нито прости, нито само по CSS стиловете. В крайна сметка с множеството малки и по-големи промени по първоначалния шаблон, фиксове, добавен нов раздел и съответна функционалност в Admin Panel-а, че и преправянето след това и за гръцки колеги, работата по този сайт се проточи до 2 юли. Резултатът е <a href="http://www.mobilenews.bg" target="_blank">www.mobilenews.bg</a> и <a href="http://www.mobile-news.gr" target="_blank">www.mobile-news.gr</a> (сега забелязах нещо за фиксване в CSS-a, щото под IE 6 заглавната не изглежда точно така, както трябва да е). Трябва да добавя по някое време поддръжка на RSS и възможност за качване на видео в сайта. Също и търсачка за раздел Каталог. С две думи, ще има още работа..</p>
<p>Вярно, научих достатъчно за Smarty за да се справя по-уверено със следващата подобна задача, но това все пак е като да бършеш нечий чужд задник, не е много приятно занятие. Друго си е да си почнеш съответния проект от нулата, да си знаеш къде какво си писал в кода и кое как си реализирал.. да, пак ползваш опита на майсторите в бранша, като готови функции, класове, решения и т.н., но ти си този, който слага тухла след тухла в изцяло нов строеж, а не просто кръпки във вече съществуваща уеб сграда. Не знам, това ме влече повече.</p>
<p>Сега имам нова задача. Трябва да напиша администрация за <a title="Xground Models" href="http://www.xgroundmodels.com" target="_blank">сайта на Xground Models, www.xgroundmodels.com</a>. Сайтът е изцяло на Flash, организацията на информацията е посредством XML файлове. Моята задача е парсване на XML-ите (ползвам PHP DOM), актуализацията им и записването им вече обновени, както и работа с файлове (разбирай картинки). Интересно ми е.. щом вчера вместо да си почивам отделих три часа за човъркане в CSS-а и за работа с Photoshop-a.. в събота.. за служебна работа!? Или съм се сдухал, или просто наистина ми е интересно.</p>
<p>С две думи, работата е доста, учи се интензивно в движение, повечето неща, които правих този месец преди ги бях чел само на теория или пък имах предишни реализации в доста опростен вид.. с една идея съм напред с ООП.. и изобщо, ако така ще се чете и ще се учи следващите пет месеца, като ми мине изпитателния срок определено ще съм доста по-напред с материала, което може само да ме радва. И няма да има значение дали ще остана в същата фирма или ще се търси нова работа отново..</p>
<p>Това на първо място зависи от заплащането, естествено. Предишната работа, която напуснах беше ок, шефът ми беше пич, имах време да чета и да уча, но всеки месец, плащайки наема, сметките и подобни се оказвах още на 3-4 число с цял месец пред мен и празни джобове. Сори, ама така не се живее. Лоялността към фирмата я разбирам така: започваш на една заплата и на обичайния изпитателен срок, при мен в случая беше 6 месеца, и сега пак е така. Работиш, изпълняваш си съвестно задълженията, учиш (на предишната работа моментът с ученето беше изцяло лична инициатива, самата работа де факто не го изискваше) и като ти изтече изпитателния срок си вече с една или повече стъпки напред, нали? Означава, че си по-опитен и с повече знание, нали? Следователно би трябвало да си по-ценен кадър и съответно цената ти да е по-висока. И ако въпреки това (както за съжаление се случва в повечето фирми в БГ) няма промяна в заплащането или пък става дума за мизерно увеличение (както беше в по-по-предишната ми работа), и работата не ти предоставя кой знае какви перспективи за учене или професионално развитие, тогава какво? Разбира се, че напускаш при първа възможност заради по-добро предложение. (Е, аз продължавам засега работата с комиксите, но де факто съм напуснал.) Правилно ли разсъждавам?</p>
<p>В крайна сметка, не съм толкова млад вече, че да си позволя кибик на безперспективна работа само за да ми е по-лек живота.. вземаш си там някаква си заплатка и кюташ както намериш за добре, евентуално все още висейки на врата на мама и тати (познат ли ви е този сценарий).. нито пък съм все още на години, когато да се стремя да се установя някъде за постоянно и да храня напразни надежди за пенсия и лека старост. Сега му е времето за растеж (макар, че аз малко съм закъснял покрай отделените 6 години на медицината и още 3 за хомеопатията.. както и да е, те не се губят, за добро са..) и експериментиране, нали?</p>
<p>&#8212;</p>
<p>Има много за учене, има интересни задачи, заплащането за момента ме удовлетворява.. в крайна сметка този месец съм изкарал 245% повече от предишния, като само 1/9 от дохода за месеца е от частни проекти, няма от какво да се оплаквам.</p>
<p>&#8212;</p>
<p>О, btw, май скоро ще съм най-дъртия във фирмата.. това не знам дали да го коментирам..</p>
<p>&#8212;</p>
<p>Ами, това е засега <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.vlkomarov.info/blog/2008/07/06/atom-solutions/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Новини от Хомеопатично общество</title>
		<link>http://www.vlkomarov.info/blog/2008/05/09/homeopathic_society_news_admin_panel/</link>
		<comments>http://www.vlkomarov.info/blog/2008/05/09/homeopathic_society_news_admin_panel/#comments</comments>
		<pubDate>Fri, 09 May 2008 06:41:03 +0000</pubDate>
		<dc:creator>Hamaelleon</dc:creator>
		
		<category><![CDATA[Web development]]></category>

		<category><![CDATA[Хомеопатия]]></category>

		<category><![CDATA[admin]]></category>

		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[panel]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[администрация]]></category>

		<category><![CDATA[класическа хомеопатия]]></category>

		<category><![CDATA[новини]]></category>

		<category><![CDATA[обучение]]></category>

		<category><![CDATA[Хомеопатично общество]]></category>

		<guid isPermaLink="false">http://www.vlkomarov.info/blog/?p=50</guid>
		<description><![CDATA[
Вчера си седнах на задника и за 6 часа завърших един семпъл административен панел за сайта на Хомеопатично общество.

Макар и доста light версия, той си е напълно функционален. Има си задължителния authentication control с твърдо зададен потребител(и) и парола, която може да се сменя от &#8220;Настройки&#8221;. Оттам може да се променя и продължителността на потребителската [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.vlkomarov.info/blog/wp-content/uploads/2008/05/bghomeopathy-cp-scrshot.gif" target="_blank"><img src="http://www.vlkomarov.info/blog/wp-content/uploads/2008/05/bghomeopathy-cp-scrshot-th.gif" alt="Скрийншот на семпъл админ панел за редакция и публикуване на новини, ХО" border="0" style="border: 0px; border-color: #FFFFFF;" /></a></p>
<p>Вчера си седнах на задника и за 6 часа завърших един семпъл административен панел за сайта на Хомеопатично общество.</p>
<p><span id="more-50"></span></p>
<p>Макар и доста light версия, той си е напълно функционален. Има си задължителния authentication control с твърдо зададен потребител(и) и парола, която може да се сменя от &#8220;Настройки&#8221;. Оттам може да се променя и продължителността на потребителската сесия. </p>
<p>Могат да се качват 7 карета с новини, условно обозначени като &#8220;топ&#8221;, &#8220;актуална&#8221; и пет допълнителни. За всяка новина може да се променя статуса, т.е видимостта, и включва заглавие, подзаглавие, ако е нужно, дата(и) и основното съдържание. За последното само ползвам готов външен модул (FCKeditor). Всяка промяна в статуса или съдържанието на новината се записва като потребител, направил промяната и кога е направена, за да няма после хън мън.</p>
<p>По подобен начин е организирана и редакцията на семинарите на настоящите VII, VIII и започналия тази пролет IX по ред курс, както и за семинарите за следдипломна квалификация.</p>
<p>Ами това е, да се надяваме, че сега членовете на обществото (курсистите и не само), а и всички други заинтересовани ще получават по-бързо актуална информация и няма да се налага препращане на маса писма от човек на човек, ами всеки с достъп може да влезе и да качи каквото трябва, това беше идеята.</p>
<p>(Администрацията е писана на PHP и ползва MySQL 5 за база данни. С изключение на логото, целия header image т.е и FCKeditor, всичко останало е мое дело, писано от нулата, не обичам да ползвам готови неща, освен ако не се налага.)</p>
<p>&#8212;</p>
<p>Все още на вълна новини + хомеопатия. Сега като приключих с това е крайно време да отделя същото време и на моя сайт. Трябва да довърша и там модула за новините, вече съм говорил с ХО, с пациентската организация и с изд. Хомеохелп, остават Едикта, Анхира и няколко други. Идеята е посетителите да имат в насипен вариант <em>на едно място</em> актуална информация във връзка с хомеопатията в БГ, с препратки към съответните страници в другите сайтове, с RSS абонамент и т.н. Разбира се, тъй като личното винаги е на заден план, ха да видим кога ще стигна и до това <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.vlkomarov.info/blog/2008/05/09/homeopathic_society_news_admin_panel/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Кретен, цица и малко PHP - що е то?</title>
		<link>http://www.vlkomarov.info/blog/2008/04/06/tits/</link>
		<comments>http://www.vlkomarov.info/blog/2008/04/06/tits/#comments</comments>
		<pubDate>Sat, 05 Apr 2008 22:12:31 +0000</pubDate>
		<dc:creator>Hamaelleon</dc:creator>
		
		<category><![CDATA[Бля-бля]]></category>

		<category><![CDATA[ОДФС, 72+]]></category>

		<category><![CDATA[header]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Tarski]]></category>

		<category><![CDATA[Wordpress]]></category>

		<category><![CDATA[кретен]]></category>

		<category><![CDATA[мадама]]></category>

		<category><![CDATA[натокана]]></category>

		<category><![CDATA[стихчета]]></category>

		<category><![CDATA[тема]]></category>

		<category><![CDATA[цица]]></category>

		<category><![CDATA[цици]]></category>

		<category><![CDATA[шапка]]></category>

		<guid isPermaLink="false">http://www.vlkomarov.info/blog/?p=17</guid>
		<description><![CDATA[
Ама казвам ви аз, че сега вече като имам достъп зад завесите ще пипна тук и там, и ще я направя тая цица мойта една натокана мадама.. Та вчера вечерта поработих малко по хедъра (шапката на блога, дето му викам), има още работа, ама почва да се получава долу горе така, както го искам. После [...]]]></description>
			<content:encoded><![CDATA[<p><img style="position:relative; float: right; margin-left: 10px;" src="http://www.vlkomarov.info/blog/wp-content/uploads/2008/04/cico_mari.jpg" alt="Готина мацка с хубави очи" width="200" height="318" /></p>
<p>Ама <a href="http://www.vlkomarov.info/blog/2008/04/02/zero-point/">казвам ви аз, че сега вече като имам достъп зад завесите</a> ще пипна тук и там, и ще я направя тая цица мойта една натокана мадама.. Та вчера вечерта поработих малко по хедъра (шапката на блога, дето му викам), има още работа, ама почва да се получава долу горе така, както го искам. После ще трябва да нахвърлям малко миризливи чорапи тук и там, да възстановя рубриката за &#8220;<strong>Орден на деФствените смотльовци, 72+</strong>&#8221; и блогът ще бъде тип топ: влизаш и те удря една такава кретенийка още в началото, драго да ти стане <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Е, вече ви е ясно, предполагам, що е то?<br />
Имаме си кретен един брой. Няма го издавам кой е..<br />
Имаме си една готина гола цица.<br />
Имаме и някакви познания по PHP.</p>
<p>Кво правим? В рамките на едни 30 минути..</p>
<p><span id="more-17"></span></p>
<p>Първо отделяме десетина минути за да нахвърляме 10-на простотийки в двустишия, посветени на голата ни цица.<br />
После Photoshop-ът услужливо ни помага да ги лепнем в header image, точно там до цицата, без много да бият на очи, за да не я засенчват все пак.<br />
И накрая, като имаме тези 10-на варианта на шапката, пишем нещо от рода на:</p>
<pre class="syntax-highlight:php">&lt; ?php
$random = rand(1,10);
if ($random &lt; 10) $c = &#039;0&#039;.$random; else $c = $random;
?&gt;</pre>
<p>Т.е генерираме си някакво случайно число в някакъв интервал, в зависимост от това колко простотийки сме натворили и после си показваме съответната картинка. Бързо, простичко и лесно - и хоп, имаме закачка, неква там шаренийка в шапката на блога.</p>
<p>Ами засега това е, приятна неделя ви желая, има какво още да се желае, ще се работи още по визията на блога доста, но като за начало мене си ме кефи. Ако и вас ви кефи, може да ми го покажете с бутончето за гласуване долу у десно <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Ааа, за да предотвратя кликоманията, ето ви ги насипно 10-те двустишия. Ако някой иска да се включи, моля, ще се консултирам с цицата си и ако и на нея и хареса ще ви увековеча простотийката <img src='http://www.vlkomarov.info/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><span style="color: #3366ff;">Ей, цицо, дай да ям,<br />
искам да порасна аз голям!</span></p>
<p><span style="color: #3366ff;">Дека си ма, цицо гола?<br />
Пак ли на разходка в МОЛ-а?!</span></p>
<p><span style="color: #3366ff;">Що ма, цицо, си без сутиен,<br />
тоя дет те сложи тука е кретен!</span></p>
<p><span style="color: #3366ff;">Ох на бати цицата мила,<br />
аре те водя на нашта вила!</span></p>
<p><span style="color: #3366ff;">Как си само, цицо, яко напращяла,<br />
чувствам си главата леко изтрещяла!</span></p>
<p><span style="color: #3366ff;">Чий го крепиш тук ма, цицо?<br />
Ах ти, хитра лисицо!</span></p>
<p><span style="color: #3366ff;">Искам, цицо, тази нощ с теб да се завия,<br />
дека ти е гаджето - дай да го пребия!</span></p>
<p><span style="color: #3366ff;">Ти си мойта гола цица златна,<br />
шампионка чикиджийска многократна!</span></p>
<p><span style="color: #3366ff;">Жезълът ми тук стърчи,<br />
гола цица го крепи!</span></p>
<p><span style="color: #3366ff;">Тук се цица една разхожда,<br />
а у гащите некой прохожда!</span></p>
<div align="right"><script type="text/javascript"><!--
svejo_url='http://www.vlkomarov.info/blog/2008/04/06/tits';
svejo_bgcolor='[FFFFFF]';
svejo_skin='compact';
svejo_theme='blue';
// --></script><br />
<script src="http://svejo.net/javascripts/svejo_button.js" type="text/javascript"></script></div>
]]></content:encoded>
			<wfw:commentRss>http://www.vlkomarov.info/blog/2008/04/06/tits/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
