LINUX.ORG.RU

Сообщения muon

 

Симметричное шифрование строки в Javascript

Форум — Development

Пилю я, значит, некую поделку на правах пет-проджекта. Эдакая телефонная книжка на стероидах. Поскольку русские, украинские и китайские хакеры только и думают, как бы украсть номера моих шлюх, решил я контактные данные хранимых людей держать в базе зашифрованными, и расшифровывать уже в браузере. В качестве ключа — либо пароль, либо производное от него, либо ключ хранится там же в базе, но защищён паролем/ПИНом.

Решил посмотреть, что есть в JS для подобных дел, и для криптографии вообще.

Как я себе это себе представлял: в JS есть стандартная библиотека, которая умеет AES 256 над любыми входными данными. В npm или ещё где-то есть сторонние библиотеки, которые это шифрование используют для решения более высокоуровневых задач (возможно и моей).

Как оказалось: ничего стандартного для шифрования нет и не предвидится. Базовое шифрование нагугливается в сторонних библиотеках, которые либо пилились васянами в 2010-е (а потом им надоело), либо имеют разгромные рецензии о своей небезопасности, либо являются PoC-ами прекрасных решений будущего, либо подходят для очень узких случаев (при этом могут быть так же заброшены и небезопасны). На SO если и дают какие-то ссылки, то сразу со скептическими дисклеймерами, и ссылки ведут примерно на то же самое. Кому очень надо, тот колхозит своё. Всё очень плохо. Подлость, гадость, плейнтекст.

Неужели я единственный человек, которому понадобилось шифрование в JS?

Есть ли более-менее приличное решение?

 ,

muon
()

Не хотят фильтроваться элементы из связанной таблицы

Форум — Development

ЛОР, помоги, я сжёг все силы и не понял. Тут нужен настоящий программист.

Есть две таблицы, связанные отношением many-to-many. Типа люди и типа события. Определено, минимально, так:

class Contact(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    meetings = db.relationship(
        'Event', secondary=events, order_by="desc(Event.id)",
        backref=db.backref('participants', lazy='dynamic'), lazy='dynamic')

class Event(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    deleted = db.Column(db.Boolean, default=False, nullable=False)
    date = db.Column(db.DateTime, default=datetime.utcnow)

Собирался сделать страницу, которая будет показывать все события для одного человека. Соответственно, берём человека и отправляем рендериться в шаблон:

    contact = Contact.query.filter_by(id=contact_id).first_or_404()
    return render_template('events.html', contact = contact)

В шаблоне из человека вытаскиваются его события и циклом вываливаются на страницу:

{% for meeting in contact.meetings %}
	<p>{{ meeting.id}} - {{ meeting.date }}</p>
{% endfor %}

Это всё в первом приближении работает прекрасно. Так же прекрасно работает, если я фильтрую события по признаку «не удалены»:

{% for meeting in contact.meetings.filter_by(deleted=False) %}
# Перфекто

Тучи сгущаются, когда я хочу отфильтровать события по наличию даты. Передо мной возникают два стула:

  1. Взять проверенный .filter_by(), которым я вроде научился пользоваться. Но я не знаю, как попросить его сделать NOT NULL. Попытки типа date!=None или date>0 приводят к разнообразным эксепшонам и всё.
  2. Взять .filter(), в котором вроде бы всё можно. Но я не могу объяснить ему, что такое date; на .filter(date.is_(None)) он упорно утверждает, что не знает такую переменную. Советы на SO настолько не похожи на мой код, что для их примения нужно переписать программу, поменять фреймворк, выучить другой язык, сметить пол и улететь на другую планету.

Не могу больше думать, спасите.

ЗЫ Если где соврал, то не со зла, просто тысячу вариантов уже перепробовал.

 , ,

muon
()

Построитель отчётов-списков для MySQL

Форум — Talks

Подскажите, чем автоматически делать красивый список из результатов SQL-запроса. Чтобы генерировался по расписанию; интерактивная вёрстка руками не пойдёт.

Обобщить, свести, проанализировать, нарисовать графики и хитмапы — с этим более-менее справляется Superset.

А если надо события вывести красивым списком в PDF? В списке должны быть сырые данные результатов запроса — номер, описание объекта, дата, ответственный и так далее. Ничего суммировать и преобразовывать не надо, только дату отформатировать. Но чтобы красиво, чтобы лого компании, приятные шрифты, отступы и прочее форматирование.

Желательно забесплатно.

 

muon
()

Репозиторий Elasticsearch выдаёт 403

Форум — Admin

Всем привет.

Репозиторий Elasticsearch для apt выдаёт на российские адреса 403.

Корячить VPN из корпоративной сети непойми куда нежелательно, да и не очень хочется.

Есть какие-нибудь доступные зеркала?

У китайцев нашлись тарболлы, а нужны deb-пакеты.

 ,

muon
()

Программа для учёта хранящегося на складе

Форум — Talks

Всем привет!

Нужна программа для учёта что где лежит. В моём случае — архивные документы.

Идеальная программа выглядит так: можно создавать хранимые объекты со сроками годности, можно создавать расположения (шкаф, полка…), а потом назначать объектам места хранения. Программа умеет показывать где лежит нужный объект, и что лежит в заданном месте хранения. Перед истечением срока годности объекта уведомляет письмом. Авторизация желательна учётками LDAP, но можно и своими собственными. Штрих- и QR-коды были бы не лишними, но не принципиально.

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

Накостылять самому — для себя бы накостылял, но на работе я не RnD, и не хочу предлагать наколенные поделки.

Пока пойду потыкаю http://www.thepapertiger.com/tour, но посторонний сайт вряд ли приживётся как решение.

 

muon
()

ru.com всё?

Форум — Admin

Домен ru.com, вот этот вот:

https://www.whois.com/whois/ru.com

внезапно перестал резолвиться совсем:

https://www.reg.ru/nettools/dig?domain=ru.com&type=any&dns=&trace=1&fulltext=1

  • . - нормально
  • com. - нормально
  • ru.com. - пусто

Кто-то ещё столкнулся с этим? У нас в ru.com один из доменов компании, неприятненько.

В какое спортлото писать? В GoDaddy? В Esqwire.com P.C. Domain Escrow? В reg.ru?

 ,

muon
()

Zabbix housekeeping на TimescaleDB

Форум — Admin

Всем привет,

я выборочно почитал про Zabbix, но так и не понял:

после перехода на TimescaleDB хаускипер продолжит работать в обычном режиме, или теперь он только отбрасывает данные чанками? Например, если чанки удаляются через год, могу ли я для отдельных items настроить удаление через неделю по-старинке, с помощью DELETE? Это будет работать?

Я в курсе, что с пожатыми чанками так нельзя.

 , ,

muon
()

Статистика в firewalld

Форум — Admin

Админы,

как в этой чудо-софтине посмотреть количество срабатываний правила? После iptables отсутствие такой нужной информации вызывает недоумение.

И сразу вопрос более общий: стоит ли разбираться в firewalld, или он уже скоро помрёт?

 , ,

muon
()

Допилинг i3

Форум — Desktop

ЛОР,

я разморозился и залогинился в свою древнюю убунту. Тут i3 и незнакомые созвездия на небе. Большая удача, что есть русский язык. Ещё есть отдельно поставленный login manager (или session manager, или как его). И фаерфокс. Это, по-моему, всё.

Сейчас апгрейжу её до 18.04. Пока апгрейдится, спрошу про настройку десктопа.

Я так понял, i3 только раскладывает окна. Остальное надо выбирать и ставить самому. С прикладным софтом типа файлового менеджера это несложно. А что делать с настройкой GUI? Как поменять курсоры и скорость мыши, поставить нормальные шрифты в браузер, избавиться от тиринга и тому подобное? Есть какой-нибудь универсальный контрол-центр или пак выживальщика на десктопе? Или придётся писать в ужасные конфиги иксов, или вейленда, или чего там ещё на десктопах изобрели?

 

muon
()

Посоветуйте курс/книгу/статью/монографию/whatever по редактированию фото

Форум — Talks

Хочется фотографировать камерой, прочитал книгу «Фотография для дебилов» с основными понятиями про экспозицию, освещение, режимы и тому подобное. Теперь углубляюсь на практике. Художественно-композиционная часть атрофированному инженерскому правому полушарию даётся нелегко, но с практикой думаю наработается.

Сложнее оказалось с обработкой. Открыть RawTherapee и как-нибудь разобраться — не получилось. Найти какой-нибудь адекватный мануал — не получилось тоже. Найденные гайды, включая официальный, ничего не объясняют, и в общем случае выглядят так:

«Saturation отвечает за насыщенность, а hue — за hue. Откройте вкладку Exposure и подвиньте ползунки как надо. Теперь откройте вкладку Detail и подвиньте ползунки как надо. <…> Поздравляем, теперь вы всё умеете.»

Критически не хватает объяснения, а как надо. Авторам мануалов почему-то кажется, что я знаю, что надо делать с фотографией, и просто не могу найти нужный контрол. Нет, дело не в этом. Дело в том, что мне нужно не поменять sharpening amount, а сделать хорошую фотографию. Наверняка есть правила и сложившиеся практики. Рассказы про художественный вкус и чувство прекрасного — это гуманитарный буллшит. Рассказали бы лучше

  • Из массы контролов нажимание каких является нормой, а какие подвластны только просветлённым ветеранам?
  • Почему за контраст отвечает минимум шесть ползунков? когда какой использовать?
  • Зачем в интерфейсе столько кривых? они мне должны что-то говорить? что?
  • На какие ошибки проверить фотографию? вот я слышал, что не должно быть максимально белых и максимально чёрных пикселей, это так? что ещё?
  • и тому подобное про то что такое хорошо, а что такое плохо в процессе обработки.

Линукс тут при том, что RawTherapee же.

 ,

muon
()

Не могу подружить Flask и gunicorn

Форум — Development

Всем привет,

решил я кое-что написать на python3, не будучи программистом. Точнее — написать на Flask, используя эпичную методичку с хабра.

Долго ли коротко ли, но какое-то веб-приложение у меня получилось и прекрасно работает на локалхосте на встроенной пускалке (flask run). Пускалка при старте заявляет, что она девелоперская, и в проде использовать её нельзя. Поэтому «в проде» решил использовать gunicorn.

Приложение, кстати, вот такое (server.py):

from flask import Flask

app = Flask(__name__)
from app import views

@app.route("/")
def hello():
    return "Hello World!"
if __name__ == "__main__":
    app.run()

Так вот, оно вроде бы запускается и работает, hello world отдаёт, но не более того. Все остальные адреса (типа search) возвращают 404, всех остальных @app.route как будто нет. Но если @app.route добавить сюда же в servers.py, то добавленный путь нормально работает.

Надо полагать, строчка from app import views не работает так, как мне бы этого хотелось. Нашёл похожий вопрос на СО, но строчка импорта у ТС там другая, и ответ мне не подошёл.

Запускаю так:

gunicorn -w 4 server:app

Честно говоря, после некоторого опыта с пыхом зависимость поведения программы от реализации сервера кажется дичью. Мне понятна схема, когда на сервере запускается приложение, ну а тут мне даже предлагали сервер запихнуть в само приложение, когда ковырнул было waitress. Чад и угар девопса делает мне неуютно, помогите~

 , ,

muon
()

Стратегии с прапорщиками

Форум — Talks

ЛОР, привет

Почему в стратегиях, что RTS, что пошаговых, так мало внимания уделяется снабжению войск? Патроны не заканчиваются, ракеты бесплатные, заправляться не надо. Это же интересно и на порядок увеличивает количество возможных сценариев игры.

Все любят паровозики на протяжении 25 лет, но никто не использует хоть что-то похожее в военных стратегиях. Снабжение играет роль в экономических стратегах, но война обычно криво приклеена сбоку (как в Settlers и Pharaoh).

В Civilisation надо строить и доставлять ракеты. Всё остальное снабжение либо бесплатно (при коммунизме), либо платно (содержание юнита тратит щит), но без проблем телепортируется через всю планету. Даже о простой зависимости потребного снабжения от потрёпанности, уровня и типа подразделения речи не идёт. А ракеты могут перелетать с лодки на лодку, лол.

В Hearts of Iron ̣(«День победы») механика тыла посложнее, нужно иметь транспортные сети, иметь специальный ресурс «припасы» (а не просто «золото»), доставлять его в изолированные районы. Но ввиду масштабности, вся эта механика выполнена очень крупными мазками, и тот же логистический ресурс превращается в какую-то общегосударственную прану, которая выражена просто числом в списке запасов. Связывать заводы с фронтом, прирастать к занятой территории сетью дорог — всё это изображено очень условно и происходит в основном в фантазии игрока.

В Spring нужно строить ракеты для РВСН и ПРО, на этом всё. Ещё была старая RTS под офтопик, где количество ракет на корабле было ограничено, но ракеты почему-то строились прямо на корабле. И ресурсы там добывались не в шахте, а на площадке разгрузки снабженческого «Чинука», что просто декор, но приятно.

Всё, больше не знаю. Снабжение флота/авиации не реализовано вообще нигде.

Есть у кого-то примеры игр, где для фронта надо строить адекватный тыл? Хоть под линукс, хоть под винду, хоть вообще под что-либо.

Перемещено jollheef из games

 

muon
()

Борьба с юникодом

Форум — Web-development

Всем привет!

Пишу первую поделку на Flask. Раньше доводилось писать только админские скрипты.

Есть файл (UTF-8 без BOM) с вьетнамскими словами, его надо некоторым образом распарсить и отдать страничку, использую шаблон. Беда в том, что если прочитать из файла «Việt Nam», то на странице вместо я получаю «ViГЄМЈt Nam». Всё не-ASCII превращается в кашу.

Однако, если прямо в коде присвоить не-ASCII текст переменной, а потом переменную передать в шаблон, то всё хорошо. Между переменными есть разница:

app.logger.info(fromfile)
[...] INFO in views: Việt Nam
# так на страничке каша^^^

# а это работает:
definedincode = "Việt Nam"
app.logger.info(definedincode)
[...] INFO in views: Vi\xea\u0323t Nam\u0300

Тексту из файла можно сделать encode/decode:

app.logger.info(fromfile.encode('unicode_escape').decode("utf-8"))
[...] INFO in views: Vi\u0413\u0404\u041c\u0408t Nam

Но на работающий вариант всё равно не похоже. В этом случае на страничке отдаётся сырое необработанное «Vi\u0413\u0404\u041c\u0408t Nam».

Помогите с магией.

 ,

muon
()

Задать onmouseover для всех объектов на странице

Форум — Web-development

Привет!

Пишу на коленке некую поделку, без фреймворков/библиотек/прибамбасов вроде node.js, только голый набранный руками JS и HTML. Многого не надо, поделка примитивная (карманный ReversoContext), функциональности хватает, всё работает.

Но хочется навести красоту.

HTML примерно такой:

...
<span id=«w1» onmouseover='rumpleTits(this.id)'>Hello</span>
...
<span id=«w2» onmouseover='rumpleTits(this.id)'>world</span>
...
<span id=«w3» onmouseover='rumpleTits(this.id)'>et cetera</span>
...
У всех на onmouseover вызывается одно и то же. Можно ли не громоздить onmouseover в каждый тег, а сделать один раз что-то типа
<body onload=«span.foreach.onmouseover='rumpleTits(this.id)'»>
?

Гугль пишет что-то непознаваемое про foreach и apply, я не осилил допилить под свой случай. Возможно, эти рецепты не для чистого JS.

 

muon
()

Движок контекстного перевода

Форум — Talks

Сайт «контекстного перевода» это даже и не переводчик, а поиск слова по множеству переведённых текстов (из книг и ещё хз откуда), работает примерно так:

http://context.reverso.net/перевод/английский-русский/engine

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

Но сайта мне мало, и хочется заиметь свой на локалхосте (лучше веб, но в крайнем случае сойдёт и обычное приложение), потому что

  1. на сайте нужной языковой пары нет
  2. на моём уровне не нужны все возможные варианты применения, только базовые
  3. хочу учиться, заполняя такую базу контентом — по сути, использовать как конспект

Движок этого сайта, я так понимаю, закрытый. Есть ли что-то похожее в опенсурсе?

 

muon
()

Отцы матана, подскажите решение

Форум — Talks

Всем привет

У меня в graphviz есть граф, описывающий маршруты транспорта в некоем городе, nodes - остановки, edges - дороги между ними. Набор узлов и рёбер составляет собой маршрут. Маршрутов много, спланированы они убого, хочется спланировать новые. То есть граф надо заново поделить на наборы узлов и рёбер, маршруты.

Для начала условия такие:

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

Возможные решения, в порядке убывания моей радости:

  • функция типа SplitToRoutes() в octave
  • готовый алгоритм из теории, который надо закодить самому
  • придумывание своего алгоритма
  • брутфорс

Посоветуйте что-нибудь толковое.

А то придётся списывать^U

 

muon
()

Где научиться в ISO 20000

Форум — Talks

Где пройти курс «Введение в ISO 20000»? Чтобы по интернету, и чтобы в конце дали какой-нибудь сертификат. С экзаменом или без.

Конторы разной степени мутности предлагают цены от 3 до 90 тысяч рублей. Пока не могу понять, с какой цены начинаются сто́ящие варианты.

ITIL не хочу, это какая-то секта менеджеров, туда надо прям с головой. А с ISO 20000 можно развиться в сторону ISO 9000, что в перспективе намного интереснее.

 ,

muon
()

в asadmin отсутствуют server.application

Форум — Admin

Благородные доны,

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

Включил мониторинг:

enable-monitoring
enable-monitoring --modules jvm=LOW
enable-monitoring --modules thread-pool=HIGH
enable-monitoring --modules http-service=HIGH
enable-monitoring --modules jdbc-connection-pool=HIGH

Делаю так:

asadmin list --monitor=true server.applications.*
Enter admin user name>  admin
Enter admin password for user "admin">
No monitoring data to report.

Command list executed successfully.

В server.* много разделов, но applications нет.

Что ему надо, чтобы они появились? Включить мониторинг ещё в каком-то модуле? Включить мониторинг в самом приложении?

По книжке О'Рейли «Copying and pasting from Stackoverflow» сделать не получается, а в джаве я только так.

Debian 8, Glassfish 4.1.1

 ,

muon
()

Автоматическое добавление ленты в Pool

Форум — Admin

Есть ленточная библиотека с авточейнжером. В ней чистые, новые LTO6 - 23 штуки (и одна чистящая). Библиотека умеет работать со штрих-кодами, командой «label barcodes slot=1» можно задать метку тома и добавить его в пул.

Вопрос вот в чём: как настроить Bareos, чтобы не делать «label barcodes» руками? Выполнить эту команду один раз при покупке лент - не проблема, но что делать, если ленты (тома) делятся на два пула или больше? Объём данных в каждом пуле неизвестен.

Желаемое поведение: при запуске задания Bareos ищет в заданном пуле Purged/Recycled ленту, а если таких нет, то берёт новую, делает ей «label barcodes» и добавляет в этот пул. Это возможно?

 ,

muon
()

Поделитесь best practices по управлению файлами

Форум — Admin

Есть bareos (форк бакулы), который работает, но не умеет удалять старые бэкапы.

Пул определяется примерно так (пулов много):

Pool {
    Name = 2wks
    Pool Type = Backup
    Recycle = no
    Volume Retention = 14 days
    Maximum Volume Jobs = 1
    Label Format = "${Pool}-${JobName}"
    Action On Purge = Truncate
}
Новый запуск задания - новый том.

Как теперь сделать так, чтобы удалялись старые файлы томов с истекшим сроком хранения?

В интернетах рекомендуют разные костыли, я использовал такой (сделал или скопипастил, не помню):

...
for p in `echo "list pool" | bconsole | grep " Backup " | sed 's/  */ /g' | cut -d ' ' -f4`; do
        for f in `echo "list volume pool=$p" | bconsole | grep Purged | sed 's/  */ /g' | cut -d ' ' -f4`; do
                find $BACKUPROOT -type f -name "$f" -exec rm -f {} \;
                echo "delete volume=$f yes" | bconsole;
        done
done
Скрипт запускается ежедневно по крону, ищет тома в состоянии «Purged», удаляет этот том с диска и из базы. Вроде работает, но если есть не локальный storage daemon, то к костылям нужно городить ещё костыли (например, ходить по SSH на все SD и там подчищать). Не хотелось бы.

Была мысль использовать «Action On Purge = Truncate» (вон он в конфиге), чтобы том автоматически урезался до 0, а потом скриптом по крону удалять нулевые файлы. Но «Action On Purge» в конфиге ни на что не повлиял.

Подскажите какой-нибудь годный способ.

 ,

muon
()

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