W poniedziałek 27.08.2007 nastąpi zmiana serwera, co może implikować problemy z działaniem strony.
Archiwum autoraOkoło pół roku temu realizowałem referat akademicki o technologii Ajax. Dzisiaj przedstawiam pierwszą część tego opracowania. Stworzenie bazowego projektu: XMLHttpRequest jest podstawowym obiektem języka JavaScript służącym do asynchronicznej komunikacji klienta z serwerem. Pierwotnie obiekt pojawił się w przeglądarce Internet Explorer, a precyzyjniej w dołączanej do niej bibliotece MSXML. Z czasem został zaimportowany do innych przeglądarek, aż wreszcie został zatwierdzony przez organizację W3 w ramy standardowego elementu JavaScript (http://www.w3.org/TR/XMLHttpRequest/). Tworzenie obiektu: Internet Explorer 6.0 i wcześniejsze: var http_request = new ActiveXObject("Msxml2.XMLHTTP");
pozostałe przeglądarki oraz IE 7.0: var http_request = new XMLHttpRequest();
Dla zapewnienia działania w każdej przeglądarce można skorzystać z kodu:
var http_request = false;if (window.XMLHttpRequest) { // Mozilla, Safari, …
http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType(’text/xml’); } } else if (window.ActiveXObject) { // IE try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } Zapytanie do serwera (typu “get”): http_request.onreadystatechange = function() { /* */ };
http_request.open(’GET’, url, true); http_request.send(null); W pierwszej linii ustawiamy funkcję, która będzie wykonana za każdym razem gdy obiekt http_request zmieni stan (tzw. callback). Stan przechowywany jest w zmiennej http_request.readyState
Stany te następuje po sobie w kolejności. W praktyce sprawdza się tylko kiedy wystąpił stan 4. Tak więc funkcję można zaimplementować następująco: http_request.onreadystatechange = function() {
if( http_request.readyState == 4) { // rób coś ciekawego } }; Pełną implementacją funkcji zajmę się w dalszej części. Polecenie http_request.open(’GET’, url, true);
otwiera połączenie z serwerem podanym jako adres “url”. Warto nadmienić, że musi być to połączenie wykorzystujące protokół HTTP, połączenia lokalne (file://) nie działają poprawnie. Funkcja open może przyjmować pięć parametrów (dwa pierwsze są niezbędne) open(in DOMString method, in DOMString url, in boolean async, in DOMString user, in DOMString password)
Polecenie http_request.send(null);
wysyła żądanie do serwera. Jako parametr podaje się najczęściej null gdy żądanie jest typu “GET” lub ciąg parametrów (na przykład “action=remove&id=10&time=1000000″) dla „POST’. W celu zapewnienia poprawności przesyłanych danych powinny być one sformatowanie przy pomocy funkcji “encodeURIComponent”: var dane = encodeURIComponent(’action’) + ‘=’ + encodeURIComponent(’test=?&;test’);
Taka postać danych powinna zostać odzwierciedlona w zmianie nagłówka “Content-Type”: http_request.setRequestHeader(’Content-Type’, ‘application/x-www-form-urlenpred’);
Jest to wymagane w przypadku gdy method jest “POST”. Ostatecznie, przykład wykorzystania obiektu XMLHttpRequest może wyglądać następująco: var dane = encodeURIComponent(’action’) + ‘=’ + encodeURIComponent(’test=?&;test’);
http_request.onreadystatechange = function() { if( http_request.readyState == 4) { alert(http_request.responseText); } }; http_request.open(’POST’, ’serwer’, true); Jeżeli teraz na serwerze utworzymy plik tekstowy o nazwie “serwer”, to po wywołaniu żądania pojawi się okienko z zawartością pliku. Co się jednak stanie gdy plik “serwer” nie istnieje? http_request.onreadystatechange = function() {
if( http_request.readyState == 4) { if( http_request.status == 200 ) { alert(http_request.responseText); } else if ( http_request.status == 404 ) alert(’Plik nie istnieje’); else alert(’inny błąd’); } }; Obok właściwości http_request.responseText występuje druga http_request.responseXML, użyteczna wówczas, gdy do komunikacji używany jest język XML.
<?xml version="1.0"?>
<root> hello world </root> Można zawartość <root/> odczytać: http_request.onreadystatechange = function() {
if( http_request.readyState == 4) { if( http_request.status == 200 ) { var xml = http_request.responseXML; alert(xml.firstChild.firstChild.data); } else alert(’błąd’); } }; Aby zakończyć opis obiektu XMLHttpRequest należy wspomnieć o jeszcze jednej instrukcji: http_request.abort();
Przerywa ona połączenie na danym obiekcie i przywraca jego wartości początkowe. Pozostałe metody i właściwości klasy nie są często używane. Ich opis znajduje się w (http://www.w3.org/TR/XMLHttpRequest/). XMLHttpRequest domyślnie używa kodowania znaków UTF-8.
20
08
2007
Eclipse And Java For Total BeginnersNapisał tPython w kategorii Kurs, Java, Programowanie, SourceForgeNa stronie http://eclipsetutorial.sourceforge.net/ znajduje się dobrze zrealizowany kurs języka Java i środowiska Eclipse dla początkujących. 16 lekcji, każda około 10-minutowa, w formie filmu z komentarzem (po angielsku) przedstawia między innymi: tworzenie klas, JUnit, kolekcje, refactoring. Przygotowania następcy Compiz i Beryla idą pełną parą. Autorzy zapowiadają już stabilną wersje (0.6), projekt przestawia się bardzo interesująco. Między innymi rozstrzygnięto konkurs na logo. Poniżej zwycięska produkcji: Popis możliwości Compiz Fusion: Na koniec najbardziej widowiskowe pluginy (ale niestety mogą służyć wyłącznie jako wodotryski):
14
08
2007
List otwarty do wszystkich, którzy proszą mnie o pomoc dotyczącą komputerówNapisał tPython w kategorii MiszmaszŹródło: List otwarty do wszystkich, którzy proszą mnie o pomoc dotyczącą komputerów (jakilinux.org) A więc masz problem ze swoim komputerem? Tak, dobrze trafiłeś, studiuję informatykę i wiem coś niecoś o komputerach. A czy rozwiążę Twój problem? Na pewno spróbuję. Jesteś moim przyjacielem i cieszę się, że mogę pomóc. Mam pewne doświadczenie i naprawdę chętnie pomogę. Wiem, że na pewno zrobiłbyś to samo dla mnie. Już niedługo zwrócę się do Ciebie po darmową poradę prawną albo finansową. A także jeśli mój samochód nie będzie chciał zapalić. Mimo to jest tutaj kilka rad, które nam obu ułatwią przejście przez to wszystko: 1. Prawdopodobnie nie znam rozwiązania od razu, więc proszę, nie denerwuj się, jeśli akurat będziemy na mieście a ja, nie powiem Ci o co chodzi. Może Cię to zaskoczy, ale raczej na pewno pierwszym co zrobię będzie przeszukanie Google. Ja po prostu posiadam odpowiednią wiedzę, aby podążać za wskazówkami z Google. Brzmi rozsądnie, czyż nie? Świetnie, to w czym problem? Tekst jest luźnym tłumaczeniem ‘An Open Letter to Anyone Asking Me For Computer Help’ Przetłumaczył: Igor Kupczyński, puszczyk@gmail.com W dniach 2-5 sierpnia bieżącego roku odbyło się w Helsinkach najważniejsze doroczne spotkanie Demosceny - ASSEMBLY Summer 2007. Jak zawsze skupiło uwagę tysięcy ludzi z całego świata, głównie grup programistycznych oraz niezależnych twórców Sceny, który na tej imprezie premierowo przedstawili przygotowywane od wielu miesięcy dzieła. Opadły pierwsze emocję, warto więc się przyjrzeć wynikom w różnych kategoriach: Demo competition W najważniejszej kategorii zdecydowanie zwyciężyła (który to już raz?) grecka grupa Andromeda Software Development (ASD) z produkcją o nazwie: LifeForce. lifeforce_by_andromeda_software_development.avi 64k intro competition Zgłoszone zostały tylko trzy produkcje, a rezultat głosowania jest wyjątkowo wyrównany. Można je ściągnąć z adresu: 4k intro competition Tutaj konkurencja była większa. Wygrało intro Candystall by Pittsburgh Stallers vs Loonies: Short film competition W kategorii krótkich filmów zwyciężyła praca maxon / fake o nazwie Realtime demo wannabe. realtime_demo_wannabe_by_maxon__fake_h264_1856kbps.mp4 Browser demo competition Jedna z bardziej niecodziennych kategorii. Demo działa wewnątrz przeglądarki internetowej (Opera) i może wykorzystywać takie technologie jak Flash, JavaScript, SVG, Canvas i temu podobne. Zwyciężyła produkcja ADHDTV autorstwa Evoflash i BombSquad: Mobile demo competition Kolejna ciekawa kategoria. Demo działające na urządzeniach mobilnych. Zwycięzcą został Dekadence z produkcją Beertime X: Oldskool W ramach Oldskool odbyły się wybory dema, grafiku oraz muzyki, która została przygotowana na komputery 8- i 16-bitowe. Grafika: Sweet Chili o Mine by Duce of Extend Muzyka: Decade of Dekadence by Britelite / Dekadence Pełną listę produkcji wraz z wynikami (również nie wymienionych tutaj kategorii) można znaleźć na stronie: Od niedawna plugin Allegro Widget jest dostępny na stronie WordPress Plugin Database. Więcej informacji pod adresem:
01
08
2007
Javascript wciąż na topie. Opis OAT Framework.Napisał tPython w kategorii Programowanie, Javascript, Ajax, Open SourceCiężko nie zauważyć wielkiej popularności języka JavaScript wzrastającej nieustannie od kilku lat. Inspiracją do napisania tego posta był kolejny znakomity toolkit (właściwie to nawet pełna biblioteka) javascriptowa do wizualizacji graficznego interfejsu użytkownika. Mam tutaj na myśli OAT Framework. Obecna wersja 2.6 wspiera kilkanaście atrakcyjnie wyglądających widgetów (między innymi bardzo efektowne Dock lub zintegrowany widget do obsługi RSS) oraz sporo innych przydatnych narzędzi (funkcje kryptograficzne, bazodanowe). Ale niewątpliwie największe wrażenie pozostawił przykład aplikacji do modelowania baz danych napisany w OAT Framework: http://demo.openlinksw.com/DAV/home/demo/Public/Design/employee_sales_customer_diagram2.xml Wróćmy jednak jeszcze do kwestii popularności JavaScript. Niedawno przeczytałem, iż obecne badanie w Stanach Zjednoczonych sugerują, iż najwięcej programistów tworzy obecnie programy w JS. Potwierdzenia postanowiłem poszukać w danych serwisu Freshmeat. Wprawdzie nie ograniczyłem się do czasu obecnego, ale sprawdziłem ile projektów wykorzystuje ten język. JavaScript znalazł się na szczytnym 7. miejscu (licząc wszystkie projekty; należy pamiętać, iż JS rzadko występuje jako jedyna technologia w projekcie). Poniżej przedstawiam obecny ranking:
W najbliższym czasie należy się spodziewać wkroczenia na listę języka Ruby, zapewne kosztem tracącego znaczenie TCL.
29
07
2007
jTemplates 0.4.1 oraz Allegro Widget 0.1.2Napisał tPython w kategorii JTemplates, Allegro Widget, Wordpress, Javascript, Open Source, ProgramyZ dwudniowym opóźnieniem wynikającym z braku dostępu do Internetu ogłaszam najnowsze wersje:
Wersja 0.4 przede wszystkim nacisk kładzie na bezpieczeństwo. Dane wejściowe (oznaczone zmienną $T) są sprawdzane pod kątem występowania znaków specjalnych stosowanych w XHTML: <, >, ‘, ” oraz &. Znaki te są zmieniane na bezpieczne odpowiedniki. Dodatkowo został zaimplementowany detektor funkcji dla danych $T, co ma uniemożliwić dokonywanie ataków wstrzykiwania kodu. Zabezpieczenia te są domyślnie włączone. Istnieje możliwość ich wyłączenia, co gwarantuje zgodność z wcześniejszymi wersjami jTemplates. Najnowsza wersja wprowadza niewielkie korekty w wyświetlaniu widgetu. Dzięki temu nie wyróżnia się od zbyt mocno od reszty elementów na pasku.
26
07
2007
Bład w Firefox, nieprawidłowe filtrowanie wyrażeń w linkach.Napisał tPython w kategorii Windows, Haching, Exploit, SecuniaNiedawno głośno było o błędzie w przeglądarce Firefox polegającym na braku filtrowania danych pochodzących z wywołania przy pomocy firefoxurl:// (http://secunia.com/advisories/25984/). W rzeczywistości problem ten w równym stopniu obciążał zarówno Firefoxa jak i autorów przeglądarki IE, dzięki której atak był możliwy. Mozilla Foundation poprawiła błąd wraz z wersją 2.0.0.5, problem po stronie IE został po raz kolejny zignorowany (wprawdzie w tym przypadku jest to częściowo zrozumiałe, gdyż przecież istnieje możliwość, że inne programy nie akceptują przefiltrowanych danych a także powstaje pytanie o stopień filtracji; ale jednocześnie działanie Microsoftu można porównać to producenta samochodów, który nie montuje pasów bezpieczeństwa, gdyż nie każdy je zakłady, zmniejszają komfort jazdy i - co najważniejsze - o bezpieczeństwo jazdy powinni troszczyć się inni, w szczególności kierowca). Atak przy pomocy IE polegał na utworzeniu odpowiednio spreparowanego odnośnika, którego naciśnięcie powodowało uruchomienie Firefoxa wraz dodatkowymi atrybutami (wstrzyknięcie kodu). Niedługo po pojawieniu się “załatanego” Firefoxa analogiczny problem jak w IE został wykryty w samym FF! Błąd polega na niewłaściwym filtrowania znaku cudzysłów w adresach url zewnętrznych protokołów. Więcej informacji można znaleźć na stronie http://xs-sniper.com/blog/remote-command-exec-firefox-2005/ Problem jest o tyle poważny, iż pozwala na zdalne uruchomienie dowolnego programu zainstalowanego na systemie użytkownika! Prosta prezentacja: (ps. jeżeli powyższy przykład u Ciebie nie działa, nie oznacza to, iż jesteś bezpieczny; po prostu atakujący musi użyć innego protokołu niż mailto) Tak więc wszystkich użytkowników FF (IE także) namawiam do dokładnego sprawdzania linków, które się klika… |


Wpisy (RSS)