LINUX.ORG.RU

Сообщения helium

 

Перенос копирайта из проекта под gpl

Добрый вечер! Использую в своем проекте два файла исходников из чужого проекта под gpl, в readme которого есть копирайт с именем автора.

Теперь, при публикации своего проекта, я должен добавить автора в копирайт readme, или достаточно упоминания в конкретных файлах?

Спасибо.

 

helium
()

matplotlib неверные цвета для картинки Axes3D

Добрый день, необходим трехмерный график с одной плоскостью,покрытую изображением с картой. Когда использую такой код

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.cbook import get_sample_data
from matplotlib._png import read_png
import numpy as np

img = read_png("foo.png")

x, y = np.mgrid[0:img.shape[0], 0:img.shape[1]]

ax = plt.gca(projection='3d')
ax.plot_surface(x, y, np.sin(0.02*x)*np.sin(0.02*y), rstride=2, cstride=2,facecolors=img)
plt.show()
Результат отличный: http://meson.ad-l.ink/6qrkJWhP9/image.png

Но стоит использовать плоскость:ax.plot_surface(x, y, 1, rstride=2, cstride=2,facecolors=img) Цвета не не, просиходит замемнение: http://rgho.st/7W57HBX94/image.png

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

 

helium
()

Выбор структуры для docker проекта

День добрый! Разрабатываю систему с несколькими микросервисами и использую докер, который подкупил легким развертыванием. Но теперь не понимаю, как реализовать такую структуру:

docker-compose.yml
service1/
  - Dockerfile
service2/
  - Dockerfile
shared_src/
  - library
Хранить весь код в shared_src, в докерфайлах просто запускать разные скрипты через RUN или переносить весь код, относящийся к сервису в его папку?

Плюс, как добавить общий код к каждому контейнеру, ведь:

The <src> path must be inside the context of the build; you cannot COPY ../something /something, because the first step of a docker build is to send the context directory (and subdirectories) to the docker daemon.

 

helium
()

asyncio message queue

Ребята, понадобилась очередь сообщений и драйвер для работы с ней по PEP 492. Казалось бы, требований мало: 1) Стандартный интерфейс для очереди: push, get 2) Отсутствие направленности на working queue: никаких воркеров или таксов, просто обмен сообщениями. 3) Живой репозиторий.

Но не выходит найти решение подходящее по всем пунктам. Например, клиенты для rabbitmq тянут за собой логику с Consume и callback.

Ребята из мейлрушки рекомендуют использовать tarantool queue, но решение не выглядит живым.

Что посоветуете?

 

helium
()

Удаление из большой таблицы без потери constraints

Добрый день!

Мне необходимо удалить большую часть таблицы с четырьмя миллионами строк, delete from tbl where работает бесконечность, поэтому, по всей видимости, нужно использовать промежуточные таблицы. Ситуацию осложняют несколько других таблиц, c Foreign-key constraints: ON DELETE SET NULL. И это правило должно выполняться во время удаления.

Если делать

BEGIN;
CREATE TABLE tbl_new AS SELECT * FROM tbl where a is b;           
ALTER TABLE tbl RENAME TO tbl_old;
ALTER TABLE tbl_new RENAME TO tbl;
COMMIT;
drop table tbl_old cascade;
То для сохранения целостности, после переименования tbl в tbl_old postgress меняет и constraints, превращая ссылки в REFERENCES tbl_old(id)

Если делать

BEGIN;
CREATE TABLE tbl_tmp AS SELECT * FROM tbl where a is b          
TRUNCATE tbl;
INSERT INTO cart SELECT * FROM tbl_tmp;
COMMIT;
То pg не деает выполнить TRUNCATE из за ссылок, и предлагат сделать TRUNCATE CASCADE.

Как быть?

 ,

helium
()

Распаковка вложенных mongo полей

Добрый день!

Вопрос глуповат, но у меня есть коллекция вида

{
    "date" : 1456327297,
    "comments" : {
        "nodes" : [ 
            {"username" : "victor", "text": "foo"},
            {"username" : "vica", "text": "foo"},
            {"username" : "semen", "text": "foo"}
        ],
        "count" : 3
    }
}

И хочется выполнить find запрос в самой монге со следующим результатом:

{"date" : 1, "comment_usernames" : ["victor", "vica", "semen"]}

Подскажите, пожалуйста, что использовать.

 

helium
()

SSHFS в Django продакшене

Добрый день!

Переносим медиафайлы на сервер, отличный от основного, с возможностью загружать на него новые файлы. Самым простым вариантом видится просто смонтировать папку с media-сервера на prod-server через SSHFS.

Нормальная ли это практика, что можете посоветовать?

 ,

helium
()

sqlalchemy неадекватно отрабатывает запрос

Добрый день!

Я работаю со следующей sqlalchemy моделью:

class CartProduct(Base):
    cart_id = Column(
                Integer,
                ForeignKey('cart.id', ondelete='CASCADE'))
    store_id = Column(
                Integer,
                ForeignKey('store.id', ondelete='SETNULL'), nullable=True)
    cart = relationship('Cart', backref=backref('products'))

Проблема в том, что в поле cart.products значения появляются и исчезают в разных точках программы.

Пусть у нас есть закоммиченый CartProduct, тогда:

  • Когда store_id != None, он точно появится в сart.products
  • Когда store_id == None, может как появится, так и не появиться в cart.products

В чем может быть дело?

 

helium
()

Вложенные virtualenv

Ребята, ситуация такая. На данный момент используем в проекте несколько virtualenv, в окружении которых запускаются bash скрипты, которые запускают python скрипты. Мне необходимо добавить python скрипт, работающий с новой версией сторонней библиотеки, без изменения текущего окружения. Казалось, что достаточно создать дополнительный virtualenv, и запускать в виде

venv/bin/python some_script.py

Но я не уверен, что это будет работать нормально. Как быть? Может переопределить в самом python скрипте path для конкретной библиотеки?

 

helium
()

Оптимизация вычисления большой матрицы расстояний

Добрый вечер! У меня есть объемный массив (около 30 тысяч элементов), и метрика между любыми элементами. Мне необходимо посчитать матрицу расстояний (достаточно треугольной), даже если это займет много памяти.

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

distance_matrix = np.ndarray((len(foo),len(foo)))
for i, bar1 in enumerate(foo):
    for j, bar2 in enumerate(foo[i+1:]):
        distance_matrix[i,j] = hight_level_python_function(bar1, bar2)

И работает он очень долго, даже если разбивать матрицу на несколько, и считать каждую в отдельном процессе. На низкоуровневых языках переписать метрику необоснованно трудозатратно. Кеш на hight_level_python_function уже есть.

Как быть?

 

helium
()

git squash только моих изменений

Добрый день!

Я разрабатывал в одной ветке, в которую делал git pull и git commit. И теперь мне необходимо объеденить все изменения, которые внес именно я, в один коммит.

$ git log
commit a341a8..
Merge: 95d89a0 1101a10
Author: Me
Date:   Sat Jul 9 10:46:42 2016 +0500

    Merge branch 'master' of ssh://stash.fi into my_branch

commit 95d89..
Author: Me
Date:   Sat Jul 9 10:46:02 2016 +0500

    some of my changes

commit 1101a10..
Author: Other developer
Date:   Fri Jul 8 19:22:11 2016 +0500

    refs #noissue Fobarbar

commit d95a3..
Author: Me
Date:   Fri Jul 8 17:04:35 2016 +0500

    another changes

Если я выполню

git rebase -i HEAD~3
, то и коммит a341a8 (с merge master ветки) окажется в Changes to be committed, другими словами, и чужие изменения попадут в объединенный коммит.

Как быть?

 

helium
()

Выбор алгоритма машинного обучения

Добрый день!

Мне нужно в кратчайшие сроки решить задачу классификации на таких данных:

1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 8
1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 2

Все атрибуты бинарны.

Не вдаваясь в тонкости машинного обучения, какой посоветуете классификатор из коробки sklearn'а?

Спасибо.

 

helium
()

Real-time чтение stdout субпроцесса с таймаутом

Добрый вечер!

В данный момент использую следующий код:

p = Popen(cmd,stdout=PIPE,stderr=PIPE)
try:
    outs, errs = p.communicate(timeout=100)
except TimeoutExpired:
    pass     

Он работает замечательно, но stdout и stderr возвращаются только после завершения процесса. Сейчас возникла потребность в выводе промежуточных значений c такой же функциональностью, а предложенные варианты чтения не содержат поддержки таймаутов.

Как быть?

 ,

helium
()

nginx-gunicorn-django не возвращают static

Добрый день! Который час бьюсь с проблемой, варианты решения иссякли. Есть конфиг nginx

upstream hello_app_server {
  server unix:/webapps/app/run/gunicorn.sock fail_timeout=0;
}

server {

    listen   8001;
    server_name blabla.com;

    client_max_body_size 4G;

    access_log /webapps/app/logs/nginx-access.log;
    error_log /webapps/app/logs/nginx-error.log;
 
    location /static/ {
        alias   /webapps/app/prototype/staticfiles/;
    }
    location /media/ {
        alias   /webapps/app/prototype/media/;
    }


    location / {

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

     
        if (!-f $request_filename) {
            proxy_pass http://hello_app_server;
            break;
        }
    }

}

И settings.py приложения

STATIC_ROOT = '/webapps/app/prototype/staticfiles/'
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)
Collectstatic сделан,
$ ls /webapps/app/prototype/staticfiles/
admin  css  djcelery  js  rest_framework
Любые реквесты на blabla.com:8001/static/ возвращают 404. В чем может быть дело?

 ,

helium
()

Передача данных в docker container

Доброго времени суток.

Вопрос наверняка глупейший. У меня есть docker container с установленным ffmpeg внутри, и из моего приложения ему надо передать бинарные данные на вход (видео). Сейчас я просто вызываю процесс docker run, и меняюсь данными через стандартные std пайпы.

Как все провернуть по-хорошему?

Спасибо

 ,

helium
()

FFmpeg глитч стрима

Добрый день, мне нужно обработать видео 'на лету' питон скриптом, для этого собираюсь использовать такую связку:

ffmpeg -f image2pipe -| script.py | ffmpeg -f rawvideo -i -

Почему направляя поток таким образом, я получаю видео с глитчем на выходе?

ffmpeg -i in.mp4 -f image2pipe -pix_fmt rgb24 -vcodec rawvideo - | 
ffmpeg -f rawvideo -vcodec rawvideo -s 1980x1080 -pix_fmt rgb24 -r 24 -i - -an out.avi

Спасибо!

 , ,

helium
()

Cнова преобразование Фурье - откуда магия?

День добрый, уже был пост о понимании fft, вот он:

Понимание преобразования Фурье

Все работает, частоты находятся. Но в процессе работы обнаружилась одна интересная особенность, о которой я и хочу спросить.

Пусть есть поток steam, который возвращает 512 целых чисел с частотой 44100

CHUNK = 512
RATE = 44100
freqs=np.fft.fftfreq(CHUNK)
while True:
    data = stream.read(CHUNK)
    data=struct.unpack('%dh'%CHUNK, data)
    w = np.fft.fft(data)
    amp=np.array([np.absolute(x) for x in w])
    idx=np.argmax(amp)
    max_freq=freqs[idx]
    freq_in_hertz=abs(max_freq*RATE)
    print(freq_in_hertz)

Полный код

http://pastebin.com/e091BBc7

Для перевода частоты в герцы мы умножаем частоты, которые вернула fft на частоту дискретизации. Но такой подход несет в себе очевидные минусы, точность хромает. Теперь будем считывать по 4 чанка за раз

CHUNK = 512
RATE = 44100
num_chunks=4
freqs=np.fft.fftfreq(CHUNK*num_chunks)
while True:
    data=list(itertools.chain.from_iterable(struct.unpack('%dh'% CHUNK, stream.read(CHUNK)) for _ in range(num_chunks)))
    after_fft=np.fft.fft(data)
    amp=np.array([np.absolute(x) for x in after_fft])
    idx=np.argmax(amp)
    #print(idx)
    max_freq=freqs[idx]
    freq_in_hertz=abs(max_freq*RATE)
    print (freq_in_hertz)

Все работает, но когда мы переводим в герцы,то просто снова умножаем на частоту дискретизации. Но это же бред, для fft она должна быть в 4 раза меньше,ведь мы кормим ей по 4 чанка за раз. Плюс на вычисление всей этой ерунды время тратится, но как то работает

Почему?

 ,

helium
()

Понимание преобразования Фурье

Привет, нужно получить спектр частот с микрофона, и для этого разобраться с FFT.

Ряд Фурье http://rghost.ru/53785377/image.png

В другой форме http://rghost.ru/53785428/image.png

Так как все функции уже написанны, юзаю готовую библитотеку для питона numpy

>>> np.fft.fft([1, 2, 1, 0, 1, 2, 1, 0])
array([ 8.+0.j,  0.+0.j,  0.-4.j,  0.+0.j,  0.+0.j,  0.+0.j,  0.+4.j,
        0.+0.j])
скормил fft 8 точек искомой функции, получил 8 комплексных чисел вида a + b*j, те можно получить амплитуду для каждой составляющей

A = sqrt(a^2+b^2) (вторая пикча)

А теперь эти амплитуды нужно сопоставить каким-то частотам. Тут я и застрял. По логике вещей частота должна соотвествоать ее индексу в массиве (ω,2ω,3ω)

Но нашлась функция fft.fftfreq, на вход получающая количество точек.

>>> np.fft.fftfreq(8)
array([ 0.   ,  0.125,  0.25 ,  0.375, -0.5  , -0.375, -0.25 , -0.125])
Откуда эти цифры? ЯННП.

Так или иначе эти частоты как то должны быть связанны с частотой дискретизации, но понять как не могу.

Доки http://docs.scipy.org/doc/numpy/reference/generated/numpy.fft.fft.html#numpy....

 ,

helium
()

Отпадает сокет в потоке

Добрый день. Есть два стула скрипта:первый-сервер, второй- клиент. Для проверки на отключение клиента сервер использует такой код

data = conn.recv(1024)
if not data:
    break
Когда я использую с сервером простой клиент все работает хорошо
s = socket.socket()
s.connect((host, port))
try:
    while True:
        buf = input(">>")
        s.send(bytes(buf.encode('utf-8')))
        data=s.recv(1024)
        print (data.decode("utf-8"))
finally:
    s.close()
Но если я выношу клиент в отдельный поток, серверная проверка детектит отключение
class client(threading.Thread):
    def __init__(self, sock):
        self.sock=sock
        threading.Thread.__init__(self)
    def run(self):
        try:
            while 1:
                data = self.sock.recv(1024)
                print (data.decode("utf-8"))
        finally:
            self.sock.close()
            return
s = socket.socket()
s.connect((host, port))
th=client(s)
th.start()
Как фиксить не знаю.По лицу не бейте, в институт завтра. Сорцы: Сервер http://pastebin.com/FNhyVKjr Клиент http://pastebin.com/EpwiWZib

 , ,

helium
()

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