Archive for the ‘programowanie’ Category

Podpowiedzi w wyszukiwarce i PHP

Posted on kwiecień 20th, 2008 in php, programowanie | No Comments »

Podpowiedzi w stylu googlowego „Czy chodziło Ci o” to napewno przydatny dodatek do wyszukiwarki. Omówię dzisiaj w skrócie najprostszy znany mi sposób stworzenia takiego mechanizmu. Będziemy potrzebować: PHP4 lub późniejszy z biblioteką pspell. Niestety nie na każdym serwerze hostingowym pspell jest dostępny w standardzie. Na szczęście nie jest on taki rzadki.

Najpierw musimy stworzyć słownik słów użytych na stronie. Poniższy kod dodaje jedno słowo $word do słownika.

PHP:
  1. $pspell_config = pspell_config_create("pl");
  2. pspell_config_personal($pspell_config, "./sugestie2.slownik");
  3. $pspell_link = pspell_new_config($pspell_config);
  4. pspell_add_to_personal($pspell_link, $word); // dodajemy słowo do słownika
  5. pspell_save_wordlist($pspell_link);

Oczywiście gdy chcemy dodać więcej słów, wystarczy użyć pętli.

W poniższym kodzie dosyć istotna jest linia 3. Funkcja pspell_config_dict_dir wymusza na pspellu użycie tylko i wyłącznie naszego słownika. Bez niej funkcja pspell_suggest w wyniku zwróciłaby wszystkie polskie słowa podobne do tego, które zostało wpisane w wyszukiwarkę.

PHP:
  1. $pspell_config = pspell_config_create("pl");
  2. pspell_config_dict_dir($pspell_config, "~/public_html/slownik/");
  3. pspell_config_personal($pspell_config, "./sugestie2.slownik");
  4. $pspell_link = pspell_new_config($pspell_config);
  5.  
  6. $suggestions = pspell_suggest($pspell_link, $word);
  7. foreach ($suggestions as $suggestion) {
  8.     echo "Być może chodziło Ci o: $suggestion<br />";
  9. }

PHP i uruchomienie procesu w tle

Posted on luty 26th, 2008 in linux, php | No Comments »

Czasami zachodzi potrzeba, żeby z poziomu aplikacji WWW napisanej w PHP uruchomić jakąś czasochłonną operację. Może to być na przykład tworzenie kopii zapasowej jakichś danych.

Ponieważ taka operacja może trwać długo, jest bardzo prawdopodobne, że dojdzie do przekroczenia limitu wykonywania strony. W takim przypadku najlepiej uruchomić tą operację w tle.

Na pewnym forum znalazłem, że wystarczy użyć funkcji exec() i na końcu polecenia, które uruchamiamy dodać znak ampersanda &.

PHP:
  1. <?php
  2.    echo exec("sleep 1 && echo Koniec skryptu BASH &");
  3.    echo "\nKoniec skryptu PHP\n";
  4. ?>

Jednak po wykonaniu skryptu widać, że nie działa on tak, jakbyśmy tego chcieli.

CODE:
  1. $ php5 test.php
  2. Koniec skryptu BASH
  3. Koniec skryptu PHP

Aby rozwiązać problem należy posłużyć się innymi funkcjami: proc_open() i proc_close().

PHP:
  1. <?php
  2.    proc_close(proc_open ("sleep 1 && echo Koniec skryptu BASH &", array(), $pipes));
  3.    echo "\nKoniec skryptu PHP\n";
  4. ?>

A wynik wygląda tak.

CODE:
  1. $ php5 test.php
  2. Koniec skryptu PHP
  3. $
  4. Koniec skryptu BASH

ROWNUM w MySQL

Posted on luty 19th, 2008 in bazy danych, programowanie | No Comments »

Ostatnio, z powodu zmiany w kodzie pewnego CMSa, musiałem dopisać do bazy danych (MySQL) kilkadziesiąt bardzo podobnych do siebie rekordów. Największym problemem było to, że każdy wiersz musiał dostać swój kolejny numer (powiększony o stałą). Ponieważ w MySQL nie ma odpowiednika Oracle'owego ROWNUM musiałem ten problem obejść.

Numer wiersza można obliczyć tworząc sobie zmienną.

MySQL:
  1. SELECT @rownum := @rownum + 1 rownum, i.*
  2. FROM (SELECT @rownum := 0) r, informacja i

Po skorzystaniu z dobrodziejstw INSERT ... SELECT moje ostateczne zapytanie dodające operacje do modułów CMSa, które tej operacji jeszcze nie mają, wyglądało tak.

MySQL:
  1. INSERT INTO operacja(priorytet, id_modul, nazwa, kod)
  2. SELECT @rownum := @rownum + 1 priorytet, m.id_modul, 'lista', 'lista'
  3. FROM (
  4.     SELECT @rownum := (
  5.         SELECT max(id_operacja) FROM operacja
  6.     )
  7. ) r, ecms_modul m
  8. WHERE id_modul NOT IN (
  9.     SELECT id_modul FROM operacja WHERE kod = 'lista'
  10. );

DBDesigner4 i Ubuntu 7.04

Posted on sierpień 1st, 2007 in bazy danych, ubuntu | 1 Comment »

DBDesigner 4 to aplikacja (dostępna na licencji GPL) umożliwiająca stworzenie modelu fizycznego bazy danych. Aplikacja pozwala na proste tworzenie tabel oraz relacji między nimi. Dodatkowo program sam, na podstawie relacji, tworzy odpowiednie klucze obce. Potrafi także połączyć się z wieloma bazami danych, na przykład MySQL lub Oracle i wyeksportować tam dane lub zsynchronizować model z istniejącą już bazą. Oczywiście można także wygenerować zwykły skrypt tworzący bazę.

Program jest prosty, ale do małych projektów wystarczający. I co najważniejsze, jest darmowy.

DBDesigner 4

Dzięki temu, że została napisana w Kyliksie, działa zarówno pod Windowsem, jak i GNU/Linuksem. Niestety z tego samego powodu nie zawsze działa jak należy. Pod Ubuntu 7.04 i386 nie ma większych problemów. Wystarczy doinstalować dwa pakiety.

CODE:
  1. sudo apt-get install libstdc++2.10-glibc2.2 libxft1

Niestety pod 64-bitowym Ubuntu jest więcej zabawy (ale do tego wszyscy posiadacze 64-bitowych Linuksów dawno się przyzwyczaili, prawda?). Jednak jest dosyć proste rozwiązanie. Wystarczy do katalogu DBDesigner4/Linuxlib dorzucić brakujące biblioteki. Same biblioteki możemy na przykład wyciągnąć z pakietów dla 32-bitowego Ubuntu. Aby oszczędzić Wam przyjemności szukania odpowiednich paczek i wypakowywania z nich plików, po prostu umieszczam tutaj DBDesignera z odpowiednimi bibliotekami. :)

Na koniec jeszcze dwie sprawy. Po pierwsze, po uruchomieniu prawdopodobnie trzeba będzie zmienić domyślną czcionkę (w menu Options/DBDesigner Options). Polecam Bitstream Vera Sans. Po drugie, ciągle mam problem z bibliotekami łączącymi się z bazą MySQL (u siebie mam wersję 5). Jeżeli ktoś zna rozwiązanie, proszę żeby umieścił je w komentarzu. :)

Powiadamianie SMSem o nowych wiadomościach na koncie GMail

Posted on lipiec 29th, 2007 in gmail, internet, programowanie, python | 5 Comments »

Konto pocztowe od Google to świetna sprawa. Jakiś czas temu zrezygnowałem z Thunderbirda na rzecz GMaila i nie narzekam, a nawet sobie tą zmianę chwalę. Jednak nic nie stoi na przeszkodzie, żeby konto Googla ulepszyć. :)

Pomysł

Kilka dni temu Adriano na swoim blogu przedstawił świetny sposób na darmowe powiadamianie o nowych wiadomościach na Gmailu. Jeśli ktoś nie czytał, to przedstawię w skrócię ideę. Wystarczy ustawić przekazywanie maili z konta od Google, na inne konto, na którym mamy włączone powiadamianie o nowych wiadomościach poprzez SMS. Pomysł świetny, choć osobiście z podanej metody nie skorzystałem. Postanowiłem, że pokombinuję po swojemu.

Idea

Zastanawialiście się po co Google udostępnił kanał Atom w usłudze Gmail?? Zbędny „ficzer”? Do niedawna tak właśnie uważałem.

Gmail2Sms, bo tak się nazywa program, który napisałem, wykorzystuje kanał Atom, do pobrania informacji o nowych wiadomościach na skrzynce pocztowej. Jeżeli znajdzie nowe, wysyła SMSa. Proste, prawda?

Brzmi świetnie, jednak nie jest do końca różowo. Program potrzebuje:

  1. Pythona
  2. Telefonu w Plusie;
  3. Konta w Mieście Plusa;
  4. Komputera, który działa 24/7 najlepiej z Linuksem.

Program Gmail2Sms tworzyłem z myślą o wykorzystaniu na screenie. Wszystko co trzeba zrobić, żeby program działał, to ustawić kilka zmiennych w pliku konfiguracyjnym i wpisać ./gmail2sms.py.

Przetestuj Gmail2Sms

Program jest w bardzo wczesnej fazie rozwoju, więc nie należy spodziewać się cudów. Za jakiekolwiek szkody wynikłe z jego użytkowania nie ponoszę szkody. Jeśli się nie przestraszyłeś(aś), możesz pobrać i przetestować Gmail2Sms stąd. :)

Aktualizacja

[wtorek 7 sierpnia 2007, 19:52]

Udostępniam poprawioną wersję. Ta, w przeciwieństwie do poprzedniej wysyła SMS. Dodatkowo nie zawiesza się, gdy napotka problem z plikiem konfiguracyjnym.
Ściągnij Gmail2Sms 0.02.

Python

Posted on luty 25th, 2007 in programowanie, python | 6 Comments »

Python to interpretowany język programowania stworzony przez holendra Guido van Rossum we wczesnych latach 90-tych. Kilka dni temu postanowiłem się go nauczyć. . :) Read the rest of this entry »

Obsługa sesji.

Posted on grudzień 13th, 2006 in internet, programowanie | 2 Comments »

Dzisiaj nie będzie kodu. :) Zawsze zgadzałem się z zasadą, że zamiast ryby lepiej dać wędkę. Więc proszę, oto wędka. Ryby dziś nie będzie.

Dzisiaj omówmy własną obsługę sesji www.

Zacznijmy od podstaw.

Serwer www to program, który działa na serwerze i obsługuje żądania klientów, wysyłane z reguły przez przeglądarki internetowe. Po otrzymaniu żądania od klienta, serwer odpowiada klientowi, wysyłając odpowiednie dane. Odbywa się za pośrednictwem protokołu HTTP.

Proste, prawda? Read the rest of this entry »

Bardzo prosta witryna w Oracle.

Posted on październik 28th, 2006 in bazy danych, oracle, programowanie | 11 Comments »

W porównaniu do poprzedniego wpisu, cofnę się troszkę w edukacji. :) Pokażę, jak od początku do końca zrobić bardzo prostą aplikację webową w Oracle'u. Zakładam oczywiście, że sam serwer jest odpowiednio skonfigurowany, a my posiadamy swój login i hasło do bazy oraz możliwość tworzenia aplikacji sieciowych.

Strona, którą stworzę będzie wyświetlała zawartość tabeli (i tylko tyle). Opiszę po kolei kolejne fazy tworzenia tej stronki. A wszystko to będzie wyglądać tak. Read the rest of this entry »

Oracle na słodko

Posted on październik 18th, 2006 in bazy danych, internet, oracle, programowanie | 4 Comments »

Do obsługi ciasteczek w Oracle'u służy pakiet OWA_COOKIE. Typy danych, funkcje i procedury zdefiniowane w tym pakiecie można znaleźć w dokumentacji Oracle'a.

Jak wiadomo, ciasteczka wysyłamy do przeglądarki w nagłówku HTTP. Na przykład w następujący sposób.

OWA_UTIL.MIME_HEADER('text/html',FALSE);
OWA_COOKIE.SEND(vNazwaCookie, vWartoscCookie);
OWA_UTIL.HTTP_HEADER_CLOSE; 

Procedura MIME_HEADER z pakietu OWA_UTIL wysyła niestandardowy nagłówek HTTP. Wysyłamy do przeglądarki dokument text/html, ale nagłówka jeszcze nie zamykamy (decyduje o tym drugi parametr). Następnie wysyłamy ciasteczko o nazwie vNazwaCookie i wartości vWartoscCookie (obie zmienne są typu VARCHAR2).

Proste, prawda? Wyciąganie zawartości ciasteczka wcale nie jest trudniejsze. Żeby odczytać ciasteczko wystarczy użyć funkcji GET. Read the rest of this entry »

Pierwszy wpis…

Posted on październik 15th, 2006 in programowanie, prywatne | No Comments »

Witam serdecznie!

Nie będzie to zwykły blog. Nie będę tu pisał co robiłem, gdzie byłem, kto mnie wkurzył, czy kto obsmarował. Nie będzie też rooshoofiutko, blogaskowo i słitaśnie.

Wpisy, które będę tu dokonywał będą się kręcić wokół komputerów, internetu. A w szczególności wokół programowania. Koniec i kropka. :D

BTW, w życiu nie przypuszczałem, że otworzę bloga. :)