Programming and Exciting Things

Developer productivity report

Published on 18.05.2012

Споделям един pdf документ, който ми се струва интересен
http://files.zeroturnaround.com/developer-productivity-report/zeroturnaround-developer-productivity-report-2012.pdf има включени няколко интервюта като основно е наблегнато на Java но предполагам че и с другите езици положението е почти същото.

Javascript object to php

Published on 15.05.2012

За една от задачите си се наложи да "пакетирам" javascript обект и да го изпратя чрез $.post. За целта превръщаме js обекта в json масив чрез https://raw.github.com/douglascrockford/JSON-js/master/json2.js

	json = JSON.stringify(js_object);
	$.post('http://demo.bg/test.php',{'params':json},function(){});
а в php
 
	$r = $_POST['params'];
	$r = json_decode($r);

LESS CSS

Published on 06.05.2012

Въпреки че основната ми работа не включва писането на CSS от няколко дни си експериментирам доста успешо с LESS CSS и мога да кажа че ще бъде чудесен заместител на използваното от мен до момента xCSS разработен от Anton Pawlik.
Разликата между двата проекта е че less css поддържа css3 properties докато xCSS все още не (не че не е невъзможно да се добавят :) )
Идеята на подобен род framework-s е ясна: спестяване на време + някое друго парче код по-малко за писане. Като включим и php променливи във css-кода който се генерира полученият резултат е повече от приятен.
За "компилиране" на LESS файловете използвам PHP компилатора http://leafo.net/lessphp/ ( тъй като в нашите географски ширини да се очаква подръжка на технология като Node.js би била само една хубава химера).

ps: да се похваля написах няколко функции от паметника "Альоша" :) използвайки мобилния и-нет осигурен от фирмата ми, чувството е интересно и определено е приятно място за писане на код.

[php] Resize на снимки според inline css

Published on 04.05.2012

В един от сайтове по които работя имат навика да качват 2-3 MB снимки които после чрез редактора ги "смаляват" което не е добра идея. Та за да предотвратя тегленето на излишна информация използвам следното скриптче:

function html_fix($html_string){
	$work_url = 'http://images.yuksbg.net/';
	$work_dir = '/home/yuks/images/';
	$convert_path = 'convert';
	
	preg_match_all('/<img [^>]*>/im',$html_string,$matches);
	if(!count($matches)) { return $html_string; }
	foreach($matches[0] as $match){
		$width=0;
		$height=0;
		if(preg_match('/width="[0-9]*"/i',$match) && preg_match('/height="[0-9]*"/i',$match)){
			$width=preg_replace('/.*width="([0-9]*)".*/i','\1',$match);
			$height=preg_replace('/.*height="([0-9]*)".*/i','\1',$match);
		}
		else if(preg_match('/style="[^"]*width: *[0-9]*px/i',$match) && preg_match('/style="[^"]*height: *[0-9]*px/i',$match)){
			$width=preg_replace('/.*style="[^"]*width: *([0-9]*)px.*/i','\1',$match);
			$height=preg_replace('/.*style="[^"]*height: *([0-9]*)px.*/i','\1',$match);
		}
		if(!$width || !$height)continue;
		$imgsrc=preg_replace('/.*src="([^"]*)".*/i','\1',$match);
		if(!preg_match('/^http/i',$imgsrc))$imgsrc=preg_replace('#^/*#','http://'.$_SERVER['HTTP_HOST'].'/',$imgsrc);
		list($x,$y)=getimagesize($imgsrc);
		if(!$x || !$y || ($x==$width && $y==$height)) { continue; };
		
		$dir=md5($imgsrc);
		$newURL= $work_url.$dir.'/'.$width.'x'.$height.'.jpg';
		$newImgHTML=preg_replace('/(.*src=")[^"]*(".*)/i',"$1$newURL$2",$match);
		$html_string=str_replace($match,$newImgHTML,$html_string);
		$imgdir= $work_dir.$dir;
		@mkdir($imgdir);
		$imgfile=$imgdir.'/'.$width.'x'.$height.'.jpg';
		if(file_exists($imgfile)) { continue; };
		$str= $convert_path.' "'.addslashes($imgsrc).'" -geometry '.$width.'x'.$height.' "'.$imgfile.'"';
		exec($str);
	}

	return $html_string;
}



идеята е ако видим html tag img и в него срещнем style="width...... или width="....." да проверим дали вече не сме създали такова изображение и ако не сме създаваме и след това replace в html то :)
Едва ли е най-елегантното решение но конкретно при моя случай се постига искания ефект.

[php] Zend Framework на споделен хостинг

Published on 06.04.2012

Zend Framework е една чудесна рамка (дали това е правилната дума на бълграски за framework ?!) за бързо разработване на сложни (и не чак толкова сложни) системи базирани на PHP. Един от най-лесните начини да се подкара на споделен хостинг е да се копира всичко на framework-a в public_html/www директорията и да се добави следния .htaccess

RewriteEngine On
RewriteRule ^(media|template) - [L]
RewriteRule ^\.htaccess$ - [F]
RewriteCond %{REQUEST_URI} =""
RewriteRule ^.*$ /public/index.php [NC,L]
RewriteCond %{REQUEST_URI} !^/public/.*$
RewriteRule ^(.*)$ /public/$1
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]
RewriteRule ^public/.*$ /public/index.php [NC,L]
като по този начин ще си спестим описването на virtual хостове в apache за public директорията :)