Пятничное
Прибрался, распечатал рековую стойку под аудио тракт. Хвастаюсь.
Прибрался, распечатал рековую стойку под аудио тракт. Хвастаюсь.
Всем привет.
Появилась желание реализовать имитацию освещения под открытым небом в течении суток. Предположим, есть 4 (может быть меньше, а может быть больше, в зависимости от необходимости для решения данной задачи) основных опорных цвета:
Таким образом, получается что:
Есть опасение, что переходные цвета (которые допустим будут получаться из поминутного увеличения/уменьшения отдельных параметров R, G, B) будут неестественными.
Как правильно оформить переходы между опорными точками, чтобы складывалось ощущение естественного освещения на протяжении всего дня?
С какой стороны подходить к этой задаче, может кто-нибудь подсказать? Экспериментально свои предположения еще не тестировал, планирую заняться этим завтра, но голова забита этим вопросом.
Всех приветствую.
Поднял на digital ocean сервер. Накатил nginx. Всё отлично, всё работает. Потом решил поделиться ссылкой на свежеподнятый ресурс в телеграм, туда попытался сходить telegrambot, и всё. После этого ресурс по 80-му порту не отвечает. При этом, если пытаться открыть его в обход (через прокси, анонимайзеры, впн), то всё отлично работает. Напрямую работать перестал. Однако, если nginx перевесить на любой другой порт, то опять же - работает, так же работает и ssh на 22-м порту.
Стал разбираться в вопросе, попробовал посмотреть, что мне скажет:
$ sudo tcpdump -nvvi any dst port 80tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:41:47.776241 IP (tos 0x8, ttl 49, id 0, offset 0, flags [DF], proto TCP (6), length 64)
79.xxx.xxx.121.63073 > 206.189.14.89.80: Flags [S], cksum 0xa6bf (correct), seq 3691586037, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 410217700 ecr 0,sackOK,eol], length 0
10:41:48.028833 IP (tos 0x8, ttl 49, id 0, offset 0, flags [DF], proto TCP (6), length 64)
79.xxx.xxx.121.63074 > 206.189.14.89.80: Flags [S], cksum 0xd905 (correct), seq 2828804640, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 410217951 ecr 0,sackOK,eol], length 0
10:41:48.780835 IP (tos 0x8, ttl 49, id 0, offset 0, flags [DF], proto TCP (6), length 64)
79.xxx.xxx.121.63073 > 206.189.14.89.80: Flags [S], cksum 0xa2d7 (correct), seq 3691586037, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 410218700 ecr 0,sackOK,eol], length 0
10:41:49.034858 IP (tos 0x8, ttl 49, id 0, offset 0, flags [DF], proto TCP (6), length 64)
79.xxx.xxx.121.63074 > 206.189.14.89.80: Flags [S], cksum 0xd51d (correct), seq 2828804640, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 410218951 ecr 0,sackOK,eol], length 0
10:41:49.783256 IP (tos 0x8, ttl 49, id 0, offset 0, flags [DF], proto TCP (6), length 64)
79.xxx.xxx.121.63073 > 206.189.14.89.80: Flags [S], cksum 0x9eef (correct), seq 3691586037, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 410219700 ecr 0,sackOK,eol], length 0
10:41:50.035957 IP (tos 0x8, ttl 49, id 0, offset 0, flags [DF], proto TCP (6), length 64)
79.xxx.xxx.121.63074 > 206.189.14.89.80: Flags [S], cksum 0xd135 (correct), seq 2828804640, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 410219951 ecr 0,sackOK,eol], length 0
10:41:50.786591 IP (tos 0x8, ttl 49, id 0, offset 0, flags [DF], proto TCP (6), length 64)
79.xxx.xxx.121.63073 > 206.189.14.89.80: Flags [S], cksum 0x9b07 (correct), seq 3691586037, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 410220700 ecr 0,sackOK,eol], length 0
10:41:51.038744 IP (tos 0x8, ttl 49, id 0, offset 0, flags [DF], proto TCP (6), length 64)
79.xxx.xxx.121.63074 > 206.189.14.89.80: Flags [S], cksum 0xcd4d (correct), seq 2828804640, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 410220951 ecr 0,sackOK,eol], length 0
10:41:51.792429 IP (tos 0x8, ttl 49, id 0, offset 0, flags [DF], proto TCP (6), length 64)
79.xxx.xxx.121.63073 > 206.189.14.89.80: Flags [S], cksum 0x971f (correct), seq 3691586037, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 410221700 ecr 0,sackOK,eol], length 0
10:41:52.044462 IP (tos 0x8, ttl 49, id 0, offset 0, flags [DF], proto TCP (6), length 64)
79.xxx.xxx.121.63074 > 206.189.14.89.80: Flags [S], cksum 0xc965 (correct), seq 2828804640, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 410221951 ecr 0,sackOK,eol], length 0
10:41:52.799409 IP (tos 0x8, ttl 49, id 0, offset 0, flags [DF], proto TCP (6), length 64)
79.xxx.xxx.121.63073 > 206.189.14.89.80: Flags [S], cksum 0x9337 (correct), seq 3691586037, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 410222700 ecr 0,sackOK,eol], length 0
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:42:52.250145 IP (tos 0x0, ttl 55, id 0, offset 0, flags [DF], proto TCP (6), length 64)
185.125.168.87.63104 > 206.189.14.89.80: Flags [SEW], cksum 0x913b (correct), seq 2722778500, win 65535, options [mss 1360,nop,wscale 5,nop,nop,TS val 410281830 ecr 0,sackOK,eol], length 0
10:42:52.311618 IP (tos 0x0, ttl 55, id 0, offset 0, flags [DF], proto TCP (6), length 52)
185.125.168.87.63104 > 206.189.14.89.80: Flags [.], cksum 0xaab8 (correct), seq 2722778501, ack 3348941576, win 4128, options [nop,nop,TS val 410281891 ecr 99226], length 0
10:42:52.312449 IP (tos 0x2,ECT(0), ttl 55, id 0, offset 0, flags [DF], proto TCP (6), length 512)
185.125.168.87.63104 > 206.189.14.89.80: Flags [P.], cksum 0xecd7 (correct), seq 0:460, ack 1, win 4128, options [nop,nop,TS val 410281891 ecr 99226], length 460: HTTP, length: 460
GET / HTTP/1.1
Host: www.some-domain.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:59.0) Gecko/20100101 Firefox/59.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
If-Modified-Since: Mon, 23 Apr 2018 10:34:20 GMT
If-None-Match: "5addb6ac-f"
Cache-Control: max-age=0
10:42:52.373373 IP (tos 0x0, ttl 55, id 0, offset 0, flags [DF], proto TCP (6), length 52)
185.125.168.87.63104 > 206.189.14.89.80: Flags [.], cksum 0xa7ef (correct), seq 460, ack 188, win 4122, options [nop,nop,TS val 410281948 ecr 99241], length 0Собственно вопрос, в чём же дело? Как можно локализовать проблему?
На всякий случай:
$ netstat -plutn
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
tcp6 0 0 :::80 :::* LISTEN - Привет любителям создавать распиания в кронтабе!
Есть у меня скрипт. Он принимает один параметр on иди off. Так вот мне надо его включать на 5 минут, а затем выключать, И так, по одному разу в 20 минут.
То есть, прошло 20 минут - включаем, прошло 5 минут - выключаем, прошло 20 минут - включаем, и т.д.
Можно ли это элегантно реализовать кроном?
Всем привет!
Даже не смог подобрать верный раздел для этого вопроса. Но это, думаю, не так уж и важно. Важна сама проблема. Есть у меня Arduino Yun, это где и arduino, и linux-машинка, в одной коробке. Так вот вызываю я питоновский скрипт из скетчка ардуинки:
Process sensor_log;
sensor_log.begin("python");
sensor_log.addParameter("/mnt/sda1/test.py");
sensor_log.run();
while (sensor_log.available() > 0) {
char c = sensor_log.read();
Console.print(c);
}И всё работает отлично, пока в питоне скрипте всего лишь:
print(123)На борту стоит linino (openwrt), и я подумал, может быть можно, как-то перманентно захардкодить эту переменную для всех пользователей? Но при этом прописав в /etc/environment, всё равно ничего не происходит.
Есть какие-нибудь идеи?
Супонев ранее обозревал игры, в лохматых 90-х годах. Так вот запала мне в память игра, название который я не могу вспомнить, не могу найти в инете никакой информации по этой игре.
Общая информация, которую я помню, следующая:
Главные герои: негр, баба и робот. Возможно робота зовут Кейси (выглядел как летающий глаз). Так же, возможно, главные герои достаточно часто произносили фразу «Кейси, помоги!» и робот начинал помогать в чем-то по сюжету. Это всё, что я помню. Разве что, ещё стоит сказать, что это была одна из первых 3D игр, со вставками видео роликов.
Заранее спасибо за помощь.
Всем привет.
Пытаюсь реализовать следующий алгоритм криптографии: https://habrahabr.ru/post/265309/
data = 'test'
# Подпись сообщения цифровой подписью
gateway_private_key_file = open('{0}{1}'.format(GCryptHelper.get_keys_directory(), 'gateway_private_key.pem'), 'rb')
gateway_private_key = RSA.importKey(gateway_private_key_file.read())
data_hash = SHA.new(data)
signature = PKCS1_v1_5.new(gateway_private_key)
signature = signature.sign(data_hash)
# Шифрование подписи открытым ключем принимающей стороны
gcrypt_public_key_file = open('{0}{1}'.format(GCryptHelper.get_keys_directory(), 'gcrypt_public_key.pem'), 'rb')
gcrypt_public_key = RSA.importKey(gcrypt_public_key_file.read())
cipher_rsa = PKCS1_OAEP.new(gcrypt_public_key)
signature = cipher_rsa.encrypt(signature[:128]) + cipher_rsa.encrypt(signature[128:])
# Генерирование сеансовго ключа и шифрование данных
session_key = Random.new().read(32)
i_vector = Random.new().read(16)
obj = AES.new(session_key, AES.MODE_CFB, i_vector)
cipher_data = i_vector + obj.encrypt(data)
# Шифрование сеансового ключа открытым ключем принимающей стороны
cipher_session_key = cipher_rsa.encrypt(session_key)
gcrypt_private_key_file = open('{0}{1}'.format(
GCryptHelper.get_keys_directory(),
'gcrypt_private_key.pem'
), 'rb')
session_key = cipher_rsa.decrypt(cipher_session_key)
В самом конце, где идёт попытка расшивровать session_key - я получаю ошибку:
Traceback (most recent call last):
File "/Users/Vir/Work/Gateway/app/system/helpers/gcrypt/gcrypt.py", line 100, in <module>
GCryptHelper.encrypt('test')
File "/Users/Vir/Work/Gateway/app/system/helpers/gcrypt/gcrypt.py", line 42, in encrypt
print(cipher_rsa.decrypt(cipher_session_key))
File "/Users/Vir/Work/Envs/gateway/lib/python3.5/site-packages/Crypto/Cipher/PKCS1_OAEP.py", line 189, in decrypt
modBits = Crypto.Util.number.size(self._key.n)
AttributeError: 'bytes' object has no attribute 'n'
В чем дело? Я понимаю, что decrypt принимает строку, но при попытке сделать cipher_rsa.decrypt(cipher_session_key.decode()), получаю ошибку:
Traceback (most recent call last):
File "/Users/Vir/Work/Gateway/app/system/helpers/gcrypt/gcrypt.py", line 100, in <module>
GCryptHelper.encrypt('test')
File "/Users/Vir/Work/Gateway/app/system/helpers/gcrypt/gcrypt.py", line 42, in encrypt
session_key = cipher_rsa.decrypt(cipher_session_key.decode())
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x95 in position 0: invalid start byte
День добрый.
Сразу же прошу прощения за оффтоп, на линухах никогда не испытвал с этим проблем, спасибо cryptsetup, luks и т.п.
Необходимо шифровать директорию, причем не паролем, а ключом. И ключ этот будет находится на носителе. Может сможет кто подсказать, как это реализовать в OS X El Captain.
Заранее благодарен.
Всем привет.
У меня из коробки, в убунте, стоит python2.7. Появилась необходимость в библиотеке OpenSSL, которую я поставил с помощью apt-get install python-openssl.
Она установилась в /usr/local/bin/python2.7/dist-packages/OpenSSL. Но при этом, директория не находится, по умолчанию, в sys.path. Я её добавил с помощью sys.path.insert(1, /usr/local/bin/python2.7/dist-packages/) и библиотека начала находится при import'е, однако возникла следующая ошибка:
>>> import OpenSSL
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/OpenSSL/__init__.py", line 8, in <module>
from OpenSSL import rand, crypto, SSL
File "/usr/local/lib/python2.7/dist-packages/OpenSSL/rand.py", line 11, in <module>
from OpenSSL._util import (
File "/usr/local/lib/python2.7/dist-packages/OpenSSL/_util.py", line 6, in <module>
from cryptography.hazmat.bindings.openssl.binding import Binding
File "/usr/local/lib/python2.7/dist-packages/cryptography/hazmat/bindings/openssl/binding.py", line 13, in <module>
from cryptography.hazmat.bindings._openssl import ffi, lib
ImportError: /usr/local/lib/python2.7/dist-packages/_cffi_backend.so: undefined symbol: PyUnicodeUCS4_AsASCIIStringВсем привет.
Есть вопрос, или просьба о совете, или указать на best practice. В общем, нужно шифровать некие данные с помощью SSL-сертификата, который расшифровывается ключом, а ключ в свою очередь расшифровывается мастер-ключем. Причем, желательно, чтобы этот мастер-ключ лежал, например, на шифрованной виртуалке.
Есть какое-нибудь готовое решение, позволяющее делать подобное, ну или мануал (how to) какой-нибудь.
В общем, в какую сторону двигаться, комрады?
Всем привет.
Есть модуль One (в виде файла), в нем несколько классов, пусть это будут: A и B. Спустя какое-то время, я добавляю в One третий класс C. Так вот при попытке импортировать класс, я получаю ImportError. А в списке доступных классов/методов (извлеченного из dir(One)) класса C вообще нет. Я подумал, может это кеш? Удалил One.pyc, оставил только One.py. Но проблема не решилась. Что это может быть?
from Models.One import C
ImportError: cannot import name C
import Models.One as One
print dir(One)
['A', 'B']
print One
<module 'Models.One' from '/home/user_dir/project/Models/One.pyc'>
Сам модуль One:
class A(object):
pass
class B(object):
pass
class C(object):
pass
Всем привет.
Скажите, есть ли какие-нибудь простые способы зашифровать раздел (или отдельно взятую директорию), а ключ для расшифровки вынести на флешку?
P.S. Ubuntu 15.04
Всем привет.
Собственно сабж. В инете нарыл следущее:
echo "options asus_nb_wmi wapf=4" | sudo tee /etc/modprobe.d/asus.confВыполнил. Ребутнулся. Лампочка с wi-fi загорелась, но толку нет, беспроводные сети не появляются.
День добрый.
Подскажите, существуют ли на данный момент сервисы предоставляющие услуги DNS-балансировки? Чтобы не поднимать и не настраивать это всё самостоятельно.
Всем привет.
Столкнулся со следующей проблемой. Есть два объект и связь «many to many» между ними. Реализовал стандартными способами Django, с использованием «through».
class Product(models.Model):
title = models.CharField(max_length=255)
description = models.TextField(max_length=1000)
categories = models.ManyToManyField(Category, related_name='products')
def __unicode__(self):
return self.title
class Specification(models.Model):
title = models.CharField(max_length=255)
products = models.ManyToManyField(Product, through='ProductSpecification', related_name='specifications')
def __unicode__(self):
return self.title
class ProductSpecification(models.Model):
product = models.ForeignKey(Product)
specification = models.ForeignKey(Specification)
value = models.CharField(max_length=255)
class Meta:
unique_together = (('product', 'specification'),)
def __unicode__(self):
return '{0} ({1})'.format(self.product.title, self.specification.title)Каким макаром дать возможность создавать и добавлять «спецификации» к продукту из стандартной админки, при создании продукта?
При попытке внести в admin.py следующее:
class ProductAdmin(admin.ModelAdmin):
fields = ['categories', 'title', 'description', 'specifications']
admin.site.register(Product, ProductAdmin)Получаю ошибку: Unknown field(s) (specifications) specified for Product. Check fields/fieldsets/exclude attributes of class ProductAdmin.
В попытке поставить runit, на CentOS release 6.3 (Final), сталкиваюсь со следующей проблемой:
~/runit/admin/runit-2.1.2# ./package/install
Linking ./src/* into ./compile...
Compiling everything in ./compile...
+ cd compile
+ exec make
./load runit unix.a byte.a -static
/usr/bin/ld: cannot find -lc
collect2: выполнение ld завершилось с кодом возврата 1
make: *** [runit] Ошибка 1
Я так понимаю ему нужна libc, и она есть у меня:
~/runit/admin/runit-2.1.2# find / -name libc.so
/usr/lib64/libc.soВ чем может быть проблема?
День добрый. Есть вот такой самописный веб-сервер на питоне:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import SimpleHTTPServer, BaseHTTPServer, ssl, cgi
from bootstrap import Bootstrap
from GatewayResponse.GatewayResponseService import GatewayResponseService
class ServerHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def do_GET(self):
return
def do_POST(self):
post = {}
if 'Content-Type' in self.headers:
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={
'REQUEST_METHOD': 'POST',
'CONTENT_TYPE': self.headers['Content-Type'],
}
)
for item in form.list:
post[item.name] = item.value
self.bootstrap(post)
return
def bootstrap(self, data):
b = Bootstrap(data)
b.start()
response = GatewayResponseService(b.response, 'json')
b.end()
self.send_response(200)
self.send_header('content-type', response.getContentType())
self.end_headers()
self.wfile.write(response.getPackedAnswer())
httpd = BaseHTTPServer.HTTPServer(('localhost', 4443), ServerHandler)
httpd.serve_forever()
Всё работает отлично. НО! Как сделать из него HTTPS? Полазив по интернетам, наткнулся на много туториалов. Но все они сводятся к использованию подобной строчки перед httpd.server_forever()
httpd.socket = ssl.wrap_socket(httpd.socket,
server_side=True,
certfile='./cert.crt')
httpd.serve_forever()
Такой сервер запускается, но не реагирует ни на какие запросы. Более того, даже если ему указать несуществующий путь на сертификат, то он и словом не обмолвится.
Может сможете помочь и подсказать, в чём может быть дело?
P.S. Python 2.7.8
Всем привет.
Пытаюсь начать использовать вышеуказанную ORM. Описываю модель.
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Boolean, ForeignKey
Base = declarative_base()
class Gateway(Base):
__tablename__ = 'gateway'
id = Column(Integer, autoincrement=True, primary_key=True)
implementation = Column(String, nullable=False)
marker_active = Column(Boolean, nullable=False, default=False)
Что я делаю не так?
Так вот, по документации, если я сделаю
print Gateway.__table__>>> User.__table__
Table('users', MetaData(bind=None),
Column('id', Integer(), table=<users>, primary_key=True, nullable=False),
Column('name', String(), table=<users>),
Column('fullname', String(), table=<users>),
Column('password', String(), table=<users>), schema=None)Всем привет.
Необходимо написать несколько правил, у самого не получается, время поджмимает и не получается почитать, потыкать и т.д.
1. Необходимо правило, которое при переходе в корень, то бишь (http://www.example.com или http://www.example.com/) был редирект на http://www.example.com/#!/
2. Необходимо правило, которое при наличие в URL определенной строки (http://www.example.com/?foo=bar) был редирект на http://www.second.com/?foo=bar. Отмечу, что это только тогда, когда в исходном урле есть foo.
Всем привет.
Пытаюсь скрестить django + tornado, в видео связки между ними - redis.
Поднимаю tornado-сервер, который слушает определенный порт, к которому и подрубается клиент с помощью websocket'ов.
Из django путем push-сообщений общаюсь с tornado, который слушает определенные сообщения и реагирует на них.
Примерно так (используется библиотека tornado-redis):
from django.conf import settings
from tornado.websocket import WebSocketHandler
import tornado
import json
import tornadoredis
class HardwareTorsockHandler(WebSocketHandler):
@tornado.gen.engine
def listen_redis(self):
self.redis_client = tornadoredis.Client(
host = settings.SOCK_REDIS_HOST,
port = settings.SOCK_REDIS_PORT,
password = settings.SOCK_REDIS_PASSWORD,
selected_db = settings.SOCK_REDIS_DB
)
self.redis_client.connect()
yield tornado.gen.Task(self.redis_client.subscribe, [
'pong'
])
self.redis_client.listen(self.on_redis_queue)
def on_redis_queue(self, message):
if message.kind == 'message':
message_body = json.loads(message.body)
if message.channel == 'pong':
self.on_pong(message_body)
def open(self):
self.storage = HardwareTorsockStorage()
self.listen_redis()
def on_pong(self, message):
self.storage.getConnection(message['code']).write_message(message)
def on_message(self, message):
message = json.loads(message)
if (message['command'] == 'set_code'):
self.storage.setConnection(message['code'], self)
def on_close(self):
print 'Websocket closed'
def check_origin(self, origin):
return True
class HardwareTorsockStorage():
_instance = None
_connections = {}
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(HardwareTorsockStorage, cls).__new__(cls, *args, **kwargs)
return cls._instance
def setConnection(self, code, socketHandler):
if code not in self._connections:
self._connections = socketHandler
return True
def getConnection(self, code):
if code not in self._connections:
return False
return self._connectionsКак можно видеть из кода, каждое соединение складывается в storage, для того, чтобы была возможность отправлять сообщения клиентам выборочно.
Проблема в том, что все «клиенты» подписаны на push-сообщение «pong». Не смотря на то, что вместе с pong'ом приходит код, по которому я идентифицирую клиента, которому отослать данные, происходит это столько раз, сколько есть активных соединений.
Т.е. есть 10 подключенных клиентов, и я даю команду отправить одному из них pong. Pong отправляется только ему, но зато 10 раз.
Может подскажите, как этого избежать?
| следующие → |