• Почему Flask игнорирует SESSION_COOKIE_SAMESITE?

    xenon
    @xenon Автор вопроса
    Too drunk to fsck
    Разобрался сам. Текущая версия Flask-Session (0.3.2) в принципе "не знает" про samesite, и использует такой код для установки куки:

    response.set_cookie(app.session_cookie_name, session_id,
                                expires=expires, httponly=httponly,
                                domain=domain, path=path, secure=secure)


    Требуются очень простые изменения в код, Pull request'ы уже есть, но маинтайнер их так и не принял пока что. Сделал свой форк, ставится:
    pip install git+https://github.com/yaroslaff/flask-session.git@samesite


    На время - сойдет. Когда маинтайнер примет пулл-риквесты, можно будет вернуться на оригинал проекта.
    Ответ написан
  • Какой сервис с одноразовыми номерами выбрать?

    xenon
    @xenon
    Too drunk to fsck
    На всякий случай, если нужно для регистрации в ВК, то SMS-сервисы тоже подходят. ВК делает звонок, но через минуту можно выбрать "послать SMS"
    Ответ написан
  • Почему я не могу сделать запись в базу данных SQlite?

    xenon
    @xenon
    Too drunk to fsck
    Упростите код, уберите все ненужные для отладки строчки (даже если они нужны в работе), чтобы четко было видно, где происходит чудо и почему. Добавьте print'ов чтобы посмотреть, как проходит код и распечатывайте переменные. Дальше, скорее всего, вы сами увидите, где у вас проблема, а если нет - то сможете ее свести до кода с 2-3 строчками.

    Возможно, забыли сделать commit() ?
    Ответ написан
  • На каком уровне должен быть твой javascript для перехода к изучению фреймворка(vue,react)?

    xenon
    @xenon
    Too drunk to fsck
    Думаю, надо учить именно на недостаточном уровне. Тогда и уровень заодно в нужных местах подтянется.
    Ответ написан
  • Как держать больше 65535 одновременных TCP соединений?

    xenon
    @xenon
    Too drunk to fsck
    Вы говорите об ограничении в 64k портов. Оно проявляется, например, в том, что вы не сможете на сервере запустить (на одном IP) больше 64k сетевых сервисов. (ssh слушает порт 22, apache слушает 80, mysql слушает 3306) итд. Каждый слушающий сервис идентифицируется по сокету ( IP + порт), IP у вас один, портов 64k, значит, 64k слушающих сокетов.

    А вот для установленных TCP соединений:

    socket
    An address which specifically includes a port identifier, that
    is, the concatenation of an Internet Address with a TCP port.

    connection
    A logical communication path identified by a pair of sockets.

    https://tools.ietf.org/html/rfc793

    То есть, соединение идентифицируется по IP сервера, порт сервера, IP клиента, порт клиента.

    Да и вы сами на любом более-менее активном веб-сервере видите через lsof множество соединений, и они все установлены с одним вашим сокетом (IP:80 или IP:443), но у них разный второй сокет. Если пользователь, например, качает какой-то файл в два потока, будет один коннект: server:80 - client:4444 и еще один коннект: server:80 - client:4445. Это разные TCP соединения.
    Ответ написан
  • Как понять этот тарифный план Contentful?

    xenon
    @xenon
    Too drunk to fsck
    Я, конечно, понимаю, что вы спрашивали 3 года назад... но мало ли - вдруг вопрос еще актуален (или поисковиком кто-то с похожим вопросом зайдет). :-)

    Про API requests - я только что проверял - при работе сайта, он не лезет в Contentful, все данные, которые берутся из Contentful, берутся на этапе генерации статики и хранятся статично. Так что API реквесты выполняются только при перестроении сайта, и сайт даже с очень высокой посещаемостью не использует эти запросы.
    Ответ написан
  • Как выделить пользователю место на диске?

    xenon
    @xenon
    Too drunk to fsck
    Можно сделать (через dd) файл нужного размера, через mkfs его отформатировать и подмонтировать. Дать юзеру полномочия на эту файловую систему. Железно не выйдет за ее пределы.
    Ответ написан
  • Как проверить VPS или выделенный сервер?

    xenon
    @xenon
    Too drunk to fsck
    Помимо того, что вам правильно ответили - замерьте еще бенчмарком, например, https://github.com/kdlucas/byte-unixbench . Еще: cat /proc/cpuinfo

    Не слишком важно ведь, физический или виртуальный, гораздо важнее, сколько мощности он выдает. Некоторые слабые физические сервера могут быть слабее хорошей виртуалки.
    Ответ написан
  • Собственный сервер mail рассылки?

    xenon
    @xenon
    Too drunk to fsck
    Не будет это толком работать. mailchimp и подобные потому и существуют, что если вы не хотите серьезно погружаться в сферу bulk mailing (учить всякие greylisting, DKIM, DCC, DMARC, SPF, DNSBL, FBL, ARF, а еще и SMTP и DNS, автоматически обрабатывать баунсы и ансабскрайбы) - а это займет серьезное время - то толком запустить это не получится. Сервисы рассылок существуют не потому, что дураки-клиенты не догадались сто тысяч раз в цикле письмо отправить, а потому что они дешевле, чем рассылать самому (время ведь тоже не бесплатное, и упущенная прибыль от недоставленных писем - реальная)

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

    2. Спам
    Даже если вам кажется, что ваши письма кристально чистые - все равно, они будут попадать в спам. Хотя бы потому, что многие пользователи жмут кнопку "это спам" вместо отписки. И очень скоро почти вся ваша почта будет валиться в спам везде (даже для тех пользователей, которые хотят ее получать) и толку от рассылок не будет. Кроме того, будут абузы хостеру, и он очень скоро вас попросит, и придется переезжать на плохой и дорогой абузоустойчивый хостинг.
    Ответ написан
  • Почему Python пропускает первую строку?

    xenon
    @xenon
    Too drunk to fsck
    Да нормально вроде выводит:

    xenon@braconnier:/tmp$ cat x.py
    with open('txt') as text:
        for line in range(0, 3):
            line = text.readline()
            print(line) # Вывод начинается со Addidas
    xenon@braconnier:/tmp$ cat txt 
    Termit
    Addidas
    Nike
    xenon@braconnier:/tmp$ python x.py 
    Termit
    
    Addidas
    
    Nike


    Вы может открываете как-то странно? (в примере не показали откуда text берется)
    Ответ написан
  • Стеганография на картинках?

    xenon
    @xenon
    Too drunk to fsck
    Один из простейших методов стеганографии (но далеко не единственный) в том, чтобы изменять подряд младший бит каждого пикселя подряд.

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

    Конечно, если вы извлечете так побитово поток байтов и он будет осмысленным, например, строкой "Hello world!" - то вряд ли это случайность, скорее всего это на самом деле было спрятано. (Бинго! Вы обнаружили стеганографию и извлекли ее). Но такое можно только если:
    1. Вы угадали правильный алгоритм извлечения, тот же, которым вшивали информацию (из бесконечного множества возможных)
    2. Вы можете легко определить, что полученный результат - осмысленный, а не просто мусор

    Но при правильном использовании, вшиваемая информация будет зашифрованной, поэтому отличить ее от мусора будет невозможно. Это можно проверить простым gzip'ом. Если поток хорошо сжимается - в нем сильная избыточность, это какой-то текст, структура, но не поток шума.

    Это все равно что расшифровать очень надежно зашифрованный файл, потому что шифровал его дурак и не сделал все как надо (например, использовал пароль). В частном случае - возможно, в общем случае - невозможно.
    Ответ написан
  • Как сделать авторизацию через python?

    xenon
    @xenon
    Too drunk to fsck
    1. Нужно один раз авторизоваться, а потом работать с той же сессией (а не передавать логин-пароль каждый запрос). Авторизоваться - на страничке типа /login (посмотрите в браузере, как сайт делает), посылать логин-пароль на не ту страницу смысла нет.
    2. Авторизация, если правильно сделана, делается через HTTP POST запрос (а не GET).
    Ответ написан
  • Для каких задач в веб-разработке очень хорошо подходит питон?

    xenon
    @xenon
    Too drunk to fsck
    Скажу как я (давным-давно) выбирал между Руби и Питоном. Это сейчас они более-менее по нишам разделились, а тогда оба были примерно одинаковыми новыми-модными языками. Поглядел список проектов на том и на другом. Везде немало. Но было принципиальное различие. На Руби почти все проекты были "полезные". Дали рубисту задачу, он ее исполнил и код в GPL выложил. А вот на Питоне было дофига "бесполезных" проектов, которые люди делали явно не ради денег. Вывод - на питоне писать приятно. Это важно.

    Ну и вряд ли вы когда-либо серьезно пожалеете, вроде "ах, проект - написать магазин авиабилетов, на руби-то я бы это сделал, а на питоне такое не сделать!". Руби для веба удобнее только рубистам. Питонистам удобнее питон.
    Ответ написан
  • Недорогой VPS с большим диском?

    xenon
    @xenon
    Too drunk to fsck
    cloud4box.com

    У них есть линейка "производительные" и "стандартные". Я взял стандартные.
    2x2.6Ghz / 8G RAM / 80G
    435рублей по акции (но акция, как я понял - постоянная :-) ).

    Замер по unixbench 1635 попугаев:

    spoiler
    ========================================================================
       BYTE UNIX Benchmarks (Version 5.1.3)
    
       System: gamma: GNU/Linux
       OS: GNU/Linux -- 4.9.0-8-amd64 -- #1 SMP Debian 4.9.130-2 (2018-10-27)
       Machine: x86_64 (unknown)
       Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
       CPU 0: Intel(R) Xeon(R) CPU E5-2690 v2 @ 3.00GHz (5999.9 bogomips)
              x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET
       CPU 1: Intel(R) Xeon(R) CPU E5-2690 v2 @ 3.00GHz (5999.9 bogomips)
              x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET
       02:54:18 up 13 min,  1 user,  load average: 0.41, 0.43, 0.27; runlevel 2019-01-03
    
    ------------------------------------------------------------------------
    Benchmark Run: Thu Jan 03 2019 02:54:18 - 03:23:03
    2 CPUs in system; running 1 parallel copy of tests
    
    Dhrystone 2 using register variables       26721853.8 lps   (10.0 s, 7 samples)
    Double-Precision Whetstone                     4223.9 MWIPS (10.0 s, 7 samples)
    Execl Throughput                               1428.9 lps   (29.9 s, 2 samples)
    File Copy 1024 bufsize 2000 maxblocks        410493.9 KBps  (30.0 s, 2 samples)
    File Copy 256 bufsize 500 maxblocks          113438.7 KBps  (30.0 s, 2 samples)
    File Copy 4096 bufsize 8000 maxblocks       1098891.4 KBps  (30.0 s, 2 samples)
    Pipe Throughput                              783025.7 lps   (10.0 s, 7 samples)
    Pipe-based Context Switching                  76252.4 lps   (10.0 s, 7 samples)
    Process Creation                               5623.0 lps   (30.0 s, 2 samples)
    Shell Scripts (1 concurrent)                   5623.1 lpm   (60.0 s, 2 samples)
    Shell Scripts (8 concurrent)                   1323.8 lpm   (60.0 s, 2 samples)
    System Call Overhead                         601174.1 lps   (10.0 s, 7 samples)
    
    System Benchmarks Index Values               BASELINE       RESULT    INDEX
    Dhrystone 2 using register variables         116700.0   26721853.8   2289.8
    Double-Precision Whetstone                       55.0       4223.9    768.0
    Execl Throughput                                 43.0       1428.9    332.3
    File Copy 1024 bufsize 2000 maxblocks          3960.0     410493.9   1036.6
    File Copy 256 bufsize 500 maxblocks            1655.0     113438.7    685.4
    File Copy 4096 bufsize 8000 maxblocks          5800.0    1098891.4   1894.6
    Pipe Throughput                               12440.0     783025.7    629.4
    Pipe-based Context Switching                   4000.0      76252.4    190.6
    Process Creation                                126.0       5623.0    446.3
    Shell Scripts (1 concurrent)                     42.4       5623.1   1326.2
    Shell Scripts (8 concurrent)                      6.0       1323.8   2206.4
    System Call Overhead                          15000.0     601174.1    400.8
                                                                       ========
    System Benchmarks Index Score                                         778.3
    
    ------------------------------------------------------------------------
    Benchmark Run: Thu Jan 03 2019 03:23:03 - 03:51:45
    2 CPUs in system; running 2 parallel copies of tests
    
    Dhrystone 2 using register variables       50631261.2 lps   (10.0 s, 7 samples)
    Double-Precision Whetstone                     8443.5 MWIPS (9.9 s, 7 samples)
    Execl Throughput                               6630.0 lps   (30.0 s, 2 samples)
    File Copy 1024 bufsize 2000 maxblocks        712357.8 KBps  (30.0 s, 2 samples)
    File Copy 256 bufsize 500 maxblocks          205468.1 KBps  (30.0 s, 2 samples)
    File Copy 4096 bufsize 8000 maxblocks       1938721.0 KBps  (30.0 s, 2 samples)
    Pipe Throughput                             1548924.3 lps   (10.0 s, 7 samples)
    Pipe-based Context Switching                 245887.8 lps   (10.0 s, 7 samples)
    Process Creation                              14835.9 lps   (30.0 s, 2 samples)
    Shell Scripts (1 concurrent)                  11658.0 lpm   (60.0 s, 2 samples)
    Shell Scripts (8 concurrent)                   1524.7 lpm   (60.1 s, 2 samples)
    System Call Overhead                        1133850.0 lps   (10.0 s, 7 samples)
    
    System Benchmarks Index Values               BASELINE       RESULT    INDEX
    Dhrystone 2 using register variables         116700.0   50631261.2   4338.6
    Double-Precision Whetstone                       55.0       8443.5   1535.2
    Execl Throughput                                 43.0       6630.0   1541.9
    File Copy 1024 bufsize 2000 maxblocks          3960.0     712357.8   1798.9
    File Copy 256 bufsize 500 maxblocks            1655.0     205468.1   1241.5
    File Copy 4096 bufsize 8000 maxblocks          5800.0    1938721.0   3342.6
    Pipe Throughput                               12440.0    1548924.3   1245.1
    Pipe-based Context Switching                   4000.0     245887.8    614.7
    Process Creation                                126.0      14835.9   1177.5
    Shell Scripts (1 concurrent)                     42.4      11658.0   2749.5
    Shell Scripts (8 concurrent)                      6.0       1524.7   2541.2
    System Call Overhead                          15000.0    1133850.0    755.9
                                                                       ========
    System Benchmarks Index Score                                        1635.0


    hdparm дает скорость гораздо медленнее вашей:
    hdparm -Tt /dev/vda
    
    /dev/vda:
     Timing cached reads:   12314 MB in  1.99 seconds = 6175.75 MB/sec
     Timing buffered disk reads:  98 MB in  3.01 seconds =  32.52 MB/sec


    hostnamectl показывает Virtualization: kvm

    Из минусов:
    1. Карты напрямую не принимают, робокасса. Оплачиваю через яндекс.деньги, платить надо каждый раз вручную
    2. Сервер у меня пустой, но мониторинг иногда показывает высокий Load Average (~1.3). У меня подозрение, что это не из-за моей нагрузки, а из-за соседей.

    На контабо тоже много смотрел, слюни пускал и тоже из-за отзывов отказался.

    Дополнено 17.05.2019

    Ужасно медленный диск. Отправка нового сообщения в багзиллу (мою, которая хостится на этом сервере, занимает секунд 10, за это время успеваешь подумать, что все поломалось). Простой тест, который проявляет проблему:

    xenon@gamma:~$ sync; time dd if=/dev/zero of=tempfile bs=1M count=1024; time sync
    1024+0 records in
    1024+0 records out
    1073741824 bytes (1.1 GB, 1.0 GiB) copied, 28.0031 s, 38.3 MB/s

    real 0m28.238s
    user 0m0.008s
    sys 0m3.468s

    real 0m8.662s
    user 0m0.000s
    sys 0m0.000s

    Для сравнения, аналогичный тест на ВСЕХ других VPSках у меня (hetzner, scaleway, ovh) дает результат в ~3 секунды (на самых дешевых VPSках).

    Hetzner CX11:

    xenon@charlie:~$ sync; time dd if=/dev/zero of=tempfile bs=1M count=1024; time sync
    1024+0 records in
    1024+0 records out
    1073741824 bytes (1.1 GB, 1.0 GiB) copied, 2.81574 s, 381 MB/s

    real 0m2.820s
    user 0m0.000s
    sys 0m1.684s

    real 0m0.416s
    user 0m0.000s
    sys 0m0.000s

    (здесь 2.9s суммарно. другой тест - 3.5s)

    Scaleway DEV1-S:
    root@echo:/home/xenon# sync; time dd if=/dev/zero of=tempfile bs=1M count=1024; time sync
    1024+0 records in
    1024+0 records out
    1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.12483 s, 955 MB/s

    real 0m1.256s
    user 0m0.008s
    sys 0m1.148s

    real 0m1.776s
    user 0m0.004s
    sys 0m0.000s

    итд.

    Простой скрипт, который делает 1000 SQL INSERT (в таблицу из одного поля INT, оно же index) на hetzner:
    mysqlclient 1000 inserts in 1.524 sec 656.084 inserts/sec
    mysqlclient 1000 inserts in 1.901 sec 526.160 inserts/sec
    mysqlclient 1000 inserts in 2.625 sec 381.001 inserts/sec

    на scaleway - 200-240.

    cloud4box:

    root@gamma:~# ./pysqlbench.py
    mysqlclient 1000 inserts in 305.283 sec 3.276 inserts/sec
    mysqlclient 1000 inserts in 36.313 sec 27.539 inserts/sec
    mysqlclient 1000 inserts in 109.429 sec 9.138 inserts/sec

    3 простых записи числа за секунду! Ручкой на бумаге почти так же можно записывать.

    В общем, дешевый тариф, много памяти, много диска для хранения хлама (storage), но надо использовать только то, что диск не трогает.
    Ответ написан
  • Существует ли лаконичное описание математики?

    xenon
    @xenon
    Too drunk to fsck
    Я вообще не очень понимаю, почему программирование роднят с математикой. Да, и там и там требуется умение строго мыслить и "раскладывать по полочкам", но даже какая-нибудь теорема Пифагора в программировании мне как-то не потребовалась. Все в рамках арифметики, ну и один раз, наверное, логарифмы и то, надо только их суть понимать, чтобы ценить алгоритмы, которые решают задачу с логарифмической сложностью. Возможно, если кто-то уходит в программирование физических процессов, поведение частицы в ускорителе рассчитывать или что-то подобное - там ему может быть и интегралы потребуются. Но мне за все время - нет.

    За двумя важными исключениями:
    1) Математическое моделирование. В общем-то это и есть урок алгоритмов и применения математики. Всякие задачи коммивояжера, раскроя материала и системы массового обслуживания. Мостик между реальным миром и математическими формулами.
    2) Дискретная математика. В первую очередь математическая логика. Это был единственный предмет, на который я ходил и понимал, что это мне важно, а не "чтобы сдать". И это, считаю, нужно вообще для развития, просто чтобы уметь более четко мыслить.

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

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

    xenon
    @xenon
    Too drunk to fsck
    В первую очередь поддержу большинство высказавшихся: пересмотрите свою ситуацию, увидьте ее правильно. Хостинг за 100 рублей - это не норма. Хостинг может стоить 100р, и быть достаточно хорошим. А может - и в тысячу раз дороже стоить. Смотря какие требования. Вот в данный момент вы пытаетесь перейти из низшей лиги (лишь бы страничка открывалась) явно куда-то повыше, в область high availability, чтоб ваши сайты падали почти так же редко как гугл. Это решается, но обычно не за 100р.

    Теперь, если все таки хочется дешево и сердито. Есть решение даже бесплатное практически. Разработайте схему backup & recovery. Например, каждый день скриптом в полночь копируйте все данные (файлы, базу) на домашний комп. Разработайте план, как восстановить это все на чистом сервере. Возьмите чистый сервер (хоть дома, на VirtualBox'е поднимите) и проверьте, чтобы вы по своей инструкции могли из бэкапов быстро все восстановить, без "творчества" и "интересно, почему оно не работает". Выберите пару провайдеров VPS которые могут вам *быстро* предоставить сервер. (Например, hetzner дает сервер быстро, за минуты, а ovh мне выдавал почти сутки). Ну и все. Живите на одном сервере, платите за один сервер. Но имейте бэкапы (и раз в полгода хотя бы проверяйте что можете все восстановить). А если вдруг что - то за 20 минут оплачиваете и получаете VPSку, по имеющейся схеме распаковываете свои сайты на ней, меняете DNS "и полетели"! :-)
    Ответ написан
  • какой язык выбрать?

    xenon
    @xenon
    Too drunk to fsck
    А какие темы, какие программы вас "возбуждают"? Ради чего вообще язык нужен? Но в любом случае, рецепт такой - зайдите на freecode, полистайте, выбирайте клевые программы, и пишите, что-то типа:
    Linux kernel - C
    Splunk - Python
    итд.

    А в конце пересмотрите, что получилось у вас на листочке.
    Ответ написан
  • Способы защиты пользовательских данных?

    xenon
    @xenon
    Too drunk to fsck
    Дополнительно к вышесказанному — попробовать изолировать их, хранить на отдельном сервере DB (чтобы на нем ничего не крутилось, через что поломать могут) и либо строго залимитировать доступ правами СУБД (если субд позволяет такое), либо вообще прямой доступ к базе отключить (только с локалхоста), а работа с ней — через свой API (хотя бы в виде простого PHP скрипта) который может иметь функции только для нужных операций.

    Например, посчитать всех пользователей из города Урюпинск. (выдает цифру, но не дает сами данные по пользователям).
    Если нужно именно получение данных из базы (напр всех данных по пользователю), тот же API может выдавать их, но не более 100 пользователей за день для одного оператора. Этого достаточно для работы, но нельзя будет «высосать» всю базу через «SELECT * FROM table».
    Ответ написан
  • Почта для домена: gmail vs. яндекс

    xenon
    @xenon
    Too drunk to fsck
    Яндекс.
    т.к. почту выкачиваю, особой разницы быть и не может (вебморда не важна, а работает достаточно хорошо и то и то).
    Кое-какие — заметки-наблюдения:
    1. Яндекс — бесплатно, gmail — нет.
    2. ПДД и ДНС-хостинг — удобно, бесплатно, записи в ДНСе появляются очень быстно после добавления, сразу же.
    3. Дополнительный бонус — возможность сразу получить джаббер-аккаунты для всех почтовых ящиков на своем домене. Просто выставив галочку.
    4. Спам режется просто отлично. (но и на гмейле в общем-то тоже)
    5. Заметил, что ДНС иногда ложится. Ненадолго, но уже пару раз замечал. (в момент когда не резолвится мой домен — проверяю, интернет есть, резолвинг с сервера яндекса не идет). Редко, ненадолго, но все таки.
    Ответ написан