piątek, sierpnia 24, 2007

Nowy dylemat (wg. Dr.Dobbs)
Biblioteka czy Framework
Najpierw definicje:
  1. Biblioteka - jest zbiorem funkcji, które można wywołać w celu uzyskania nowej funkcjonalności (takie cegiełki do składania, jak się ktoś nimi posłuży tak mu wyjdzie). Inaczej, funkcje biblioteczne trzeba wołać z aplikacji (treści) by uzyskać formę.
  2. Framework - to coś więcej, to rozwiązanie szkieletowe, to gotowa forma, którą trzeba zapełnić treścią. Form może być skończona ilość, ale dzięki temu rozwiązania oparte o framework są do siebie podobne, niejako standardowe. Inaczej, a raczej odwrotnie, framework jest już gotową funkcjonalnością (przepływem logiki) ale bez treści, taką formę wypełnia się treścią poprzez wywołanie aplikacji. Taka zasada nosi nazwę "Odwróceniem sterowania" (Inversion of Control).
Mechanizmy zapewniające działanie tej reguły odwrotności:
  1. korzystanie z podklas (subclassing)
  2. wprowadzanie zależności (dependency injection)
  3. wzorce metod (template methods)
  4. zamykanie (closure)
Aby sprawnie posługiwać się biblioteką należy dobrze poznać jej funkcje, w frameworku mamy już podstawowy przepływ działania należy jedynie zmienić zachowanie się różnych stanów. Framework jest rozszerzalny i elastyczny poprzez stosowanie podklas możemy łatwo zmienić standardowe zachowanie i dopisać własną funkcjonalność. F jest ukierunkowany na osiągnięcie pewnej funkcjonalności, dlatego już zawiera wszystkie bazowe przepływy i zależności. Wadą F jest to, że w celu spakowania jak największej funkcjonalności F jest skomplikowany i mocno rozbudowany.
karate Kid - "Najlepszą obroną przed atakiem jest nie bycie tam"

Dwa podejścia do wirtualizacji. Są dwa hyperwizory:
  1. sprzętowy (ponieważ działa bezpośrednio na sprzęcie) XEN - firmy XenSource - niezależny od platformy sprzętowej silnik do wirtualizacji, który można wbudować do innych komponentów
  2. programowy (ponieważ działa w środowisku systemu operacyjnego, na razie tylko Linux) - KVM (Kernel Based Virtual Machine) - działa we wnętrzu jądra Linux w wersji 2.6.20, wykorzystuje wbudowane w architekturę procesorów instrukcje i rozszerzenia wirtualizacji (Intel VT or AMD-V). Ładuje się do jądra na żądanie i może uruchamiać maszyny wirtualne Linux lub Windows
Inne podejścia: QEMU, Bosch, VirtualBox
Inne firmy tworzą produkty o nazwie RONS (Red Hat, Oracle, Novell, Sun) - implementując Xen (jako open-source project jest to możliwe) wg. własnych potrzeb do jądra ich odmian (dystrybucji) systemu Linux


Aplikacje Google
Niedawno ukazało się opracowanie w linuxworld na temat dojrzałości płatnego produktu firmy Google - Google Apps Premier Edition (GAPE). Płatnego bo kosztuje 50$/rok. Zdaniem krytyków jest to niewypał (przynajmniej na razie) ponieważ nie ma mechanizmów zarządzanie kontami, prawami i dostępem co skazuje na niepowodzenie jego instalację w dużych firmach. Dla małych firm może to rozwiązanie być OK. Dodatkową nieufność budzi fakt dostępu do nieraz ważnych dokumentów poprzez internet (kwestia dostępności i bezpieczeństwa oraz standardów, regulacji prawnych i procesów danego przedsiębiorstwa). Ale z drugiej strony produkt Google przeciera ścieżki dla takich form narzędzi zwiększających produktywność i niejako sankcjonuje możliwość istnienia takich rozwiązań tym bardziej, że za Google poszły inne firmy Zoho, SalesForce i Microsoft.
Wygląda na to, że jest to pionierski ruch, przecierający ścieżki (podobnie jak przeglądarka Netscape).

czwartek, sierpnia 23, 2007

Jak to bywa z Ajaxem (wg. studium przypadku z http://adtmag.com/article.aspx?id=21111)
Pierwsza rzecz na którą należy zwrócić uwagę to wsparcie transakcyjności. Etapy rozwoju aplikacji a stylu AJAX-a:
  1. do wprowadzenia terminu AJAX - serwer miał skrypt w ASP, a każda strona zwierała skrypt w JS do wsparcia walidacji oraz "doładowywania" danych z serwera. Aplet w Java zapewniał komunikację z serwerem. Kłopoty z nim polegały na wymaganiu instalacji JVM.
  2. nadejście ery Ajax (początek 2005) - trzeba było przepisać. jedyna obawa to czy nadmiar kodu w JS po stronie klienta (przeglądarki) nie spowolni system. W ten sposób powstał framework w Java po stronie serwera - ThinWire (http://www.thinwire.com/) udostępniany na zasadzie LGPL
  3. Gartner tak porównuje rozwój aplikacji RIA:
    1. Poziom 1 - wzmocnienie istniejących aplikacji webowych o snippety
    2. Poziom 2 - możliwość dodawania widgetów w postacie komponentów UI (siatki lub drzewka)
    3. Poziom 3 - stosowanie wyspecjalizowanego frameworku do zawarcia logiki po stronie klienta
    4. Poziom 4 - wykorzystanie uniwersalnego frameworku typu RIA z ściśle powiązaną architekturą C/S
  4. Gartner twierdzi, że w 2010 około 60% nowych aplikacji będzie powstawała przy pomocy frameworku RIA

środa, sierpnia 22, 2007

Zbiór frameworków:

PHP Frameworks

CakePHP - A structured framework that enables PHP users at all levels to rapidly develop robust web applications, without any loss to flexibility.

Symphony - Offers a “Ruby on Rails” like approach to web development. Symphony is well documented, simple to use and can be easily extended or modified.

Prado - An event-driven and component-based framework for Web application development in PHP 5.

Zend Framework - A complete framework to develop PHP 5 applications. It provides a repository of components that are actively supported.

Seagull Framework - Seagull is an object-oriented framework written in PHP that focuses on best practices, clean code and reusable components.

Java Frameworks

JavaServer Faces - JSF simplifies building of user interfaces by allowing you to assemble reusable UI components in a page. It has many tools, libraries and components.

Struts 2 - A simple action based framework that makes use of the Model2 approach to development.

Stripes – It is easy to learn and has excellent documentation. Development with Stripes does not require you to configure every last thing.

MyFaces - A new framework that makes use of the MVC paradigm. It is similar to Struts but with more features and concepts.

Tapestry - Organizes web applications development into component-based framework. Makes use of HTML templates and is design friendly.

JavaScript Frameworks

Prototype - A JavaScript framework that aims to ease development of dynamic web applications. It has a unique toolkit for class-driven development with an excellent Ajax library.

Rico - Rico is designed to build rich Internet applications. It provides visual style effects and animations in a very simple interface.

Dojo - Eases the rapid development of JavaScript and Ajax based applications. It also helps to add dynamic capabilities into your Web pages.

Yahoo! User Interface Library - A collection of controls and utilities written in JavaScript to build richly interactive web applications using DOM scripting, DHTML and Ajax.

qooxdoo – A framework that includes support for professional JavaScript development, a state-of-the-art GUI toolkit and high-level client-server communication.

CFML Frameworks

ColdSpring - ColdSpring makes the configuration and dependencies of ColdFusion components easier to manage.

Fusebox - Fusebox is a lightweight, high-performance web application framework for building applications that are easy to maintain and easily extensible.

Mach-II - An object-oriented MVC framework that can be extended through its filter and plug-in architecture.

Model-Glue - It makes the construction of Object-Oriented Web and Rich Internet Applications a straightforward process.

Perl Frameworks

Catalyst - A very flexible, powerful and fast MVC based framework for developing any type of web project in Perl.

Jifty - A Perl web framework to build web applications based on the DRY (“don’t repeat yourself”) principle.

CGI::Application - A mature, lightweight, flexible MVC framework for rapidly building web applications.

HTML::Mason - A web site development and delivery engine. With Mason, you can directly embed inline Perl codes with HTML templates.

Maypole - Perl framework for MCV-oriented applications designed to minimize coding requirements for creating database-backed applications.

Other Frameworks

Ajax Frameworks – A round-up of 50 Ajax toolkits and frameworks.

Python Frameworks – An overview of Python Web frameworks.

Flash & Actionscript Framework – This site has a comprehensive list of Flash and Actionscript frameworks and components.


Nowa mowa
Od wersji 6 języka programowania Java zmieniło się nazewnictwo wersji. Do wersji 5 (nazwa kodowa Tiger) było takie: Java Standard Edition 5.0 (JSE 5.0), Java Enterprise Edition 5.0 (J2EE 5.0). Od wersji 6 (nazwa kodowa Mustang) jest takie: Java SE 6.0, Java EE 6.0 i doszło Jave ME 6.0 (dla urządzeń mobilnych). Zmienił się także cykl wydawania nowych wersji, od teraz trwa on 18 miesięcy.

Biblia Internetowa

http://biblia.apologetyka.com/

Java zasoby ciekawe:

  1. http://blog.zabiello.com/pages/java
  2. http://tjws.sourceforge.net/
  3. http://tomcat.apache.org/tomcat-4.1-doc/ssl-howto.html

Zasoby o Pythonie:

  1. Nowy interpreter IPython
  2. Tłumaczenie książki marka Pilgrima - http://pl.wikibooks.org/wiki/Python - Dive into python

Problematyka technologii AJAX:

  1. Wdrożenie JSON jako medium wymiany danych (Douglas Crockford)
  2. Zastosowanie środowiska deweloperskiego APTANA IDE
  3. Nowa technologia jMaki
  4. JavaScript dzieki bibliotece prototype staje się b. ciekawy i upodabnia się do Ruby a składnię ma coraz bardziej podobną do Pythona, PHP raczej przypomina Perl lub C++

Ciekawe linki:

  1. http://blog.zabiello.com/pages/php
  2. http://blog.zabiello.com
  3. http://blog.zabiello.com/pages/dotnet
  4. http://www.gotapi.com/html
  5. moo.fx ma dodawanie zdarzeń poprzez klasy css

Współpraca w zakresie usług sieciowych:
Głównym motorem rozwoju języka Java jest ciągle firma SUN (mimo otwarcia się na potrzeby społeczności open source). Tu powstają i są implementowane nie tylko nowe konstrukcje językowe ale też i implementacje nowych technologii. W szczególności spraw palących i drażliwych jak zachowanie stanu (persistance) oraz usługi sieciowe (web services - http://java.sun.com/webservices/).
Postawienie karty na technologii IBM jest OK, ale trzeba uważać na potencjalny konflikt między rozwiązaniami IBM i SUN. IBM jest podobny do MS, niecierpliwie chce wdrażać nowe technologie do Javy, podczas gdy SUN jest tym "hamulcowym". Dlatego IBM, sprytnie posługując sie wpływami w fundacji Eclipse, "przemyca" różne projekty.
Tak np. ma miejsce w przypadku WS - w nowej wersji Java 6 mamy już pełną (choć bardzo spóźnioną w czasie) implementacje WS-* i to jest dobre. Co zrobił IBM gdy potrzebował implementacji WS? Dodał ją do Websphere (swego serwera aplikacji), podobnie zrobiono również w fundacji Apache (projekt Axis).
Mamy więc dwa rozwiązanie tego samego problemu. Które lepsze? To zależy, z punktu widzenia programisty jest unifikacja - w języku Java ma już pełne wsparcie WS (a więc śmierć Aixs-a). Z punktu widzenia kierownictwa działu IT lepsze jest rozwiązanie drugie bazujące na implementacji WS w centralnym miejscu - serwerze internetowym Apache (wtedy programiści różnych języków mogą pisać aplikacje skierowane do jednej, wspólnej implementacji WS pod Apache - potrzebne są jedynie komponenty proxy do Apache dla danego języka w postaci mod_xxxx).
Implementacje WS w języku Java:
  1. JAX-WS - implementacja W3C stosu WS-*
  2. JAXB - powiązanie XML z obiektami w JavaBeans (API do powiązanie XML z obiektami w Javie)
  3. WSIT - współpraca z implementacją WS w MS .NET 3 poprzez wykorzystanie nowej własności Java 6 Mustang - annotacji (tu widzimy po raz pierwszy, mam nadzieję nie jedyny, wpływ C# na Java)
  4. JAXP - przetwarzanie XML niezależne od implementacji parsera XML
  5. XWSS - zapewnienie bezpieczeństwa XML i WS poprzez implementację zaleceń grupy OASIS WSS (web services security)
Inne nowe dodatki do wersji 6:
  1. możliwość stosowania języków dynamicznych (scripting) do: prototypownia lub (nawet) programowania (dla ludzi obytych z np. JS)
  2. lepsze wsparcie dla baz danych (implementacja JDBC 4.0 z lepszym wsparciem dla typów XML w kolumnach i dla BLOB-ów)
  3. dostęp do kompilatora w fazie uruchomienia (run-time) - oznacza to możliwość kompilacji w locie dowolnego tekstu do kodu wykonywalnego (podobnie jak eval w JavaScript lub execscript w VFP)

wtorek, lipca 24, 2007

Dokumentacja podpisu
CAPICOM ma nową wersję z maja - przejrzyj jego dokumentację (poprawki, nowe możliwości)
Może należy zwrócić się do ASP:
  • http://classicasp.aspfaq.com/forms/how-do-i-cause/prevent-enter-being-used-to-submit-a-form.html
  • http://classicasp.aspfaq.com/forms/how-do-i-upload-files-from-the-client-to-the-server.html
  • http://classicasp.aspfaq.com/components/should-i-use-createobject-or-server-createobject.html
  • http://www.aspencrypt.com/
  • http://www.codeproject.com/dotnet/CapicomUTF8.asp - można wymieniać sobie podpisane dokumenty między Java i .NET. Tej ścieżki jeszcze nie przetestowałem - wysyłanie podpisanego w .NET dokumentu do serwera bazującego na Apache z J2EE lub PHP (z biblioteką ssl). Ale artykuł pokazuje, że mogą być kłopoty (na szczęście daje ich rozwiązanie). W portalu wss.pl są ciekawe artykuły m.in. o podpisie dokumetów przy pomocy już bibliotek .NET, ale jak się ma z wymienialnością z np. Javą (openssl). Ten sam autor ma fundamentalny wkład w wyjaśnienie współpracy (nareszcie mam dobre słowona INEROPERABILITY - koperacje też dobre, ale kojarzy się z koperatywem) między światem kody zarządzalnego (managed) w .NET a kodem COM (z Win32) -http://www.codeproject.com/dotnet/cominterop.asp
  • Należy jeszcze raz przetestować przekazywanie plików z podpisem lub samych certyfikatów z MS do Unixa i ich tam obróbka przy pomocy np. biblioteki openssl. Do tej pory stwierdziłem, że udało mi się przenieść i rozpakować pd Unixem certyfikat pobrany z magazynu MS. Należy sprawdzić czy można takie coś zrobić z dokumentem.
  • http://www.codeproject.com/csharp/cryptography.asp?df=100&forumid=9241&exp=0&select=686555
  • http://blogs.msdn.com/johanl/pages/272768.aspx
  • http://www.feed-squirrel.com/index.cfm?evt=viewItem&ID=36269
  • http://developers.chrisranjana.com/javascripts/disabling-form-double-submits.html
  • http://articles.techrepublic.com.com/5100-22-1044655.html#Listing%20A
  • http://articles.techrepublic.com.com/5100-22-5034998.html
  • http://www.mail-archive.com/xul-talk@lists.sourceforge.net/msg00524.html
  • http://perfectionorvanity.com/2006/03/08/sposoby-odnajdywania-elementow-w-dom/
  • http://www.javascriptkit.com/javatutors/dynamiccontent5.shtml
  • http://groups.google.pl/group/comp.lang.javascript/browse_thread/thread/226e8a3839892fdb/45e224bdf8a83cf4?lnk=st&q=js+onkeypress+down+arrow&rnum=7&hl=pl#45e224bdf8a83cf4

Przykłady:
  • podsigillum.prg - podpisuje dowolny ciąg znaków. Podpis jest wykonany przy pomocy biblioteki Sigillum, sprawdzenie przy pomocy standardowej biblioteki CAPICOM. Uwaga, należy dbać o aktualną wersję tego komponentu, szczególnie w przypadku MS Windows Vista
    • LPARAMETERS tresc
      SET SAFETY off
      x = CREATEOBJECT("sigCapix.Crypto")
      SET PROCEDURE TO mcapi
      certyfikat = x.SelectCertificateFromSystemStore(0x10000, 'My') && Wybór certyfikatu
      podpisanaTresc = x.SignDetachedWithInfo(tresc, certyfikat) && Podpis zewnętrzny
      STRTOFILE(tresc,"plik.we")
      ?LEN(podpisanaTresc)
      STRTOFILE(podpisanaTresc,"mdane.txt")
      ?cverify("mdane.txt","plik.we",1) && Weryfikacja przy pomocy MS Windows CAPI
      SET SAFETY on
  • sprawdzpodpiszamow - sprawdza podpis pod dokumentem. Dokument i podpis jest przechowywany w polach (typu blob) w tablicy. W zależności od rodzaju podpisu mamy dwa przypadki
    • podpis wewnętrzny - przechowujemy w polu 'tresc' dokument orginalny, w polu 'podpis' ten sam dokument z hashem
    • podpis zwenetrzny - podobnie, ale w polu 'podpis' jest przchowywany tylko skrót (hash)
    • PARAMETERS klucz
      IF PCOUNT()!=1
      MESSAGEBOX("Brak parametru - klucz do dokumentu")
      RETURN
      ENDIF
      *klucz = "2007002883"
      CLEAR
      ?"Zamowienie = ",klucz
      ?weryf("00",klucz,"tresc.htm") && poczatek, tak wyglada dokument z tresci uformowanej przez Wolniwicza
      wyjscie = UpobDok(klucz,"eb_zam_dokz","zamid","podpis","podpis.txt") && trzeci
      IF AT("-2", wyjscie)=1
      ??", brak dokumentu..."
      RETURN
      ENDIF
      dlug = VAL(STREXTRACT(wyjscie,"dlug=","["))
      SET safety off
      STRTOFILE(CHRTRAN(FILETOSTR("podpis.txt"),' ','+'), "podpisOk.txt") && czwarty
      SET SAFETY on
      IF dlug > 10001
      ??", sprawdzam podpis wbudowany..."
      ?cverify_ext("podpisOk.txt","tresc.htm",0) && piaty
      ELSE
      ??", sprawdzam podpis zewnętrzny..."
      ?cverify_ext("podpisOk.txt","tresc.htm",1) && piaty
      ENDIF
  • Sprwadzenie wybranego certyfikatu z repozytorium MS Windows
  • #DEFINE CAPICOM_CHECK_NONE 0
    #DEFINE CAPICOM_CHECK_TRUSTED_ROOT 1
    #DEFINE CAPICOM_CHECK_TIME_VALIDITY 2
    #DEFINE CAPICOM_CHECK_SIGNATURE_VALIDITY 4
    #DEFINE CAPICOM_CHECK_ONLINE_REVOCATION_STATUS 8
    #DEFINE CAPICOM_CHECK_OFFLINE_REVOCATION_STATUS 16
    #DEFINE CAPICOM_CHECK_COMPLETE_CHAIN 32 && Łańcuch jest kompletny
    #DEFINE CAPICOM_CHECK_NAME_CONSTRAINTS 64
    #DEFINE CAPICOM_CHECK_BASIC_CONSTRAINTS 128
    #DEFINE CAPICOM_CHECK_NESTED_VALIDITY_PERIOD 256
    #DEFINE CAPICOM_CHECK_ONLINE_ALL 495 && NIe chodzi
    #DEFINE CAPICOM_CHECK_OFFLINE_ALL 503
    *
    clear
    Signer = CreateObject("CAPICOM.Signer")
    st = CreateObject("CAPICOM.Store")
    st.Open(2,"My")
    certyfikaty = st.Certificates
    IF certyfikaty.Count>0
    certyfikaty= certyfikaty.Select("Podpis cyfrowy dokumentu", "Proszę wybrać certyfikat do podpisania nim dokumentu ")
    ELSE
    MESSAGEBOX("Brak zainstalowanych kluczy i certyfikatów w systemie operacyjnym",16,"Podpis zamówienia")
    RETURN "-2"
    ENDIF
    cert = certyfikaty.item(1)
    *
    daneCertyfikatu = "Nazwisko = "+cert.GetInfo(6)+CHR(13)+"Dostępny = " + TRANSFORM(cert.PrivateKey.IsAccessible)+ CHR(13)
    daneCertyfikatu = daneCertyfikatu + "Czy można go użyć do badania niezaprzeczalności =" + TRANSFORM(cert.KeyUsage.IsNonRepudiationEnabled )+ CHR(13)
    daneCertyfikatu = daneCertyfikatu + "Data ważności =" + TRANSFORM(cert.ValidToDate)+ CHR(13)
    daneCertyfikatu = daneCertyfikatu + "Czy można sprawdzić listę CRL (zawiera URL) = " + TRANSFORM(cert.KeyUsage.IsCRLSignEnabled)+CHR(13)
    cert.IsValid.CheckFlag = CAPICOM_CHECK_TRUSTED_ROOT + CAPICOM_CHECK_TIME_VALIDITY + CAPICOM_CHECK_SIGNATURE_VALIDITY + ;
    CAPICOM_CHECK_COMPLETE_CHAIN + CAPICOM_CHECK_NAME_CONSTRAINTS + ;
    CAPICOM_CHECK_BASIC_CONSTRAINTS + CAPICOM_CHECK_NESTED_VALIDITY_PERIOD
    * Nowość - obiekt CertificateStatus
    *susp
    IF cert.IsValid.Result
    ?"Walidacja OK"

    ELSE
    ?"Wystąpił jakiś błąd. "
    ENDIF
    daneCertyfikatu = daneCertyfikatu + "Czy certyfikat jest ważny = " + ;
    TRANSFORM(cert.isValid.Result) + CHR(13)
    ?"Kod sprawdzenia łańcucha :"
    * Przed CHAIN musimy ustawić CheckFlag
    Chain = CreateObject("CAPICOM.Chain") && Waznosc calego lancucha
    waznosc = Chain.Build(cert)
    *susp
    kod = Chain.Status()
    DO CASE
    CASE kod=65
    komunikat = "Kod 65(64+1) Certyfikat nieważny (wygasł), status odwołania nieznany (tj. nie jest na liście)"
    CASE kod=64
    komunikat = "Kod 64 Status odwołania nieznany (tj. nie jest na liście)"
    CASE kod=16777280
    komunikat = "Kod 16777280(16777216+64) Status odwołania nieznany (tj. nie jest na liście). Nie ma lokalnej listy CRL w repozytorium"
    OTHERWISE
    komunikat = "Kod :"+ TRANSFORM(kod)
    ENDCASE
    ?komunikat
    ?"Informacja dodatkowa =" + Chain.ExtendedErrorInfo()
    ?"Waznosc calego lancucha =" + TRANSFORM(waznosc)
    messagebox(daneCertyfikatu)
    ?"Lista pośrednich certyfikatów:"
    iloscElem = Chain.Certificates.Count()
    ?"Ilość pośrednich certyfikatów :",iloscElem
    FOR i=1 TO iloscElem
    ?Chain.Certificates.Item(i).SubjectNAme
    ENDFOR
  • ss
  • ss

poniedziałek, lipca 23, 2007

Biblioteka AJAX w PHP - http://scriptex.tan-com.com/jPOP/index.php oparta o bibliotekę SimpleJS (http://simplejs.bleebot.com/)
Portal ZDNET w Anglii - http://www.zdnet.co.uk/

Bezpieczeństwo aplikacji w PHP (na podstawie - http://www.peachpit.com/articles/article.asp?p=711187&seqNum=4)
  1. Wprowadzone dane z formularza oczyść ze szkodliwych kodów (stosuj strip_tags) przed stosowaniem w apliakcji.
  2. Używaj odpowiednika mysqli_real_escape_data()czyszczenia danych z formularza przed zapisem do bazy.
  3. Nie używaj ustawień globlnych, ktoś może je zmienić i sam nie bedziesz wiedział kto i kiedy, inicjuj zmienne.
  4. Stosuj niejawne ustawienia w konfiguracji
  5. Przechowuj sesje w bazie
  6. Stosowanie wyrażeń regularnych jest efektywne ale mało wydajne i obciąża procesor
  7. Do sprawdzenia jawnego typów danych otrzymanych z formularza stosuj całą gamę funkcji ctype_.
  8. O ile to możliwe stosuje metodę POST (szczególnie gdy przesyłasz hasła) - nie widać w adresie URL argumentów (wada: n ie można strony zapamietać w zakładkach ulubione).
  9. Stosowanie zachowania stanu między stronami -sesje, ciasteczka, pola ukryte (type='hidden'). Te ostatnie sa bardzo skuteczne i łatwe w obsłudze, ale nie są bezpieczne (ktoś może podglądnąć zawartość strony). Wygoda kosztem bezpieczeństwa.
  10. To samo się tyczy nadmiernego polegania na zapamietaniu stanu poprzez przekazyanie danych między stronami w URL np. ?type=3, bardzo łatwo moża wywyłać stronę z innymi wartościami (już poza logiką aplikacji).
  11. Stosowanie CAPTCHA (completely automated public Turing test to tell computers and humans apart - pakiet PEAR Text_Captcha) jako obrona przed bot'ami.
  12. Stosuj filtry PECL do kontroli typów i wartości danych. Są dwa typy tych filtrów:
    1. Dane z formularza - źródłem może być: INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV, INPUT_SESSION, and INPUT_REQUEST:
      $id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, array('options'=>array('min_range'=>1)));
      if ($id) { ...
    2. Dane programowe - do kontroli danych w zmienych aplikacji:
      $id = filter_var(
    3. Sprawdzenie czy jest zmienna :
      if (filter_has_var(INPUT_POST, 'submitted')) {
    4. Tak możemy sprawdzić, czy formularz był wysłany.
  13. Filtry są wbudowane w PHP 5.2, dla wersji niższych trzeba doinstalować bibliotekę.
  14. Do logowania zastosować pakiet PECL Auth - zapewnia on standardową autentykację (stwierdzenie kto się chce dostać do portalu), lub można wykorzystać platformę rozwojową ZEND Framework.

sobota, lipca 21, 2007

Otwórz okno - proszę
Coraz więcej autorytetów sieciowych opowiada się przeciw korzystania z "open window", no chyba, że jest to okno "modalne" w IE. Jednym z argumentów jest to, że w nowych przeglądarkach nowe okna otwierają się w kolejnej zakładce (Tab) co wprowadza użytkownika w mętlik. Rozwiązanie jest jedno - stosowanie lightbox np.
  1. http://jquery.com/demo/thickbox/
  2. http://particletree.com/features/lightbox-gone-wild/
  3. http://www.huddletogether.com/projects/lightbox/
  4. http://www.dynamicdrive.com/dynamicindex8/dhtmlwindow.htm
  5. http://www.scottandrew.com/examples/domwindow-pre6.html
Sterowanie oknami -
  1. http://www.javascriptkit.com/javatutors/window1.shtml
  2. http://www.infimum.dk/HTML/JSwindows.html
  3. http://www.web-source.net/javascript_open_windows.htm


piątek, lipca 20, 2007

EOL PHP

  1. End of line dla PHP 4. Jest już od ponad 7 lat, a jego następca jest od 3 lat. Koniec wsparcia dla PHP 4 do końca roku (dla rozwoju), do 08.08.2008 dla poprawek bezpieczeństwa i łatek błędów.
  2. Z kolei IBM ogłosił wsparcie PHP (5.1.2) dla swojej platformy Z/OS.
  3. Odszedł jeden z czołowych deweloperów PHP w Zend (odpowiedzialny za bezpieczeństwo kodu i rozwiązań) - Jani Taskinen (na tle sporów osobistych).
  4. Paltforma Zen framework wersja 1.0 (2 lipca) gotowa. Ma wsparcie dla struktur GData oraz kładzie duży nacisk na JSON (jeszcze w wersji 1.0 nie go, ale będzie w wersji w wersji 1.1 (wg. ceo Zend - Gutmans'a). Aplikacja flagowa QEDwiki - http://www.internetnews.com/dev-news/article.php/3647821 -użytkowana przez portal IBM.
  5. Definicja QWDWiki - How does it work?

    QEDWiki is a lightweight mash-up maker written in PHP 5 and hosted on a LAMP, WAMP, or MAMP stack. A mash-up assembler will use QEDWiki to create a personalized, ad hoc Web application or mash-up by assembling a collection of widgets on a page, wiring them together to define the behavior of the mash-up application, and then possibly sharing the mash-up with others. Mash-up enablers provide QEDWiki with a collection of widgets that provide application domain- or information-specific functionality. These widgets are represented within QEDWiki as PHP scripts.

    When a user renders a page within a QEDWiki workspace, the QEDWiki framework processes the widgets on the server side and then generates a DHTML page that is sent to the browser for client-side processing. The framework includes a rich AJAX-enabled MVC (Model-View-Controller) architecture so that each wiki page is a rich, interactive application for end users.

  6. Głowny portal PHP - www.php.otg

czwartek, lipca 19, 2007

Temat rzeka - walidacja danych
  1. Mathew Krusse - http://www.mattkruse.com/javascript/validations/ - biblioteka ciekawych funkcji walidacji danych - tak wygląda na to, że jego funkcje potrafią wykryć pewne wartosci w polach, co dalej z tym zrobić to już leży w gestii autora. Najwieksza bolączka, źle działa onblur w FF.
  2. Zalecane praktyki - http://www.javascripttoolbox.com/bestpractices/
  3. Inna biblioteka - http://www.javascript-coder.com/html-form/javascript-form-validation.phtml - nowe podejście do kontroli:
    1. po formularzu wprowadź kod JS (zawarty w <script>...</script>
    2. uruchom walidatora - var frmvalidator = new Validator("myform");
    3. dodaj pola do walidacj - frmvalidator.addValidation("FirstName","alpha");
    4. prawda, że eleganckie!
  4. Nowa biblioteka AJAX-a - http://www.ajaxtoolbox.com/request/examples.php
  5. Inspiracje:
    1. http://www.xul.fr/en-xml-ajax.html
    2. http://blogs.techrepublic.com.com/tech-news/?p=835&tag=nl.e019
    3. http://www.codeproject.com/vb/interop/csCom.asp
    4. http://jsc.sourceforge.net/
    5. http://foxcentral.net/microsoft/WhatsNewInVFP9_Chapter10.htm
    6. http://www.scbr.com/docs/products/dhtmlxGrid/
    7. Yahoo YUI


wtorek, lipca 17, 2007

Poniedziałek
  1. Sztuka prezentacji - http://www.cio.com.au/index.php/id;1638148607;pp;
Ciekawe linki:
  1. Generator gif przy ładowniu ajax - http://www.webscriptlab.com/
  2. Ciekawa! Encyklopedia aplikacji Web 2.0 - http://www.go2web20.net/
  3. Platne oprogramowanie AJA`aplikacje - http://www.zapatec.com/website/main/products/suite/download.jsp
  4. http://1warez.ru/news.php
  5. Tworzenie tapet dla komorek - http://www.mobopic.com
  6. Bramka - http://www.text.plusgsm.pl/sms/