26 июл. 2016 г.

Python и DBF

Собственно стояла задача подружить Python и dbf-файл.

#!/usr/bin/env python
# -*- coding: utf8 -*-

import dbf

table = dbf.Table("table1.dbf", codepage='cp866')
table.open('read-only')

print table

for i in table:
print i.f1, i.f3.encode('utf8')

table.close()


Получал множество сообщений вида:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 0: ordinal not in range(128)

Пробовал decode/encode и т.п., пока не залез в руководство и не нашел там фразу о codepage.

13 мая 2016 г.

Ubuntu. Уведомления. notify-send

notify-send - программа предназначенная для отправки уведомлений для пользователей системы.
В Сети куча "копипастных" примеров как реализовать, но слишком мало объяснений. Например не объясняется, что все интересующие нас иконки лежат в директории /usr/share/icons/elementary-xfce/ (у меня xubuntu). 
Соответственно, вместо стандартного notify-send "Заголовок" "Текст" -i gtk-info, который мне покажет "i" в синем круге, я могу писать notify-send "Заголовок" "Текст" -i [любая_иконка_из_указанной_выше_директории], разумеется, без расширения. Пример:
notify-send "Заголовок" "Текст" -i applications-3D
Путь до applications-3D/usr/share/icons/elementary-xfce/categories/48/applications-3D.png

Кстати, если пишем скрипт для оповещения из cron'а, то следует перед выполнением команды указать export DISPLAY=:0.0, для того, чтобы сообщение ушло на наш экран, а не в пустоту.

На Хабре говорят, что это плохой тон и надо определять его автоматом:
# get_display [USER] — Returns $DISPLAY of USER.
# If first param is omitted, then $LOGNAME will be used.
get_display () {
who \
| grep ${1:-$LOGNAME} \
| perl -ne 'if ( m!\(\:(\d+)\)$! ) {print ":$1.0\n"; $ok = 1; last} END {exit !$ok}'
}


4 февр. 2016 г.

На сайте нет атрибутов hreflang.

Наверное, каждый, кто мало-мальски пытается продвинуть свой сайт, сталкивался с этой проблемой. Делать эту операцию следует если есть в наличии, скажем русская и французская версия сайта. Как в моем случае с сайтом service43.fr и его русским зеркалом ru.service43.fr. Для полной радости нет толкового описания. Ну что же. Если гуглить по этой теме, то можно найти, что работает на ISO 3166-1 alpha-2. Тут есть информация как какая страна и язык сокращается согласно стандарту.

Из инструментов: Тег-генератор и проверка результатов.

В блок head  прописываем полученные в тег-генераторе данные на обеих страницах и только если они являются зеркалами друг друга и обязательно 2 ссылки:
<link rel="alternate" href="http://ru.service43.fr" hreflang="ru-fr" />
<link rel="alternate" href="http://service43.fr" hreflang="fr" />

Одна ссылка указывает сама на себя, вторая на сайт-зеркало. Из всего этого следует отметить 2 вещи:
1. работать не будет пока на сайте не указать себя и сайт-зеркало. В противном случае при проверке результатов будем получать одни и те же сообщения.
2. hreflang="ru-fr". ru - язык для аудитории сайта; fr - для какой страны ориентирован сайт. В данном случае для русскоязычных пользователей находящихся на территории франции. Если поменять на fr-ru, то будет для франкоязычных пользователей, которые на территории России.

* кстати, для бельгийцев и белорусов следует учитывать сноски в стандарте.