czwartek, lipca 07, 2005

Przemyślenia

  • W gruncie rzeczy niezależnośćm uniwersalność i elastyczność rozwiązań informatycznych a szczególnie programistycznych jest realizowana za pomocą separacji i kapsułkowania (coś dla zwolenników OO) ale w gruncie rzeczy sprowadza się to do najzwyklejszego nałożenia na siebie kolejnych warstw oprogramowania. Do tego wcale nie trzeba zaawansowanego mechanizmu oferowanego przez OO, można do tego wykorzystać zwykłe funkcje. Co jest ważne, to jedynie korzystanie (posiłkowanie się) z paradygmatów- wzorców (szablonów) projektowych, na przykład modelu MVC. Pozyteczność idei rozdzielonych warstw implementowana w modelu MVC jest przez nas niedoceniana.
  • Pomysł na wykorzystanie z JCF biblioteki java.lang.netscape.* w celu obsługi poprzez DOM elementów strony HTML w której osadzony jest applet. Rozwiązanie.
  • Super GUI dla JS wykorzystujące XML (menu, toolbar oraz tree) pod adresem.

Skrawki

Serwis "betanews" donosi o tym, że firma SUN zezwala na instalację na swoich serwerach oprogramowanie MS Windows Server. Można będzie kupić serwer Sun-a z MS Windosws. Oczekuje się podpisania umowy licencyjnej z MS. Być może chodzi o przetestowania LH.

Firma Mainsoft oferuje możliwość tworzenia aplikacji webowych w środowisku Linux przy użyciu Visual Studio w postaci wtyczki do MS VS - J2EE Developer Edition (Grasshopper). Jest to efekt współpracy z Mono. Języki programowania C# oraz .NET VB. Ma to umozliwić współpracę z aplikacjami J2EE. Wilcox z Jupiter Research twierdzi, że chodzi o przyciągnięci większej ilości deweloperów do narzędzia MS VS bez względu na platformę systemowo-narzędziową.

Co z tym JAR-em

To nie ma nic wspólnego z muzykiem J.M.Jarre, chodzi o przestarzały format plików JAR. Ostatnio nad tym pracuje grupa JSR 277 (Java Module System), chodzi o uwzględnienie w formacie nowych urządzeń java i poszerzenie możliwości rozpoznania na jakim urządzeniu następuje instalacja.
Java to get Web services, XML improvements
Sun's open source strategy treads well-worn path

Ciągle pokłosie konferencji JavaOne

Relacje m. IBM a SUN są ciągle niejasne, trudne i zagmatwane, z jednej strony podpisano na 10 lat umowę o wymianie technologii i licencji na produkty Java (przez IBM), z drugiej SUN nie chce się wlączyć do Eclipse uważając swój RAD Netbeans za lepszy.

Co jeszcze?
  • IBM nadal będzie wspierał rozwój języka Java biorąc udział w JCP.
  • IBM wystąpił grupy JSR 208 (Java Business Integration) zajmującej się integracją aplikacji poprzez interfejs w Javie. Za dużo pracy IBM włożył w Websphere (ESB).
  • IBM kiedy Java zaczęło wchodzić w usługi sieciowe (tzw. Webservices) zbliżył się bardziej do Microsoft i stworzył zażył z tą firmą zalążki standardu Web services. W lutym 2002 stworzyli organizację pod nazwą WSI (Web Services Interoperability) - w radzie założycielskiej nie było firmy SUN.
  • IBM w 2001 roku udostępnił Eclipse, otwartą platformę do tworzenia aplikacji w Javie.
  • Sun obiecał wsparcie w NetBeans dla projektów w Eclipse (chyba po to, żeby migrować z E do N).
  • IBM zakupiło firmę Gluecode (entry level serwery aplikacyjne) jako pomost stosowania WebSpehere (na poziomie korporacyjnym). Ale jednocześnie firma Gluecode była głównym dostawcą kody do opensource-ego projektu Geronimo - serwera aplikacyjnego J2EE (open-source J2EE application server) należącego do Apache Software Foundation's.
  • Analitycy widzą to jako próba pośredniego wpłynięcia na rozwój języka Java i jego wykorzystania poprzez sterowanie ASF zamiast JCP.
Motto:
Nie ma jednego młotka na wszystkie gwoździe - "there's no one hammer for all nails. "

Nowa twarz dla Javy klienckiej

Strona aplikacji klienckich

  • Historia GUI Javy zaczyna się w 1995 w postaci komponentów AWT mającego być przenaszalnym między platformami. Jego wady - niestabilność, mała portowalność i nieciekawa grafika. Rok 1997 Sun udostępnił JFC (Java Foundation Classes) w tym i nowe GUI - SWING (100% Java, wolno działała). Miejsce: Kanada, firma: Object Technology International (OTI) wymysliło nowe GIU - SWT (Standard Widget Toolkit), które emulowało komponenty dialogowe natywne dla każdej platformy. Wkrótce IBM kupiło OTI i włączyło SWT do Eclipse. Zalety - szybkość, wierność wyglądu do danej platformy. Braki - podzbiór funkcjonalny tego co było w Swing.

Aplikacje webowe

  • Inaczej wygląda sprawa w aplikacjach enterprise - one najczęściej wykorzystują warstwę prezentacyjną oferowaną przez internetowe aplikacje. Najczęściej wykorzystuje się interfejs oparty o JSP (JavaServer pages). Są to wzorce na stronach HTML łączące statyczne kawałki elementów HTML z kodem w Javiesłużącym do generowania dynamicznej zawartości. Sposób ten aczkolwiek skuteczny, powodował zamieszanie w kodzie i był nieprzejrzysty. I tu społeczność open source przyszła z pomocą poprzez udostępnienie w 2001 projektu Struts - jasnego wyodrębnienia granicy między warstwą logiki i prezentacji. Struts bazuje na paradygmacie ModelViewController (rozwiązanie separujące trzy warstwy: prezentacyją, logiczną i bazową od siebie)

Ostatnio

  • IBM i Sun wspólnie promuje JSF (JavaServer Faces), który nie tylko zawiera paletę bogatych funkcjonalnie komponentów dobrze dostosowanych do wygenerowania przez współczene narzędzia RAD. Model tworzenia aplikacji jest bardziej elastyczny niż Struts i łatwiej tworzyć makiety interfejsu GUI. Dodatkowo, na osłodę przegranej Structs, główny projektant Struts znalazł zatrudnienie w SUN w zespole tworzącym JSF.


środa, lipca 06, 2005

Co z tym Oracle?

Wybierz w PHP swoje API do bazy:

PHP offers several application-programming interfaces (APIs) for connecting to Oracle—namely, the Oracle, OCI8, and in PHP 5.1, the PDO, extensions. As you will see shortly, PHP offers great functionality but awfully inconsistent naming conventions. Here is some guidance about which extension to deploy:

  • Strangely enough, the "Oracle" extension is designed for Oracle7 and should be avoided at all costs. It is obsolete and lacks much functionality such as Large Object (LOB) support.
  • PHP Data Objects (PDO) is the new portable database API in the PHP 5.1 release. However, it is still immature.
  • On Windows, you can choose to query Oracle via the Open Database Connectivity (ODBC) extension. ODBC has some merits, as it provides built-in connection pooling. But the limited ODBC API means that handling of LOBs and IN OUT parameters in stored procedures can be problematic.
  • The OCI8 extension provides the greatest functionality, as it maps very closely to the Oracle Call Interface (OCI). The "8" in OCI8 is misleading; the API can be used with Oracle8/8i, Oracle9i, and Oracle 10g. For best performance, I recommend this API.
Wybierz swoją bibliotekę klas

  • Before you start coding your application, you will find it useful to create a set of PHP functions to encapsulate the low-level functionality of the OCI8 extension. You can choose to either roll your own or use one of the popular open source libraries. The two most popular are PEAR DB and ADOdb. (I am the lead developer of the latter.)

    As an example, consider the following code to update a table consisting of three fields: a, b, and c.

    $conn = ocilogon('scott','tiger');

    $stmt = OCIParse("insert into abc (a,b,c) values (?,?,?)");
    OCIBindByName($stmt, ":a", $a, 32);
    OCIBindByName($stmt, ":b", $b, 32);
    OCIBindByName($stmt, ":c", $c, 32);
    for ($i=0; $i $a = $i;
    $b = "b".rand();
    $c = "c".rand();
    ociexecute($stmt,OCI_DEFAULT);
    }
    ocicommit($conn);
    Contrast this code with the simpler PEAR DB version:
    include('DB.php');
    $DB = &DB::Connect('oci8://scott:tiger@/');

    $DB->autoCommit(false);
    $stmt = $DB->prepare("insert into abc (a,b,c) values (?,?,?)");
    for ($i=0; $i $DB->execute($stmt,array($i,"b".rand(),"c".rand()));
    }
    $DB->commit();
    Or the really cool ADOdb version:
    include('/path/to/adodb/adodb.inc.php');
    $DB = NewADOConnection('oci8://scott:tiger@/');

    $DB->BeginTrans();
    $stmt = $DB->Prepare("insert into abc (a,b,c) values (:0,:1,:2)");
    for ($i=0; $i $DB->_Execute($stmt,array($i,"b".rand(),"c".rand()));
    }
    $DB->CommitTrans();
    You can see that the ADOdb libraries hide nitty-gritty details such as OCIBindByName from you. The libraries also have debugging modes that allow you to log and output the generated SQL for easy problem diagnosis
Pamiętaj o optymalizacji:
  • "Although this is not an Oracle-specific optimization, you should also install a PHP accelerator cache such as Zend Accelerator, eAccelerator, or APC to speed up the compilation and loading of PHP code libraries. "
Korzystaj z doświadczeń innych:

  • One of the big strengths of PHP over many other tools aimed at solving the Web problem is that other tools tend to associate such very specific targeted problem solving with the need to control how users approach the problem structurally. PHP doesn't impose any such structure, choosing instead to focus on making each individual functionality aspect of the problem as easy as possible to use. For example, PHP provides very targeted functions for communicating with a back-end database. These are specific to each database and do not sacrifice any performance to gain uniformity or consistency with other back-end databases. There is also no set way to structure a PHP application in terms of file layout and what goes where.

  • The fact that PHP doesn't impose structure doesn't mean that you shouldn't build your PHP applications in an organized and structured way. Here is one approach I like to show people who ask me how I would go about structuring a large PHP application.

   +--------------------------------+
| HTML TEMPLATES |
| $DOC_ROOT/*.php |
+--------------------------------+
| TEMPLATE HELPERS |
| $DOC_ROOT/*.inc |
+--------------------------------+
| BUSINESS LOGIC |
| /usr/local/php/*.inc |
+--------------------------------+
| C/C++ CORE CODE |
| /usr/local/lib/php/*.so |
+--------------------------------+
  • This four-layer approach addresses a couple of issues. First, it separates the content along the lines of responsibility in a typical project. The Web front-end developers work from the top, and the back-end engineers work from the bottom. They overlap a bit in the template helpers layer. It also separates anything that contains HTML, by putting those files into the document_root and anything that doesn't contain HTML outside the document_root.
  • The top template layer typically contains very little PHP—just simple function calls and the odd include. Perhaps a loop. These files are usually edited with an HTML authoring tool. The second layer, the template helpers, is where the interface between the business logic and the layout is defined. This layer might have convenience functions such as start_table(), show_user_record(), and any other reusable component that makes template authors' lives easier.

  • The business-logic layer does not contain any HTML at all. This is where such things as SQL queries and any other PHP user-space business logic is implemented. You might expect to see a function such as get_user_record() implemented in this layer. This function would take an ID, perform the appropriate SQL query, and then return an associative array with the result. A function in the layer above then takes this array and wraps some HTML around it to make it look nice.

  • The final C/C++ layer is where you put any custom back-end code required for a project. Many people will not have anything for this layer, but if you have a proprietary C or C++ library, you can write a PHP extension to interface to that here. Sometimes this layer is also used when a business-logic function written in user-space PHP turns out to be too slow.
Tricky
  • 1. When you are looking for information on a specific PHP function, go to http://php.net/ . For example: http://php.net/join. That takes you directly to the right place in the online manual on a server geographically near you.
  • 2. Try this: pear install apc . The pear command is a useful installer that can even be used to install PHP extensions written in C. In this case, it would install the APC opcode cache extension.

    3. Use an opcode cache to improve performance. See #2.

    4. There is nothing wrong with mixing OOP and procedural code in PHP. Use objects when they make sense, and go procedural for the rest.

    5. Extending PHP with your own custom C or C++ extensions is easier than you might think. See README.EXT_SKEL in the PHP source distribution.

    6. The echo << syntax is useful for outputting blocks of text with full $variable substitution, without needing to escape anything. EOB;

    7. PATH_INFO is good! Use it to clean up ugly URLs.

    8. Use a profiler, pear install apd.

    9. Database abstraction is mostly a myth. There is nothing wrong with direct database calls' making use of all the tricks and cheats your chosen database has to offer, to tweak as much performance as possible out of it.

wtorek, lipca 05, 2005

Ach, ci podstępni kapitalisci

Echa konferencji JavaOne - Oracle ogłosił, że będzie udostepniał od 28 czerwca swoje świetne środowisko JDeveloper 10 za darmo. Pozycja tego produktu - środowisko wytwórcze do SOA. Zawiera: IDE, UML, BPEL (workflow) oraz WS. Uwolnienie ceny JD nie oznacza odwrócenie się firmy od Eclipse (Oracle zaproponowal kierowanie i prowadzenie projektu narzedzi bazujacych na JSF (specyfikacji budowy interfejsu uzytkownika, bral udzial rowniez w pracach nad EJB), cjodzi raczej o zaregowanie na ruch swego arch rywala - firmy SAP wystepujacej ze swa plaforma middleware NETWEAVER.
Udostepniania za darmo baza Cloudscape oparta o jave w wersji 10.x wspiera JEDYNIE standard SQL implementowany w DB2 przez co przygotowuje grunt pod instalacje wlasnie tej bazy.

poniedziałek, lipca 04, 2005

Sprawy deweloperskie

Ukazała się uniwersalna kontrolka typu dbgrid (działa z ASP, J2EE oraz od niedawna z PHP), dostępny jest również trial: http://developer.ebusiness-apps.com
Podobna kontrola ale działająca po stronie klienta to quicktable napisana w javie: http://quicktable.org/download/downloadbean.htm
W poszukiwaniu sterowników do JDBC należy się udać najlepiej pod adres: http://industry.java.sun.com/products/jdbc/drivers
Okno modalne, uniwersalne (chodzi z każdą przeglądarką): http://www.dynamicdrive.com/dynamicindex8/dhtmlwindow.htm