Обо мне

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

Контакты

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

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

Преобразование 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 теперь так же легко доступна, как база на домашнем компьютере!

Mindmap как средство навигации по сайту

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

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

Но все эти противоречия можно устранить, если использовать для навигации mindmap (иногда их еще называют "ассоциативными картами"). Mindmap — это изображение, показывающее между собой связь различных понятий, используемая для облегчения изучения и запоминания чего-либо нового. Как правило, в центре его располагается ключевое понятие (тема сайта), от которого расходятся связи к более частным (разделам сайта), а от них к еще более частным (подразделам или конкретным статьям). Каждое понятие можно обозначить как просто словом, так и добавить к нему небольшую картинку для большей наглядности. Нарисовать такой mindmap можно сначала от руки еще на самом начальном этапе проектирования сайта. Это, помимо всего прочего, поможет лучше продумать его структуру.

Техническую реализацию этой идеи я вижу так: изначально в правом верхнем углу сайта находится уменьшенная картинка mindmap, причем она выводится с position: fixed, то есть даже при прокрутке сайта вниз остается на экране на том же самом месте и доступна в любой момент. По щелчку мыши по ней разворачивается полная версия mindmap, содержащая кликабельные области, щелчок по которым приводит к переходу в соответствующий раздел. (Области могут быть произвольной формы, это легко реализуется с помощью тегов map и area.)

Из недостатков такой идеи можно выделить три:

  • немного увеличивается объем работы над сайтом, а также возникает необходимость использовать специальные программы для генерации тегов area;
  • при добавлении новых разделов mindmap придется дорисовывать, поэтому такое решение подходит, в основном, сайтам, структура которых особо не меняется;
  • неудобство для пользователей, заходящих с мобильных устройств с низким разрешением (но таковых можно отслеживать с помощью JavaScript и показывать им уменьшенную и упрощенную версию картинки).

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