SlideShare a Scribd company logo
Easy as Pie – Developing Widgets
for IBM Connections
   About me
     ─With IntraVision – makers of OnTime®
      Group Calendar for Lotus Domino
     ─We've got stuff for IBM Connections
      too...
     ─An all together nice guy! :-)

   Agenda
     1)What are those widgets?
     2)Widget placement and modes
     3)Building the widget
     4)Server configuration                  1

     5)Breathe...
What are those widgets?
 Widgets in IBM Connections
     You may add widgets in Profiles, Communities and Homepage
     Most functionality in these features is actually widgets
     Widgets are made up of two parts
       ─ Widget configuration on the IBM Connections server
       ─ The actual widget written to the iWidget specification (JavaScript / XML / CSS)




                                                                                           2
Widget Placement
      and
 Widget Modes


   3
Widget modes
   There are a number of modes defined (view, edit, fullpage, search) but not all
    modes are supported in all features (fullpage and search only in Communities)
   Widgets may contribute multiple modes
   Administrator may choose to use some and not all modes contributed




                                                                       4
Widget modes
   There are a number of modes defined (view, edit, fullpage, search) but not all
    modes are supported in all features (fullpage and search only in Communities)
   Widgets may contribute multiple modes
   Administrator may choose to use some and not all modes contributed




                                                                       5
Widget modes
   There are a number of modes defined (view, edit, fullpage, search) but not all
    modes are supported in all features (fullpage and search only in Communities)
   Widgets may contribute multiple modes
   Administrator may choose to use some and not all modes contributed




                                                                       6
Configuration on the server




         7
Widget configuration in widgets-config.xml




                                             (unless using
                                             extreme care)




                                                8
Widget attributes makes the widget configurable
   It doesn't make sense to hard code or at least not supply sensible defaults and
    widget attributes can be used for configuration
   String key/value pairs may be supplied – interpretation of the value is up to the
    widget though
   Some values cannot be specified in widgets-config.xml as they may change
    based on IBM Connections configuration (such as context root i.e. “/dogear” /
    “/bookmarks”) or the ID of the active profile / community
   Special values are enclosed in curly braces – i.e.
     ─ {resourceId} profileKey of current Profiles user or communityUnid if in Communities
     ─ {contextRoot} Context root of the current feature (i.e. “/profiles”)




                                                                                     9
Widget attributes makes the widget configurable




                                                  10
Say hello to iWidgets
   In IBM Connections widgets are iWidgets i.e. written to the iWidget
    specification
      ─ …and then there are OpenSocial gadgets but that's another session
   Widgets are made up of a widget descriptor (referenced in widgets-config.xml)
    and the code the make the widget do stuff (HTML, CSS, JavaScript)
   The widget descriptor describes supported modes, startup mode, “iScope
    class” (more in a bit) and required resources (optional)
   Static widget content for each mode may also be supplied




                                                                    11
Widget Descriptors




    12
Widget descriptor – more in depth




                                    13
Widget descriptor – more in depth




                                    14
Widget descriptor – more in depth




                                    15
Widget descriptor – more in depth




                                    16
Widget descriptor – more in depth




                                    17
Widget descriptor – more in depth




                                    18
Coding the Widget




    19
iScope




●   Access to dojo version 1.4.1 (highly customized for IBM Connections)   20

●   You do not have to use dojo to declare the class...
iContext
   An iContext instance is automatically set into the iScope class
   The iContext provides access to the widget markup (e.g. root element), I/O
    related functions (i.e. URL rewriting), widget attributes etc.
   The iContext is easily accessed from the iScope class using this.iContext
   Important functions include:
     ─ iContext.getRootElement() : DOM Element
     ─ iContext.getElementById(id:string) : DOM Element
     ─ iContext.getiWidgetAttributes() : ItemSet
     ─ iContext.getUserProfile() : ItemSet
     ─ iContext.io.rewriteURI(uri:string) : string
     ─ iContext.iEvents.fireEvent(name:string, type:string, payload:object)


   You retrieve information from an ItemSet using getItemValue(name:string)


                                                                     21
Using iContext




                 22
Using iEvents




                23
Same Origin Policy and the
      AJAX Proxy



        24
What's your origin?
   In browsers JavaScript is governed by the Same Origin Policy
   When JavaScript runs in the browser it may only load resources (XHR's)
    from the server the script itself was loaded from
   Same server means:
      ─ Same hostname / IP
      ─ Same port number
   To work around this we use an
    AJAX proxy to proxy the request
    through the same server we
    loaded the JavaScript from




                                                                     25
Using the AJAX proxy
   Using the AJAX proxy consists of 3 steps
     1)Decide and/or compose the URL to the resource to load
     2)Rewrite the URL so it will go through the proxy
     3)Load the resource using the rewritten URL

   IBM Connections supplies us with a proxy
     ─ But again – beware! The way you use the proxy in code isn't really –
       hmmmm lets say - fully implemented or implemented very well
     ─ You use the iContext.io to rewrite the URL but dojo or plain ol' XHR to
       load the ressource as the iContext.io.request method isn't implemented
       in the IBM Connections iWidget container



                                                                      26
AJAX proxy Example




If running in Profiles the proxy will be http://<host>/profiles/ajaxProxy
                                                                                27
Above request will be http://<host>/profiles/ajaxProxy/http/www.google.com/search?q=Lotusphere
Proxy security
   Access through the proxy is disallowed by default
   You have to allow access on a per hostname and method
    type (GET, POST, DELETE etc.) basis (or open for all
    hostnames / methods although not recommended)
   Do remember to allow access for specific headers / cookies
    (i.e. to reuse LtpaToken)                                    (unless using
                                                                 extreme care)
   Proxy configuration done in proxy-config.tpl on
    the IBM Connections server




                                                                   28
Network latency kills web application performance...
   Cache as such as possible, combine multiple files into one minified version and
    utilize gzip...
   Repeat after me: “Latency, latency, latency, latency, latency, latency, latency,
    latency, latency, latency, latency, latency, latency, latency, latency, latency,
    latency, latency, latency, latency, latency, latency, latency, latency, latency,
    latency, latency, latency, latency, latency, latency, latency, latency, latency,
    latency, latency, latency, latency, latency, latency, latency, latency, latency,
    latency, latency, latency, latency, latency, latency, latency, latency, latency,
    latency, latency, latency, latency, latency, latency, latency, latency, latency,
    latency, latency, latency, latency, latency, latency, latency, latency, latency,
    latency, latency, latency, latency, latency, latency, latency, latency, latency,
    latency, latency, latency, latency, latency, latency, latency, latency, latency,
    latency, latency, latency, latency, latency, latency, latency, latency, latency,
    latency, latency, latency, latency, latency, latency, latency, latency, latency,
    latency, latency, latency, latency, latency, latency, latency, latency, latency,
    latency, latency, latency, latency, latency, latency, latency, latency, latency,
    latency, latency, latency, latency, latency, latency, latency, latency.....
                                                                          29
Summary
   Most functionality in IBM Connections is widgets and you can add your own
   Bringing your applications into IBM Connections and thus providing in-context
    access is very valuable
   Widgets are quite easy to develop using JavaScript and CSS although you must
    know about asynchronous JavaScript
   iWidgets, iScope, iContext, iEvents...
   Start small and build from there

   End-to-end video example on widget development
    on my blog by Monday

   Happy coding!!


    End-to-end video example on widget development                  30


                 on my blog by Monday
Q&A
   But?, How?, Doesn't that mean...
   Give it to me! (or come talk to me
    after the session...)

   T: @lekkim
    E: mh@intravision.dk
    B: http://lekkimworld.com




   http://www.ontimesuite.com
                                         31

More Related Content

PPTX
20120722 word press
PPTX
Client-Side Packages
PDF
Built to Last
PDF
Dojo toolkit
PDF
Zero To Dojo
PPT
The Dojo Toolkit An Introduction
PDF
Advanced liferay architecture clustering and high availability
PDF
Advanced guide to develop ajax applications using dojo
20120722 word press
Client-Side Packages
Built to Last
Dojo toolkit
Zero To Dojo
The Dojo Toolkit An Introduction
Advanced liferay architecture clustering and high availability
Advanced guide to develop ajax applications using dojo

What's hot (10)

PDF
Complete Dojo
PPTX
Java beans
PPT
Introduction To Dojo
PPT
Chromium vs. Firefox
PDF
Develop plugin for Mozilla Firefox and structure a JS-based application
PDF
iPhonical and model-driven software development for the iPhone
PDF
GlassFish v3 Lite Admin Console
PPTX
Javabeans
PDF
Introduction to OSGi (Tokyo JUG)
PDF
Wix Application Framework
Complete Dojo
Java beans
Introduction To Dojo
Chromium vs. Firefox
Develop plugin for Mozilla Firefox and structure a JS-based application
iPhonical and model-driven software development for the iPhone
GlassFish v3 Lite Admin Console
Javabeans
Introduction to OSGi (Tokyo JUG)
Wix Application Framework
Ad

Viewers also liked (18)

PPT
Lotusphere BoF - Working with the Lotus Connections API
PPT
Ignite Timer
PDF
BP301 - An introduction to working with the activity stream
ODP
PPTX
Introduction to OAuth
PPTX
IBM Connect 2016: 1402 - Getting Technically Cozy with IBM Connections Cloud ...
PPTX
Introduction to OAuth 2.0 - the technology you need but never really learned
PDF
BP205: There’s an API for that! Why and how to build on the IBM Connections P...
PDF
La collaborazione europea continua
PDF
How to increase social adoption - meetIT 2016, Milano
PPTX
Integrate Applications into IBM Connections Cloud and On Premises (AD 1632)
PPTX
API & Custom Widgets coming in XCC next - Web Content and Custom App Extensio...
PDF
24 Ways to Enhance IBM Connections with XCC – Web Content & Custom Apps Exte...
PPTX
IBM Connections 5 Gæstemodel
PPTX
An Introduction to Working With the Activity Stream
PPT
1309 leveraging social business data visualizing the connections org structure
PPTX
IBM Connections Cloud Application Development Strategy
PDF
API Connect Presentation
Lotusphere BoF - Working with the Lotus Connections API
Ignite Timer
BP301 - An introduction to working with the activity stream
Introduction to OAuth
IBM Connect 2016: 1402 - Getting Technically Cozy with IBM Connections Cloud ...
Introduction to OAuth 2.0 - the technology you need but never really learned
BP205: There’s an API for that! Why and how to build on the IBM Connections P...
La collaborazione europea continua
How to increase social adoption - meetIT 2016, Milano
Integrate Applications into IBM Connections Cloud and On Premises (AD 1632)
API & Custom Widgets coming in XCC next - Web Content and Custom App Extensio...
24 Ways to Enhance IBM Connections with XCC – Web Content & Custom Apps Exte...
IBM Connections 5 Gæstemodel
An Introduction to Working With the Activity Stream
1309 leveraging social business data visualizing the connections org structure
IBM Connections Cloud Application Development Strategy
API Connect Presentation
Ad

Similar to Easy as pie creating widgets for ibm connections (20)

PDF
BP207 - Easy as pie creating widgets for ibm connections
PDF
What's new in Portal and WCM 8.5
PPTX
Micro-Frontends JSVidCon
PDF
AD109 - Using the IBM Sametime Proxy SDK: WebSphere Portal, IBM Connections -...
PDF
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013
PDF
ASP.NET MVC Workshop for Women in Technology
DOCX
Diff sand box and farm
PDF
Top 10 IDEs for React.js Developers in 2021
PPT
Intro lift
PDF
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
PDF
Demystifying Docker
PPTX
Demystifying Docker101
PPTX
DOs and DONTs on the way to 10M users
PDF
Adopting Grails - GR8Conf Europe
PDF
GR8Conf 2011: Adopting Grails
ODP
oVirt UI Plugin Infrastructure and the oVirt-Foreman plugin
PDF
Liferay UG Meetup #8 - Portal 7.3 + portlets com nodeJS - 2020-03-04
PDF
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
PPTX
VisualWeb - Building a NodeJS Server Meshwork and Full-Javascript Stack Frame...
PDF
Word press, the automated way
BP207 - Easy as pie creating widgets for ibm connections
What's new in Portal and WCM 8.5
Micro-Frontends JSVidCon
AD109 - Using the IBM Sametime Proxy SDK: WebSphere Portal, IBM Connections -...
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013
ASP.NET MVC Workshop for Women in Technology
Diff sand box and farm
Top 10 IDEs for React.js Developers in 2021
Intro lift
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
Demystifying Docker
Demystifying Docker101
DOs and DONTs on the way to 10M users
Adopting Grails - GR8Conf Europe
GR8Conf 2011: Adopting Grails
oVirt UI Plugin Infrastructure and the oVirt-Foreman plugin
Liferay UG Meetup #8 - Portal 7.3 + portlets com nodeJS - 2020-03-04
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
VisualWeb - Building a NodeJS Server Meshwork and Full-Javascript Stack Frame...
Word press, the automated way

More from LetsConnect (20)

PDF
Installing Component Pack 6.0.0.6
PPTX
Oh $h@# - How to deal with emotional outbursts and hate in social situations
PPTX
It is not About Connections vs Office 365 - You can have the best of the both...
PPTX
Using ibm connections to enhance university courses
PPTX
IBM Connections 6 Component Pack
PPTX
IBM Connections 6.0 CR3 New Features
PDF
10 years of IBM Connections
PDF
IBM Collaboration Framework in action: Customer success stories
PDF
Design for the Digital Workspace
PDF
New Ways to Deliver Business Outcomes with INtelligent Workstream Collaboration
PDF
Power up your Salesforce Opportunities by using IBM Watson Workspace as your ...
PDF
There is nothing more practical than a good theory
PDF
Kubernetes Basics for Connections Admins
PDF
Intelligent Collaboration driving Digital Transformation
PDF
Developing IBM Connections Community Apps using Domino
PDF
IBM Connections - Have it YOUR Way!
PDF
You Get What You Give
PDF
Building Custom ibm Watson Workspace Templates to make you and your team more...
PDF
ICS INtegration with Node-RED and Open Source
PDF
Communities as the fundament of social learning
Installing Component Pack 6.0.0.6
Oh $h@# - How to deal with emotional outbursts and hate in social situations
It is not About Connections vs Office 365 - You can have the best of the both...
Using ibm connections to enhance university courses
IBM Connections 6 Component Pack
IBM Connections 6.0 CR3 New Features
10 years of IBM Connections
IBM Collaboration Framework in action: Customer success stories
Design for the Digital Workspace
New Ways to Deliver Business Outcomes with INtelligent Workstream Collaboration
Power up your Salesforce Opportunities by using IBM Watson Workspace as your ...
There is nothing more practical than a good theory
Kubernetes Basics for Connections Admins
Intelligent Collaboration driving Digital Transformation
Developing IBM Connections Community Apps using Domino
IBM Connections - Have it YOUR Way!
You Get What You Give
Building Custom ibm Watson Workspace Templates to make you and your team more...
ICS INtegration with Node-RED and Open Source
Communities as the fundament of social learning

Recently uploaded (20)

PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Electronic commerce courselecture one. Pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Encapsulation theory and applications.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Network Security Unit 5.pdf for BCA BBA.
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
Spectral efficient network and resource selection model in 5G networks
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Digital-Transformation-Roadmap-for-Companies.pptx
Electronic commerce courselecture one. Pdf
Advanced methodologies resolving dimensionality complications for autism neur...
Mobile App Security Testing_ A Comprehensive Guide.pdf
20250228 LYD VKU AI Blended-Learning.pptx
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Encapsulation theory and applications.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Diabetes mellitus diagnosis method based random forest with bat algorithm
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
MIND Revenue Release Quarter 2 2025 Press Release
Network Security Unit 5.pdf for BCA BBA.
“AI and Expert System Decision Support & Business Intelligence Systems”
Dropbox Q2 2025 Financial Results & Investor Presentation
Unlocking AI with Model Context Protocol (MCP)
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Per capita expenditure prediction using model stacking based on satellite ima...

Easy as pie creating widgets for ibm connections

  • 1. Easy as Pie – Developing Widgets for IBM Connections  About me ─With IntraVision – makers of OnTime® Group Calendar for Lotus Domino ─We've got stuff for IBM Connections too... ─An all together nice guy! :-)  Agenda 1)What are those widgets? 2)Widget placement and modes 3)Building the widget 4)Server configuration 1 5)Breathe...
  • 2. What are those widgets? Widgets in IBM Connections  You may add widgets in Profiles, Communities and Homepage  Most functionality in these features is actually widgets  Widgets are made up of two parts ─ Widget configuration on the IBM Connections server ─ The actual widget written to the iWidget specification (JavaScript / XML / CSS) 2
  • 3. Widget Placement and Widget Modes 3
  • 4. Widget modes  There are a number of modes defined (view, edit, fullpage, search) but not all modes are supported in all features (fullpage and search only in Communities)  Widgets may contribute multiple modes  Administrator may choose to use some and not all modes contributed 4
  • 5. Widget modes  There are a number of modes defined (view, edit, fullpage, search) but not all modes are supported in all features (fullpage and search only in Communities)  Widgets may contribute multiple modes  Administrator may choose to use some and not all modes contributed 5
  • 6. Widget modes  There are a number of modes defined (view, edit, fullpage, search) but not all modes are supported in all features (fullpage and search only in Communities)  Widgets may contribute multiple modes  Administrator may choose to use some and not all modes contributed 6
  • 8. Widget configuration in widgets-config.xml (unless using extreme care) 8
  • 9. Widget attributes makes the widget configurable  It doesn't make sense to hard code or at least not supply sensible defaults and widget attributes can be used for configuration  String key/value pairs may be supplied – interpretation of the value is up to the widget though  Some values cannot be specified in widgets-config.xml as they may change based on IBM Connections configuration (such as context root i.e. “/dogear” / “/bookmarks”) or the ID of the active profile / community  Special values are enclosed in curly braces – i.e. ─ {resourceId} profileKey of current Profiles user or communityUnid if in Communities ─ {contextRoot} Context root of the current feature (i.e. “/profiles”) 9
  • 10. Widget attributes makes the widget configurable 10
  • 11. Say hello to iWidgets  In IBM Connections widgets are iWidgets i.e. written to the iWidget specification ─ …and then there are OpenSocial gadgets but that's another session  Widgets are made up of a widget descriptor (referenced in widgets-config.xml) and the code the make the widget do stuff (HTML, CSS, JavaScript)  The widget descriptor describes supported modes, startup mode, “iScope class” (more in a bit) and required resources (optional)  Static widget content for each mode may also be supplied 11
  • 13. Widget descriptor – more in depth 13
  • 14. Widget descriptor – more in depth 14
  • 15. Widget descriptor – more in depth 15
  • 16. Widget descriptor – more in depth 16
  • 17. Widget descriptor – more in depth 17
  • 18. Widget descriptor – more in depth 18
  • 20. iScope ● Access to dojo version 1.4.1 (highly customized for IBM Connections) 20 ● You do not have to use dojo to declare the class...
  • 21. iContext  An iContext instance is automatically set into the iScope class  The iContext provides access to the widget markup (e.g. root element), I/O related functions (i.e. URL rewriting), widget attributes etc.  The iContext is easily accessed from the iScope class using this.iContext  Important functions include: ─ iContext.getRootElement() : DOM Element ─ iContext.getElementById(id:string) : DOM Element ─ iContext.getiWidgetAttributes() : ItemSet ─ iContext.getUserProfile() : ItemSet ─ iContext.io.rewriteURI(uri:string) : string ─ iContext.iEvents.fireEvent(name:string, type:string, payload:object)  You retrieve information from an ItemSet using getItemValue(name:string) 21
  • 24. Same Origin Policy and the AJAX Proxy 24
  • 25. What's your origin?  In browsers JavaScript is governed by the Same Origin Policy  When JavaScript runs in the browser it may only load resources (XHR's) from the server the script itself was loaded from  Same server means: ─ Same hostname / IP ─ Same port number  To work around this we use an AJAX proxy to proxy the request through the same server we loaded the JavaScript from 25
  • 26. Using the AJAX proxy  Using the AJAX proxy consists of 3 steps 1)Decide and/or compose the URL to the resource to load 2)Rewrite the URL so it will go through the proxy 3)Load the resource using the rewritten URL  IBM Connections supplies us with a proxy ─ But again – beware! The way you use the proxy in code isn't really – hmmmm lets say - fully implemented or implemented very well ─ You use the iContext.io to rewrite the URL but dojo or plain ol' XHR to load the ressource as the iContext.io.request method isn't implemented in the IBM Connections iWidget container 26
  • 27. AJAX proxy Example If running in Profiles the proxy will be http://<host>/profiles/ajaxProxy 27 Above request will be http://<host>/profiles/ajaxProxy/http/www.google.com/search?q=Lotusphere
  • 28. Proxy security  Access through the proxy is disallowed by default  You have to allow access on a per hostname and method type (GET, POST, DELETE etc.) basis (or open for all hostnames / methods although not recommended)  Do remember to allow access for specific headers / cookies (i.e. to reuse LtpaToken) (unless using extreme care)  Proxy configuration done in proxy-config.tpl on the IBM Connections server 28
  • 29. Network latency kills web application performance...  Cache as such as possible, combine multiple files into one minified version and utilize gzip...  Repeat after me: “Latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency, latency..... 29
  • 30. Summary  Most functionality in IBM Connections is widgets and you can add your own  Bringing your applications into IBM Connections and thus providing in-context access is very valuable  Widgets are quite easy to develop using JavaScript and CSS although you must know about asynchronous JavaScript  iWidgets, iScope, iContext, iEvents...  Start small and build from there  End-to-end video example on widget development on my blog by Monday  Happy coding!! End-to-end video example on widget development 30 on my blog by Monday
  • 31. Q&A  But?, How?, Doesn't that mean...  Give it to me! (or come talk to me after the session...)  T: @lekkim E: mh@intravision.dk B: http://lekkimworld.com  http://www.ontimesuite.com 31