Friday, February 22, 2013

Mapping the sylabus for the ITIL Intermediate Capability Course: Release, Control and Validation (RCV)

pencil icon, that"s clickable to start editing the post
In January 2013 I completed the ITIL Foundation 2011 as a first step i learning ITIL. My next goal is one of the capability courses with a current preference on Release, Control and Validation Qualification (RCV), though it's said to one of the tougher ones. In my line of work I an involved in all the lifecycle stages, but if I were to choose another one i would be Operational Support and Analysis Qualification since I do quite a deal of Service Operation and it should be a bit easier.

I current plan to take a course in the early summer and have acquired the lifecycle and the key elements books. But it's a bit overwhelming even just starting on the Service Transition book, so I decided to map the mentioned sections from the Release, Control and Validation (RCV) Syllabus into the Table of contents of the Service Transition book.

I am going to read the hole book, but is a little surprised that not every part is mentioned in the syllabus.

  1. Introduction 1
    • 1.1 Overview 3 - RCV01
    • 1.2 Context 6
    • 1.3 ITIL in relation to other publications in the Best Management Practice portfolio 8
    • 1.4 Why is ITIL so successful? 10
    • 1.5 Chapter summary 10
  2. Service management as a practice 13
    • 2.1 Services and service management 15
    • 2.2 Basic concepts 22
    • 2.3 Governance and management systems 27
    • 2.4 The service lifecycle 30
  3. Service transition principles 35
    • 3.1 Policies for service transition 37
    • 3.2 Optimizing service transition performance 45
    • 3.3 Service transition inputs and outputs 46
  4. Service transition processes 49
    • 4.1 Transition planning and support 51 - RCV01
    • 4.2 Change management 60 - RCV02
    • 4.3 Service asset and configuration management 89 - RCV03
    • 4.4 Release and deployment management 114 - RCV05
    • 4.5 Service validation and testing 150 - RCV04
    • 4.6 Change evaluation 175 - RCV07
    • 4.7 Knowledge management 181 - RCV08
  5. Managing people through service transitions 197
    • 5.1 Managing communications and commitment 199
    • 5.2 Managing organization and stakeholder change 203 - RCV02
    • 5.3 Stakeholder management 215
  6. Organizing for service transition 219
    • 6.1 Organizational development 221
    • 6.2 Functions 221
    • 6.3 Organizational context for transitioning a service 222
    • 6.4 Roles 223 - RCV09
    • 6.5 Responsibility model – RACI 234
    • 6.6 Competence and training 234
    • 6.7 Service transition relationship with other lifecycle stages 236
  7. Technology considerations 239
    • 7.1 Knowledge management tools 242 - RCV10
    • 7.2 Collaboration 242 - RCV10
    • 7.3 Configuration management system 243 - RCV10
  8. Implementing service transition 245
    • 8.1 Key activities in the introduction of service transition 247
    • 8.2 An integrated approach to service transition processes 250
    • 8.3 Implementing service transition in a virtual or cloud environment 250
  9. Challenges, critical success factors and risks 253
    • 9.1 Challenges 255 - RCV10
    • 9.2 Critical success factors 255 - RCV10
    • 9.3 Risks 256 - RCV10
    • 9.4 Service transition under difficult conditions 256






Read more

Sunday, January 6, 2013

Ruzzle - observationer, del 1

pencil icon, that"s clickable to start editing the post
Dette er mine egne observationer med ord-spillet Ruzzle da jeg til min overraskelse ikke kunne finde andre kilder imodsætning til spillet Wordfeud hvor der findes en del hjælpe sider med tips og ideer.
Bemærk jeg har ingen relationer til de som har udviklet spillet og giver ingen garatier for at mine observationer er helt korrekte eller uden fejl.

Point

Grundlæggende så får man point ved at danne ord og hvert ord får point ud fra tre elementer bogstaver, faktorer og ordlængde

Bogstavspoint

Hvert bogstav har en fast værdi, som kan ses af nedenstående tabeller sorteret hhv. efter pointværdi og alfabetisk:

Jeg har ikke nogen statistik på hvor ofte de forskellige bogstaver forekommer men generelt kan der (i teorien) laves mellem 250-300 ord i en runde.

Faktorer

De enkelte bogstaver kan have faktorer:


Ordlængde

Sidst gives der seperat ord for længden hvis den overstiger 4 bogstaver






Read more

Sunday, April 3, 2011

Efterlysning: har du set min Garmin Forerunner 305 med serienummeret 13V310633

pencil icon, that"s clickable to start editing the post
Midt i februar tabte jeg min Garmin Forerunner 305 i Roskilde. Jeg vil meget gerne have den tilbage og vil give en findeløn. Hvis du har fundet den så skriv til mig eller kommentér nedenfor.

På forhånd tak.

Med venlig hilsen
Brian Nielsen

Read more

Sunday, January 2, 2011

How problems with the USB cable for my Garmin Forerunner 305 showed up

pencil icon, that"s clickable to start editing the post
Earlier this year I had major problems transferring data from my Garmin Forerunner 305 to my computer, after traying all kinds of installation changes I ended up buying a new USB cable and Voilá all problems were gone. Here's a couple of screenshots of how it looked.

It wouldn't be detected correctly:

and driver problems



Read more

Saturday, November 27, 2010

Yet Another Conconi Running Test

pencil icon, that"s clickable to start editing the post
What a difference a couple of days make or doing it a bit differently. Friday I did yet another Conconi running test, since the weather in Denmark currently is very training unfriendly AND I didn't really like the result of the previous one, so either it was bad or I had to reevaluate my status.

This one turned out to the better. For one I hadn't done any training since the last test Tuesday (that followed a tempo run on Sunday), so my legs were fresh. Second I figured out how to make the treadmill show distance all the time, and third I chose another approach for the test. The warm up thing didn't work out right the last time and normally I don't do that kind of separate warm up in a workout - I decided to just start out a little slower, here's the plan:

Dist (km)     - speed(km/h)
1.0 - 9,2
1,4 - 9,6
1,8 - 10.0
2,2 - 10,4
2,6 - 10,8
3,0 - 11,2
3,4 - 11,6
3,8 - 12,0
4,0 - 12,4
4,2 - 12,8
4,4 - 13,2
4,6 - 13,6
4,8 - 14,0
5,0 - 14,4
5,2 - 14,8
5,4 - 15,2
5,6 - 15,6

As can be seen on the splits, this plan gave me much short times at the speed above 12 km/h were I expect my AT, with the final ones on just 0.:45 versus the 2:00 minutes the last time. Clearly running longer at or above AT will increase HR and make it harder to endure further speed increase/time.


The workout graph was:


The most obvious difference was that I reached 15,6 km/h as top speed and my maximum HR was 168.
The recovery was just 16 bpm for the first 30 seconds and another 23 bpm in the next with a total of 39 in the first minute (versus the 59 bpm in the previous test!). Once more I did a short cool down interval of at 9 km/h not passing 140 bpm.

Two different test within 4 days with quite different results, the conclusion is blahhhhhh - I've improved :-).

Together with the other tests this enters as second best,and with a HR drop of app. 10 bpm at each speed level or app. 1.5 km/h faster per HR:





Read more

Tuesday, November 23, 2010

Comparing results from five Conconi running tests

pencil icon, that"s clickable to start editing the post
Today I performed yet another Conconi running test, adding up to a total of 5 recorded within the last one and a half year (See my post Performing a Conconi running test, from 9. july 2009 for a little background info).

The test today consisted of first 1,5 km warm up (around 11 km/h), then after a short break I started out at 9,6 km/h, and increased the speed with 0,4 km/h each 2 minutes (I couldn't figure out to get the display show distance, so that I could have used my normal approach with increase each 200 m). The recording was done with my Garmin Forerunner 305 configured for data sampling each second. Here's the hrm profile:


One thing that stands out is the fact that the terminal pace was (only) 14 km/h and that at an HR of 171 bpm, close to my maximum HR. It was my judgement that I could not complete 2 minutes at 14,4 km/h though it somehow didn't feel as hard as 171 bpm normally does,  the few time I've hit it in interval training.
The recovery for the first 30 seconds after I stopped the test was 30 bpm and thereafter another 29 bpm, with a total of 59 bpm within the first minute. After that i did a 5 min after jog at 9 km/h and look what happened, my HR just increased to the level of what should be app. 11 km/h! and even a walk at 5 km/h didn't send my HR below 100.


As usual the graph is not an clear cut ideal step wise flat curve, but my qualified measurement gave me these numbers, entered in the same spreadsheet as my previous Conconi running tests:


Transformed into a graph with Open Office Calc gives:


The test has once more proved not to be usable for the original idea, but as usual that won't prevent me from drawing my own conclusions.
As a little background info, I haven't been running much since April when I got an injury in my right Calf in a training pass (LSD) after at successful half-marathon.That surprisingly didn't hinder me in getting a new personal best it this years DHL-stafet with 22:10 for the 5 km, with an to my extremely high HR ending with 176 bpm.

The overall behavior is the same in all measurements, no clear tipping point. Overall the maximum speed is like the other tests except for the phenomenal one a year ago. The maximum HR is high. One thing that does seem different is that the slope, where the others seem parallel (same slope shifted left or right), this test shows a steeper slope, as if I've primarily lost ability to keep top speed.
what can i really use if for? - not much. Though I surely was in a better running condition last autumn and spring, it does seem as if plenty of other factors influence much, like for an example the10K I did last Sunday (48:25).


Read more

Tuesday, July 27, 2010

WS-I dumped off at OASIS - The last stand for WS-*

pencil icon, that"s clickable to start editing the post
All right that's push the drama a bit. WS-I has seemed to dead for quite some time and I still think there's a need for it, IF you're into the WS-* stack. I actually thought that it had already gone somewhere else but found this piece of news from OASIS: WS-I Transitions to OASIS. The dear Mr. Liscia has to believe in revitalization, though I'm not so optimistic on that point.


Update 11. november It's now officially closed, with this press release from WS-I: WS-I Completes Web Services Interoperability Standards Work [PDF], with these finale products:
The release of WS-I member approved final materials for Basic Profile (BP) 1.2 and 2.0, and Reliable Secure Profile (RSP) 1.0 fulfills WS-I’s last milestone as an organization. By publishing the final three profiles, WS-I marks the completion of its work. Stewardship over WS-I’s assets, operations and mission will transition to OASIS (Organization for the Advancement of Structured Information Standards), a group of technology vendors and customers that drive development and adoption of open standards.

Read more

Sunday, February 28, 2010

Picky Tomcat parsing of function taglib descriptor element 'function-signature'

pencil icon, that"s clickable to start editing the post

After spending way way to much time figuring out what kind of an error I had introduced into my webapp it turned out the Tomcat/Jasper does what seems to be as a very non-xml'ish parsing of the tld. Here's to those of you out there that stumble upon these error messages. The heart of my learning is that the element defining the function-signature should be on one line! This example is bad:

<function>
   <description>.....</description>
   <name>myTagLibFunction</name>
   <function-class>my.package.taglib.functionClass</function-class>
   <function-signature>my.package.returnValue[] 
myTagLibFunction(java.lang.String,java.util.Calendar)</function-signature>
   <example>.....</example>
</function>

and this one should be fine:

<function>
   <description>.....</description>
   <name>myTagLibFunction</name>
   <function-class>my.package.taglib.functionClass</function-class>
   <function-signature>my.package.returnValue[] myTagLibFunction(java.lang.String,java.util.Calendar)</function-signature>
   <example>.....</example>
</function>

It was my pretty formatting the ruined it for me. Here's first an error message that at least make sense (contrary to the next one):

Exception: org.apache.jasper.JasperException: Invalid syntax for function signature in TLD. Tag Library: myChoosePrefix, Function: myTagLibFunction

and the complete stacktrace:

org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:51)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:164)
org.apache.jasper.compiler.Validator$ValidateVisitor.getMethod(Validator.java:1536)
org.apache.jasper.compiler.Validator$ValidateVisitor.processSignature(Validator.java:1523)
org.apache.jasper.compiler.Validator$ValidateVisitor.access$400(Validator.java:411)
org.apache.jasper.compiler.Validator$ValidateVisitor$1FVVisitor.visit(Validator.java:1499)
org.apache.jasper.compiler.ELNode$Function.accept(ELNode.java:129)
org.apache.jasper.compiler.ELNode$Nodes.visit(ELNode.java:200)
org.apache.jasper.compiler.ELNode$Visitor.visit(ELNode.java:242)
org.apache.jasper.compiler.ELNode$Root.accept(ELNode.java:56)
org.apache.jasper.compiler.ELNode$Nodes.visit(ELNode.java:200)
org.apache.jasper.compiler.Validator$ValidateVisitor.validateFunctions(Validator.java:1503)
org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:1139)
org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:819)
org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1512)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2343)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2393)
org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:515)
org.apache.jasper.compiler.Node$JspRoot.accept(Node.java:566)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2343)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2393)
org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2399)
org.apache.jasper.compiler.Node$Root.accept(Node.java:489)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2343)
org.apache.jasper.compiler.Validator.validate(Validator.java:1737)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:165)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:314)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:294)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:281)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:240)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:258)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1174)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:901)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
java.lang.Thread.run(Thread.java:619)

The cryptic one had me doing all kinds of odd stuff for trying to isolate the problem. Unfortunately I've deleted the local logfiles but it said something with substring indexoutofbounds -19

Currently I'm just happy to have found the it's Tomcat/Jasper that's picky (during compilation) but I haven't looked at neither specification nor code.

Read more

Saturday, February 13, 2010

An example on Common Look and Feel - The University of British Columbia

pencil icon, that"s clickable to start editing the post

I've for some time been intrigued to figuring out what (Common) Look & Feel can be defined as. In this post I'll have a look at an real life example from University of British Columbia. Here's first their own definition of it:

The UBC CLF, or "common look and feel", is a web design framework that supports the visual identity and online reputation of the University of British Columbia by providing a common look, feel and functionality to UBC websites.

with the stated goal to:

  • Create a predictable user experience across the web at UBC (e.g. allow users to easily navigate from one UBC site to another, provide some consistency in user interface elements across UBC sites)
  • Provide easy access to high-frequency-use UBC web tools (e.g. Search, Directories) and key UBC web properties
  • Ensure that UBC websites consistently support the visual identity of the university.

These goals are achieved through standardization of university-wide website elements in terms of:

  • content
  • visual appearance
  • interaction behaviour

I like this definition as it is clear and understandable. It would not be fair to start dissecting it before having a closer look at how it's defined in practice, in the Design Specifications of the CLF.

The CLF Framework is devided into Primary- and Secondary-CLF Elements.

The Primary-CLF Elements are:

  1. Required content, design, links and functionality that
    1. Warrant placement in every UBC website across the university due to their high level of use or their strategic value from a web communications perspective, and
    2. Are relevant to all campus locations.
  2. Optional content, links and functionality that adhere to a university-wide standard.
  3. Reserved space for these required and optional university-wide elements.

The Secondary-CLF Elements are:

  1. Required content, design, links and functionality to mark campus location where appropriate.
  2. Site-specific content, design, links, and functionality that can be customized on a site-by-site basis to accommodate localization of unit-level needs (e.g. Campus location, Faculty / Departmental-specific information etc.).
  3. Reserved space for these site-specific elements.

Honestly I don't really understand what this distinction is except the difference between global and site specific elements. Anyway they have defined two levels of compliance. First the Minimum CLF require the following elements:

  • UBC CLF Background
  • Global Utility Header
  • Visual Identity Header
  • Visual Identity Footer
  • Global Utility Footer

and it's visualized in this graphic where the required elements are highlighted in green:

The Full CLF requires the following elements:

  • UBC CLF Background (Minimum CLF Element)
  • Global Utility Header (Minimum CLF Element)
  • Visual Identity Header (Minimum CLF Element)
  • UBC CLF Primary Navigation
  • UBC CLF Secondary Navigation
  • UBC CLF Content Space
  • Sub Footer
  • Visual Identity Footer (Minimum CLF Element)
  • Global Utility Footer (Minimum CLF Element)

The difference is explained as:

The Full CLF consists of the Minimum CLF elements and the optional content areas of the templates including CSS styles and layouts. The area highlighted in red in the graphic image below indicates the optional content areas which together with the green areas make up the Full CLF.

UBC has a list of complying websites: websites have completed CLF implementation. I've picked some of these sites to have a closer look for one to see the variation and to ensure that it actually runs on different servers/setups.

Board of Governors

The Board of Governors has the URL: http://www.bog.ubc.ca/. Fetching the index pages gives the following headers:

$ wget -S http://www.bog.ubc.ca/
--15:08:57--  http://www.bog.ubc.ca/
           => `index.html.1'
Resolving www.bog.ubc.ca... 137.82.105.5
Connecting to www.bog.ubc.ca|137.82.105.5|:80... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Connection: keep-alive
  Date: Sun, 07 Feb 2010 14:14:38 GMT
  Server: Microsoft-IIS/6.0
  X-Powered-By: ASP.NET
  Content-Length: 361
  ETag: "baf57961e646ca1:663"
  Last-Modified: Wed, 07 Oct 2009 00:37:42 GMT
  Content-Type: text/html
Length: 361 [text/html]

and the page looks like:

Engineering

Engineering has the URL http://www.engineering.ubc.ca/. The sites respond with the headers:

$ wget -S http://www.engineering.ubc.ca/
--15:10:40--  http://www.engineering.ubc.ca/
           => `index.html.2'
Resolving www.engineering.ubc.ca... 142.103.119.227
Connecting to www.engineering.ubc.ca|142.103.119.227|:80... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Date: Sun, 07 Feb 2010 14:12:16 GMT
  Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny4 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g
  X-Powered-By: PHP/5.2.6-1+lenny4
  Vary: Accept-Encoding
  Connection: close
  Content-Type: text/html; charset=UTF-8
  Content-Language: en-US
Length: unspecified [text/html]

Ombudsperson for Students, Office of the

Office of the Ombudsperson for Students has the URL http://www.ombudsoffice.ubc.ca/.

$ wget -S http://www.ombudsoffice.ubc.ca/
--15:12:49--  http://www.ombudsoffice.ubc.ca/
           => `index.html.3'
Resolving www.ombudsoffice.ubc.ca... 67.220.228.80
Connecting to www.ombudsoffice.ubc.ca|67.220.228.80|:80... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Date: Sun, 07 Feb 2010 14:18:31 GMT
  Server: Apache
  X-Powered-By: PHP/5.2.11
  X-Pingback: http://www.ombudsoffice.ubc.ca/xmlrpc.php
  Set-Cookie: PHPSESSID=9da99fe72307b2b27fd6d5fb3d515af8; path=/
  Connection: close
  Content-Type: text/html; charset=UTF-8
Length: unspecified [text/html]

President's Office

The President's Office has the URL http://www.president.ubc.ca/

$ wget -S http://www.president.ubc.ca/
--15:14:30--  http://www.president.ubc.ca/
           => `index.html.4'
Resolving www.president.ubc.ca... 137.82.105.16
Connecting to www.president.ubc.ca|137.82.105.16|:80... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Content-Length: 15234
  Content-Type: text/html
  Content-Location: http://www.president.ubc.ca/index.html
  Last-Modified: Fri, 15 Jan 2010 00:23:45 GMT
  Accept-Ranges: bytes
  ETag: "10007995ca1:663"
  Server: Microsoft-IIS/6.0
  X-Powered-By: ASP.NET
  Date: Sun, 07 Feb 2010 14:20:12 GMT
  Connection: keep-alive
Length: 15,234 (15K) [text/html]

Wayfinding at UBC

Wayfinding at UBC has the URL http://www.maps.ubc.ca/

wget -S http://www.maps.ubc.ca/
--15:16:18--  http://www.maps.ubc.ca/
           => `index.html.5'
Resolving www.maps.ubc.ca... 199.175.106.55, 199.175.106.53, 199.175.106.54, ...
Connecting to www.maps.ubc.ca|199.175.106.55|:80... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 302 Found
  Date: Sun, 07 Feb 2010 14:22:01 GMT
  Server: Apache
  X-Powered-By: PHP/4.4.4
  Location: /PROD/index.php
  Connection: close
  Content-Type: text/html
Location: /PROD/index.php [following]
--15:16:19--  http://www.maps.ubc.ca/PROD/index.php
           => `index.php'
Connecting to www.maps.ubc.ca|199.175.106.55|:80... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Date: Sun, 07 Feb 2010 14:22:01 GMT
  Server: Apache
  X-Powered-By: PHP/4.4.4
  Connection: close
  Content-Type: text/html
Length: unspecified [text/html]

Conclusion

I certainly found it interesting to investigate the UBC CLF a little. It's evident that it's implemented on different sites, servers and platforms. At a glance it looks like the look part and common navigation is common. I haven't got into whether the sites actually comply with the minimum or full profile, but some of the site specific color schemes does make them stick out. What would be very interesting to know is whether UBC had gotten to collect and analyse the effects in terms of user feedback, changed use behavior etc. Not often this information is picked up systematically nor made available online, so it's no surprise I didn't find it.
Without knowing the effect or cost I still want to congratulate UBC for their work and making the material availble online.

Read more

Sunday, January 17, 2010

Literature for the "Business IT Alignment" Course, ITU spring semester 2009

pencil icon, that"s clickable to start editing the post

In the spring semester of 2009 I've taken the course "Business IT Alignment". My preparation has been quite crippled by what seems to be a continuous stream of influenza that I've picked up since the day before new year (I've coined it The ultra-flu). In my effort to prepare for the exam I've several times found my self searching for the right articles and the related course slides, so here I've decided to create a post to build up that information (probably only of real interest for myself).

The Course seems to have run at least since 2005, with Lars Andersen taking part in 4 consecutive years. This semester with a completely new duo of teachers. The base reference is the course program [PDF]. Supplemented with the course homepage/slides from this and the previous semester:

Books

IT Governance: How Top Performers Manage IT Decision Rights for Superior Results

Spring 2009

Spring 2008


Innovation: The Five Disciplines for Creating What Customers Want

Spring 2009

Spring 2009


The Innovator's Dilemma: The Revolutionary Book that Will Change the Way You Do Business

Slides

Articles

Strategies for Information Technology Governance

Chapter II - Integration Strategies and Tactics for Information Technology Governance (pages 37-74).

Slides


"Linking the IT Balanced Scorecard to the Business Objectives at a Major Canadian Financial group" [PDF] Wim Van Grembergen, University of Antwerp (UFSIA),Ronald Saull, Information Services Divisions of Great-West Life, London Life, Investors Group Steven De Haes, University of Antwerp Management School (UAMS)

Spring 2009


Cultures of Technology And the Quest for Innovation.
The Introduction [PDF] (pages 1-23).

Spring 2009

Xtras for the eager pupil

"Using the Balanced Scorecard as a Strategic Management System" [PDF], Robert S. Kaplan, David P. Norton.

Read more

Tuesday, August 11, 2009

Resolving the XHTML1 DTD locally - avoiding problems with the W3C 503 access blocking

pencil icon, that"s clickable to start editing the post

Currently I'm doing a project that need some simple web scraping where I'm using CyberNeko HTML Parser (nekoHTML) which relies on Xerces. As I was running my first simple spike I encountered:

Exception in thread "main" java.io.IOException: 
Server returned HTTP response code: 503 for URL: http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd

Whaoo, my first guess was that the URL was wrong, but it turned out to be okay. After a quick search I found the reason to be a deliberate move as can be read on W3C Systems Team Blog post "W3C's Excessive DTD Traffic". The essence of the problem is:

..In particular, software does not usually need to fetch these resources, and certainly does not need to fetch the same one over and over! Yet we receive a surprisingly large number of requests for such resources: up to 130 million requests per day, with periods of sustained bandwidth usage of 350Mbps, for resources that haven't changed in years.

Oouch, that's a lot of bandwidth. I've heard of a simliar problem, though of much smaller scale, with Schemas for OIOUBL Invoice version 0.7 from the former ISBs (Info Structure Base) repository.

Solution

Lucklily it is quite easy to do right yourself with XML Catalogs, pulling from a local repository. cbowditchs guide "Resolving DTD system URI with XMLCatalogResolver" helped me a lot and I didn't have any problems with it like he had. First you'll need to fetch the DTD and it's depencies:

create a catalog file:

    1 <?xml version="1.0"?>
    2 <catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
    3   <public publicId="-//W3C//DTD XHTML 1.0 Transitional//EN"
    4           uri="xhtml1-transitional.dtd"/>
    5 </catalog>

and adding it's use to the code like:

..  
XMLCatalogResolver resolver = new XMLCatalogResolver();
resolver.setCatalogList(new String[] {"etc/dtd/xhtml1-catalog.xml"});

DOMParser parser = new DOMParser();
parser.setProperty("http://apache.org/xml/properties/internal/entity-resolver", resolver);
..

Read more

Monday, July 6, 2009

Performing a Conconi running test

pencil icon, that"s clickable to start editing the post

Second update: did a competition like 5 km run on 1. september and did a comparison. Updated: did a new test in the start of august which is compared at the bottom. I'm a typical gadget rich amateur athlete and my favorite tool is a Heart Rate Monitor (HRM). For many years it was my trusty Polar xTrainer, later Polar CS200C and for the last year a Garmin Forerunner 305. The HR is an indicator of the work/stress done, but to really put it into use it can be used to structure the workouts. Any matter the exact structuring you like there's the need for tests to identify some boundaries, primarily the anaerobic threshold. Another value of tests is to track progress through season. One test that everybody can do is the Conconi test and for the first time in a looong time I did one yesterday.

Background

Back in the late nineties I bought the book "Trening melkesyre hjertefrekvens", a norwegian translation of of Peter G. J. M. Janssen book Training Lactate Pulse-Rate. An excellent book that's easily read and based on facts around HRM training and riaerch with examples. The book recommends real lactate tests (for those that can afford it/professionals) or the Conconi test. Back when I bought the book I did several tests with varying success in terms of finding the anaerobic threshold (da: "knækpunktet"). I guess that there could be many reasons why my practical tests didn't follow the textbook: one being that I'm not top athlete.

While getting ready for the test yesterday I first remembered the theory falsely. My own subjective experience is that when truing to keep a high speed/pace extra pulse points (heart beats per minutes) doesn't seem to translate into speed, which lead my to think that after the threshold the pulse would increase with little increase in speed. That's just opposite to the book where the pulse doesn't increase much with speed since it's anaerobic!

The Test

I did the test on a treadmill since that'll give me an even pace, and after at 10 min warmup (maybe not hard enough) I was ready. I expected my threshold to be around 5 min/km (12 km/h) and started at 9,2 km/h and increased the speed with 0,4 km/h foreach 200 m, and ended at 14 km/h. Nothing impressive (I know) and I would have liked to reach 15 km/h, but is simply out of reach. I tracked my HR with the FR and made a voice recording where I said the speed and HR just before increasing speed, since this gives assurance that I didn't miss anything and was certain of the speed correlation that the FR knew nothing about. Here the workout as it's seen in SportsTracks:

There's a clear trend but it's a little bumpy. Putting the data into a table and producing a diagram with Calc give this graph:

It does not fit that clearly with the textbook as there is no real significant change, but that'll not hold me back! So here's my best guess:

According to this my anaerobic threshold should be at 162 bpm with a speed (pace) of 12,8 km/h (4:41 min/km).

Reflection

Funny enough this is similar to the tests I did approximately 10 years ago. It does seem a little high since my PB for 5 km is 24:40 (3 weeks ago) and I felt like 160 bpm was a limit. It can be true but certainly an important fact is that I bike much more than I run, so maybe i have cardiovascular capacity for this, but there more to than that.

This evening i tried a interval workout aiming for 160 bpm, which was quite hard to reach, but the pace was a little better. One thing is hitting the level, the theory says that it sould be able to kepp it for an hour, which i consider highly unlikely

New test in start of August

After about a month of training in my summer vacation I was eager to repeat the test and measure up my progress - what a disappointment! During the test I concluded that I had made no progress at all and in fact as the graph shows there's a general set back. Just like the first test there's no clear breaking point to indicate the threshold (just as Joe Friel has experienced).

I've got no real explanation for it. The conditions seemed very similar with a hot gym and my only ideas are that I did a much more thorough warmup and maybe a slight bit of flue. Another guess could be that progress is discrete and not as linear as some textbooks could indicate and I simply hadn't hit the next step.

My 5 km PB in the DHL Stafet 2009

I haven't participated in any competitions so this is my only competiton like result for comparison. It went fine with a PB of 23 minutes, the workout profile was like:<(p>

And my retro-splits were:

It should be added that this event is just as much a social as a sports event, and the last part was quite crinkly and crowded, but I could probably not cut off many more seconds at the present time and form.

With a pace of 4:36 min/km this in within proximity of a reasonable time compared with the tests. Since in principle I should be able to hold the LT for about an hour the 5 km pace should be considerable above LT.

Looking forward I've looked at a couple of prediction tables. First from the Furman institute EQUIVALENT PERFORMANCES AT DIFFERENT DISTANCES [PDF]:

and another one based on The McMillan Running Calculator :

They certainly raise my optimism with an outlook to a marathon in the range of 3:44 - I just hope I can keep up the pace for that long.

Links

Here's a list of links I've gathered while browsing for facts and examples on Conconi running test.

Read more

Friday, May 1, 2009

HTTP User-Agent from Nokia E71

pencil icon, that"s clickable to start editing the post

At work I have the pleasure of using a Nokia E71. I wanted to try out Google Maps for mobile as an alterntive to the nokia maps. The only way was to visit google through the browser in E71, and that way detect the device. It intrigued me to figure out how the UserAgent looked like, and be able to fake it with User Agent Switcher.

E71 Specification

Before just showing what turns up in the log files, here's what can be figured out from the specifications. The specification for Nokia E71 states that the Software platform and user interface uses S60 3.1 Edition, Eseries (Symbian Os 9.2). It lists the following features for Web browsing:

  • Supported markup languages: HTML, XHTML, MP, WML, CSS
  • Supported protocols: HTTP, WAP 2.0
  • TCP/IP support
  • Nokia browser
    • JavaScript version 1.3 and 1.5
    • Mini Map
  • Nokia Mobile Search
  • Nokia PC Internet Access (capability to serve as a data modem)

The Open Mobile Alliance(OMA) has defined and RDF Schema for technical device profiles and on their page for OMA Profile Data the UAProf V1.1 Candidate File (ccppschema-20021212) can be found. The specific profile for E71 has been long known and can be fetched at http://nds1.nds.nokia.com/uaprof/NE71-1r100.xml. In a comment block the User Agent is given:

 
<!-- ===================================================== -->
<!--                                                       -->

<!-- Version 1.1 16 Jul 2008                               -->
<!--                                                       -->
<!-- Valid beginning from version 1.00.0                   -->
<!-- User Agent Header: Mozilla/5.0(SymbianOS/9.2; U;      -->
<!--  Series60/3.1 NokiaE71/1.00.000; Profile/MIDP-2.0     -->
<!--  Configuration/CLDC-1.1;)AppleWebKit/413(KHTML,       -->
<!--  like Gecko)Safari/413                                -->
<!-- ===================================================== -->

User-Agent according to RFC 2616

In terms of HTTP RFC 2616 defines the User-Agent header. The W3C has a somewhat more accessible version than the plain IETF version: RFC 2616 - "Hypertext Transfer Protocol -- HTTP/1.1" and specific in "14.43 User-Agent":

The User-Agent request-header field contains information about the user agent originating the request. This is for statistical purposes, the tracing of protocol violations, and automated recognition of user agents for the sake of tailoring responses to avoid particular user agent limitations. User agents SHOULD include this field with requests. The field can contain multiple product tokens (section 3.8) and comments identifying the agent and any subproducts which form a significant part of the user agent. By convention, the product tokens are listed in order of their significance for identifying the application.

User-Agent = "User-Agent" ":" 1*( product | comment )

Example:

User-Agent: CERN-LineMode/2.15 libwww/2.17b3

The User-Agent's

My current User-Agent is:

"Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaE71-1/110.07.127; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413"

The UAProfile was:

"Mozilla/5.0(SymbianOS/9.2; U;  Series60/3.1 NokiaE71/1.00.000; Profile/MIDP-2.0 Configuration/CLDC-1.1;)AppleWebKit/413(KHTML, like Gecko)Safari/413"

I've aerlier looked at The UserAgent Signature from the Google Chrome browser_

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19

or

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13

Where Firefox can look like:

Mozilla/5.0 (Windows; U; Windows NT 5.1; da; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10

or

Mozilla/5.0 (Windows; U; Windows NT 5.1; da; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1

or

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16

Internet Explorer shows up like:

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)

or

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; InfoPath.2)

or

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2)

Read more

Wednesday, April 8, 2009

Efficient XML is in fact efficient!

pencil icon, that"s clickable to start editing the post

In the beginning of 2008 I wrote on "W3C drafts on Efficient XML Interchange, EXI - I didn't say binary XML". The specification is now a last call working draft from 19 September 2008. There has been both implementation and a test suite developed to test whether it in fact is efficient - and if you browse through their "Efficient XML Interchange Evaluation" you'll discover that in fact it is. They have also done a "Efficient XML Interchange (EXI) Impacts" analysis, and this conclusion is also positive:

EXI has been designed to be compatible with XML and can be introduced into the existing family of XML technologies without immediate disruption to XML-using applications. However, with certain modifications to existing XML-related specifications in the future it may be possible to achieve additional benefits when using EXI, still without disruption to existing XML-based applications. Furthermore, in a multi-application system where only some applications adopt EXI, sending EXI data to the other applications can potentially cause disruption, so care is needed to account for differing format support among the participating applications.

In terms of efficiency they have done various tests. I haven't looked into the test cases nor the technologies used for comparison but hope it's done as serious as the document looks like. They hav benchmarked it to existing technologies like Gzipped XML and ASN.1 for compactness.

...EXI is consistently smaller than gzipped XML regardless of document size, document structure or the availability of schema information. In some cases, EXI is over 10 times smaller than gzip. In addition, EXI works well in cases where gzip has little effect or even makes documents bigger, such as high volume streams of small messages typical of geolocation, financial exchange and sensor applications.

and

... Each EXI encoded file is smaller than the equivalent ASN.1 PER, and sometimes 20 times smaller. This holds true even for cases where EXI is preserving XML comments, processing instructions and namespace prefixes that are not preserved by ASN.1 PER. In addition, EXI works well in cases where ASN.1 PER actually increases the size of the document or fails to produce an encoding at all (e.g., due to schema deviations.)

Size is one thing but it could come at a processing cost, so they've tested that as well

The average decoding speed of EXI was 14.5 times faster than the average decoding speed of XML. The median speed increase was 6.7 times faster. To improve readibility, the graph does not show the four best cases, which ranged from 54 times faster to 257 times faster. These four test cases were SOAP web-service messages that were marshalled from a binding layer and contained repeating structures with elements and attributes from several different namespaces. As is typical for such use cases, the repeated structures contained a large number of repeated namespace declarations. EXI eliminates most of the overhead associated with namespace processing, which is why EXI achieved such a speed increase for these cases.

I guess these namespace declarations could be optimized just placing them at the root level, but I'm not sure if this would speed up the processing (and that i hurt that bad).

The graph above shows EXI decoding speed with compression compared to XML with compression. The average decoding speed of EXI was 9.2 times faster than the average decoding speed of GZipped XML. The median speed was 4.4 times faster. ...

Summary

I sure looks like EXI is comming to an end with a final working draft and test suite that ran with success. It will be interesting to see if it actually picks up speed and when? I haven't found any open source implementations yet. EXI may loose out due to not but good enough but from competition from Advanced Message Queuing Protocol, that goes for the same kind of nails and maybe fits a larger user base of classic messaging.

Read more

Monday, April 6, 2009

Updating my wireless Linksys devices

pencil icon, that"s clickable to start editing the post

The wonders of wireless network access are nothing short of fantastic. The only drawbacks in comparison to the wired variant would be that they need configuration (and not just cables) and that it introduces a new security risk. I try to maintain level of security, which also involves having non-trivial passwords - great for security but I have to remember them, and from time to time I fail on that. Though keeping an updated firmware has become more important since it has become a target for viruses and trojans. This post is a short writeup on my notes getting my wireless network up and running again.

Linksys WPS54G

I have just changed my ISP and swapped back to my old Linksys router and that went fine. It was when I wanted to updated my wireless printer server that ughh, no password no update. My printserver is a Linksys WPS54G (Version 2.0):

The data sheet can tell you about all the goodies, but I will say that from time to time I've seen some strange behavior with the administrator interfacer and read postings that suggest using IE 5 or a browser that faked that. My experience is also that when you got configured right and running it works like a charm.

I first had to reset it and according to the manual is should happen after pressing the reset button for about 10 seconds, that didn't work for me just printed the current configuration each time, but doing a unplug/plug followed by a reset did. I then used the desktop program to configure it, since I knew that the web-interface can be flaky. The configuration went without problems but do note that the default password is admin (without usename) but after changing the password the username has to be admin used with the new password.

I also updated the firmware version 6051 (08/21/2008) without any problems.

Linksys WRT54GS

While I was at it I had decided to updated the SSID and security model to WPA2(AES) so I also reconfigured my router a Linksys WRT54GS (version 1.1), that has served me well for a long time:

The password thing is just the same as with the WPS54G. I updated the firmware to Version 4.71.4, which according to the website was from 03/13/2008, but the router said 10/31/2007.

Read more

Saturday, March 28, 2009

Running my own SMS Service with Kannel and HUAWEI E180

pencil icon, that"s clickable to start editing the post

Mobile Services are becomming more and more common. Seven years ago I had the opportunity to develop some simpel SMS services, and SMS services is still the most common form of Mobile Services, though the mobile web is picking up momentum as well as custom Mobile Aplications. I decided to have a look at Mobile Services and to start with building a simple SMS Service. This blog post vil cover the basic setup and a later post the service part itself (though it's fairly easy).

Back in 2002 the company I worked for used both a commercial SMSC with billing etc., but we also ran our own SMSC to receive data carried by SMS. For our own SMSC we used Kannel which was quite easy to setup and run. I was please to see the Kannel project is still running.

I started by downloading the lastest stable release (version 1.4.3). Installing on my Fedora 10 Linux distribution was an easy classic ./configure, make, make install. The binary distribution comes with a sample SMSC configuration in the gw/smskannel.conf file. I only needed to update it with my local settings which involved figuring out the way to hook it up to my modem (the only part that was a bit problematic back then with a serial interface).

The Huawei E180 Modem

I have a Mobile Broadband ISP (flatrate) that comes with a USB modem (3G). The modem has the name E180, and can be seen on the Huawei device website HUAWEI E180 - HSPA USB Stick. The short specification list is: Support 2Mbps (5.76Mbps ready) HSUPA and 7.2Mbps HSDPA services Support SMS and Voice services. To find the manual is quite har since it's not available from Huawei's own support site, so through Google I found it [PDF] at the South African company Maredi's website. It carries the subtitle as flexiable as wings and it certainly is easy to use on both Linux and Windows, though I'm not sure I really like the metaphor on airplane wings.

After I insert the modem into a USB port the messages log showes something like:

Mar 28 07:47:11 kannel kernel: usb 2-1: new high speed USB device using ehci_hcd and address 3
Mar 28 07:47:11 kannel kernel: usb 2-1: configuration #1 chosen from 1 choice                 
Mar 28 07:47:11 kannel kernel: scsi3 : SCSI emulation for USB Mass Storage devices            
Mar 28 07:47:11 kannel kernel: scsi4 : SCSI emulation for USB Mass Storage devices            
Mar 28 07:47:11 kannel kernel: usb 2-1: New USB device found, idVendor=12d1, idProduct=1003   
Mar 28 07:47:11 kannel kernel: usb 2-1: New USB device strings: Mfr=2, Product=1, SerialNumber=0
Mar 28 07:47:11 kannel kernel: usb 2-1: Product: HUAWEI Mobile                                  
Mar 28 07:47:11 kannel kernel: usb 2-1: Manufacturer: HUAWEI Technology                         
Mar 28 07:47:11 kannel kernel: usb 2-1: USB disconnect, address 3                               
Mar 28 07:47:11 kannel pulseaudio[3309]: module-hal-detect.c: Error getting capability: org.freedesktop.Hal.NoSuchDevice: No device with id /org/freedesktop/Hal/devices/usb_device_ffffffff_ffffffff_noserial_scsi_host                                     
Mar 28 07:47:11 kannel pulseaudio[3309]: module-hal-detect.c: Error getting capability: org.freedesktop.Hal.NoSuchDevice: No device with id /org/freedesktop/Hal/devices/usb_device_ffffffff_ffffffff_noserial_0_scsi_host                                   
Mar 28 07:47:17 kannel kernel: usb 2-1: new high speed USB device using ehci_hcd and address 4                                 
Mar 28 07:47:17 kannel kernel: usb 2-1: configuration #1 chosen from 1 choice                                                  
Mar 28 07:47:17 kannel kernel: usb-storage: probe of 2-1:1.0 failed with error -5                                              
Mar 28 07:47:17 kannel kernel: usb-storage: probe of 2-1:1.1 failed with error -5                                              
Mar 28 07:47:18 kannel kernel: scsi7 : SCSI emulation for USB Mass Storage devices                                             
Mar 28 07:47:19 kannel kernel: scsi8 : SCSI emulation for USB Mass Storage devices                                             
Mar 28 07:47:19 kannel kernel: usb 2-1: New USB device found, idVendor=12d1, idProduct=1003                                    
Mar 28 07:47:19 kannel kernel: usb 2-1: New USB device strings: Mfr=2, Product=1, SerialNumber=0
Mar 28 07:47:19 kannel kernel: usb 2-1: Product: HUAWEI Mobile
Mar 28 07:47:19 kannel kernel: usb 2-1: Manufacturer: HUAWEI Technology
Mar 28 07:47:19 kannel kernel: usbcore: registered new interface driver usbserial
Mar 28 07:47:19 kannel kernel: usbserial: USB Serial support registered for generic
Mar 28 07:47:19 kannel kernel: usbcore: registered new interface driver usbserial_generic
Mar 28 07:47:19 kannel kernel: usbserial: USB Serial Driver core
Mar 28 07:47:19 kannel kernel: usbserial: USB Serial support registered for GSM modem (1-port)
Mar 28 07:47:19 kannel kernel: option 2-1:1.0: GSM modem (1-port) converter detected
Mar 28 07:47:19 kannel kernel: usb 2-1: GSM modem (1-port) converter now attached to ttyUSB0
Mar 28 07:47:19 kannel kernel: option 2-1:1.1: GSM modem (1-port) converter detected
Mar 28 07:47:19 kannel kernel: usb 2-1: GSM modem (1-port) converter now attached to ttyUSB1
Mar 28 07:47:19 kannel kernel: usbcore: registered new interface driver option
Mar 28 07:47:19 kannel kernel: option: USB Driver for GSM modems: v0.7.2
Mar 28 07:47:23 kannel kernel: scsi 7:0:0:0: CD-ROM            HUAWEI   Mass Storage     2.31 PQ: 0 ANSI: 2
Mar 28 07:47:23 kannel kernel: sr0: scsi-1 drive
Mar 28 07:47:23 kannel kernel: Uniform CD-ROM driver Revision: 3.20
Mar 28 07:47:23 kannel kernel: sr 7:0:0:0: Attached scsi generic sg2 type 5
Mar 28 07:47:24 kannel kernel: scsi 8:0:0:0: Direct-Access     HUAWEI   SD Storage       2.31 PQ: 0 ANSI: 2
Mar 28 07:47:24 kannel kernel: sd 8:0:0:0: [sdc] Attached SCSI removable disk
Mar 28 07:47:24 kannel kernel: sd 8:0:0:0: Attached scsi generic sg3 type 0
Mar 28 07:47:25 kannel NetworkManager:   (ttyUSB0): detected GSM modem via HAL capabilities
Mar 28 07:47:25 kannel NetworkManager:   (ttyUSB0): new Modem device (driver: 'option')
Mar 28 07:47:25 kannel NetworkManager:   (ttyUSB0): exported as /org/freedesktop/Hal/devices/usb_device_12d1_1003_noserial_if0_serial_usb_0
Mar 28 07:47:29 kannel NetworkManager:   (ttyUSB0): device state change: 1 -> 2
Mar 28 07:47:29 kannel NetworkManager:   (ttyUSB0): deactivating device (reason: 2).

Configure and run Bearerbox

The bearerbox part of the example configuration with just the needed changes, configuring the bearerbox and the two SMSC connections, the first one the fake SMSC and the other one my virtual SMSC based on my Huawei E180 modem:

# Needed - otherwise Kannel Bearerbox could not configure the modem correctly
include = doc/examples/modems.conf                                       

#---------------------------------------------                           
# CORE                                                                   
#---------------------------------------------                           
group = core
admin-port = 13000
smsbox-port = 13001
admin-password = bar
box-deny-ip = "*.*.*.*"      
box-allow-ip = "127.0.0.1"   

#---------------------------------------------
# SMSC CONNECTIONS                            
#                                             
# SMSC connections are created in bearerbox and they handle SMSC specific
# protocol and message relying. You need these to actually receive and send
# messages to handset, but can use GSM modems as virtual SMSCs             

# This is a fake smsc connection, _only_ used to test the system and services.
# It really cannot relay messages to actual handsets!                         
group = smsc
smsc = fake 
smsc-id = FAKE
port = 10000  
connect-allow-ip = 127.0.0.1


# My own 'virtual' SMSC with the HUAWEI E169 
group = smsc
smsc = at   
modemtype = auto
device = /dev/ttyUSB1
my-number = [TheTelephoneNumberOnTheSIM]
log-level = 0        
pin = [ThePINofTheSIM]

The Bearerbox is started with /opt/kannel-1.4.3/sbin/bearerbox -v 1 /home/kannel/Download/gateway-1.4.3/gw/smskannel.conf and the output is:

2009-03-28 07:55:26 [4193] [0] INFO: Debug_lvl = 1, log_file = , log_lvl = 0
2009-03-28 07:55:26 [4193] [0] WARNING: DLR: using default 'internal' for storage type.
2009-03-28 07:55:26 [4193] [0] INFO: DLR using storage type: internal
2009-03-28 07:55:26 [4193] [0] INFO: HTTP: Opening server at port 13000.
2009-03-28 07:55:26 [4193] [0] INFO: BOXC: 'smsbox-max-pending' not set, using default (100).
2009-03-28 07:55:26 [4193] [0] INFO: Set SMS resend frequency to 60 seconds.
2009-03-28 07:55:26 [4193] [0] INFO: SMS resend retry set to unlimited.
2009-03-28 07:55:26 [4193] [0] INFO: DLR rerouting for smsc id  disabled.
2009-03-28 07:55:26 [4193] [0] INFO: DLR rerouting for smsc id <(null)> disabled.
2009-03-28 07:55:26 [4193] [0] INFO: AT2[/dev/ttyUSB1]: configuration doesn't show modemtype. will autodetect
2009-03-28 07:55:26 [4193] [0] INFO: ----------------------------------------
2009-03-28 07:55:26 [4193] [0] INFO: Kannel bearerbox II version 1.4.3 starting
2009-03-28 07:55:26 [4193] [0] INFO: MAIN: Start-up done, entering mainloop
2009-03-28 07:55:26 [4193] [7] INFO: AT2[/dev/ttyUSB1]: opening device
2009-03-28 07:55:27 [4193] [7] INFO: AT2[/dev/ttyUSB1]: speed set to 115200
2009-03-28 07:55:29 [4193] [7] INFO: AT2[/dev/ttyUSB1]: Closing device
2009-03-28 07:55:29 [4193] [7] INFO: AT2[/dev/ttyUSB1]: detect speed is 115200
2009-03-28 07:55:29 [4193] [7] INFO: AT2[/dev/ttyUSB1]: opening device
2009-03-28 07:55:30 [4193] [7] INFO: AT2[/dev/ttyUSB1]: speed set to 115200
2009-03-28 07:55:32 [4193] [7] INFO: AT2[/dev/ttyUSB1]: Closing device
2009-03-28 07:55:32 [4193] [7] INFO: AT2[/dev/ttyUSB1]: opening device
2009-03-28 07:55:32 [4193] [7] INFO: AT2[/dev/ttyUSB1]: Logging in
2009-03-28 07:55:33 [4193] [7] INFO: AT2[/dev/ttyUSB1]: init device
2009-03-28 07:55:33 [4193] [7] INFO: AT2[/dev/ttyUSB1]: speed set to 115200
2009-03-28 07:55:33 [4193] [7] ERROR: AT2[/dev/ttyUSB1]: Generic error: ERROR
2009-03-28 07:55:33 [4193] [7] INFO: AT2[/dev/ttyUSB1]: cannot enable hardware handshake
2009-03-28 07:55:34 [4193] [7] INFO: AT2[/dev/ttyUSB1]: AT SMSC successfully opened.

Configuring and running the Smsbox

The Userguide has the complete options for SMSBOX configruation and the example configuration is just fine:

#---------------------------------------------
# SMSBOX SETUP                                
#                                             
# Smsbox(es) do higher-level SMS handling after they have been received from
# SMS centers by bearerbox, or before they are given to bearerbox for delivery

group = smsbox
bearerbox-host = 127.0.0.1
sendsms-port = 13013      
global-sender = 13013     
#log-file = "/tmp/smsbox.log"   
#log-level = 0                  

To use the SMSC for pushing SMS the SendSMS-user configuration is needed:

#---------------------------------------------
# SEND-SMS USERS
#
# These users are used when Kannel smsbox sendsms interface is used to
# send PUSH sms messages, i.e. calling URL like
# http://kannel.machine:13013/cgi-bin/sendsms?username=tester&password=foobar...

group = sendsms-user
username = tester
password = foobar
#user-allow-ip = ""

The normal SMS service is the ability to respond to SMS requests (SMS PULL) which is done with SMS-service configurations:

#---------------------------------------------
# SERVICES
#
# These are 'responses' to sms PULL messages, i.e. messages arriving from
# handsets. The response is based on message content. Only one sms-service is
# applied, using the first one to match.

group = sms-service
keyword = nop
text = "You asked nothing and I did it!"

# There should be always a 'default' service. This service is used when no
# other 'sms-service' is applied.

group = sms-service
keyword = default
text = "No service specified"

This is the most simple service just serving a static string (the value of text). The other and dynamic ways to respond to these requests I'll cover in another post.

Now I can start the SMSBox with /opt/kannel-1.4.3/sbin/smsbox -v 1 gw/smskannel.conf

2009-03-28 08:03:44 [4265] [0] INFO: Debug_lvl = 1, log_file = , log_lvl = 0
2009-03-28 08:03:44 [4265] [0] INFO: Service global sender set as '13013'
2009-03-28 08:03:44 [4265] [0] INFO: HTTP: Opening server at port 13013.
2009-03-28 08:03:44 [4265] [0] INFO: Set up send sms service at port 13013
2009-03-28 08:03:44 [4265] [0] INFO: Connected to bearerbox at 127.0.0.1 port 13001.

After starting these two services there are now a total of 4 open ports for fakesmsc, bearerbox and smsbox:

tcp        0      0 0.0.0.0:10000               0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:13000               0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:13001               0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:13013               0.0.0.0:*                   LISTEN

An example message flow

A simple demo can be run with the fakesmsc commandline tool like in ./test/fakesmsc -m 1 "12345678 87654321 text nop [the_parameters]":

2009-03-28 08:05:55 [4277] [0] INFO: Debug_lvl = -1, log_file = , log_lvl = 0
2009-03-28 08:05:55 [4277] [0] INFO: Host localhost Port 10000 interval 1.000 max-messages 1
2009-03-28 08:05:55 [4277] [0] INFO: fakesmsc starting
2009-03-28 08:05:55 [4277] [0] INFO: fakesmsc: sent message 1
2009-03-28 08:05:55 [4277] [0] INFO: Got message 1: <13013 12345678 text No service specified>

The Bearerbox logs:

2009-03-28 08:03:44 [4193] [5] INFO: Client connected from <127.0.0.1>
2009-03-28 08:05:55 [4193] [6] INFO: Fakesmsc client connected from 127.0.0.1

and the smsbox

2009-03-28 08:05:55 [4265] [4] INFO: Starting to service <nop [the_parameters]> from <12345678> to <87654321>

Summary

Using Kannel is still very easy to both compile, configure and run.

Read more