Mailinglisten-Archive |
Hey Theo, > Wenn auch etwas informatiklastik ;) ;-) naja - also Im ersten Semester lernt man sowas eigentlich granicht - sind eher Überreste meiner C Kenntnisse. > > CRON hat eigentlich ein recht leistungsfähiges System um seine Termine zu > > koordinieren. > > Er verwendet folgendes format: > > > 5 Werte, durch Lerzeichen getrennt > > - Minute (0-59) > > - Stunde (0-23) > > - Tag des Monats (1-31) > > - Monat im Jahr (1-12) > > - Tag der Woche (0-6) // 0=Sonntag, 6=Samstag > > > Zitat UNIX, Markt&Technik, 93': > > Aha, ich glaub das Buch muss ich mir mal ansehen. ;) Ist nur ein kleines Handbuch, aber praktisch wenn man mal grade die Man-Pages nicht zur Hand hat und ein Paar weiterführende Beispiele braucht. Meins hier kostet 39.-DM bin aber sicher dass man sowas auch günstiger bekommt. > > Was hältst Du davon? > [...] > > > Um die Werte zu erzeugen Setzt man sich am besten Konstanten und verwendet > > Bitmasken, also z.b. > > $JANUAR = 1; > > $FEBRUAR = 2; > > $MÄRZ = 4; > > $APRIL = 8; > > $MAI = 16; > > $JUNI = 32; > > $JULI = 64; > > .... Mir ist aufgefallen dass ich im letzten Mail einen Fehler gemacht hatte - Bitmasken müssen natürlich immer ODER-verknüpft werden - nicht AND, sonnst wird das nix .. also $wert = $JANUAR | $FEBRUAR | MÄRZ... > Hmm, ich meine codieren ist die Lösung, zumindest was die >wiederkehrenden Varianten > verwaltet. Aber wo liegt der Vorteil in Bit-codierung. (so doof kann nur ein > Nichtinformatiker fragen, oder?) Cron machts offensichtlich ja auch im >"Klartext". Ach, einerseits möchte ich mein Studium nicht so in den Vordergrund stellen - vieles von dem hier hab ich auch garnicht an der Uni gelernt :-) und andererseits sollte ein Informatiker ja auch in der Lage sein sein Wissen in verständlicher Form präsentieren zu können. (ich glaub das können an der Uni wenige ;-)) ) Nunja - also das Prinzip beruht eigentlich nur auf etwas Rechnen in Binärdarstellung (sowas lernt man auch auf der Schule, gelegentlich) Boolscher Algebra (gut ok, das hab ich ausm Studium, ist aber wirklich einfach) Und etwas Kreativität :-) Ja - der Vorteil: angenommen Du stellt die Cron Darstellung in einer Datenbank dar - sagen wir auch mit 5 Feldern für (monat, tag, stunde, minute, wochentag) und angenommen Du willst einen Event darstellen der sagen wir Januar bis August stattfindet - laut cron könntest du jetzt in das "monat" feld also "1-8" reinschreiben. oder "1,2,3,4,5,6,7,8" wenn es jetzt nur alle 2 Monate stattfindet bleibt Dir schon nix anderes mehr übrig als "1,3,5,7" reinzuschreiben - fürchterlich viel ASCII Salat also. Und das schlimmste - Du tust dir irre schwer nach diesem Feld etwas zu selecten, richtig? wenn Du jetzt wissen willst was alles im Februar abgeht müsstest du dieses Varchar Feld jetzt irgendwie nach ,2, oder 2, oder wie auch immer durchsuchen - das gibt dann aber wieder Probleme mit 12 und ist obendrein noch langsam. Und der Varchar - der maximal 23 Stellen (also 23 Byte) braucht, ist ne irre Platzverschwendung. Also nimmst Du Dir zwei schnuckelige Bytes - also 16 Bit und sagst - jedes Bit stellt einen Monat dar - bleiben 4 Bit übrig, macht aber nix. Wenn jetzt ein Event von Januar bis August läuft - setz ich einfach Bits Nummer 1 bis 8 auf "1" und lass den Rest auf 0. also das Ding sieht jetzt so aus: 0000000011111111 Dezimal: 256 (empfehlung Windoof Taschenrechner im Wissenschafts-Modus, kann umrechnen) So, jetzt noch der Schnellkurs im Binärsystem: Wenn ich jetzt wissen will, ob dieser Event im Mail auch stattfindet - gehe folgendermassen vor: Mai ist das Bit Nummer 5 - also muss ich jetzt abfragen ob Bit Nummer 5 Eins ist. - und das geht so: eine Binärzahl die das 5te Bit auf eins hat: 10000 - 16 dezimal in eine Variable Ablegen: $wert = 16; und das ganze per AND mit den obigen 16 Bit verknüpfen - sieht also so aus: 0000000011111111 0000000000010000 &_______________ =0000000000010000 ($monat & $wert) > 0; ist also auch wieder 16 und damit grösser 0. Also hab ich rausgefunden Dass Bit 5 Eins ist, und der Event im Mai stattfindet. (wäre das Bit Nummer 5 "0" würde bei der & Verknüpfung 0 rauskommen) Mit solchen Bitmasken kann ich jetzt alles mögliche abfragen. Halbwegs verstanden? - es funktioniert - glaub mir. Und es ist um einiges leichter zu handhaben als irgendwelche strings nach Zahlen zu durchsuchen. Problem ist jetzt noch die Dauer in jedem Fall richtig zu codieren - wenn etwas von 15:00 bis 15:30 geht ist das nicht so schlimm, unangenehm wirds erst wenn ich 15:30 bis 16:15 codieren will - dann hab ich sozusagen einen "Stunden-umbruch" und hab im Minuten-Bitfeld mehrere Bereiche von Einsen, die ich richtig interpretieren muss - da bin ich noch am grübeln wie man das dann am elegantesten löst. so far, martin
php::bar PHP Wiki - Listenarchive