Etikettarkiv: HTML

Nästan lika nördig som förr (The Geek Comeback?)

När jag satt och försökte hitta vidare information om hur jag skall komma vidare med min gamla Python-kod, i första steget uppgradera den så att den är 3.0 kompatibel och i andra steget få den att köra på min telefon som en app, så hamande jag ganska omgående hos en tillverkare som inte ens fanns listade på GSMARENA.com, nämligen Infinix. Infinix har redan på sin första sida en länk för att ladda ner Open Source-kod. Efter en snabb titt på deras hemsida så inser jag att de verkligen försöker knyta användarna närmare och bli en del av utvecklingsprocessen av produkterna. Mycket lovvärt och jag tänker hålla ett öga på Infinix och särskilt deras användarforum och deras öppna källkod och om det är något jag kan komma vidare med. Nu är ju min enkla Python-kod närmas att anse som inbecillt simplistisk men den har ju ett extremt specifikt syfte och den är tänkt att vara mobil från början så varför inte? Det skall bli intressant var jag landar. Om det fungerar med Python hela vägen, eller om jag kommer behöva använda JAVA eller kanske någon variant av XML eller rent av en HTML-lösning?
Nu har jag dessutom hittat den utomordentligt trevliga programmeringsmiljön Ninja-IDE som känns skön att jobba med Python-koden med i.

Infinix XClub

VoxML (Voice Markup Language)

Speech ApplicationsDen här sajten startade ju som en tekniksajt en gång i tiden och jag tänkte att jag skulle få upp lite av det material som fanns här då. Det är många år sedan och de flesta tekniker är idag hopplöst obsoleta men det är lite kul att ha dem på plats här i alla fall så jag börjar med att lägga upp en liten genomgång av VoxML (Voice Markup Language) av vilken den senaste versionen mig veterligen ar 1.1 som kom 1999.VoxML var ett initiativ från Motorola som ett tag konkurrerade med VoiceXML om att kunna leverera röststyrda telefonapplikationer över webben. VoiceXML vann dock kampen då allt fler företag anslöt till VoiceXML och gjorde sina röster hörda för att göra detta till en standard.

VoxML, lika väl som JSML, är dock värt att känna till när man håller på att utveckla webbapplikationer för röststyrning.

Till skillnad från HTML så som har en tvådimensionell layout så har VoxML bara en dimension i sin layout, nämligen tid.
I VoxML sker allting perspektivet tid.
I HTML visas i sidor, i VoxML är motsvarigheten dialoger som delas upp i mindre enheter kallade steps.

VoxML baseras på eXtensile Markup Language (XML) och följer XMLs syntax-regler. För mer information om VoxMLs struktur i jämförelse med XML så titta nätmare på VoxMLs DTD.

Är du sugen på att titta närmare på hur VoxML ser ut och fungerar så bärjar vår guide här.

De två viktigaste elementen i VoxML är DIALOG och STEP. De är elementen som
skapar grundstrukturen i en VoxMLapplikation.

Elementet DIALOG kan närmast jämföras med BODY-elementet i HTML, alla andra element
existerar inom DIALOG-elementet.

STEP-elementet anger de olika stegen i applikationen.
STEP är de delmoment inom DIALOG-elementet som du navigerar
igenom med de kommandon som du anger.

Vi tittar på ett exempel, exempel01.vml:

<?xml version=”1.0″?>
<DIALOG>
<STEP NAME=”init”>
  <PROMPT>Please select a soft drink.</Prompt>
  <HELP> Your choises are coke, pepsi, 7 up or root beer</HELP>
  <INPUT TYPE=”OPTIONLIST” NAME=”drink” NEXT=”#confirm”>
    <OPTION VALUE=”coke”> coke </OPTION>
    <OPTION VALUE=”pepsi”> pepsi </OPTION>
    <OPTION VALUE=”7 up”> 7 up </OPTION>
    <OPTION VALUE=”root beer”> root beer </OPTION>
  </INPUT>
</STEP>

<STEP NAME=”confirm”>
  <PROMPT> You orded <VALUE NAME=”drink”/>.</PROMPT>
</STEP>
</DIALOG>

När en VoxML-applikation anropas initieras den det STEP-element som heter ”init”, användaren
kommer då att höra innehållet i PROMPT-elementet.
Om användaren anger att han vill ha hjälp innan han gör ett val så kommer innehållet i HELP-elementet att läsas upp.
När användaren gör ett val kommer browsern att exekvera STEP-elementet
som heter ”confirm” som helt enkelt läser upp det gjorda valet och sedan avslutar
applikationen.

Det är ett par intressanta detaljer som är värda att notera när vi tittar på exemplet ovan.
Den första raden i koden består av XML-deklarationen, som måste vara första
raden i alla VoxML-dokument.

Dessutom så kan det vara på sin plats att påpeka att STEP-elementen utförs i den ordning de anropas
och alltså inte nödvändigtvis i den ordning de förekommer i koden.

De element som förekommer i exemplet ovan, DIALOG, STEP, PROMPT, HELP och INPUT, är de som förekommer
oftast i VoxML och man bör känna sig ordentligt bekant med dessa element innan man går vidare med
mindre ofta förekommande element.

ACK

Ibland kan det vara nödvändigt att dubbel-kontrollera information som användaren har givit.
Detta skulle man som utvecklare kunna lösa genom att skapa ytterligare en STEP-sekvens som läser
upp det användaren angivit och frågar om detta är korrekt.
ACK-elementet (acknowledge) erbjuder en enklare lösning på detta problem.

Ett ACK-element måste befinna sig inom ett STEP- eller CLASS-element.

SYNTAX

<ACK [CONFIRM=”value” [REPROMPT=”value”]]>
   text
</ACK>

ATTRIBUT

Attributnamn

Tillåtna värden

CONFIRM

YORN (default)

REPROMPT

Y
N (default)

EXEMPEL

<STEP NAME=”card_type”>
    <PROMPT>
    What type of credit card do you have?
    </PROMPT>
     INPUT NAME=”type” TYPE=”OPTIONLIST” NEXT=”#exp_date”>
      <OPTION VALUE=”visa”>visa</OPTION>
      <OPTION VALUE=”mc”>mastercard</OPTION>
      <OPTION VALUE=”discover”>discover</OPTION>
    </INPUT>
    <ACK CONFIRM=”YORN” REPROMPT=”Y”>
      I thought you said <VALUE NAME=”type”/>
      <BREAK/> I that correct?
    </ACK>
</STEP>

I det här exemplet används ACK-elementet för att konfirmera användarens val av kreditkort.

När den här koden tolkas av VoxMLs röst-browser kommer den att läsa texten från PROMPT-elementet med hjälp av text-till-tal teknik,
vänta på användarens respons (visa, mastercard eller discover) och sedan be användaren att konfirmera om
valet av kontokort.

Om användaren svarar ”yes” kommer browsern att fortsätta till STEP-elementet som heter ”exp”.
Om användaren svarar ”no”, kommer PROMPT-elementets text läsas igen och användaren får på nytt en möjlighet
att göra sitt val.

Browsern går tillbaks till STEP-elementet och börjar så att säga om från början.

Confirm-attributet specificerar vilken typ av ”input field” som förväntas av användaren.
YORN (yes or no) är lierad med en inbyggd taligenkänningsgrammatik som tillåter alla typer av positiv och negativ respons istället för ett enkelt yes eller no.

REPROMPT-attributet specificerar vad som skall göras om konfimationen falerar.
Om REPROMPT är satt till ”Y” kommer användaren att dirigeras till PROMPT igen.
Om det är satt till ”N” så görs inte detta.

AUDIO

AUDIO-elementet specificerar en ljudfil som skall spelas upp.

AUDIO-elementet kan användas som ett alternativ var som helst där du kan läsa text för användaren.

Ett AUDIO-element kan placeras inom ett PROMPT, EMP, PROS, HELP, ERROR, CANCEL eller ACK-element, där du kan placera text som skall läsas upp för användaren.

SYNTAX

<AUDIO SRC=”value”/>

ATTRIBUT

Attributnamn

Tillåtna värden

SRC

URL till ljudfil

EXEMPEL

<PROMPT>
      At the tone, the time will be 11:59 p m
      <AUDIO SRC=”http://localhost/sounds/beep.wav”/>
</PROMPT>

Koden ovan är ett enkelt exempel på en ljudfil inkluderad i ett PROMPT-element.

När VoxMLs Voice Browser tolkar koden kommer den att tala texten från rad två med hjälp av text-till-tal teknik och sedan spela upp WAV-filen ”beep.wav” angiven i rad tre.

BREAK

BREAK-elementet kan användas överallt där applikationen läser text eller spelar upp en ljudfil för användaren.

BREAK kan användas inom följande element: PROMPT, EMP, PROS, HELP, ERROR, CANCEL och ACK.

SYNTAX

<BREAK [MSECS=”value” | SIZE=”value”]/>

ATTRIBUT

Attributnamn

Tillåtna värden

MSECS

miliseconds (integer)

SIZE

NONE
SMALL
MEDIUM (default)
LARGE

EXEMPEL 1

<PROMPT>
      Welcome to Earth. <BREAK MSECS=”250″/>
      How may I help you?
</PROMPT>

Det första exemplet med BREAK-elementet med MSECS-attributet inom PROMPT-elementet.
När detta tolkas av browsern talar den texten ”Welcome to Earth”, göra pause i 250 millisekunder
och sedan säga ”may I help you?”.

Ett alternativ till att ange exakt antal millisekunder med MSECS-attributet kan man använda SIZE-attributet för att kontrollera längden
på pausen, som i exempel 2:

EXEMPEL 2

<PROMPT>
      Welcome to Earth. <BREAK SIZE=”MEDIUM”/>
      How may I help you?
</PROMPT>

Den exakta längden på ”SMALL”, ”MEDIUM” och ”LARGE” är definerade av systemet och kan därför ändras i kommande specifikationer av
VoxML
.

Använd MSECS-attributet om du vill ha full kontroll över längden på pausen.

CANCEL

CANCEL-elementet används av utvecklaren för att kunna erbjuda användaren att avbryta den aktuella PROMPT:en.

Om du som utvecklare inte definerar CANCEL-elementets beteende så kommer systemets förinställda beteende att användas.
Det förvalda beteendet för CANCEL-elementet är att stoppa den aktuella PROMPT:en och sedan fortsätta med nästa interaktiva INPUT.

CANCEL-elementet (precis som HELP) kan utföras av användaren genom ett flertal fraser.
”Cancel” och ”I would like to cancel, please” ger samma resultat.

CANCEL-elementet används inom STEP- eller CLASS-elementen.

SYNTAX

<CANCEL NEXT=”value” [NEXTMETHOD=”value”]/>
eller
<CANCEL NEXT=”value” [NEXTMETHOD=”value”]>text</CANCEL>

ATTRIBUT

Attributnamn

Tillåtna värden

NEXT

URL till nästa STEP eller DIALOG

NEXTMETHOD

GET (default)
POST

EXEMPEL

<STEP NAME=”report”>
    <CANCEL NEXT=”#traffic_menu”/>
    <PROMPT>Traffic conditions for Chicago, Illinois, Monday, May 18.
        Heavy congestion on..
    </PROMPT>
    <INPUT TYPE=”OPTIONLIST”>
      <OPTION NEXT=”#report”>repeat</OPTION>
      <OPTION NEXT=”#choose”>new city</OPTION>
    </INPUT>
</STEP>

Linje två i koden ovan visar hur man använder CANCEL-elementet för att specificera vad som skall hända
när användaren säger ”cancel”.
I det här fallet skall applikationen fortsätta med STEP-elementet som heter ”#traffic-menu” istället för att använda systemets förvaldavärde, vilket
hade stoppat PROMPT:en och sedan väntat på användarens nästa kommando.

Användaren kan dessutom stoppa en pågående PROMPT genom att ange ett korrekt OPTION.
I det här exemplet skulle användaren kunna avbryta PROMPT:en och fortsätta med ett annat val genom
att säga ”new city”.

CASE

CASE-elementet används för att styra beteendet på applikationen baserat på värdena på interna VoxML variabler.

CASE-elementet kan användas inom SWITCH-elementet, eller INPUT-elementet, om denna innehåller ett värde (DATE, DIGITS, MONEY, PHONE, TIME och YORN).

SYNTAX

<CASE VALUE=”value” NEXT=”value” [NEXTMETHOD=”value”]/>

ATTRIBUT

Attributnamn

Tillåtna värden

VALUE

literal value

NEXT

URL till nästa STEP eller DIALOG

EXEMPEL

<SWITCH FIELD=”piza”>
    <CASE VALUE=”pepperoni” NEXT=”#p_pizza”/>
    <CASE VALUE=”sausage” NEXT=”#s_pizza”/>
    <CASE VALUE=”veggie” NEXT=”#v_pizza”/>
</SWITCH>

Koden på linje två till fyra i exemplet ovan visar bruket av CASE-elementet inom SWITCH-elementet.

I det här exemplet används CASE-elementet för att dirigera browsern till olika STEP-element baserat på olika värden på variabeln ”pizza”.

Många VoxML-element användar attributen NEXT och NEXTMETHOD.
Dessa specificerar STEP-elementet att gå till nästa genom att använda standardiserade HTTP-konventioner.

Om du vill flytta till ett STEP-element inom det aktuella VoxML-dokumentet använder du ”#step_name” notationen.

Om du vill flytta till ett annat VoxML-dokument sätter du värdet på NEXT-attributet till
den URL som representerar det dokumentet och du kan också ange HTTP-metoden som skall användas för att tillgå dokumentet.

CLASS

CLASS-elementet definerar en uppsättning element som kan återanvändas inom DIALOG.

SYNTAX

<CLASS NAME=”value” [PARENT=”value”][BARGEIN=”value”][COST=”value”]>
VoxML
</CLASS>

ATTRIBUT

Attributnamn

Tillåtna värden

NAME

Namnet på klassen(identifier)

PARENT

Namnet på super-klassen(identifier)

BARGEIN

Y (default) – tillåter användaren att ”barge-in” för att stoppa prompt
N

COST

”kostnaden” för att exekvera varje STEG som tillhör klassen.
(COST-attributet är en plattforms-beroende del av VoxML. En viss browser-implementation kan välja att använda sådana delar)

EXAMPLES

<CLASS NAME=”simple”>
    <HELP> Your choices are <OPTIONS/> </HELP>
    <ERROR> I did not understand what you said.
      Valid resonses are <OPTIONS/> </ERROR>
</CLASS>

<STEP NAME=”beverage” PARENT=”simple”>
    <PROMPT>Please choose a drink.</PROMPT>
    <INPUT NAME=”drink” TYPE=”OPTIONLIST”>
      <OPTION NEXT=”#food”>coke</OPTION>
      <OPTION NEXT=”#food”>pepsi</OPTION>
    </INPUT>
</STEP>

<STEP NAME=”food” PARENT=”simple”>
    <PROMPT>Please choose a meal.</PROMPT>
    <INPUT NAME=”meal” TYPE=”OPTIONLIST”>
      <OPTION NEXT=”#deliver”>pizza</OPTION>
      <OPTION NEXT=”#deliver”>tacos</OPTION>
    </INPUT>
</STEP>

Koden på rad 1-5 illustrerar användningen av CLASS-elementet för att definera ett HELP-element och ett ERROR-element som skall användas
i flera STEP-element inom DIALOG-elementet.

Koden på rad 7-15 visar användningen av PARENT-attributet i STEP-elementetsomrefererar till CLASS-elementet och därför ärver beteendet som defineras där.

När browsern tolkar detta så kommer STEP-elementet bete sig som om HELP och ERROR-elementen var definerade exklusivt i varje STEP-element.

ARV

En klass subelement och attribut ärvs av dess subklasseroch steps, om de inte överskrids längre ner i hierarkin.
Arv är inte logiskt i vissa subelement, här följer reglerna.

COST
”Kostnaden” av ett steg har endast mening för en viss plattform som kör VoxML.
VoxML-browsern kommeratt summera den samanlagda kostnaden av de genomgångna STEP-elementen som användaren går igenom under sessionen.
Sedan skriver den ut en ”nota” TILL ANVÄNDAREN.

”Kostnaden” för ett STEP är detsamma som värdet tillägnat dess COST-attribut.
Om det inte finns ett COST-element så ärvs ”kostnaden” från dess ”parent” CLASS.

Om parent CLASS inte har en associerad COST så fortsätter ”arvsökandet” uppåt i hierarkin.

Om inget STEP eller någon av dess superklasser har ett COST-attribut så sätts ”kostnaden” att avsluta steget till noll.

BARGEIN

Detta attribut styr om användaren kan stoppa TTS-motorn genom att tala eller inte.
Här fungerar det precis som med COST, så om ett STEP inte definerar BARGEIN undersöks dess parent CLASS.

CANCEL

Se COST.

HELP

HELP fungerar lite annorlunda eftersom arvet av information är beroende av ORDINAL-attributet.

Detta betyder att om ett STEP-element har ett HELP med ORDINAL=”7″ så kommer det inte att ärva HELP ORDINAL=”7″från sin klass, men det kommer att ärva HELP med andra ORDINAL-värden.

ERROR

Arvet basers på både ORDINAL-värde och TYPE-värde.

DIALOG

DIALOG-elementet är naturligtvis fundamentalt för VoxML.

Om man skulle ställa upp ett VoxML-dokument som en trädstruktur så skulle DIALOG-elementet vara trädets rot.

DIALOG-elementet definerar den grundläggande enheten inom ett VoxML-dokument.
Oftast så finns det ett DIALOG-element per URL.

Varje DIALOG måste innehålla exakt ett STEP-element som heter ”init”.
Exekveringen av en VoxML-applikation startar med STEP-elementet som heter ”init”.

Ett DIALOG-element kan inte finnas inom någont annat VoxML-element.

SYNTAX

<DIALOG [BARGEIN=”value”]>VoxML</DIALOG>

ATTRIBUT

Attributnamn

Tillåtna värden

BARGEIN

Y (default)
N

EXEMPEL

<DIALOG>
    <STEP NAME=”init”>
      <PROMPT> Welcome to VoxML. </PROMPT>
    </STEP>
</DIALOG>

Koden ovan visr en enkel men dock fullständig VoxML DIALOG.

DIALOG-elementet specificeras på rad ett till fem och innehåller ett enkelt STEP-element som heter ”init”.
STEP-elementet innehåller ett PROMPT-element som kommer att läsas via text-to-speech.

Eftersom inget INPUT-element defineras inom STEP-elementet så kommer applikationen termineras genast efter att PROMPT-elementet har lästs upp.

EMP

EMP-elementet (emphasis) används för att markera ett område av text vilken nivå av emfasskall vara annorlunda än övrig text.

EMP-elementet kan användas överallt där text skall läsas för användaren och kan nästlas.

EMP-elementet kan befinna sig inom PROMPT, PROS, HELP, ERROR, CANCEL och ACK-elementen.

SYNTAX

<EMP [LEVEL=”value”]>text </EMP>

ATTRIBUT

Attributnamn

Tillåtna värden

LEVEL

NONE
REDUCED
MODERATE (default)
STRONG

EXAMPLES

<PROMPT>
    The weather today is going to be
    <EMP LEVEL=”strong”> really</EMP>
    bad. Up to 36 inches of snow will fall…….
</PROMPT>

Koden ovan är i stort sett självförklarande.

Den verkliga effekten av EMP-elementetbestäms av den text-to-speech (TTS) mjukvara som används av browsern.
Eftersom olika TTS-mjukvaror används (exempelvis i telefoner kontra desktop-datorer) i ett nätverks-system så kommer effekten att variera.

För att uppnå en specifik emfas-effekt skall du använda PROS-elementet istället för EMP-elementet.

Error

ERROR-elementet tillåter utvecklaren att definera hur en VoxML-applikation skall respondera på ett fel.

Om utvecklaren inte definerar en åtgärd så kommer default-värdet att användas.
Default-beteendet för ERROR-elementet är att säga frasen:
    ”An error has occurred”,
stanna kvar i aktuellt STEP-element, åter utföra PROMPT-elementet och invänta användarens respons.

ERROR-elementet kan användas inom STEP- eller CLASS-elementet.

Ett givet ERRROR-element används till alla typer av fel om man inte specificerar typen, eller till endast en specifik typ av fel.
Default används ERROR till alla typer av fel,
De feltyper som uppkommer är följande:

NOMATCH

Språkigenkänningen uppfattar ett talat ljud men kan inte med tillräckligt stor säkerhet identifiera ljudet som ett i dess grammatik förekommande fras.

NOSPEECH

Språkigenkänningen har ej uppfattat att någonting har uttalats inom föregiven tid.

TOOLITTLE

Uppstår när systemet samlar in data från ett INPUT-element av typen ”DIGITS” och färre digits än angivits var insamlat.

TOOMUCH

Uppstår när systemet samlar in data från ett INPUT-element av typen ”DIGITS” och fler digits än angivits var insamlat.

NOAUTH

När systemet försöker samla in användarinformation som användaren valt att ej ange.

NSF

????????????????????????

BADNEXT

När systemet misslyckas att hitta och visa en URL som är angiven i ett NEXT-attribut.

SYNTAX

<ERROR [TYPE=”value”] [ORDINAL=”value”] [REPROMPT=”value”] [NEXT=”value”[NEXTMETHOD=”value”]]>
    text
</ERROR>

ATTRIBUT

Attributnamn

Tillåtna värden

TYPE ALL (default)
NOMATCH
NOSPEECH
TOOLITTLE
TOOMUCH
NOAUTH
NSF
BADNEXT
ORDINAL heltal
REPROMPT Y
N (default)
NEXT URL till nästa STEP eller DIALOG
NEXTMETHOD GET (default)
POST

EXAMPLES

<STEP NAME=”errors”>
    <ERROR TYPE=”NOMATCH”> First error message.
      I did not understand what you said.</ERROR>
    <ERROR TYPE=”NOMATCH” ORDINAL=”2″>
      Second error message.
      I did not understand what you said.</ERROR>
    <PROMPT> This step tests error messages.

      Say ‘oops’ twice. Then say ‘done’ to
      choose another test.</PROMPT>
    <INPUT TYPE=”OPTIONLIST”>
      <OPTION NEXT=”#end”>done</OPTION>
    </INPUT>
</STEP>

Koden ovan illustrerar användandet av ERROR-elementet för att definera applikationens beteende inför ett fel.

På linje två defineras felmeddelandet som skall användas första gången ett fel av typen NOMATCH inträffar i STEP-elementet.

ORDINAL-attributet bestämmer vilket meddelande som skall användas om upprepade fel upstår inom samma STEP-element.

VoxML-browsern väljer ett felmeddelande baserat på en enkel algoritm:
Om felet har uppstått tre gånger så kommer browsern att leta efter ett ERROR-element med ett ORDINAL-attribut med värdet ”3”.
Om det inte finns ett sånt ERROR-element så letar browsern efter ett ERROR-element med ett ORDINAL med ”2” och sedan ”1”, för att till slut leta efter ett ERROR-element utan definerat ORDINAL.

Så om vi i exemplat ovan hade definerat ett ERROR-element med ett ORDINAL-attribut med ett värde på ”6” inom STEP-elementet och samma fel uppstått sex gånger i rad, skulle användaren höra det första felmeddelandet en gång, det andra felmeddelandet fyra gånger och slutligen felmeddelandet med ORDINAL ”6”.

HELP

HELP-elementet hjälper utvecklaren att definera applikationens beteende om användaren frågar efter hjälp.
Om applikationen inte definerar HELP-beteende för ett givet STEP-element så kommer systemets default-värde att användas.

HELP-elementet, i likhet med CANCEL-elementet, kan aktiveras med en rad olika fraser.
Användaren kan lika gärna säga ”help” som ”I would like help, please” för att aktivera beteendet.

Systemets default-inställning för HELP-elementet är att stoppa aktuellt PROMPT-element, spela upp frasen ”No help is available”, stanna kvar i aktuell STEP och köra den interaktiva INPUT som finns tillgänglig.

Help-elementet kan placeras inom STEP- och CLASS-elementen.

SYNTAX

<HELP
    [ORDINAL=”value”]
    [REPROMPT=”value”]
    [NEXT=”value” [NEXTMETHOD=”value”] ]>
      text
</HELP>

ATTRIBUT

Attributnamn

Tillåtna värden

ORDINAL

heltal

REPROMPT

Y
N (default)

NEXT

URL till nästa STEP eller DIALOG

NEXTMETHOD

GET (deault)
POST

EXEMPEL

<STEP NAME=”helps”>
    <HELP REPROMPT=”Y”>First help message.
      You should hear the prompt again. </HELP>
    <HELP ORDINAL=”2″> Second help message.
      You should not hear the prompt now. </HELP>
    <PROMPT> This step tests help prompts.
      Say ‘help’ twice. Then say ‘done’ to
      choose another test. </PROMPT>
    <INPUT TYPE=”OPTIONLIST”>
      <OPTION NEXT=”#end”>done</OPTION>
    </INPUT>
</STEP>

Koden ovan illustrerar hur HELP-elementet används för att definera beteendet hos applikationens respons om användaren säger ”help”.

På rad två defineras hjälpmeddelandet som används första gången användaren påkallar hjälp.
På rad fyra defineras hjälpmeddelandet som skall användas andra och alla följande gånger som användaren påkallar hjälp.

Notera att med hjälp av REPROMPT-attributet kommer PROMPT:en repeteras efter det första hjälpmeddelandet men ej efter följande hjälpmeddelanden.

ORDINAL-attributet fungerar på samma sätt som för ERROR-elementet.

INPUT

INPUT-elementet används för att ge användaren möjlighet till interaktivitet.

Utvecklaren av applikationen definerar typ av INPUT likaväl som dess värden.

INPUT-elementet kan endast placeras i STEP-elementet.

ATTRIBUT

Attributnamn

Tillåtna värden

TYPE

DATE
DIGITS
GRAMMAR
HIDDEN
MONEY
NONE
NUMBER
OPTIONLIST
PHONE
PROFILE
RECORD
TIME
YORN

INPUT-elementet Typ:
DATE

DATE används för att få information om ett datum från användaren

SYNTAX

<INPUT TYPE=”DATE”
    NAME=”value”
    [NEXT=”value” [NEXTMETHOD=”value”]]
    [TIMEOUT=”value”] />

ATTRIBUT

Attributnamn

Tillåtna värden

NAME

identifier

NEXT

URL till nästa STEP eller DIALOG

NEXTMETHOD

GET (default)
POST

TIMEOUT

millisekunder (heltal)

EXEMPEL

<STEP NAME=”init”>
    <PROMPT>What is your date of birth?</PROMPT>
      <INPUT TYPE=”DATE” NAME=”dob” NEXT=”#soc”/>
</STEP>

Koden på rad tre använder DATE INPUT för att samla användarens födelsedag, sparar den i VoxML variabeln ”dob” och går sedan till STEP-elementet med namnet ”soc”.

Datumformatet sparas i en VoxML-variabel med standardformat.
Ett fullständigt definerat datum som next Friday, July 10th,1998 sparas som:

07101998|July|10|1998|Friday|next

Ofullständiga datumangivelser sparas som:

July 14th

????????|July|4|||

Tomorrow

????????|||||tomorrow

The 15th

????????||15|||

Monday

????????||||Monday|

OPTION

OPTION-elementet används för att styra applikationens beteende vid en specifikt respons från användaren.

OPTION-elementet kan endast härbergeras inom INPUT-elementet, och då endast när typen OPTIONLIST används.

SYNTAX

<OPTION [NEXT=”value” [NEXTMETHOD=”value”] ] [VALUE=”value”] >
    text
</OPTION>

ATTRIBUT

Attributnamn

Tillåtna värden

VALUE

literal value

NEXT

URL till nästa STEP eller DIALOG

NEXTMETHOD

GET (default)
POST

EXEMPEL

<INPUT NAME=”choice” TYPE=”OPTIONLIST”>
    <OPTION NEXT=”#doit” VALUE=”1″> one </OPTION>
    <OPTION NEXT=”#doit” VALUE=”2″> two </OPTION>
</INPUT>

Koden på rad 2 och 3 illustrerar användandet av OPTION-elementet inom INPUT-elementet.

I det här exemplet kommer OPTION-alternativet på rad två att exekveras när användaren svarar med ”one” och alternativet på rad tre exekveras när användaren svarar ”two”.

Om användaren svarade ”one” blir resultatet att värdet av variabeln ”choice” blir ”1” på grund av hur vi använde VALUE-attributet.

Eftersom NEXT-attributet är detsamma för båda OPTION-elementen i vår OPTIONLIST, kommer browsern att fortsätta till STEP-elementet ”doit” vare sig ”one” eller ”two” används.

<INPUT TYPE=”OPTIONLIST”>
    <OPTION NEXT=”http://localhost/vml/weather.asp”>
      weather </OPTION>
    <OPTION NEXT=”http://localhost/vml/news.asp”>
      news </OPTION>
    <OPTION NEXT=”http://localhost/vml/traffic.asp”>
      traffic </OPTION>
</INPUT>

Koden ovan visar på hur man använder OPTION-elementet för att göra ett val av tre möjliga och varje NEXT-attribut har kompletta HTTP URL:er och i motsatts till det tidigare exemplet unika NEXT-attribut.

OPTIONS

OPTIONS-elementet beskriver typen av interaktivt gensvar inom ett givet STEP-element.

Vanligast används OPTIONS-elementet i HELP-element för att erbjuda användaren en lista på korrekta valmöjligheter.

OPTIONS-elementet kan användas överalltdärtext läsaes uppför användaren.

OPTIONS-elementet kan placeras i PROMPT-, EMP-, PROS-, HELP-, ERROR- och ACK-elementen.

SYNTAX

<OPTIONS/>

ATTRIUT

OPTIONS-elementet innehåller inga attribut

EXEMPEL

<CLASS NAME=”helpful”>
<HELP> Your choices are: <OPTIONS/> </HELP>
</CLASS>

Exemplet ovan illustrerar hur OPTIONS-elementet används för att skapa en CLASS, ”helpful”.

Det STEP-element som som direkt eller indirekt anger ”helpful” som PARENT responderar på ”help” genom att säga meddelandet och då expanderar OPTIONS-elementet till en beskrivning av vilka alternativ som användaren kan säga i denna DIALOG.

OR

OR-elementet används för att definera alternativa igenkänningsresultat i ett OPTION-element.

OR-elementet tolkas som ett logiskt ”or” och används för att associera flera igenkänningsresultat med ett enkelt NEXT-attribut.

OR-elementet kan endast användas i OPTION-elementet.

SYNTAX

<OR/>

ATTRIBUT

OR-elementet innehåller inga attribut

EXEMPEL

<INPUT TYPE=”OPTIONLIST”>
<OPTION NEXT=”#coke_chosen”>
coke <OR/> coca-cola
</OPTION>
<OPTION NEXT=”#pepsi_chosen”> pepsi </OPTION>
</INPUT>

Koden illustrerar hur användandet av OR-elementet i ett OPTION-element.

Som du kan se på rad tre i koden ovan så kan användaren svara antingen ”coke” eller ”coca-cola” och få samma resultat, browsern kommer att fortsätta till STEP-elementet med namnet ”coke_chosen”.

PROMPT

PROMPT-elementet används för att definera vilket innehåll iett STEP-element som skall presenteras för användaren.

Innehållet kan vara text- eller audio-innehåll.
Text läses upp med ”text-to-speech”-teknik.Uppläsningen kan kontrolleras med hjälp av BREAK-element för pauser i uppläsningen, EMP-elementet för för att läggain emfas i uppläsningen och PROS-elementet för olika dimensioner av metrik.

AUDIO-elementet specificerar ljud-filer, ljud-effekter och samplat ljud som spelats in från användaren som skall spelas upp.

PROMPT-elementet kan användas i STEP- och CLASS-elementen.

SYNTAX

<PROMPT> text </PROMPT>

ATTRIBUT

PROMPT-elementet innehåller inga attribut

EXEMPEL

<STEP NAME=”init”>
    <PROMPT> How old are you? </PROMPT>
    <INPUT TYPE=”NUMBER” NAME=”age” NEXT=”#weight”/>
</STEP>

I det här exemplet kommer texten ”How old are you?” att läsas upp med ”text-to-speech”-teknik.
Sedan väntar applikationen på användarens svar.

PROS

PROS-elementet (eng. prosody, sv. metrik) kontrollerar metriken med vilken innehållet presenteras för användaren via PROMPT-, HELP-, ERROR-, CANCEL- och ACK-elementen. Metrik påverkar vissa kvaliteter i ”text-to-speech”-presentationen, som talets tempo, höjd, räckvidd och volym. Den exakta effekten avgörs av kapaciteten hos den TTS-motor som används.

PROS-elementet kan användas inom PROMPT-, EMP-, PROS-, HELP-, ERROR-, CANCEL- och ACK-elementen.

SYNTAX

<PROS [RATE=”värde”] [VOL=”value”] [PITCH=”value”] [RANGE=”value”]>
    text
</PROS>

ATTRIBUT

Attributnamn

Tillåtna värden

RATE

Talets vidd i ord per minut (heltal)
135 är normalt (300 är mycket snabbt)

VOL

Volym (heltal)
1.0 är maximalt, 0.0 är tyst

PITCH

Hz (heltal)
En kvinnoröst är normalt från 140-280 Hz.
Mansröster mellan 70-140 Hz.

RANGE

Hz (heltal)
Kvinnoröst från 80 Hz upp.
Mansröst 40-80 Hz.

EXEMPEL

<PROMPT> Let me tell you a secret:
    <PROS VOL=”0.5″> I ate the apple. </PROS>
<PROMPT>

I exemplet talas ”I ate the apple” med halva den normala volymen.

Att sätta metrikvärdena

Det finns fyra sätt att specificera värdena i PROS-attributet.

  • Som ett absolut värde. Ex: RATE=”100″ för att tala något långsammare än vanligt tal.
  • Som relativt värde. Ex: RATE=”-50″ ger 50 ord mindre i minuten än det aktuella värdet, RATE=”+.25″ dubblerar det aktuella värdet om det är satt till .25 förnärvarande.
  • Som en relativ procentuell förändring av värdet. Ex: RATE=”+50%” ökar värdet med 50% från aktuellt värde. VOL=”+100%” dubblar alltså den nuvarande volymen.
  • Som en återgång till default-värde. RATE=”RESET” återställer hastigheten till default-värdet hos den implementation av VoxML-browser du använder.

RENAME

RENAME-elementet används om du använder en egen grammatik.

I VoxML lagras resultatet av varje igenkänning i separata ”slots” och
genom default-värdet ser INPUT GRAMMAR till att varje slot hamnar i en
VoxML-variabel med samma namn.

Detta innebär också att du inte kan använda samma grammatik för att samla flera
bitar av information, detta avhjälper du med hjälp av RENAME-elementet.

RENAME specificerar en ”mappning” mellan igenkänningsnamnet och variabelnamnet.

Om du tycker att det här var svårt att begripa så var lugn, exemplet nedan gör det betydligt klarare.

RENAME-elementet kan endast användas i INPUT-elementet, och då endast när typen INPUT GRAMMAR används.

SYNTAX

<RENAME RECNAME=”value” VARNAME=”value”/>

ATTRIBUT

Attributnamn

Tillåtna värden

VARNAME

identifiering (identifier)

RECNAME

identifiering (identifier)

EXEMPEL

<INPUT TYPE=”GRAMMAR”
SRC=”http://www.casselbrant.com/docs/voxml/mygram.grm
NEXT=”http://www.casselbrant.com/docs/voxml/vox.htm”>
    <RENAME VARNAME=”sym” RECNAME=”symbol”>
    <RENAME VARNAME=”detail” RECNAME=”quotetype”>
</INPUT>

I exemplet ovan så används RENAME-elementet för att hålla isär variabelnamn från en egen grammatik med dem som förväntas från en annan applikation.

Då två källor kan tänkas var utvecklade på olika håll används RENAME-elementet för att kunna koppla grammatiken med applikationen.

RESPONSE

RESPONS-elementet används i lägen då man vill ha fullständiga uppgifter från användaren.

RESPONS används för att kontrollera vilka slots från igenkänningen som är fyllda.
Detta ger utvecklaren en möjlighet att med NEXT-attributet dirigera användaen till olika URL:er beroende på vilken respons användaren har gett.

RESPONS-elementet kan endast användas inom INPUT-elementet och då endast när typen GRAMMAR används.

SYNTAX

<RESPONSE FIELDS=”value” [NEXT=”value” [NEXTMETHOD=”value”]]/>

eller

<RESPONSE FIELDS=”value” [NEXT=”value” [NEXTMETHOD=”value”]]>
    SWITCH-element
</RESPONSE>

ATTRIBUT

Attributnamn

Tillåtna värden

FIELDS

Kommaseparerad lista på slots

NEXT

URL till nästa STEP

NEXTMETHOD

GET (default)
POST

EXEMPEL

<INPUT TYPE=”GRAMMAR” SRC=”gram://.Banking/action/amt/fromacct/toacct” NEXT=”#notenoughfields”>
    <RESPONSE FIELDS=”action, amt, fromacct, toacct” NEXT=”#doit”/>
    <RESPONSE FIELDS=”action, amt, fromacct” NEXT=”#asktoacct”/>
    <RESPONSE FIELDS=”action, amt, toacct” NEXT=”#askfromacct”/>
    <RESPONSE FIELDS=”action, amt” NEXT=”#askaccts”/>
    <RESPONSE FIELDS=”action” NEXT=”#askamtaccts”/>
</INPUT>

Exemplet ovan visar hur man kan använda RESPONSE-elementet för att hantera en situation där användaren specificerat mindre än alla variabler möjliga i ordlistan (grammar).

Exemplet visar också hur man kan arrangera insamlandet av information genom att använda RESPONS-elementet tillsammans med NEXT-attributet för att bara gå vidare till den information som användaren ännu ej lämnat.

STEP

Varje VoxML-DIALOG måste innehålla ett STEP-element som heter ”init”. Exekveringen av en VoxML-applikation startar med STEP=”init”.
För att avsluta en DIALOG så låter du bli att infoga ett NEXT-attribut i det sista STEP-elementet, eller om du vill skriva tydlig kod så använder du
en ”dummy”, nämligen ett ”#end” STEP.

SYNTAX

<STEP NAME=”value” [PARENT=”value”][BARGEIN=”value”][COST=”value”]>
    VoxML
</STEP>

ATTRIBUT

Attributnamn

Tillåtna värden

NAME

identifierare (identifier)

PARENT

identifierare (identifier)

BARGEIN

Y (default)
N

COST

heltal *(se nedan)

* COST är ett implementationsberoende uppgift om kostnaden för att påbörja eller avsluta aktuellt STEP-element.

EXEMPEL

<STEP NAME=”askpython” PARENT=”tvrating”>
    <PROMPT> Please rate Monty PythonŽs Flying Circus on a scale of 1 to 10. </PROMPT>
    <INPUT NAME=”python” TYPE=”NUMBER” NEXT=”#drwho” />
</STEP>

Exemplet visar ett enkelt STEP-element som samlar in användarens åsikt om en TV-show.

I exemplet kan man tänka sig att man kan använda PARENT-attributet för att dela en uppsättning HELP- och ERROR-element med andra STEP-element som vill ha användarens åsikt om olika TV-shower.

Exempelvis kan man här lägga in vanliga felmeddelanden och/eller en förklaring för användaren hur värderingen 1 till 10 vägs.

SWITCH

SWITCH-elementet används för att definera applikationens beteende beroende på värdet i ett specifikt slot.

SWITCH-elementet används enbart i kombination med CASE-elementet.

SWITCH-elementet kan enbart användast i INPUT-elementet och då endast när typen GRAMMAR används.

SYNTAX

<SWITCH FIELD=”value”>
    VoxML
</SWITCH>

ATTRIBUT

Attributnamn

Tillåtna värden

FIELD

identifierare (identifier)

EXEMPEL

<INPUT TYPE=”GRAMMAR” SRC=”grm://.Banking/action/amount/fromacct/toacct”>
    <SWITC FIELD=”action”>
      <CASE VALUE=”transfer” NEXT=”#transfer” />
      <CASE VALUE=”balance” NEXT=”#balance” />
      <CASE VALUE=”activity”>
        <SWITCH FIELD=”fromacct”>
          <CASE VALUE=”checking” NEXT=”#chxact” />
          <CASE VALUE=”savings” NEXT=”#savact” />
        </SWITCH>
      </CASE>
    </SWITCH>
</INPUT>

Exemplet ovan visar hur man kan använda SWITCH-elementet för att bestämma nästa steg att exekvera på grundval av användarens val i en bank-applikation.

VALUE

VALUE-elementet används för att presentera värdet hos VoxML-variabler via ”text-to-speech”-teknik.

VALUE-elementet kan användas överallt där text skall läsas för användaren.

VALUE-elementet kan du använda i ett PROMPT-, EMP-, PROS-, HELP-, ERROR-, CANCEL- och ACK-element.

SYNTAX

<VALUE NAME=”value” />

ATTRIBUT

Attributnamn

Tillåtna värden

NAME

identifierare (identifier)

EXEMPEL

<STEP NAME=”thanks”>
    <PROMPT> Thanks for your responses.
      I’ll record that <VALUE NAME=”first”/> is your favorite and that

      <VALUE NAME=”second”/> is your second choice. </PROMPT>
    <INPUT TYPE=”NONE” NEXT=”/recordresults.asp” />
</STEP>

Exemplet ovan visar hur VALUE-elementet läser upp de val som användaren har gjort tidigare i applikationen.

Alcatel Pixi 4 (Android 6.0 – Marshmallow)

Alcatel Pixi 4Plötsligt så fick jag för mig att komplettera mitt bruk av mobiltelefon med att ha en extra telefon. Tanken är att jag skall köpa ett tangentbord så att jag kan skriva dokument på ett mobilt och smidigt sätt men efter en del grunnande på den saken så blev jag sugen på att kunna skriva kod också. Kanske få ihop något i Python förutom det jag kommer att kunna skriva i HTML. Kodande på mobilen kan sluta hur illa som helst, jag antar att det går ganska enkelt att skriva så dålig kod att kompilatorn kommer att hänga telefonen död och så står man där. Så för att stilla min nyfikenhet så tyckte jag att det var i sin ordning att ha en liten testbänk och när man går efter pris så landar man just när jag skulle slå till på en Alcatel Pixi 4. Alcatel är ett av få märken som lever kvar sedan tiden innan mobiltelefonerna gick från enkla ring och skicka SMS-apparater till dagens smartphones så det var ju lite kul. Den här kommer att få hänga med as my sidearm framöver. Hoppas att kunna hitta på något kul att göra med den i alla fall. Skulle vara kul att se om jag kan skriva om mina gamla Python-appar som jag använde för energiberäkningar men som vid senare uppgraderingar av Python inte gick att köra längre. Att uppdatera det skulle vara roligt. Så några små projekt borde man kunna ha kul med.
Jag hittade en test på en indisk sajt, Gadget 360:
https://gadgets.ndtv.com/mobiles/reviews/alcatel-pixi-4-review-1625194

Alla tekniska data på min Alcatel Pixi 4 kan man hitta på GSMArena på den här länken:
https://www.gsmarena.com/alcatel_pixi_4_(4)-7845.php

Alcatel Pixi 4

Netscape Navigator begrovs för 10 år sedan.

Man vet att man är gammal att den nya teknik man när den var som hetast kändes som man nästan hade missat. Nu är det drygt 20 år sedan Netscape kom och var en revolutionerande webbläsare som tog ut webben till fler och därför också gjorde att webbutvecklandet utvecklades. Nästa riktigt stora webbläsar-hopp i utvecklingen var Internet Explorer 4.0 som tillsammans med HTML 4 utgjorde nästa stora evolutionshopp i webbutvecklingen 1999. Skillnaden för mig själv vara att när HTML 4 kom var jag redan mitt i smeten kunskapsmässigt. HTML 3.2 var någon man kunde fullt ut och det var riktigt roligt att vara mitt i webbutvecklingens utveckling där och då. Innan Internet Explorer 4.0 så var det Netscape Navigator som var det absoluta första valet. Internet Explorer peakade med version 4 och har inte varit bättre förr eller senare. Netscape gick in i en period av utveckling som innebar att programmet blev tyngre långsammare och fullständigt nedlusad med extrafunktioner som man som användare inte någonsin använde. För en historisk genomgång av Netscape Navigator så titta gärna på https://www.cio.com.au/slideshow/557401/pictures-visual-history-netscape-navigator/.

Netscape Navigator

Samtidigt som jag just nu är sugen på en laptop där jag kan köra OS/2 så vore det ju fantastiskt roligt med en installation med Netscpe på OS/2 även om det med utvecklingen av HTML är helt irrelevant, dock ändå lite intressant att se vad en gammal webbläsare skulle klara. Hur pass bra en gammal webbläsare för HTML 2-3.2 klaar HTML 5-sidor.
Kanske att man kan få till en dator med Blue Lion från Arca Noae och hitta någon gammal webbläsare från förr at skoja loss med. Nu när jag har börjat knacka lite kod igen och försöker följa gällande standard fullt ut så skulle det vara kul att se hur bakåtkompabiliteten i HTML ser ut i skarpt läge. Ett annat program som jag saknar från förr är ju Z!, den coolaste MP3-spelare någonsin, och den absolut snyggaste som existerat. Det var alltid lika nice att sparka igång Z! på sin gamla ThinkPad 600 när det begav sig.

OS/2 Warp 4 - Merlin

The long winding road to Backstreet Computing

Maximum Linux Oktober 1999Eftersom jag häromdagen gnällde loss om hur det konforma datoranvändandet, styrt av de sociala medierna, har gjort datoriserandet tråkigare. Jag gick efter det inlägget så gick jag loss på Tradera och lade ett bud på en riktigt cool liten laptop. Jag hade till och med spanat ut att jag skulle installera Point Linux på den i brist på att jag inte har en ArcaOS 5.0 licens ännu. Idag så såg jag att jag hade förlorat auktionen på Tradera och därför står jag fortfarande här utan en bra mobil datorlösning. Som tröst knarkade jag lite NTT DoCoMo som fortfarande har haft samma underbart fattiga design som är så mycket år 2000. Jag älskar det. Retro och cutting bleeding edge på en och samma gång. Natten till idag gick jag loss och började hacka HTML(r) och CSS för ROVIC COCOA PROCESSING COMPANYs sajt. Det är sköt och roligt att börja om igen med HTML5 och CSS och att göra det enligt skolboken och den gällande standarden. Nu är det ju så länge sedan som jag knackade HTML(r) att det alltid var en kompromiss mellan HTML 3.2 och HTML 4 på ett eller annat sätt. Ganska ofta valde jag genvägar där jag behövde det men nu vill jag göra en riktigt tråkig men korrekt sajt enligt standard. Nu vill jag hacka kod och göra lite kul grejer. Det är helt enkelt så att jag saknar den tiden då jag alltid vid lediga stunder satt med en laptop i knät och skapade. Oavsett vad det var. Skapa grejer. Skriva artiklar eller skriva Python-kod eller vad det nu kunde vara. Nu vill jag skriva. Skriva texter, noveller eller hela romaner, men jag vill göra det på samma sköna sätt, med en skön laptop i knät. Med det kanske inte med den mest väntade mjukvaran men med den mjukvaran som får jobbet gjort och det på ett snyggt sätt.

Jag har en liten skön laptop som jag använder till i huvudsak två saker. Väckarklocka (You don’t say) och för att scanna negativ/positiv film. Om jag får tummen ur och får skannern att fungera i Linux så är den laptopen redo för en brutal make over direkt. Men just nu orkar jag inte hålla på och grotta runt med det. Det får bli som det blir. Jag vill bara hitta en billig, gärna gammal laptop och gå loss. Det är allt. Jag vill skapa min egen datormiljö på mina egna vilkor igen. Att hitta Mae Ling MakTwitter var en lättnad, hon är lika skarp och vass som hon var 1999. Det vill jag också vara. Jag vill gå loss, jag vill släppa loss igen.

Natthack mot gryningen

Börjat bygga en ny sajt från grunden. Skall försöka hålla mig till så ren och vacker HTML(r) som det är möjligt. Skall bara vara HTML5 och CSS när jag är klar förhoppningsvis. Det känns att det ver länge sedan jag skrev någon kod i något överhuvudtaget men det får gå.

Skärmdump

På väg igen

CockpitEfter två långa månader med min egen bil väntandes på att få en rejäl genomgång på verkstad så hämtade jag min pärla i onsdags. Genomgången, varje rem bytt, lampor lyser, varningslampor inte. Det var ren skär poesi att rulla ut henne på asfalt och trycka på lite skön hårdrock i högtalarna samtidigt som varvräknaren sakta fann vila på 2000 per minut.
I torsdags stack jag direkt iväg på en kortare road trip. Den här gången till Laxå och Askersund och det var precis som senast (Road Trip – Laxå).

Jag säger som Jesus…”min fru…”

Karin och jag myser i soffan men i övrigt är det fullt upp omkring oss. Erika är på ungdomsledarutbildning och Sofia är på öppet hus i Adolf Fredik musikskola med morbror Martin.
Carl sitter naturligtvis framför datorn och Elsa sover efter ett par långa arbetsnätter. Om en stund skall jag börja packa för ett par nätter i Kalvsnäs igen. Det är inte många dagar i rad man tillbringar hemma. Nästan ett helt dygn den här gången.

W.A.S.P. har sparkat igång sin turné för att fira sina 30 år som live-band. 21 september 1082 stod bandet på scen för första gången.
BluefishJag hoppas kunna få loss någon biljett när de är i Sverige och under tiden så filosoferar jag lite över vilka låtar man har valt att spela. Setlist från första konserten på turnén hittar du här. Innan det är dags för att springa på konserter så skall en del hemsidas-knackande bli färdig produkt, återkommer med länk så småningom just nu måste jag fokusera på att få grunden klar.

Stress?

SBADet är mycket nu!
I helgen hann jag med både det ena och det andra. I lördags var det fröplantering på Blomsterlandet med Sofia och Karin, sedan rensning av vattenlås under handfaten då vattnet knappt rann undan längre.
Sedan till katolska domkyrkan där Erika skulle sjunga med kören, och jag har inte hunnit vara med på några körframträdanden på ett par år i alla fall.

Hem och sedan nästa vattenlås.

Sedan var det dags för pianoövningar på Lidingö igen på söndagen, med Erika, Sofia och Karin.
Under tiden som jag försökte hålla Karin i schack under hela pianolektionen så försökte jag samtidigt ha en knackig dialog via SMS med Figge Boström för att gratulera till att även hans andra bidrag i Melodifestivalen tagit sig till finalen.

Ett par timmars kodande av SBAs nya hemsida som jag hoppas ha klar under slutet av veckan.

Plötsligt måndag och arbetsveckan startar igen…

Bilen krånglar igen.
Kan inte tanka på grund av det eldrivna tanklocket!
Sitter och väntar en timme utanför verkstaden på att mekanikerna skall återkomma efter lunch, samtidigt som vi skulle ha varit i Eskilstuna. Blir ett sent och långt arbetspass.

Plötsligt är det torsdag och jag har inte gått och lagt mig ännu!
Nu slutar vi här och återkommer snart igen…

Östersund

Då var det dags att åka till Östersund igen.
Om några timmar sitter jag i bilen norrut, så nu skall jag passa på att packa väskan med kläder och arbetsmaterial.

Hoppas att den lite uppiffade designen glädjer någon besökare av hemsidan.

Ses i slutet av veckan igen.
Grattis Elsa, du hinner ju fylla år innan jag är hemma igen.
Ha en bra vecka.

Energicenter.com

www.energicenter.comEn välbehövlig uppdatering av Energicenter.com lyckades jag genomföra idag.
Det var ett bra tag sedan jag senast uppdaterade sajten och det var minst sagt på tiden.
Med mina mycket begränsade designkunskaper så försökte jag i alla fall skala ner sajten från den anhopning av information det var tidigare till en mer lättsmält sak.

Den gamla loggan kändes rätt att ta tillbaka.
Jag ritade den 2002 och 2004 när jag och min dåvarande kollega gick skilda vägar så gjorde jag misstaget att låta honom också använda loggan.
När han sedan sålde mer värmepumpar för Thermia än jag så hade Thermia den dåliga smaken att be mig byta logga för att inte sammanblandas med honom.
Jag vägrade naturligtvis.
Senare bytte jag ändå logga. Jag ville ha en logga som kändes fräsch och jag lejde bort jobbet att ta fram en ny logga, vilket jag inte ångrar alls.
Det kan vara så otroligt uppfriskande med en ny oförstörd blick som ger sig på att ordna vad som är den stora kommunikatören för företaget.

Nu har det gått ett antal år igen och det kändes som om det var dags för något nytt.
Det som kändes mest nytt var att återinföra den ursprungliga loggan.
Den som jag gjorde själv.

Kom gärna förbi och titta på den nya sajten, www.energicenter.com

Åter till den klassiska loggan