Обо мне

4X_Pro
4X_Pro
Живу в Сети с 25 ноября 2000 г.
Веду блог с 8 января 2011 г.

Контакты

Немного рекламы

Xpro.Su: заметки о жизни в Интернете

Упрощаем разделение тем в PunBB

Сайтостроительство Оставить отзыв »

Есть у меня с давних времен один форум, работающий на PunBB. В целом в нем меня все устраивало, кроме одного: очень неудобного разделения темы на несколько в случае возникновения оффтопика. Неудобство заключалось в том, что при разделении тема разбивалась на страницы точно так же, как при обычном просмотре, в результате чего если оффтопик шел на нескольких страницах, каждую из них приходилось вырезать в отдельную тему, а потом склеивать.
Наконец, мне это надоело, и я решил немного подредактировать исходный код moderate.php (который лежит в корне).

Читать далее »

Преобразование PSD в TIFF с сохранением слоев

Инструменты веб-мастера, Полезный софт Оставить отзыв »

Давно искал инструмент, который позволил бы конвертировать PSD во что-нибудь, что корректно читается GIMP (например, тот же TIFF) с сохранением слоев, причем так, чтобы это можно было делать под Linux. И вот вроде бы нашел подходящий сервис под названием Zamzar. Испытал, получил вполне приемлемый результат (но несколько слоев в результате конвертации оказались смещенными). Из недостатков сервиса можно назвать только ограничение на размер файла (50 Mb, но в большинстве случаев мне этого хватит) и то, что ссылка на файл высылается на EMail, а не выдается сразу же.

Обновление TextCMS до версии 1.01

Разное, Сайтостроительство, Полезный софт Оставить отзыв »

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

Переключение раскладки по CapsLock в Lubuntu

Linux Оставить отзыв »

Установил недавно Lubuntu и обнаружил, что настроить с помощью GUI переключение раскладки клавиатуры по CapsLock не получается. Стал искать решение, и нашел следующее:

Читать далее »

Light: быстрый броузер для старых компьютеров

Полезный софт Оставить отзыв »

Все популярные современные броузеры (Firefox, Chrome, Edge) имеют большой недостаток: они потребляют оперативную память просто в огромных количествах. Поэтому я давно искал броузер, который с одной стороны, поддерживал бы современные стандарты, с другой, расходовал бы память очень аккуратно. Перепробовал довольно много: QupZilla, KMeleon, Netsurf, Midori, но ни один из них в полной мере не устраивал: либо по потребленю памяти они оставались сопоставимы с Яндекс.Браузером (который я использовал в качестве основного), либо не поддерживают JavaScript, что делает невозможным их использование в качестве основного рабочего инструмента.
В итоге остановился на броузере под названием Light. По сути дела он представляет собой Firefox, из которого удалены все редкоиспользуемые функции: печать, аудит ссылок, синхронизация, поддержка WebGL и т.п.

Читать далее »

Регулярные выражения для выделения ссылок

Web-программирование Оставить отзыв »

Недавно потребовалось сделать автоматическое обрамление ссылок в тег <a>. Хотя на первый взгляд, задача совершенно тривиальная, обнаружилось несколько подводных камней. Во-первых, не все пользователи указывают протокол (http:// или https:// в ссылках). Во-вторых, требовалось распознавать ссылки не только на домен, но и на конкретную страницу сайта или вовсе содержать параметры после знака ?. В-третьих, распознавать кириллические домены. Кроме этого, нужно было сделать так, чтобы уже корректно обрамленная в тег ссылка не обрамлялась повторно, а также обеспечить безопасность, предусмотрев защиту от XSS, а также свести к минимуму ложные срабатывания.

Исходя из этих требований, были приняты следующие решения:

Читать далее »

Легкое пробуждение: метод двух будильников

Идеи и размышления, Личная эффективность Оставить отзыв »

Как известно, прерывание сна на неподходящей фазе часто приводит к плохому самочувствию и работоспособности в течение как минимум первой половины дня. Поэтому наверное каждый, кто вынужден вставать по будильнику, задумывался над вопросом, можно ли как-то подстроить фазы сна под будильник. Вариантов решения тут несколько:

  1. Зная, что полный цикл сна составляет полтора часа, высчитать время, когда нужно ложиться спать, и строго его соблюдать. Но такой вариант подходит только тем, кто хорошо умеет управлять своим временем и эмоциональным состоянием, а также ведет достаточно предсказуемый образ жизни.
  2. Использовать "умные будильники" — специальные устройства, которые отслеживают фазу сна и корректируют время срабатывания будильника с ее учетом. Главный недостаток такого подхода — необходимость приобретать такое устройство (которое к тому же стоит достаточно дорого).
  3. Использование приложения для Android, работающие аналогично "умным будильникам", но отслеживающие фазу сна на основе акселерометра, встроенного в планшет или телефон, который фиксирует интенсивность движения спящего. В этом случае дополнительных затрат не требуется, но для корректной работы приложения нужна сложная калибровка, которая к тому же зависит от конкретного спального места. Кроме того, необходимость класть планшет с собой в постель создает вероятность раздавить его во сне.
  4. И, наконец, решение, которое я нашел для себя во многом случайно: метод двух будильников. Суть его заключается в следующем: ставится два будильника, первый — за полтора часа до желаемого времени пробуждения, второй — на время пробуждения. Первый будильник нужно расположить так, что для его отключения необходимо сделать какие-то действия, которые требуют более-менее осознанного состояния. Тогда после того, как человек встанет, выключит будильник и ляжет спать дальше, начнется новый цикл сна с нуля. А так цикл длится полтора часа, то к срабатыванию следующего будильника он завершится, из-за чего пробуждение будет происходить достаточно легко и с хорошим самочувствием. Я испытывал этот метод примерно неделю и пока вполне доволен результатами.

Генерация ключа для шифра Вернама с помощью хеш-функций

Разное, Идеи и размышления Оставить отзыв »

Недавно прочитал в Wikipedia про шифр Вернама, который теоретически взломать невозможно. Узнал оттуда, что на практике он не используется из-за того, что для него требуется генерировать случайный ключ, равный по длине самому сообщению, который не будет ни повторяться, ни повторно использоваться. И тогда возникла мысль: а что если использовать для генерации такого ключа криптографические хеш-функции. В этом случае взяв некоторое начальное значение (мастер-ключ), взять хеш от получившейся последовательности и зашифровать им первый блок (длина которого равна длине хеш-функции) сообщения, затем добавить получившееся значение к мастер-ключу и случайному числу, и зашифровать следующий блок и т.д. В результате получаем, что ключ для шифрования каждого следующего блока однозначно и просто генерируется из предыдущего при знании мастер-ключа, но получить мастер-ключ из хеша является сложной задачей в виду необратимости хеш-функций.

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

В итоге я получил следующий алгоритм шифрования:

Читать далее »

Получаем курс валют с помощью PHP и SOAP

Web-программирование, Сайтостроительство Оставить отзыв »

Часто при работе с Интернет-магазинами требуется сделать так, чтобы курсы валют обновлялись автоматически. Делается это достаточно просто. На сайте cbr.ru предусмотрено несколько Web-сервисов, работающих по протоколу SOAP и выдающих необходимую информацию. Итак, вот простой код, который получает информацию о курсе евро:

$wsdl = 'http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL'; // указываем адрес WSDL-описания SOAP-сервиса, оттуда PHP возьмет информацию о доступных методах и их параметрах
try {
  $euro_to = 0; 
  $cbr = new SoapClient($wsdl,array('soap_version'=> SOAP_1_2, 'exceptions'=>true)); // создаем клиент для подключения к SOAP-сервису 
  $date = $cbr->GetLatestDateTime(); // получаем последнюю дату, за которую есть курс 
// можно, ко формировать ее вручную, но нужно учитывать, что по выходным и праздникам торги не проводятся, поэтому лучше сделать так
  $result = $cbr->GetCursOnDateXML(array('On_date'=>$date->GetLatestDateTimeResult)); //запрашиваем данные о курсах за указанную дату в формате XML
// к сожалению, возможности запросить курс отдельной валюты не предусмотрено, поэтому придется пройтись циклом по всем полученным
  if ($result->GetCursOnDateXMLResult->any) {  // если в ответе сервера есть XML с курсами валют
    $xml = new SimpleXMLElement($result->GetCursOnDateXMLResult->any); // открываем его как XML-объект
    foreach ($xml->ValuteCursOnDate as $currency) { // и начинаем обходить
    	if ($currency->VchCode=='EUR') { // VchCode содержит код валюты, для евро это EUR, для доллара — USD
    		$euro_to = floatval($currency->Vcurs); // цена за указанное в Vnom количество валюты 
    		$euro_from = $currency->Vnom; // для доллара и евро количество равно единице, для других валют может отличаться
// чтобы получить реальный курс за одну единицу валюты, нужно разделить $currency->Vcurs на $currency->Vnom
    	}
    }
    if ($euro_to!=0) { 
     // здесь можно вставить код, который обновляет данные в магазине
    }
  }
  else echo 'Error!';
}
catch (Exception $e) { // на всякий случай обработчик ошибок
	echo 'Error: '.$e->getMessage();
}

Доступ к MySQL на VDS через SSH-туннелирование

Администрирование, Сайтостроительство, Инструменты веб-мастера Оставить отзыв »

Думаю, многие обладатели VDS сталкивались с такой проблемой: на VDS запущен MySQL, висящий только на localhost и недоступный снаружи из соображений безопасности, и нужно внести какие-то изменения в базу. Приходится либо подключаться по SSH и работать через консольный клиент (что далеко не всегда удобно), либо ставить phpMyAdmin. Но есть и другой способ: использовать SSH-туннелирование, и пробросить порт MySQL-сервера с VDS на локальный компьютер. Через командную строку это делается следующим образом:

ssh -L локальный_порт:localhost:удаленный_порт логин@сервер

где локальный порт — номер порт на домашнем компьютере, удаленный порт — порт на сервере.
То же самое можно сделать и через SSH-клиент PuTTY. Заходим там в настройках соединения в Connection/SSH/Tunnels, вводим в source port номер локального порта (например, 3307), в destanation — localhost и удаленный порт (localhost:3306), и нажимаем "Add". Соединяемся с сервером, запускаем на своем компьютере локальный SQL-клиент (например, HeidiSQL) и в настройках соединения ставим localhost 3307. И все, база на VDS теперь так же легко доступна, как база на домашнем компьютере!