суббота, 28 ноября 2015 г.

Проблемы с вертикальной синхронизацией в Ubuntu

В Ubuntu испокон веков всех преследует проблема появления горизонтальных линий при просмотре видео или при скроллинге в бразуерах особенно на проприетарных драйверах Nvidia.
В связи с тем что проблема существует ипо сей день (и в Ubuntu 14.04) представляю простое решение сей проблемы:

суббота, 27 апреля 2013 г.

Установка Google Chrome в Ubuntu 13.04 Raring Ringtail

Следующий фейл на который я наткнулся настраивая свежеустановленную Ubuntu 13.04: при попытке установить пакет Google Chrome скаченный с официального сайта dpkg выдал мне следующее:


# dpkg -i google-chrome-stable_current_i386.deb
Выбор ранее не выбранного пакета google-chrome-stable.
(Чтение базы данных … на данный момент установлено 162428 файлов и каталогов.)
Распаковывается пакет google-chrome-stable (из файла google-chrome-stable_current_i386.deb) …
dpkg: зависимости пакетов не позволяют настроить пакет google-chrome-stable:
 google-chrome-stable зависит от libudev0 (>= 147), однако:
  Пакет libudev0 не установлен.

dpkg: ошибка при обработке параметра google-chrome-stable (--install):
 проблемы зависимостей — оставляем не настроенным
Обрабатываются триггеры для bamfdaemon …
Rebuilding /usr/share/applications/bamf-2.index...
Обрабатываются триггеры для desktop-file-utils …
Обрабатываются триггеры для gnome-menus …
Обрабатываются триггеры для man-db …
При обработке следующих пакетов произошли ошибки:
 google-chrome-stable

Причем apt-get -f install никак не решал проблемы. dpkg просто напросто сообщал о неразрешимой зависимости и предлагал удалить пакет google-chrome-stable. Гугление на просторах интернета помогло найти следующее решение:
После этого все установилось и завелось:
# dpkg -i libudev0_175-0ubuntu19_i386.deb
Выбор ранее не выбранного пакета libudev0:i386.
(Чтение базы данных … на данный момент установлено 162533 файла и каталога.)
Распаковывается пакет libudev0:i386 (из файла libudev0_175-0ubuntu19_i386.deb) …
Настраивается пакет libudev0:i386 (175-0ubuntu19) …
Обрабатываются триггеры для libc-bin …
ldconfig deferred processing now taking place

# dpkg -i google-chrome-stable_current_i386.deb
(Чтение базы данных … на данный момент установлено 162538 файлов и каталогов.)
Подготовка к замене пакета google-chrome-stable 26.0.1410.63-r192696 (используется файл google-chrome-stable_current_i386.deb) …
Распаковывается замена для пакета google-chrome-stable …
Настраивается пакет google-chrome-stable (26.0.1410.63-r192696) …
update-alternatives: используется /usr/bin/google-chrome для предоставления /usr/bin/x-www-browser (x-www-browser) в автоматический режим
update-alternatives: используется /usr/bin/google-chrome для предоставления /usr/bin/gnome-www-browser (gnome-www-browser) в автоматический режим
Обрабатываются триггеры для bamfdaemon …
Rebuilding /usr/share/applications/bamf-2.index...
Обрабатываются триггеры для desktop-file-utils …
Обрабатываются триггеры для gnome-menus …
Обрабатываются триггеры для man-db …

Возвращаем системный трей в Ubuntu 13.04 Raring Ringtail

Сегодня решил поставить Ubuntu 13.04 и полюбоваться что же изменилось с версии 12.04. Все в принципе осталось на своих местах, добавили плюшек в Dash, подправили иконки, переработали Nautilus. В общем-то на первый взгляд все хорошо, Ubuntu верной дорогой идет к обычным пользователям, все упрощается. Но! Мы то с вами не обычные пользователи, а очень даже продвинутые! ;) Нам подавай все и вся! Естественно очередные правки убунтовских разработчиков не могли не коснуться такой вещи как "системный трей".
Те кто сталкивался с Unity наверняка знают что по умолчанию системный трей отключен и такие приложения как: keepassx, clip2net, opera и остальные не будут показывать себя на панели. В Ubuntu 12.04 это решалось командой:

# gsettings set com.canonical.Unity.Panel systray-whitelist "['all']"

И трей волшебный образом возвращался на место. В 13.04 данная команда выдаст ошибку. Разработчики полностью выпилили эту полезную фичу. Порыскав по интернету наткнулся на багрепорт негодования по этому поводу: https://bugs.launchpad.net/ayatana-design/+bug/974480
Там я нашел решения от товарища Максима Лопарева, за что ему огромное спасибо! Все действия сводятся к установке пропатченного Unity из этого ppa: https://launchpad.net/~timekiller/+archive/unity-systrayfix

# add-apt-repository ppa:timekiller/unity-systrayfix
# apt-get update && apt-get upgrade

Обновляем пакет unity, разлогиниваемся, заходим и возвращаем трей:

# gsettings set com.canonical.Unity.Panel systray-whitelist "['all']"

Не знаю что курят и чем думают разработчики Ubuntu, но такие обновления честно говоря не очень радуют.

Подключение к Wi-Fi точке доступа через прокси

Привет всем! Понадобилось тут на днях настроить сеть вот таким образом
Почему именно такая конфигурация спросите вы? Почему нельзя сразу подключиться к Wi-Fi AP (Wi-Fi Access Point) без использования "proxy laptop"? Отвечаю:

  1. Появился свободный ноут, плюс я стал обладателем мощного Wi-Fi адаптера TP-LINK TL-WN7200ND, захотелось напрячь их обоих :)
  2. Получить возможность гибкого управления трафиком.
  3. Увеличить область действия Wi-Fi сигнала и получить возможность подключаться к тем точкам доступа, которые недосягаемы для машины "laptop1".
  4. Ну и конечно же, просто спортивный интерес. Знание - сила! ;)
Порыскав по инету я не нашел полноценный мануал как настроить такую конфигурацию. Итак, преступим. Что нам понадобится для работы данной конфигурации:

  • ОСь. Я выбрал Ubuntu 10.04 LTS; 
  • hostapd. Демон создающий программную точку доступа с поддержкой WPA/WPA2; 
  • DHCP-сервер;
  • squid. Собственно сам прокси.
Начнем с hostapd. В репах 10.04 находится версия 0.6. Сразу скажу, что нам понадобится версия 0.7 или выше, т.к. 0.6 мне так и не удалось завести на своем железе. Добавляем ppa с версией 0.7:

# add-apt-repository ppa:aspeed/ppa
# apt-get update
# apt-get install hostapd

Теперь настраиваем точку доступа. Это минимальный конфиг с которым можно поднять AP:

# nano /etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=proxyap
hw_mode=g
channel=11
# Включить только WPA2 (1 - WPA, 2 - WPA2, 3 - WPA + WPA2)
wpa=2
wpa_passphrase=myappass

Теперь пробуем запустить:

# hostapd -d /etc/hostapd/hostapd.conf

Если в выводе есть строка:

wlan0: Setup of interface done.

Значит AP поднялась. Пробуем сканировать эфир с другой машины и видим нашу точку доступа "proxyap". Быстро просканировать можно командой:

# iwlist wlan0 scan | grep 'proxyap'

Теперь необходимо запустить DHCP-сервер для автоматического назначения IP-адресов клиентам нашей AP. Ставим его:

# apt-get install dhcp3-server

Теперь отредактируем и раскомментим секцию "subnet" в dhcpd.conf:

# nano /etc/dhcp3/dhcpd.conf
subnet 10.10.0.0 netmask 255.255.255.0 {
 option routers 10.10.0.1;
 option domain-name-servers 8.8.8.8;
 range 10.10.0.25 10.10.0.50;
 interface wlan0;
}

Мы создаем подсеть 10.10.0.x и разрешаем раздать клиентам до 25 IP-шников.
Теперь редактируем /etc/default/dhcp3-server:

# nano /etc/default/dhcp3-server
INTERFACES="wlan0"

Теперь сконфигурируем нашу сеть:

# ifconfig wlan0 down
# ifconfig wlan0 10.10.0.1 netmask 255.255.255.0 up
# ifconfig wlan0 up

Можно запускать DHCP и hostap:

# service dhcp3-server start
# service hostapd start

Проверим все ли запустилось:

# ps aux | egrep '(hostap|dhcpd)' | grep -v grep

Пробуем подключиться к точке доступа, вводим пасс, ждем пока назначится IP. После подключения убедимся что IP назначился и мы видим прокси-ноут. Эти действия делаем на "laptop1":

# ifconfig wlan0
wlan0 Link encap:Ethernet HWaddr 70:f3:95:e4:53:87
inet addr:10.10.0.25 Bcast:10.10.0.255 Mask:255.255.255.0
inet6 addr: fe80::72f3:95ff:fee4:5387/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:137215 errors:0 dropped:0 overruns:0 frame:0
TX packets:139973 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:129062378 (129.0 MB) TX bytes:41828862 (41.8 MB)

# ping 10.10.0.1
PING 10.10.0.1 (10.10.0.1) 56(84) bytes of data.
64 bytes from 10.10.0.1: icmp_req=1 ttl=64 time=1.09 ms
64 bytes from 10.10.0.1: icmp_req=2 ttl=64 time=1.05 ms
64 bytes from 10.10.0.1: icmp_req=3 ttl=64 time=1.04 ms
64 bytes from 10.10.0.1: icmp_req=4 ttl=64 time=1.08 ms

Теперь завершающий шаг. Установка и настройка прокси-сервера:

# apt-get install squid
# nano /etc/squid/squid.conf

Раскомментируем эти строки:

http_port 3128 transparent # в конце обязательно добавляем 'transparent'
cache_dir ufs /var/spool/squid 100 16 256
acl localnet 10.10.0.0/24
http_access localnet
dns_nameservers 8.8.8.8 8.8.4.4

Остальное оставляем как есть. На данном этапе необходимо настроить сетевые правила и направить трафик приходящий в wlan0 на wlan1. Для этого добавим правила:

# iptables -t nat -A PREROUTING -i wlan0 -d ! 10.10.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 10.10.0.1:3128
# iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o wlan1 -j MASQUERADE

И не забываем включить IP Forwarding для включения проброса трафика на другую сетевуху:

# echo 1 > /proc/sys/net/ipv4/ip_forward

Вот и все. Для удобства пользования прокси-ноутом я убрал из автозагрузки все установленные нами демоны:

# update-rc.d dhcp3-server disable
# update-rc.d hostapd disable

И создал скрипт для поднятия dhcp+hostap+squid и настройки iptables:

#!/bin/sh
service squid stop
service hostapd stop
service dhcp3-server stop
ifconfig wlan0 down
ifconfig wlan0 10.10.0.1 netmask 255.255.255.0 up
ifconfig wlan0 up
echo 1 > /proc/sys/net/ipv4/ip_forward
service dhcp3-server start
service hostapd start
service squid start
iptables -t nat -F
iptables -t nat -A PREROUTING -i wlan0 -d ! 10.10.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 10.10.0.1:3128
iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o wlan1 -j MASQUERADE

The end.

Добавление мультиязычности в плагин scrollGallery для WordPress


Занимался тут на днях своим второстепенным проектом, и появилась необходимость добавить что-то наподобие "горизонтальной галереи". Вот такого плана (http://www.pikachoose.com/):


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

Для работы сайта с несколькими языками я использую плагины qTranslate и CodeStyling Localization. На этом месте я хочу немного подробнее остановиться и поделиться своими впечатлениями от работы плагинов обеспечивающих мультиязычность.

qTranslate

Данный плагин очень мощный, предлагает много фич для обеспечения мультиязычности. НО, имеет очень критический и очень утомляющий баг - проблема с дублированием\перемешиванием текста на разных языках (http://www.qianqin.de/qtranslate/forum/viewtopic.php?f=3&t=2841). Это просто ужас какой-то. Суть в том, что если у вас текст довольно большой и имеет "насыщенное" форматирование, то после сохранения поста и вновь зайдя в режим редактирования вы получите кашу в одном из языков, а в других возможно пусто (а может и нет), как повезет:



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

CodeStyling Localization

Обязательно(!!!) поставьте этот плагин, если захотите подправить переводы в различных плагинах, а также ядра WP. Он избавит вас от геморроя при ручном редактировании переводов (файлов *.mo и *.po) и использования стороннего софта. Единственный недостаток - периодические глюки при подгрузке переводов на определенном языке, особенно если там их очень много. Мне к примеру так и не удалось полностью просмотреть немецкий языковой файл WP.
Данный плагин сберег кучу времени и нервов при доработке мной перевода NextGEN Gallery на украинский.

Правим scrollGallery

В общем капли ненависти и добра я добавил. Займемся главным - адаптации scrollGallery к мультиязычности.

1. Переходим в редактор кода плагинов:

2. Ищем функцию

nggSGShow():function nggSGShow($sgconfig, $pictures = null, ...) {

3. Чуть ниже видим код:

$aux["title"] = stripslashes($picture->alttext); // $picture->alttext;
$aux["desc"] = $picture->description;

4. Меняем его на:

$aux["title"] = stripslashes(__(html_entity_decode($picture->alttext, ENT_NOQUOTES))); // $picture->alttext;
$aux["desc"] = __(html_entity_decode($picture->description, ENT_NOQUOTES));

Вот и все. Сохраняем.

Теперь при заполнении заголовка изображения или его описания, можно вводить qTranslate'овские шорткоды:



Пример можно посмотреть здесь: http://museum-gallery.org/, кликая по фоткам scrollGallery на разных языках.

HowTo: Конвертируем DjVu > PDF в Linux


Понадобилось тут переконвертировать книгу из DjVu в PDF для отправки ее в Amazon Kindle. Решение нашлось довольно быстро:

# apt-get install djvulibre-bin
$ djvups mybook.djvu mybook.ps
$ ps2pdf mybook.ps

CookieWebUser


Хочу представить общественности свой Yii компонент для управления пользовательской аутентификацией.

  • От стандартного CWebUser'а отличается тем, что для хранения инфы используются только куки (никакие серверные хранилища ($_SESSION, memcache и т.п.) не используются).
  • Все данные сохраняющиеся в куку запаковываются в JSON + Base64.
  • Для проверки подлинности куки используется контрольная сумма.
Использовал данный компонент в одном HighLoad-проекте. Жалоб не поступало :)

GitHub
https://github.com/andser/CookieWebUser