Чем геттекст то не угодил?
Там же всё это давно есть — и множественные формы (одно яблоко, 2 яблока, 5 яблок) и контекст (msgctxt) и память переводов (впрочем, зависит от софта для перевода) и утилиты для извлечения фраз из исходников и формат хранилища с O(1) доступом (.mo) и куча опыта.
Разве что многоуровнего фейловера нет, но это мелочь.
tree = etree.HTML(html)
for block in tree.xpath("//div[@class='product']"):
img = block.xpath("//img/@src")[0]
name = block.xpath("//tr[@class='name']")[0].text
id = block.xpath("//tr[@class='id']")[0].text
Поздравляю с первым проектом, но код конечно оставляет не лучшие впечатления. Книжечку бы вам почитать какую-нибудь.
erl2048_app:start/2 должна возвращать Pid корневого супервизора приложения, у вас же возвращается Pid подключения к БД. Это очень плохо, т.к. будет некорректно работать application:stop и не будет детектиться падение процессов приложения.
(причем inets, mochiweb вряд ли реально нужно стартовать) но более правильный подход — указать все эти приложения в том самом app.src файле и использовать функцию application:ensure_all_started/1
trac.pjsip.org/repos/wiki/Python_SIP/Calls Изучал вопрос — на этой библиотеке можно за пару вечеров написать (она поддерживает проигрывание звукового файла в телефонный звонок по SIP). Но до реализации руки не доходят.
Одному другу моей подруги СМС, тьфу тьфу, не приходят, но раза 2 в неделю на каждом этаже в подъезде развешивают наклейки с рекламой суши и компьютерной помощи.
Раньше он им на сайтах на форму заказа бота натравливал на пару суток, но потом это надоело (бота под сайт подстраивать), да и эффекта достаточного не было, плюс капчу стали вешать. Сейчас он всё хочет выкроить времени и на библиотеке trac.pjsip.org/repos/wiki/Python_SIP/Calls написать SIP бота, который через SIP названивал бы им на телефон из рекламки и зачитывал какой-нибудь поучительный текст. Можно пойти дальше и применить к продавцам MIX/Spice, которые любят заборы и асфальт разрисовывать. С учетом посекундной тарификации выйдет не дорого.
Он у вас почему-то не-MIME письма не принимает — молча закрывает сокет и всё. Понимаю, конечно, что plaintext письма почти никто не отправляет сейчас, но можно же хотя-бы по человечески по RFC ответить сообщением об ошибке и только после этого отключаться.
$ python
Python 2.7.3 (default, Feb 27 2014, 20:00:17)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import smtplib
>>> s = smtplib.SMTP('debugmail.io', 9025, 'localhost')
>>> s.login("*********************", "***************")
(235, '2.7.0 Authentication successful')
>>> s.sendmail("wasd@localhost", "to@localhost", "non-mime-plaintext")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/smtplib.py", line 734, in sendmail
(code, resp) = self.data(msg)
File "/usr/lib/python2.7/smtplib.py", line 502, in data
(code, msg) = self.getreply()
File "/usr/lib/python2.7/smtplib.py", line 361, in getreply
raise SMTPServerDisconnected("Connection unexpectedly closed")
smtplib.SMTPServerDisconnected: Connection unexpectedly closed
Received-SPF: softfail (google.com: domain of transitioning nobody@develop.re does not designate 78.47.190.161 as permitted sender) client-ip=78.47.190.161;
Забавно. Примерно для таких же целей написал для себя HTTP Echo сервис — это 100 строк на Python, собственный примитивный парсер HTTP. Но он не логгирует куда-то, а просто возвращает запрос как есть в теле ответа (ну, плюс в первой строчке IP и порт запросившего).
Главный минус — написан в блокирующем стиле и однопоточный. Но для личных нужд более чем достаточно.
Ну а что, conn.NewSession() на каждую команду вроде ничего сложного. Но это не так часто нужно. Обычно нужно подключиться и выполнить одну-две команды.
Но в докладе не об этом. Там именно распределённая сеть какая то используется в стиле «клиентский ПК подключается к 50 аггрегаторам, каждый из которых подключается к другим 50 аггрегаторам, каждый из которых подключен к N конечных серверов». И при этом ответы выдаются не как есть а тоже аггрегируются, мерджатся и т.п. Деталей сейчас уже не помню.
Там же всё это давно есть — и множественные формы (одно яблоко, 2 яблока, 5 яблок) и контекст (msgctxt) и память переводов (впрочем, зависит от софта для перевода) и утилиты для извлечения фраз из исходников и формат хранилища с O(1) доступом (.mo) и куча опыта.
Разве что многоуровнего фейловера нет, но это мелочь.
AnyWord<h-reg1, l-quoted>, а не регулярным выражением?Статья на lyse learnyousomeerlang.com/maps
Статья от Joe Armstrong joearms.github.io/2014/02/01/big-changes-to-erlang.html
erl2048_app:start/2должна возвращать Pid корневого супервизора приложения, у вас же возвращается Pid подключения к БД. Это очень плохо, т.к. будет некорректно работать application:stop и не будет детектиться падение процессов приложения.Вместо
лучше написать
(причем inets, mochiweb вряд ли реально нужно стартовать) но более правильный подход — указать все эти приложения в том самом
app.srcфайле и использовать функциюapplication:ensure_all_started/1Как уже сказали,
start/0лучше перенести вerl2048_app.Для запуска обычно так делают:
(см
-s erl2048_app start).На что переходить? Кроме Dropbox есть варианты?
Раньше он им на сайтах на форму заказа бота натравливал на пару суток, но потом это надоело (бота под сайт подстраивать), да и эффекта достаточного не было, плюс капчу стали вешать. Сейчас он всё хочет выкроить времени и на библиотеке trac.pjsip.org/repos/wiki/Python_SIP/Calls написать SIP бота, который через SIP названивал бы им на телефон из рекламки и зачитывал какой-нибудь поучительный текст. Можно пойти дальше и применить к продавцам MIX/Spice, которые любят заборы и асфальт разрисовывать. С учетом посекундной тарификации выйдет не дорого.
по человеческипо RFC ответить сообщением об ошибке и только после этого отключаться.$ python Python 2.7.3 (default, Feb 27 2014, 20:00:17) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import smtplib >>> s = smtplib.SMTP('debugmail.io', 9025, 'localhost') >>> s.login("*********************", "***************") (235, '2.7.0 Authentication successful') >>> s.sendmail("wasd@localhost", "to@localhost", "non-mime-plaintext") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.7/smtplib.py", line 734, in sendmail (code, resp) = self.data(msg) File "/usr/lib/python2.7/smtplib.py", line 502, in data (code, msg) = self.getreply() File "/usr/lib/python2.7/smtplib.py", line 361, in getreply raise SMTPServerDisconnected("Connection unexpectedly closed") smtplib.SMTPServerDisconnected: Connection unexpectedly closedReceived-SPF: softfail (google.com: domain of transitioning nobody@develop.re does not designate 78.47.190.161 as permitted sender) client-ip=78.47.190.161;Вы так пишете потому, что не работали с Erlang (ну или Go / gevent etc).
Главный минус — написан в блокирующем стиле и однопоточный. Но для личных нужд более чем достаточно.
conn.NewSession()на каждую команду вроде ничего сложного. Но это не так часто нужно. Обычно нужно подключиться и выполнить одну-две команды.Но в докладе не об этом. Там именно распределённая сеть какая то используется в стиле «клиентский ПК подключается к 50 аггрегаторам, каждый из которых подключается к другим 50 аггрегаторам, каждый из которых подключен к N конечных серверов». И при этом ответы выдаются не как есть а тоже аггрегируются, мерджатся и т.п. Деталей сейчас уже не помню.