oskarj.wordpress.com blog

lipiec 21, 2007

Access i makra

Zaszufladkowany do: Access, Bazy danych, Kod, VBA — oskarj @ 7:43 pm

Kumpel, pracujący i zdobywający doświadczenie w USA, zwrócił się do mnie z prośbą o pomoc w sprawie tabelki w Accessie. Problem polegał na tym, że istniała kolumna, która zawierała dane w postaci tekstowej – nazwy kategorii oddzielone przecinkami. Należało rozdzielić te nazwy na oddzielne rekordy, zachowując ten sam model encji.

 

Access - before

 

Czyli jeżeli jedna pozycja zawierała w kolumnie ‘Category’ : CN, CoI, RU

To powinny być w miejsce tego rekordu 3 rekordy, a w kategorii wpisane : CN , poniżej CoI, a trzecie RU

 

Access - after

Problem mógłby rozwiązać jakiś prosty skrypcik. Znalazłem na forach dyskusje na temat obiektów klasy Recordset w VBA, więc napisałem procedurę:

 

Option Compare Database

Sub reproduce()

Dim db As DAO.Database, rs As DAO.Recordset, dest As DAO.Recordset, table As String

Set db = CurrentDb

table = InputBox(“Please insert table name, e.g. like: ” & vbNewLine & “[Table no 2]“)

Set rs = db.OpenRecordset(“SELECT * FROM ” & table)

Set dest = db.OpenRecordset(“SELECT * FROM ” & table)

While Not rs.EOF

Dim txt As String

Dim x As Variant

Dim i As Long

txt = rs.Fields(6)

x = Split(txt, “,”)

For i = 0 To UBound(x)

dest.AddNew

For j = 0 To rs.Fields.Count – 1

dest.Fields(j) = rs.Fields(j)

Next j

dest.Fields(6) = Trim(x(i))

dest.Update

Next i

rs.Delete

rs.MoveNext

Wend

rs.Close

Set rs = Nothing

End Sub

 

Druga sprawa – nazwa choroby bez myślników, a z przecinkami.

Jeżeli w rekordzie jest wpisane w kolumnie ‘choroba’:

Arthritis-Rheumatoid Arthritis

To powinno to wyglądać tak:

Arthritis, Rheumatoid Arthritis

 

Problem rozwiązuje następujący kodzik:

 

Option Compare Database

Sub reproduceDisease()

Dim db As DAO.Database, rs As DAO.Recordset, table As String, line As String

Set db = CurrentDb

table = InputBox(“Please insert table name, e.g. like: ” & vbNewLine &

“[Table No 2]“)

Set rs = db.OpenRecordset(“SELECT * FROM ” & table)

While Not rs.EOF

Dim txt As String

Dim x As Variant

Dim i As Long

txt = rs.Fields(7)

x = Split(txt, “-”)

line = “”

For i = 0 To UBound(x) – 1

line = line & x(i) & “, “

Next i

rs.Edit

rs(“Disease/disorder”).Value = line & x(UBound(x))

rs.Update

rs.MoveNext

Wend

rs.Close

Set rs = Nothing

End Sub

 

Miłe zaskoczenie – Visual Basic for Access zawiera funkcję Split() pozwalajaca na rozdzielenie Stringów, tak jak java za pomocą klasy StringTokenizer. I nie tylko spacje, ale również dowolne znaki.

lipiec 19, 2007

Rico and prototype

Zaszufladkowany do: Internet, Kod — oskarj @ 7:37 pm

Rico (hiszp. bogaty) – biblioteka javascriptowa, która wraz z prototype.js pozwala na proste animacje, drag-and-drop na stronce, wszystko na bazie architektury AJAX

http://openrico.org/

Przykładowa strona – komunikacja z serwerem. Kod z biblioteką Rico jest teraz bardziej przejrzysty.

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<title>Testujac OpenRico</title>
<script src=”prototype.js” ></script>
<script src=”rico.js” ></script>
<script type = “text/javascript“>
function callRICO()
{
ajaxEngine.registerRequest(‘myRequest’,'ricotest.php’);
ajaxEngine.registerAjaxElement(‘display’);
ajaxEngine.registerAjaxElement(‘heading’);
}
</script>
</head>
<body onLoad = “callRICO()“>
<div id = “heading”><h3>Demonstracja Rico</h3></div>
<input type = “button” value = “Pobierz dane z serwera” onclick = “ajaxEngine.sendRequest(‘myRequest’);”/>
<div id = “display”><p>Ten tekst powinien zostac zastapiony tekstem z serwera…</p></div>
</body>
</html>

ricotest.php:

<?php
header(“Content-Type: text/xml”);
header(“Cache-Control: no-cache”);
header(“Pragma: no-cache”);
echo “<ajax-response><response type=\”element\”
id=\”display\”><p>”.$_SERVER['SERVER_SIGNATURE'].”
</p></response><response type=\”element\” id=\”heading\”>
<h3>Kilka informacji o serwerze</h3></response></ajax-response>”;
?>

lipiec 18, 2007

Przykład aplikacji AJAX

Zaszufladkowany do: Internet, Kod — oskarj @ 7:47 pm

Stronka odpytująca serwer o aktualny czas:


http://www.users.pjwstk.edu.pl/~s4268/ajax/11.3.html

a to kod pliku telltimeXML.php

<?php
header(‘Content-Type: text/xml’);
sleep(3);
echo “<?xml version=\”1.0\”
?><clock1><timenow>”.date(‘H:i:s’).”</timenow></clock1>”;
?>

lipiec 10, 2007

AJAX

Zaszufladkowany do: Internet — oskarj @ 7:10 pm

Pogoda wyjątkowo niewakacyjna nastraja do pisania!

Dzisiaj o Ajaxie, czyli Asynchroniczny JavaScript i XML. Ogólnie rzecz ujmując, jest to architektura dla stronek i aplikacji internetowych, który pozwala na przesyłanie danych bez przeładowywania strony.

 

Ajax buduje dodatkową warstwę przetwarzania, pomiędzy stroną internetową a serwerem. Warstwa ta często określana jest mianem Modułu Ajax lub Osnowy Ajax. Przechwytuje żądania od użytkownika, a w tle obsługuje komunikację z serwerem – po cichu, dyskretnie i asynchronicznie. Żądania i odpowiedzi serwera nie muszą być zbieżne z określoną akcją użytkownika, ale mogą mieć miejsce w dowolnym, wygodnym dla użytkownika czasie, by poprawić działanie aplikacji. Przeglądarka internetowa nie zamarza się teraz i nie oczekuje ukończenia przez serwer ostatniego żądania. Zamiast tego, pozwala użytkownikowi na przewijanie ekranu strony, klikanie czy pisanie na bieżącej stronie.

Phil Ballard

 

Przykładem zastosowanie jest genialna aplikacja – Google Suggest

Wyświetla ona w dymku podpowiedzi szukanej frazy, i to dynamiczne.

To jest mój FireFox 2, gdzie wyszukiwarka Google ma tą funkcję włączoną domyślnie.

 

Google Suggest

Kluczowym w Ajaxie jest zastosowanie JavaScriptu, którego warto znać chociaż w podstawowym zakresie. Komunikację z serwerem można osiągnąć dzięki obiektowi XMLHTTPRequest. Ten obiekt JavaScript potrafi utworzyć połączenie z serwerem, a następnie wysłać do niego żądania http bez potrzeby powiązania ich z wczytywaniem strony.

lipiec 7, 2007

SONY WALKMAN W950i

Zaszufladkowany do: Bez kategorii — oskarj @ 2:32 pm

Od pewnego czasu jestem szczęśliwym posiadaczem tego telefonu. 4 GB na muzykę (akurat na kilka, kilkanaście albumów), duży panel dotykowy, zestaw słuchawkowy i słuchawki jak w empetrójce w jednym.

 

w950i

Minusy?

Za szeroki, brak aparatu fotograficznego, delikatna obudowa.

Chyba przyjdzie mi czekać na w960i..

 

w960i

SUN J2EE

Zaszufladkowany do: Java — oskarj @ 1:08 pm

Niedawno miałem okazje, w celu zaliczenia przedmiotu TIN na mojej uczelni, zaprojektować niewielki serwis internetowy umożliwiający wielu użytkownikom udział w różnych, wybranych grach, poprzez sieć.

Był to mój pierwszy kontakt z tą platformą, zatem pierwsze pytania jakie mi się nasunęły po krótkim rekonesansie:

 

1) Platforma SUN’a posiada wbudowany system zarządzania relacyjnymi bazami danych ‘Cloudscape’.

Jak się z niego korzysta? Zapewne poprzez wiersz poleceń.. jakże by inaczej.

2) Aplikacja J2EE jest plikiem w formacie .ear . Jak ją utworzyć ?

3) W jaki sposób odpalamy serwer http ?

 

Abyśmy mogli cokolwiek zaprojektować i wdrożyć (ang. ‘deployment’), obok zainstalowanej dystrybucji J2EE (ja korzystałem z wersji 1.3), musimy posiadać Java SDK , w wersji max 1.4.2.

J2EE 1.3 oraz Java 1.5 …? – to nie zda egzaminu.

Sekret pracy – w katalogu instalacyjnym j2ee/bin posiadamy zbiór narzędzi, dlatego warto mieć na pulpicie skrót cmd do tego katalogu, aby wygodnie odpalać niezbędne aplikacje – j2ee, cloudscape, deploytool itd.

 

Wszystko powoli się wyjaśnia:

1) aby utworzyć bazę danych, odpowiednie tabele, odpalamy cloudscape.bat –start, po czym w nowym oknie cloudscape.bat – isql, i mamy wiersz poleceń do wpisywania instrukcji SQL / PLSQL. RSDB Cloudscape jest autorstwa firmy IBM, ale nie jest już rozwijany.

2) deploytool.bat – po krótszej chwili otworzy się okno programiku napisanego…. w javie. To narzędzie pozwala kolejno na stworzenie aplikacji, dodanie komponentów, archiwów war oraz jar (te pierwsze są tworzone automatycznie, wystarczy ze wskażemy nasze pliki .class czy też .jsp)

 

J2EE

 

3) J2EE posiada serwer http Tomcat. Wystarczy wejść na localhost:8000, aby przywitała nas strona domowa.

 

Nie będę się rozpisywał o technikach programowania, chociażby z tego powodu że należy umieć programować chociaż na poziomie średniozaawansowanym, ale przedstawię kilka kruczków.

Dla każdej aplikacji ustawiamy tzw. ContextRoot, czyli katalog, w którym umieszczamy naszą witrynę. Jeżeli kontekst rootem będzie ‘przelicznik’, to nasza witryna będzie dostępna pod adresem localhost:8000/przelicznik

 

Wszelkiej maści gry sieciowe są w ogromnej większości apletami Javy. Jeżeli chcemy przekazać jakieś danego do takiego apletu, warto to zrobić z poziomu strony jsp, za pomocą kodu html i argumentów PARAM:

<APPLET CODE=battleships.Battleships.class WIDTH=700 HEIGHT=400>

<PARAM NAME=”chmurka_user_id” VALUE=”<%=login%>”>

<PARAM NAME=”chmurka_room” VALUE=”<%=room%>”>

</APPLET>

Aplety umieszczamy w jakimś pakiecie, następnie upewniamy się, czy deploytool nie umieścił plików w katalogu /classes, jeżeli tak jest to je przenosimy do katalogu głównego w naszym WAR.

 

Najciekawsze – w jaki sposób użytkownicy mają się ze sobą komunikować?

Aby użytkownicy systemu mogli widzieć siebie nawzajem i ze sobą grać, należy zaimplementować rozwiązanie, które pozwoli pobierać dane o użytkownikach i umożliwić komunikację. Bezpośrednie podłączenie apletu do EJB nie jest dobrym rozwiązaniem, ściany ognia blokują wysokie porty, więc wywołanie RMI-IIOP nie zawsze jest możliwe – dlatego warto wprowadzić serwlety.

 

 

EJB TIER

Blog na WordPress.com.