• Что интересного полезного можно писать на GO для прокачки как разработчика?

    xenon
    @xenon
    Too drunk to fsck
    У Go есть хорошее преимущество - он быстрый, относительно интерпретируемых языков. У меня была идея сделать на базе Go сервис быстрых вычислений, куда можно накидать разных данных из другой программы (на php/python), и вызвать какую-то операцию, которую этот сервис сделает быстрее, чем родной интепретируемый код.

    Примерно, как redis делает для key-value данных. Ведь почти все нужные от редиса функции можно реализовать и внутри python/php программы, но redis все сделает гораздо быстрее.

    Одна из задач для "вычислителя" - безопасный eval(), я такой делал для python (evalidate). eval() почти всегда - очень опасная функция, чтобы использовать ее в своем коде, но хочется. evalidate - только для python, и это плохо. Удобнее было бы как отдельный сервис (на том же хосте), куда можно загрузить данные, юзерский код и исполнить его. Причем сервис с максимально ужатыми правами, чтобы были минимальные риски по безопасности. Я думал сделать evalidate как сервис, но на пайтоне он слишком медленный был бы, а вот на Go - в самый раз.

    Пример типовой задачи: Онлайн-магазин, у нас есть список товаров (может быть в mysql или в redis или прямо в нашу программу загружается как список). Потом пользователь задает какой-то свой сложный поиск, вроде "Найти все смартфоны до 25 000 рублей, с памятью 128, но не Huawei, а если Apple, то можно и до 50 000" и медленное веб-приложение прокидывает это запрос на наш быстрый вычислитель и получает от него ответ.

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

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

    xenon
    @xenon
    Too drunk to fsck
    В моем случае, в моем боте, с той либой, которую я использую:

    tgname = message.from_user.username

    Чтоб можно было ответить конкретнее - надо знать, какая библиотека для телеграм-бота используется.
    Но универсальный ответ - смотрите все доступные в коде данные (параметр message обычно), и печатаете его на консоль или делаете dir(message) и увидите имеющиеся поля. Что-то из них наверняка будет тем, что нужно.
    Ответ написан
    Комментировать
  • Используются ли сегодня back end templating engines?

    xenon
    @xenon
    Too drunk to fsck
    Не как вариант ответа/решения, а как дополнение - мне кажется, сегодня все больше "новых статических" вебсайтов (JAMstack), так что, шаблонизаторы (стандартные или собственные) используются еще и в них.

    Но если цель - просто учеба-образование, то изучать стоит на уровне чуть-чуть глубже, чем hello world, может на уровне первой четверти-половины туториала. А остальное просто пробежаться глазами по диагонали, чтобы примерно понять о чем там. А когда (если) возникнет необходимость в более-менее сложных аспектах этого - тогда и вникать уже.
    Ответ написан
    2 комментария
  • Как сделать sleep на N секунд либо до прихода HTTP запроса (асинхронный cron с http сервером)?

    xenon
    @xenon Автор вопроса
    Too drunk to fsck
    Был совет использовать Firebase Cloud Messaging (FCM), которым доставляются push уведомления на устройство. Немного странно, но похоже, его невозможно использовать на десктопе в качестве клиента (принимать сообщения). В python библиотеке нет кода для этого. Даже задал вопрос разработчику PyFCM, его ответ:

    You can only receive messages via an Android, iOS or web client https://firebase.google.com/docs/cloud-messaging#h...

    An iOS, Android, or web (JavaScript) client app that receives messages via the corresponding platform-specific transport service.



    Для себя решил так:

    from http.server import BaseHTTPRequestHandler, HTTPServer
    class RequestHandler(BaseHTTPRequestHandler):
            # implementation
    
    httpd = HTTPServer((self.address, self.port), RequestHandler)
    httpd.timeout = 1
            
    while True:
        httpd.handle_request()
        # check if quit


    Использование метода handle_request вместо serve_forever() позволяет нам получать управление каждый раз по обработке каждого запроса и проверять, не пора ли выйти или исполнить другие действия. А использование timeout=1 дает нам возврат через 1 секунду даже если запросов не было. В итоге
    Ответ написан
    Комментировать
  • Стоит ли идти в NoCode разработку?

    xenon
    @xenon
    Too drunk to fsck
    Общее правило: Если технологию можно легко освоить в короткое время, тогда, даже если такая технология будет в самом деле ценной, все равно, в ней будет слишком много специалистов, высокая конкуренция и низкие доходы. (например, Uber. Стать таксистом несложно, зарабатывают таксисты немного.)

    Либо же технология в принципе будет мало востребована (каждый, кто хочет, сам себе может пожарить яичницу и заварить растворимый кофе, специалисты, освоившие эту технологию не слишком востребованы)
    Ответ написан
    1 комментарий
  • Создание DNS сервера с ответом по умолчанию?

    xenon
    @xenon
    Too drunk to fsck
    Может быть проще на всех доменах прописывать алиасы (CNAME) на другое доменное имя, и тогда если надо всем "переехать" - то достаточно будет поменять только одну запись ?
    Ответ написан
  • Почему 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 берется)
    Ответ написан
    1 комментарий
  • Как удалить все неиспользуемые зависимости в Linux?

    xenon
    @xenon
    Too drunk to fsck
    apt autoremove может быть? (в новых debian'ах просто apt, не apt-get)
    Ответ написан
    Комментировать
  • Как сделать авторизацию через python?

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

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

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

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

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

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

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