Středa duben 22, 2009
Rozdíly v implementaci SQL jazyka
· rubrika Clanky · kategorie Databáze
Ti zvás, kteří již měli možnost pracovat s více databázovými
systémy (DBMS), zajisté o této problematice vědí své. I když je SQL
standardizován (existuje 6 verzí SQL-89, SQL-92, SQL-99, SQL:2003, SQL:2006 a
SQL:2008), tak většina DBMS implementuje jen některé části. Mnohdy je
k tomu vedou požadavky uživatelů nebo trhu obecně. V dnešní době je
navíc většina DBMS založena na standardu SQL-92 a implementace
významnějších částí standardů SQL-99 a SQL-2003 je k nalezení pouze
u některých produktů. Poslední standardy SQL:2006 a SQL:2008 jsou na tom
s jejich podporou momentálně nejhůře.
Zhlediska rozdílů v implementaci SQL jazyka v databázích jsem narazil na
zajímavou stránku,
kde se srovnává MySQL, MSSQL, Oracle, PostgreSQL, DB2 a Informix. Věřím,
že některým z vás tato stránka pomůže
20:23
—
Komentář
—
Stálý odkaz
Nové ATI Catalyst 9.4
· rubrika Blog · kategorie Software

Opět tu máme novou verzi ovladačů pro grafické karty společnosti ATI.
Výkonové porovnání se staršími verzemi je opět dostupné na serveru Svethardware.cz.
Stahovat můžete zde.
13:48
—
Komentář
—
Stálý odkaz
Úterý duben 21, 2009
Optimalizace pro import velkého nmnožství dat do databáze
· rubrika Clanky · kategorie Databáze
Optimalizace se týkají vkládání (importu) většího počtu dat, které bude rychlejší a omezí se případné chyby, které by mohly nastat (typicky závislost mezi primárním a cizím klíčem). Obecně se jedná o následující kroky, které se provedou před vkládáním dat:
- odstranění primárních, cizích klíčů
- deaktivování (odstranění) indexů
- deaktivování (odstranění) trigerrů
- při použití transakcí vypnout tzv. autocommit (mód, kdy je okamžitě každý SQL příkaz implicitně potvrzen jako commit)
- zvýšení pracovní paměti na databázovém serveru
Po úspěšném vložení dat dojde ke znovu vytvoření primárních a
cizích klíčů, aktivování nebo vytvoření indexů a triggerů a
k upravení pracovní paměti na databázovém serveru, pokud byla předtím
hodnota změněna.
Samozřejmě existují optimalizace pro konkrétní typy databází. Například
v PostgreSQL příkaz VACUUM a
v MySQL OPTIMIZE
TABLE, které by se měly používat pokud v tabulce dochází k častým
změnám řádků.
14:04
—
Komentář
—
Stálý odkaz
Neděle duben 19, 2009
Skutečný výkon ATI Radeon HD 4890
· rubrika Blog · kategorie Hardware
Na světě jsou už nějakou
dobu výsledky výkonu ATI Radeonu HD 4890 a jak možná (ne)víte, výkonově
je zhruba o 10–13% lepší než HD 4870. Pro mne je to trošku zklamání,
protože jsem doufal, že nedojde pouze ke zvýšení taktů (sice došlo ke
změnám aby bylo možné dosáhnout vyšších taktů, ale já prostě čekal
něco víc)
Na druhou stranu je třeba říci, že karty méně topí a
mají o něco menší spotřebu a to je určitě plus. ATI tak dostála toho co
se tu již nějakou tu dobu před vydáním šuškalo. Pokud vás zajímají
testy, tak vám zde uvádím seznam na všechny testy, které se mne podařilo
najít (když najdete další napište do komentářů a já ho sem přidám).
Seznam jsem pro přehlednost rozdělil podle jazyků, v kterém jsou dané
články napsány.
Testy v českém jazyce:
- http://pctuning.tyden.cz/index.php?…
- http://www.zive.cz/…default.aspx
- http://www.extrahardware.cz/…h-grafik-ati
- http://www.ddworld.cz/index.php?…
- http://www.svethardware.cz/…02C3EBE.html
Testy v anglickém jazyce:
- http://www.trustedreviews.com/…n-HD-4890/p1
- http://benchmarkreviews.com/index.php?…
- http://www.hardwarecanucks.com/…-review.html
- http://www.neoseeker.com/…D4890launch/
- http://www.guru3d.com/…review-test/
- http://www.pcper.com/article.php?…
- http://www.overclockersclub.com/…ire_hd_4890/
- http://www.overclockersclub.com/…olor_hd4890/
- http://www.ultimatehardware.net/…_hd_4890.htm
- http://www.pcadvisor.co.uk/…ws/index.cfm?…
- http://www.xbitlabs.com/…-hd4890.html
- http://hothardware.com/…90-Unveiled/
- http://www.hexus.net/…ent/item.php?…
- http://www.elitebastards.com/cms/index.php?…
- http://www.techpowerup.com/…0_CrossFire/
- http://www.tweaktown.com/…d/index.html
- http://www.phoronix.com/scan.php?…
- http://www.tomshardware.com/…90,2262.html
- http://www.anandtech.com/…showdoc.aspx?…
- http://www.pcstats.com/articleview.cfm?…
- http://www.motherboards.org/…/1874_1.html
- http://www.overclock3d.net/reviews.php?…
- http://www.reghardware.co.uk/…eon_hd_4890/
- http://www.ocaholic.ch/…ion/item.php?…
- http://www.insidehw.com/…890-1GB.html
- http://www.amdzone.com/…eon-4890-1gb
- http://benchmarkreviews.com/index.php?…
- http://en.thethirdmedia.com/…39c18p1.html
- http://www.extremetech.com/…44294,00.asp
- http://www.driverheaven.net/reviews.php?…
Testy v německém jazyce:
- http://www.gamestar.de/…hd_4890.html
- http://www.hartware.de/…w_925_1.html
- http://www.computerbase.de/…rce_gtx_275/
Testy v chorvatském jazyce:
09:29
—
Komentář
—
Stálý odkaz
Neděle duben 12, 2009
PowerShell
· rubrika Blog · kategorie Software
Tak jsem se dneska zjišťoval, jaké volitelné aktualizace jsou dostupné pro můj operační systém Windows Vista Bussines. Narazil jsem tam na zajímavou aktualizaci „Prostředí Windows PowerShell 1.0 pro systém Windows Vista (KB928439)“. Mrknul jsem se na internet a zjistil jsem, že Microsoft Windows PowerShell je nové prostředí příkazového řádku se skriptovacím jazykem, respektive náhrada za CMD Prostředí Windows PowerShell je založeno na rozhraní .NET Framework (bez jeho přítomnosti tedy nefunguje) a umožňuje řídit a automatizovat správu systému Windows a aplikací. Více informací je k nalezení zde.
10:21
—
Komentář
—
Stálý odkaz
Sobota duben 11, 2009
"Unbuffered" dotazy
· rubrika Clanky · kategorie PHP
Možná víte, možná nevíte, ale pokud programujete v PHP a položíte
nějaký dotaz na databázi, který vrací výsledky, pomocí klasických
funkcí mysql_query, pg_query atd., tak PHP čeká na všechny
data od databáze, ty si uloží v paměti a teprve následně pak s nima
může programátor pracovat. Při malém množství vrácených záznamů nám
toto vadit nebude, ale co když budeme například exportovat tabulku
s milióny záznamů? Brzo by došla pamět procesu (ne paměť přidělená
PHP skriptu).
Toto by se dalo vyřešit dvěma způsoby:
- – Prvním dotazem si zjistit kolik nám bude vráceno záznamů a pak
v cyklu číst vždy pouhých xxx záznamů, ty následně zpracovat
(samozřejmě také uvolnit použité zdroje
) a pak dalším dotazem si
říct o další, dokud je nepřečteme všechny. - – Použít tzv. „unbuffered“ dotazy, kdy se žádná data nikde neukládají, pomocí funkcí mysql_unbuffered_query, …
Druhý zmiňovaný způsob lze ovšem použít pouze pro databáze MySQL, SQLite a Sybase a má několik nevýhod:
- nelze zjistit počet vrácených záznamů
- tabulka zůstane blokována, dokud se nepřečtou všechny záznamy
- lze pracovat jen s posledním položeným dotazem
A co se děje když položíme dotaz na MySQL pomocí funkce
mysql_unbuffered_query()? Nedalo mne to a prozkoumal jsem si zdrojové kódy
PHP, kde jsem zjistil že se volá funkce
mysql_use_result()
v případě unbuffered dotazů
jinak při normálních dotazech funkce „mysql_store_result()“: http://dev.mysql.com/…-result.html
(funkce jsou z MySQL API pro C).
Rozdíl je v tom, že při volání mysql_use_result() si databáze alokuje
paměť nutnou pro přečtení jednoho záznamu a
ten pošle klientovi a po zavolání funkce mysql_fetch_row() (opět MySQL API
pro C) databáze přečte další řádek a ten pošle klientovi atd. dokud se
nepřečtou všechny záznamy. V opačném případě se čte více dat a jak
jsem již psal PHP si nejdříve vše uloží do paměti a pak stím umožní
pracovat
13:54
—
Komentář
—
Stálý odkaz
Středa duben 8, 2009
Tak nám zase zrušili chodník přátelé!
· rubrika Blog · kategorie Ze života
Člověk se nestačí divit co všechno se děje s jedním chodníkem,
v ulici Husova v Liberci. Téměř každý den ho využívám k docházení
do budov naší univerzity a těsně před mistrovstvím byl opraven a nově
byla vytvořena i místa pro parkování ze strany silnice. Asi týden po
dokončení byly části chodníku vyříznuty a následně zase
„zalátovány“. Už v tuhle chvíli si asi člověk řekne, že tohle není
normální. Jaké bylo pro mně překvapení, když jsem včera viděl jak
dělníci odstraňují asfalt
Člověka tak napadá, zda nám chodník
neopravili jenom na dobu konání MS 2009 a nyní nám vrátí chodník do
původního stavu
08:05
—
Komentář
—
Stálý odkaz
Čtvrtek duben 2, 2009
Uvozování identifikátorů v SQL dotazech
· rubrika Clanky · kategorie Databáze
Co je identifikátor snad nemusím vysvětlovatINSERT INTO set (cislo1, cislo2, cislo3) VALUES (0,1,0);MySQL nám vyhodí chybu, jelikož slovíčko set je příkaz (př. SET NAMES utf-8 ) a neočekávalo ho na tomto místě
You have an error in your SQL syntax; check the manual thatZkusme nyní názvy identifikátorů napsat takto:
corresponds to your MySQL server version for the right syntax to
use near 'set
`nazev_identifikatoru`Na databázi pak položíme upravený dotaz:
INSERT INTO `set` (`cislo1`, `cislo2`, `cislo3`) VALUES (0,1,0);Nyní se data úspěšně vloží do databáze, která díky ` zjistí, že bude následovat název identifikátoru. V každé databázi je to však jinak, např. v PostgreSQL se používají dvojté uvozovky ".
18:56
—
Komentář
—
Stálý odkaz
Úterý březen 31, 2009
Zpropadený Firefox aneb synchronizace u XMLHttpRequest
· rubrika Clanky · kategorie AJAX
Je tomu teprve pár týdnů, kdy jsem se začal věnovat AJAXu, protože jsem ho potřeboval použít v mé diplomové práci. V ní jsem potřeboval zavolat jeden skript a po jeho dokončení ho znovu zavolat, jen s jinými parametry. Výsledky běhu skriptu (tzn. proběhlo to ok, nastala nějaká chyba), jsem chtěl zobrazovat do různých objektů na XHTML stránce. Napsal jsem si tedy tři funkce na práci s XMLHttpRequest, kde jsem v jedné z nich použil následující kód:xmlhttp.open("GET",url,false);
Třetí parametr metody open říká, zda se má čekat na odpověď či nikoliv tzn. zda se použije synchroní nebo asynchroní mód.
Celé to funguje tak, že při synchroním přenosu, dojde k vytvoření nového vlákna přičemž původní je pozastaveno (tzn. je pozastavena veškerá interaktivita na straně klienta). V nově vytvořeném vláknu dojde k vyřízení požadavku a po jeho skončení se opět aktivuje vlákno původní a to zpracuje získaný výsledek. V druhém případě se nové vlákno nevytváří a uživatel tak může klidně dále využívat interaktivních stránek a po dokončení požadavku, je jeho výsledek zpracován.
Vše fungovalo dobře v Opeře 9.64, tak jsem to vyzkoušel i v IE 8 a následně ve Firefoxu 3.0.8. Jak jsem překvapivě zjistil, v mé nynější (a nejnovější) verzi Firefoxu synchroní přenos nefunguje (na internetu jsem se po té našel informace o nějakém bugu, ale už nevím kde
Druhou metodou lze poslat více požadavků najednou a současně čekat na jejich vyřízení. Tuto variantu jsem nechtěl použít z důvodu toho, že skript na který se odkazuji exportuje data z databáze a importuje do jiné. Mnohdy jde i o statisíce záznamů a tak jsem nechtěl server moc zatěžovat vícenásobným spuštěním skriptu. Bohužel jsem po několika hodinách dospěl k názoru, že je to jediné možné řešení.
Pokud například chceme výsledky zobrazovat v různých objektech na (X)HTML stránce, tak jako já v diplomce, stačí k tomu použít třídu v JavaScriptu, kde si dokážeme uchovat jednotlivé instance XMLHttpRequestu a id objektu (bez použití třídy by jsme o ně přišli). Napsal jsem si tak vlastní třídu, kterou můžete najít níže. Předem bych chtěl schovívavost ke kódu. Vím, že mnou napsaná třída nesplňuje požadavky na znovupoužitelnost, až budu mít více času upravím ji
Zdrojový kód:
- /**
- * Trida pro vykonavani Http pozadavku (AJAX)
- */
- function HttpClient() { } // HTTPCLIENT CLASS
- HttpClient.prototype = {
- // GET nebo POST
- request_type:'GET',
- // synchroni a nebo asynchroni pozadavek (synchroni nefunguje ve firefoxu 3 neco
) - request_async:true,
- // instance
- xmlhttp:false,
- //kde se zobrazi vysledek
- where_show_content:'',
- // inicializace -> vytvoreni XMLHttpRequest
- init:function() {
- try {
- // Mozilla / Opera / Safari
- this.xmlhttp = new XMLHttpRequest();
- }
- catch (e){
- // IE (snad vsechny nejpouzivanejsi verze)
- var MSXML = new Array('MSXML2.XMLHTTP.5.0',
- 'MSXML2.XMLHTTP.4.0',
- 'MSXML2.XMLHTTP.3.0',
- 'MSXML2.XMLHTTP',
- 'Microsoft.XMLHTTP');
- var ok = false;
- for (var i=0;i < MSXML.length && !ok; i++){
- try {
- this.xmlhttp = new ActiveXObject(XMLHTTP_IDS[i]);
- success = true;
- }
- catch (e){}
- }
- if (!success){
- alert('Váš prohlížeč napodporuje AJAX!');
- }
- }
- },
- //provedeni pozadavku
- request: function(url){
- if (!this.xmlhttp){
- this.init();
- }
- this.xmlhttp.open(this.request_type,url,this.async);
- this.xmlhttp.send(null); //pro posilani POST pozadavku
- //zobrazení loadingu
- document.getElementById(this.where_show_content).innerHTML = '<img src=\"images/loading.gif\" alt="" />';
- //zpristupneni this ve funkci
- var self = this;
- this.xmlhttp.onreadystatechange = function(){
- switch(self.xmlhttp.readyState) {
- case 0:
- break;
- case 1:
- break;
- case 2:
- break;
- case 3:
- break;
- case 4:
- if (self.xmlhttp.status == 200) {
- document.getElementById(self.where_show_content).innerHTML = self.xmlhttp.responseText;
- }else {
- alert('HTTP Chyba při vykonávání dotazu: ' + '[' + self.xmlhttp.status + ']' + ' ' + self.xmlhttp.statusText);
- }
- break;
- }
- }
- }
- }
- /**
- * ukazka volani tridy
- */
- var client = new HttpClient();
- client.async = true; //asynchroni mod
- client.where_show_content = 'main-box'; //kde zobrazit vysledek
- client.request('localhost/diplomka?pg=ajax'); //url pozadavku
20:00
—
Komentář
—
Stálý odkaz
Nákupní galerie Plaza Liberec
· rubrika Blog · kategorie Ze života
26. 3. 2009, to je ten posvátný den, kdy byla otevřena nákupní galerie v Liberci jménem Plaza, která měla původně otevřít již na podzim.
Tento rok je to již třetí nákupní centrum, které bylo v Liberci
otevřeno a celkový počet se tak vyšplhal na pěkné číslo pět. Nyní je
tak v Liberci Nisa centrum, Plaza, Forum, Géčko a Delta. Nabízí se tu tak
otázka, jak se obchodní centra vypořádají s konkurencí? Přeci jenom
číslo pět není malé na Liberec, který má okolo 100 000 obyvatel.
Řekněme si na rovinu, že všechna centra nabízí téměř to samé, což
znamená moře podobných obchodů, především s oblečením. Navíc tu
probíhá krize, která bude mít také svůj dopad. Mým názorem je, že
minimálně jedno centrum tu nepřežije a bude muset skončit. Jaké to bude,
to rozhodnou zákazníci, ale dá se předpokládat, že by to mohla být
právě nákupní galerie Plaza.
Co se jí týče, prozatím moc nenadchne a kdo ví, zda se to vůbec někdy
změní. Když se tam nyní přijde člověk podívat, asi ho (ne)překvapí,
že obchodů tam prozatím mnoho není a také, že některé věci jsou
nedodělané (nebo tak alespoň působí). Nepomáhá ani fakt, že je Plaza
umístěna na Šaldově náměstí, protože Forum a Delta jsou umístěny
přímo na FÜgnerově, kde je terminál městské hromadné dopravy.
Nejsem sám, kdo není nadšený a kdo určitě čekal více. Však
přečtěte si tyto články na sreality.cz
a liberecky.denik.cz
05:08
—
Komentář [1]
—
Stálý odkaz