Блог Вячеслава Волкова

Кто работает целый день, тому некогда зарабатывать деньги

— Джон Дэвисон Рокфеллер

Блог / с мыслями о ...

Как проверить открытые порты в linux

Для того, что бы посмотреть открытые используемые порты в linux, можно воспользоваться командой sudo netstat -tlnp

[root@my-host ssh]# sudo netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      18910/nginx         
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      13322/sendmail      
tcp        0      0 0.0.0.0:443                 0.0.0.0:*                   LISTEN      18910/nginx         
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      18935/php-fpm       
tcp        0      0 127.0.0.1:3306              0.0.0.0:*                   LISTEN      27774/mysqld        
tcp        0      0 127.0.0.1:11211             0.0.0.0:*                   LISTEN      13185/memcached     
tcp        0      0 0.0.0.0:2221                0.0.0.0:*                   LISTEN      27911/sshd          
tcp        0      0 :::2221                     :::*                        LISTEN      27911/sshd

JSON Сериализация класса php с помощью JsonSerializable

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

Например, мы можем это сделать с помощью такой конструкции.
<?php
class Test {
	public $a = 'A';
	public $b = 'B';
}

$b = new Test();
echo json_encode($b);
?>

На выходе мы получим вот такой результат:
{"a":"A","b":"B"}

Но как быть, например, если у класса у нас есть приватные или продектед свойства, а при сериализации они все равно должны быть видны. Например, вот такой пример:
<?php
class Test {
	protected $a = 'A';
	protected $b;
}

$b = new Test();
echo json_encode($b);

На выходе мы получим просто пустой объект {}.

Для исправления этой проблемы в PHP существует интерфейс JsonSerializable, который и позволяет нам сериализовать класс по каки-то условиям. Например,
<?php
class Test implements JsonSerializable {
	protected $a = 'A';
	protected $b = true;
	public function jsonSerialize() {
		$result = array(
			'value' => $this->a,
			'result' => $this->b
		);
		return $result;
	}
}
$b = new Test();
echo json_encode($b);
?>

Нам нужно лишь реализовать метод jsonSerialize. Теперь на выходе у нас будет вот такой результат:
{"value":"A","result":true}

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

И базовый класс модели сериализации выглядит уже вот так.
<?php namespace App\Model;
class BaseJsonModel extends Base implements \JsonSerializable {
	public function __construct() {
		parent::__construct();
	}
	public function jsonSerialize() {
		$reflect = new \ReflectionClass($this);
		$props   = $reflect->getProperties(\ReflectionProperty::IS_PUBLIC | \ReflectionProperty::IS_PROTECTED);
		$result = array();
		foreach($props as $item) {
			$name = $item->getName();
			$result[$name] = $this->$name;
		}
		return $result;
	}
	public function __toString() {
		return json_encode($this->jsonSerialize(), JSON_UNESCAPED_UNICODE);
	}
}

Виды Черногории

С недавней поездки в Черногорию удалось запечатлить прекрасные виды страны. Это страна где море сочетается с горами и создается прекрасный пейзаж. Спешу поделиться с вами несколькими фотографиями. Узнать больше »

Умник! Играй с друзьями.

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

Чаще всего игры в социальных представлены как Flash контейнер или через iframe. Если раньше большая часть игр была на Flash, то благодаря технологиям которые сегодня дает веб уже можно писать многопользовательские и анимационные игры.

Вот и в один из вечеров я решил попробовать написать свою игру и посмотреть на каких технологиях это можно сделать. Моя игра Вконтакте http://vk.com/app4533532. А дальше небольшое описание. Узнать больше »

Установка bower компонентов через https:// вместо git://

Большинство компонентов которые устанавливаются через Bower, например, пытаются произвести загрузку через get:// протокол, а он работает по порту 9418. Если у вас установлен фаервол который закрывает этот порт, то само собой загрузить ничего не получится.

Поэтому существует специальная настройка конфигурации которая позволяет загружать компоненты по https протоколу.  Для этого в консоли вашей ОС выполните следующую строку.
git config --global url.https://.insteadOf git://

Сборка backbone+requirejs проекта с помощью grunt

Моей основной задачей в последнее время является создание одностраничных javascript приложений. В основном я использую фреймворк Backbone и requirejs. Обычно публикация приложения была простым действием "svn update" но из-за этого возникала куча проблем, начиная с несжатых файлов стилей, огромного количества js файлов и заканчивая кэшированием файлов браузером.

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

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

Узнать больше »

Сортировка DOM элементов с jQuery

Очень часто может возникнуть ситуация когда необходима сортировка html элементов в DOM с помощью javascript.

Для решения данной задачи можно воспользоваться встроенной функцией sort.

Например, у нас есть вот такой неупорядоченный список.
<button class="sort-elements">Сортировать</button>

<div class="sorting">
    <ul class="elements">
        <li>Элементы</li>
        <li>Для</li>
        <li>Проверки</li>
        <li>Сортировки</li>
        <li>На</li>
        <li>jQuery</li>
    </ul>
</div>

Для его сортировки можно использовать следующий метод
$('.sort-elements').click(function(){
    var $elements = $('.elements li');
    var $target = $('.sorting ul');
    
    $elements.sort(function (a, b) {
        var an = $(a).text(),
            bn = $(b).text();
        
        if (an && bn) {
            return an.toUpperCase().localeCompare(bn.toUpperCase());
        }
        
        return 0;
    });
    
    $elements.detach().appendTo($target);
});

Или вот здесь можно посмотреть рабочий пример сортировки.

Как сменить значения двух столбцов в mysql

Очень часто мы можем ошибиться при внесении данных в БД mysql, например, такое часто может возникнуть когда вы спутаете параметры широты или долготы. Что бы быстро сменить значения двух столбцов в БД вам пригодится вот такой простой запрос который меняет значения и для NULL столбцов тоже.
UPDATE swap_test SET x=(@temp:=x), x = y, y = @temp;

Ошибка «upstream sent too big header» при установке xdebug в symfony 2

После установки xdebug и запуске DEV environment в Symfony 2 можно получить ошибку Bad Gateway. В логах nginx можно найти следующую ошибку:
upstream sent too big header while reading response header from upstream

Для ее исправления необходимо увеличить параметры в конфигурации виртуального хоста Nginx.
fastcgi_buffer_size 32k;
fastcgi_buffers 4 32k;

В итоге получаем вот такой конфиг:
location ~ ^/(app|app_dev|config)\.php(/|$) {
          fastcgi_buffer_size 32k;
          fastcgi_buffers 4 32k;
          fastcgi_pass    unix:/tmp/site.sock;
          fastcgi_split_path_info ^(.+\.php)(/.*)$;
          include fastcgi_params;
          fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
          fastcgi_param  HTTPS off;
        }
Страница 1 из 512345