script für Uhr

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

script für Uhr

Beitrag von mclien » 10.11.2009 14:32:39

Hi ich will ein script bauen das:
permanent die Uhrzeit anzeigt und das an Wochentagen in grün nd sa/so in rot (alles auf der konsole)
Die Uhrzeit bastel ich mir mit ascii Art, ist hier aber der Übersichtlichkeit halber weggelassen.
so funktioniert es:

Code: Alles auswählen

#!/bin/bash

while true;
do
    if [ `date +%u` -le 5 ] # weekday?
    then
      FARBE="\033[32m"      # mo-fr: green
    else
      FARBE="\033[31m"      # sa-su: red
    fi
    echo -e $FARBE`date`    # show clock
    echo -ne "\033[1A"      # go up one row
done
nur stellt sich mir nun die Frage, ob das nicht 'eleganter' geht, als alle Werte ständig abzufragen.
Die Sekunden will ich schon anzeigen.
Da aber zumindest die Wochentagabfrage nur 2x die Woche nötig ist, frage ich ich, ob man die farbvariable nicht anders beisteuern kann.
(irgendwie per cronjob "quer reinschmeissen" ?).
Oder schont das die Rechenleistung meines alten Rechners am Ende gar nicht (113mHz, 32MB RAM) ?

Benutzeravatar
Meillo
Moderator
Beiträge: 9266
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: script für Uhr

Beitrag von Meillo » 10.11.2009 15:30:20

Ich denke du kannst den Overhead des zusätzlichen date-Aufrufs ignorieren. Aber du solltest unbedingt ein `sleep 1' in die Schleife bauen, sonst erzeugt die Volllast.
Use ed once in a while!

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: script für Uhr

Beitrag von rendegast » 10.11.2009 17:59:21

Warum die Uhrzeit nicht einfach im Prompt angeben?
'man bash':
6.9 Controlling the Prompt
The value of the variable PROMPT_COMMAND is examined just before Bash prints each primary prompt. If PROMPT_COMMAND is set and has a non-null value, then the value is executed just as if it had been typed on the command line.

In addition, the following table describes the special characters which can appear in the prompt variables:

\a A bell character.
\d The date, in "Weekday Month Date" format (e.g., "Tue May 26").
\D{format} The format is passed to strftime(3) and the result is inserted into the prompt string; an empty format results in a locale-specific time representation. The braces are required.

\e An escape character.
\h The hostname, up to the first `.'.
\H The hostname.
\j The number of jobs currently managed by the shell.
\l The basename of the shell's terminal device name.
\n A newline.
\r A carriage return.
\s The name of the shell, the basename of $0 (the portion following the final slash).
\t The time, in 24-hour HH:MM:SS format.
\T The time, in 12-hour HH:MM:SS format.
\@ The time, in 12-hour am/pm format.
\A The time, in 24-hour HH:MM format.

\u
Und für die Einfärbung mal ein knoppix oder grml.iso ansehen.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
Meillo
Moderator
Beiträge: 9266
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: script für Uhr

Beitrag von Meillo » 10.11.2009 18:07:32

rendegast hat geschrieben:Und für die Einfärbung mal ein knoppix oder grml.iso ansehen.
Ich weiß es nicht, kann mir aber nicht vorstellen, dass die das Datum ja nach Wochentag anders färben. Die haben halt unterschiedliche Farben für die verschiedenen Größenordnungen (Minuten, Stunden, Tage, ...). Oder?
Use ed once in a while!

Liffi
Beiträge: 2345
Registriert: 02.10.2004 01:33:05

Re: script für Uhr

Beitrag von Liffi » 10.11.2009 18:34:15

mclien hat geschrieben:Hi ich will ein script bauen das:
permanent die Uhrzeit anzeigt und das an Wochentagen in grün nd sa/so in rot (alles auf der konsole)
wäre es nicht insgesamt einfacher da einfach screen zu benutzen? (zusätzlicher Vorteil: es wird screen benutzt ;-))

wobei ich zugeben muß, daß da die Unterscheidung von Wochentagen und Wochenende nicht ganz so einfach ist (habe es aber auch noch nicht versucht)

Benutzeravatar
Meillo
Moderator
Beiträge: 9266
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: script für Uhr

Beitrag von Meillo » 10.11.2009 19:09:10

rendegast hat geschrieben:Warum die Uhrzeit nicht einfach im Prompt angeben?
Liffi hat geschrieben:wäre es nicht insgesamt einfacher da einfach screen zu benutzen? (zusätzlicher Vorteil: es wird screen benutzt ;-))
Ich glaube ihr versteht ihn beide falsch.
mclien hat geschrieben:Hi ich will ein script bauen das:
permanent die Uhrzeit anzeigt [...]
Die Uhrzeit bastel ich mir mit ascii Art, ist hier aber der Übersichtlichkeit halber weggelassen.
Das hört sich für mich eher nach einer Voll-Terminal (wie Vollbild) Zeitanzeige an.
Use ed once in a while!

Liffi
Beiträge: 2345
Registriert: 02.10.2004 01:33:05

Re: script für Uhr

Beitrag von Liffi » 10.11.2009 22:29:17

Meillo hat geschrieben:
rendegast hat geschrieben:Warum die Uhrzeit nicht einfach im Prompt angeben?
Liffi hat geschrieben:wäre es nicht insgesamt einfacher da einfach screen zu benutzen? (zusätzlicher Vorteil: es wird screen benutzt ;-))
Ich glaube ihr versteht ihn beide falsch.
stimmt. Den Part mit ASCII Art hab ich wohl überlesen (um screen anzupreisen ;-))

mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Re: script für Uhr

Beitrag von mclien » 11.11.2009 10:44:45

Erstmal Dank für die Tips.
Es geht tatsächlich um eine Permanentanzeige (Radioweckerersatz). Die asciiArt hatte ich zwegs Übersichtlichkeit weggelassen.
Der sllep 1 hat halt den Nachteil, daß es dann 1 Sekung + Laufzeit des scripts ist (ja ist pinggelig, ab und an springst dann halt 2 sekunden, egal).
Ausserdem werde ich das script mit 'nice 19' starten.

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: script für Uhr

Beitrag von GoKi » 11.11.2009 11:04:18

Nur eine Randnotiz:
Auf nem Linux muss die Anzahl der Sekunden keine Ganzzahl sein.
Unlike most implementations that require NUMBER be an integer, here NUMBER
may be an arbitrary floating point number.
Es kann aber theoretisch immer noch springen, da nicht sicher ist, dass dein Script wieder Rechenzeit zugeteilt bekommt.
MfG GoKi
:wq

Benutzeravatar
Meillo
Moderator
Beiträge: 9266
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: script für Uhr

Beitrag von Meillo » 11.11.2009 12:13:55

mclien hat geschrieben:Der sllep 1 hat halt den Nachteil, daß es dann 1 Sekung + Laufzeit des scripts ist (ja ist pinggelig, ab und an springst dann halt 2 sekunden, egal).
Wenn's so genau sein soll, dann verwende doch C. Dann ist auch der Rechenoverhead geringer.
Use ed once in a while!

mullers

Re: script für Uhr

Beitrag von mullers » 11.11.2009 14:44:25

Ich hätte hier [1] eine Uhr in C, finde leider im Moment den Code nicht.

Gruesse
henry

[1]http://literaturlatenight.de/clock

mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Re: script für Uhr

Beitrag von mclien » 11.11.2009 20:55:03

Naja, das mit c ist sicher ne gute Idee, leider kann ich c (noch) nicht.
Die Uhr ist auch schon als shellscript am laufen und soll halt noch ein bisschen aufgepeppt werden.
(wenn ich nachts etwas Probleme mit der Sehschärfe habe, kann ich dann zumindest sehen, ob die Farbe mir sagt sch... bald muss ich aufstehen, oder aah... weiter entspannen..).

Ich denke ich stell den sleep auf 0.5 und lass es mit nice 19 laufen und mache halt alle abfragen in 1/2 sek Anständen.

@myyers:
der code wär aber trotzdem recht interessant (für Radiowecker 2.0 quasi)

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: script für Uhr

Beitrag von Duff » 12.11.2009 07:48:43

myyers hat geschrieben:Ich hätte hier [1] eine Uhr in C, finde leider im Moment den Code nicht.

Gruesse
henry

[1]http://literaturlatenight.de/clock
Der Code zu dieser Uhr würde mich auch interessieren.
Lese mich nämlich aktuell in C ein.

Danke.
Oh, yeah!

mullers

Re: script für Uhr

Beitrag von mullers » 12.11.2009 08:35:45

@Duff, @mclien: Ich mache mich mal auf die Codesuche, werd es, wegen Zeitmangel, wohl erst bis zum WE schaffen, bitte etwas Geduld.

henry

crazyed

Re: script für Uhr

Beitrag von crazyed » 12.11.2009 08:54:13

Hab‘ das selbst nie probiert da ich eine in C++/Qt programmierte Uhr (QDateTime) benutze.
Instructions: the code itself is pretty much self explanatory. you can add functions to time certain processes or whatever. Compiled using Dev-C++.

Code: Alles auswählen

// this code was copied from cprogramming.com
// my respects for posting this code with 
// no official whereabouts as to where it was from

#include <ctime>
#include <iostream>

using namespace std;

int main()
{
    for(int x=0; x<1000; x++)
    {
        cout<<endl;
    }
    cout<<"Clock ticks: "<<clock()<<" Seconds: "<<clock()/CLOCKS_PER_SEC;
}


Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: script für Uhr

Beitrag von Duff » 12.11.2009 08:57:01

myyers hat geschrieben:@Duff, @mclien: Ich mache mich mal auf die Codesuche, werd es, wegen Zeitmangel, wohl erst bis zum WE schaffen, bitte etwas Geduld.

henry
Kein Problem. Bei mir ist es nicht dringend!
Oh, yeah!

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: script für Uhr

Beitrag von cosmac » 12.11.2009 12:13:38

hi,
mclien hat geschrieben:Naja, das mit c ist sicher ne gute Idee (...)
Ich denke ich stell den sleep auf 0.5 und lass es mit nice 19 laufen und mache halt alle abfragen in 1/2 sek Anständen.
im Gegenteil, es sollte mit deutlich höherer Priorität laufen, es ist schließlich die wichtigste Anwendung auf deinem Rechner. Genau genommen ist es sogar ein Beispiel für eine Realtime-Anwendung. Außerdem verbraucht das Script ja nicht weniger CPU-Zeit, nur weil es "nice" ist. Es läuft dann nur ungleichmäßiger.

Als militanter CPU-Zeit-Sparer würde ich eine Uhr in C ungefähr so schreiben: green clock (Vorsicht: alpha-Qualität).
Beware of programmers who carry screwdrivers.

mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Re: script für Uhr

Beitrag von mclien » 12.11.2009 14:27:51

ein Frage:
-also das Benutzen von sleep schont die CPU gar nicht?

und eine Erklärung:
-die ANZEIGE ist der Uhrzeit ist hier nicht die wichtigste Anwendung (zumindest nicht sekundengenau). Und cron (der mich letztlich weckt) hört ja auf das System und nicht auf die Anzeige.
Die Uhr ist dann nur zum draufschielen, ob siechs liegenbleiben noch lohnt...

Das mit nice habe ich mit zuwenig Infos versehen: Die Hardware ist ein Toshiba Libretto 100ct (133/200MHz, 64MB RAM, Netz über 16Bit PCMCIA) und wenn die Weckmusik übers Netz kommt, stotterts wenn ich das Script nicht "nice" mache.

mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Re: script für Uhr

Beitrag von mclien » 12.11.2009 14:31:50

cosmac hat geschrieben: Als militanter CPU-Zeit-Sparer würde ich eine Uhr in C ungefähr so schreiben: green clock (Vorsicht: alpha-Qualität).
Ich kann zwar fast noch gar kein c, aber Umstellung Sommer/Winterzeit: kann c nicht die locale Zeit benutzen? (Rechner auf UTC, passende lokale Zeit, dann braucht man sich doch um die Umstellung gar nicht kümmern, oder?)

Benutzeravatar
Meillo
Moderator
Beiträge: 9266
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: script für Uhr

Beitrag von Meillo » 12.11.2009 14:43:11

mclien hat geschrieben:ein Frage:
-also das Benutzen von sleep schont die CPU gar nicht?
Es macht aus einer busy-loop, die deinen Prozessor auf 100% Auslastung bringt, eine Schleife die nur einmal pro Sekunde (oder so) ganz kurz was rechnet und sonst wartet.

und eine Erklärung:
-die ANZEIGE ist der Uhrzeit ist hier nicht die wichtigste Anwendung (zumindest nicht sekundengenau).
Dann kannst du j auch die Shell-Version mit dem `sleep 1' nehmen. Oder einfach die Sekunden ganz weglassen und einen noch längeren sleep verwenden.

Die Uhr ist dann nur zum draufschielen, ob siechs liegenbleiben noch lohnt...
Da gibt's sowas, das heißt Wanduhr. Oder sogar sowas, das heißt Wecker. Solltest du dir mal kaufen.

Deinen Bildschirm wirst du über Nacht schon nicht anlassen. Wenn schon dein Rechner laufen muss, dann solltest du zumindest den Bildschirm abschalten. Strom zu sparen ist nicht nur für deinen Geldbeutel gut, auch an die Umwelt solltest du denken!
Use ed once in a while!

mullers

Re: script für Uhr

Beitrag von mullers » 12.11.2009 15:42:51

Das ging ja schneller als ich gedacht habe...
Hier [1] habe ich die Quelle mal reingestellt, woher ich sie genau habe, konnte ich nicht mehr finden; der Autor steht aber in der Präambel und ein git repo [2] gibt es auch (nehme mal an, dass es die ist)

henry

[1] http://literaturlatenight.de/clock.tar.gz
[2] http://gitorious.org/holizz-github/tty-clock

mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Re: script für Uhr

Beitrag von mclien » 12.11.2009 19:05:48

Meillo hat geschrieben: Da gibt's sowas, das heißt Wanduhr. Oder sogar sowas, das heißt Wecker. Solltest du dir mal kaufen.
Ne gibts nicht, zumindest nicht mit diesen Anforderungen:
-2 verschiedene Weckzeiten je Wochentag (1 für mich, eine für meine Frau),
-die verschiedenen Weckzeiten spielen von verschiedenen Playlist (Frau und meine)
-wobei die Musik in wählbaren Intervallen (Anfangsvol, Endvol, dauer und grösse Vol-erhöhung )sanft die Lautstärke anhebt
-die Musik liegt als ogg auf dem Server
-nachst die Uhrzeit ablesbar (ohne vorher Knöpfchen zu drücken)
Deinen Bildschirm wirst du über Nacht schon nicht anlassen. Wenn schon dein Rechner laufen muss, dann solltest du zumindest den Bildschirm abschalten. Strom zu sparen ist nicht nur für deinen Geldbeutel gut, auch an die Umwelt solltest du denken!
Natürlich an! Wie soll ich sonst die Uhrzeit sehen? (richtig genausowenig, wie bei einer Wanduhr im dunkeln) :wink:
Dann schon eher einen Hardwaremod an der Hintergrundbeleuchtung und tagsüber ganz ausschalten.

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: script für Uhr

Beitrag von cosmac » 12.11.2009 19:57:00

mclien hat geschrieben:
cosmac hat geschrieben: Als militanter CPU-Zeit-Sparer würde ich eine Uhr in C ungefähr so schreiben: green clock (Vorsicht: alpha-Qualität).
Ich kann zwar fast noch gar kein c, aber Umstellung Sommer/Winterzeit: kann c nicht die locale Zeit benutzen? (Rechner auf UTC, passende lokale Zeit, dann braucht man sich doch um die Umstellung gar nicht kümmern, oder?)
natürlich, normalerweise würde man localtime() verwenden, was wiederum intern tzset() aufruft. Damit würde aber jede Sekunde das Datum neu berechnet werden, was ziemlich aufwendig ist und nicht gebraucht wird. Und irgendwer hat sich hier beschwert, dass seine CPU so langsam ist ;) Deshalb sollte man auch die Zeitzone so selten wie möglich berechnen, weil das u.U. sogar Plattenzugriffe kostet.
Beware of programmers who carry screwdrivers.

mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Re: script für Uhr

Beitrag von mclien » 13.11.2009 11:15:54

Ich habe hauptsächlich Angst, daß meine CPU mich zu schnell verlässt, wenn die permanent so warm ist im Betrieb.
Das Vorgängermodell (Toshiba Libratto 50ct mit hardware overclock) hat beim Abspielen der Musik irgendwann wegen Überhitzung in den hypernate gewechselt (leider ohne das die passende Partition vorhanden war...).
Stromspartechnisch werde ich erstmal das dimmbare Display weiterverfolgen.

Antworten