LINUX.ORG.RU

Сообщения panter_dsd

 

С праздником, погроммисты

Всех коллег с 256 днем в году. Меньше багов, меньше лагов, больше денег и всего-всего.

 ,

panter_dsd
()

Python 3.7 релизнулся

И где новость на ЛОРе? На опеннете уже была, Гвидо утром в твиттере отписался.

Ждем ебилдов...

 

panter_dsd
()

DistfilesCleaner-0.3.0.0

Добавил новую фукнциональность - при запуске с ключом --not-installed теперь удаляются все distfiles для неустановленных пакетов.

Сделано для того, чтобы не хранить несколько версий одного пакета.

Скачать: ebuild, pypi

Вдруг, кто-то еще кроме меня пользуется. :)

 , ,

panter_dsd
()

Как корректно защищать секцию при асинхронной работе

Есть такой код:

async def foo():
  print(1)
  await one()
  print(2)
  await two()
  print(3)

await asyncio.wait([foo(), foo(), foo()])

Как добиться того, чтобы функция foo выполнялась строго последовательно одним «потоком»? То есть, в консоль должно вывести:

1
2
3
1
2
3
1
2
3

 , ,

panter_dsd
()

Проблемы с датой/временем при выборке из монги

Есть монга, в которую пишет сервис на go. В каждом документе есть поле -

m["ReceivedTimestamp"] = time.Now().UTC()
. Если делать выборку из монго шелла, то увидим «ReceivedTimestamp» : ISODate(«2018-01-19T07:06:43.453Z») Все правильно, пакет пришел в 10 часов по МСК, значит в utc было 7.

Делаю выборку из пайтона:

from pymongo import MongoClient
import datetime

r = next(collection.find(...).sort(...).limit(1))
dt: datetime.datetime = r['ReceivedTimestamp']
print(dt, dt.timestamp())

Выводит:

2018-01-19 07:06:43.453000 1516334803.453

Но 1516334803 это 4 утра в utc. Как правильно сконвертировать?

 , , , ,

panter_dsd
()

Поломался Gentoo при переезде на другой профиль

Переезжал на другой профиль, пересобирал sys-libs/glibc-2.26-r5 и при установке получил:

>>> needed    sym /lib32/libm.so.6
>>> needed    obj /lib32/libpthread-2.26.so
>>> needed    sym /lib32/libpthread.so.0
>>> needed    obj /lib32/librt-2.26.so
>>> needed    sym /lib32/librt.so.1
>>> Safely unmerging already-installed instance...
[Errno 80] Accessing a corrupted shared library: b'/bin/bash':
   /bin/bash -c /usr/lib/portage/python3.6/ebuild.sh clean
Traceback (most recent call last):
  File "/usr/lib64/python3.6/site-packages/portage/dbapi/vartree.py", line 2127, in unmerge
    preserve_paths=preserve_paths)
  File "/usr/lib64/python3.6/site-packages/portage/dbapi/vartree.py", line 1935, in _prune_plib_registry
    include_file=needed, preserve_paths=preserve_paths)
  File "/usr/lib64/python3.6/site-packages/portage/dbapi/vartree.py", line 3074, in _linkmap_rebuild
    self.vartree.dbapi._linkmap.rebuild(**kwargs)
  File "/usr/lib64/python3.6/site-packages/portage/util/_dyn_libs/LinkageMapELF.py", line 275, in rebuild
    proc = subprocess.Popen(args, stdout=subprocess.PIPE)
  File "/usr/lib64/python3.6/subprocess.py", line 709, in __init__
    restore_signals, start_new_session)
  File "/usr/lib64/python3.6/subprocess.py", line 1344, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
OSError: [Errno 80] Accessing a corrupted shared library: '/usr/bin/scanelf'

During handling of the above exception, another exception occurred:

Теперь ничего не запускается, говорит:

└─[127] <> uname
zsh: accessing a corrupted shared library: uname

Что делать?

 ,

panter_dsd
()

Поломался eix-sync

Утро не задалось - собака подняла в 6 утра, потом коты - то их покорми, то выпусти на улицу, то обратно запусти. Потом был октябрьский холодный ветер, толкучка в автобусе, пробка, опять ветер. И вот, прихожу на работу, наливаю кружку кофе, включаю ноутбук, радостно ввожу в консоли sudo eix-sync и....

/usr/bin/eix-sync: line 22: ReadFunctions: command not found
/usr/bin/eix-sync: line 24: ReadVar: command not found
/usr/bin/eix-sync: line 25: ReadVar: command not found
/usr/bin/eix-sync: line 26: ReadVar: command not found
/usr/bin/eix-sync: line 27: ReadVar: command not found
/usr/bin/eix-sync: line 28: local_portage_configroot: unbound variable

Вот что теперь делать? Даже работать не хочется, а задач уйма.

 

panter_dsd
()

Дневник действий

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

Существует подобное решение?

 

panter_dsd
()

Каст в нужный тип

Правильно ли делать так в пайтоне:

def eventFilter(self, obj: QObject, event: QEvent):
    if event.type() == QEvent.Drop:
         event: QDropEvent = event
         print(event.pos())

Делаю так чтобы PyCharm корректно автодополнял тип и не подчеркивал обращения к неизвестным полям. Может есть более ТРУ стиль?

 , , python-typing

panter_dsd
()

Создал ebuild, как его теперь добавить в дерево portage?

Написал ebuild, скопировал /usr/portage к себе в хомяк, добавил туда этот ebuild, прогнал repoman full и сделал repoman -dx commit. Что делать дальше? Как отправить свои изменения? Нагуглить не получается.

 , ,

panter_dsd
()

Не получается опубликовать приложение в pypi

Сделал по мануалу setup.py, зарегался на pypi.python.org, зааплоадил туда PKG_INFO, но когда делаю python setup.py register, то получаю в ответ:

running register
running check
Registering dfclean to https://upload.pypi.org/legacy/
Server response (500): <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:720)>

В чем проблема?

from distutils.core import setup

with open('README.md') as file:
    long_description = file.read()

setup(
    name='dfclean',
    version='0.0.0.1',
    packages=['dfclean'],
    url='https://gitlab.com/panter_dsd/distfilescleaner',
    license='GPLv3',
    author='PanteR',
    author_email='panter.dsd@gmail.com',
    description='Clean up old distfiles in Gentoo',
    long_description=long_description,
    classifiers=[
        'Development Status :: 3 - Alpha',
        'Programming Language :: Python :: 4.6',
    ]
)
cat ~/.pypirc
[distutils]
index-servers = pypi

[pypi]
repository=https://pypi.python.org/pypi
username=panter_dsd
password=*********

[server-login]
username:panter_dsd
password:*********

OS: gentoo

Python: 3.5, 3.6

Еще почему-то не могу twine установить через pip, выдает:

sudo pip install twine
ERROR: (Gentoo) Please run pip with the --user option to avoid breaking python-exec

Гугл не помог.

 ,

panter_dsd
()

Странная ошибка в асинхронном коде

class Request(object):
    def __init__(self, url: str, host: str, port: int, session: ClientSession, data: bytes,
                 ids_to_remove: list, callback):
        super().__init__()

        self.__url = url
        self.__host = host
        self.__port = port
        self.__session = session
        self.__data = data
        self.__ids_to_remove = ids_to_remove
        self.__callback = callback

    async def send(self):
        try:
            async with self.__session.post('http://{}:{}{}'.format(self.__host, self.__port, self.__url),
                                           data=self.__data) as r:

                if r.status == int(HTTPStatus.OK):
                    await self.__callback(self.__ids_to_remove)
        except Exception as e:
            print(e)

    def ids_to_remove(self):
        return self.__ids_to_remove


class ConnectionsPool(object):
    def __init__(self, host: str, port: int, max_connections: int, remove_ids_callback):
        super().__init__()

        self.__max_connections = max_connections

        self.__host = host
        self.__port = port
        self.__remove_ids_callback = remove_ids_callback

        self.__sending_futures = []
        self.__session = ClientSession(connector=TCPConnector(verify_ssl=False, limit=max_connections))

    async def send(self, url: str, data: bytes, ids_to_remove: List):
        if len(self.__sending_futures) > self.__max_connections:
            await asyncio.wait(self.__sending_futures, return_when=asyncio.FIRST_COMPLETED)

        request = Request(url, self.__host, self.__port, self.__session, data, ids_to_remove,
                          self.__remove_ids_callback)
        future = asyncio.ensure_future(request.send())
        future.request = request
        future.add_done_callback(self.future_done)
        self.__sending_futures.append(future)

    def future_done(self, future):
        self.__sending_futures.remove(future)

    def ids_to_remove(self):
        result = []
        for f in self.__sending_futures:
            result += f.request.ids_to_remove()
        return result
root: 'Task' object has no attribute 'ids_to_remove' (abstract_retranslator.py:31)
Traceback (most recent call last):
  File "/srv/backend/common/retranslation/abstract_retranslator.py", line 29, in retranslate
    await self._retranslate()
  File "/srv/backend/common/retranslation/http_retranslator.py", line 135, in _retranslate
    async for event in self.events(connections_pool.ids_to_remove()):
  File "/srv/backend/common/retranslation/http_retranslator.py", line 70, in ids_to_remove
    result += f.request.ids_to_remove()
AttributeError: 'Task' object has no attribute 'ids_to_remove'

Как f.request может стать Task? Или я неправильно готовлю асинхронный код на Пайтоне?

python 3.5

 ,

panter_dsd
()

Как быстро кидать много http запросов асинхронно?

Сейчас вот такой код используется:

from aiohttp import ClientSession

async def post(semaphore: asyncio.Semaphore, session: ClientSession, url: str, data: str):
    async with semaphore:
        try:
            async with session.post(url, data=data) as r:
                response_data = await r.read()

                class Response(object):
                    def __init__(self, status_code, text):
                        self.status_code = status_code
                        self.text = text

                return Response(r.status, response_data.decode('utf-8'))
        except Exception as e:
            print(e)
            return None


...................................
async with ClientSession() as session:
    semaphore = asyncio.Semaphore(256)
    coros = [post(semaphore, session, r[0], r[1]) for r in requests]
    requests = await asyncio.gather(*coros)

Но он показывает плохие результаты. Как можно ускорить и правильно ли я вообще делаю? Мне надо отправлять http запросы на сервер, но не более, чем 256 одновременно.

 , , ,

panter_dsd
()

Не получается отдать видео файл в виде partial content

Всем трям. Пытаюсь на торнадо научиться отдавать видео файл. Проверяю в хроме. Если отдаю файл целиком, то все работает, но браузер кидает мне 2 реквеста, желая работать по технологии partial content https://ru.wikipedia.org/wiki/HTTP#.D0.94.D0.BE.D0...BA.D0.B0.D1.87.D0.B8.D0....

Почитал, запилил реализацию у себя, но браузер кидает теперь 2-3 запроса и видео не показывает. Вот кот http://pastebin.com/DvsPmevc

В чем может быть проблема?

Если надо, могу скопипастить реквест/респонз.

 , ,

panter_dsd
()

Вписка с 6 на 7 января

Кто сможет приютить красноглазого программера-гентушника на одну ночь в МСК? Еду встретиться с потенциальным заказчиком. Думал, что остановлюсь у одногруппника, но он, скотина такая, пошел в запой по всей России. Хостелы не рассматриваю, ибо с ипотекой и тремя кредитами денег немного не хватает. Можно и в аэропорту заночевать, но получается сутки, которые можно потратить на общение и бухло (или работу за ноутом), пропадают. В этих ваших МСКах был всего 2 раза: один раз ребенком, второй раз пьяным на своей свадьбе, поэтому на местности не ориентируюсь. Прошел Питер, так что с метро знаком. Всякие Мтыщи не предлагать, как магнит притягиваю гопоту. Прибывать и убывать буду самолетами. Если есть мелкие спиногрызы, тоже не нужно, неделю назад только отошел от ОРВИ, не хочу заразить (у самого 4-х летний).

 вписка, ,

panter_dsd
()

Внезапно отключился 14 стандарт

Проект не трогал, в CMakeLists.txt:

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -O2 -Wall -Wextra -pedantic")

Вчера собиралось, сегодня не собирается:

error: ‘make_unique’ is not a member of ‘std’
  internalData_ = std::make_unique<InternalData> ();

Причем код 11 стандарта работает, а 14 нет. __cplusplus имеет значение 201103L, а должен быть больше. cmake не обновлял. Единственное, что обновлялось - Qt.

GCC:

gcc-config -l
 [1] x86_64-pc-linux-gnu-5.4.0 *

Пробовал выставить -std=c++17 - не работает.

Отдельно взятый пример, скомпиленный g++ -std=c++14 main.cpp компилится, отсюда вывод, что дело таки в cmake.

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

 , ,

panter_dsd
()

Передать параметры в docker контейнер при запуске

Засовываю в докер свою прогу, последняя строка Dockerfile

CMD /path/to/prog --config config.ini --name {NAME}

Мне нужно запустить несколько инстансов этого контейнера, но с разными {NAME}, как это правильно сделать? Смотрел ARG и ENV, но они дейстуют на build, а как правильно с run это делать?

 

panter_dsd
()

Как застримить видео по http

Встала задача стримить видео по http. На входе есть поток изображений в jpeg. Сейчас реализовал через mjpeg, но канал не выдерживает, получается по 6 Мб/с. Решение либо сильнее сжимать, но тогда качество потеряется, либо использовать что-то другое. Вроде, h.264 применяют, но что-то не смог нагуглить реализации на c++.

Кто сталкивался и может помочь?

 , , ,

panter_dsd
()

Давно это лурку разбанили?

Сегодня случайно узнал, что лурка доступна не только через тор. Это когда ее успели разбанить и за что?

 

panter_dsd
()

Черный экран при запуске memtest86+

Установил memtest86+, обновил grub. При перезапуске в меню появился пункт memtest, при выборе которого виден лишь черный экран. Если нажать Esc, происходит перезагрузка. ЧЯДНТ? Ноутбук ASUS, i5, встроенная видюха.

 ,

panter_dsd
()

RSS подписка на новые темы