Инструменты пользователя

Инструменты сайта



// SSL на блоге

SSL Everywhere. С HTTP настроен редирект на HTTPS.

Сертификаты от Let's Encrypt, получение и обновление сертификатов через CertBot.

Работать будет с браузерами, которые умеют SNI, т.е. в пролёте древние Андроиды на 2.3.7, всякие IE6-IE8, HTTP клиенты в Java 6u45 и 7u25.

Первоначальный рейтинг C тюнился до A+ по следующим статьям:

Результат: https://www.ssllabs.com/ssltest/analyze.html?d=htrd.su&hideResults=on

Что пришлось менять и что поломалось:

  • Ссылки на банеры, в частности картинки пришлось утянуть себе, так как доступны только по HTTP
  • Воспользоваться миграционными тулами Disqus, что бы восстановить комментарии к статьям (URL Mapper, предварительно запросив текущий список и обработав его скриптом)
  • Счётчики G+ слетели. Как их чинить для новых страниц - хз.
  • Что ещё отвалилось. Иначе невозможно :)

// Перекличка

Пост ни о чём. Просто хочется узнать сколько людей читает этот блог :) Такая вот блажь накатила. Поэтому велкам в камменты: кто читает, кому что интересно, может какие-то пожелания и т.п.

// Небольшой редизайн сайта

Собственно основу можно заметить невооружённым глазом:

  • Убрана большая шапка
  • Убраны большие закруглённые углы

Менее заметные:

  • Большой логотип претерпел некоторый «ребрендинг» (этот логотип предлагается как картинка по умолчанию при репостинге в G+)
  • Сделаны миникопии логотипа под разные размеры, один из них выводится в верхней навигационной строке, другой используется как favicon (теперь видно, что там картинка, а не чёрная клякса, но чёткости так и не получилось добиться)
  • Возвратил стандартный поиск по сайту, потому как гугловский внезапно стал глючить и выдавать пустые ответы (при этом поисковые запросы типа «site:htrd.su ЗАПРОС» работают исправно), разбираться лень, т.к. сам не веб-разработчик и тратить на это время просто жалко (на крайний случай: https://www.google.ru/search?q=site%3Ahtrd.su). Кроме того, это несколько ускорило загрузку страницы.
  • Небольшая косметика правой колонки: убрано лишнее, подкорректированы размеры шрифтов
  • Немного откорректированы шрифты заголовков

// BlogTNG и SQLite3

Как писал в прошлом сообщении в PHP 5.4.x нет SQLite2, есть поддержка только SQLite3. Пришлось немного напрячься и сделать поддержку оного в BlogTNG, дабы не впадать в уныние.

Подкатом подробности.

// Test

Первый тестовый пост после обновления PHP с 5.3.10 на 5.4.3 и отказа BlogTNG.

Причина: BlogTNG использует SQLite2, который выкинули из PHP 5.4.0.

// Свой домен и динамический DNS

Как писал в позапрошлой заметке - у блога новый домен. Собственно сразу стал вопрос - а как его использовать с моим-то динамическим белым IP адресом?

hatred.homelinux.net - предоставлен DynDNS.com, вот только незадача - они сделали чуть менее, чем всё у себя платным, даже если сейчас я освобожу этот хост - обратно в бесплатном аккаунте я его не выберу.

Именно поэтому в качестве DNS хостера и динамического DNS был выбран http://dnspark.net

Как делегировать туда свой домен, что делать на nic.ru или у других регистраторов - это за пределами этой статьи, в конце концов, там всё достаточно очевидно, если нет - в комментарии с вопросами :)

Но и тут имеем ложку дегтя (не говорю что в бесплатном аккаунте можно сделать только 10 DNS записей и нельзя задать wildcard *): ddclient распоследней версии работает со старым API, который постоянно пытается сбросить твой адрес в 127.0.0.1. Есть багрепорт, там же есть патчик, либой мой вариант:

dnspark-api-fix.path
--- ddclient.orig	2012-03-27 10:07:44.000000000 +1100
+++ ddclient	2012-03-27 10:20:46.000000000 +1100
@@ -3257,12 +3257,13 @@
 	info("setting IP address to %s for %s", $ip, $hosts);
 	verbose("UPDATE:","updating %s", $hosts);
 
-	#'http://www.dnspark.com:80/visitors/update.html?myip=10.20.30.40&hostname=test.burry.ca'
+	#old: 'http://www.dnspark.com:80/visitors/update.html?myip=10.20.30.40&hostname=test.burry.ca'
+	#new: 'https://www.dnspark.net:443/api/dynamic/update.php?hostname=my.hostname&ip=1.2.3.4'
 
 	my $url;
-	$url   = "http://$config{$h}{'server'}/visitors/update.html";
+	$url   = "https://$config{$h}{'server'}/api/dynamic/update.php";
 	$url  .= "?hostname=$hosts";
-	$url  .= "&myip=";
+	$url  .= "&ip=";
 	$url  .= $ip            if $ip;
 
 	if ($config{$h}{'mx'}) {
@@ -3293,7 +3294,7 @@
 		my $h = pop @hosts;
 
 		$config{$h}{'status'} = $status;
-		if ($status eq 'ok') {
+		if (($status eq 'ok') || ($status eq 'nochange')) {
 		    $config{$h}{'ip'}     = $ip;
 		    $config{$h}{'mtime'}  = $now;
 		    success("updating %s: %s: IP address set to %s", $h, $status, $ip);

Но тут появляется и вторая ложка дегтя: при обращении по этому юрлу часто имеем ошибку 500 сервера. Продакшн. Ога :)

Решил проблему своим скриптом, который засунул в cron выполняться каждые 5 минут, плюс он, в случае ошибки HTTP пытается повторить запрос несколько раз, часто это помогает с обновлением:

dnspark-update.sh
#!/bin/sh
 
host=YOUR_HOST_NAME_TO_UPDATE
# переменная dns хранит сервер, при помощи которого резолвится доменное имя вашего хоста, что понять - поменялось оно или нет
# можно оставить пустым, тогда будет использоваться сервер указанный в /etc/resolv.conf
#dns=
dns=8.8.8.8
 
# пока используется получение IP адреса только с интерфейса
use=if
if=ppp999
#use=web
 
# Логин и пароль для обновления DDNS (в случае dnspark.com логин к аккаунту и логин для обновления записей - разные сущности, второй заводится в админке)
login=DDNS_UPDATE_LOGIN
password=DDNS_UPDATE_PASSWORD
 
# вроде как не нужно уже :)
libdir=/var/lib/dnspark
prev_file=$libdir/prev
prev_ip=`cat $prev_file`
 
get_ip_if()
{
    ifconfig $if | grep inet | awk '{print($2)}'
}
 
get_ip_web()
{
    # TODO: задел на будушее
    false
}
 
get_prev_ip()
{
    host $host $dns | grep "^$host" | grep 'has address' | awk '{print($4)}'
}
 
prev_ip=`eval get_prev_ip`
current_ip=`eval "get_ip_$use"`
 
# Обновляем
if [ "$prev_ip" != "$current_ip" ]; then
    echo "Prev:    " $prev_ip
    echo "Current: " $current_ip
    echo "Updating..."
    eval "curl --retry 10 'https://$login:$password@www.dnspark.net/api/dynamic/update.php?hostname=$host&ip=$current_ip'"
fi

Ссылки

// DokuWiki, BlogTNG, плагин googleplusone и доработка шаблона

Что бы при использовании плагина googleplusone совместно с BlogTNG при попытке «поделиться» постом в Google+ вставлялся не абы какой текст, а то, что вам нужно, следует внести некоторые модификации в используемый вами шаблон.

// Поиск от Google

Добавил поиск от Google, а то встроенный в DokuWiki не всегда отрабатывает должным образом, а, судя по логам, робот гугла почти не покидает мой сайт :)

Для поиска сделал кастомный: http://www.google.com/cse/. С рекламой даётся бесплатно.

Что бы разделить запрос и результаты, пользовался этим хинтом: http://googleajaxsearchapi.blogspot.com/2010/03/search-form-and-results-on-two.html

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

// DokuWiki, blog и include плагины

Коротко: include плагин некорректно закрывает <div> если задана опция отображать только первую секцию, в результате может поехать… Ну сами догадайтесь.

Исправление, подразумевается, что мы в директории plugins:

  1. открыть include/helper.php
  2. найти там функцию _get_firstsec(&$ins, $page)
  3. найти в ней строку
    $ins[] = array('section_close');
  4. заменить на:
    $ins[] = array('section_close', array());
  5. очистить кеш
  6. радоваться :)

Вот так выглядело до исправления:
http://img153.imageshack.us/img153/1839/screenshoot201005221900.png

Так после:
http://img232.imageshack.us/img232/1196/screenshoot201005222034.png

UPD: написал письмо разработчикам, отреагировали быстро, в git уже есть изменения :)