nåda. "ting" kan også JSON!

Her i eftermiddags kiggede jeg lidt videre på ting projektet. Det viser sig at andre end mig har haft problemer med at bruge webservicen : http://krakoa.dk/wordpress/2009/05/31/refindting/ . Her bemærkede jeg en kommentar der nævnte ting også kunne json , så jeg kastede mig ud i flg php kode :


class Ting_Client {
var $opensearch = "http://didicas.dbc.dk/opensearch/";

public function search($query){
$hc=new HTTPClient();
$url = $this->opensearch."?action=searchRequest&query=$query&facets.number=10&outputType=json";
$host = $hc->extractHost($url);
$hc->connect($host);
return( $hc->Get($url) );
}
}

Her antager jeg at din php klient også kan hente HTML sider ligesom min kan . På den facon kunne man tænke sig noget i denne her stil:


$t=new Ting_Client();
$searchResponse = json_decode($t->search($query));
if($searchResponse->searchResult->hitCount>0) {
print "

    \r\n";
    foreach( $searchResponse->searchResult->records->tingRecord
    as $rec){
    $isbn=$rec->dc->identifier[0];
    $isbn=preg_replace("/ISBN\:/","",$isbn);
    print "
  • ".$rec->dc->title[0]."
  • ";
    }
    }

    hvor beskrivelsen på de enkelte poster kan benyttes til at lave et mashup. Jeg har her prøvet med slashdemocracy, men det virker vist ikke helt for andet end ISBN.

    Da jeg kiggede på outputtet fra ting , så undrede jeg mig lidt over hvorfor at man ikke havde valgt at bruge Z39.50 , men det er så også ok. Når man har kigget på outputtet fra ting i et stykke tid, så giver det nogenlunde mening.

ding på github – mine første 20 minutter

Jeg fald lige over http://github.com/kdb/ding/tree/master på github, hvor Københavns biblioteker er igang med at kode en drupal baseret frontend til ting projektet. Nu er jeg jo ikke lige en haj til drupal og php , så jeg startede med at nøjes med at kigge på en klient til php5. Den var også enormt kompliceret , så jeg skøjtede videre til http://didicas.dbc.dk/opensearch/opensearch.wsdl og prøvede at lave en php5 webservice klient vha nusoap.

Den virkede ikke lige, så prøvede jeg istedet at skrive “wsdl http://didicas.dbc.dk/opensearch/opensearch.wsdl” på kommandolinjen (her var det heldigt at jeg havde installeret Windows SDK’et ) . Den kommando lavede filen tingService.cs til mig .

Jeg så straks at designeren af skemaet kan lide lower camelcase - det undrede mig dog at typerne resulterer i små begyndelsesbogstaver for mine klasser.

Ved at kigge lidt i tingService.cs så jeg hvilke parametre man skulle bruge . Jeg ved ikke lige hvad formatType og sortType skal bruges til ,så jeg lavede bare en default constructor på den. Det førte til flg kode:


using System;

public class test {
public static void Main(){

tingService t=new tingService();
searchResult sr = t.search("test", "", null, new formatType(), true, 1, true, 5, true, new sortType(), true);
Console.Write(sr.hitCount);
//Console.Write(sr.records[0].relations[0]);
}
}

jeg kompilerede koden med “csc test.cs tingService.cs” og fik umiddelbart en køretidsfejl. .NET frameworket rapporterede om en Ikke-afviklet undtagelse ifm en HTTP fejl 301 hvor det blev meddelt at endepunktet var flyttet til http://didicas.dbc.dk/opensearch/

Efter at have tilføjet et “/” til endepunktet for servicen i tingService.cs , så kunne jeg se at der er “1320″ svar på søgningen “test” .

Jeg kan se at resultaterne bliver afleveret i en struktur kaldet “tingRecord” i det returnerede searchResult, men jeg kan ikke umiddelbart overskue hvordan man hiver resultaterne ud derfra. Jeg vil prøve at følge lidt med i projektet og kigge lidt nærmere på wsdl filen ved lejlighed :)

Udkast til 3G WITS

Jeg deltager iøjeblikket i W.I.T.S arbejdsgruppen ( nærmere beskrevet her http://michael.hinnerup.net/blog/2009/06/22/wits/ ) . Vi arbejder på at specificere den ultimative arbejdsplads i solen. Efter specifikationsarbejdet begyndte , så har jeg opdaget at det er fordelagtigt med bistand til at holde hustandens børn beskæftet mens arbejdet i solen er igang. Det kan illustreres med flg. eksempel:

WITS 3G

Bemærk den diskrete placering af en Mørk guld fra Svaneke brughus, der benyttes til det forestående arbejde på 3G WITS

opdatering 2009-06-26:

Michael har påpeget at det er 3G WITS. ikke WITS 3G. Det har jeg lige ændret før vi påbegynder prototype arbejdet!

ext.data.writer og CRUD

Jeg har kigget lidt nærmere på ext.data.writer og har delt nogle noter her :

http://pedant.dk/archive/CRUD_in_extjs_3_0.pdf

Basalt set kan man nu på en nem måde foretage sig de fleste operationer man kunne forvente sig i en webapplikation der snakker med en database. Det er der jo sådan set ikke noget banebrydende i – nu kan man det også fra extjs . Jeg eksperimenterer i øjeblikket med hvordan man bruger denne nye funktionalitet nemmest – det gør jeg iøjeblikket i :

http://github.com/jacobandresen/yase/tree/master

Missing in action !

Jeg har igennem årene set forskellige måder hvordan man kan få data ind og ud af en database i forskellige sprog. problemet beskrives som ORB – Object Relational Mapping – hvordan man kan få data i relationelle databaser til at fungere nemmest sammen med et objektorienteret sprog.

her i midten af 2009 er der følgende state of the art løsninger:

Den løsning der er blevet valgt i de projekter jeg har været i nærheden af har typisk været afhængig af hvilke erfaringer medlemmerne nu har haft.

Her forleden sad jeg og så Missing in action og kom til at tænke på at starten af relationelle databaser var omkring Vietnam krigen ( IBM lavede System R i 70′erne ). Når vi tænker på at objekterede sprog også har eksisteret siden 70′erne , så er det lidt underligt at det ikke er helt oplagt hvordan man løser ORM problemet endnu.

Ted Neward har beskrevet ORM problemet som The Vietnam of Computer science . Vietnamkrigen er ofte blevet beskrevet som en krig som USA aldrig kunne have vundet.

Jeg har kendskab til flere projekter der stadigvæk kæmper med at løse ORM problemet – de må betragtes som værende “Missing in Action”. Kan vi ikke sende Chuck Norris ind for at redde dem ? :P