среда, 26 ноября 2014 г.

Немного о часовых поясах в Python 2.7

Началось всё с того, что я столкнулся с невозможностью сравнить абсолютное и относительное время в Python. PostreSQL возвращал абсолютное, а datetime.now() относительное. Про разницу очень хорошо расписано здесь:
http://asvetlov.blogspot.ru/2011/02/date-and-time.html
Проблема оказалась лишь в том, что dateutil не в курсе последнего изменения часовых поясов. Смещения он берет из time.timezone, а оно в свою очередь возвращает -11 для моего часового пояса. Откуда он его берет пока не разобрался. Поставил pytz и tzlocal по рекомендации отсюда:
http://regebro.wordpress.com/2012/09/12/presenting-tzlocal-a-simple-way-to-get-your-local-timezone-for-pytz/
>>> from tzlocal import get_localzone
>>> from datetime import datetime
>>> print(datetime.now(get_localzone()))
2014-11-27 08:31:01.458893+10:00 

вторник, 11 ноября 2014 г.

Не работал squid_ldap_group

Настраивал связку Squid+AD. Negotiate авторизация завелась без проблем, захотелось, чтобы пользователи ходили по группам из LDAP. По мануалам настроил external acl, но оно не взлетело. В cache.log при запуске сыпалось:
2014/11/12 10:04:41| helperOpenServers: Starting 5/5 'squid_ldap_group' processes
2014/11/12 10:04:41| commBind: Cannot bind socket FD 31 to [::1]: (99) Cannot assign requested address
2014/11/12 10:04:41| commBind: Cannot bind socket FD 32 to [::1]: (99) Cannot assign requested address
2014/11/12 10:04:41| ipcCreate: Failed to create child FD.
2014/11/12 10:04:41| WARNING: Cannot run '/usr/lib/squid3/squid_ldap_group' process.
2014/11/12 10:04:41| commBind: Cannot bind socket FD 34 to [::1]: (99) Cannot assign requested address
2014/11/12 10:04:41| commBind: Cannot bind socket FD 35 to [::1]: (99) Cannot assign requested address
2014/11/12 10:04:41| ipcCreate: Failed to create child FD.
2014/11/12 10:04:41| WARNING: Cannot run '/usr/lib/squid3/squid_ldap_group' process.
2014/11/12 10:04:41| commBind: Cannot bind socket FD 37 to [::1]: (99) Cannot assign requested address
2014/11/12 10:04:41| commBind: Cannot bind socket FD 38 to [::1]: (99) Cannot assign requested address
2014/11/12 10:04:41| ipcCreate: Failed to create child FD.
2014/11/12 10:04:41| WARNING: Cannot run '/usr/lib/squid3/squid_ldap_group' process.
2014/11/12 10:04:41| commBind: Cannot bind socket FD 39 to [::1]: (99) Cannot assign requested address
2014/11/12 10:04:41| commBind: Cannot bind socket FD 40 to [::1]: (99) Cannot assign requested address
2014/11/12 10:04:41| ipcCreate: Failed to create child FD.
2014/11/12 10:04:41| WARNING: Cannot run '/usr/lib/squid3/squid_ldap_group' process.
2014/11/12 10:04:41| commBind: Cannot bind socket FD 41 to [::1]: (99) Cannot assign requested address
2014/11/12 10:04:41| commBind: Cannot bind socket FD 42 to [::1]: (99) Cannot assign requested address
2014/11/12 10:04:41| ipcCreate: Failed to create child FD.
2014/11/12 10:04:41| WARNING: Cannot run '/usr/lib/squid3/squid_ldap_group' process.
Вилы были в том, что squid был собран с поддержкой ipv6, и он пытался взаимодействовать со своими плагинами с помощью ipv6. Чтобы этого избежать, нужно явно указать, что необходимо использовать ipv4:
external_acl_type ldap_verify ipv4 %LOGIN /usr/lib/squid3/squid_lda...

суббота, 30 августа 2014 г.

Опять убил обновлениями...

В очередной раз решил обновить домашний калькулятор. Обновлений скопилось много. И, как обычно, что-то пошло не так. Windows после перезагрузки сказала:
Не удалось настроить обновления Windows. 
Выполняется отмена изменений
Очистка папки Downlods с обновлениями к желаемому эффекту не привела. В безопасном режиме оно все равно пыталось ставить обновления с тем же успехом. Помогла команда:
dism.exe /image:G:\ /cleanup-image /revertpendingactions
Запускал ее из консоли, полученной в режиме востановления. Диск G: - системный раздел с папкой Windows. Оно призадумалось, выдало ошибку, но в то же время статус: successfully. После этого Окошки нарисовали то же самое сообщение об отмене изменений, но процесс пошел и оно с горем пополам загрузилось.

четверг, 31 июля 2014 г.

Android 4.4 KitKat и Cisco VPN Client

На предыдущем телефоне были попытки цепляться к работе с телефона, но успехом они не увенчались. Либо в силу древнего андроида 4.0, либо в силу кривизны рук. Став обладателем девайса с KitKat решил посмотреть, что поменялось. И всё завелось без проблем. В Настройках, Беспроводные сети, Ещё, VPN:
Жмем в +:
Тип шифрования IPSEC Xauth PSK. Идентификатор группы - это название группы. Общий ключ = групповой ключ.
Логин и пароль он запросит при подключении, можно и запомнить их. Можно указать соединение как постоянное.

четверг, 22 мая 2014 г.

Про Ctrl+Z

(перевод поста отсюда)
Сочетание клавиш Control+Z используется, чтобы "усыпить" процесс, посылая ему сигнал SIGSTOP, который не может быть перехвачен программой. А вот сочетание клавиш Control+C используется для того, чтобы "прибить" процесс с помощью посыла процессу сигнала SIGINT, который может быть перехвачен выполняющейся программой, чтобы она могла корректно освободить ресурсы перед завершением или вообще проигнорировать его.
Если вы отправили процесс "в спячку", командная оболочка сообщит вам об этом примерно так:
[1]+  Stopped                 yes
Однако, если вы "убьёте" процесс, вы не увидите какого-либо подтверждения от командной оболочки. Для усыплённых процессов доступно несколько действий. Например, выполнив команду:
fg
для приостановленной программы, мы заставим ее продолжить выполнение, взаимодействую с текущей командной оболочкой.
Выполнив команду:
bg
для приостановленной программы, мы позволим ей продолжать выполняться в фоновом режиме (однако, вывод программы всё равно будет идти на терминал).
Если вы желаете прекратить выполнение приостановленной программы, вам не обязательно возобновлять ее выполнение с помощью команды fg. Достаточно команды:
kill %1
Если вы приостановили выполнение нескольких процессов, запустите команду:
jobs
Её вывод будет содержать список приостановленных процессов:
[1]-  Stopped                 pianobar
[2]+  Stopped                 yes
Используя %#, где # - это номер задачи (цифра в квадратных скобках в выводе jobs), вместе с командами bgfg, или kill, вы можете совершать действия над необходимым процессом.

воскресенье, 18 мая 2014 г.

Если HASP License Manager не раздает лицензии

Ковырялись мы тут с переводом сервера 1C на Linux. Почти все проблемные места были закрыты. Но тут снова перестали браться лицензии с ключа. Начали вспоминать, что могли сломать (до этого-то работало), перезапускать что попало, менять версии драйверов hasp - всё было без толку. И hasp прокинулся на виртуальную машину, и его драйвера стартанули, и соединение между менеджером лицензий и драйверами активна. А оказалось всё очень просто. При конфигурационном файле по-умолчанию клиент 1С ищет сервер лицензий broadcast-ом:
[NH_TCPIP]
;;NH_SERVER_ADDR = <Addr1>, <Addr2> ; IP addresses of all the NetHASP 
; License Managers you want to search.
; Unlimited addresses and multiple
; lines are possible.
; Possible address format examples:
;  IP address:      192.114.176.65
;  Local Hostname:  ftp.aladdin.co.il
;;NH_PORT_NUMBER = <Num> ; Set the TCP/IP port number. This is
; optional. The default number is 475.
;;NH_TCPIP_METHOD = TCP or UDP ; Send a TCP packet or UDP packet
; Default:  UDP
;;NH_USE_BROADCAST = Enabled or Disabled; Use TCPI/IP Broadcast mechanism.
; Default:  Enabled
Даже если указать конкретный NH_SERVER_ADDR. Он просто брал лицензию с соседнего сервера. Ну и в купе с тем, что сервер лицензий не обращается к ключу и не показывает его до первого обращения к нему от клиента, в AKS Monitor он (ключик) не отображается. Отключив широковещательный поиск сервера и указав IP-адрес необходимого нам, получаем желаемый результат. 

понедельник, 3 марта 2014 г.

417 Expectation Failed

На днях потребовалось научить одну .net-программулину работать через прокси. Быстренько были внесены изменения в интерфейс настроек, заполнено свойство Proxy объекта класса HttpWebRequest. Но тут что-то пошло не так. Страничка в Firefox открывалась, а вот при попытке выполнить запрос через софтину мы получали ответ от сервера 417 Expectation Failed. После прочтения материала и просмотра заголовков, отправляемых приложением, стало понятно, что объект HttpRequest при отправке POST-запроса автоматически добавляет заголовок Expect. А прокси-сервер Squid3 по умолчанию отвергает такие запросы с кодом ошибки 417:
#  TAG: ignore_expect_100       on|off
#       This option makes Squid ignore any Expect: 100-continue header present
#       in the request. RFC 2616 requires that Squid being unable to satisfy
#       the response expectation MUST return a 417 error.
#
#       Note: Enabling this is a HTTP protocol violation, but some clients may
#       not handle it well..
#Default:
#ignore_expect_100 off
Хотя правильнее отключить применение этого заголовка при работе через прокси:
         string postData = String.Format("lg={0}&pw={1}", login, pass);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(LOGIN_URL);
            request.Proxy = proxy;
            request.CookieContainer = new CookieContainer();
            request.CookieContainer.Add(cookie);
            request.Method = WebRequestMethods.Http.Post;
            request.AllowWriteStreamBuffering = true;
            request.ProtocolVersion = HttpVersion.Version11;
            request.AllowAutoRedirect = true;
            request.ContentType = "application/x-www-form-urlencoded";
            request.Timeout = REQTIMEOUT;
            request.ServicePoint.Expect100Continue = proxy == null;