Архив метки: программирование

Смысловой разбор текста для бота — заметка #1

Урвал вчера полчаса времени между работой, семьей и  сном на околопрограммирование.

2016-03-15-16-08-36

рисунок, карандаш, робот, Филлиппок

 Обработал список русских фамлий, сформировал правила превращения мужских фамилий в женские.
На очереди — обработка списков мужских и женских имен и формирование из всего этого добра базы данных в формате hdf. В чуть более далекой перспективе — обработка  списка условно «украинских» фамилий и условно «»армянских», не различающихся в зависимости от рода.
Цель — создание модуля определения имени в тексте/сообщении. Нажо будет учесть: полное и сокращенное до инициалов написание и падежи, написание с большой и маленькой буквы. Дальнейшая цель — поиск информации по персоналиям в Интернете и отдельных текстах
Есть небольшие сомнения в правильности использования именно hdf, а не SQL. Hdf, безусловно, проще в мспользовании вместе с Питоном и гораздо быстрее, но тот факт, что я его пока не очень хорошо знаю и информации о нем в рунете не так много, как хотелось бы, по смущает — как бы не вылезло потом чего-нибудь блокирующее, из-за  чего придется все переделывать.

Python. Подбор всех возможных вариантов

Занимаюсь, по мере сил, дальнейшим изучением  языка Python для целей, понятно, порабощения мира.

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

В итоге скрипт получился, но кажется мне он несколько тяжеловесным.
Может, кто натолкнет на мысль, как сделать прощще?

Читать далее

Маленькие Муки самообразования или как вывести демона на свет

Некоторое время назад я был свято уверен, что образование, в его текущем виде, отжило мвой срок. Технически, вся информация сейчас есть в интернете – начиная от фундаментальных трудов по любому вопросу, заканчивая практическими случаями. Знай себе, мучай Яндекс с Гуглом и образовывайся.

Однако жеж, не все так феерично получается на практике.

Вчерась озаботился такой простой, на первый взгляд, задачей, как автозапуск программы, следящей за отоплением, температурой и тд. Программка, кстати, становится все краше, обрастает всякими полезностями, типа логирования данных, расчетом времени работы каждого контура, добавляются новые датчики – в общем растет, дитятко.

Так вот, нашел в интернетах кучу примеров, как прописать эту программку в автозагрузку Линукса. Не с первого раза, но вроде получилось – прописал   ее в rc.local, перезагрузился, скомандовал «ps –eF» – и вот она, работает среди других процессов. И даже мейлы отправляет согласно заложенному алгоритму.

Одна незадача – работает она в фоне, не отображая положенную информацию в терминале. Чую что собака порылась в том, что надо каким то образом указать чтобы программа отображалась в нужном tty, а как это сделать – не знаю. Поиск ничего не дает, такое впечатление, что все нужны демоны, а явно работающие программы не нужны.

Ок, пошел с другого боку. Прописал автозагрузку в etc/xdg/autostart. В «ярлыке» указал, что запускать в Lxterminal. Не с первого раза, но опять таки все заработало. Но образовалась другая засада — во первых, в этом случае программа запускается, только если запущен vncserver, чего на самом деле не хочется, а во вторых – этот самый vnserver не получается вкорячить в автозагрузку, хучь то, как это делается, прописано в сети аж в нескольких вариантах. Но вот не работает и все.

И вот тут бы старший товарищ посмотрел бы опытным взглядом и указал бы на глупую ошибку неопытного программиста , но нету его, все сам по материалам из инету.

В общем, чувствую, еще придется помучаться.

З.Ы. параллельно с упоением читаю что ни попадя про Big Data.  И прям  зреет во мне уверенность, что как закончу с  робосмотрителем, так напишу прогарммулину, которая будет шерстить интернет и на основе этого информационного мусора выдавиать нужные и ненужные прогнозы.

Не программисты мы, но кое-что мОгем…

… или о блок-схеме рефлекторных механизмов полоумного дома:

Как только добился от программы управления отоплением работоспособности, так сразу понял, что можно сделать лучше и принялся ее переделывать. В результате запутался, как Макар, который потерял телят в трех соснах.

Чтобы привести   мысли в порядок — таки нарисовал схему программы (я понимаю, что с этого, по-хорошему, надо было начать, но я же не настоящий сварщик J)

Может, кому будет интересно посмотреть, покритиковать, дополнить. Каждый пункт – отдельно прописанная функция. То что курсивом – пока еще не написал.

Позже выложу код к кажной функции.

Запуск программы:

  • Определение времени старта
  • Чтение конфигурации из ini файла (целевые значения температуры, критические значения температуры, периодичность проверки, часы формирования email-отчета, список рассылки, etc)
  • Чтение температуры с датчиков
  • Чтение датчика наличия тока (датчика тока пока в наличии нет, планирую найти UPS, который может делится этой инфой с Raspberry)
  • Расчет времени следующего отчета
  • Отчет о запуске системы в консоль
  • Отчет о запуске системы на email
  • Запись показателей температуры в лог

Основной цикл (раз в минуту):

  • Чтение конфигурации из ini файла (чтобы можно было скармливать программе новые установки температуры без перезапуска программы)
  • Чтение температуры с датчиков
  • Чтение датчика наличия тока в сети
    • Если ток отсутствует => отправка email
  • Сравнение температур с критическими показателями
    • Если t < tcrit => отправка сообщения на email, отчет в консоль
  • Сравнение температур с показателями прошлой проверки
    • Если t > tlast +0.2, отчет в консоль, запись температуры в лог
    • Если t< tlast -0.2, отчет в консоль, запись температуры в лог
  • Сравнение температур с целевыми показателями
    • Если t < tnorm -1 and насос выключен => запуск соответствующего насоса, отчет в консоль, смена статуса насоса, определение времени старта насоса
    • Если t > tnorm +1 and насос включен => выключение соответствующего насоса, отчет в консоль, расчет времени работы насоса, запись времени работы насоса в лог
  • Сравнение текущего времени с временем следующего отчета
    • Если текущее время >времени отчета:
      • Отправка email
      • Отчет в консоль
      • Запись температуры в лог
      • Расчет времени следующего отчета

Информационной экологии и нубства вопрос

А вот вопрос у меня созрел к тем, кто поднаторел в делах компутерных и программировании:

Вот, допустим, есть относительно простой скрипт, который раз в минуту проверяет состояние датчиков и, в зависимости от их показаний, включает-выключает исполнительные механизмы, ну и после каждого цикла выводит на экран пять-шесть строчек о статусе системы. Предполагается, что работает он днями и даже месяцами. Кроме этого скрипта (и ОS Raspbian, конечно же) ничего на этом компе не работает

Имеет ли практический смысл периодически производить принудительную профилактическую перезагрузку компа? Ну, допустим раз в неделю? После перезагрузки  скрипт, конечно, автоматически запускается заново.

 

Есть у меня подозрение, что от десятитысчекратных повторений скрипта где-то будет накапливаться информационный мусор, который, накопившись до критического предела, может повлиять на работу системы. Ведь одних только строк со статусом на экране за неделю наберется 50-60 тысяч.

Неопытности и нубства вопрос

Допустим есть цикл, который делает действия А и Б через какие то неравные и непрогнозируемые периоды времени. Ну включает-выключает двигатели, измеряет расстояние радаром, живет своей жизнью. Это понятно, это просто.

При этом мне еще кровь износу нужно мигать светодиодом и важно, чтобы мигание шло с ритмом 1 сек. (на само деле неважно с каким, важно, что эта частота не ложится на такт основного цикла).

Нутром чую, что решение есть и оно на поверхности, и я просто о нем не знаю, ибо зело глуп и неопытен. Или два параллельных процесса нельзя запрограммировать программными средствами и нужно программно активировать какую-то аппаратную штуку, которая и будет мигать светодиодом?

Или условия задачи неполные?