Ответы пользователя по тегу Python
  • Распознавание возраста и эмоций по фотографии?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Ответ написан
    Комментировать
  • Python Tornado. Как правильно отправить JQuery AJAX запрос?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Подозреваю, что дело в кешировании. Во всяком случае есть демо - chat - https://github.com/tornadoweb/tornado/tree/stable/...
    И обязательно посмотрите, как выполнена работа с xsrf в javascript - https://github.com/tornadoweb/tornado/blob/stable/...

    PS, я данные вообще через хедеры передаю, тогда в голову такой выход не приходил, а сейчас переделывать уже не буду.
    Ответ написан
  • Лучшие технологии для поиска в базе данных через regex?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Я так думаю, что как раз ES здесь очень даже к месту. Тем более, что поиск будет осуществляться по термам слов, и можно будет искать не только "Судья на заседании: Иванова", но и "Судьи в председательстве Ивановой", "судью Иванову" и прочее.

    Попробуйте, ES имеет особенности, но не так уж и страшен.

    PS. Уж как минимум, ES позволит сократить список рассматриваемых документов до разумного минимума, по которому можно и программный regexp сделать.
    Т.е. сначала выбираем из ES все доки с судьями, заседаниями и Ивановой, а уже по результатам поиска делаем фильтрацию своим программным регекспом.
    Ах, да, совсем забыл - есть еще скрипты, которые могут как раз это и сделать на стороне самого ES! Ну и люсиновский поиск поддерживает "точный поиск" фраз, если чо..
    Ответ написан
    1 комментарий
  • Что можно использовать для хранения массива данных с оперативным запросом данных по условию в Python?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Если табличные данные типа логов, то альтернатив куча, весь вопрос - как эти данные обрабатываются. Альтернативы,
    нетрадиционной ориентации:
    - influxdb, mongodb, elasticsearch, redis
    традиционной:
    - mysql
    - делее, везде.
    Ответ написан
    Комментировать
  • Как организовать взаимодействие между клиентом и сервером на питоне?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Самый нормальный вариант - twisted! Можно взять самый простой пример echoclient/echoserver twistedmatrix.com/documents/current/core/examples
    Ну и вариант по-сложнее - https://habrahabr.ru/post/97201/

    Также немного нужно вывернуть мозг с асинхронным программироавнием и deferred.

    Собственно у меня это получилось за два-три дня. Сейчас куча вещей на нем написана, могу подсказать :-)

    Да хоть сервер (web) на нем поднять, к которому будут клиенты коннектиться и давать ему задания - дело 10 строк.

    Да, на твистед есть и аналог торнадо - cyclone.io
    Это практически полный аналог торнадо (и по производительности), но со всеми плюшками твистед. Я его тоже активно пользую, для веб-морд своих приложений.

    А вот и пример на скорую руку:
    import cyclone.web
    import sys
    
    from twisted.internet import reactor, threads
    from twisted.python import log
    
    def doLongCalculation():
        # .... do long calculation here ...
        return 3
    
    result = 0
    
    def doResult(x):
        global result
        result =  x
    
    class StartHandler(cyclone.web.RequestHandler):
        def get(self):
            # run method in thread and get result as defer.Deferred
            d = threads.deferToThread(doLongCalculation)
            d.addCallback(doResult)
            self.write("Start!")
    
    class StatusHandler(cyclone.web.RequestHandler):
        def get(self):
            global result
            self.write("Result = %s" % (result))
    
    if __name__ == "__main__":
        application = cyclone.web.Application([
            (r"/", StatusHandler),
            (r"/start", StartHandler)
        ])
    
        log.startLogging(sys.stdout)
        reactor.listenTCP(8888, application, interface="127.0.0.1")
        reactor.run()

    В глобальной переменной result, будет лежать значение после старта по обращению (я браузером пользовался) localhost:8888/start , которое отработается в треде методом doLongCalculation, а результат будет обработан методом doResult. Ответ смотрим браузером по localhost:8888

    В общем, вариантов масса.
    Ответ написан
    9 комментариев
  • Какой алгоритм сравнения 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...
    И да, ни одного треда не пострадало, всё в один поток!
    Ответ написан
    Комментировать