WampServer 2 to następca WAMP5 - zestawu: Apache, MySQL, PHP przygotowanego dla systemu Windows. Na pierwszy rzut oka nowa wersja nie różni się znacząco od poprzedniej. Mamy do dyspozycji to samo wygodne menu konfiguracyjne w systemowym trayu, stronę główną (choć ta została zmodyfikowana), phpMyAdmin i SQLiteManager.
Najważniejszą nowością jest umożliwienie szybkiej zmiany wersji Apache, MySQL i PHP, które można zainstalować niezależnie z paczek przygotowanych przez autorów WampServer. I tak: jednym kliknięciem myszy można zmienić np. Apache 1.3 na 2.2, MySQL 5.0.45 na 4.1.20 lub PHP 5.2.5 na 4.1.2. Nie muszę chyba szczególnie wyjaśniać dlaczego jest to takie przydatne.
Archiwum na listopad, 2007News: Więcej informacji na stronie: http://microsoft.com/vstudio/ Dzisiaj kilka słów chciałbym poświecić narzędziu, które wpadło mi w ręce kilka miesięcy temu - WinDev.
Lepszej jakości prezentacje dostępne są na stronie internetowej aplikacji.
18
11
2007
Promocja archiwalnych numerów z Software-WydawnictwoNapisał tPython w kategorii MiszmaszTo nie jest sponsorowany wpis. Pod koniec ubiegÅ‚ego miesiÄ…ca Sofware-Wydawnictwo rozpoczęło masowÄ… wyprzedaż archiwalnych numerów swoich pism. Dlaczego dopiero teraz o tym pisze? Po prostu wczoraj dostaÅ‚em paczkÄ™ z 26 numerami: SDJ, phpsolutions oraz hackin9. ObejmujÄ… one zakres trzech pierwszych kwartałów bieżącego roku. BiorÄ…c pod uwagÄ™ cenÄ™ pierwotnÄ… pojedynczego numeru (25-30zÅ‚), cena zestawu jest wyjÄ…tkowo kuszÄ…ca. A tematyka opisywana nie dezaktualizuje siÄ™ tak szybko jak w przypadku innych gazet komputerowych. Dzisiaj przypadkowo natknÄ…Å‚em siÄ™ na pewnÄ… niedogodność w kliencie poczty Thunderbird. Na jednym ze swoich kont używam kilku tożsamoÅ›ci. Dla konta głównego ustawiÅ‚em certyfikat S/MIME, a nastÄ™pnie próbowaÅ‚em wysÅ‚ać podpisanego cyfrowo e-maila korzystajÄ…c z innej (nie głównej) tożsamoÅ›ci. Efekt - program Thunderbird nie potrafi odnaleźć wÅ‚aÅ›ciwego certyfikatu. Procedura dodawania ceryfikatu S/MIME do tożsamoÅ›ci: WiÄ™cej informacji: http://forums.mozillazine.org/viewtopic.php?t=455694 JSON (JavaScript Object Notation) jest drugim, po XML, najpopularniejszym formatem przesyÅ‚ania danych stosowanym w technologi AJAX. NiewÄ…tpliwÄ… przewagÄ… JSON’a nad XML’em jest jego natywne parsowanie po stronie klienta (funkcja JavaScriptu eval()). JSON pozwala również na proste serializowanie obiektów JavaScript. PrzykÅ‚ad skÅ‚adni JSON (przykÅ‚ad z Wikipedii na licencji GPL FDL):
{"menu": {
"id": "file", "value": "File", "popup": { "menuitem": [ {"value": "New", "onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"} ] } }} Analogiczny zapis w XML:
<menu id="file" value="File">
<popup> <menuitem value="New" onclick="CreateNewDoc()" /> <menuitem value="Open" onclick="OpenDoc()" /> <menuitem value="Close" onclick="CloseDoc()" /> </popup> </menu> Parsowanie JSON po stronie JavaScript sprowadza siÄ™ do pojedynczej instrukcji:
var obiekt = eval(‘(’ + JSON + ‘)’);
Następnie do zmiennej obiekt można się odwoływać jak do zwykłego obiektu:
alert(obiekt.menu.id); //zwróci "file"
alert(obiekt.menu.popup.menuitem[1].onclick); //zwróci "OpenDoc()" Warto zaznaczyć, że JSON nie wymaga obecności znacznika głównego, tak więc zapis można jeszcze bardzie skrócić. Pomimo iż według standardu JSON można przesyłać tylko dane (proste typy obsługiwane w JavaScript oraz obiekty JS), to jednak nie ma problemu z przesłaniem funkcji (w tym wypadku należy to rozumieć jako metodę obiektu):
{
nazwa: "Funkcja", func: function(arg) { alert(arg); } }
Następnie funkcje wywołujemy:
var obiekt = eval(‘(’ + JSON + ‘)’);
obiekt.func(‘hello’); OczywiÅ›cie możliwe jest traktowanie funkcji jako części obiektu (choć nie wchodzi to w skÅ‚ad standardu JSON!):
{
nazwa: "Funkcja", func: function(arg) { alert(arg); }, func2: function() { alert(this.nazwa); } } Wówczas:
obiekt.func2();
wyÅ›wietli napis “Funkcja”.
Prezentacja wideo: W przeciÄ…gu ostatniego roku można zauważyć zwiÄ™kszenie zainteresowania formatem JSON. Do najbliższej specyfikacji jÄ™zyka Javascript zgÅ‚oszono dwie nowe metody klasy Object (klasy superbazowej) sÅ‚użące do serializacji i deserializacji obiektów. Wiele popularnych bibliotek i frameworków AJAX’owych korzysta z JSON jako podstawowego sposobu komunikacji. PHP poczÄ…wszy od wersji 5.2 posiada wsparcie do generowania i parsowania zapisu JSON (http://pl.php.net/json). PrzykÅ‚ad (zaczerpniÄ™ty z dokumentacji PHP): wypisze:
{"a":1,"b":2,"c":3,"d":4,"e":5}
Natomiast: zwróci tablicę:
array(5) {
["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) } Niezależnie od tych rozwiązań powstały zewnętrzne biblioteki, często o dużo większych możliwościach. Linki do tych rozwiązań można znaleźć na stronie: www.json.org. Nie brakuje przy tym bibliotek dedykowanych językowi Java. Dwie oficjalne można znaleźć na stronach: http://www.json.org/java/index.html oraz http://www.json.org/java/simple.txt (obydwie na otwartych i darmowych licencjach). JSON.simple W przypadku JSON.simple należy ściągnąć archiwum http://www.JSON.org/java/json_simple.zip Od tej chwili możemy skorzystać z gotowych klas znajdujących się w pakiecie: org.json.simple.*. W szczególności wykorzystuje się dwie:
JSONArray
JSONObject Zacznijmy od drugie. Można zrobić porównanie, że generuje ono jednopoziomową tablicę asocjacyjną:
import org.json.simple.JSONObject;
JSONObject obj=new JSONObject(); Powyższy kod wygeneruje odpowiednio zakodowany i sformatowany ciąg JSON:
{"nickname":null,"num":100,"balance":1000.21,"is_vip":true,"name":"foo"}
JSONArray zachowuje się trochę inaczej. Tworzy, jak sama nazwa wskazuje, tablicę elementów (mogą być różnego typu!):
import org.json.simple.JSONArray;
JSONArray tab = new JSONArray(); wypisze:
{["111",222,333.33]}
Obiekty te można wzajemnie łączyć, tworząc wielopoziomowe struktury:
JSONObject json = new JSONObject();
json.put("napis", "to jest napis"); json.put("liczba", new Integer(999)); JSONArray tab = new JSONArray(); json.put("tablica", tab); Rezultat:
{"napis":"to jest napis","liczba":999,"tablica":["111",222,333.33]}
Prezentacja wideo: JSON in Java JSON.simple jest prostą, aczkolwiek w kompletną biblioteką. Jeżeli jednak potrzebujemy więcej, należy sięgnąć do innych. Pełniejszą odmianą JSON.simple jest „JSON in Java� (http://www.json.org/java/index.html). Instalacja oraz wykorzystanie jest bardzo zbliżone do JSON.simple. Biblioteka oprócz prostego tworzenia danych JSON, umożliwia też łatwiejsze jego odczytywanie, wspiera konwersje z/do XML oraz zawiera kilka mniej ważnych elementów, których pozbawiona jest uproszczona wersja. JSON-lib Obydwie wyżej opisane biblioteki są zgodne ze standardem JSON. Wprowadza to pewne ograniczenia, na przykład w kwestii przesyłania funkcji. Instalacja nie jest w tym wypadku tak prosta, bowiem json-lib posiada listę zależność zawierającą: Należy zainstalować wymagane zależności, a na końcu pobrać plik jar odnoszący się do json-lib (json-lib-1.0b1-jdk13.jar lub json-lib-1.0b1-jdk15.jar). Wszystkie pliki jar umieszczamy w podkatalogu WEB-INF/lib na serwerze. Po odświeżeniu danych serwera zostanie udostępniona przestrzeń nazw net.sf.json.* Podstawowe użycie jest analogiczne jak wyżej (przykłady pochodzą w części ze strony http://json-lib.sourceforge.net):
int[] array = new int[]{1,2,3};
JSONArray jsonArray = JSONArray.fromObject( array ); out.print(jsonArray); wypisze:
[1,2,3]
Natomiast:
List list = new ArrayList();
list.add( "A" ); list.add( "B" ); JSONArray jsonArray = JSONArray.fromObject( list ); out.print( jsonArray ); wypisze:
["A","B"]
W kolejnym przykładzie widać utworzenie prostej funkcji:
Map map = new HashMap();
map.put( "name", "json" ); map.put( "bool", Boolean.TRUE ); map.put( "int", new Integer(1) ); map.put( "arr", new String[]{"a","b"} ); map.put( "func", "function(i){ return this.arr[i]; }" ); JSONObject json = JSONObject.fromObject( map ); out.print( json ); zwróci:
{"func":function(i){ return this.arr[i]; },"arr":["a","b"],"int":1,"name":"json","bool":true}
Wielką przewagą json-lib nad podobnymi bibliotekami jest możliwość serializacji klas języka Java do postaci JSON:
class MyBean{
private String name = "json"; private int pojoId = 1; private char[] options = new char[]{‘a’,‘f’}; private String func1 = "function(i){ return this.options[i]; }"; private JSONFunction func2 = new JSONFunction(new String[]{"i"},"return this.options[i];"); // getters & setters JSONObject jsonObject = JSONObject.fromObject( new MyBean() ); kod zwróci:
{"name":"json","pojoId":1,"options":["a","f"],
"func1":function(i){ return this.options[i];}, "func2":function(i){ return this.options[i];}} W czasie konwersji obiekty klasy JSONFunction są zamieniane na funkcje języka JavaScript. Dodatkowo json-lib pozwala na konwersje formatu JSON na XML i odwrotnie. Bardziej szczegółowy opis JSON można znaleźć w dokumencie: http://www.ietf.org/rfc/rfc4627.txt Ajax Kurs cz. 1: |





Wpisy (RSS)