Ответы пользователя по тегу Python
  • Какой алгоритм сравнения md5?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    По идее и при правильном MD5, результат вычисления хеша должен максимально соответствовать закону нормального распределения.
    Другими словами, MD5 хеши от двух файлов с различием в один бит должны соответствовать друг другу, как произвольная выборка двух значений белого шума.
    Иными словами - два хеша от двух разных файлов соответствуют друг другу, как два произвольно взятых значения.
    Еще проще - хеши MD5 сравнивать бесполезно!
    Ответ написан
    Комментировать
  • Возможно ли поднять http сервер средствами python?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Если приложение полностью на питоне, то рекомендую или www.tornadoweb.org
    Или www.cyclone.io
    Последним сам пользуюсь в связке с twisted. Он собственно от торнадо ничем не отличается.
    И один и второй держат очень хорошие нагрузки 10К, встроенная система темплейтов и все дела. Куча примеров и документации, очень просты для разработки. Но! Приложения должны быть асинхронными, как минимум та часть, что за веб отвечает. Можно выкрутиться, например через очереди сообщений, но все от задач зависит.
    Ну и традиционный путь nginx + gunicorn/uwsgi, если нужны фласки, джанго и прочее
    Ответ написан
    Комментировать
  • Почему код так себя ведёт?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    А потому что винда! Она не меняет каталог, если происходит только выбор диска.
    Вызовите cmd и сделайте следующее:
    Microsoft Windows [Version 6.1.7601]
    (c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.
    C:\Users\leah>cd C:
    C:\Users\leah
    C:\Users\leah>cd C:\
    C:\>

    Соответственно, вам к local_drive достаточно добавить "\"
    os.chdir(self.local_drive+os.sep)
    Ответ написан
    3 комментария
  • Что можно сделать на Tornado?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Для чего я использую tornado, точнее cyclone.io, порт tornado под twisted.

    - для системы miidleware ТВ-приставок. Приставка лезет за страничкой к серверу, а в остальное время общается с ним по json/REST/comet. Админка статистики этого дела работает на отдельном порту и содержит 10 страниц + json/comet/rest.
    - для системы доступа к кластеру с тонких клиентов, сервер отдает данные в json о доступных точках входа на сервера кластера и запоминает выбор пользователя. Всего 30 строк кода, Карл :-) С одной стороны сервер подключается в influxdb, с другой отдает данные пользователям.
    - для админок к разным устройствам
    - для вещей, когда просто нужен вебсервер и шаблоны, и не нужна база данных, ORM, и куча лишнего говна.
    - для вещей, когда web-интерфейс как небольшая часть остального функционала
    - для web, когда нужно быстро туда-сюда прогнать данные.

    Если посмотреть на отличия с django, то django умеют делать отличный фреймворк для web, а торнадо - отличный фреймворк для http!

    Дополнил
    А чего далеко ходить. Простая конфигурилка для линукса, интерфейсы, логин/пароль, просмотр и конфигурилка запущенных служб. Раньше я это делал на webmin, теперь cyclon + angularjs.

    А вот.. вот делаю дизайн html для битрикс (уж простите...). Как-то нужно смотреть html/css + картинки + javascript, причем, все с путями реального сайта - 10 минут и у меня всё готово. Ну не апач с nginx для этого разворачивать же?

    Ну и как-то была задача типа чата (для удаленных устройств), когда нужно было обеспечить около 10к подключений. Без танцев с бубном и минимум кода.

    В общем везде, где просто нужен быстрый и простой web-сервер с моторчиком из питона. Раньше я для этого использовал jetty (java) с моторчиком на яве соответственно. На питоне это проще в два/три раза только из-за того, что можно по ssh зайти и тупо поправить в коде без компиляции (maven) и среды разработки (eclipse).
    Ответ написан
    6 комментариев
  • Разыскивается асинхронный фреймворк/идея под python 3.4+?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    А чем twisted не угодил? Тут только могу erlang и scala предложить. Хотя и java8 со spring-boot очень сексуальная стала.
    Ответ написан
    Комментировать
  • В чем отличие сервисной шины предприятия(ESB) от брокеров сообщений (например RabbitMQ)?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Простым языком. ESB помогает связать кучу разрозненных приложений в единое целое. Например. Есть старый ftp, email серверы и новое приложение j2ee. Нужно, по приходу файла на ftp сообщить об этом по email и обработав, залить через REST в j2ee приложение. ESB будет сканировать папку на ftp, сообщит об этом по email, отпарсит файло и пульнет результат по http в j2ee.
    В нутрях у ESB обычно прячется MQ, но не всегда.

    MQ, собственно, занимается умной доставкой сообщений, и только, предоставляя пару тройку API для этого.

    Другими словами, ESB не подразумевает внедрения нового кода в старые приложения, MQ требует использовать во всех приложениях совместимый API.
    Ответ написан
    6 комментариев
  • Как управлять LPT портами через Python?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Я не совсем понимаю эту фразу
    "как видеть(получить адреса) именно тех lpt портов, к которым подключены какие-либо устройства."

    Параллельный порт - просто набор TTL-линий GPIO, возможно с прерываниями. Никакого протокола для определения устройств у него нет и быть не может по определению! Это не USB.
    Может быть поможет вот это - logix4u.net/parallel-port/15-a-tutorial-on-paralle...

    Ну а на счет программирования под питон рекомендую попробовать pyserial, там есть модуль для параллельного порта (но я его не пробовал). Сам программирую через эту библиотеку серийные порты и устройства на них. pyserial.sourceforge.net/pyparallel.html
    И да, очень внимательно прочитайте Note!
    The lp(4) module must be unloaded, rmmod lp. lp claims exclusive access to the port and other programs won’t be able to use it.
    The ppdev(4) module needs to be loaded, modprobe ppdev. When udev is in use, (default with 2.6 kernels) this will create a /dev/parport0.
    The user needs to have write permissions to /dev/parport0. Many distributions have an lp group that owns the device; the simplest is to add the user account to this group. Simply changing permissions on the device is not the best strategy as they will be reverted to their defaults next time the driver is loaded.
    Ответ написан
    Комментировать
  • Какой инструмент выбрать для автоматизации работы с VT100?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Bombus, сначала вы делаете библиотеку, чтобы выдавать команды VT100 (это со стороны контроллера), а затем ищете решение отрендерить посылки VT100 в картинку и отслеживать изменения областей экрана. Я правильно понимаю?! Что-то это мне напоминает...

    Если по хорошему, сделайте со стороны контроллера переключение режимов - данные/визуальный.
    В визуальном режиме работайте посылками VT100 - красиво, наглядно, можно подключиться терминалом... В режиме данных обменивайтесь данными, хоть по modbus - надежно, машиночитаемо и т.д.
    Для переключения режимов можно использовать какую нибудь текстовую последовательность, например ++++====++++=1 переход в визуальный режим, и ++++====++++=2 переход в режим данных.
    Если режим данных у нас не основной, то из него можно выходить по какому нибудь таймауту, например после 5 минут без ответа на посылки. Ну и наоборот тоже...

    И да, многие старые программы типа kermit подобным образом и переключали режимы работы...
    Ответ написан
  • Совет начинающему программисту. Как следует подходить к приобритению навыка OOP?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Ну, для начала почитать паттерны проектирования, они изначально были следаны для явы, некоторые к питону прямо не относятся (в силу того, что на питоне можно вообще без классов, и можно вообще в стиле функционального программирования), но дают хорошую базу именно в ООП. С другой стороны, если в яве дизайн именно ООП, то на питоне иной раз не хочется и класс заводить, а пишешь в стиле функциональщины.
    Наверное первое что нужно сделать, изучить области видимости и помечтать как они могут пригодиться...
    Ответ написан
    2 комментария
  • Где взять csrf token для lk.megafon.ru?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Так ведь все просто!
    Фома состоит из трех полей
    CSRF - тип hidden, в значении value как раз и лежит то, что вам нужно.
    j_username: тут все понятно
    j_password: тут тоже

    Нужно:
    1) запросить страницу /dologin/ (запрашивать страницу нужно каждый раз при новом логине)
    2) отпарсить html и выбрать значение value из
    3) Отсылаем все ТРИ поля (CSRF, j_username, j_password) на /dologin методом post.
    4) Получаем ответ и смотрим на куки и прочую фигню..

    Отпарсить
    from HTMLParser import HTMLParser
    import urllib2
    req =  urllib2.urlopen("https://lk.megafon.ru/dologin/")
    data = req.read()
    class MyHTMLParser(HTMLParser):
    	def handle_starttag(self, tag, attrs):
    		attr = dict(attrs)
    		if tag == "input" and attr.get('name', "") == "CSRF":
    			print "Encountered a start tag:", tag, attr["name"], attr["value"]
    
    parser = MyHTMLParser()
    parser.feed(data)

    Encountered a start tag: input CSRF 2c8b2246-6e99-4469-924f-2c8086cd2dae
    Ответ написан
    Комментировать
  • Как организовать двойную очередь в Python?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Две очереди, одна для всех сообщений, другая - для ожидающих.
    Воркер:
    1) получает сообщение из общей очереди
    2) проверяет блокировку по devID
    3) если блокировки нет:
    3.1) ставит блокировку на devID
    - делает работу
    - освобождает блокировку на devID
    3.2) блокировка есть:
    - перепубликует сообщение в очередь ожидания, ТОЛЬКО если оно из основной очереди
    4) проверяет очередь ожидания
    - если там сообщение, то возвращается на п2
    - иначе на п1

    Как-то так... Ну и рассмотреть вопрос на счет дидлока, когда сообщение в очереди ожидания блокируется повисшим воркером...
    Ответ написан
    6 комментариев
  • Как объеденить кучу Excel файлов в один?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Еще предложу посмотреть на Apache POI poi.apache.org/spreadsheet/index.html , который используют для чтения и генерации excel. Написан на java, есть куча примеров по чтению и сознанию xsl-файлов - poi.apache.org/spreadsheet/examples.html
    Проект зрелый, активно развивается и используется в куче программного обеспечения -
    poi.apache.org/spreadsheet/how-to.html - вопросы/ответы с кодом и ссылками на примеры.
    В свое время, 8 лет назад, использовали его для генерации счетов/формуляров.

    PS. А вот и пример как это сделать - www.coderanch.com/t/420958/open-source/Copying-she...
    Читать всю ветку.
    Ответ написан
    Комментировать
  • Как можно сделать таймер?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Вот так можно на твистед www.saltycrane.com/blog/2008/10/running-functions-...
    Ну и в официальной документации twistedmatrix.com/documents/13.2.0/core/howto/time.html
    На твистед и всю игру можно забацать.
    Ответ написан
    Комментировать
  • Как сделать многопоточный парсер URL-ов на Python?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    А вот на любимом twisted - technicae.cogitat.io/2008/06/async-batching-with-t...
    И да, ни одного треда не пострадало, всё в один поток!
    Ответ написан
    Комментировать
  • Что можно использовать в качестве блогосоциального движка а-ля Habrahabr, LiveStreet на python?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Как раз сейчас разбираюсь с mezzanine cms (оно на django). Тоже встал вопрос небольшой социальщины. Вот здесь туториал как повторить reddit на mezzanine - blog.jupo.org/2013/04/30/building-social-apps-with...
    Надеюсь, будет полезно.
    Ответ написан
    Комментировать
  • Как сделать чатик на Python?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Ну уж если о чатиках заговорили, то простой чатик пишется на https://twistedmatrix.com за 1 час - twistedsphinx.funsize.net/projects/web2/howto/intr... . А на cyclone.io (который на twisted и полный аналог tornado) за 10 минут, тем более он там в примерах - https://github.com/fiorix/cyclone/tree/master/demo...
    На торнадо тоже пример есть - https://github.com/tornadoweb/tornado/tree/master/... (но это не twisted)
    Ответ написан
    Комментировать
  • Как правильно выполнять цикл по времени?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Берете twisted и делаете:
    www.saltycrane.com/blog/2008/10/running-functions-...
    Ну и кстати рекомендую этот фреймворк, сам на нем работаю.
    Ответ написан
    Комментировать
  • Как передавать значения между работающими скриптами?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Можно через базу данных тира redis или mongodb, а можно и через rabbitmq!
    Ответ написан
    Комментировать
  • Как организовать шаблонизатор на Python?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Ага, похоже вам нужен свой DSL (Domain Specific Language). Это можно сделать например на pyparsing. Красивый пример и ссылки в ответе на этот вопрос - stackoverflow.com/questions/14433785/dsl-in-python...
    Ну и гугл в помощь по python+dsl
    Ответ написан
    Комментировать
  • Как улучшить производительность скрипта python?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Используйте numpy для работы с большими массивами, будет щазтие! Там же есть scipy и работа с изображениями, может пригодится...

    import numpy
    ...
    for file in files[:20]:
                print file
                dataset = OpenFile(file)
                # data = ReadAsArray()
                data = numpy.fromfile(dataset, dtype=numpy.dtype(numpy.int16))
                dataset.close()
                print data [3000, 5000]
    Ответ написан
    1 комментарий