jQuery – interfejs użytkownika

Jak jQuery to po to by zbudować ładny interfejs użytkownika. Jak interfejs użytkownika z jQuery to tylko z ThemeRoller‘em … W przyszłości może rzucę kilka porad jak tego dobrodziejstwa używać.

, , ,

Brak komentarzy

Jak wyleczyć się z Macbooków?

Poczytać kilka negatywnych recenzji tego makbadziewia w sieci? Kiedyś zastanawiałem się czy by sobie nie sprawić MacBooka, wyleczyłem się czytając o różnych problemach tego sprzętu.

Ten cytat pochodzący z artykułu na onecie, może wyleczy niezdecydowanych.

Myślicie że jesteście cool, bo kupiliście telefon za 500 dolarów z symbolem pewnego owocu. Wiecie co? Wyprodukowanie jednego kosztuje osiem dolców!

Swoją drogą w dalszym ciągu niekiedy myślę „a może jednak?” … Nie … chyba jednak nie ;-)

, , ,

2 komentarzy

Czy już pisałem, że Dreamhost ssie?

Tak, pisałem. Dziś niektóre moje bazy leżały przez 11 godzin. Amerykanom gratulujemy Dreamhostu. W związku z ostatnimi padami, zarejestrowałem się testowo (na razie plan miesięczny) na mediatemple.net, testuję ich usługę, stabilności pewnie się nie uda sprawdzić przez miesiąc, ale cała resztę procesów na pewno zbadam.

Ktoś zna inna ciekawą alternatywę dla Dreamhost?

, ,

Brak komentarzy

Jak dodać swoją funkcję w MySQL?

Dziś nauczymy się jak dodać swoją funkcję w MySQL. Temat będzie jedynie liźnięty i zobrazowany ładnym przykładem, który dziś miałem okazję popełnić przy okazji tego dziwnego tygodnia jakim jest ostatni tydzień roku. O tym później.

Po co może nam się coś takiego przydać?

Dla przykładu mamy kolumnę w tabeli, która jest datą (typ date), chcemy mieć funkcję, która dla tej daty zwróci nam poprawny numer tygodnia w roku oraz rok, zapiszmy to tak: Y/v (Y – rok, v -numer tygodnia).

Zwyczajowe podejście polegałoby na napisaniu takiego modyfikatora:

date_format(DATE,"%Y/%v")

Co będzie działało popranie przez wszystkie dni tygodnia oprócz właśnie tego „magicznego” ostatniego tygodnia roku.

Do rozwiązania problemu przydadzą nam się właśnie nasze definiowane funkcje w MySQL. Napiszmy własną funkcję, która w przypadku gdy data jest grudniowa oraz tydzień wskazuje na pierwszy, odpowiednio zwiększa rok. Rzućmy okiem na kod zapisany w pliku gpw.sql ( GPW to nie Giełda Papierów Wartościowych ;-) ):

SET GLOBAL log_bin_trust_function_creators = 1;
DROP FUNCTION IF EXISTS GPW;
 
DELIMITER //
 
CREATE FUNCTION GPW (thedate DATE) RETURNS VARCHAR(20)
BEGIN
    DECLARE r VARCHAR(7);
    DECLARE y INT(4);
    DECLARE v VARCHAR(2);
 
    IF DATE_FORMAT(thedate,"%v") = '01' THEN
        IF DATE_FORMAT(thedate,"%m") = '12' THEN
            SET y = DATE_FORMAT(thedate,"%Y") + 1;
            SET v = '01';
            SET r = CONCAT(y,'/', v);
        ELSE
            SET r = DATE_FORMAT(thedate,"%Y/%v");
        END IF;
    ELSE
        SET r = DATE_FORMAT(thedate,"%Y/%v");
    END IF;
 
    RETURN r;
END
 
//
 
DELIMITER ;

Szybko o tym co widzimy w kodzie:

  • w pierwszym wierszu mówimy, aby MySQL nie burzył nam się gdy będziemy chcieli dodać swoją nową funkcję
  • drugi wiersz, usuwa nam funkcję GPW() jeśli taka już istnieje
  • potem mówimy aby separatorem wierszy od teraz były dwa znaki //
  • następnie ciało naszej funkcji, chyba proste?
  • potem, dwa ukośniki są istotne, kończą nam nasz długi „wiersz”
  • na końcu mówimy aby separatorem był znów średnik

Mamy funkcję w pliku, celowo mówię o pliku, gdyż tak po prostu pisze się sprawniej nasze funkcję, otwieramy nasz MySQL klient:

mysql -u root -h host -p

W konsoli:

  • przechodzimy do bazy w jakiej nasza funkcja będzie widoczna (polecenie use, np. use temp)
  • importujemy nasz plik z kodem funkcji poleceniem source, np. source /home/temp/gpw.sql

Od tej pory nasza funkcja GPW() powinna być widoczna w naszej bazie, tak długo, aż jej nie usuniemy. Możemy ją przetestować wpisując:

SELECT GPW('2008-12-29');

Co odpowie nam poprawnym wynikiem w postaci ciągu:

2009/01

Nasze podejście pierwotne wysypałoby się odpowiadając 2008/01.

To tyle na szybko o definiowanych funkcjach w MySQL.

, , , , , , , ,

Brak komentarzy

Zaawansowana optymalizacja stron WWW

Czy ktoś z Was widział jak Google zapodaje grafikę z serwera? Nie? No to klik, potem sprawdźcie jak wygląda cały plik z logiem Google.

A wygląda tak:

Co można zyskać przysyłając użytkownikom taki plik:

  • zmniejszamy traffic poprzez jeden mały plik
  • zmniejszamy ilość requestów do serwera

Minus?

  • trzeba opracować plik CSS, który będzie nam sterował takim plikiem

Taka ciekawostka na sobotę ;-)

, , ,

Brak komentarzy

Cross-site scripting – bezpieczeństwo formularzy

Cross-site scripting (XSS lub inaczej CSS), to jak wiadomo taki rodzaj ataku na serwisy WWW, najczęściej przez źle walidowane formularze i najczęściej przez wstrzykiwany przez nie kod JavaScript.

Pokażę dziś jak można łatwo zabezpieczyć swoje formularze. Wystarczy kilka prostych wierszy kodu i po problemie. Najważniejsze jest aby całą tablicę $_POST umieć łatwo wyczyścić. Pokaże jak to zrobić rekurencyjnie.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Common() {
        public static function TidyString($str) {
                $str = stripslashes($str);
                $str = htmlspecialchars($str);
                return $str;
        }
 
        public static function TidyArray(&$array) {
                foreach((array)$array as $key => $value) {
                        if( !is_array($value) ) {
                                $array[$key] = Common::TidyString($value);
                        } else {
                                $array[$key] = Common::TidyArray($value);
                        }
                }
                return $array;
        }
}

W naszej klasie Common, widzimy dwie proste metody, TidyArray() oraz TidyString(). TidyArray() działa rekurencyjnie, obiega elementy tablicy i jeśli wartość nie jest tablicą to ją czyści poprzez TidyString(), jeśli element jest tablicą to wywołujemy naszą metodę rekurencyjnie na danym fragmencie tablicy. Wartości tablicy przekazujemy metodzie przez referencje.

Mając taka klasę możemy umieścić takie wywołanie gdzieś np. w pliku konfiguracyjnym naszej aplikacji.

1
$_POST = Common::TidyArray($_POST);

Należy pamiętać, że nasza metoda TidyString() posiada podstawowe funkcje „czyszczące”, można sobie ją dowolnie rozszerzyć np. dodać funkcję strip_tags(). Dodam jeszcze, że należy być ostrożnym przy filtrowaniu danych po serializacji.

, , , , , , , , , , , , ,

Brak komentarzy

Dziury w Internet Explorer

Szału nie ma, każdy zna, wszędzie są nie tylko w IE, podobno w Firefoxie jest jeszcze więcej ;-) Czytałem właśnie jakiś artykulik o tym, że Microsoft będzie dziś łatał jakąś super poważną dziurę i przypomniało mi się jak mnie dziś Explorer pięknie zaskoczył.

Weźmy pod lupę taki prosty kod HTML:

<a href="">link</a>

Czego się spodziewamy? Że atrybut href (Hypertext REFerence) domyślenie przyjmie wartość tego co mamy obecnie w pasku adresu – tak jest w Firefox. W Internet Explorerze 7 nie zawsze. Dla przykładowego adresu:

http://server/folder/plik.xml

Nasz link będzie wskazywał na:

http://server/folder/

A potem klient do Ciebie pisze – „czemu to k*** nie działa w IE„!

Szybki fix takiej sytuacji w PHP, użyj:

$_SERVER['REQUEST_URI']

, , , ,

Brak komentarzy

Katalog SEM

Popełniłem swój pierwszy katalog SEO. Zobaczymy jak to działa, jeśli się sprawdzi to pewnie zrobię jeszcze kilka kopii. Już kilka stron jest dodanych. Strona posiada Page Rank 4, czyli warto chyba zaryzykować dodanie swojej strony do odpowiedniej kategorii tematycznej, szczególnie, że na początku czas akceptacji na pewno będzie ekspresowy.

Wiadomo, katalog to nic odkrywczego, Google podobno sobie z tym jakoś radzi, mało który obecnie ma wpływ na pozycję strony, a jednak wszyscy się katalogują. Pożyjemy zobaczymy.

, , ,

Brak komentarzy

Dreamhost to kompromitacja

Szukasz hostingu ? Nie inwestuj w tani hosting na Dreamhost, chyba że uptime nie jest dla Ciebie jakoś specjalnie ważny. Zaliczyłem dziś drugi poważny pad serwera baz danych w przeciągu miesiąca. Ostatnio wszystko dynamiczne leżało przez 24h, tym razem jedyne 8h. Żenua. Z drugiej strony wszystko zależy na jaki serwer się trafi w Dreamhost, mój znajomy nie miewa takich jazd z dostępnością serwera …

Jeśli jednak ktoś ma to dupie i mimo wszystko chciałby wykupić u nich usługę to używając tego kodu dostanie zniżkę 40.00$ jeśli wykupi się usługę na rok. Kod promocyjny to 4CODERS – wpisuje się go podczas rejestracji konta.

, , , , ,

Brak komentarzy

Google Chrome

No i wyszła z bety, Google Chrome, bo o niej mowa, czyli najszybsza przeglądarka świata? Tak przynajmniej mi się wydaje …

Ogólnie kibicuje takim projektom, kibicuje wszystkiemu co pozwoli zmniejszyć zasięg IE. Nadal jednak będę używał Firefox’a. Będę się bacznie przyglądał nowemu graczowi na rynku, po to, by być może kiedyś przesiąść się na dobre.

Minusy na dziś:

  • Brakuje mi jakiejś możliwości ustawienia przestrzeni kolorów tak jak w Firefox za pomocą Color Management – mam za dobry monitor.
  • nie mam czasu na testy zabawki :-)

Plusy na dziś:

  • Szybkość odpalania.
  • Brak AdBlocka – tak to jest plus!

,

1 komentarz