News:

Wondering if this will always be free?  See why free is better.

Main Menu

Neujahrs-Bug im Boardindex?

Started by Hondo, January 01, 2006, 05:11:41 AM

Previous topic - Next topic

Hondo

Hi,
bis gestern wurden auf www.access-o-mania.de alle Geburtstage und Feiertage im Boardindex angezeigt, ab heute morgen nicht mehr, weder der Feiertag noch die zig Geburtstage.
Ist das Verhalten irgendwie bekannt? Habe 1.1 Rc1 im Einsatz.

Gruß Andreas

Hondo

Lol, ist tatsächlich ein Bug.
Und zwar habe ich im Admin/Kalendereinstellungen die Anzahl Kalendertage im Voraus auf 0 stehen, und zwar schon seit dass ich Version 1.03 einsetzte, damit ich nur heutige Geburtsdaten und Feiertage erhalte. (hab ich wg. meinem Mod "Birthdaysend")

Stell ich die Anzahl auf 1, hätte ich die Daten für heute und morgen, aber dann werden nur die heutige Daten angezeigt.

Ich denke dass das am Jahreswechsel liegt, und am 2.1. der Effekt nicht mehr auftritt, hoffe ich zumindest.

Habe den gleichen Fehler auch auf einer meiner anderen Seiten festgestellt, auf mkportal-support.de. Auch dort verschwindet der Feiertag wenn ich die Anzahl der Kalendertage im Voraus auf 0 stelle.

Gruß und ein gutes neues Jahr 2006,
Andreas

Hondo

Hallo,
mich beschleicht langsam ein schlechtes Gefühl bei der Sache.
Folgender Code in boardindex.php:

if (!empty($modSettings['cal_showbdaysonindex']) && isset($modSettings['cal_today_birthday'])){
      $bday = unserialize($modSettings['cal_today_birthday']);
      echo "bday: ".$bday['2005-12-31'];
}

Testweise habe ich die echo-Ausgabe hinzugefügt.
Testdatum 31.12.2005: Ausgabe: "bday: Array"
Testdatum 31.12.2006: Ausgabe: "bday: "

Alle Testdaten größer 31.12.2005 liefern kein Array zurück obwohl ja mehrere Leute da Geburtstag haben. In der Administration ist das min/max-Datum des Kalender auf 2004 bis 2010 eingestellt, daran kann es auch nicht liegen.

Schon sehr seltsam das ganze. Kann der Fehler jemand reproduzieren?

Gruß Andreas


PS: in dem Script steht: "Copyright 2001-2005",  vieleicht kann php ja lesen :)

mediman

selbstverständlich kann php lesen ...

Also in meinen Board werden die Burtzeltage und die Events angezeigt.
Ich versuche mal zu gucken woran es liegen könnte.
My Projects: http://ticker-oase.de 
Please do not PM me with support requests.

Hondo

Hi,
teste es mal selbst und stell die Anzahl Kalendertage auf 0.
Im Code steht dann in folgender Codestelle in boardindex.php in $days_for_index immer noch die Anzahl Sekunden für 1 Tag (86400) drin, so dass die Schleife 1x durchlaufen wird, aber die if-Schleife wird nicht durchlaufen. Gleiches auch bei den Geburtstagen.

   $context['calendar_holidays'] = array();
for ($i = $now; $i < $now + $days_for_index; $i += 86400)
{
if (isset($holidays[strftime('%Y-%m-%d', $i)])){
$context['calendar_holidays'] = array_merge($context['calendar_holidays'], $holidays[strftime('%Y-%m-%d', $i)]);
}
}


Mich wundert es aber dass es gleichzeitig sowohl für Feiertage, Events und Geburtstage gilt, das lässt vermuten dass eine gemeinsam verwendete Funktion nicht das gewünschte liefert.

Gruß Andreas

mediman

Ich habe die tage auf 0.
Ähm mich deucht, ich habe da mal was in den Sourcen geändert.

My Projects: http://ticker-oase.de 
Please do not PM me with support requests.

Hondo

Äh ja wie?
Funktioniert bei dir die Kalenderanzeige im Boardindex? Welche Version?

Andreas

mediman

Ja selbstverständlich funktioniert die bei mir, hab ich doch gesagt.
Allerdings hab ich eine 1.1, die ich selber entbug habe und in Bezug auf performance optimiert habe.
Die Kalenderfunktionen sind allerdings die von B2
My Projects: http://ticker-oase.de 
Please do not PM me with support requests.

feline

Also ehrlich liebes SMF Team ...

das mit den "Today" functionen der SSI.php ist ja wohl ziemlicher Unfug (sorry, aber ich sehe es so).

Es würde (und tut es) alles sauber klappen, wenn man die Funktionen wirklich auf Today beziehen würde. Ich hab das alles geändert und so klappts auch mit dem Kalender und der Vorschau auf X Tage. Das sollte wirklich mal geändert werden ...

Siehe auch meinen Artikel ... hier

Fel

mediman

Quote from: feline on January 01, 2006, 05:25:40 PM
Also ehrlich liebes SMF Team ...

das mit den "Today" functionen der SSI.php ist ja wohl ziemlicher Unfug (sorry, aber ich sehe es so).

Es würde (und tut es) alles sauber klappen, wenn man die Funktionen wirklich auf Today beziehen würde. Ich hab das alles geändert und so klappts auch mit dem Kalender und der Vorschau auf X Tage. Das sollte wirklich mal geändert werden ...

Siehe auch meinen Artikel ... hier

Fel
Die Arrays werden sauber erzeugt.

Momentan haben wir aufgrund genau solcher Änderung massive Probleme, weil ohne wirkliche Kenntnis von Datenbankabfragen (Normalisierung, Join Tables etc.) Code geschrieben wird und dann pro Boardaufruf 50 Queries zusammen kommen.

Dann dürft ihr Euch über grauenhafte Performance und Serverloads um die 4 nicht wundern.
Das mit dem Boardindex hat im Übrigen mit der SSI nix zu tun.

Das mit dem Boardindex ist in der Tat ein Bug. Wird gefixed.
In die SSI wird die Funktion erweitert, um auch im Echo-Mode die heutigen Geburtstage bzw. Events auslesen zu können.

Mehr kann ich nicht für euch tun.

Cheers

mediman
My Projects: http://ticker-oase.de 
Please do not PM me with support requests.

feline

Hallo mediman,

Quote from: mediman on January 01, 2006, 07:45:21 PM
Quote from: feline on January 01, 2006, 05:25:40 PM
das mit den "Today" functionen der SSI.php ist ja wohl ziemlicher Unfug (sorry, aber ich sehe es so).
Momentan haben wir aufgrund genau solcher Änderung massive Probleme, weil ohne wirkliche Kenntnis von Datenbankabfragen (Normalisierung, Join Tables etc.) Code geschrieben wird und dann pro Boardaufruf 50 Queries zusammen kommen.

Erstens bin ich DBA (ja, ja) und zweitens habe ich die Today functionen nur dahingehend geändert, das eben nur die tatsächlich heutigen Events, Geburstage und Feiertage geliefert werden. Also bleib ganz ruhig und unterstell mir bitte, das ich keine Ahnug von der Sache habe, ok?

Fel



Dudelsack

Das ist kein Bug, sondern ein Feature ;)

Vielleicht war das nur ein Easteregg?


In diesem Sinne,
Pros(i)t ;)
sorry for my bad english

Hondo

Hi Fel,
von was für einer Today-function redest du denn?
Ich glaube du verwechselt da etwas. Das Problem hier hat keinesfalls mit SSI.php was zu tun, sondern mit der calendar.php und der Funktion calendarBirthdayArray() bzw. mit den Parametern $low_date und $high_date die in Subs.php gebildet werden:

$holidays = calendarHolidayArray($low_date, $high_date);
$bday = calendarBirthdayArray($low_date, $high_date);
$events = calendarEventArray($low_date, $high_date, false);


Aber in einem gebe ich dir recht dass die Sache etwas unsauber geproggt wurde. Stelle ich die Kalendertage im Voraus auf 0, ist der Wert $low_date auch 0 (86400 - 86400), trotzdem wird von der 0 in oben genannter Funktion calenderBirthdayArray versucht ein 4 Stelliger String zu extrahieren:

$year_low = (int) substr($low_date, 0, 4);

Warum jetzt die Geburtstage, Feiertage und Events am 1.1. nicht funktioniert haben weiss ich jetzt nicht, aber heute am 2.1. funktioniert es wieder ohne Codeänderung, bis zum nächsten 1.1. halt.

Andreas

mediman

Quote from: feline on January 02, 2006, 05:02:14 AM
Hallo mediman,

Quote from: mediman on January 01, 2006, 07:45:21 PM
Quote from: feline on January 01, 2006, 05:25:40 PM
das mit den "Today" functionen der SSI.php ist ja wohl ziemlicher Unfug (sorry, aber ich sehe es so).
Momentan haben wir aufgrund genau solcher Änderung massive Probleme, weil ohne wirkliche Kenntnis von Datenbankabfragen (Normalisierung, Join Tables etc.) Code geschrieben wird und dann pro Boardaufruf 50 Queries zusammen kommen.

Erstens bin ich DBA (ja, ja) und zweitens habe ich die Today functionen nur dahingehend geändert, das eben nur die tatsächlich heutigen Events, Geburstage und Feiertage geliefert werden. Also bleib ganz ruhig und unterstell mir bitte, das ich keine Ahnug von der Sache habe, ok?

Fel

Dann weiss ich nicht warum du denn Code so verhunzt.
Kein vernünftiger Codeschreiber schleift Queries.
Die Arrays liefern alles, was man benötigt, um die Abfragen in jeder gewünschten Form zu realisieren.
Darüberhinaus hab ich alle angesprochen, nicht nur dich.
Für mich ist schlechter und unnötiger Code halt schlechter bzw. unnötiger Code, da ist es mir egal, ob du SQL erfunden hast oder nicht.
My Projects: http://ticker-oase.de 
Please do not PM me with support requests.

mediman

Quote from: Hondo on January 02, 2006, 05:20:56 AM
Hi Fel,
von was für einer Today-function redest du denn?
Ich glaube du verwechselt da etwas. Das Problem hier hat keinesfalls mit SSI.php was zu tun, sondern mit der calendar.php und der Funktion calendarBirthdayArray() bzw. mit den Parametern $low_date und $high_date die in Subs.php gebildet werden:

$holidays = calendarHolidayArray($low_date, $high_date);
$bday = calendarBirthdayArray($low_date, $high_date);
$events = calendarEventArray($low_date, $high_date, false);


Aber in einem gebe ich dir recht dass die Sache etwas unsauber geproggt wurde. Stelle ich die Kalendertage im Voraus auf 0, ist der Wert $low_date auch 0 (86400 - 86400), trotzdem wird von der 0 in oben genannter Funktion calenderBirthdayArray versucht ein 4 Stelliger String zu extrahieren:

$year_low = (int) substr($low_date, 0, 4);

Warum jetzt die Geburtstage, Feiertage und Events am 1.1. nicht funktioniert haben weiss ich jetzt nicht, aber heute am 2.1. funktioniert es wieder ohne Codeänderung, bis zum nächsten 1.1. halt.

Andreas

Liegt am Arrayindex. Ich bin dran. Dauert aber bissi was, bin kein DBA  ;)
My Projects: http://ticker-oase.de 
Please do not PM me with support requests.

Hondo

Hi,
ich weiss was ein DAU ist, aber ein DBA?
Ich schätze mal Datenbankadministrator?

Lol, das ist ja wohl jeder der beim Hoster ein xy-Webspace hat und eine MySQL DB anlegen kann ;-)

Andreas

feline

Quote from: Hondo on January 02, 2006, 05:20:56 AM
Stelle ich die Kalendertage im Voraus auf 0, ist der Wert $low_date auch 0 (86400 - 86400), trotzdem wird von der 0 in oben genannter Funktion calenderBirthdayArray versucht ein 4 Stelliger String zu extrahieren:

$year_low = (int) substr($low_date, 0, 4);

kann eigentlich nicht 0 werden ... weil in der Subs steht:

// Calculate the YYYY-MM-DD of the lowest and highest days.
$low_date = strftime('%Y-%m-%d', forum_time(false) - 24 * 3600);
$high_date = strftime('%Y-%m-%d', forum_time(false) + $modSettings['cal_days_for_index'] * 24 * 3600);


es müsste also mininmal ein Tag rauskommen. Ausser dein PC spinnt *gg*

Fel

feline

Quote from: mediman on January 02, 2006, 06:47:36 AM
Quote from: feline on January 02, 2006, 05:02:14 AM
Erstens bin ich DBA (ja, ja) und zweitens habe ich die Today functionen nur dahingehend geändert, das eben nur die tatsächlich heutigen Events, Geburstage und Feiertage geliefert werden. Also bleib ganz ruhig und unterstell mir bitte, das ich keine Ahnug von der Sache habe, ok?

Dann weiss ich nicht warum du denn Code so verhunzt.
Kein vernünftiger Codeschreiber schleift Queries.
Die Arrays liefern alles, was man benötigt, um die Abfragen in jeder gewünschten Form zu realisieren.
Darüberhinaus hab ich alle angesprochen, nicht nur dich.
Für mich ist schlechter und unnötiger Code halt schlechter bzw. unnötiger Code, da ist es mir egal, ob du SQL erfunden hast oder nicht.
Hey .. ich glaub, du solltest erst mal nachsehen, was ich gemacht habe.
Wenn nicht notwendig .. sprich die Arrays sind vorhanden .. wird kein Byte aus der DB gelesen.

Und SQL habe ich auch nicht erfunden .. komm mal wieder runter von deinem Gaul

Fel

feline

Quote from: mediman on January 02, 2006, 06:51:34 AM
Liegt am Arrayindex. Ich bin dran. Dauert aber bissi was, bin kein DBA  ;)

Sehr witzig ..

Fel

feline

Quote from: Hondo on January 02, 2006, 07:20:30 AM
ich weiss was ein DAU ist, aber ein DBA?
Ich schätze mal Datenbankadministrator?

Lol, das ist ja wohl jeder der beim Hoster ein xy-Webspace hat und eine MySQL DB anlegen kann ;-)

Das macht ja MySql für dich bzw. SMF.

Nur kannst du auch MySql, UDB, Orakel oder MsSql installieren, warten und optimierte Queries schreiben? weisst was ein left-join, right-join oder inner/outer join ist? oder was MDC's sind? oder Views, Trigger? was datenreplication bedeutet?

Nicht? ??? Dann hast doch keine Ahnung was ein DBA macht ..

Fel

Advertisement: