На днях выложил на GitHub библиотеку, реализующую многопоточную работу с cURL.

Пользуемся.

Читать полностью …
Комментарии (0)
Дата публикации: 12 января 2014 г.

В настоящее время все большую популярность набирает Twitter Bootstrap. Для того, чтобы подружить Yii и Bootstrap существует замечательное расширение Yii-Bootstrap. Я решил адаптировать CRUD на диалоговых окнах, описанный в моей недавней статье, под это расширение.

Twitter Bootstrap dialog CRUD example

Читать полностью …
Комментарии (1)
Дата публикации: 26 февраля 2013 г.

linechart example

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

Демо | Github

Читать полностью …
Комментарии (0)
Дата публикации: 24 января 2013 г.

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

Читать полностью …
Комментарии (2)
Дата публикации: 23 января 2013 г.

Пару раз, при написании виджетов, мне требовалось разместить javascript код в секции HEAD до подключения JS файлов. К сожалению средствами обычного CClientScipt этого добиться невозможно. В результате пришлось расширить стандартный класс.

По прошествии некоторого времени мне понадобилось другое расширения nlsclientscript, которое помогает избежать повторной загрузки ресурсов для AJAX форм. Сразу же возник вопрос. Как повесить два класса на один компонент в настройках приложения? И как быть, если в дальнейшем понадобиться использовать третье, четвертое и, даже, может быть, пятое расширение?

Читать полностью …
Комментарии (0)
Дата публикации: 26 декабря 2012 г.

Сегодня решил размяться и написать функцию для объединения двух JSON объектов:


function json_merge_recursive(json1, json2){
	var out = {};
	for(var k1 in json1){
		if (json1.hasOwnProperty(k1)) out[k1] = json1[k1];
	}
	for(var k2 in json2){
		if (json2.hasOwnProperty(k2)) {
			if(!out.hasOwnProperty(k2)) out[k2] = json2[k2];
			else if(
				(typeof out[k2] === 'object') && (out[k2].constructor === Object) && 
				(typeof json2[k2] === 'object') && (json2[k2].constructor === Object)
			) out[k2] = json_merge_recursive(out[k2], json2[k2]);
		}
	}
	return out;
}
Читать полностью …
Комментарии (7)
Дата публикации: 20 ноября 2012 г.

Одной из наиболее часто встречающихся задач, при работе с моделями Active Record, является сохранение времени ее создания и обновления. Многие для этих целей используют метод beforeSave(), но в Yii существует более удобный и простой способ. Это поведение CTimestampBehavior. Пользоваться им довольно просто. Достаточно в классе модели написать что-то типа этого:


public function behaviors(){
	return array(
		'CTimestampBehavior' => array(
			'class' => 'zii.behaviors.CTimestampBehavior',
			'createAttribute' => 'create_time',
			'updateAttribute' => 'update_time',
		)
	);
}	
Читать полностью …
Комментарии (3)
Дата публикации: 16 ноября 2012 г.

Порой бывает полезно иметь возможность предпросмотра SVG файлов прямо в проводнике Windows, как это реализовано для стандартных изображений. Оказывается сделать это очень легко.

svg

Для этого, всего лишь, нужно воспользоваться соответствующей утилитой: SVG Viewer Extension for Windows Explorer.

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

Читать полностью …
Комментарии (5)
Дата публикации: 29 октября 2012 г.

DialogCRUD

Наверное, я не первый человек, который задался вопросом: "Как бы переделать стандартный CRUD сгенерированный Gii, чтобы он работал на диалоговых окнах?". Оказывается, для этих целей даже создано готовое расширение eupdatedialog. Но мой способ, которым я хочу поделиться с читателями своего блога будет несколько иным. В этой статье я расскажу о том, как можно реализовать CRUD на диалоговых окнах, внося минимальные изменения в код и поведение фрэймворка. К слову сказать, при отключенном, javascript в браузере вообще не будет никаких отличий от действий стандартного кода Gii. Но вот при включенном javascript можно будет насладиться всеми прелестями и удобствами создания и редактирования записей на диалоговых окнах. Более того, я расскажу, как всего этого добиться не написав не единой строчки кода! Интересно? Тогда добро пожаловать под кат.

Читать полностью …
Комментарии (27)
Дата публикации: 14 октября 2012 г.

Сегодня я хочу рассказать об одном необычном способе применения apply в javascript.

Предположим у нас есть некоторая функция:


function sum(){
	for (var i=0, s=0; i<arguments.length; s+=arguments[i++]);
	return s;
}

Эта функция принимает динамическое число параметров и возвращает их сумму.


	alert(sum(1,2,3,4,5,10));	//выведет 25

А теперь, представим ситуацию, когда список параметров, которые мы должны передать в функцию формируется в результате выполнения скрипта (например в виде массива), и также нет возможности изменить код функции (например мы пользуемся каким либо фрэймворком). Возникает вопрос. Как быть? Как передать массив параметров в нашу функцию?

Читать полностью …
Комментарии (0)
Дата публикации: 8 августа 2012 г.

Как известно, существует такая технология, как JSONP, с помощью которой можно выполнять кросс-доменные AJAX запросы. Так вот, совсем недавно я обнаружил, что при ее использовании jQuery совершенно не умеет обрабатывать ошибки. Приведу небольшой пример.


$.ajax({
	type: 'GET',
	url: 'http://yandex.ru/404',
	dataType: 'jsonp',
	success: function(json){
		alert('success')
	},
	error: function(){
		alert('error')
	}
});

Логично ожидать, что в результате выполнения приведенного скрипта, на экране монитора появится сообщение error, но увы этого не произойдет. Как же быть в этом случае? Мне известно два способа которыми возможно перехватить ошибку.

Читать полностью …
Комментарии (2)
Дата публикации: 16 июля 2012 г.

4 Вот решил у себя в блоге разместить несколько понравившихся фоток. Это модель Darnah Morgan, автор фотографий Illusive Photography. Лицензия CC BY 2.0

Читать полностью …
Комментарии (3)
Дата публикации: 14 февраля 2012 г.

Довольно часто, в учебной литературе для перебора массивов предлагают следующую конструкцию:


$array = range(0, 999999);
$time_start = microtime(TRUE);
for($i=0; $i<count($array); $i++){}
echo microtime(TRUE)-$time_start;	

На первый взгляд все хорошо, но использовать такой код крайне не желательно. Дело в том, что на каждой итерации цикла, а если говорить точнее, при проверке условия, будет вызываться функция count(). Можно конечно видоизменить код следуюшим образом:

Читать полностью …
Комментарии (6)
Дата публикации: 10 февраля 2012 г.

Это перевод статьи: 6 Questions You Should Ask Yourself When Choosing Fonts

Если вы похожи на меня, то выбор шрифтов для вашего проекта обещает быть либо легкой, либо самой сложной задачей, с которой вы столкнетесь. Шрифты это гигантская часть любого дизайна, и они должны подбираться со всей ответственностью. Хороший выбор шрифтов может усиливать ваш дизайн, эффективно передавать идеи и цели сайта его посетителям. Плохой выбор может радикально изменить его и повлиять на то, как ваш сайт воспринимается пользователем.

Типографика действительно наука и многие дизайнеры изучают ее на протяжении всей карьеры. Но выбор эффективных шрифтов не требует глубокого изучения лигатур, глифов или высоты верхнего выноса. Вы просто должны задать себе несколько вопросов — хотя обучение всегда поможет в принятии трудных решений.

Читать полностью …
Комментарии (0)
Дата публикации: 9 февраля 2012 г.

Вот типичная картина, которая наблюдается после установки операционной системы.

Утановка неизвестных устройст 1

Читать полностью …
Комментарии (5)
Дата публикации: 28 октября 2011 г.

Сегодня я расскажу о простом способе настройки системного прокси в Windows 7. Итак, для просмотра текущего состояния прокси воспользуемся командой netsh winhttp show proxy.

Просмотр текущего состояния прокси

Здесь мы видим, что система настроена на прямой доступ, без использования прокси. Для установки прокси служит команда netsh winhttp set proxy.

Читать полностью …
Комментарии (1)
Дата публикации: 17 октября 2011 г.

Недавно, я написал функцию для вычисления разности между двумя датами. Почитать об этом можно здесь. А спустя некоторое время, мне стало известно, что для этих целей в PHP 5.3 появилась встроенная функция date-diff. Сначала, я было расстроился, что потратил время на изобретение велосипеда, а затем решил проверить роботу этих двух функций. Моя идея заключалась в следующем. Генерировалось энное кол-во пар дат. Вычислялась разница между ними первым и вторым способом, а затем сравнивался результат.

Читать полностью …
Комментарии (5)
Дата публикации: 11 апреля 2011 г.

Иногда перед разработчиком возникает задача в нахождении времени прошедшего между двумя датами. Я решил написать универсальную функцию для решения этой задачи. Она находит количество лет, месяцев, дней, часов, минут, секунд прошедших между двумя датами и возвращает их в виде массива.

Читать полностью …
Комментарии (16)
Дата публикации: 8 апреля 2011 г.

На основе одной замечательной статьи (http://habrahabr.ru/blogs/ui/30560/) сделал jQuery плагин для стилизации файл-инпутов. Он позволяет заменить стандартный файл-инпут

До

следующей вещью:

После

Читать полностью …
Комментарии (5)
Дата публикации: 5 апреля 2011 г.

В свое время я писал функцию для фильтрации введенного пользователем HTML кода на языке Perl. Если кому интересно почитать можно здесь. Но так, как Perl уже давно не мейнстрим я решил переписать все это дело на PHP.

Пользоваться фильтром нужно следующим образом. Сначала подключаем класс и создаем объект представляющий из себя фильтр.

require_once "html_filter_class.php";
$html_filter = new html_filter();
Читать полностью …
Комментарии (20)
Дата публикации: 28 марта 2011 г.

Сегодня я решил потратить немного времени и написать небольшую шпаргалку, с ссылками на ресурсы, которые смогут пригодиться веб разработчику. Я не претендую на то, чтобы разместить здесь огромный перечень ссылок по той или ной теме. Например, существует с десяток хороших IDE, и спорить о том какая из них лучше пожалуй бессмысленно. Каждый человек индивидуален, и у него есть свои предпочтения, свои вкусы. Ниже приведены лишь те ресурсы, которыми пользуюсь я. Надеюсь они будут полезны и вам.

Читать полностью …
Комментарии (0)
Дата публикации: 18 марта 2011 г.

Сегодня мне наконец-то удалось отыскать хороший jQuery плагин для скругления углов изображений, который корректно работает во всех основных браузерах, в том числе и в IE6. Плагин позволяет задавать радиус скругления для каждого из углов, а также, если необходимо, цвет и размер границы изображения. В общем это творение оставило у меня только положительные впечатления. Рекомендую всем.

Демонстрация работы плагина

Читать полностью …
Комментарии (4)
Дата публикации: 11 марта 2011 г.

Пусть у нас имеется следующий скрипт

$(document).ready(function(){
     for(i=1; i<101; i++){$.get('test.php?n='+i)};
});

и файл test.php

<?php sleep(10) ?>

Этот скрипт должен одновременно выполнить сто AJAX запросов. Посмотрим как на самом деле обстоит дело в браузере Firefox.

Читать полностью …
Комментарии (3)
Дата публикации: 7 марта 2011 г.

На просторах интернета натолкнулся на один очень полезный плагин jQuery, предназначенный для создания индикаторов загрузки. Посмотреть плагин в действии можно на демо страничке. Но есть одно маленькое но. Дело в том, что этот плагин не работает в браузерах IE c версиями jQuery начиная с 1.4.3. Там возникает ошибка, при проверке поддержки VML браузером. Я немного допилил плагин, чтобы исправить это. Ссылки для скачивания ниже.

Читать полностью …
Комментарии (6)
Дата публикации: 7 марта 2011 г.

Пусть у нас есть массив элементов, для каждого из которых нужно последовательно выполнить AJAX запрос (новый запрос должен отправляться, как только завершиться предыдущий). На самом деле в асинхронной модели программирования это задача не такая уж легкая, как может показаться на первый взгляд.

Читать полностью …
Комментарии (7)
Дата публикации: 4 марта 2011 г.

Хочу поделиться небольшой функцией для рекурсивного обхода файлов в каталогах.

function get_files($dir = "."){
     $files = array();	
     if ($handle = opendir($dir)) {		
          while (false !== ($item = readdir($handle))) {		
               if (is_file("$dir/$item")) {
                    $files[] = "$dir/$item";
               }		
               elseif (is_dir("$dir/$item") && ($item != ".") && ($item != "..")){
                    $files = array_merge($files, get_files("$dir/$item"));
               }
          }	
          closedir($handle);
     }	
     return $files; 
}
Читать полностью …
Комментарии (4)
Дата публикации: 21 января 2011 г.

/\ Можете ли вы точно сказать какой из этих двух знаков является слешем (косой чертой), а какой обратным слешем (обратной косой чертой)? Если нет, то этот пост для вас. В нем я расскажу о простом способе, благодаря которому вы больше никогда не будете путать эти два знака.

Читать полностью …
Комментарии (7)
Дата публикации: 26 декабря 2010 г.

  • Мир освещается солнцем, а человек — знанием.
  • Не учись до старости, а учись до смерти.
  • Чему учился, тому и пригодился.
  • Учение в детстве, как резьба на камне.
  • Наукой люди кормятся.
  • Нужда учит, а барщина мучит.
  • Знание да наука на вороту не виснут.
  • Золото добывают из земли, а знания – из книги.
Читать полностью …
Комментарии (1)
Дата публикации: 3 декабря 2010 г.

Недавно, мы с женой играли в "мозголом" на одноклассниках. Это такая игра, где задают вопрос, а к нему прилагается четыре варианта ответов, и нужно угадать правильный ответ (а-ля "Кто хочет стать миллионером?"). В общем к чему я все это. Нам попался вопрос: "С какой буквы чаще всего начинаются русские слова?". Мне сразу вспомнились пару моих статей на хабре, где я находил самую популярную букву русского языка, и где определял среднюю длину русского слова. И я подумал, почему бы в продолжении темы не написать еще один пост, только теперь не на хабре, а у себя в блоге. Итак, под катом ответ на вопрос из мозголома.

Читать полностью …
Комментарии (5)
Дата публикации: 28 ноября 2010 г.

Вступление

Рано или поздно перед человеком, занимающимся веб-программированием возникает задача в фильтрации введенного пользователем HTML кода. Вот такая задача, однажды, встала и передо мной. Готового решения на тот момент мне найти не удалось. Вся информация, которую я откопал по этому вопросу, как обычно, ограничивалась советами, надо сделать так, надо сделать эдак, но конкретного, работающего решения, почему-то никто не предложил. Особенно порадовал один человек, который сказал, что если он и возьмется написать подобный фильтр, то только за большие деньги. В отличие от этого человека, в этом посте я во всех деталях расскажу как сделать фильтрацию введенного пользователем HTML кода, и в конце, вы получите работающий пример, который сможете применять в своих проектах.

Читать полностью …
Комментарии (5)
Дата публикации: 16 сентября 2010 г.

Пришла мне как-то в голову мысль сделать загрузочную флэшку и решил я использовать для ее создания grub4dos. Это универсальный мультизагрузчик, основанный на GNU GRUB. Ниже я хочу поделиться своим опытом, и рассказать о некоторых проблемах, с которыми мне пришлось столкнуться. Сразу покажу окончательный результат, чтобы можно было определиться стоит ли читать этот пост до конца. При загрузке компьютера с флэшки будем иметь следующее.

Снимок экрана

Читать полностью …
Комментарии (191)
Дата публикации: 29 июня 2010 г.

Буду краток. Есть вот такой способ решения данной проблемы, но его нельзя использовать в случае с липким футером, потому что для контейнера не удастся задать высоту в процентах. А вот мой способ решения поставленной задачи, который, кстати, применяется на этом сайте. Так что пользуйтесь на здоровье друзья.

Читать полностью …
Комментарии (0)
Дата публикации: 29 июня 2010 г.

Как известно XHTML 1.0 Strict не позволяет использовать атрибут TARGET для ссылок. Это значит, что все ссылки, по умолчанию, открываются в том же окне. Лично я с этим не совсем согласен. По моему мнению, все ссылки внутри одного домена должны открываться в одном окне, а ссылки за пределами этого домена в новом окне.

Читать полностью …
Комментарии (2)
Дата публикации: 25 июня 2010 г.

Живет в интернете один сайт c простым японским названием karaoke.ru, и хорош он тем, что там можно записать свое исполнение песни, и выложить его на всеобщее обозрение. Посмотрите, что мне удалось там раскопать.

Читать полностью …
Комментарии (0)
Дата публикации: 18 июня 2010 г.

Что то в этом джойстике не так.

Изображение джойстика

Давайте посмотрим внимательно.

Читать полностью …
Комментарии (2)
Дата публикации: 15 июня 2010 г.

Имеется колода 52 карты. Помощник предлагает зрителям выбрать из нее любые пять. Затем помощник выбирает из этих пяти четыре карты и по очереди показывает их фокуснику. После этого фокусник называет пятую карту, оставшуюся у помощника.

Читать полностью …
Комментарии (1)
Дата публикации: 24 мая 2010 г.
На хостинг