Archive

Archive for February, 2007

Cross Domain AJAX

February 27th, 2007 4 comments
Zdarzyło mi się, że potrzebowałem AJAX, gdzie serwer dostarczający dane będzie innym serwerem niż ten, z którego ładowana jest strona internetowa. Model DOM przeglądarek internetowych, w tym obiekt XMLHttpRequest będący podstawą wielu implementacji AJAX, ma zabronione operowanie na danych pobieranych z różnych domen (z różnych serwerów WWW). Na szczęście, miksowanie danych z pobieranych z różnych serwerów WWW jest możliwe – przykładem jest Google AJAX Search Api. Dane z różnych serwerów WWW można miksować, każąc przeglądarce WWW wykonać nowy skrypt JavaScript, np.: document.write. Ja potrzebowałem trochę bardziej zaawansowanego rozwiązania, które umożliwiło by mi między innymi.:
  • Wykonanie procedury po zakończeniu pobierania
  • Grupowanie pobieranych skryptów i wykonaniu procedury po zakończeniu pobierania
  • .
  • No i oczywiście pracę z różnymi domenami WWW
Postanowiłem więc zmodyfikować moją ulubioną bibliotekę AdjAJAX – tak aby zamiast pobierania danych wykonywała skrypt z innej domeny. Sprawdziło się. Powstała biblioteka: Cross Domain AJAX – którą opublikowałem na licencji LGPL, zgodnie z licencją AdvAJAX. Biblioteka Cross Domain AJAX działa prawie tak samo jak AdvAJAX, z tym że zamiast pobierać dane (XML, Text), zmusza przeglądarkę do wykonania JavaScript. Jak tego można używać? Wyobraźmy sobie, że na serwerze A mamy dane, które chcemy udostępnić stronie WWW znajdującej się na serwerze B. Aby tego dokonać na serwer A ładujemy program, który po wykonaniu się zwróci nam kod JavaScript zostawiający w globalnej przestrzeni nazwy przeglądarki obiekt z danymi. Aplikacja z serwera B potrzebuje tych danych. Uruchamia ona moją bibliotekę – Cross Domain AJAX – która ładuje skrypt z serwera A. Po załadowaniu danych z serwera A sterowanie może być przekazane do dowolnej funkcji, na przykład rysującej fontannę. Brzmi to skomplikowanie i może się wydawać zbyteczne – jednak jest na prawdę fajne. Zapraszam do projektu: Cross Domain AJAX.
Categories: AJAX, JavaScript Tags:

Vista + ręczna konfiguracja sieci

February 23rd, 2007 No comments
Ręczna konfiguracja sieci w systemie Windows Vista jest schowana. Aby się do niej dobrać należy.:
  • Start / Control Panel
  • Network and Sharing Center / View Network Status and Tasks
  • Manage Network Connections
Dalej jest już tak, jak w starym Windows. Możemy, na przykład, wprowadzić statyczny adres IP.
Categories: Windows Tags:

eclipse & encoding

February 23rd, 2007 No comments
Kodowanie plików w Eclipse można ustawić w wielu miejscach:
  1. Window / Preferences / General / Workspace
  2. Window / Preferences / General / Contenty Types / Text
  3. Project Explorer / _file_ / Properties
Co ciekawe, z koniecznością ustawienia Content Types spotkałem się tylko pracując z projektami PHP.
Categories: Eclipse, PHP Tags:

Pa, pa – Vista Firewall – moja przygoda z php mail.

February 22nd, 2007 5 comments
Śmieszne? Próbuję wysłać e-maila przy pomocy natywnej funkcji PHP: mail. I działa dziwnie.: Skrypt kończy pracę z komunikatem,: Fatal error: Maximum execution time of 30 seconds exceeded. MTA jest raczej poza podejrzeniem. Postanowiłem zrobić eksperyment – wyłączyłem Windows Firewall – działa miodzio! Ale przecież firewall jest ważnym elementem systemu Windows Vista. Niestety, w jego konfiguracji nie udało mi się odnaleźć czegoś co pozwoliło by mi spokojnie mailować. Podsumowując, po wyłączeniu User Account Control i Windows Firewall mój system zaczął działać znośnie. Zainstalowałem PostgreSQL, PHP i Apacha i nawet mogę mailować. Acha, przy okazji, aby mailować w PHP pod Windows wpisz w php.ini: SMTP = adres ip lub nazwa serwera potrafiącego mailować bez autoryzacji, lub autoryzującego Cię po adresie IP smtp_port = 25 sendmail_from = twój adres e-mail I nie zapomnij wyłączyć Windows Firewalla – oczywiście, na własne ryzyko. Tak się zastanawiam, po co Microsoft zrobił tego Firewalla. Pewnie dlatego, że wiedział, że komputery z Vista zaczną zarażać się wszelkiego rodzaju robactwem, między innymi trojanami rozsiewającymi spam. Być może, w tym dziwnym systemie, Firewall który wpuścił intruza, przynajmniej zabroni mu się rozmnażać. Ja na szczęście, do ważnej dla mnie pracy, zawsze mam FreeBSD.
Categories: Windows Tags:

PostgreSQL + Vista – User Account Control

February 22nd, 2007 2 comments
Instalacja bazy danych PostgreSQL 8.2 na Windows Vista może być bardziej kłopotliwa, niż na wcześniejszych wersjach Windowsa. Aby przebiegała bez problemu polecam wyłączyć “User Account Control” w “Windows Security Center”. Jeżeli jest to nasza kolejna próba instalacji, to warto też usunąć z systemu użytkownika “postgres” i docelowy katalog instalacji. Po tych zabiegach instalacja PostgresSQL będzie przebiega gładko. Podobnie jest z serwerem Apache 2.2.
Categories: PostgreSQL Tags:

Windows Vista na żywioł

February 20th, 2007 2 comments
Chciałbym się podzielić z Wami moimi pierwszymi chwilami z Windows Vista Business. Instaluję to coś na serwerze HP z parametrami przypominającymi domowego peceta ale z słabą kartą graficzną. I od razu są problemy. Na początku Vista nie wykryła mojego kontrolera SATA-RAID. Trudno, podłączyłem dyski SATA do płyty. Restart, Windows pozwolił mi sformatować dyski ale zainstalować się nie chciał. Odłączyłem jeden dysk i już poszło. Po kilkunastu minutach wybrałem swój login, hasło, ustawiłem zegar – fajnie. Po czym zaczął przewijać się kolejny pasek postępu. Jeszcze kilka minut i zalogowałem się (ja być robot). Windows powitał mnie ekranem powitalnym z odstraszającą na pierwszy rzut oka liczbą opcji. Po drugim przyjrzeniu się jednak było już okej. Zamknąłem straszaka, i postanowiłem zmienić rozdzielczość ekranu. Bez problemu znalazłem uruchomiłem “Display Settings” by przekonać się, że moja karta nie została wykryta. W końcu to jakiś serwerowy rupieć, więc co się tym przejmować. Rozdzielczość trochę podniosłem, ale nie udało mi się zmienić częstotliwości odświeżania monitora. Nastał czas by podłączyć się do internetu. Ukradłem więc koledze kabelek sieciowy. Niestety, nie mam DHCP i chciałem skonfigurować sieć ręcznie. Po kilkunastu minutach stwierdziłem, że szybciej skonfigurował bym DHCPD na serwerze, niż sieć w Windows Vista. Po dwudziestu minutach udało mi się dotrzeć do właściwego miejsca w konfiguracji i sieć zadziałała. Hurra! Przyszła pora na chwilę zabawy. Gadżety po prawej stronie, są fajne. Fajne też są tapety. Widać, że domyślne ustawienie robione są z myślą o użytkownikach monitorów 16×9. Ciekawe, czy uda mi się z netu pobrać właściwy sterownik karty graficznej. Raczej nie, Vista twierdzi że ma już najlepszy. Jeszcze jeden restart, 16 sekund do logowanie, 5 sekund na załadowanie systemu po zalogowaniu. Jeszcze tylko “rdesktop”. Dostęp zdalny skonfigurowałem bezproblemowo. Podsumowując – fajne. (Prawie tak fajne jak Linux).
Categories: Windows Tags:

@PostPersist z EJB3

February 19th, 2007 No comments
Specyfikacja JPA mętnie tłumaczy działanie adnotacji @PostPersist. Oracle zrobiło to lepiej. O co chodzi? Dotychczas myślałem relacyjnie i @PostPersist kojarzyło mi się z trigger after insert. Podczas wykonywania funkcji zdefiniowanej w wyzwalaczu after insert zabronione jest modyfikowanie rekordu. Tymczasem specyfikacja JPA nie wspomina nic o tym. Skoro specyfikacja tego nie zabrania, to jest to dozwolone. Co więcej, według Oracle adnotacja @PostPersist właśnie do tego służy: “The @PostPersist is used to register a method to be called on an object that has just been inserted into the database. This event can be used to notify any dependent on the object, or to update information not accessible until the object has been inserted.” @PostPersist nie jest więc tożsame z wyzwalaczem after insert.
Categories: JPA Tags:

Flirt z XMLHttpRequest

February 14th, 2007 No comments
Witam! Od pewnego czasu interesuję się AJAX a dziś chciałbym ponarzekać na XMLHttpRequest. XMLHttpRequest jest obiektem, który kojarzy się z czarną robotą, który kryje się pod większością bibliotek do AJAX. XMLHttpRequest to obiekt w JavaScripcie który obsługuje żądania POST, GET, HEAD i umożliwia pobierania danych (na przykład XML) z serwera. Fajne! Niestety, tylko z tego serwera z którego uruchomiona jest strona. Można to rozwiązać, instalując program proxy u klienta, jednak instalowania aplikacji na serwerze klienta z punktu widzenia usługodawcy nie zawsze jest możliwe. Hmm, w takim wypadku jak działa Google AJAX Search Api? Używają mniej więcej czegoś takiego:
var s = document.createElement("script");
s.src="http://www.serwer.wsieci/skrypt.js?parametr1=wartosc1";
document.getElementsByTagName("head").item(0).appendChild(s);
Googlowcy nie używają XMLHttpRequest ponieważ na stronie klienta nie mogli by wczytać danych ze swojego serwera. XML i DOM przeszkadza, gdy aplikacja AJAX ma być uruchamiana na wielu domenach. Potrzebne jest wtedy prymitywne rozwiązanie oparte na poczciwym JavaScript: document.write wystarczy by pisać AJAX.
Categories: AJAX Tags:

Nowy Liferay jest szybki

February 8th, 2007 No comments
Zainstalowałem dziś Liferay 4.2. Portal jest szybki, zgdonie z obietnicami producenta. W prosty sposób testowałem szybkość renderowania strony głównej – świeżutko po instalacji – http://localhost:8080/web/guest/home. Liferay renderował strony niewiarygodnie sprawnie. Tysiące razy lepiej niż w moim poprzednim teście który zrobiłem pół roku temu. Postanowiłem więc sprawdzić, jak poradzi sobie gdy zmienię bazę danych na PostgreSQL. Moje zdziwienie było tym większe, że wyniki pomiędzy domyślną bazą HSQL i PostgreSQL były prawie takie same. Zajrzałem więc do logów z Postgresa. Zgodnie z moim oczekiwaniem nie było ich zbyt wiele. Liferay keszuje wyrenderowane strony.
Categories: Java Tags:

Skalowanie obrazków ImageMagick

February 2nd, 2007 No comments
Do skalowania obrazków lubię używać ImageMagick. Na przykład:
convert obrazek.jpeg -geometry 100x100 -flatten -quality 75 maly_obrazek.jpeg
Parametry -geometry określa nam docelowy rozmiar obrazka. Parametr -quality określa nam jakość docelowego obrazka. Parametr -flatten przekształca animację w jedną klatę – użyteczne gdy mamy do czynienia na przykład z animowanym gifem i potrzebujemy zrobić miniaturkę.
Categories: Programowanie Tags: