XXV - erste Alpha Version zum testen.

  • Zitat

    Original von slime


    hi,
    glaube ich ehrlichgesagt nicht. schließlich hat vdradmin ja die ganzen epg-daten direkt im speicher drin. kuck mal auf die ram-auslastung von vdradmin - die entspricht im groben deiner epg.data.


    Na darueber laesst sich trefflich streiten ;) Also die Daten werden zwar von vdradmin im Speicher gehalten, das heisst aber noch laengst nicht das vdradmin dadurch aber auch schnell ist. Da es keine asynchrones Eventhandling gibt und vdradmin singlethreaded aufgebaut ist, wird erst bei Anforderung einer Website(!) nach Autotimern geparst. Das hat aber zur Folge das man nach etwa einer Minute (je nach rechner und rechenleistung) seine Seite sieht.


    Ich hatte lange darueber nachgedacht und hab mich auch deswegen zu einer DB entschlossen da das gesamte Datenmanagment wegfaellt und xxv dadurch sehr uebersichtlich geworden ist.


    Ein parse in 16500 EPG eintraegen nach einem Autotimer dauert uebrigens in xxv nicht mal eine Sekunde ;)


    Der User merkt davon (fast) gar nichts da dies ein asynchroner Event im Hintergrund mit einem eigenen thread ist.

  • Zitat

    Original von xpix
    So eine neue Version (0.02) ist online und Changelog im ersten Artikel. Viel Spass damit, bin gespannt auf das Feedback.


    xpix


    Hallo xpix,


    leider sagt mir mein Firefox das auf deinem Server nur die 0.0.1 Version zum download bereit liegt?



    Tschau,
    Frank

  • ich auch testen wollen wenn ich deswegen schon mysql draufgemacht habe...

    Aktuelle Systeme:
    VDR-Server: MSI KT6A Ultra FISR ; Athlon XP 2200+ ; GrKa Geforce 2 MX; 256MB DDR-SDRam Plugins: streamdev-server, remote
    2 x DVB-Budget Karte, Gentoo, Kernel 2.6.8 usw....

  • Hi xpix,


    hab grad mal die 0.0.2 auf meinem VDR angetestet:) hier nur ein kurzer Auszug meiner Fehlermeldungen:


    Click auf aedit:



    alist:



    aXXXX


    .
    .
    .


    clist:



    cstatus:



    usw....


    Eigentlich kommt überall eine Fehlermeldung auf der Konsole und wie ich jetzt erst in der Übersicht sehe, sind das alles auch die gleichen Meldungen, oder?

    Gruß
    Habib


    --------------------------------
    Aufnahme-Server:
    Silverstone Lascala SST-LC10M
    Reel Stable 11.12.2, HDe, 1x 2TB HDD als Aufnahme Server, iVDR 0.3.2 (manuelle Fixe f. Aufnahmeverz.)
    Netceiver mit 3x DUAL DVB-S2
    Clients:
    3x REEL NetClients
    Reel Stable 11.12.2

  • Hilffeee ;)


    Also die ausgaben sind vollkommen normal, ist halt noch ne AlphaVersion und so kann ich sofort sehen was bei Euch nicht funktioniert.


    Diese aber kannst du getrost ignorieren, er beschwert sich nur das ein icon fehlt. Mehr nicht ....


    Ich muesste eigentlich das was du da siehst nur loggen, also in ein file schreiben. Da war ich aber noch zu faul fuer ;)

  • Habib
    Deine Probleme kann ich zum Teil bestätigen. Mit dem Konqueror gibt es die selben Meldungen. Versuch es mal mit Mozilla. Hat bei mir geholfen.


    xpix
    2 Bugs hab ich schon erwischt.


    XXV> tt 1


    Code
    modt 1 off at /usr/local/src/XXV/bin/../lib/XXV/MODULES/SVDRP.pm line 122.
    Event: trapped error in `?? TELNET.pm:189': Can't use string ("220 vdr SVDRP VideoDiskRecorder ") as an ARRAY ref while "strict refs" in use at /usr/local/src/XXV/bin/../lib/XXV/OUTPUT/Console.pm line 78.


    Bugfix: in TIMERS.pm, Zeile 467 ersetzen durch "$console->message($erg);"



    Das nächste Problem ist etwas umfangreicher.


    Code
    XXV> te 1
    Switch this Timer on? [1]: y           <-- hier solte ein [y] oder [n] stehen
    Please enter a channel. [3sat;ZDFvision]:
    Please enter a day (1 to 31) or the weekday in format "MDMDFSS". [----F--]:


    An dieser Stelle kommt von xxv die Meldung

    Code
    Argument "----F--" isn't numeric in int at /usr/local/src/XXV/bin/../lib/XXV/MODULES/TIMERS.pm line 323, <GEN6> line 4.



    Die Meldung von xxv lautet

    Code
    modt 1 1:S19.2E-1-1079-28007:0:1550:1650:50:99:Weltreisen:
                                 ^


    Hier gibt es einen Fehler in der Behandlung des nichtnummerischen Datums.


    EDIT:
    Noch eine kleine Ergänzung zum Datum. Beim Anlegen eines Timers mit dem vdr kann man auch ein Startdatum eingeben. Dann ist der Eintrag in Timer.conf noch komplizierter. zB. "MDMDFSS@2004-10-05"
    Beim Editieren erscheint dieser Eintrags als Vorgabe, wird aber nicht akzeptiert. "No right day or corrupt format!"


    mfg. Nibbana

  • Zitat

    Original von nibbana
    EDIT:
    Noch eine kleine Ergänzung zum Datum. Beim Anlegen eines Timers mit dem vdr kann man auch ein Startdatum eingeben. Dann ist der Eintrag in Timer.conf noch komplizierter. zB. "MDMDFSS@2004-10-05"
    Beim Editieren erscheint dieser Eintrags als Vorgabe, wird aber nicht akzeptiert. "No right day or corrupt format!"


    Ahh, danke fuer den Tip! ;) Setz ich mich morgen gleich ran.

  • Nach langer Suche habe ich jetzt endlich eine Möglichkeit gefunden xxv zum Absturz zu bringen. :)


    Das Programm reagiert empfindlich auf ein falsches Ansprechen der Ports.


    Beispiel:
    > nmap -sT -p 8000-8100 vdr


    liefert Meldung:
    > [Server] Talking on channel 1.
    > [Server] Talking on channel 1.
    > Use of uninitialized value in substitution (s///) at > > > /usr/local/src/XXV/bin/../lib/XXV/MODULES/INTERFACE.pm line 138.


    Und wenn man mal die falsche Adresse in den Browser eintippt
    > wget http://vdr:8001


    gibts die Meldung:
    > [Server] Talking on channel 1.


    In deine Fällen genehmigt sich xxv die volle Rechenleistung und wiederholt in einer Endloschleife die Meldungen.


    mfg. Nibbana

  • xpix


    so.
    habe mir die tabellen in hinblick auf anbindung an sqlite angesehen
    (fuer alle, die nicht wissen, wovon ich rede: http://www.vdr-portal.de/board/thread.php?threadid=22490&sid=)


    folgende fragen/anmerkungen:


    tabelle AUTOTIMER:


    -- InFields set('title', 'subtitle', 'description' ) NOT NULL,


    kann ich nicht aufloesen in SQLite (jedenfalls habe ich keine entsprechung gefunden).
    koenntest du das eventuell anders loesen bzw wofuer wird das genau benoetigt? (lt. schnell ueber den code drueberschauen missbrauchst du das SET als eine art 'inline table' oder so wenn ich mich nicht irre?)



    tabelle EPG:
    FULLTEXT KEY epgidx (title,subtitle,description)


    wird zu: ==>


    CREATE INDEX epgidx
    ON EPG (
    title,subtitle,description
    );



    wofuer setzt du das genau ein? unique muss/darf der ja nicht sein oder? (wenn ich die mysql-doku dazu richtig verstanden habe, ist FULLTEXT nur fuer beschleunigung der textsuche da)



    alle ENUM('y', 'n') DEFAULT 'y' wuerde ich in meinem SQLite-port aufloesen in
    fieldname CHAR DEFAULT 'y'
    und CHECK fieldname IN ('y', 'n') (wird zwar dzt. von sqlite ignoriert, aber sauberes design und ev. wirds ja mal ausgewertet ...)




    fuer unix_timestamp gibts eine (zugegeben grausame) entsprechung:
    SELECT strftime('%s', 'now', 'localtime') ...

    also als beispiel aus deinem sourcecode:


    DELETE FROM EPG WHERE (UNIX_TIMESTAMP(EPG.starttime) + EPG.duration) < UNIX_TIMESTAMP();


    wuerde zu


    DELETE FROM EPG WHERE (strftime('%s',EPG.starttime) + EPG.duration) < Strftime('%s', 'now', 'localtime');



    DATE_FORMAT(starttime, '%H%i') as Start,
    DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(starttime) + duration), '%H%i') as Stop


    wuerde zu
    Strftime('%H%M', starttime) AS Start, Strftime('%H%M', Datetime(starttime, '+'||duration||' seconds')) AS Stop



    auch fuer das eine auto_increment in AUTOTIMER gibt es eine (etwas kranke) entsprechung: Id Int(11) auto_increment NOT NULL wird zu Id INTEGER PRIMARY KEY. wo ist da jetzt der auto_increment? tja, diese kombination macht das. habs ausprobiert und es stimmt tatsaechlich.
    (es ist zwar sowieso generell von auto_increments abzuraten (wofuer gibts SEQUENCEs), aber da sqlite keine sequences unterstuetzt, lasse ich das grade nochmal durchgehen ;-)))


    wenn das problem mit AUTOTIMER.InFields geloest ist werde ich die CREATEs anpassen und dann mit den DML-statements fortfahren.


    /wastl


    EDIT: korrektur v. defektem url

  • Hallo wastl und willkommen im richtigen Thread. ;)



    Nun nicht ganz, in mysql wird dies als Liste bezeichnet. man kann aus der Liste ('title', 'subtitle', 'description' ) nur einen oder mehrere Werte aus dieser Liste angeben. In diesem Fall sagt der user nur in welchen Feldern er nach seinem Suchbegriff suchen moechte. Wir koennen hier aber auch ein varchar nehmen.



    Genau, aber da ich dann doch das normale Like in der Suche genommen habe koennen wir auch diesen Index weglassen. Ich weiss jetzt nicht ob das wirklich auf die Performance einfluss hat, mysql ist ja eh sehr schnell. Muesste man mal testen. Ich hab z.B. immerhin ca. 14000 Saetze in der Tabelle.


    Zitat


    alle ENUM('y', 'n') DEFAULT 'y' wuerde ich in meinem SQLite-port aufloesen in
    fieldname CHAR DEFAULT 'y'
    und CHECK fieldname IN ('y', 'n') (wird zwar dzt. von sqlite ignoriert, aber sauberes design und ev. wirds ja mal ausgewertet ...)


    Also ich faende es ja super wenn wir es hinkriegen wuerden, das xxv mit beiden Datenbanken laufen wuerde (mysql und sqlite) meinste das bekommen wir hin?



    Um gottes willen, ist das grausam ;) Kannst du mir die vielen Pipe Zeichen erklaehren. Hat das etwas mit Concat zu tun oder ist das jetzt nur ein Fehler von dem Board hier?


    Zitat


    auch fuer das eine auto_increment in AUTOTIMER gibt es eine (etwas kranke) entsprechung: Id Int(11) auto_increment NOT NULL wird zu Id INTEGER PRIMARY KEY. wo ist da jetzt der auto_increment? tja, diese kombination macht das. habs ausprobiert und es stimmt tatsaechlich.
    (es ist zwar sowieso generell von auto_increments abzuraten (wofuer gibts SEQUENCEs), aber da sqlite keine sequences unterstuetzt, lasse ich das grade nochmal durchgehen ;-)))


    Ja ja da scheiden sich die Geister, ich hab auch mal mit Oracle gearbeitet und ich fand es einfach nur grausam. Wie kann man eine Datenbank nur so mit Funktionalitaet zustopfen. Na ja und schneller ist die dadurch ja auch nicht. Aber OT ;)


    Wie schon gesagt, es waehre schoen wenn wir da kompatibel bleiben zu mysql. Ich denke da auch an das MuggleProjekt das ja auch mit mysql arbeitet und ich es spaeter mal in xxv mit integrieren wuerde.


    Nachtrag: Hab jetzt mir mal mysql genauer angeschaut und wir werden wohl Probleme haben mit der Kompatibiltaet. Vielleicht sollten wir so eine Art StatementSets bauen? Bin fuer jede Idee offen. ;)

  • xpix


    ich sehe bis jetzt eigentl. nur bei einer sache probleme, und das ist autotimer.InField.
    dies kann ich nicht umsetzen (im CREATE).


    alle anderen unterschiede lassen sich durch falschunterscheidungen oder besser (wie du es nennst) 'Statement-Set' ausmerzen. du kannst ohne probleme bei mysql-CREATE ENUMs verwenden. kein problem. beim sqlite-CREATE verwende ich CHAR dafuer, in einer spaeteren WHERE-bedingung ist keine unterscheidung notwendig (WHERE enumfield = 'y' funktioniert in beiden faellen!)


    auch beim INDEX brauchst du nix aendern. beim sqlite-CREATE folgt halt einfach ein eigener CREATE INDEX nach.


    aja, eines noch: CREATE IF NOT EXISTS gibt es bei sqlite nicht. ev. koenntest du hier ein if ( ! foo_table_exists('SOMETABLE')) { create_table_stuff(...); } vorschalten. ist aber auch ned unbedingt notwendig.



    zu den pipes: schaut schoen aus ;) und stimmt so.


    erklaerung zum beispiel: in sqlite date/time-funktionien kannst du berechnungen ausfuehren (sogar mehrere aufgefaedelt).


    zb: Date(sometimefield, '+9 days') -> datum in sometimefield + 9 tage
    oder Strftime('%s', 'now', 'localtime', '+4711 seconds); -> jetzt (localtime, da sonst UTC) in unix-sekunden ('%s') + 4711 sekunden


    Strftime('%H%M', Datetime(starttime, '+'||duration||' seconds') ist daher:


    Datetime(starttime, '+'||duration||' seconds') -> inhalt von feld 'duration' (meine annahme: zeiteinheit == sekunden) konkatieren zb. zu '+47 seconds', zu starttime hinzuzaehlen, daraus einen zeitstring der form '%H%M' bilden ( %M/sqlite == %i/mysql)


    ist ja eigentlich ganz einfach ;)


    zu muggle: muggle ist leider vom programmierstil her eine katastrophe . 0 modularisierung der datenbankanbindung (und das, obwohl muggle in C++ erstellt ist!!). wenn dies zuvor jemand 1/2-wegs bereinigt, bin ich gerne bereits, fuer muggle die sqlite-anbindung zu machen. im jetzigen stadium aber sicher nicht.


    /wastl

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!