čtvrtek 9. února 2012

Jak se přichází o domov

Ne ten skutečný, ale virtuální. Konkrétně ten o kterém byl tento blog. Shadoworld už je nějakou dobu mrtvej. Vlastně shadoworld už byl nějakou dobu mrtvej i počas toho když byl jěště živej. Nejsem si jistý proč, ale populace klesala a klesala až nakonec na stránku chodili tak čtyři lidé asi dvakrát za týden.
Možná proto, že znovu obživlo Město mrtvých ve své původní podobě. Možná proto, že můj vývoj SW se spomalil, až prakticky zastavil. Možná... nevím.

Každopádně ta definitivní rána byla když mi vypršela doména, stránka vlastně pořád běžela (a možná jěště běží, nevím), akorát už neměla www adresu, museli by jste na ni jít přes IP. To je jedno, skrátka vypršela doména, a já neměl peníze na její obnovení, i když to bylo směšných 10 eur na rok, nebo tak nějak. A pak mi ji nějakej podnikavec vyfoukl, protože si všiml že měla jistou dobu celkem pěknou návštěvnost a hezky se umisťovala při určitých klíčových slovech v googlu.

Dost to bolelo, bylo to pro mě jako ztratit "domov". Kdo mě zná ten ví, že žiju celkem dost na internetu, na SW jsem chodil... relativně často, když jinde nebylo co dělat, tak jsem se tam prostě přihlásil, a ani jsem nepsal, jen jsem tam byl přihlášen, a byl to pro mě pocit podobný tomu jako když po práci přijdete domů a zvalíte se na gauč, a prostě tam jste...

A pak už nebylo kam. A vlastně ani nemělo smysl ho obnovovat, byl to už hodně opuštěný a mírně zchátralý domov...

Bylo to už dávno, snad před rokem? Nevím přesně, ale stejně, když tohle píšu, stále jsem z toho smutný.
Po celý čas když jsem na něm dělal, když jsme tam chodili, jsem myslel, že kdyby znovu obživlo MMko, byl bych rád. A pak se to stalo, a já rád nebyl.

SW byl můj miláček, na dlouhou dobu to bylo splnění mého snu o projektu který nikdy neskončí, nikdy nebude hotový, pořád se v něm budu vrtat a nimrat, a piplat si ho, stavět ho výš a výš...
A pak zemřel. Chvíli po tom co začal upadat můj zájem jelikož začal upadat zájem lidí co tam chodili.
Ne, nechci házet vinu na vás, není vaše, je moje, ale to je jedno, nechci házet vinu na nikoho, prostě se to stalo.

A je mi to líto.
Ale jak řekl Kiowa, možná bylo načase pohnout se někam dál. Ale kam? To zatím nevím. Snažím se teď dělat jiné věci, ale ve skutečnosti je až tak moc nedělám. Ale to už je můj problém.

Jen jsem chtěl říct... měl jsem ho rád. Měl jsem rád vás, lidi co jste tam chodili.
Každá řádka kódu, kterou jsem pro SW napsal, vznikla s láskou a radostí, pro vás, stejně jako pro mě. Každá minuta kterou jsem mu věnoval stála za to, kvůli vám, stejně jako kvůli mě, stejně jako kvůli tomu co jsem se počas tvorby SW naučil. A naučil jsem se toho hodně. Prakticky jen díky shadoworldu jsem se naučil programovat weby. A taky díky vám, prostřednictvím shadoworldu, jsem se naučil hodně věcí o životě, a přístupu k němu. Asi je nepoužívám, ale to už je můj věčný problém, nezchopnost použít své znalosti v praxi.

Stejně vám děkuju, za všechen ten čas, za všechny ty myšlenky co jsme si tam vyměnili, za všechny ty hádky, a "hádky", za všechnu srandu i nesrandu která se tam odehrála, za všechny rady, slova výčitek i podpory, které tam padly.

A... trochu mě mrzí že tohle je zároveň jakoby "sbohem", jelikož to vypadá že mnoho lidí co na SW (v době jeho největší "slávy") chodilo už nechodí na MM. Chybíte mi, MM a pak SW byly jediné kontakty které jsem na vás měl. Ale zároveň bych asi měl být rád, že jste se dostali do bodu kdy podobnou stránku už nepotřebujete. Přeju vám všem hezký život, a děkuju že jste se mnou, a s ostatními, kousky z něj sdíleli, a že jste mi dovolili s vámi sdílet kousky toho mého.

Mějte se hezky, a jestli nejste Mrtví, tak se snažte nežít ve Stínu. Snažte se žít na slunci, je tam mnohem příjemněji, tepleji. Já se o to budu snažit taky.

Sit lux vobiscum.

středa 2. června 2010

Jak se optimalizuje SQL

Už na SW2 byl (a pořád jěště je) takový malý problém... Problém, který se asi ani nemá šanci projevit, ale v rovině teoretické přesto existuje...

Equilibrium.
Přesněji řečeno, zjišťování jestli už uživatel při zpovědi hlasoval nebo ne.
Tento údaj totiž musí být zaznamenán pro každého uživatele, což znamená že je na to potřeba samostatnou tabulku... Už nevím jak je to udělaný v SW2, myslím že tak, že při načtení Equilibria se do $_SESSION uloží záznamy o všech hlasováních uživatele...

A to je právě ten problém - pokud je jich kolem řekněme... stovky, tak je jěště všechno relativně v pořádku... Ale pokud by jich bylo... řekněme... tisíc, a na SW by bylo přihlásených v jednom momentě (a Equilibrium si čtoucích) 10 lidí, už je to 10000 záznamů, které si musí server držet v paměti... A tak dále, s každým zahlasovaným equi a každým připojeným uživatelem toto číslo roste, nemluvě o tom že tato informace se musí každému uživateli dopravit do počítače pokaždé když otevře seznam equi...

V SW3 jsem to chtěl udělat korektněji - narvat všechno do jedné query, pokud možno... aby vytáhla zpovědi a k nim přidružené informace o tom jestli momentálně přihlášený uživatel už ve zpovědi hlasoval, nebo ne.

Problém je, že tahle query byla monstrózní už než jsem se do ní začal pokoušet zakomponovat tenhle kousek... Musela vybrat zpovědi které byly přístupné dotyčnému uživateli (pokud nebyl přihlášen tak ty viditelné všem, pokud byl přihlášen tak ty viditelné všem plus ty jen pro přátele, ale od těch kdo ho mají v přátelích, plus všechny vlastní), a pak k nim jěště z další tabulky připojit informace o uživateli který zpověď přidal.
(Jak sami vidíte, v trochu jiném pořadí, ale to je detail...)

Vypadala takhle:
SELECT swEquilibrium.*, swUsers.Status, swFriends.Friend
FROM swEquilibrium
LEFT JOIN swUsers ON swEquilibrium.Owner = swUsers.Username
LEFT JOIN swFriends ON swEquilibrium.Owner = swFriends.Owner
WHERE (Friend = '{$_SESSION["Username"]}' AND VisibleTo = 2)
OR (VisibleTo <= " . Word2Privileges($_SESSION["Privileges"]) . ")
OR (swEquilibrium.Owner = '{$_SESSION["Username"]}')
GROUP BY swEquilibrium.ID
ORDER BY DateAdded DESC
LIMIT 15 OFFSET {$p};

({$_SESSION["Username"]} obsahuje vždy jméno momentálně přihlášeného uživatele, nebo prázdný řetězec, pokud uživatel není přihlášen, a {$p} je stránkovací proměnná, to je nepodstatný detail.)

Myslím že tohle byla druhá nejdelší query kterou jsem kdy vyplodil... První byla tuším na výběr deníkového záznamu na titulku, nebo equi na titulku, nejsem si jistý...
To co následovalo, se ale určitě s přehledem dostalo na první místo.

Pokus č.1.:
SELECT swEquilibrium.*, swUsers.Status, swFriends.Friend
FROM swEquilibrium
LEFT JOIN swUsers ON swEquilibrium.Owner = swUsers.Username
LEFT JOIN swFriends ON swEquilibrium.Owner = swFriends.Owner
LEFT JOIN swVotes ON swEquilibrium.ID = swVotes.ID
WHERE (Friend = '{$_SESSION["Username"]}' AND VisibleTo = 2)
OR (VisibleTo <= " . Word2Privileges($_SESSION["Privileges"]) . ")
OR (swEquilibrium.Owner = '{$_SESSION["Username"]}')
AND swVotes.Owner = '{$_SESSION["Username"]}'
GROUP BY swEquilibrium.ID
ORDER BY DateAdded DESC
LIMIT 15 OFFSET {$p};

...když jsem tohle slepil dohromady, a pustil to, a s překvapením se díval že to neháže žádný error, a pak se z toho překvapení vzpamatoval, tak jsem zjistil, že ta query jěště pořád běží...
A běžela něco kolem sedmi vteřin... Eh... Jak bych vám to... No, sedm vteřin je na SQL query SAKRA hodně, hlavně když pracujete s tak malými (v poměru k tomu na co je SQL stavěné) množstvími dat jako já...

No jo, šest a půl vteřiny, co to má sakra být? Zapoměl jsem do tabulky swVotes nahodit indexy? (Kontrola) ne, nezapoměl, primární tam není, ale ten tam ani být nemá, každý column má sice jiné kódování (databáze je utf8, sloupce této tabulky byly některé v latin2), ale to by měl být detail, a krom toho když jsem to opravil a spustil znovu, žádná velká změna...

A pak mi to došlo...
JOIN pracuje tak, že spojí všechny záznamy jedné tabulky se všemi záznamy druhé tabulky... A až pak probíhá WHERE, což je vlastně podmínka která nevyhovující odfiltruje...

Takže když máte tabulku A s 10ti záznamy, a tabulku B taky s deseti, a uděláte na nich JOIN, získáte tabulku kde bude každý záznam z A uveden desetkrát, pokaždé spojen s jiným z deseti záznamů z B... Což znamená že výsledkem bude tabulka o 100 záznamech, ze které se pak většina zahodí, protože nevyhovuje podmínce...

...a když děláte 3 joiny za sebou, udělá se třikrát to samé, takže spojením tabulek A, B a C, každé o 10ti záznamech získáte... tadá, tabulku o 1000(!) záznamech... Ze kterých se pak zase většina kvůli podmínce zahodí...

Je třeba si ale uvědomit, že každé spojení dvou řádků z tabulky, nebo kontrola řádku jestli vyhovuje podmínce, vás stojí něco času... Ono jsou to tisíciny vteřiny, někdy možná ani to ne, ale když dvě tisíciny vteřiny vynásobíte tisíci...

Zpátky ke query. Takže fungovala, ale fungovala tak, že udělala maximálně monstrózní tabulku všech možností, a pak ji celou prošla a zahazovala všechno co nevyhovovalo podmínce...

Což znamenalo:
168 (equilibrium) x 169 (users) x 212 (friends) x 6933 (votes) = 41 730 448 032

Ehm... to číslo jsem si musel pomalu pročítat odzadu aby mi došlo jak je obrovský...
Skoro 42. 42 MILIARD řádků...

Ze kterých se pak zahodí všechny kromě PATNÁCTI (což je délka jedné strany ve výpisu Equilibria)... Efektivita příkazu... 15 / 41 730 448 032 * 100 = 0,000000035945%, a myslím že to je tak neskutečně giganticky obrovsky titěrná hodnota, že mi asi můžete gratulovat... :-D. V praxi to znamená, že 99,999999964055% z těch víc jak šesti vteřin se vyplýtvá na spacování dat, které se stejně zahodí...

Tak jsem si řekl, že tohle tedy ne, musí být i jiná cesta... A po pár pokusech-omylech jsem se dopracoval k tomuto:

SELECT *
FROM (SELECT swEquilibrium.*, swUsers.Status, swFriends.Friend
FROM swEquilibrium
LEFT JOIN swUsers ON swEquilibrium.Owner = swUsers.Username
LEFT JOIN swFriends ON swEquilibrium.Owner = swFriends.Owner
WHERE (Friend = '{$_SESSION["Username"]}' AND VisibleTo = 2)
OR (VisibleTo <= " . Word2Privileges($_SESSION["Privileges"]) . ")
OR (swEquilibrium.Owner = '{$_SESSION["Username"]}')
GROUP BY swEquilibrium.ID
ORDER BY DateAdded DESC
LIMIT 15 OFFSET {$p}) AS tmpEqui
LEFT JOIN ((SELECT swVotes.Owner AS VoteOwner, swVotes.ID
FROM swVotes
WHERE swVotes.Owner = '{$_SESSION["Username"]}' AND Cathegory = 'Equilibrium') AS tmpVotes)
ON tmpEqui.ID = tmpVotes.ID;

Což znamená, že nejdřív udělám to, co jsem udělal původně, pak z toho udělám regulerní virtuální tabulku (nevím jestli se tomu tak říká, to je můj pracovní název, jde o to že jakmile query skončí, ta tabulka přestane existovat, ale do té doby se chová jako kdyby byla pevně zapsaná na disku, což není, protože je slepencem několika tabulek), kde se vyskytují jen ty záznamy které chci, a k ní pak připojím informace o hlasováních.
(Ale taky už jenom o těch hlasech, které mají souvislost s přihlášeným uživatelem a momentálně zpracovávanou zpovědí.)

Rozepsáno do bodů:
1. pospojuj všechny tabulky a informace které budeme potřebovat
168 (equilibrium) x 169 (users) x 212 (friends) = 6 019 104 řádků.

2. Projdi všechny řádky a vyřaď zpovědi které nemůže vidět
6 019 104 -> XY řádků, nemůžeme přesně vědět kolik, ale jedná se o všechny záznamy od začátku SW, bude jich obvykle kolem 80ti, a čím starší stránka bude, tím jich bude víc, ale pořád to bude kolem 0,000002%, nebo tak nějak, prostě mizivé množství, téměř zanedbatelné, pro naše účely počítejme s těmi 80.

3. Spoj s tabulkou hlasování
80 x 1 (votes na které je podmínka, takže ke každému equi vrátí jen jeden záznam, v takovém případě se tabulka "nemnoží", jen se záznamy správně seřadí) = 80

4. Vyber jen ty záznamy, které odpovídají druhé podmínce (tzn. hlasující = momentálně přihlášený, kategorie = Equilibrium, a ID zpovědi = ID ke kterému patři hlas.
80 -> 15;

Takže v tomto případě musí SQL zpracovat 6 019 104 + 80 (skládání v bodu 3) + 80 (filtrování v bodu 4) = 6019264 řádků...

Což je o 99,9999422% až 99,9999822% efektivnější, než ta první query...
A taky je to znát, proběhne přibližně za 8 setin vteřiny...

(Disclaimer: Ty čísla nejsou úplně přesná, zaprvý nevím jestli mám join a filtrování skutečně počítat jako dva průchody tabulkou, hlavně když probíhají hned po sobě, kde by je teoreticky MySQL mohlo bez obav okamžitě zahodit, pokud nevyhovují, a zadruhý jsou to jen moje odhady toho, jak MySQL uvnitř funguje... Ale ten rozdíl je naprosto jasný i kdybych měl hned ve výpočtech 50%tní chybu.)

Jo, a tenhle blog venujem Tomášovi Abaffymu, pretože sa ma pár mesiacov dozadu spýtal čo viem o optimalizovaní SQL/databázy, na čo ma napadli len správne zaindexované tabuľky a viac som si nevedel príliš predstaviť čo by chcel optimalizovať, tak som mu napísal "nie príliš veľa".

Tak teraz, neviem síce ako veľa toho o optimalizácií SQL viem z globálneho pohľadu, ale určite viac ako predtým... :-)

pondělí 24. května 2010

Mrtvá mrtvola mrtvě mrtví, umrtveně se mrtvolí :-D

No jo, Shadoworld je zase jednou down, teď už to bude asi druhým měsícem, pokud se nemýlím.
Sorry, nebyly prachy na hosting, nebyla motivace, nebyla nálada, a vlastně si to stejně nikdo nevšiml.

Zareagovali na to dva lidé, DVA!
Trvalo jim to asi dva týdny od momentu co šel off.

Díky, FireFly a blackie :-).

No, ale co dál?

Dejte mi měsíc a pohnu světem :-D.

Pořád dělám na SW3 a konečně se blíží dokončení, a příští měsíc bude dokončen a nahozen online a zas vám všem pošlu otravnej newsletter, ale aspoň vás donutím se tam jednou přihlásit, aby jste si mohli v nastaveních posílání podobných newsletterů vypnout.

A pak už poběžíme trvale, slibuju.
A LU taky, trochu to rozběhneme, přeci jenom v tom už není jen moje práce, ale taky kupa práce lidí co napsali články, a jen tak se na to vykašlat by zaprvý nebylo nanic a zadruhý by to bylo nefér...

24.6. tam bude.
Chystejte dort :-).

pátek 25. prosince 2009

Newsletter

Tak jo, podruhé v životě jsem před chvílí poslal něco jako newsletter, tohle konkrétně byl mail s informací o spuštění LU, všem registrovaným na shadoworldu, což je kolem 750 lidí (ano, v seznamu obyvatel na SW je jich jen kolem 250, to proto že zbytek z nějakého důvodu není aktivován), a vzápětí mi na hlavní LU mail přišlo kolem 450ti oznámení o nedoručení zprávy, vypadá to že většina z důvodu neexistence dotyčné mailové schránky...

...to se pak vlastně ani není co divit, že se jim nepovedla aktivace :-)

Tak uvidíme, kolik lidí z těch 250ti kterým to přišlo, se přijde podívat, a možná si po delší době vzpomenou i na SW.

středa 23. prosince 2009

LuxUmbrum - nový internetový časopis!

LuxUmbrum je online, neoficiálně od půlnoci ze včera na dnes, oficiálně odteď (což je cca 12:50).

Tento projekt mě napadl už asi před rokem, a od té doby jsem o něm dlouho vlažně snil a přemýšlel jak to udělat... vzniklo asi 6 různých designů, pak dlouho nic, a pak jsem se jednoho dne naštval a řekl si, že jdu na to... Takže jsem začal programovat a pak jsem si uvědomil že ty designy co mám jsou nanic, zavřel jsem NetBeans, otevřel Fireworks, a stvořil to, co vidíte :-).

No a o 4 dny už existoval základ stránky, měl jsem předběžně zamluveno asi 6 lidí na psaní článků (kteří se pak v praxi poděli někam... bůh ví kam... :-D), a v podstatě jsem jen čekal a mírně nakopával lidi ať píšou a články posílají...

No a včera jsem si řekl že i když mám článků jen šest, přičemž pět do hudby a od jednoho člověka, tak už dál čekat nebudu, protože jinak se asi ostatní nerozkývou k ničemu.

Takže jsem dodělal registraci, upravil pár posledních záležitostí, hodil to na web, napsal editorial, přidal články, a... šel spát... :-D

Dneska ráno jsem pak jěště napsal recenzi na Paranormal Activity, ať je něco i ve filmech, a udělal pár úprav...

A teď jen čekám... Na první koment k nějakému článku... Nebo na první reakci na SW.
...nebo na to, kdy se mi sakra konečně na LU aktivuje Google Analytics... :-D

A v průběhu toho čekání jěště vylaďuju detaily... je třeba změnit barvu odkazů, a dodělat stránku nastavení, about a kontakt, ale to má čas...

A řeknu vám, je to nádhernej pocit, spouštět vlastní stránku... Od spuštění shadoworldu jsem na něj už i zapoměl... :-)

Zatím to trošku zívá prázdnotou, ale to je proto, že redaktoři jsou líné vši, a začali něco dělat až teď, když jsem jim poposílal link... Najednou jsou celí překvapení že "vono už je to online?"...

Ano, je... tak pište...

Jo, a kdyby jste někdo chtěli být redaktorem, tak se ozvěte a něco s tím uděláme :-).

pondělí 24. srpna 2009

GRAFY!!! :-D

Tohle jsem objevil.

Jako kam se hrabe pChart... :-D. Jak jednoduchostí použití, tak zchopnostmi. Tohle umí a dokáže mnohem víc, a mnohem snáze se to používá.

Takže to použiju na SW :-P.

Jo, abych nezapoměl, na SW se zase jednou intenzivně pracuje, jelikož mám najednou až moc volného času. Tak moc, jak bych ani sám nechtěl...

A bezsenné noci, takže například dneska jsem celou noc nespal a programoval testy. A pak grafy. S nima jsem se hrál asi 3 hodiny, a to jěště v tom pChartu... A pak mě napadlo, že je dost ubohej, tak jsem zkusil najít jestli neexistuje nějakej opensource flashovej graf, a... OBJEVIL JSEM.

Odkaz už byl uveden nahoře.
Máte se na co těšit :-P.

čtvrtek 26. března 2009

Bordel v Indexu.php

...takhle to vypadá v kódu SW3 na začátku souboru index.php, kam si píšu poznámky co je třeba udělat, nápady co nového tam udělat, a nástiny jak to udělat...

/*
A koment na titulke robí v exploreri nejaké blbosti, skontroluj to pre istotu,
aj keď viem ž vo finálke asi na titulke žiadne komenty nebudú...
(ale prečo nie? čo tak nejaký najnovší/najlepšie hodnotený?)
*/

/*
Vidíš, spojazdníme hodnotenie komentov ;-)
*/

/*
A keď sme pri hodnoteniach, tak aj hodnotenie citátov, dorob to do DB k nim,
a za citát dáme rúčku s palcom hore, akože "Líbí se mi".
*/

/*
A potom rovno na profil zoznam obľúbených citátov!
Vymysli, sprav :-P
*/

/*
Oné, prehliadanie notifikácií funguje, takže už len z rôznych častí sprav ich
generovanie a potom jeden cron ktorý o polnoci vymaže všetky označené ako read.
*/

/*
Ešte stále nemáš vyriešené ako budeš enablovať/disablovať veci v toolbare
podľa toho čo na príspevku človek môže robiť!
(Asi butem musieť toolbar generovať funkciou z phpčka podľa privilégií a druhu
príspevku...)
*/

/* Z ľavého menu treba ešte spraviť:
- Denník (0%)
- Profil (0%)
- Nastavenia (0%)
*/

/* Z pravého menu treba ešte spraviť:
- Podmienky (0%)
- Občania (0%)
- Podporte SW (0%)
- Vychytávky (0%)
- Fórum (na štýl birdzovského skôr, ten výpis) (0%)

A dodať tam:
- Správa (Hlasovanie o prideľovaní titulov, banovaní userov a podobne...)
*/

/* V hornom menu nefunguje alebo chýba:
- Bibliotheka
- Testy (Daemon Intus) - Longin ti pár poslal na mail alebo do pošty na SW
- Hřbitov (Pax Mortem) - toto bude na dllllho dlho...
- To väzenie, ktoré ešte nemá meno (Inferno?)
*/

/* Ďalšie veci:
- Vyhľadávanie! Inteligentné a dobré!
- Autotagovanie spovedí! To bude chcieť trochu experimentov, že?
- Možno autotagovanie článkov?
- Inteligentné prideľovanie vĺn (viď nižšie)
*/

/* Inteligentné prideľovanie vĺn:
1. úroveň - za príspevky len tie, čo presahujú určitú dĺžku.
2. úroveň - za tie príspevky čo presahujú určitú dĺžku, alebo sa za nimi debata
rozprúdila (veľký počet dlhších príspevkov reagujúcich na autora) - netuším ako
by som spravil toto, ale bolo by to lepšie. Čím povedzme že v priebehu 12 hodín od pridania
by autor dostal vlnu za každý príspevok v reťazi ktorá začala reakciou naňho.
Analyzoval a prideľoval by to cronový skript, takže by mal aj dosť času... Len neviem ako.

Pri článkoch - za dobré hodnotenie samozrejme, + za rozpútanie diskusie (reťaziace sa dlhšie komenty)

Pri citátoch - za pridanie (1 vlna), keď pri ňom človek (okrem autora) klikne že je dobrý
(ajaxom, aby to nespravilo reload stránky).
*/

úterý 17. února 2009

Shadoworld.cz je znovu online

To je jediná věc, co bych vám dneska chtěl oznámit.
Akorát jěště, že je to ten samý shadoworld co znáte, na verzi 3 se pořád pracuje.
A proč už je zpátky online, když jsem předtím psal že to potrvá tak dva měsíce, a proč je to ten starý, když jsem psal, že už tam bude ten nový?.
Protože to drolí komunitu.
To mi řekl Kiowa, a já si uvědomil, že má pravdu.
A já nechci drolit komunitu.

Akorát maily které vám to měli oznámit se asi trochu zblbly, nevím...
Každopádně, have it ;-). A já budu dál dělat na SW3.

úterý 10. února 2009

Shadoworld.cz je offline

Jop, je to tady. Vypli ho dnes o 0:30.

Vážený zákazníku,

dnešního dne byl zastaven provoz Vašeho webhostingu k doméně shadoworld.cz. Důvodem zastavení provozu bylo neuhrazení poplatku za jeho provoz na další období.

Touto cestou bychom Vám rádi nabídli obnovení provozu Vašeho webhostingu v jeho původním rozsahu.
Pokud máte o obnovu provozu zájem, uhraďte prosím co nejdříve proforma fakturu č. 3609012011, která Vám byla vystavena a zaslána na kontaktní e-mail midnight.st@gmail.com. Tuto proforma fakturu naleznete také ve svém administračním rozhraní na admin.forpsi.com v sekci Fakturace - Hosting, připojení.

Možnost obnovení provozu Vašeho původního webhostingu k doméně shadoworld.cz skončí dne 12.04.2009 . V tento den dojde k definitivnímu odstranění záznamů o Vašem původním webhostingu z veškerých našich systémů a k úplnému smazání Vašich souborů a nastavení prezentace.

V případě, že nemáte o obnovu webhostingu zájem, rádi bychom Vám nabídli možnost zálohy jeho obsahu. Objednávku této služby mužete provést prostřednictvím své zákaznické administrace na http://admin.forpsi.com. výběrem položky "Zazálohovat na CD" u konkrétního webhostingu.

A neodpustím si jednu poznámečku - v momentě, kdy přestal fungovat hosting mi byl zakázán i přístup přes FTP a do databáze, co v praxi znamená, že kdybych neudělal zálohu, tak bych neměl jinou možnost než tady v posledním odstavci zmíněnou zálohu na cd. A je placená.
Sice je to tuším jenom symbolická stovka, ale stejně :-P.

Anyways, pokud chcete, rozšiřte tuto zprávu lidem, kteří na SW chodili a znáte je. Dejte jim třeba odkaz na tento blog, pokud chtějí mít nejčerstvější informace, nebo třeba na chvilku na SW zapomeňte a jděte se projít ven...

A pro ty kdo se ptají kdy bude zpátky: nerad si dávám termíny (i když se to budu muset naučit), a zrovna teď, kdy mám dost práce sám se sebou a stejně nevím kdy se mi zlepší situace, ale řekněme, že do dvou měsíců.
A pokud se mi do té doby nepovede udělat novou verzi (protože na hosting už bych tehdy měl mít), tak vrátím alespoň tu starou, nebo novou nedokončenou.

Ale jedno slibuji: SW se určitě vrátí.

neděle 8. února 2009

SW3: Nástěnka

Dneska, ve vlaku, cestou z Bystřice, jsem udělal nástěnku.
Jestli vypadá správně i v Exploreru jsem však zkontroloval až teď, a světe div se - vypadá!
Asi jednou když člověk napíše správně základ css, tak už jde všechno bezproblémově...

Tak se těšim...

Apropos, Internet Explorer - když už ho používáte, tak doufám, že v době SW3 už budete mít sedmičku, protože pro šestku neoptimalizuju už vůbec - přeci jen je to 12 let starý kus smetí... ehm... softvéru...

čtvrtek 5. února 2009

SW3: Equilibrium

Sranda jak rychle to jde, když člověk navrhne dobrou architekturu stránky...
Na novém SW se k tomuto momentu dá: přihlásit, odhlásit, prohlížet si první stranu z equilibria (protože jsem jěště nedodělal stránkovací tlačítka), a prohlížet si komenty ke zpovědím.

Takže pro kompletní equi chybí jěště: možnost přidávání komentů, a možnost přidávání equi.
(Tagováním a filtrováním se budu zabývat po tom, co se mi povede dostat SW3 do stádia, kdy bude stejně funkční jako SW2 (to které momentálně používáte).

Po equi se pustím do deníku. Po deníku do profilu a pošty.

Co dál? Uvidíme na co budu mít chuť =).

Shadoworld 3

Už dlouho jsem sem nenapsal, tak to právě napravuju jednou dobrou zprávou:
Pracuju na další (v pořadí třetí) verzi Shadoworldu.

Proč?
Hlavně proto, že jsem se zase posunul o něco dál, takže ho dokážu udělat lepší, rychlejší, přehlednější, s prohlížeči kompatibilnější a korektnější.
A kromě toho, Shadoworld 2 (verze která je momentálně na webu) je obrovský bordel, co jsem zjistil když jsem se předevčírem o půlnoci pokusil na nástěnku rychle dodělat možnost automatické (ajaxové) aktualizace zpráv.

Nejsem zchopný ho dál udržovat, ne to jěště rozšiřovat, a protože jeho momentální stav není ani zdaleka verzí finální, tak ho musím (a chci, protože mě to baví) udělat odznovu.

Kromě toho jeho kód je asi tak 3 až 4-krát delší než by mohl být, kvůli cca třem vrstvám abstrakce, které probíhají mezi samotnou komunikací s databází a zobrazením stránky.
A to je vrcholně zbytečné.

Většina stránek na momentálním shadoworldu funguje takhle:
index.php volá funkci GetContent na objekty pravého a levého menu, a pak getcontent na objekt středu stránky (který objekt to je se rozhoduje podle parametru page v adrese), ten objekt většinou volá další objekt, který volá jěště jeden objekt, a až ten generuje html, které se pak po celé této cestě vrací zpátky k indexu, který ho vypíše...

Prostě hromada zbytečného bordelu. A kromě toho stránka v IE nefunguje a vypadá příšerně, rozpadává se, a tak...

Takže jěště jednou, oficiálně oznamuju, že vyvíjím Shadoworld 3.
Mezi jeho hlaví výhody bude patřit:
rychlost, přehlednost kódu, malý kód, snadné dělání změn, moderní ovládání, a beztabulkový layout který bude bezchybně fungovat v IE7 (a vyšších?), FireFoxu, Opeře, Safari a Chrome.

A co asi vás, jeho uživatele zajímá víc - jeho nové funkce:
  • konečně možnost editace deníkových záznamů, svých komentů, a příspěvků ve fóru (s určitými omezeními které budou mít zabránit kompletnímu přepsání textu příspěvku)
  • Oficiální a Uživatelské tituly pro občany
  • Automatické rozpoznávání čeho se týkají zpovědi a na jej základě zařazení zpovědí do kategorií / přiřazení tagů
  • Možnost filtrování/zobrazení zpovědí podle tagů nebo autora
  • FLASH zprávy (ne, není to to, co si myslíte... nechte se překvapit)
  • Chat (zdravím Rusty =))
  • Soukromé thready ve fóru se seznamem uživatel kteří mají do threadu povolený vstup (seznam bude možno kdykoliv měnit a uživatele do něj přidávat/z něj odstraňovat), nebo se vstupem na heslo (exkluzivně pro Kiowu ;-) )
  • Možnosti hromadného označení a editace (zchocholouškování) příspěvků ve vámi založeném threadu (tohle chtěl tuším taky Kiowa, nebo Havrane?)
  • Testy: na začátek Test deprese (Beckova stupnice) a test závislosti (mé díky Longinovi_Kandinskemu, který mi k nim dodal podklady), časem jakékoliv další ke kterým dostanu podklady.
  • Statistiky výsledků testů - každé vaše vyplnění si stránka zapamatuje, a budete si moct zobrazit grafy výsledků, například jak se poslední týden podle testů vyvíjí vaše deprese, atd... Taky bude možno nastavit, jestli jsou výsledky zobrazitelné jen vám, i přátelům, nebo všem registrovaným (výchozí nastavení bude jen vám)
  • nastavení sledování jakéhokoliv threadu ve fóru, nebo komentů při jakémkoliv článku/zpovědi
  • fotogalerie/galerie obrázků přímo na serveru SW! s nastavením pro koho jsou viditelné, samozřejmě, a jestli je možné se na ně odkazovat i z jiných stránek než SW, taky s přímým určením stránek které se na ně můžou/nemůžou odkazovat...
  • "Virtuální fotogalerie" - zobrazení všech obrázků a videí, které uživatel kdekoliv na SW embednul
  • Automatické embedování obrázků a youtube videí (žádné další [img], prostě skopírujete přímo odkaz, a pokud končí příponou obrázku (.jpg, .png, .gif, .bmp), zobrazí se přímo v příspěvku. Co se týče youtube videí, postačí zkopírovat adresu z prohlížeče, a video se taky zobrazí přímo v příspěvku.
  • ...fanfáry prosím...: Hřbitov jak jste jej jěště neviděli! Přistihnete se při tom, že se jím jen tak procházíte, že dokonce ani nečtete náhrobky. A jestli jste pohřbeného měli rádi nebo nesnášeli, ostatní to poznají podle toho, jak se o hrob staráte. =)
  • Ankety! Zakládané občany.
  • Hlasování ohledem samotného fungování SW!
  • Peklo, kam se budou zavírat uživatelé jen tak pro srandu, nebo pro neslušné chování/porušování pravidel SW. Budete moci určit na jak dlouho, popis co danému uživateli po tu dobu pekelníci dělají, a taky praktické omezení, jestli budete chtít (x dní se nemůže přihlásit/psát komentáře/zpovědi), a pokud vám to bude ve veřejném hlasování občanů odsouhlaseno, máte to mít!
...uf... to jsem se nějak rozohnil...
...no dobrá, tohle všechno vás čeká... Nebudu psát že "už brzo", protože bych tím na sebe vyvíjel nátlak. Chci aby třetí generace SW byla kvalitní, dobrá, a hlavně kompletní...
Samozřejmě že pokud budete mít návrhy na nové funkce/části stránky, tak je zrealizuju, jestli budou dobré, ale kompletní v tom smyslu, jak už si SW dlouho představuju, a jak chci aby vypadal...

Pro další informace/novinky z vývoje třetí generace Shadoworldu sledujte tento blog, budu ho teď updatovat často =).

pondělí 1. prosince 2008

SW je down

Právě v této chvíli, poprvé v historii placenýho hostingu, a ne mou chybou.
A už je zpátky...

Malý krůček pro SW...

Možná jste si všimli nového skinu SW. Doufám že se vám líbí. Je to vlastně pokus o co nejvěrnější kopii toho jak vypadalo MM... (kromě obrázků, samozřejmě, jejich počet chci v samotném layoutu udržet na nejnižií možné hranici)...

Měl jsem totiž stesk za MM, a uvědomil jsem si že jeho barevné schéma je fakt mnohem příjemnější na pohled, než to modré / modřefialové co sw mělo. Každopádně si můžete vybrat které se vám líbí víc, v Nastaveních.

A taky už bych konečně chtěl/mohl udělat Křivdy a Úspěchy, vymyslel jsem si k nim vtipnou věcičku, že v profilu člověka se bude zobrazovat, že má X Křivd a Y Úspěchů a bude při tom ikonka která bude nějak znázorňovat ten poměr... A taky vám přibyde jeden "titul" podle toho jak hlasujete při zpovědích, možnosti budou Milosrdný, Krutý a Neutrální.

Už to "jen" udělat.

A... děkuju vám, lidi...

Kiowa: nikdy to nebude stejný, tak proč to chceš kupovat? MM je konečně doopravdy mrtvý a z jeho popela povstal svět stínů.

Black.Fairy: MIDNIGHTE, nepropadej depresím. Jsme rádi, že SW máme, že se můžeme zase někde hádat a předávat si názory / zkušenosti aspoň virtuálně : ) chopil ses toho a dovedl jsi to až sem, i kdyby to takhle mělo zůstat napořád, tak jsi odvedl kus skvělý práce a my jsme ti všichni vděčný. I ta Bejunka, protože se má kde vykecat. Takže nevěš hlavu, na MM jen vzpomínej a nechtěj oživovat něco, co už má zůstat zakopáno.


MilujuBublinky: Midnight: panebože... jako vrátit se v čase.... strašně zvláštní..vrátit se tam, kde sem strávila tolik času.. a najendou to bylo v nedohlednu..tyjo..sem z toho úplně v prdeli.

Moc pro mě všechny vaše reakce na změny na SW (a na moje podivné nálady) znamenají...

Dobrá, ale trochu jiný věci jsem chtěl... Zaprvý, zajímá mě, kolik lidí si nechalo nastavený nový skin, a kolik se vrátilo k starému, takže si uděláme takovou malou tabulku:

SELECT Skin, COUNT(Owner) FROM swUserSettings GROUP BY Skin;
SkinPočet registrovaných
Shadoworld1
Nostalgie (MM skin)183

Takže... jo, myslel jsem si, ten MM skin je fakt příjemnější, přiznám se, že ten jeden člověk co má nastaven SW skin nejsem já...

Jěště jednou díky, vám všem, že jste se mnou, a díky tomu je mimo jiné SW velmi hodnotným příspěvkem do mého webprogramátorského portfolia... O:-)

Mám vás rád =)

čtvrtek 27. listopadu 2008

Pavlina19

Tak mě k tomu konečně dokopali.
Spojené síly ostatních uživatel, Pavliny samotné, a toho že jsem konečně měl zase trochu času způsobily, že jsem pavlině nastavil limit...

Zkrátka to její floodování Equilibria už bylo moc... A nedala si říct a nedala. A furt jí všichni do komentů nadávali...

No, prostě odteď může přidat Equi jen když od toho minulého přidání uběhlo sedm dní a více...

Ale abych ti udělal alespoň trochu radost Beju, jsi navěky (nebo alespoň než se mi bude chtít naprogramovat to lépe a korektněji) zapsaná v samotném zdrojovém kódu SW:


//ak je user Pavlina19, tak skontroluj poslednú spoveď
//(temporary code, malo by byť robené všeobecnejšie, aby sa to dalo
//aplikovať na akéhokoľvek usera cez db)
if($Login->Get() == "Pavlina19")
{
$qr = mysql_query("SELECT * FROM swEquilibrium WHERE (Owner = 'Pavlina19') AND (OwnerRegistered = 1) ORDER BY DateAdded DESC LIMIT 1;");
$fqr = mysql_fetch_assoc($qr);

//ak je dátum pridania starší ako 7 dní, nesprav nič, ak novší, tak vypíš hlášku a returnni
if($fqr["DateAdded"] > date("Y-m-d H:i:s", strtotime("-1 week")))
{
$le = date("d.m. Y, H:i", strtotime($fqr["DateAdded"]));
$ne = date("d.m. Y, H:i", strtotime($fqr["DateAdded"]) + 60*60*24*7);

$res =
...[snip: html kód zprávy která se jí zobrazí]...

return $res;
}//koniec ifu ak je limit v platnosti
}//koniec ifu ak je user Pavlina19

pondělí 8. září 2008

Konečně!

Lidi, budeme mít články!
Konečně jsem našel co jsem hledal.
Webový WYSIWYG RTF... tedy spíš HTML (ale to není až tak podstatné) editor...

Ehm, laicky řečeno, něco jako takové malé okénko wordu na stránce - a díky němu budete moct formátovat text který píšete - nastavit mu písmo, velikost, barvu, zarovnání, jednoduše vkládat odkazy, obrázky, a dokonce i videa nebo flashové animace!

Říká si to tinyMCE, a je to udělaný kompletně v JavaScriptu, a já sice netuším jak, ale jeho tvůrce obdivuju...

Jo, a proč o tom mluvím v souvislosti s články?
Protože v mém konceptu se takovýto editor s články vždy spojoval...
Už dávno jsem vám mohl dát další textarea, kam by jste ty "články" psali, ale nebylo by to ono... Byl by to zase jen obyčejnej text, bez všech těch možností, které měla editace článků na původním MM, a to mi přišlo nepřípustné.
Tak jsem hledal.
A teď, asi po třech měsících jsem našel!

Takže články budou, tak do dvou týdnů.
(Přeci jen to není jenom o tom editorku, chce to taky novou tabulku, pár nových PHP tříd, udělat schvalování a výpis, a tak.)

Avšak editor už je vlastně plně funkční, a můžete si jej klidně vyzkoušet, tady.
Po tom, co si vyhrajete se vším možným, stiskněte uložit (hned první tlačítko, klasická disketka), a text se zatím sice nikam neuloží, ale zobrazí se vám téměř tak, jak by se zobrazil v článcích...
(Akorát že bude na celou stránku, a v článcích bude jenom ve středovém panelu. A taky si budu muset promyslet defaultní barvu pozadí, písma, atakdál... Ale i přes to si je budete moci změnit...)

Zabavte se, doufejte že se mi to povede, a držte palce =)

středa 3. září 2008

SAKRA! Aktivační maily!

...až teď mi to došlo, když jsem se rozhodl podívat do registrační classy... až teď jsem si uvědomil, proč nějak stoupal počet lidí stěžujících si na nemožnost přihlášení/nefunkční registraci...

Nechodili jim aktivační maily! A když přišly, tak tam byla špatná adresa, jěště na starej server!

...ale už je to opravený. A taky už konečně funguje diakritika, a je to hezkej HTML mail, a taky subject a mail-from, a tak...

Jo, a taky jedna minoritní chybička - když jste jako host přidali zpověď, a do Nicku jste zadali jméno existujícího uživatele, v hlavičce spovědi to k vám přiřadilo status toho registrovaného, i když to nebyl link na jeho profil...

Problém byl, že podmínka kontrolovala jestli je nastavenej status, a když ne, tak ho nastavila na "Host". Ale status nastavenej byl - protože z DB jsem tahal záznamy o Equi a pároval je se záznamy o uživatelech na základě uživatelského jména, takže pokud se jména shodovaly, status prostě nastavený byl. O kus dál však podmínka, která rozhodovala jestli z jména udělat link na profil nebo ne, kontrolovala jestli OwnerRegistered při zpovědi je true nebo false, a fungovala správně.

Nevím co to bylo za nápad s tou první podmínkou, ale přepsal jsem ji taky na if(!OwnerRegistered){Status = "Host";}, a běhá to správně.

To by bylo nadnes vše, zítra snad něco o obyvatelstvu, a událostech na SW samotném, ne v jeho kódu.

úterý 26. srpna 2008

Diaries

...tak už se mi konečně povedlo je sfunkčnit?
Myslím zobrazování posledního přidaného vůbec, nebo posledního v deníku konkrétního uživatele...
Ta query byla zabiják...
Schválně, query která vybere nejnovější záznam a bere v úvahu i to, jestli máte dostatečné privilegia na čtení záznamu (jste registrovaní, nebo vás má jeho majitel v přátelích, podle toho jak je ten záznam nastaven) vypadá takto pro vybrání záznamu na titulku:

$hugeQuery =
"SELECT *
FROM (
SELECT swDiaries.Owner, swDiaries.DateAdded, swDiaries.VisibleTo, swDiaries.Title, swDiaries.Text1, Ft.FriendOwner, Ft.Friend
FROM swDiaries
LEFT JOIN (SELECT swFriends.Owner AS FriendOwner, swFriends.Friend
FROM swFriends
WHERE (swFriends.Friend = '" . $Login->Get() . "')) AS Ft
ON swDiaries.Owner = Ft.FriendOwner ORDER BY swDiaries.DateAdded DESC) as ResT
WHERE (ResT.VisibleTo <= " . $Login->GetPrivileges() . ") OR ((ResT.VisibleTo = 3) AND (ResT.Owner = '" . $Login->Get() . "')) OR ((ResT.VisibleTo = 2) AND (ResT.Friend = '" . $Login->Get() . "'))
LIMIT 1;";

A query pro výběr nejnovějšího záznamu z deníku konkrétního uživatele (pro zobrazení v jeho profilu), která taky bere v úvahu všechna privilegia a tak, vypadá zase takhle:

$hugeQuery =
"SELECT *
FROM (
SELECT swDiaries.Owner, swDiaries.DateAdded, swDiaries.VisibleTo, swDiaries.Title, swDiaries.Text1, Ft.FriendOwner, Ft.Friend
FROM swDiaries
LEFT JOIN (SELECT swFriends.Owner AS FriendOwner, swFriends.Friend
FROM swFriends
WHERE swFriends.Friend = '" . $Login->Get() . "') AS Ft
ON swDiaries.Owner = Ft.FriendOwner ORDER BY swDiaries.DateAdded DESC) as ResT
WHERE (ResT.Owner = '" . $Owner . "') AND ((ResT.VisibleTo <= " . ($Login->GetPrivileges()) . ") OR ((ResT.VisibleTo = 3) AND (ResT.Owner = '" . $Login->Get() . "')) OR ((ResT.VisibleTo = 2) AND (ResT.Friend = '" . $Login->Get() . "')))
LIMIT 1;";

pondělí 25. srpna 2008

č. jednotné č. množné
1. p. téma témata
2. p. tématu témat
3. p. tématu tématům
4. p. téma témata
5. p. téma témata
6. p. tématu tématech
7. p. tématem tématy

Sakra, už bych to konečně v tom fóru mohl poopravovat, co?

čtvrtek 14. srpna 2008

Krátkodobé cíle...

Takže... Co dál?

1. Úpravy fóra. Při výpisu témat nezobrazovat poslední vytvořený thread v tématu, ale poslední ve kterém byl přidán nový post. A taky udělat, aby to byl rovnou link.
1.1. Taky poopravovat výskyty slova téma.

2. Při zakládání nového threadu udělat možnost "Zvýraznit tento thread (stojí 5 vln) - zobrazí informaci o založení threadu v novinkách v pravém panelu.", kde po jejím zaškrtnutí budete moct napsat text, který se má v pravém panelu zobrazovat, a speciální bbcode značka [threadlink]nějaký text[/threadlink] se překonvertuje na link přímo do threadu.

3. Opravit popup menu online panelu - pošta se totiž neodešle, když někomu píšete přes stránku která se otevřela kliknutím na "Napsat zprávu" z tohoto menu.

4. Dodělat zobrazování pohlaví/statusu při jménech uživatel.

5. Popup okno se základními údaji o uživateli, když na něj najedete myší. A taky s možností zobrazit profil, a napsat zprávu.

To jsou asi všechny krátkodobé cíle.