PHP. Hexadecimal, octal and binary numbers. Hex to string

В php 5.4 появилась возможность определения не только десятичных чисел, но и 16-тиричных, 8-миричных и 2-ых чисел:

$int = 123; // decimal number
$int = -123; // a negative number
$oct = 0123; // octal number (equivalent to 83 decimal)
$hex = 0x1A; // hexadecimal number (equivalent to 26 decimal) 
$bin = 0b11111111; // binary number (equivalent to 255 decimal)

Рассмотрим как можно перевести например из 16-тиричной системы в 10-тичную. Для этого есть несколько способ: либо явно intval($hex), либо неявно strval($hex). Оба способа полезны, для примера использования неявного способа реализуем функцию по получению ascii - символов по их числовому представлению.

function hex2str($hex) {
        $str = "";
        if (is_array($hex)) {
            foreach($hex as $val) {
                // неявный способ
                $str .= chr(strval($val));
            }
        }
        if (is_string($hex)) {
            for ($i=0, $length = strlen($hex); $i < $length; $i += 2) {
                $str .= chr(hexdec(substr($hex, $i, 2)));
            }
        }
        return $str;
}

$hex = "48656C6C6F2C20776F726C64210D0A00";
$hexArray = array(0x48, 0x65, 0x6C, 0x6C, 
                               0x6F, 0x2C, 0x20, 0x77, 
                               0x6F, 0x72, 0x6C, 0x64, 
                               0x21, 0x0D, 0x0A, 0x00);
 
$str1 = hex2str($hex);
$str2 = hex2str($hexArray);

echo $str1; // Hello, world!
echo $str2; // Hello, world!

Кстати, функция echo $hex перед выводом производит неявное преобразование числа в десятичную систему (strval($hex)).

PHP. Pseudo-optimizing

Возможно ли провести оптимизацию в PHP проектах так, чтобы как-то ощутимо выигрывать в использовании памяти или времени? Учитывая механизм движка Zend Engine 2 как-то ощутимо соптимизировать почти невозможно. Хотя можно выделить такие моменты, где все-таки можно провести оптимизацию:
- правильное обращение с подключениями к базам данных;
- встречаются такие конструкции с циклом

for ($i = 0; $i < count($item); $i++){//...}

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

$count = count($item); 
for ($i = 0; $i < $count; $i++){//...}

или более компактно

for ($i = 0, $count = count($item); $i < $count; $i++){//...}

- также есть и другие нюансы, с которыми лучше ознакомиться на данном ресурсе - http://www.phpbench.com/

Host - WinOS/Guest - Ubuntu Server. How to increase the size of the screen virtual ubuntu server on the vmware or virtualbox

После пары дней попыток, для меня лучшим решением оказалось следующее:
1- установка ssh-сервера
2 - использование утилитки - Putty

Linux/Ubuntu. Подключение к инету через прокси

Для учета прокси нужно в директории /etc/apt/ создать файл настроек apt.conf

sudo nano apt.conf

И в нем прописать следующие строки:

Acquire::http::proxy "http://username:password@proxy_addr:3128/";
Acquire::https::proxy "https://username:password@proxy_addr:3128/";


Для Ваших нужд может потребоваться и ftp-протокол:

Acquire::ftp::proxy "ftp://username:password@proxy_addr:3128/";

На всякий пожарный отмечу, что при прокси-подключениях для самопроверки не стоит полагаться на команду ping; в сторону инета он не проходит.

Linux/Ubuntu. Пакетный менеджер APT

Advanced Packaging Tool (APT) – набор утилит для управления программными пакетами в операционных системах основанных на Debian.

APT позволяет:
- устанавливать, удалять и обновлять пакеты
- решать зависимости
- искать пакеты по заданным критериям
- просматривать подробную информацию о пакете
- манипулировать ключами от репозиториев

APT является одной из базовых программ и включена в состав Ubuntu.

Настройки APT

Все файлы настроек APT хранятся в директории /etc/apt
/etc/apt/apt.conf – основной файл настроек, используемый всеми инструментами из состава APT.

Описание всех возможных настроек и опций можно прочитать в документации к нему:
man apt.conf

apt.conf.d - директория содержащая в себе файлы конфигурации, аналогичные по синтаксису apt.conf.

При помощи этой директории можно быстро и удобно манипулировать настройками APT добавляя или удаляя подготовленные файлы с настройками.

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

sources.list - файл с перечнем репозиториев.

sources.list.d - директория с файлами репозиторий, по назначению аналогичных sources.list. Каждый репозиторий описывается в отдельном файле.

Использование APT

В APT входит несколько утилит, выполняющих отдельные задачи.

apt-get - это утилита управления пакетами.
apt-get требует прав суперпользователя для своей работы.

Основные команды:

update - Обновить информацию о пакетах, содержащихся в репозиториях.
install foo - Установить пакет foo. Скачивание, установка и настройка происходят автоматически. Если для настройки пакета foo нужны дополнительные сведения, будет показан запрос к пользователю.
upgrade - Обновление пакетов, для которых в репозитории доступны новые версии.
dist-upgrade - Обновление пакетов, требующих разрешения зависимостей (установка дополнительных или удаление конфликтующих пакетов).
remove foo - Удаление пакета foo из системы.
purge foo - Удаление пакета foo и очистка системы от его конфигурационных файлов. Файлы настроек в домашних каталогах пользователей удалены не будут.
autoremove - Удаление пакета, который более не нужен в системе. Используется для очистки системы от ненужных пакетов. Факт, что пакет более не нужен, определяется следующим образом: если пакет был установлен не сам по себе, а как зависимость для другого пакета, который впоследствии был удалён, значит этот пакет тоже уже не нужен в системе.
source foo - Получение исходных текстов пакета foo.
build-dep foo - Получение зависимостей для сборки пакета foo.

Починка базы пакетов

apt-get также используется для устранения сбоев в базе пакетов вызванных нарушенными зависимостями. Разрешение зависимостей производится командой:

sudo apt-get install -f

apt-cache – утилита, позволяющая выполнять запросы к кешу APT.

Основные команды:

search - Поиск пакета по части названия или описания. Поддерживает регулярные выражения.
show - Информация о пакете: версия, размер, описание и т. п.
depends - Зависимости указанного пакета.
rdepends - Обратные зависимости пакета.

apt-key служит для добавления ключей от репозиториев в систему. Ключи защищают репозитории от возможности подделки пакета.

Основные команды:

add - Добавление ключа в базу доверенных ключей.
del - Удаление ключа из доверенных.

В завершении приведу вот такую проблемку, которая может возникнуть во время установки того или иного приложения, например - midnight commander (mc). При попытке установки

sudo apt-get install mc

система выбрасывает в консоль сообщение о невозможности найти необходимый пакет

Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package mc


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

sudo apt-get update

Для успешности данного обновления ваша рабочая станция или сервер должны иметь выход в инет (если нужно настроить выход через прокси, можно заглянуть сюда) и в файле - sources.list - должны быть прописаны соответствующие репозитории.
После этого, если нет иных проблем, установка должна пройти успешно. Всем успехов!

Javascript. Initialization Date object by some date string


var date = new Date($("#date_field").val().replace(/(\d+).(\d+).(\d+)/, "$3/$2/$1"));