четверг, 28 февраля 2013 г.

SVN: делаем файл исполняемым

Последние 4 дня занимаюсь созданием CI билдов для TeamCity. Одна из задач - запускать php скрипты через Apache Ant. Для того чтобы его запускать нужно сделать его исполняемым. Вариант добавления 'chmod +x file' в Ant скрипт не подходит, так как это костыль.

Начал гуглить и нашел.

Чтобы сделать файл исполняемым необходимо выполнить:
svn propset svn:executable ON filename

Обратная операция:
svn propdel svn:executable ON filename

Читать далее

среда, 6 февраля 2013 г.

JavaScript: сортировка массивов и json-объектов

Сортировка массива:
[1, 3, 9, 2].sort();

С сортировкой json-объектов дела состоят немного сложнее, так как сортировать приходится по какому-то значению: цена, возраст и т.д. Для этого в функцию sort можно передавать функцию сортировки.

Пример сортировки по-возрастанию:
[
  { name: "Item 1", price: 2000 },
  { name: "Item 2", price: 1000 },
  { name: "Item 4", price: 1200 },
  { name: "Item 3", price: 3000  }
].sort(function(obj1, obj2) {
  return obj1.price-obj2.price;
});

Пример сортировки по-убыванию:
[
  { name: "Item 1", price: 2000 },
  { name: "Item 2", price: 1000 },
  { name: "Item 4", price: 1200 },
  { name: "Item 3", price: 3000  }
].sort(function(obj1, obj2) {
  return obj2.price-obj1.price;
});

Читать далее

вторник, 5 февраля 2013 г.

PHP: особенности функции ip2long

Думаю, большинство программистов встречались с задачей хранения ip в БД. Хранить их как plain text (например, 127.0.0.1) неудобно и непрактично. Потому принято использовать функцию ip2long, которая преобразовывает ip адрес в целове число.

Но есть некоторые особенности ее использования в x32/x64. Допустим, для его хранения мы выделяем INT ячейку в БД.

Результат функции на x32:
ip2long(127.127.127.127) = 2147483648
ip2long(255.255.255.255) = -2147483648

Результат функции на x64:
ip2long(127.127.127.127) = 2147483648
ip2long(255.255.255.255) = 4294967296

Получается что 4294967296 не запишется в БД, так как ячейка в нашей БД типа INT и максимальное число, которое можно в нее записать: 2147483648.

Потому добавляем для атрибут UNSIGNED, который позволяет записывать в БД диапазон чисел от 0 до 4294967296.

Но как же быть с x32? Ведь в ней функция ip2long может вернуть отрицательное значение. Для решения этой проблемы нужно обрабатывать результат перед записью БД:
$ip = sprintf('%u', ip2long($ip)); // возвращает строку с положительным значением

Читать далее

суббота, 2 февраля 2013 г.