środa, 16 grudnia 2009

Help do Flex'a 4

Ostatnio szperając w materiałach opublikowanych przez Adobe odnośnie nowej biblioteki Flex 4 natknąłem się na tego pdf'a: http://help.adobe.com/en_US/Flex/4.0/UsingSDK/flex_4_help.pdf

Pozycja warta uwagi, dostajemy w pigułce sporą dawkę wiedzy ;-)

środa, 4 listopada 2009

Konfiguracja FlashDevelopa z FlexSDK

Nowa wersja, nowa konfiguracja, nowe możliwości... więc postanowiłem też odświeżyć how-to, prezentując krok po kroku konfigurację FlashDevelopa w formie video. Nagranie jest kierowane do osób stawiających swoje pierwsze kroki w FD.




Jeśli jesteście zainteresowani kolejnymi tutorialami/how-to lub chcielibyście się podzielić swoimi uwagami, proszę zostawiać komentarze.

wtorek, 3 listopada 2009

HOME - wołając o pomoc...

Po raz pierwszy na świecie, jednego dnia, w Dniu Ziemi, 5 czerwca 2009 – równocześnie w 85 krajach, w kinach, w telewizji, na DVD i w Internecie będzie miała miejsce premiera największego na świecie multimedialnego wydarzenia pro-ekologicznego. Premiera filmu S.O.S. Ziemia ("HOME”). Wspólny projekt Luca Bessona i fotografa Yanna Arthusa-Bertranda to zapierające dech w piersiach, piękne i poruszające obrazy. To niesamowita podróż w głąb australijskiej rafy koralowej, wędrówka przez niebezpieczne amazońskie lasy, bezkresną pustynię Gobi i industrialne dzielnice Szanghaju… Podróż przez wszystkie kontynenty, której celem jest zwrócenie uwagi świata na problemy i zagrożenia środowiska naturalnego: globalne ocieplenie, umierające lasy, wymieranie gatunków zwierząt i roślin, na kończące się zasoby naturalne. Efekt przewracającego się domina klęsk ekologicznych może zapoczątkować katastrofalne konsekwencje. Film S.O.S. Ziemia ("HOME”) to ostrzeżenie przed zagładą, to wołanie naszej Planety o ratunek...

Nic dodać nic ująć. Film przepiękny i mrożący krew w żyłach. Pokazuje, opowiada, przekazuje fakty i liczby. Zachwyca przepięknymi widokami, przepiękną muzyką i szokuje wyliczeniami... Jedna z obowiązkowych pozycji dla każdej osoby na planecie...

sobota, 31 października 2009

Zdalny pulpit czyli TeamViewer

TeamViewer to całkiem przyjemny programik do pracy zdalnej. Jest o wiele wydajniejszy od pulpitu zdalnego wbudowanego w Windowsa. Bardzo rozsądnie przetwarza obraz wysyłany do użytkownika zapewniając płynność pracy nawet przy słabszych łączach. Po kilku dniach testowania gorąco polecam. Do użytku niekomercyjnego program jest darmowy :)

środa, 28 października 2009

Czarna dziura...

Nawet nie wiedziałem jak oszałamiająca i fascynująca potrafi być czarna dziura napisana w processingu... Jeszcze nie wiem co i jak, ale podoba mi się :D

wtorek, 27 października 2009

Komiks o życiu

Dostałem dzisiaj od Pawła linka do baaaardzo życiowego komiksu http://freelanceswitch.com/category/freelance-freedom/. Śmieszny, ironiczny i prawdziwy ;-)

poniedziałek, 19 października 2009

Zmiana oferty na XP-Dev.com

Całkiem niedawno pisałem o darmowej kontroli wersji na XP-Dev.com. Niestety jakiś czas temu serwis został przeniesiony na nowe serwery i wraz z odmłodzeniem zmieniły się też warunki użytkowania i plany cenowe. Teraz w planie darmowym mamy do dyspozycji:
  • brak limitów dla projektów open-source
  • 2 projekty prywatne
  • 200MB przestrzeni dyskowej
  • ograniczenie do 4 historii wraz z błędami na projekt
  • nielimitowana ilość uczestników projektu
  • brak SSL
  • brak kopii bezpieczeństwa
  • reklamy na kontach
Sporo też problemów z przeniesieniem starych projektów do nowego systemu zarządzania. Niestety przykro to mówić, ale serwis stracił moją rekomendację...

niedziela, 18 października 2009

Drogi kliencie, czy wiesz za co płacisz?

Idąc za ciosem po publikacji luźnych myśli, postanowiłem naświetlić Wam - moi drodzy klienci - kosztorys dobrej aplikacji. Często wchodzicie na stronę firmy zajmującej się tzw. webmasterką i chcecie im zlecić wykonanie strony firmowej. Co firma to inne ceny i przeróżne hasła zachęcające do skorzystania z ich usług.

Marketing tutaj odgrywa bardzo ważną rolę, ale czym tak na prawdę jest reklama? Czy zawsze mówi prawdę? Reklama jest jak lep na muchy - w tym przypadku na Was drodzy klienci - mający przyciągać masy. A co wiecie o produktach masowych? Znacie idealne rozwiązania dla każdego? A może jakiś półprodukt? I nie mówię tutaj o chlebie czy maśle, ale o generatorach witryn internetowych. Tak dokładnie, tych generatorach które pozwalają za pomocą 2-3 kliknięć "zbudować" stronę. Nie będę wnikał jak ta strona wygląda, co oferuje i czy reprezentuje jakąkolwiek jakość...

Mogę powiedzieć za to czym powinien się charakteryzować produkt naprawdę wysokiej jakości. Produkt który zrealizuje zapotrzebowanie klienta, który będzie zrobiony "na miarę". Chyba tego za każdym razem oczekujecie? Chcecie otrzymać coś dobrego, wydajnego i użytecznego...

Kolega lubi używać porównania "mercedes vs polonez", ale moim zdaniem nie tak należy do tego podejść. To porównanie niestety nie oddaje złożoności problemu i często gęsto daje złudny obraz. Każda strona czy aplikacja webowa to długi i skomplikowany proces produkcji, gdzie macie kontrolę nad każdym jej etapem. To jest jak układanie domino, gdzieś się popełni błąd i klocki lecą...

Przejdźmy może do pytań jakie powinniście sobie zadać zanim zamówicie jakąkolwiek aplikację:
  • czego ma dotyczyć?
  • ile odwiedzin dziennie/tygodniowo/miesięcznie się spodziewacie?
  • czy jest to produkt na lata? A może chwilowy/tymczasowy?
  • czy będziecie przetrzymywać tam wartościowe informacje?
  • będziecie gromadzić informację o klientach?
  • będą prowadzone statystyki?
  • czy aplikacja ma być bezpieczna? Odporna na ataki? Jeśli tak to jakie?
  • jakiego typu treści będą umieszczone?
  • jaki charakter prezentowania treści wybierzecie?
  • na jakim hostingu będzie działała aplikacja? Jakie są parametry tego hostingu?
i wiele, wiele innych...

Odpowiedzi jakich udzielicie na powyższe pytania w bardzo dużym stopniu wpłyną na sposób wykonania aplikacji i technologię w jakiej zostanie ona wykonana. Zadałeś/aś sobie te pytania? Udzieliłeś/aś na nie odpowiedzi? A teraz najważniejsze, czy widzisz złożoność problemu?

Wyprodukowanie dobrego oprogramowania, to nie jest kwestia 5-10min. Czy jeśli idziesz gotować obiad, ogranicza się to do wlania wody do garnka i postawienia na kuchence gazowej? To może przestawię Ci z grubsza jak wygląda proces wytwarzania dobrego oprogramowania:
  1. Spis wymagań
    • podstawowe założenia aplikacji
    • spis funkcjonalności
  2. Przypadki użycia
    • dokładny opis działania
    • diagramy przypadków użycia
  3. Model klas
  4. Przygotowanie środowiska testowego
  5. Wytwarzanie aplikacji
  6. Refaktoryzacja -> wersja release
  7. Oddanie aplikacji
Nakreśliłem ten plan w mocno przewrotnej formie, ponieważ rozpisałem kroki w których Ty drogi kliencie, bierzesz udział. Jak by zebrać tak procentowo to pierwsze 2 punkty stanowią jakieś 3-5% całości projektu. Więc dlaczego nie wyolbrzymiłem jakże żmudnej pracy zleceniobiorcy? Dlatego, że nic by Ci to nie powiedziało drogi kliencie, a szukanie wyjaśnień wszystkich etapów i tak by nie oddało nakładu pracy jaki zostanie w to włożony.

Jak widzisz wybieram to co dla Ciebie jest ważne, bo to Ty decydujesz czego potrzebujesz. A teraz wyobraź sobie, że zmiana decyzji w trakcie wytwarzania aplikacji, czyli pisania kodu źródłowego potrafi nieść za sobą olbrzymie zmiany w całej architekturze. Możesz podejść do tego jak do zmiany szerokości tylnej kanapy w samochodzie - na szerszą ;-) Nie dość, że trzeba zmienić karoserię to i po zmianie karoserii całe podwozie...

Chcesz czy nie, to na Twoich barkach w znacznej mierze leży jakość wytworzonej aplikacji i czas jej realizacji. A "my" tak jak i Ty nie wiemy wszystkiego. Bardzo często dochodzi do potrzeby rozwiązania problemów powstających w trakcie pisania kodu.

Wszystkie powyższe czynniki składają się na jakość aplikacji. Ktoś może wykona to 10x taniej i będzie tak samo wyglądać, ale czy spełni te wszystkie wymogi jakie postawiłeś? Zapewni bezpieczeństwo Twoim danym i danym klientom? Będzie odporna na większość ataków? Czy będzie się nadawać do umieszczenia na Twoim hostingu? Czy nie będziesz musiał co miesiąc dopłacać do hostingu, ponieważ zacznie generować zbyt duży ruch? A może będzie generować tak duże obciążenie serwera, że nie przyjmie odpowiedniej ilości jednoczesnych wizyt? No ale przecież będzie wyglądać tak samo! I będzie tanio!

Więc tak na prawdę zastanów się mój drogi kliencie, na czym tak na prawdę Ci zależy. I miej świadomość, że dobrze wykonana aplikacja, nie będzie kosztować 200zł a wielokrotność tej sumy. A ktoś kto będzie wykonywać Twoje zlecenie, musi mieć już dobrze opanowany kunszt oraz olbrzymią wiedzę, żeby wiedzieć, jak spełnić Twoje oczekiwania.

Jedyne czego mogę Ci życzyć, to dobrych decyzji i udanych "zakupów".

sobota, 17 października 2009

Moralność a cena...

Witam wszystkich czytelników. Dzisiaj nieco odbiegnę od standardowej tematyki swoich wypowiedzi. Gałąź webmasterska rozwija się bardzo dynamicznie. Zewsząd zalewają nas frameworki aplikacyjne pozwalające niewielkim nakładem pracy stworzyć "coś"... Naturalnie przyciąga to coraz więcej ludzi, ponieważ staje się prostsze i przystępniejsze. Powstaje bardzo dużo (video)tutoriali związanych z tworzeniem prostych aplikacji i witryn internetowych. Naturalnie poruszają one podstawy, niewielki zakres jakim powinna cechować się dopracowana strona. I właśnie tutaj zaczyna się problem...

Z życia codziennego, kiedy zgłasza się do Was klient z prośbą o wycenę konkretnego projektu, co bierzecie pod uwagę? Bezpieczeństwo, optymalizację, interaktywność, wodotryski, grafikę...? Kolejność wymienianych elementów nie jest bez znaczenia, całkiem celowo podałem właśnie taką konfigurację.


Uwzględniając taką konfigurację i rzetelnie wyceniając czas jaki to zajmie, nakład pracy jakiego wymaga projekt, jaką odpowiedź odnośnie ceny dostajecie? Czy słowa "Ile?! Przecież inni to zrobią za 10x mniej!", brzmią znajomo? Czy jeśli uwzględnicie wszystkie aspekty stać Was na podjęcie się takiego zlecenia za 200zł?

Patrzę na to co się dzieje z niedowierzaniem i zastanawiam się gdzie leży tego przyczyna? Dochodzę do wniosku, że to przez "programistów" co zajmują się odpalaniem darmowych projektów na hostingach, oraz osoby które mają znikomą wiedzę na temat wytwarzania oprogramowania. Nie zdają sobie sprawy z olbrzymich niedociągnięć wytwarzanego przez siebie oprogramowania. Ich niewiedza przyczynia się również, do niesamowitego mniemania o sobie... Zdecydowany brak pokory wobec siebie i innych.

Z drugiej strony niczego nieświadomi klienci... Nie zdają sobie sprawy z niebezpieczeństw na jakie są narażeni, na lichą jakość produktu który otrzymują. Dla nich, jeśli ładnie wygląda i coś tam się rusza to jest super! Tego właśnie chcieli... Co z tego, że mogę spam rozsyłać przez ich formularz kontaktowy... Nieważne, że wstrzyknę kod SQL i skasuje im wszystkie informacje w bazie danych... Dlaczego? Bo ktoś zrobił im to tanio!

Robicie tak samo? A może uświadamiacie klientów jakie zagrożenia niesie ze sobą tania aplikacja?

Niesamowity jest fakt, że ludzi nie obchodzi ile transferu zużyje ich aplikacja, jakie obciążenie będzie generować i ile luk bezpieczeństwa posiada... Płacą za pozycjonowanie, wykupują dobre hostingi, dopłacają do transferu a jeden "niewinny" atak umieszcza ich serwer na czarnej liście.

A teraz odpowiedź sobie na pytanie, jakim jesteś developerem/klientem? Czy moralne jest nieuświadamianie klienta o tym co dostaje? A jeśli go uświadomimy, czy moralne jest podjęcie się produkcji bubla?

niedziela, 11 października 2009

JQuery - jeśli flex Ci nie potrzebny

Niedawno zainteresowałem się JQuery. Muszę przyznać, że bardzo fajny i przyjemny framework. Pozwala osiągnąć część efektów flexowych przy pomocy javascriptu. Czy warto się tym interesować? Jak najbardziej. Co prawda część animacji tnie się (testowane na friefox 3.5), jednak UI + interactions daje fajne możliwości. No i oczywiście możliwość pobrania dopasowanej wersji do własnych potrzeb to jest fajny smaczek ;-)

Klikajcie linka i poznajcie możliwości aplikacji. Pierwsze kroki staną się proste jeśli odwiedzicie dział dokumentacji w języku polskim, oraz serie tutoriali do JQuery :-) gl&hf!

Flex Challenge Academic Tour

Piotr Walczyszyn (ewangelista Adobe) umieścił na swoim blogu informację o planowanej tracie Flex Challenge Academic Tour. Będzie to seria wykładów i warsztatów dla studentów. Nie było by w tym nic nadzwyczajnego, gdyby nie fakt, ze nareszcie impreza tego typu dotrze do Lublina! Życzę sobie i wszystkim aby ta inicjatywa wypaliła!
Powodzenia Piotrze :)

poniedziałek, 5 października 2009

Ukradli sesję!

Już jakiś czas rozmawiam ze znajomymi o zabezpieczeniach. Większość zgodnie używa do zabezpieczenia po stronie PHP sesji, ale czy używa ich prawidłowo? Do tego dojdziemy, ale zacznijmy od spraw oczywistych.

Czym jest sesja i do czego służy? Sesja to odmiana ciasteczka charakteryzująca się tym, że wszystkie dane sesji trzymane są po stronie serwera. Wydaje się być to najbezpieczniejszym rozwiązaniem ponieważ użytkownik posiada jedynie ID sesji i nie ma bezpośredniej możliwości manipulowania danymi zawartymi w sesji. Super mamy coś czego nikt nam nie zmieni!

Z w.w. powodu sesja to bardzo dobry sposób na trzymanie stanu zalogowania użytkownika oraz podstawowych danych sesji. Jednak jest tego zasadniczy minus. Co jak ktoś przechwyci sesję?

HTTP jest protokołem bezstanowym, dlatego każdy kto posłuży się ID sesji ma do niej dostęp. Załóżmy, że Janek zalogował się do serwisu i otrzymał identyfikator sesji ab12c. Następnie sytuację gdzie Krzysiek logując się do serwera lub też niekoniecznie po przez logowanie - celowo/niecelowo - otrzymuje ID sesji taki sam jak Janek. W tym momencie jeśli Krzysiek celowo przejął ID sesji Janka, dla serwisu jest Jankiem.

Przykry scenariusz, jednak jesteśmy na niego narażeni, jeśli nikt nie zabezpieczył się przez przechwyceniem sesji. Ale jak się zabezpieczyć? - zapytacie. Otóż istnieje bardzo prosta technika:
  1. przy tworzeniu sesji zapisujemy w sesji IP usera który powołał sesję do życia
  2. przy następnych zapytaniach porównujemy IP zapytania z IP w sesji
  3. jeśli IP się nie zgodzi niszczymy sesję
Ten prosty sposób już sporo nam daje, lecz kiedy zawiedzie? Chociaż by, w sytuacji gdy Jan i Krzysiek są użytkownikami tej samej sieci lokalnej, która do komunikacji z internetem używa tej samej bramy. Możliwe, że Janek łączy się przez proxy, jeśli Krzysiek użyje tego samego proxy nasze zabezpieczenie również zawiedzie.

Jak się ustrzec przed tymi, jaki i kolejnymi potencjalnymi atakami napiszę w części 2 (w bliżej nie określonym terminie).

wtorek, 22 września 2009

poniedziałek, 21 września 2009

Windows 7 i RAID 1

Na weekendzie stawiałem Windows 7 na swoim komputerze stacjonarnym gdzie mam 2 dyski spięte w RAID1. Standardowo przy tego typu akcjach gdzie posiada się "nietypową" konfigurację sprzętową - a raczej powinna być to już jako typowa ponieważ dużo płyt głównych oferuje wejścia sata na których można skonfigurować RAID obsługiwany przez chipset na płycie głównej - wymagana jest ręczna instalacja sterowników do obsługi RAIDu. Jednak nie w Windows7 :D

Windows 7 podczas instalacji na konfiguracji sprzętowej gdzie występuje połączenie dysków RAIDem samodzielnie wykrywa dyski RAIDowe. Jak bardzo mi tego brakowało :-) Co dziwniejsze prędzej bym się spodziewał wsparcia dla RAID po Linuxie a nie po produkcie M$ :-) Ale nie ma co narzekać, trzeba się cieszyć :D Dziwie się sam sobie, że to mówię ale: "M$, good job!".

czwartek, 17 września 2009

Free charts - axiis

Znalazłem ciekawy projekt darmowych wykresów dla Flexa http://www.axiis.org/. Dosyć ciekawe wykresy ale skomplikowane kody ;-)

wtorek, 15 września 2009

Windows 7 - instalacja Flash Player - error NPSWF32.dll

Ostatnio natknąłem się na error podczas instalacji wtyczki Flash Player w wersji Debugger na OS Windows 7 PRo:
Rozwiązaniem jest ręczne usunięcie pliku C:\Windows\SysWOW64\Macromed\Flash\NPSWF32.dll plus odpaliłem uninstaller FP Plugin.

Przyczyną prawdopodobnie są otwarte programy (oprócz przeglądarek) które używają pliku a o których zamknięcie nie dopomina się instalator.

poniedziałek, 14 września 2009

Monopoly City Streets

Grałeś kiedyś w Eurobiznes lub Monopoly ? Teraz Google wprowadziło grę online bazująca na prawdziwej mapie świata ! Wystarczy założyć konto i już możesz kupić ulicę na której mieszkasz. Ktoś był szybszy ? Nie martw się i bądź czujny gra zostanie zresetowana we wtorek lub środę. W pierwszych godzinach po uruchomieniu dopchanie się do serwera graniczyło z cudem. Nawet oficjalny blog nie wyrabiał z obsługą chętnych do jego czytania. Po kilku dniach od startu są gracze którzy operują bilonowymi kwotami posiadając np: zaledwie 3 ulice. Taki wynik to oczywiście wynik oszustw. Reset gry i jej uruchomienie w nowej udoskonalonej wersji ma utrudnić działanie takim "cwaniaczkom". Przygotuj się więc, nic straconego. Zapraszam na forum o grze.
Gra jest dostępna pod adresem www.monopolycitystreets.com

niedziela, 13 września 2009

ExportProject plugin

To czego mi bardzo brakowało we FlashDevelopie, czyli eksport archiwum, dokumentacji, podglądu html i paru innych :) Niesamowity plugin oferujący podstawowe funkcje których tak brakowało samemu FlashDevelopowi :)
ExportProject

ExportSWC - FlashDevelop 3

Jeden z przydatniejszych pluginów do poczciwego FlashDevelopa 3. ExportSWC umożliwia kompilację projektu do paczki SWC.

Statystyki kodu w FlashDevelopie

Ponieważ naszła mnie wena na rozpisywanie się odnośnie wtyczek do FlashDevelopa, postanowiłem napisać o bardzo przydatnej wtyczce SourceCodeStatistics. Dzięki niemu dostępna jest dokładna statystyka kodu projektu. Niezwykle użyteczny plugin dla ogólnego podglądu :)

Mozolna konfiguracja AIR w FD

Mozolna konfiguracja AIR w FlashDevelopie dzięki temu pluginowi wcale nie musi być taka mozolna :D Świetny dodatek który pozwala na konfigurację aplikacji AIRowej w środowisku graficznym :-)

Pilnuj prawidłowego kodu - FlashdevelopPMD

Dość ciekawy plugin dla FlashDevelop 3 pilnujący stylu programowania deva :D Dokładnie tak, ta dodatkowa wtyczka przestrzega przed złymi nawykami programistycznymi :D
http://www.flashdevelop.org/community/viewtopic.php?f=4&t=5403

Refaktoryzacja kodu w FlashDevelop 3?

Dopiero co znalazłem formattera a tym czasem trwają prace nad refaktoryzacją kodu :D Niesamowicie dobre wieści. Czyżby community FD zakasało rękawy i wyrośnie poważny darmowy konkurent FDT? :)
http://www.flashdevelop.org/community/viewtopic.php?f=4&t=5283

Formatowanie kodu nie tylko dla Eclipse

Dzisiaj natknąłem się na bardzo użyteczny plugin dla FlashDevelop 3 :) Dzięki paru dodatkowym dll mamy ładne formatowanie kodu mxml, as3, xml :D

Źródło: http://www.flashdevelop.org/community/viewtopic.php?f=4&t=5208

piątek, 11 września 2009

Instalacja PL w Windows 7 Professional

Użytkownikom Windows 7 Ultimate oferowana jest zmiana wyświetlanego języka po przez Panel Kontrolny. Wersja Windows 7 Professional niestety została okrojona z tej funkcjonalności. Jest sposób na instalację paczki językowej pl.cab bez ponownej instalacji systemu z płyty ze zintegrowanym polskim pakietem językowym. Jak to zrobić?

 W trybie administratora w CMD wpisać:
  • DISM /Online /Add-Package /PackagePath:[ścieżka do lp]
  • bcdedit /set {current} locale pl-PL
  • bcdboot %WinDir% /l pl-PL //mi nie zadziałała komenda, lecz wszystko działa prawidłowo i jest spolszczone

Teraz uruchamiamy program regedit i usuwamy wpis en-US znajdujący się w:
HKEY_LOCAL_MACHINE/SYSTEM/Current/Control/Set/Control/MUI/UILanguages

Jeśli wszystko zostało wykonane prawidłowo po ponownym uruchomieniu komputera Windows powita nas polskim komunikatem ;-)

wtorek, 8 września 2009

Chcesz podróżować w czasie?

Teraz to możliwe, niestety tylko w internecie i w ograniczonym zakresie ale naprawdę warto. Dzięki bardzo szybkiej podróży możemy nie tylko poczytać newsy np.z 2/03/1998 ale również docenić pracę ówczesnych webmasterów. Standardowe prędkości przesyłu danych za pomocą wydających kosmiczno-modularne dźwięki modemów, wahały się w granicach 56 kb. Umieszczenie każdego obrazka wymagało zapewne konsultacji i badań nad wpływem na czas ładowania strony (-;. Banery z animowanych gif-ów. Ehhh to były czasy ... www.archive.org.

poniedziałek, 7 września 2009

Darmowe subversion do projektów komercyjnych

Od jakiegoś już czasu korzystam z darmowej kontroli wersji na XP-Dev.com. Usługa udostępniana kompletnie za free i na bardzo przyjaznych warunkach. Nie kradną kodu, nikt nie ma do niego wglądu itp :) Na start mamy dostępnej 500MB przestrzeni i backup na żądanie. Za roczną opłatą 40$ mamy zwiększony limit do 2000MB i backup robiony na bieżąco.
Przetestowany i gorąco polecam :) Zwłaszcza po wykupieniu aktualizacji :)

Problemy z HDD Samsunga

Jeśli macie problem z dyskiem, przed wysłaniem do serwisu należy dokonać pełnej diagnostyki. Tutaj z pomocą przychodzi ES-tool. Bardzo dobre narzędzie diagnostyczne. Testuje wszystkie aspekty dysku, ponad to umożliwia formatowanie niskopoziomowe - i żegnajcie wirusy - oraz modyfikacje parametrów dysku.
Program należy nagrać na FDD lub CD-ROM w wersji bootowalnej. Na szczęście w wersji CD-ROM dostępny jest obraz który wystarczy wypalić na płycie.
Zamiast panikować i kombinować z setką dostępnych programów narzędziowych, najlepiej zacząć od tego przydatnego programiku.

piątek, 4 września 2009

Kodowanie znaków amfphp & mysql

Przechodząc od razu do rzeczy, kodowanie bazy i tabel należy ustawić na utf_polish_ci - jeśli aplikacja będzie używała jedynie języka polskiego, jeżeli nie utf_general_ci - natomiast w serwisach phpowych łączyć się z bazą danych w następujący sposób:

mysql_connect( $host, $user , $pass );
mysql_select_db( $dbase ); 

@mysql_query("SET NAMES 'utf8';");
@mysql_query('SET CHARACTER SET utf8;');
 Dzięki mooska za refresh :D

W bramce komentujemy zmianę kodowania w locie. Tutaj nam się to nie przyda ;-)

[AS3] Walidacja e-maila w 2 linijkach

To nie żart :) Wystarczy posłużyć się tym kodem:

var regexp : RegExp = new RegExp( '^([a-zA-Z0-9]+[a-zA-Z0-9._%-]*@(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,4}) , 'i' ) ;
regexp.test( emailText.text ) ;

Zapis logów do pliku w PHP

Ostatnio napisałem sobie Loggera w PHP. Prosta aczkolwiek bardzo przydatna klasa. Poniżej zamieszczam pełny kod.

<?php
define( 'LOGGER_NEW_LINE' , "\r\n" ) ;

class Logger
{
/**
* Jedyna instancja klasy
* @var Logger
*/
private static $_instance = null ; 

/**
* Zwraca jedyną instancję klasy
* 
* @return Logger
*/
public static function getInstance()
{
if( is_null( self::$_instance ) )
{
self::$_instance = new Logger() ;
}

return self::$_instance ;
}

private $absolute_path ;
private $logs_path ;
private $date ;
private $log_file ;

/**
* W konstruktorze następuje połaczenie z bazą danych.
* 
* @return Logger
*/
private function __construct()
{
$this->absolute_path = dirname( __FILE__ ) . '/' ;
$this->logs_path = $this->absolute_path . 'logs/' ;
$this->date = date( 'Y_m_d' ) ;
$this->log_file = $this->logs_path . 'logs_' . $this->date . '.log' ;

$this->clearOldLogs( 5 ) ;
}

/**
* Usuwa stare pliki logów
* @return unknown_type
*/
private function clearOldLogs( $maxHistory )
{
$files = glob( $this->logs_path.'*.log' ) ;

$this->log( $files , __FUNCTION__ , __CLASS__ , __FILE__ , __LINE__ ) ;

// przerwanie usunięcia jeśli plików jest zbyt mało
if( sizeof( $files ) <= $maxHistory )
return ;

for ($i = 0; $i < sizeof( $files ) - $maxHistory; $i++ )
{
unlink( $files[ $i ] ) ;
}
}

/**
* Zapis danych do pliku
* @param $data        Dane do zapisania w logu
* @param $function    Zawsze jako parametr podawać __FUNCTION__
* @param $class    Zawsze jako parametr podawać __CLASS__
* @param $file        Zawsze jako parametr podawać __FILE__
* @param $line        Zawsze jako parametr podawać __LINE__
*/
public function log( $data , $function , $class = null , $file = null , $line = null )
{
ob_start( $log_str ) ;
echo date( 'H:i:s' ) , '    ' , $class , '::' , $function , '    in    ' , $file , '    on line    ' , $line , LOGGER_NEW_LINE ;
var_dump( $data ) ;
echo LOGGER_NEW_LINE , LOGGER_NEW_LINE ;
$log_str = ob_get_contents() ;
ob_end_clean() ;

$log_str = str_replace( array( "\r\n" , "\n" ) , LOGGER_NEW_LINE , $log_str );
file_put_contents( $this->log_file , $log_str , FILE_APPEND ) ;
}
}

?>

A o to przykład użycia:

Logger::getInstance()->log( $someData , __FUNCTION__ , __CLASS__ , __FILE__ , __LINE__ ) ;

Logger zapisuje dane w formie wyświetlanej przez funkcję var_dump.

Mapowanie klas w amfphp i AS3

Ponieważ niektórym się zapomina - mi w sumie też - dodawać magiczną linijkę w klasach VO postanowiłem napisać tego posta. Potraktujcie to jako how-to. Pomijam wszelkie zbędne linijki kodu jak includy, importy, pakiety, itp :)

Zacznijmy od kodu w PHP:
  • klasa obiektu VO
class UserVO
{
public $_explicitType = 'vo.UserVO' ;

public $login ;
public $pass ;
}
  • klasa serwisu amfphp
class User
{

public function getUserData()
{
$user = new UserVO() ;
$user->login = 'myLogin' ;
$user->pass = 'myPass' ;
return $user ;
}
}
Z tego co widać jest to bardzo prosty kod. Metoda getUserData zwraca na sztywno obiekt klasy UserVO. Uwagę należy zwrócić na właściwość $_explicitType. Tutaj wpisujemy alias jakiego będziemy używać po stronie flasha dla danej klasy w amfie.

Pora na kod AS:
  • odpowiednik phpowej klasy UserVO
public class UserVO
{
public var login : String ;
public var pass : String ;
}
  • niezbędny kod do pobrania obiektu UserVO
registerClassAlias( 'vo.UserVO' , UserVO ) ; 

var nc : NetConnection = new NetConnection ;
function result( o : Object ) : void
{
var user : UserVO = o as UserVO ;
trace( user ) ;
}
nc.call( 'User.getUserData' , new Responder( result , null ) ) ;
Ważna rolę odgrywa tutaj metoda registerClassAlias która odpowiada za rejestrację aliasu użytego w klasie UserVO, a tym samym prawidłowe mapowanie przesłanych danych na obiekt UserVO we flashu.