?

Log in

Wed, Jan. 1st, 2020, 12:00 am
Вместо приветствия

Почему добавлять меня "в друзья" НЕ нужно:
1. я не обижаюсь на "невзаимность" (это ж не показатель отношения, а техническое средство)
2. я добавляю в свою ленту друзей чтобы читать (см. 1)
3. я почти ничего не буду писать (я видимо в душе куманец - считаю, что слушать/читать гораздо интереснее чем говорить)
Если хотите проявить свою приязнь - это лучше сделать текстуально, а не технически.

Thu, Jul. 16th, 2015, 03:59 pm
Chocolatey

Время от времени у всех нас возникает потребность в единых приёмах инсталляции программных пакетов для windows. А для некоторых людей важно ещё и управление этим процессом из командной строки. В других системах есть (стандартные или нет) репозитории, из которых можно устанавливать программы. В последнее время такие решения появились и для windows. Сегодня я хочу рассказать вам про один из таких репозиториев - Chocolatey.


Чтобы не путаться в расплывчатых значениях терминов, определимся со словарём на время этой статьи:


  • Менеджер пакетов = программа позволяющая использовать репозиторий пакетов - ставить/обновлять/удалять пакеты.


  • Репозиторий = регулярно обновляющийся список пакетов программ доступных для инсталляции.


  • Пакет = описание того, как ставить определённую версию программы.


  • Программа = объект инсталляции (а не выполняемый файл, как обычно).



Разделение пакета и программы очень важно, поскольку их авторы могут быть (и часто являются) разными людьми.


Плюсы (как специфичные для chocolatey, так и присущие самой идее):


  1. Возможность "заказать" инсталляцию нескольких пакетов сразу. Например, это полезно для написания сценария "заливки" новой машины.


  2. Возможность автоматического, полуавтоматического или ручного обновления установленных пакетов.


  3. Возможность управлять пакетами удалённо из консоли (например по ssh), без необходимости подключения с графическим интерфейсом (vnc, rdp и т.п.). Правда, лично я этого не проверял. Возможны проблемы с некоторыми пакетами, которые запускают графический инсталлятор (пусть и в автоматическом режиме).



Недостатки (как временные, так и идеологические):


  1. На данный момент нет проверки целостности устанавливаемых пакетов, если они загружаются из интернета. То есть в принципе такая возможность есть в планируемой версии, но поскольку она не базовая и не обязательная, авторы пакетов ей не пользуются и не будут, пока их не заставить. Это приводит сразу ко множеству других проблем:


    • Модифицирующее прокси может подсунуть хоть вирус, хоть keylogger.


    • Зачастую пакет устанавливает не ту версию программы которая прописана в его описании, а просто последнюю.



  2. Модерация списка пакетов пока в зачаточном состоянии:


    • Типов пакетов пока нет (.install и .portable - профанация идеи). Сравните хотя бы с категориями в репозитории gentoo.


    • Подтверждение выложенных пакетов происходит очень медленно - уже почти полгода висит обещание с этим что-нибудь сделать.


    • Нет механизма поддержки "поддержки" - многие пакеты заброшены авторами и отстают от последних версий программ на несколько лет.



  3. Деинсталляция в зачаточном состоянии.


  4. Поддержка настроек работы через прокси поддерживается не всеми пакетами.


  5. Если программу кто-то (автомат или пользователь) обновил, не используя chocolatey, тот “не узнает” об изменении версии и будет писать, что её нужно обновить.



Но на самом деле большинство из этих проблем - врождённые пороки windows, с которыми chocolatey борется по мере сил. Например только "стандартных" системных настроек proxy в системе не меньше трёх (IE, WinHttp и переменные среды типа http_proxy).


Особенности, которые стоит иметь в виду, используя chocolatey:


  1. Как правило система обновления самой программы не блокируется. К чему это приводит - см. выше. Рекомендуется заблокировать автоматическую загрузку новых версий самому и обновлять через chocolatey.


  2. В последнее время во многих пакетах используется забавная концепция - вместо добавления в переменную среды PATH всё новых и новых путей к выполняемым файлам пакета в основную "bin" директорию генерируется заглушка (тут это называется "shim"), которая вызывает сам выполняемый файл. Несмотря на очевидные недостатки (например, посмотрите сколько их создаётся для пакета sysinternals), этому есть серьёзное оправдание - windows сломается, когда длина этой переменной достигнет двух килобайт.


  3. Поскольку большинство пакетов запускает авторский инсталлятор, все его недостатки сохраняются - например, при обновлении ConEmu все процессы запущенные под ним будут убиты (прощайте, несохранённые файлы в редакторах Far'а).



Разработчики chocolatey обещают много новых возможностей ещё до версии 1.0, например, управление под-пакетами (вроде библиотек скриптовых языков - python, ruby, webpi, nodejs), но даже без этого менеджер пакетов - вещь полезная.

Thu, Jun. 4th, 2015, 10:55 pm
MozRepl

Итак, если ваш стиль работы подразумевает (почти) постоянно запущенный браузер, рано или поздно вам захочется что-нибудь в нём автоматизировать. Для многих вещей это можно сделать разными addon'ами, но нет в мире совершенства - если вам нужно передать в настройки браузера информацию "извне" вы можете не найти подходящего решения. Тут-то и приходит желание получить какой-нибудь интерфейс "удалённого" (в смысле IPC) управления браузером.

Сейчас я рассмотрю только один вариант такой автоматизации - расширение MozRepl для Firefox и родственных браузеров.

Способы использования

  1. Передать полный скрипт при подключении.
  2. Вставить в mozrepl определение сколь угодно сложной функции и вызывать при подключении её.
Примеры использования...Collapse )

Советы

  • Для защиты от попыток внешнего управления, а так же конфликта портов разных профилей/пользователей, советую изменить порт по умолчанию (4242) на какой-нибудь другой (разный для разных машин, пользователей и профилей). Однако для наглядности, во всех скриптах-примерах я использую именно порт по умолчанию - для запуска измените его.
  • Чтобы была возможность использовать такого рода автоматические скрипты, после изменения порта необходимо настроить авто-старт mozrepl (Menu->Tools->MozRepl->Activate on startup).
  • Изначально скрипты примеров предназначены для запуска под Cygwin bash на той же машине, где установлен и (возможно) запущен Firefox для Windows. Однако, их легко переписать на любой другой язык.
  • Имеет смысл, прежде чем пытаться управлять браузером через mozrepl, проверять, запущен ли браузер и если нет - делать что-нибудь другое, например непосредственно редактировать файлы настроек в директории профиля.

Ссылки

Wed, Apr. 22nd, 2015, 05:36 pm
xpra/rollapp

Давным давно освоил и всем советую программу screen, которая позволяет, работая с сервером в терминале (например по ssh/rsh или telnet) создать сессию (многооконную, что тоже ценно) от которой можно отсоединятся (в том числе аварийно - при падении сети или клиентского компа), а потом, присоединившись к серверу заново (возможно с другого клиента и по другому протоколу) "увидеть" эту сессию и то, что в ней за это время произошло.

Относительно недавно нашёл подобную вещь для графического интерфейса - Xpra. Отличие от VNC/RDP и подобных протоколов - то, что окна серверного приложения отображаются в отдельных окнах на клиенте. Ну и то, что синхронизация буфера обмена (clipboard), звука, иконок уведомлений (в смысле system tray) не требуют изощрений, но это можно было настроить и раньше, только тут всё это работает "из коробки".

Вскоре после нашёл занятный сайт - RollApp на котором можно запустить на их сервере приложение (даже браузер), а в окне браузера будет транслироваться изображение его окна. Проверка показала, что в качестве обёртки на серверной стороне работает как раз Xpra (хотя, очевидно там ещё несколько технологий - например, для контейнеров). К сожалению авторы убили проект начав просить деньги даже до того, как преодолели стадию "beta". Хуже того - они просят денег за возможность писать в хранилище (они позволяют подключать Google Drive, OneDrive, DropBox, Yandex Disk и ещё что-то), из-за чего большинство программ перестали работать - не могут записать временные файлы. Да и какой смысл в таком "тестировании", если там большинство программ - редакторы.

Wed, Jul. 31st, 2013, 05:05 am
Python: Особенности работы с multiprocessing

Черновые заметки по общению с модулем multiprocessing - возможно они станут ответами на чьи-нибудь вопросы.

1. Если у вас нормально работал отдельно код использующий Manager, но внезапно перестал работать после вставки в ваш проект, проверьте, не делаете ли вы manager.start() до того как сделать fork. Между прочим multiprocessing.Manager() возвращает уже стартованный multiprocessing.managers.SyncManager. Симптомы - ошибка "IOError: [Errno 32] Broken pipe".

2. Нельзя использовать mutable типы в качестве элементов других mutable типов используемых через Proxy manager'а, даже если "вложенный" mutable объект тоже обёрнут в Proxy. Например, следующая конструкция некорректна:

d = manager.dict()
d[1] = manager.list()

Приводит это к следующему:
a) Создаётся dict() в процессе manager'а и возвращается DictProxy.
b) Создаётся list() в процессе manager'а и возвращается ListProxy.
c) ListProxy передаётся в __setitem__ и после свёртывания-развёртывания в dict в процессе manager'а попадает просто list. Пока всё нормально.
d) Когда вы пытаетесь использовать d[1] вам из DictProxy.__getitem__ возвращается просто маршализированная копия списка, а не ListProxy.

NB: Оказывается, можно. зарегистрировав специальный тип в manager'е (без метода создания - create_method=False), и использовать этот тип в определении возвращаемого значения в методе объекта - проще всего, как _method_to_typeid_ в proxy. В качестве примера можно посмотреть PoolProxy._method_to_typeid_ и типы Iterator и AsyncResult.

Thu, Jan. 10th, 2013, 10:21 pm
Oracle на FreeBSD

Как, оказывается, известно всем, subj - жуткое извращение, но деваться некуда.

"Давайте жить дружно!"
Первый вариант - поставить /usr/ports/databases/linux-oracle-instantclient-*. Но у этого варианта есть большой недостаток - динамическая библиотека собранная под Linux не работает в процессе собранном под FreeBSD. Если нужно использовать какую-нибудь ещё стороннюю библиотеку (например mysql), придётся либо ставить версию этой библиотеки под Linux, либо разделять программу на два куска скомпилированные под разные архитектуры и общающиеся через какой-нибудь IPC. Обе идеи сомнительны.

"Старый друг, лучше новых двух."
Второй вариант - поставить /usr/ports/databases/oracle8-client. Там статическая библиотека которая может линковаться к бинарю без Linux-эмуляции (только нужно не забыть -lcompat). Но и тут есть неприятность - не поддерживаются новые функции. Например db change notification.

"Если бы губы Никанора Ивановича да приставить к носу Ивана Кузьмича..."
Хорошо было бы найти способ собрать по методу oracle8-client новый клиент. Для этого как минимум нужно понять как это было сделано.
1. Информация в ports ведёт на страницу скачивания http://samodelkin.net/~fjoe/oracle/
2. Поиск привёл в архивы http://www.frozenfido.ru/ru.unix.bsd/186342a627c1.html
Тут мы выяснили некоторые намётки метода и, главное, имя автора...
3. По имени/нику автора получилось найти несколько его контактов:
http://www.freebsd.org/doc/ru/books/handbook/book.html#pgpkey-fjoe
http://lib.udm.ru/lib/LINUXGUIDE/freebsd_handbook.html#PGPKEY-FJOE
https://www.facebook.com/samodelkin
http://fjoe.livejournal.com/profile?mode=full
4. Немного больше настойчивости пришлось применить при поиске "оригинала" - Oracle 8i client для Linux:
http://ftp.comp.hkbu.edu.hk/pub/oracle/linux/
5. Оказывается процесс хака описан в файле README.PORT, который ставится в /usr/local/oracle8-client. И таки это слегка модифицированный libclntst8.a от Linux-клиента. Тонкость в том, что статическая библиотека, по умолчанию, не ставится вместе с клиентом. Её нужно отдельно генерировать скрипто genclntst, который с instant client'ом не ставится.

Итак - нужно поставить полноценный (не instant) клиент под linux (с glibc 2.3), сгенерировать статическую библиотеку и извратить её скриптом от порта восьмёрки.

UPD: Окончание уже никогда не последует...

Fri, Dec. 14th, 2012, 06:56 pm
Обзор библиотек Python для работы с SNMP

Crosspost: https://docs.google.com/document/pub?id=1bVVnWh3V5d6V-THz6lWf1yAuzWAwhVZSYDJflSPOiSo

У всех найденных библиотек очень плохо с документацией.

netsnmpCollapse )pysnmpCollapse )libsnmpCollapse )

Другие

Источник: http://pypi.python.org/pypi?%3Aaction=search&term=snmp&submit=search

Есть ещё много библиотек на которые у меня не хватило дыхания. Возможно там и скрываются жемчужины проектирования и реализации, но исследование “неудачников” я отложу до следующего раза...

Mon, Feb. 27th, 2012, 06:46 pm
Модуль dbms_output для cx_Oracle

Написал тут простенький модуль для использования вместе с cx_Oracle для получения вывода через модуль dbms_output.


ПримерCollapse )


Ну и сам модуль dbms_output.pyCollapse )

Tue, Dec. 6th, 2011, 11:59 pm
Перепостите это число - 632305222316434

Оригинал взят у spichechka в Перепостите это число - 632305222316434
- если считаете, что результаты выборов фальсифицированы.

Поисковики позволят подсчитать сколько раз эта цифра появляется в Интернете - то есть сколько людей согласны с этим мнением. Текущие результаты "голосования" можно посмотреть здесь.

Просто поставьте его в любом месте у себя в блоге, ленте, сайте, где угодно.

10 most recent