Как стать автором
Обновить
67.02

PHP *

Скриптовый язык общего назначения

Сначала показывать
Период
Уровень сложности

Сервисы проверки знаний [Сертификация Magento]

Время на прочтение1 мин
Количество просмотров4.9K
Всем привет!

Сегодняшний скринкаст был записан для того, чтобы рассказать о сервисах проверки ваших знаний по Magento. Если у вас пока нет желания платить $260 на прохождение реальной сертификаиции или Вы просто не уверены в знаниях — данное видео наглядно покажет вам где можно пройти «пробную» сертификацию абсолютно бесплатно.
Что это даст? Для начала Вы узнаете свой текущий уровень, поймете где нужно подтянуть знания. В конечном итоге Вы прочувствуете атмосферу сдачи теста, так как на реальном тестировании у вас не будет шанса на ошибку.

Приятного просмотра!

Применение SpeechKit Cloud API для озвучивания погоды и новостей от Yandex

Время на прочтение9 мин
Количество просмотров14K
Добрый день! В данной статье хотелось бы рассказать о том, как можно сделать на сайте «Голосовой погодный и новостной информер», который бы, например при выборе города не только показывал, но и рассказывал фактический прогноз погоды, а так же произвольную новость. На самом деле этот скрипт разрабатывался для информирования в системе «Умный Дом», но может быть с легкостью переделан под любой сайт, имеющий на хостинге поддержку PHP, что и было сделано для этой статьи. В примере для синтеза речи, будет использоваться технология SpeechKit Cloud API от компании Yandex и XML парсер Yandex погоды и новостей, написанные на PHP.

Что понадобится для реализации:
  • Web сервер с поддержкой PHP (можно локальный типа Денвера).
  • Ключ Yandex SpeechKit (для некоммерческих проектов можно получить бесплатно).
  • Если ключ не дают без наличия у Вас сайта, то создать сайт можно на Hostinger.ru.
  • Список ID городов.

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

Принцип работы:
  • Отправляем запрос на получение mp3 файла, для выбранного города.
  • Парсим XML файл, получая необходимые параметры.
  • Корректируем окончания слов, для постановки правильного произношения.
  • Устанавливаем параметры генерации mp3 файла (голос, тембр, формат файла, язык, текст).
  • Генерируем mp3 файл.
  • Создаем объект Audio HTML 5 и воспроизводим файл.

Скрипт с формой для выбора городов index.html
<!DOCTYPE html>
<html lang="ru">
<head>
<title>Тест SpeechKit Cloud API от компании Yandex.</title>
<meta charset="utf-8">
</head>
<body>
<script language="javascript" type="text/javascript">
function Get_Weather()
{
   var tts_text=document.getElementById('weather').value;
   console.log(tts_text);
	var response="weather.php?&q="+encodeURI(tts_text); //путь до mp3 файла
	var audio = document.getElementById("gameMusic");
		if (audio)
		{
			audio.parentNode.removeChild(audio);
		}
	
		// создаём новый элемент audio
		audio = document.createElement("audio");
		audio.setAttribute("id", "gameMusic");
		audio.setAttribute("autoplay", "true");
		//audio.setAttribute("loop", "false");
	
		var mp3 = document.createElement("source");
		mp3.setAttribute("src", response);
		mp3.setAttribute("type", "audio/mpeg");
	
		audio.appendChild(mp3);
		audio.play();
		document.body.appendChild(audio);
}
function Get_News()
{
   var tts_text=document.getElementById('news').value;
   console.log(tts_text);
	var response="news.php?&q="+encodeURI(tts_text); //путь до mp3 файла
	var audio = document.getElementById("gameMusic");
		if (audio)
		{
			audio.parentNode.removeChild(audio);
		}
	
		// создаём новый элемент audio
		audio = document.createElement("audio");
		audio.setAttribute("id", "gameMusic");
		audio.setAttribute("autoplay", "true");
		//audio.setAttribute("loop", "false");
	
		var mp3 = document.createElement("source");
		mp3.setAttribute("src", response);
		mp3.setAttribute("type", "audio/mpeg");
	
		audio.appendChild(mp3);
		audio.play();
		document.body.appendChild(audio);
}
</script>
<h1><span>Тест SpeechKit Cloud API от компании Yandex.</span></h1>
<h2>Погода</h2>
<select size="1" onclick="Get_Weather();" id="weather"> 
			 <option disabled>Выберите город</option> 
			 <option value="27612">Москва</option> 
			 <option value="34880">Астрахань</option>
			 <option value="26063">Санкт-Петербург</option>
			 <option value="25913">Магадан</option>
</select>
<h2>Новости</h2>
<select size="1" onclick="Get_News();" id="news"> 
			 <option disabled>Выберите город</option> 
			 <option selected value="Astrakhan">Астрахань</option> 
				<option  value="Volgograd">Волгоград</option>
				<option  value="Krasnodar">Краснодар</option>				
				<option  value="Moscow">Москва</option>
				<option  value="Saratov">Саратов</option>
</select>
</body>
</html>


Горда можно добавлять путём установки новых параметров option в элементе select.

Скрипт генерации mp3 файла для погоды weather.php
<?php
	 $id=$_GET["q"]; // id города
	 $url="http://export.yandex.ru/weather-ng/forecasts/".$id.".xml"; // url xml файла 
    $xml = simplexml_load_file($url); // интерпретируем XML-файл в объект
    //параметры:
    $city=$xml['city']; //город
    $temp=$xml->fact->temperature; // температура
    $weather_type=$xml->fact->weather_type; // тип погоды
    $humidity=$xml->fact->humidity; // влажность
    $wind_direction=$xml->fact->wind_direction; // направление ветра
    $wind_speed=$xml->fact->wind_speed; // скорость ветра
    $pressure=$xml->fact->pressure; // давление
       
   
	$znak="плюс";
	if($wind_direction=="e") {	$wind_direction_text="восточный";}
	if($wind_direction=="w") {	$wind_direction_text="западный";}
	if($wind_direction=="s") {	$wind_direction_text="южный";}
	if($wind_direction=="n") {	$wind_direction_text="северный";}
	if($wind_direction=="se") {	$wind_direction_text="юго-восточный";}
	if($wind_direction=="ne") {	$wind_direction_text="северо-восточный";} 
	if($wind_direction=="sw") {	$wind_direction_text="юго-западный";}
	if($wind_direction=="nw") {	$wind_direction_text="северо-западный";} 
												
	$minus_arry=preg_match("/(-)/", $temp, $minus_out);
	if (!empty($minus_out[1]))
	{ $znak="минус";
		$temp=str_replace("-","",$temp);
	}
							
	 //градус
  	if(	$temp=="1" or $temp=="21" or $temp=="31" or $temp=="41" or $temp=="51" or $temp=="61" or $temp=="71" or $temp=="81" or $temp=="91" or $temp=="101") 
  	{
  			$text="градус";
  	} 
  	else 
  	{
	//градуса	
  	if(   $temp=="2"  or $temp=="3"  or $temp=="4"
  			or $temp=="22" or $temp=="23" or $temp=="24" 
  			or $temp=="32" or $temp=="33" or $temp=="34" 
  			or $temp=="42" or $temp=="43" or $temp=="44" 
  			or $temp=="52" or $temp=="53" or $temp=="54"
  			or $temp=="62" or $temp=="63" or $temp=="64" 
  			or $temp=="72" or $temp=="73" or $temp=="74" 
  			or $temp=="82" or $temp=="83"	or $temp=="84" 
  			or $temp=="92" or $temp=="93" or $temp=="94"
  			or $temp=="102" or $temp=="103"
  		) {$text="градуса";} else {$text="градусов";}  											
  						
  	}
  									
  									
  									
  	//процент
  			
  	if(	$humidity=="1" or $humidity=="21" or $humidity=="31" or $humidity=="41" or $humidity=="51" or $humidity=="61" or $humidity=="71" or $humidity=="81" or $humidity=="91" or $humidity=="101") 
  	{
  		$humidity_text="процент";
  	} 
  	else 
  	{
		//процента	
  		if(   $humidity=="2"  or $humidity=="3"  or $humidity=="4"
  				or $humidity=="22" or $humidity=="23" or $humidity=="24" 
  				or $humidity=="32" or $humidity=="33" or $humidity=="34" 
  				or $humidity=="42" or $humidity=="43" or $humidity=="44" 
  				or $humidity=="52" or $humidity=="53" or $humidity=="54"
  				or $humidity=="62" or $humidity=="63" or $humidity=="64" 
  				or $humidity=="72" or $humidity=="73" or $humidity=="74" 
  				or $humidity=="82" or $humidity=="83" or $humidity=="84" 
  				or $humidity=="92" or $humidity=="93" or $humidity=="94"
  				or $humidity=="102" or $humidity=="103"
  		) {$humidity_text="процента";} else {$humidity_text="процентов";}  											
  								
  	}	
  									
  									
  	 //миллиметр
  	if(	$pressure=="701" or $pressure=="721" or $pressure=="731" or $pressure=="741" or $pressure=="751" or $pressure=="761" or $pressure=="771" or $pressure=="781" or $pressure=="791" or $pressure=="801") 
  	{
  		$pressure_text="милиметр ртутного столба";
  	} 
  	else 
  	{
		//миллиметра	
  		if(   $pressure=="702" or $pressure=="703" or $pressure=="704"
  				or $pressure=="722" or $pressure=="723" or $pressure=="724" 
  				or $pressure=="732" or $pressure=="733" or $pressure=="734" 
  				or $pressure=="742" or $pressure=="743" or $pressure=="744" 
  				or $pressure=="752" or $pressure=="753" or $pressure=="754"
  				or $pressure=="762" or $pressure=="763" or $pressure=="764" 
  				or $pressure=="772" or $pressure=="773" or $pressure=="774" 
  				or $pressure=="782" or $pressure=="783" or $pressure=="784" 
  				or $pressure=="792" or $pressure=="793" or $pressure=="794"
  				or $pressure=="802" or $pressure=="803"
  			) {$pressure_text="милиметра ртутного столба";} else {$pressure_text="милиметров ртутного столба";}  											
  							
  	}
  	$say_text="Сейчас в городе ".$city." ".$weather_type.". Tемпература воздуха ".$znak." ".$temp." ".$text.". Влажность ".$humidity." ".$humidity_text.". Ветер ".$wind_direction_text." ".$wind_speed." метров в секунду. Атмосферное давление ".$pressure." ".$pressure_text." !";
	$qs = http_build_query(array("format" => "mp3","lang" => "ru-RU","speaker" => "jane","key" => "SpeechKit_Cloud_API_Key","emotion" => "good", "text" => $say_text)); // параметры запроса
	$ctx = stream_context_create(array("http"=>array("method"=>"GET","header"=>"Referer: \r\n")));
	$soundfile = file_get_contents("https://tts.voicetech.yandex.net/generate?".$qs, false, $ctx); // запрос на генерацию mp3 файла
 	echo($soundfile);
?>


В скрипте нужно изменить SpeechKit_Cloud_API_Key на полученный Вами ключ.
Скрипт генерации mp3 файла для новостей news.php
<?php
$city=$_GET['q'];
	 
$data_file="http://news.yandex.ru/".$city."/index.rss"; // адрес xml файла 
$xml = simplexml_load_file($data_file); // раскладываем xml на массив

$number= rand(1,13); //генерируем порядковый номер новости

$news=$xml->channel->item[$number]->description; //новость
$title=$xml->channel->item[$number]->title; //заголовок
    

$content_news = trim(preg_replace('/\s{2,}/', ' ', $news));//удаляем весь хлам
$content_title = trim(preg_replace('/\s{2,}/', ' ', $title));//удаляем весь хлам

$text=$content_title." - ".$content_news;
$search = array('"','"',' ',')','(');
$replace   = array('');

$text = str_replace($search, $replace, $text);
$qs = http_build_query(array("format" => "mp3","lang" => "ru-RU","speaker" => "jane","key" => "SpeechKit_Cloud_API_Key","emotion" => "good", "text" => $text)); // параметры запроса
$ctx = stream_context_create(array("http"=>array("method"=>"GET","header"=>"Referer: \r\n")));
$soundfile = file_get_contents("https://tts.voicetech.yandex.net/generate?".$qs, false, $ctx); // запрос на генерацию mp3 файла
echo($soundfile);    
?>


Читать дальше →

Встречайте Envoyer.io (часть 1)

Время на прочтение3 мин
Количество просмотров10K
Envoyer — новый сервис от Тэйлора Отвелла, создателя Laravel. Уже сейчас можно посмотреть серию скринкастов на Laracasts про этот сервис. Это первая часть описания этого сервиса.

Вторая часть тут

image

Немного истории


Когда Laravel Forge был запущен Тэйлором, он стал серьезным помощником в запуске и управлении нескольких VPS, а также деплойменте приложений. Forge занимался процессом создания VPS в облаке, управлением окружения и деплоем (включая Git-hook-deployment) приложений на сервера, и сделал этот процесс более доступным и простым.

Но, к сожалению, Forge не удовлетворял таких потребностей, как управление более сложными деплой процессами или деплоймент без простоя. Вне зависимости от того, были Вы пользователем Forge или нет, приходилось задействовать такие инструменты, как Capistrano или Chef или Ansible, чтобы иметь больше возможностей. Но при этом, разобраться с этими инструментами занимает достаточно много времени.
Читать дальше →

Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5. 3-е изд

Время на прочтение2 мин
Количество просмотров41K
Читать дальше →

Разработка Magento-модулей с развертыванием приложения через Magento Composer

Время на прочтение7 мин
Количество просмотров11K

Введение


В статье описан опыт развертывания девелоперской версии Magento-приложения с использованием Magento Composer'а. Структура типового Magento-приложения в нашей компании:
  • Magento
  • Сторонние модули, используемые в проекте
  • Разрабатываемые нами модули, используемые более, чем в одном нашем проекте
  • Разрабатываемый нами модуль, содержащий функционал конкретно для данного проекта
  • Тема для конкретного проекта


Девелоперская версия Magento-приложения должна позволять разрабатывать код наших модулей и заливать изменения в соответствующие репозитории, позволяя коду общих модулей мигрировать между проектами.

В связи с началом нового проекта для развертывания Magento-приложений решили попробовать Magento Composer. На данный момент у нас код каждого проекта хранится в своем SVN-репозитории, плюс в отдельном — все разрабатываемые нами модули (как общие, так и специализированные):
  • инсталляция Magento и сторонние модули для проекта 01;
  • инсталляция Magento и сторонние модули для проекта 02;
  • ...
  • наши модули;


Для использования Magento Composer'а проект разделили на следующие части (каждая в своем git-репозитории):

  • z_mage_composer_prj_01_full: скрипты развертывания всего проекта, тема, сторонние модули, не доступные через Magento Composer;
  • z_mage_composer_mod_01: первый модуль, от которого зависит проект;
  • z_mage_composer_mod_02: второй модуль, от которого зависит проект;


Читать дальше →

Textolite 1.04: можно создавать шаблоны и редактировать скрипты

Время на прочтение2 мин
Количество просмотров6.9K
Не так давно состоялся релиз системы Textolite на Хабре. С тех пор вышло уже три версии, все они были связаны, в основном, с исправлением ошибок и доработкой существующих возможностей. И вот теперь готова первая версия, расширяющая возможности системы. Для этой версии выбраны наиболее горячие темы: отсутствие возможности создавать шаблоны и редактировать что-либо, кроме HTML-файлов. О том, что в итоге изменилось далее.
Читать дальше →

eBay API: шаг второй

Время на прочтение8 мин
Количество просмотров11K
Привет, хабравчане.

Публикация навеяна этой статьей — «eBay API: Первые шаги» и теоретически может стать её продолжением. Она пригодится тем, кто пытался начать работать с eBay API, не нашел где спросить, что делать и плюнул на это занятие. Или спросил, не дождался ответа и в итоге все равно плюнул.

На истину ни в какой инстанции не претендую и с радостью приму советы по преодолению багов, которые преодолеть так и не удалось.



Прежде всего, хочется оставить небольшую ремарку: начать работать с eBay API быстро — не получится. Катастрофическое количество недосказанностей и нестыковок в документации, недоработки и баги в самом механизме API, неявности и неоднозначности использования комбинаций условий запросов заставляют тестировать каждый шаг по отдельности. И тестировать неоднократно: то, что вчера прекрасно работало, сегодня будет возвращать ошибку, а завтра продолжит работать как ни в чем не бывало.

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

Gearman и PHP 5.4 (5.6): проблемы и решения

Время на прочтение2 мин
Количество просмотров9.5K
В своей предыдущей публикации автор попытался донести до аудитории интересные возможности, который открывает перед PHP-разработчиком сервер очередей Gearman.
В публикации был указан алгоритм установки Gearman и расширения для PHP. Речь шла о PHP 5.3. На Debian7 и PHP 5.4 этот алгоритм не работает, не выдавая при этом никаких ошибок ни при установке, ни при работе PHP-скриптов, однако веб-приложения, использующие Gearman, не работают.
Как выглядит проблема и ее решение

Парсер BBCode без регулярных выражений

Время на прочтение8 мин
Количество просмотров7.3K
Здравствуйте. Хотел бы поделится своим опытом с сообществом Habrahabr. Речь пойдет о разработке не очень сложного парсера BBCode, который преобразует его в HTML. Парсер, который мы будем писать — это типичный конечный автомат.
Читать дальше →

Независимые от фреймворка контроллеры. Последние штрихи

Время на прочтение5 мин
Количество просмотров4.1K
Спасибо! И позвольте, я объяснюсь.

В первую очередь, спасибо всем, кто прочитал предыдущие части. Много интересных комментариев написали, и я понял, что должен объяснить, зачем я, собственно, всё это пишу? Зачем мне вообще нужно отделять контроллеры от фреймворка? Скорее всего, об этом не придется думать, потому что

Шансы, что контроллеры придется переносить на другой фреймворк, близки к нулю. (Рафаэль Домс)

Читать дальше →

Использование Pjax в Yii2 (краткий обзор)

Время на прочтение2 мин
Количество просмотров90K
Разрабатываю проект на yii2, попутно изучая фреймворк, и не смог не поделиться одним из замечательных инструментов, который он представляет. Пост будет полезен тем, кто до этого с Pjax не работал. Опытным разработчикам, которые уделят посту время, буду благодарен за указание на неточности и дополнения, так пост станет полезнее и информативнее.
Читать дальше →

October CMS: Публичная бета

Время на прочтение2 мин
Количество просмотров36K
Сегодня, буквально несколько часов назад состоялся релиз бета-версии долгожданной (для узкого круга лиц) October CMS.
image

October CMS — это система, написанная на Laravel фреймворке, а значит позволяет уже «из коробки» то, что большинству других CMS и не снилось. Отличительной стороной данного проекта (помимо функциональной стороны) является его дизайн и оформление системы. Вспоминая сотни других поделок на популярных фреймворках — наблюдаешь разительные отличия, всё профессионально, круто и очень красиво.
Читать дальше →

Тестирование отдельных Symfony 2 бандлов

Время на прочтение3 мин
Количество просмотров5.4K
Начну с коротенькой предыстории. Была у меня задача написать резерватор для номеров в отеле, я полез на всеми нами любимый packagist, в поисках готового решения и, к моему глубокому разочарованию, не нашел ничего. Ну, надо сделать — сделаем. Код написан, покрыт функциональными тестами в приложении. Через пару недель я решил выложить написанный бандл на github. Но передо мной встал вопрос: при тестировании отдельного бандла у нас нет самого приложения. Начал гуглить, и опять не нашел ничего стоящего. В общем пришлось собирать информацию по крупицам, и сейчас я хочу поделиться своим опытом с вами.
Начнем наши тесты

Ближайшие события

13 апреля Yii 2 переходит в статус Beta

Время на прочтение1 мин
Количество просмотров5.6K
Меньше недели назад обновился Roadmap разработки любимого многими фрэймворка Yii2.

В последние несколько дней, а также прямо сейчас в основную ветку вливается огромное число изменений.

Вот некоторые, самые интересные из них (по сравнению с текущей альфой конечно)
Читать дальше →

Создание простого REST-приложения на Silex

Время на прочтение4 мин
Количество просмотров22K
В этой статье мы создадим простое REST приложение на PHP-фреймворке Silex, начав с установки Silex и закончив созданием нескольких маршрутов приложения.
Silex — это PHP микро-фреймворк от создателей Symfony и во многом построенный на его базе. Подробнее о нем можно узнать из следующего хабрапоста
Читать дальше →

Работа с архивами tar и gz средствами PHP

Время на прочтение6 мин
Количество просмотров19K
Как это часто случается, все началось с того, что мне потребовалось нечто, позволяющее обрабатывать архивы «tar.gz» средствами php. Покопавшись в Интернете, я с удивлением обнаружил, что ничего сколько-нибудь приемлемого на эту тему не опубликовано.

Что у нас есть?

1. PEAR расширение для PHP http://pear.php.net/package/Archive_Tar Прекрасно, но в моем случае – неприемлемо, поскольку доступа к настройкам сервера у меня нет. Вынужденно отметаем.
2. Отменная статья Алексея Валеева «Работа с архивами tar.gz в php». То, что нужно, но – увы. Мне требовалось решение лицензионно «прозрачное», не способное вызвать вопросов. По этому, использование библиотеки от Битрикса тоже не годилось.

Собственно, это – все.
Читать дальше →

RabbitMQ tutorial 5 — Тематики

Время на прочтение4 мин
Количество просмотров44K
Продолжаю серию перевода уроков с официального сайта. Примеры будут на php, но их можно реализовать на большинстве популярных ЯП.

В предыдущей статье мы усовершенствовали системы логирования. Вместо точки доступа fanout (которая подходит только для элементарной трансляции сообщений), мы использовали direct — и получили возможность получать сообщения через определенные выборки.

Хоть direct и усовершенствовал нашу систему, он всё-таки имеет недостаток — он не может составить маршрут(routing) по нескольким критериям.

Например, нам понадобилось разделять логи не только по его типу важности, но и по источнику лога. Вы наверное встречали такую концепцию в unix инструменте syslog, которые различает логи по его типу важности(info/warn/crit...) и по его объекту (auth/cron/kern...).

Мы получаем гибкость в запросе. Например, мы может получить все логи с типом error, пришедшие из 'cron'-а, и все логи пришедшие с 'kern'. Для того, чтобы реализовать это в нашей системе логирования, изучим точку доступа — topic.
Читать дальше →

Как я подружил Quickbooks и PHP сайт с помощью Web Connector'а

Время на прочтение9 мин
Количество просмотров14K
Как-то однажды понадобилось клиенту интеграция Quickbooks (далее QB) и сайта, который мы ему и делаем. Первый вопрос который у меня возник по этому поводу: "Что такое QB, и можно ли вообще это реализовать?".

Немного погуглив я нашел то что искал. Quickbooks — это бухгалтерская программа для малого бизнеса (основной рынок использования США). Это что-то типа 1С но только с нормальным GUI и некоторыми прикольными плюшками. QB — это приложение, которое пользователь ставит у себя на компе (only for Windows) и с помощью пару кликов, разворачивает себе компанию в которой ведет бухгалтерию.

Ладно, теперь я, хотя бы, знаю своего врага в лицо, одной проблемой меньше. Что касается интеграции то тут все немного сложнее. С чем можно интегрировать QB вы можете посмотреть здесь. Что же мы там видим:

  • .NET SDK
  • Java SDK
  • PHP SDK (Coming Soon)
  • Windows Azure SDK
  • QuickBooks QBXML v12 SDK (но on desktop scenarios only)


Мда, PHP SDK (Coming Soon) — последняя надежда… Я почти отчаялся, но меня спасло это. Что же эта за штука такая — Web Connector? На офф сайта по этому есть небольшая страничка, на которой предлагают скачать QuickBooks Web Connector Programmer's Guide, и все (по крайней мере мне надоело искать информацию на офф сайте).
Читать дальше →

Модифицируем Chrome Logger — пост как стимул к изучению расширений Google Chrome и написанию своих

Время на прочтение3 мин
Количество просмотров7.4K
В своем комментарии: habrahabr.ru/post/177709/#comment_6169843 я описал проблему расширения из соответствующей статьи, кроме редиректов также есть проблемы с выводом логов AJAX запросов и возможно в некоторых случаях с iframe заголовками.
Я решил разобраться почему это происходит и понял, что то мое утверждение было слишком категоричным. После того как webRequest перестал быть экспериментальным developer.chrome.com/extensions/experimental.webRequest.html теперь можно писать логеры «на заголовках» обрабатывающие все, ранее проблемные, ситуации. Я не ставлю своей целью разобрать все такие ситуации, просто хотел бы показать — как можно модифицировать расширение Chrome Logger для решения части вышеуказанных проблем и возможно заинтересовать желающих разобраться с расширениями Google Chrome на простом примере. Может быть у кого-то после прочтения поста возникнет желание написать свое расширение.
Кому интересно - читаем дальше

Сравнение количества кода популярных фреймворков

Время на прочтение4 мин
Количество просмотров20K
Привет, Хабр. С каждым годом количество фреймворков увеличивается, появляются форки, некоторые становятся модными, а некоторые выходят из моды. Конечно разные фреймворки предоставляют разработчику разные возможности, которые прежде всего зависят от разработчиков, их идей, выбранной архитектуры, наличия документации… и конечно размера фреймворка. Вот об этом параметре мы и поговорим сегодня — всех заинтересованных попрошу под кат.

Читать дальше →