metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-02-02 11:45 pm

Тащемта Python

http://www.cacodaemon.org/content/weather.py (или с подсветкой: http://codepad.org/FxCWtYFD)

класс Daemon взят отсюда: http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/

Живет демоном, читает данные с ком-порта, парсит, складирует в rrdtool, рисует графики.
Надо бы подумать, как правильно указывать пути для файлов и картинок, где кошерно хранить конфиг, как выселить все константы и подписи для датчиков в конфиг, и как прикрутить к этому мини-сервис для раздачи текущей информации с датчиков по сети.
Заняло 5 часов времени, сильно меньше, чем аналогичное на хаскеле :)

PS: о сторонних либах в хаскеле: http://kkirsanov.livejournal.com/381144.html
Это фактически основная причина, почему хаскель занял настолько больше времени.

[identity profile] justy-tylor.livejournal.com 2012-02-02 09:19 pm (UTC)(link)
Админский конфиг кошерно хранить отдельным файлом на том же Python.
class NormalSettings:
    ...

class BloodyEnterpriseSettings:
    achtung = True
    ...

[identity profile] avnik.livejournal.com 2012-02-02 09:48 pm (UTC)(link)
Нед, это неправильный подход.
Пользователский/админский конфиг должен быть человекопонятным .ini,
(для кровавого энтерпайза есть адъскийъ ZCML еще)

[identity profile] crazy-coder.livejournal.com 2012-02-02 10:39 pm (UTC)(link)
yaml же!

[identity profile] justy-tylor.livejournal.com 2012-02-02 10:51 pm (UTC)(link)
Пользовательский редактировать гуём/вебмордой, хранить (например) в JSON. Много_пользовательский редактировать гуём/вебмордой, хранить в базе. И проверять по 100500 раз, чтобы не ломанули.

[identity profile] stdray.livejournal.com 2012-02-03 10:38 pm (UTC)(link)
Отдельный файл с конфигом на том же питоне человекопонятен.

[identity profile] eg-fread.livejournal.com 2012-02-02 09:49 pm (UTC)(link)
А можно ещё вот так (http://pastie.org/3305223).

[identity profile] hls-1141.livejournal.com 2012-02-02 09:59 pm (UTC)(link)
>>> path = rom+'.rrd'
>>> path = os.path.join(self.rrdpath,path)

Насколько я помню, строки в петоне неизменяемые.
path = os.path.join(self.rrdpath, rom.join('.rrd'))
Edited 2012-02-02 22:03 (UTC)

[identity profile] eg-fread.livejournal.com 2012-02-02 10:13 pm (UTC)(link)
rom.join('.rrd') приведёт к неожиданному результату. Чем конкатенация-то не угодила?

[identity profile] hls-1141.livejournal.com 2012-02-02 10:21 pm (UTC)(link)
Действительно, здесь я не прав.
path = os.path.join(self.rrdpath, rom+'.rrd'), так правильно.
Но не суть, я говорил, что в петоне строки менять нежелательно, т.е. объявил path и всё, не трогай.

[identity profile] avnik.livejournal.com 2012-02-02 10:32 pm (UTC)(link)
Если там не сериализация какая -- где по два символа склеиваются миллионы строк, то можно и забить, А если миллионы -- то cStringIO

[identity profile] metaclass.livejournal.com 2012-02-03 04:51 am (UTC)(link)
Если я правильно понимаю, как работают строки - предыдущее значение path соберется сборщиком мусора, точно так же как и результат операции rom+'.rrd', т.е. формально должно быть однохренственно, за исключением того, что явная иммутабельность все таки лучше.

[identity profile] eg-fread.livejournal.com 2012-02-03 08:20 am (UTC)(link)
Ребе, а вы мой комментарий выше сознательно не расскринили или не заметили?

[identity profile] metaclass.livejournal.com 2012-02-03 08:24 am (UTC)(link)
Не обратил внимания, что заскринен.
Идея хорошая, да.

[identity profile] theiced.livejournal.com 2012-02-02 11:28 pm (UTC)(link)
а теперь на руби, чо

[identity profile] bambr77.livejournal.com 2012-02-03 11:10 am (UTC)(link)
Вот я закуплюсь датчиками, и демона буду писать таки на руби :)