Pull to refresh
128
0
Сергей @seriyPS

backend

Send message
Ходил как то на митап по языку Go, там говорили, что есть 2 вещи, куда имеет смысл воткнуть проверку для прерывания выполнения процесса: в вызовы функций (это они реализовали в версии 1.2) и в каждую итерацию for / while цикла (ещё не реализовали).
В Erlang оба этих случая сводятся к одному, т.к. реализовать цикл без вызова функции невозможно в принципе (только рекурсия).
Забавно. Совсем недавно написал почти такую же статью, только с более практичной целью.
Ну, не так уж много на 76305 строк кода =)

Две трети из этого в contrib/gis почему-то.

Ладно, я всего лишь высказываю своё мнение. То что кто-то с ним не согласен меня устраивает.
Тогда Python вам противопоказан, ИМХО.
Пример — это нормальный код. Или вы серьёзно считаете, что «не-фиговый код» должен быть таким:
    def format(self, number):
        if hasattr(number, 'as_integer_ratio'):
            return '%i/%i' % number.as_integer_ratio()
        else:
            #?????

docs.python.org/2/glossary.html#term-eafp

В наследовании от float почему-то не вижу ничего плохого :-\
Не очень сочетается с duck-typing. Ведь без PyFence достаточно было чтобы у объекта number был метод .as_integer_ratio() чтобы код работал, а с fence придётся обязательно наследоваться от float, иначе ругнётся.
Конечно, на практике этим не часто пользуются, но идея именно в этом.
В оригинальной статье написано, что в нидерландах находился прокси-сервер. Т.е. кейлоггер вытаскивалка паролей собранные данные отправляла на нидерландский сервер, а тот пересылал на основной.

Ну и примечание: Pony это не кейлоггер, а выковыривалка сохранённых паролей из firefox/chrome/TheBat/ftp/ssh клиентов и т.п. (~95 различных программ).
Кстати, занятная штука — почти полностью на ассемблере написана — тут можно утёкшие исходники посмотреть app.box.com/s/9r15nwfqqsd4f8ioceir forum.xakepinter.net/showthread.php?t=4859
Это я вчера информацию нарыл когда на оригинальную новость наткнулся.
Отлично. Спасибо.

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

Например, для разбивки на предложения написал простую стейт-машину
Скрытый текст
SPACE, DOT, DOT_SPACE, OTHER = range(4)
DOT_SYMBOLS = {u".", u"?", u"!", u"\u2026"}
_STRIP_SYMBOLS = "".join(DOT_SYMBOLS) + " "


def split_to_sentences(text, bad_words=set()):
    """Finite-state machine that split text to sentences.
    See tests.sentences for tests and examples"""
    state = None
    sentence = ""
    last_word = ""
    for char in text:
        if state == DOT_SPACE and char.isupper():
            # TODO: check that last word is not "г." "ул." etc.
            sentence += last_word
            # print last_word, "LAST WORD"
            if last_word.strip(_STRIP_SYMBOLS) not in bad_words:
                yield sentence
                sentence = ""
            last_word = char
            state = OTHER
        elif state in (SPACE, DOT_SPACE) and char == " ":
            pass                # remove duplicate spaces
        elif state in (SPACE, DOT_SPACE) and char not in DOT_SYMBOLS:
            # any char, except space, after space -> new word
            sentence += last_word
            last_word = char
            state = OTHER
        elif state == DOT and char == " ":
            last_word += char
            state = DOT_SPACE
        elif char in DOT_SYMBOLS:
            last_word += char
            state = DOT
        elif char == " ":
            last_word += char
            state = SPACE
        else:
            last_word += char
            state = OTHER
        # print char, state
    if last_word:
        sentence += last_word
    if sentence:
        yield sentence



Для морфологии взял pymorphy. Но согласен — тема сложная. А если пытаться учитывать ошибки и опечатки…

А почему решили завязаться на Amazon? Для очереди я, например, успешно использую RabbitMQ, и т.п. Плюс вы говорите у вас админ был выделенный…
Ну SQL то он вроде как statefull. Опять-же транзакции там.
Условно говоря (с синтаксисом не знаком, так что псевдокод):

database execute query ("BEGIN")
database execute query (sql"select balance from users where id=${one}")
if balance >= amount:
    database execute query (sql"update users set balance=balance - ${amount} where id=${one}")
    database execute query (sql"update users set balance=balance + ${amount} where id=${two}")
database execute query ("COMMIT")

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

Про исправление ошибок: в своё время реализовал технику из этой статьи habrahabr.ru/company/sphinx/blog/61807/ — на удивление хорошие результаты показало www.1aauto.com/search?words=menyfold (пример работы)
Оказалось, что всё намного проще. После экспериментов заметил, что у меня в EHLO подставлялся не реальный домен сервиса а локальный хостнейм из /etc/hostname
После того как это поправил проблема вроде исчезла. Но нужно ещё понаблюдать.
А, в смысле «спамеры не будут делать много попыток отправить письмо, а легальным сервисам хочешь-не-хочешь а нужно». Что то такое читал…

SPF добавил несколько дней назад, DKIM в процессе. DMARC без DKIM не работает, так что тоже в процессе.
PTR я так понимаю не получится настроить, если с одного сервера отсылается почта с нескольких доменов.
Не могу не высказаться в поддержку rabbitmq любят у вас там гвозди закручивать отвёртками...
Настраивать там на самом деле нечего (у меня очереди по 2.7млн сообщений обслуживались установленным из стандартного репозитория Ubuntu стандартным же rabbitmq, в конфиг вообще не заглядывал).
Падающие воркеры прекрасно обрабатываются за счёт отложенного ACK (консьюмер забрал сообщение из очереди а потом закрыл коннект (умер) не прислав ACK — сообщение возвращается обратно в очередь).
Можно для каждого фотосервера создать отдельную очередь и следить по длинне очереди за прогрессом. Можно воркеров подключать к нескольким очередям, можно перекидывать между ними.

Насчёт транзакционности не знаю — в посте об этом не было сказано. На мой взгляд проблема надуманная, но вам виднее наверное.
Спасибо, интересно.
Немного не по теме вопрос, но всё-же: у меня есть проектик мелкий связанный с электронной почтой и там используется свой SMTP релей. Проблема в том, что при попытке отправить почту на yandex ящики постоянно возникает ошибка
retries_exceeded {temporary_failure,"mx.yandex.ru",<<"451 4.7.1 
Sorry, the service is currently unavailable. Please come back later. aybVX4avs9-66CaKdFk\r\n">>}
retries_exceeded {temporary_failure,"mx.yandex.ru",<<"451 4.7.1 
Sorry, the service is currently unavailable. Please come back later. boXDD0YAFa-6aC0CbEh\r\n">>}

Если повторять попытку отправки много раз, то всё-же письмо проходит. С другими сервисами (mail.ru, gmail) всё проходит с первого раза.
Это нормальное поведение и просто нужно продолжать попытки или всё-же где то закрался баг?
Вручную? Не стоит. Всё сделано до вас.
Как в .NET не знаю, на python делал это с помощью github.com/kmike/pymorphy2
В http1.1 keep-alive устанавливается по умолчанию. WRK не шлёт connection: close если вы присмотритесь повнимательнее. Хотя я добавлял поддержку свитча с опционально отключаемым keep-alive github.com/seriyps/wrk/blob/master/src/wrk.c#L70 но её не приняли.
Похоже здесь blog.nella.org/?p=879 читал. Да, просто похожая статья.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Works in
Date of birth
Registered
Activity