Автор |
Сообщение |
ATX555 Гуру |
|
Задал вопрос на НГС-е - толку "0", как будто что-то сложное.
Попытаюсь тут повторить (сам я совсем не программер):
появилась нужда упростить скрипт (т.к. работает на железяке под Линуксом и тормозит вывод).
Инет-сервис отдаёт дату по запросу
Код: |
cityDate = getXMLText("adc_database", "forecast", "day", "obsdate");
|
в формате mm/dd/yyyy
Затем её в виде текста прописывают в файл
Код: |
writeStringToFile("/tmp/cityDate.tmp", cityDate); |
и запускают скрипт преобразования
Код: |
dlok=getURL("http://127.0.0.1/cgi-bin/date.cgi"); |
Сам скрипт
Код: |
tmp_date=`cat /tmp/cityDate.tmp`
m=$(echo $tmp_date | awk -F/ '{print($1)}')
d=$(echo $tmp_date | awk -F/ '{print($2)}')
y=$(echo $tmp_date | awk -F/ '{print($3)}')
echo $d/$m/$y > /tmp/corr_cityDate.tmp |
переписывает дату в правильном формате дд/мм/гггг в другой файл,
откуда по мере необходимости её и считывают
Код: |
date=readStringFromFile("/tmp/corr_cityDate.tmp"); |
Как-то можно упростить процесс перекладывания дня и месяца без промежуточной записи в файл? |
|
|
|
|
Richard Ferlow Гуру Предупреждений : 2
|
|
А язык какой ? на php похоже
На php можно
$tmp = explode("/", "mm/dd/yyyy");
Получаем массив из трех элементов $tmp[0], $tmp[1], $tmp[2]
$date_converted = $tmp[1].'/'.$tmp[0].'/'.$tmp[2];
И с ним уже делаем что нужно.
С записью в текстовые файлы не приходилось работать, lдальше не скажу. |
|
|
|
|
ATX555 Гуру |
|
Richard Ferlow писал(а): |
А язык какой ? на php похоже |
Я языки по внешнему виду текста не разбираю, так правлю, по аналогии.
Скрипт с расширением cgi , на чём писан - фиг знает,
файл с расширением rss, в заголовке
<?xml version="1.0"?>
<rss version="2.0">
думаю, что XML и есть типа язык, соответственно всё, что в файлах написано, разбирает специальная прога девайса, ядро которого на Линуксе.
Вот ещё кусок другого скрипта:
Код: |
#!/bin/sh
echo "Content-type: text/html"
echo
ST1=`echo $QUERY_STRING | cut '-d&' -f1`
ST2=`echo $QUERY_STRING | cut '-d&' -f2`
N1=`echo $ST1 | cut -d= -f2`
N2=`echo $ST2 | cut -d= -f2`
echo "<html><head><title>Shell Example #2</title></head>"
echo "<body>"
echo The sum of the two numbers is `expr $N1 + $N2`
echo "</body></html>" |
|
|
|
|
|
firezavr Форумчанин |
|
Если пишут в файл, значит, преобразование даты со временем какое-то отложенное (зачем - не знаю), а не сразу по прибытии данных с сервиса. Иначе почему бы не сделать преобразование сразу в ОЗУ вашей железки? Может, ваша железка сначала накапливает данные от сервиса, а потом скопом их все преобразует?
ATX555 писал(а): |
Как-то можно упростить процесс перекладывания дня и месяца без промежуточной записи в файл? |
Конечно, если есть возможность вмешаться в программу вашей зелезки и сделать все преобразования до записи в файл. Или написать самому прожку, подключиться к сервису, и забирать, и преобразовывать, и записывать в файл данные самому. [url=http://ru.wikipedia.org/wiki/WS-адресация]Адрес конечной точки сервиса[/url] известен, сервис открытый, без шифрования и прочего - вперёд, что у вас там под Линуксом может работать и на чём писать можно.
Вобщем, если у этой "специальной проги девайса" нет каких-нибудь дружественных пользователю настроек, то только писать программу для этого девайса самому. Или, если девайс весь такой из себя закрытый, а Интернет-сервис открытый, написать для обычного ПК (на любом подходящем языке, для любой ОС) программку самому и забирать данные с этого сервиса.
Вообще, побольше конкретики: что за девайс, что за прога, что с файлом данных делается и когда. |
|
|
|
|
firezavr Форумчанин |
|
|
|
|
Richard Ferlow Гуру Предупреждений : 2
|
|
|
|
|
ATX555 Гуру |
|
firezavr писал(а): |
Вообще, побольше конкретики: что за девайс, что за прога, что с файлом данных делается и когда. |
Да почти всё есть в первом посте, кроме конкретики, что девайс - медиаплеер.
RSS файл в нём можно менять на своё усмотрение, получая погоду и время на экране телевизора. Но с текущим скриптом и записью в файлы данные отображаются с неприятной задержкой.
Требуется упростить участок с записью первого файла, возможно даже обойтись без внешнего cgi-скрипта, преобразуя сразу в нужный формат внутри rss и записав результат в конечный файл.
Какие-либо конструкции и синтаксис на любых языках мне не известны - могу лишь косметичеки подправить уже готовый код
Поэтому мне что Перл, что С++ или С# |
|
|
|
|
ATX555 Гуру |
|
Richard Ferlow писал(а): |
Это perl |
Искал по написанному в скрипте - нашёл страничку про awk
Так чего там можно сократить или упростить? |
|
|
|
|
firezavr Форумчанин |
|
По идее, надо не писать в файл, а сразу писать
Код: |
tmp_date=getXMLText("adc_database", "forecast", "day", "obsdate"); |
Ну а дальше логика вашего скрипта.
Вот только что-то подсказывает, что скрипт у вас на одном языке (этот ваш AWK), а тот код, что пишет и читает из файла - на другом (причём, судя по синтаксису, Си-образный). Узнайте, что это за язык и можно ли этот же скрипт реализовать на этом языке и в этой же железке.
Ещё есть догадка, что этот встроенный язык пользователю не доступен, а доступны только вот такие пользовательские скрипты на AWK. Т. е. пользователь может написать свой код только для данных, которые внутренняя программа сначала записала в виде текстового файла на диск. Тогда минуть запись на диск невозможно. Т. е. вам дают возможность "попрограммировать" ваш плеер только вот такими скриптами и только над теми данными, которые он вам выведет в текстовый файл.
Вообще, не проще ли найти обсуждение своего устройства где-нибудь в Инете и там поспрашивать энтузиастов? Причём лучше на английском искать - вероятность найти на порядки больше. |
|
|
|
|
ATX555 Гуру |
|
firezavr писал(а): |
Вот только что-то подсказывает, что скрипт у вас на одном языке (этот ваш AWK), а тот код, что пишет и читает из файла - на другом (причём, судя по синтаксису, Си-образный). Узнайте, что это за язык и можно ли этот же скрипт реализовать на этом языке и в этой же железке. |
Это я по невнимательности сразу не нашёл, что это за скрипт. Оказалось, что:
#!/bin/sh - Bourne shell присутствует во всех Unix системах, соответственно скрипты, написанные на этом языке, будут работать на любой Unix-машине.
Осталось понять, как этим воспользоваться и каким боком к нему awk
Хотя уже понятно, что три строки в скрипте можно как-то записать одной, типа
Код: |
echo $tmp_date | awk -F/ '{print($2/$1/$3)}') > /tmp/corr_cityDate.tmp |
|
|
|
|
|
firezavr Форумчанин |
|
Код, который пишет и читает из файла, явно не для командной строки. И то, что он пишет в файл только для того, чтобы скрипт переставил числа в дате, тоже какое-то расточительство.
От того, что вы не в три, а в одну строку скрипт напишете, думаю, не сильно производительность возрастёт.
Думаю, надо писать код на том языке, что принимает данные от службы непосредственно, и так, как я сказал серху - т. е. без записи в файл. Это моё мнение. Хотя данных вы дали всё равно мало. |
|
|
|
|
ATX555 Гуру |
|
firezavr писал(а): |
Код, который пишет и читает из файла, явно не для командной строки. И то, что он пишет в файл только для того, чтобы скрипт переставил числа в дате, тоже какое-то расточительство. |
Полагаю, что изначально он просто писал в файл и оттуда их считывали в том формате, в каком есть (в извратном), поэтому не требовался скрипт и запись в другой файл.
А вот чтоб отобразить в правильном формате уже дописали примочку со скриптом и вторым файлом.
firezavr писал(а): |
От того, что вы не в три, а в одну строку скрипт напишете, думаю, не сильно производительность возрастёт. |
Возможно, но хотелось бы это проверить, а для этого должна быть рабочая кнструкция в целом.
firezavr писал(а): |
Думаю, надо писать код на том языке, что принимает данные от службы непосредственно, и так, как я сказал серху - т. е. без записи в файл. |
Я предположил, что это Bourne shell, но как на нём это проделать - непонятно, в сети пишут, что это "так просто"
firezavr писал(а): |
Хотя данных вы дали всё равно мало. |
А что за данные-то нужны?
Могу вон RSS целиком дать, но остальное там никоим боком.
Menu.txt |
Описание: |
|
Скачать |
Имя файла: |
Menu.txt |
Размер файла: |
38.8 KB |
Скачано: |
260 раз(а) |
|
|
|
|
|
firezavr Форумчанин |
|
ATX555 писал(а): |
А что за данные-то нужны? |
Как я понял, проблема в
ATX555 писал(а): |
RSS файл в нём можно менять на своё усмотрение, получая погоду и время на экране телевизора. Но с текущим скриптом и записью в файлы данные отображаются с неприятной задержкой. |
Где и в каком месте проявляется задержка? Вы нажали кнопку, а погода на телевизоре не сразу, не спустя секунду, а спустя, скажем, десять секунд появилась? Вы уверены, что это задержка из-за скрипта? Скрипт по сути ничего не делает - операции чтения и записи в файл, а также простая перестановка чисел в строке почти не занимают времени, если, конечно, у вас не конктроллер семидесятых годов. Надо вести что-то вроде логов, где после каждой подозрительной на ресурсозатратность операции выводится временнАя метка в лог - тогда видно будет, где слабое звено.
Скорее всего, ваш плеер ожидает ответа от сервиса. Возможно, проходит аутентификацию. Сколько времени длится задержка? Вы же в браузере на компьютере тоже не сразу страницу полностью загруженной получаете.
Ещё возможно, что сервис кеширует данные вашего запроса, а вы жмёте кнопку "обновить" по три раза в секунду. А он вам обновляет информацию на экране только раз в минуту, например.
И насчёт скрипта и преобразования даты. Порочен сам метод, как это делается. Я не знаю, зачем они это сделали - чтобы закрыть доступ пользователю к программированию железа непосредственно и системных функциям, предоставив только простой интерпретатор командной строки. Или это такая "защита от дурака". Но очевидно, что всякие промежуточные записи в файл для всего лишь перестановки чисел совершенно излишни.
ATX555 писал(а): |
Я предположил, что это Bourne shell, но как на нём это проделать - непонятно, в сети пишут, что это "так просто" |
Вы лучше на профильном форуме и продолжайте добивайться ответа. Там люди лучше знают, что это за железка и как с ней работать. А тут мы в кофейной гуще барахтаемся.
ATX555 писал(а): |
Задал вопрос на НГС-е - толку "0", как будто что-то сложное. |
Сложность в том, что нету конкретики. Правильно сформулировать задачу - наполовину её решить. |
|
|
|
|
ATX555 Гуру |
|
firezavr писал(а): |
Где и в каком месте проявляется задержка? Вы нажали кнопку, а погода на телевизоре не сразу, не спустя секунду, а спустя, скажем, десять секунд появилась? Вы уверены, что это задержка из-за скрипта? Скрипт по сути ничего не делает - операции чтения и записи в файл, а также простая перестановка чисел в строке почти не занимают времени |
В скрипте идёт принудительное обновление раз в минуту (оно не заметно, т.к. выглядит, как простая смена минут) и обновление при выходе в "главное меню" - вот там и задержка с отображением (запрос к серверу, парсинг данных, запись данных, конвертация данных). Парсинг лишних я частично убрал (там был очень универсальный скрипт "про запас") - показалось, что стало чуть быстрее (т.е. вместо чуть болше пары секунд стало чуть меньше пары секунд ).
Вот и решил ещё ускорить этот процесс, т.к. пока погода и часы не отрисуются плеер на кнопки не реагирует, поэтому в большинстве аналогичных моделей нет вывода на экран времени и даты.
firezavr писал(а): |
Вы же в браузере на компьютере тоже не сразу страницу полностью загруженной получаете. |
Выше есть ссылка на то, что получает плеер. У меня на компе отрисовывает меньше секунды (1с с запасом).
firezavr писал(а): |
Сложность в том, что нету конкретики. Правильно сформулировать задачу - наполовину её решить. |
Так а чего конкретнее?
Весь алгоритм с текстами выложен.
От А до В надо укоротить путь (ускорить).
Для примера: устройство, аналогичного назначения, как на приложенной картинке я делал на паре деталей, а увидев её долго удивлялся полёту мысли. При этом моё было отключаемым и имело побочный эффект бесплатности межгорода для вызывающей стороны (за счёт характеристик вызывного сигнала моей отсталой АТС, которая ловила отбой, но не успевала отключать линию).
US-01.jpg |
Описание: |
|
Размер файла: |
110.76 KB |
Просмотрено: |
285 раз(а) |
|
|
|
|
|
|
|
Аватары: Вкл|Выкл ЮзерИнфо: Вкл|Выкл Подписи: Вкл|Выкл
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы можете скачивать файлы
|
|