Binary file OSCON/Icon.png has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/Info.plist Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Nokia//DTD PLIST 1.0//EN" "http://www.nokia.com/DTDs/plist-1.0.dtd">
+<plist version="1.0">
+ <dict>
+ <key>DisplayName</key>
+ <string>OSCON</string>
+ <key>Identifier</key>
+ <string>com.symbian.oscon.widget</string>
+ <key>Version</key>
+ <string>1.0</string>
+ <key>MainHTML</key>
+ <string>index.html</string>
+ <key>AllowNetworkAccess</key>
+ <true/>
+ <key>MiniViewEnabled</key>
+ <false/>
+ </dict>
+</plist>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/Main.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,329 @@
+// ////////////////////////////////////////////////////////////////////////////
+// Symbian Foundation Example Code
+//
+// This software is in the public domain. No copyright is claimed, and you
+// may use it for any purpose without license from the Symbian Foundation.
+// No warranty for any purpose is expressed or implied by the authors or
+// the Symbian Foundation.
+// ////////////////////////////////////////////////////////////////////////////
+
+var uiManager;
+var home;
+var mainView;
+var osconIcalUrl = new Array();
+var icalData = new Array();
+var icalReader = new Array();
+var osconDays = new Array();
+var http;
+var downloadDayIndex = -1;
+
+// Called from the onload event handler to initialize the widget.
+function init() {
+
+ for (var i = 0; i < 5; i++) {
+ var osconDay = new Date()
+ osconDay.setFullYear(2009, 6, 20 + i);
+ osconDays.push(osconDay);
+ osconIcalUrl.push("OSCON200907" + (20+i) + ".ics");
+ icalData.push(null);
+ icalReader.push(null);
+ }
+
+ // set tab-navigation mode and show softkeys
+ // (only if we are in the WRT environment)
+ if (window.widget) {
+ //create about menu
+
+ widget.setNavigationEnabled(false);
+ menu.showSoftkeys();
+ }
+
+ // create UI manager
+ uiManager = new UIManager();
+
+ home = new ListView(null,null);
+
+ var homeViewImage = new ImageLabel(null, null, "oscon-home.png");
+ // hack to center image
+ homeViewImage.contentElement.style.textAlign = "center";
+ home.addControl(homeViewImage);
+
+ var homeViewImage2 = new ImageLabel(null, null, "logo.png");
+ // hack to center image
+ homeViewImage2.contentElement.style.textAlign = "center";
+ home.addControl(homeViewImage2);
+
+ mainView = new ListView(null, "<img src=oscon-home.png>");
+
+
+ for (var i = 0; i < osconDays.length; i++) {
+ var button = new NavigationButton(i, "day"+(i+1)+".png", dateToString(osconDays[i]));
+ mainView.addControl(button);
+ button.addEventListener("ActionPerformed", function(event){
+ var clickedButton = event.source;
+ var clickedId = clickedButton.id;
+ showDay(clickedId, osconDays[clickedId], null);
+ });
+ }
+
+ home.show();
+ mainView.previousView = null;
+ uiManager.showNotification(-1, "wait", "Please wait...", -1);
+ setTimeout(function(){ uiManager.hideNotification();mainView.show();}, 1000);
+}
+
+
+function showDay(dayIndex, date) {
+ downloadDayIndex = dayIndex;
+ if ( icalReader[dayIndex] == null ) {
+ setTimeout(function(){ downloadIcalData(downloadDayIndex);}, 100);
+ } else {
+ showList(date, null);
+ }
+}
+
+function downloadIcalData(dayIndex) {
+ downloadDayIndex = dayIndex;
+
+ http = new Ajax();
+ http.onreadystatechange = function() { downloadStateChanged(); };
+
+ // initiate the request
+ http.open("GET", osconIcalUrl[downloadDayIndex], true);
+ http.send(null);
+}
+
+function downloadStateChanged(){
+ // complete request?
+ if (http.readyState == 4) {
+ // attempt to get response status
+ var responseStatus = null;
+ try {
+ responseStatus = http.status;
+ } catch (noStatusException) {}
+
+ // are we being prompted for login?
+ icalData[downloadDayIndex] = http.responseText;
+ try {
+ dataAvailable(downloadDayIndex);
+// savePreferences();
+ }catch(x) {
+ uiManager.showNotification(5000, "warning", "Error processing feed");
+ }
+ downloadInProgress = false;
+ }
+}
+
+function dataAvailable(downloadDayIndex){
+ uiManager.showNotification(-1, "wait", "Parsing info...", -1);
+ // parse iCal
+ var reader = new iCalReader(); // Construction of the reader object.
+ reader.prepareData(icalData[downloadDayIndex]); // Prepare and set the data for the parser.
+ reader.parse(); // Parse the data.
+ reader.sort(); // Sort the data.
+ icalReader[downloadDayIndex] = reader;
+ showList(osconDays[downloadDayIndex], null);
+ uiManager.hideNotification();
+}
+
+function showList(day, session) {
+ var list = new ListView(null, "<img src=oscon-home.png>");
+ if (day) {
+ var button = new ImageLabel(null, dateToString(day), "day"+(downloadDayIndex+1)+".png");
+ list.addControl(button);
+ }
+ if (session) {
+ var button = new ImageLabel(null, sessionTimeToString(session) + ", " + dateToString(session) , "session.png");
+ list.addControl(button);
+ }
+
+ var myCalReader = icalReader[downloadDayIndex];
+ var events = myCalReader.getCalendar().getEvents(); // Get all events.
+ var num = myCalReader.getCalendar().getNrOfEvents();
+
+ var addedSessions = new Array();
+
+
+ for(var i=0; i<num; i++) { // Loop through all events.
+
+ var event = myCalReader.getCalendar().getEventAtIndex(i); // A single event.
+
+ // Get Javascript date for start and end time.
+ var startDate = event.getStartDate();
+ var altStartDate = null;
+ try {
+ altStartDate = event.getAltStartDate();
+ } catch(z) {
+ altStartDate = startDate;
+ }
+ var timeZone = event.getTimeZone();
+
+ if ( day ) {
+ if ( ! dayMatches(day, startDate) ) {
+ continue;
+ } else {
+ var haveit = false;
+ // if session is not in already, add it
+ for (var j = 0 ; j < addedSessions.length ; j++ ) {
+ if ( sessionMatches(addedSessions[j], altStartDate ) ) {
+ haveit = true;
+ break;
+ }
+ }
+ if (!haveit) {
+ // add it
+ addedSessions.push(altStartDate);
+ var button = new NavigationButton(altStartDate.getTime(), "session.png", "Session @ "+ sessionTimeToString(altStartDate));
+ button.addEventListener("ActionPerformed", function(event){
+ var clickedButton = event.source;
+ var clickedId = clickedButton.id;
+ var ed = new Date();
+ ed.setTime(clickedId);
+ showList(null, ed);
+ });
+ list.addControl(button);
+ }
+ continue;
+ }
+ }
+ else if ( ! sessionMatches(session, startDate) ) {
+ continue;
+ }
+
+
+ // add events
+ var endDate = event.getEndDate();
+ var location = event.getProperty("LOCATION");
+ var summary = event.getProperty("SUMMARY");
+ var description = event.getProperty("DESCRIPTION");
+ var url = event.getProperty("URL");
+
+ var buf = "";
+ buf += "<div class=\"FeedItemDate\">" ;
+ if ( location != null ) {
+ buf += location + ", ";
+ }
+ buf += sessionTimeToString(startDate) +"-" + sessionTimeToString(endDate) + " " + timeZone + "</div>";
+ buf += "<div class=\"FeedItemDescription\">" + description + "</div>";
+ if (url != null) {
+ buf += "<div class=\"FeedItemLink\">";
+ buf += "<a href=\"JavaScript:void(0)\" onclick=\"openURL('" + url + "'); return false;\">";
+ buf += "Read more...";
+ buf += "</a>";
+ buf += "</div>";
+ }
+
+ var cp = new ContentPanel(null, null, null, true);
+
+ // initialize feed item control
+ cp.setCaption(summary);
+ cp.setContent(buf);
+ cp.setExpanded(false);
+ list.addControl(cp);
+ } // End for each event.
+ list.previousView = uiManager.currentView;
+ mainView.previousView = null;
+ list.show();
+}
+
+
+// Loads widget preferences.
+function loadPreferences() {
+ if (window.widget) {
+ // load settings from widget preferences store
+ icalData = widget.preferenceForKey("icalData");
+ }
+}
+
+// Loads widget preferences.
+function savePreferences() {
+ if (window.widget) {
+ // save settings in widget preferences store
+ widget.setPreferenceForKey(icalData, "icalData");
+ }
+}
+
+
+
+function setDefaultFontSizeForScreenSize(){
+ // first check if there is a preference present
+ if (window.widget) {
+ var saved = widget.preferenceForKey("fontsize");
+ if ( widget.preferenceForKey("fontsize") ) {
+ setCssBodyFontSize(parseInt(saved));
+ }
+ else {
+ // no preference available, check screen size
+ if (window.screen.width > 400 || window.screen.height > 400) {
+ // hi res screen, use large font
+ setCssBodyFontSize(18);
+ }
+ else {
+ // lo res screen, use small font
+ setCssBodyFontSize(14);
+ }
+ }
+ }
+}
+
+
+function nocache(url) {
+ if (url.indexOf("?") == -1) {
+ url += "?";
+ } else {
+ url += "&";
+ }
+ url += "nocache=" + (new Date().getTime());
+ return url;
+}
+
+
+function sessionMatches(session, startDate) {
+ var m_date = session.getDate()==startDate.getDate();
+ var m_year = session.getFullYear()==startDate.getFullYear();
+ var m_month = session.getMonth()==startDate.getMonth();
+ var m_hour = session.getHours()==startDate.getHours();
+ var m_minute = session.getMinutes()==startDate.getMinutes();
+ return m_date && m_month && m_year && m_hour && m_minute;
+}
+
+function dayToString(day) {
+ return day.toDateString();
+}
+
+function dayMatches(day, startDate){
+ var m_date = day.getDate()==startDate.getDate();
+ var m_year = day.getFullYear()==startDate.getFullYear();
+ var m_month = day.getMonth()==startDate.getMonth();
+ return m_date && m_month && m_year;
+}
+
+function sessionTimeToString(session) {
+ return ""+session.getHours()+":"+pad(session.getMinutes(),2);
+}
+
+function dateToString(day) {
+ var full = day.toDateString();
+ // remove year as it doesn't fit on small screens
+ return full.substring(0, full.length-4);
+}
+
+function pad(num, digits) {
+ var str = "" + num;
+ while ( str.length < digits ) {
+ str = "0" + str;
+ }
+ return str;
+}
+
+// Opens a URL in a separate browser window
+function openURL(url) {
+ if (window.widget) {
+ // in WRT
+ widget.openURL(url);
+ } else {
+ // outside WRT
+ window.open(url, "NewWindow");
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/OSCON20090720.ics Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,410 @@
+BEGIN:VCALENDAR
+X-WR-CALNAME:OSCON 2009
+VERSION:2.0
+PRODID:Expectnation
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T120000
+DTSTART;TZID=US/Pacific:20090720T083000
+DTSTAMP:20090629T224138
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8466
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-08:30--8466
+SUMMARY:PHP: The Good Parts
+DESCRIPTION:Presented by Chris Shiflett (OmniTI), Sean Coates (OmniTI).
+ PHP has a reputation for being poorly designed and inconsistent. This re
+ putation has been earned through a lifetime of organic growth. Some of t
+ his criticism is deserved, but some parts—The Good Parts—keep us coming
+ back for more. Join us as we discuss the reasons why PHP powers most of
+ the Web despite its flaws.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T120000
+DTSTART;TZID=US/Pacific:20090720T083000
+DTSTAMP:20090629T223557
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7757
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-08:30--7757
+SUMMARY:Introduction to JRuby
+DESCRIPTION:Presented by Neal Ford (ThoughtWorks). JRuby is Ruby on the
+ Java Platform, so it brings the advantages of Ruby to the JVM and the ad
+ vantages of Java to Ruby. This session shows Ruby syntax and lots of int
+ egration techniques with Java, including building Swing-based UI's using
+ Swiby and how to unit test Java code with JRuby.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T120000
+DTSTART;TZID=US/Pacific:20090720T083000
+DTSTAMP:20090310T220530
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7974
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-08:30--7974
+SUMMARY:Introduction to Google App Engine
+DESCRIPTION:Presented by Joe Gregorio (Google). Overview of App Engine a
+ nd its major components, including an overview of the APIs the SDK provi
+ des, the underlying technologies App Engine is built on. Tutorial is a h
+ ands on event where we will build multiple applications over three hours
+ exploring many of features and APIs in App Engine.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T120000
+DTSTART;TZID=US/Pacific:20090720T083000
+DTSTAMP:20090608T172449
+LOCATION:Ballroom A4/A5
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8266
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-08:30--8266
+SUMMARY:Simplifying Database Design
+DESCRIPTION:Presented by Josh Berkus (PostgreSQL Experts, Inc.). In 10 y
+ ears of fixing other people's SQL databases, I've noticed that the less
+ the original developer knew, the more complex the databases are ... and
+ the more complex the problems. Here I offer a refreshing approach for s
+ imple SQL database design.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T120000
+DTSTART;TZID=US/Pacific:20090720T083000
+DTSTAMP:20090310T213951
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7553
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-08:30--7553
+SUMMARY:Mastering Perl
+DESCRIPTION:Presented by brian d foy (Stonehenge Consulting Services). G
+ o beyond the syntax and idioms of Perl to manage your code base so it do
+ esn't manage you. Show your Perl code who is in charge through benchmark
+ ing and profiling, configuration, logging, and fixing third party module
+ s.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T120000
+DTSTART;TZID=US/Pacific:20090720T083000
+DTSTAMP:20090629T223849
+LOCATION:Ballroom A8
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8158
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-08:30--8158
+SUMMARY:Finding the Swan in Squeak's Ugly Duckling
+DESCRIPTION:Presented by Randal L. Schwartz (Stonehenge Consulting Servi
+ ces, Inc.). Squeak Smalltalk is wholly unlike any other open source prog
+ ramming tool you've worked with - and mostly in good ways. Unfortunately
+ , it's the bad ways that make the first impression. This hands-on tutori
+ al will help you get past the unfamiliar and the unwieldy so that you ca
+ n take advantage of the elegant and productive environment that lies und
+ erneath.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T120000
+DTSTART;TZID=US/Pacific:20090720T083000
+DTSTAMP:20090629T223842
+LOCATION:Meeting Room B1/B4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8061
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-08:30--8061
+SUMMARY:Perl 6: Why? What? How?
+DESCRIPTION:Presented by Damian Conway (Thoughtstream). This half-day tu
+ torial provides a comprehensive and practical introduction to the new la
+ nguage, specifically designed to get current Perl 5 programmers up to sp
+ eed on the new and powerful features of Perl 6.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T120000
+DTSTART;TZID=US/Pacific:20090720T083000
+DTSTAMP:20090629T224126
+LOCATION:Meeting Room J2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8118
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-08:30--8118
+SUMMARY:Automating Enterprise Workflow with Open Source Tools
+DESCRIPTION:Presented by Jim Brandt (Synacor, Inc.). In difficult financ
+ ial times, all businesses are looking to do more with less. Automating r
+ epetitive tasks with computers is one way to do this. This tutorial will
+ discuss how to use open source tools to implement workflow using real-w
+ orld examples.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T120000
+DTSTART;TZID=US/Pacific:20090720T083000
+DTSTAMP:20090629T223543
+LOCATION:Meeting Room J3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8575
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-08:30--8575
+SUMMARY:The Open, Social Web Workshop
+DESCRIPTION:Presented by Chris Messina (OpenID Foundation), David Record
+ on (Six Apart), Joseph Smarr (Plaxo). As evidenced by Barack Obama’s suc
+ cessful presidential campaign, we have clearly entered the age of the so
+ cial web. This developer-oriented workshop will emphasize the use and ap
+ plication of free, open building blocks for enabling social networking f
+ eatures on your site or service, and provide illuminating insights from
+ some of the key figures creating these technologies.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T170000
+DTSTART;TZID=US/Pacific:20090720T133000
+DTSTAMP:20090629T225624
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8125
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-13:30--8125
+SUMMARY:Introduction to Web Application Development Using Smalltalk Seas
+ ide
+DESCRIPTION:Presented by Randal L. Schwartz (Stonehenge Consulting Servi
+ ces, Inc.). An introduction to the Seaside Smalltalk web development fra
+ mework. Presumes basic knowledge of object-oriented programming using S
+ malltalk GUIs, such as Squeak or VisualWorks. Covers Seaside concepts of
+ components and html templating, including continuations for advanced ca
+ llbacks and some persistence solutions.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T170000
+DTSTART;TZID=US/Pacific:20090720T133000
+DTSTAMP:20090629T225110
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7728
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-13:30--7728
+SUMMARY:XMPP 101: Building Real-Time Applications with Jabber Technologi
+ es
+DESCRIPTION:Presented by Peter Saint-Andre (Cisco), Jack Moffitt (Collec
+ ta). Jabber/XMPP technologies are the gold standard for real-time messag
+ ing, presence, and collaboration over the Internet. This interactive tut
+ orial provides a fast-paced introduction to XMPP, including many practic
+ al guidelines and "gotchas" that will help you get off to a fast start w
+ ith XMPP-based software projects.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T170000
+DTSTART;TZID=US/Pacific:20090720T133000
+DTSTAMP:20090629T225402
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8035
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-13:30--8035
+SUMMARY:Internet Programming with Python
+DESCRIPTION:Presented by wesley chun (CyberWeb Consulting). Python is an
+ interpreted, cross-platform, object-oriented programming language that
+ is popular for a wide range of applications, one of which is Internet pr
+ ogramming. This tutorial introduces current Python programmers to three
+ distinct areas of Internet programming, each in self-contained one-hour
+ lectures with a demonstration of code following each lecture topic.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T170000
+DTSTART;TZID=US/Pacific:20090720T133000
+DTSTAMP:20090310T234227
+LOCATION:Ballroom A4/A5
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7953
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-13:30--7953
+SUMMARY:Git 101
+DESCRIPTION:Presented by Scott Chacon (GitHub). Git is a new distributed
+ version control system that is fast, flexible, works offline and suppor
+ ts powerful local branching and easy merging that encourages non-linear
+ workflows and makes developers far more productive and efficient. This t
+ utorial will introduce you to Git, rid you of your SVN sins, and teach y
+ ou how to become more efficient and productive as a programmer.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T170000
+DTSTART;TZID=US/Pacific:20090720T133000
+DTSTAMP:20090711T160918
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8345
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-13:30--8345
+SUMMARY:Request Tracker Boot Camp
+DESCRIPTION:Presented by Jesse Vincent (Best Practical). Request Tracker
+ (RT) is an enterprise-grade ticketing system. It's designed to help you
+ r organization track what needs to get done and what still needs doing.
+ From basic customer service to advanced back-office workflows, RT is fle
+ xible enough to keep your processes smooth and effective. This tutorial
+ will cover deployment and day to day use of RT as well as basic customiz
+ ation.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T170000
+DTSTART;TZID=US/Pacific:20090720T133000
+DTSTAMP:20090311T174338
+LOCATION:Ballroom A8
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8904
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-13:30--8904
+SUMMARY:Running the Show: Configuration Management with Chef
+DESCRIPTION:Presented by Edd Dumbill (O'Reilly Media, Inc. ). Few applic
+ ations are architecturally simple. As soon as you grow, you find yoursel
+ f using multiple subsystems and machines to scale, creating new headache
+ s in configuration management. Help is at hand! This tutorial introduces
+ Chef, a modern Ruby-based open source approach to systems integration.
+ Chef lets you manage your servers by writing code, not running commands.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T170000
+DTSTART;TZID=US/Pacific:20090720T133000
+DTSTAMP:20090711T160907
+LOCATION:Meeting Room B1/B4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8892
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-13:30--8892
+SUMMARY:What's new in Perl v5.10?
+DESCRIPTION:Presented by Tom Christiansen (TCPC). Perl5 is alive and wel
+ l, and this tutorial outlines the many significant changes appearing in
+ the 5.10.0 release and beyond, especially in regular expressions and mod
+ ules.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T170000
+DTSTART;TZID=US/Pacific:20090720T133000
+DTSTAMP:20090629T225426
+LOCATION:Meeting Room J1/J4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8314
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-13:30--8314
+SUMMARY:Use Open Source Tools to Program iPhone Games on Linux and Windo
+ ws Without the iPhone SDK
+DESCRIPTION:Presented by PJ Cabrera (Freelance trouble-maker). In this t
+ utorial, learn about the use of open source tools to help develop native
+ applications for the iPhone platform on Windows and Linux, and learn ab
+ out the source code of a basic iPhone application in Objective-C. Explor
+ e open source libraries that help accelerate the creation of native iPho
+ ne games and apps without having to use the iPhone SDK directly.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T170000
+DTSTART;TZID=US/Pacific:20090720T133000
+DTSTAMP:20090310T213152
+LOCATION:Meeting Room J2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8117
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-13:30--8117
+SUMMARY:Scaling Your Web MySQL Application (mostly PHP/MySQL)
+DESCRIPTION:Presented by Duleepa Wijayawardhana (MySQL). Scaling is a pe
+ rennial problem. One day you are happily serving 10,000 users and sudden
+ ly that pesky CNN picks you on you and you have to deal with a million u
+ sers. It isn't all about putting the latest hardware, more disk or more
+ RAM. Scaling is a subtle art of discovering pain points in the applicati
+ on and using various Open Source software and technologies to get you to
+ where you want.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T170000
+DTSTART;TZID=US/Pacific:20090720T133000
+DTSTAMP:20090629T225018
+LOCATION:Meeting Room J3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8076
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-13:30--8076
+SUMMARY:Distributed Applications with CouchDB
+DESCRIPTION:Presented by J Chris Anderson (couch.io). Apache CouchDB can
+ serve complete web apps, without a middle-tier application server. Beca
+ use these apps can be deployed to any running CouchDB node (including us
+ er's local machines), they present potential for end-user innovation, bu
+ t because of view source but also through peer based replication. We'll
+ learn to use the CouchApp JavaScript and HTML framework to build sharabl
+ e applications.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T200000
+DTSTART;TZID=US/Pacific:20090720T190000
+DTSTAMP:20090706T173333
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10160
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-19:00--10160
+SUMMARY:Private Clouds - Why They Matter
+DESCRIPTION:Clouds of all types have been discussed and new terms seem t
+ o pop up everyday. This BoF will focus in on one aspect of cloud computi
+ ng, namely, private clouds. Enterprises have vast data centers comprisin
+ g of systems of all types. Cloud computing can transform these datacente
+ rs into a flexible, efficient cloud allowing for endless possibility.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T200000
+DTSTART;TZID=US/Pacific:20090720T190000
+DTSTAMP:20090714T091107
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10216
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-19:00--10216
+SUMMARY:Open Source to the Rescue of Mobile App and Mobile Web Fragmen
+ tation
+DESCRIPTION:Mobile app and Mobile web development is still in it's infan
+ cy when talking about development practices, tools and platform converge
+ nce. Several Open Source projects and standards are emerging in this fie
+ ld. During this BoF session some of the tools and approaches will be dis
+ cussed and experiences will be shared. Special focus will be put on tool
+ s that overcome device fragmentation!
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T200000
+DTSTART;TZID=US/Pacific:20090720T190000
+DTSTAMP:20090623T151234
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10217
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-19:00--10217
+SUMMARY:Writing Open Source
+DESCRIPTION:Whether you're an aspiring technical author, or a raging Doc
+ Book fiend, you've probably noticed that a lot open source documentation
+ needs help. Want to help (or need help)? Writing Open Source is a new c
+ ross-project initiative dedicated to making docs suck less.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T200000
+DTSTART;TZID=US/Pacific:20090720T190000
+DTSTAMP:20090715T172147
+LOCATION:Ballroom A4/A5
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10447
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-19:00--10447
+SUMMARY:collectd and rrdtool, Building Blocks for AMP Monitoring and Vis
+ ualization
+DESCRIPTION:This session intends to showcase the power of collectd and r
+ rdtool to build a monitoring solution for the OpenSolaris Web Stack (an
+ AMP stack). collectd, a system statistics collection daemon, helps you t
+ o collect and store monitoring statistics while rrdtool, a data logging
+ and graphing system for time series data, helps you to generate nice gra
+ phs.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T200000
+DTSTART;TZID=US/Pacific:20090720T190000
+DTSTAMP:20090716T142818
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10347
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-19:00--10347
+SUMMARY:Hacking the Open GlassFish Web Stack for Laconica - The Open Mic
+ roblogging Tool
+DESCRIPTION:This Birds of a Feather Session will show how to hack the Gl
+ assFish Web Stack to add support for Laconica. At the end of this sessi
+ on you will be able to download, modify, and compile the Open Web Stack
+ to support the Laconica Microblogging Tool.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T200000
+DTSTART;TZID=US/Pacific:20090720T190000
+DTSTAMP:20090707T205237
+LOCATION:Ballroom A8
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10370
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-19:00--10370
+SUMMARY:Using Open Source to Speed Multi-source Development - Issues and
+ Benefits
+DESCRIPTION:Open source enables a re-alignment of development economics
+ - enabling faster, more cost-effective product development and time-to-
+ market. Development organizations must gear up for the challenges of usi
+ ng open source. Attendees will discuss new technologies and approaches t
+ hat address the unique challenges that arise when development organizati
+ ons use open source components “at scale.”
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T210000
+DTSTART;TZID=US/Pacific:20090720T190000
+DTSTAMP:20090710T165405
+LOCATION:Meeting Room B1/B4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10406
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-19:00--10406
+SUMMARY:Crossbow Network Virtualization - Convergence of Compute and Net
+ work Services
+DESCRIPTION:There are a lot of solutions in the market for virtualizing
+ compute services, but what about the network? Crossbow introduces a new
+ highly performant and scalable networking stack into OpenSolaris with u
+ nique network virtualization and resource control features. This new inf
+ rastructure allows you to combine networking and compute services withou
+ t trading off security or performance.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090720T200000
+DTSTART;TZID=US/Pacific:20090720T190000
+DTSTAMP:20090710T224854
+LOCATION:Meeting Room B2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10413
+UID:http://conferences.oreilly.com/oscon--s2009-07-20-19:00--10413
+SUMMARY:Drill Down PHP Performance on Multicore Systems. Where Does It S
+ tand?
+DESCRIPTION:PHP, in spite of most popular web scripting language, doesn'
+ t perform the best particularly on modern multicore systems. In a standa
+ rd ecommerce workload, PHP perform less than 50% compare to jsp. We hav
+ e been able to improve the PHP performance up to 60% by optimizing the P
+ HP engine running in a multithreaded environment. In the session we will
+ review some of these optimizations.
+END:VEVENT
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/OSCON20090721.ics Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,343 @@
+BEGIN:VCALENDAR
+X-WR-CALNAME:OSCON 2009
+VERSION:2.0
+PRODID:Expectnation
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T120000
+DTSTART;TZID=US/Pacific:20090721T083000
+DTSTAMP:20090711T160325
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8262
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-08:30--8262
+SUMMARY:How to Write Your Own Eclipse Plug-ins
+DESCRIPTION:Presented by Beth Tibbitts (IBM ). Eclipse is an open source
+ IDE that has available extensions for a variety of languages and tools.
+ How are these extensions created? This tutorial will cover how to inst
+ all eclipse extensions ("plug-ins"), how to write your own including usi
+ ng the built-in wizards, how to write help for your plug-ins, and how to
+ publish/package them so that others can easily download and use your pl
+ ug-ins.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T120000
+DTSTART;TZID=US/Pacific:20090721T083000
+DTSTAMP:20090311T161032
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7844
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-08:30--7844
+SUMMARY:Spatializing your Data with PostGIS, GeoDjango & OpenLayers
+DESCRIPTION:Presented by Chander Ganesan (Open Technology Group, Inc). T
+ he GeoDjango project provides a set of extensions to the python Django f
+ ramework that allows for the easy and rapid development of spatially ena
+ bled applications. Using GeoDjango's model-driven design methods, PostG
+ IS's spatial database extensions to PostgreSQL, and OpenLayers, we will
+ explain and demonstrate how to build powerful spatially enabled applicat
+ ions.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T120000
+DTSTART;TZID=US/Pacific:20090721T083000
+DTSTAMP:20090629T230556
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8062
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-08:30--8062
+SUMMARY:7 Principles of Better API Design
+DESCRIPTION:Presented by Damian Conway (Thoughtstream). This course pres
+ ents a minimalist approach to interface design known as "S.A.T." Develop
+ ed by Damian Conway over the past decade, this design philosophy can pro
+ duce smaller, better focused, more usable module APIs.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T120000
+DTSTART;TZID=US/Pacific:20090721T083000
+DTSTAMP:20090629T230304
+LOCATION:Ballroom A4/A5
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7519
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-08:30--7519
+SUMMARY:Linux System and Network Performance Monitoring
+DESCRIPTION:Presented by Darren Hoch (StrongMail Systems). The Linux Sys
+ tem and Network Performance Course teaches systems administrators practi
+ cal methodologies for monitoring systems using standard system tools. Th
+ e course breaks performance into 4 functional components: CPU, Memory, I
+ /O, and Network.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T120000
+DTSTART;TZID=US/Pacific:20090721T083000
+DTSTAMP:20090310T224022
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7734
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-08:30--7734
+SUMMARY:Moose: A Complete (Meta-)OO System for Perl
+DESCRIPTION:Presented by Yuval Kogman (Infinity Interactive). Moose is a
+ complete OO system for Perl that provides a declarative sugar layer alo
+ ng with a complete meta-model for introspection and extension.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T120000
+DTSTART;TZID=US/Pacific:20090721T083000
+DTSTAMP:20090711T160428
+LOCATION:Ballroom A8
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7384
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-08:30--7384
+SUMMARY:PHP Code Audit
+DESCRIPTION:Presented by Philippe Gamache (Parler Haut, Interagir Librem
+ ent), Damien Seguy (Alterway Consulting). In this laboratory, we will ca
+ rry out a safety audit of an Open Source web application. We will work o
+ n a real application. The laboratory will end with the handing over of t
+ he report to the authors of the application so they can have an outside
+ view on the safety of the application.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T120000
+DTSTART;TZID=US/Pacific:20090721T083000
+DTSTAMP:20090711T160317
+LOCATION:Meeting Room B1/B4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8020
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-08:30--8020
+SUMMARY:The PhoneGap Project: Designing for the Device Neutral Mobile We
+ b
+DESCRIPTION:Presented by Brian LeRoux (Nitobi Inc.), Rob Ellis (Nitobi I
+ nc.), Brock Whiten (Nitobi Inc.). Created at iPhoneDevCamp 2008, PhoneGa
+ p is an open source initiative for bringing native device capabilities t
+ o mobile browsers. Use PhoneGap to author apps in HTML and JavaScript an
+ d still take advantage of native mobile device capabilities like geo loc
+ ation, camera, vibration and sound. Learn to build apps for iPhone, Andr
+ oid, Nokia S60 and Blackberry and how to contribute back to the project.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T120000
+DTSTART;TZID=US/Pacific:20090721T083000
+DTSTAMP:20090408T163529
+LOCATION:Meeting Room J1/J4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7554
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-08:30--7554
+SUMMARY:Practical Erlang Programming Tutorial
+DESCRIPTION:Presented by Francesco Cesarini (Erlang Training and Consult
+ ing Ltd). Practical Erlang Programming covers the basic, sequential and
+ concurrent aspects of the Erlang programming language. You will learn th
+ e basics of how to read, write and structure Erlang programs. The target
+ audience are software developers and engineers with an interest in serv
+ er side applications and massively concurrent systems. The perquisites a
+ re basic programming knowledge.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T120000
+DTSTART;TZID=US/Pacific:20090721T083000
+DTSTAMP:20090711T160410
+LOCATION:Meeting Room J2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8206
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-08:30--8206
+SUMMARY:Gearman: Build Your Own Distributed Platform in 3 Hours
+DESCRIPTION:Presented by Eric Day (Sun Microsystems), Brian Aker (Sun Mi
+ crosystems, Inc.). This tutorial will show you how to get started with G
+ earman, the flexible job queuing system used to power websites such as L
+ iveJournal and Digg. We'll cover common architectures, installation, API
+ s, and deployment. A few use cases will be described and built, includin
+ g a Map/Reduce cluster and database-driven URL mining application.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T120000
+DTSTART;TZID=US/Pacific:20090721T083000
+DTSTAMP:20090323T212845
+LOCATION:Meeting Room J3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8210
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-08:30--8210
+SUMMARY:Building Great User Experiences For the Open Web With Dojo
+DESCRIPTION:Presented by Matthew Russell (Zaffra, LLC). Dojo is an indus
+ trial strength JavaScript toolkit that drastically simplifies the effort
+ it takes to develop an application for the open web. This 3 hour tutori
+ al provides an intense introduction to all of the "good parts" of the to
+ olkit and includes a number of demonstrations built in real time (as opp
+ osed to primarily being a lecture) in the spirit of a "labs style" envir
+ onment.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T170000
+DTSTART;TZID=US/Pacific:20090721T133000
+DTSTAMP:20090310T223652
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8893
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-13:30--8893
+SUMMARY:Open-Source Solutions for Cameras in the Digital Age
+DESCRIPTION:Presented by Tom Christiansen (TCPC). Now that everyone and
+ their dog has some sort of a digital camera, what are you supposed to
+ do with it, and how? What real solutions are out there that aren
+ 't just for the subfenestrated?
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T170000
+DTSTART;TZID=US/Pacific:20090721T133000
+DTSTAMP:20090311T175417
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8178
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-13:30--8178
+SUMMARY:Total Security In A PostgreSQL Database
+DESCRIPTION:Presented by Robert Bernier (Consultant). Protecting your da
+ ta, by any and all means possible, is no longer an option. Rather, it is
+ mandated by today's security conscious management. This tutorial will d
+ emonstrate a hands on methodology of using the latest encryption and cip
+ her technology available in PostgreSQL. Following best condoned practice
+ s used in the industry today, PostgreSQL can be used to manage your data
+ securely.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T170000
+DTSTART;TZID=US/Pacific:20090721T133000
+DTSTAMP:20090310T214348
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7943
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-13:30--7943
+SUMMARY:Scalable Internet Architectures
+DESCRIPTION:Presented by Theo Schlossnagle (OmniTI). Internet traffic sp
+ ikes aren't what they used to be. It is now evident that even the small
+ est sites can suffer the attention of the global audience. This present
+ ation dives into techniques to avoid collapse under dire circumstances.
+ Looking at some real traffic spikes, we'll pinpoint what part of the ar
+ chitecture is crumbling under the load; then, walk though stop-gaps and
+ complete solutions.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T170000
+DTSTART;TZID=US/Pacific:20090721T133000
+DTSTAMP:20090629T231001
+LOCATION:Ballroom A4/A5
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8451
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-13:30--8451
+SUMMARY:Doing Perl Right
+DESCRIPTION:Presented by Paul Fenwick (Perl Training Australia), Jacinta
+ Richardson (Perl Training Australia). You already know some Perl. You'
+ ve read a book, written a few scripts, maybe even a module, but are you
+ sure you're doing it right? Languagues and techniques evolve over time,
+ and Perl is no exception. This detailed tutorial covers many of the bes
+ t modern and practical techniques in Perl, including Moose, autodie, Dev
+ el::NYTProf, Devel::Cover, PAR, Perl::Critic and more.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T170000
+DTSTART;TZID=US/Pacific:20090721T133000
+DTSTAMP:20090629T231146
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7616
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-13:30--7616
+SUMMARY:Quality Assurance in PHP Projects
+DESCRIPTION:Presented by Sebastian Bergmann (thePHP.cc). This tutorial i
+ ntroduces the audience to the testing of modern web applications using P
+ HPUnit for testing the backend components and Selenium for end-to-end te
+ sting of the whole application as well as measuring and controlling othe
+ r aspects of software quality throughout a project's lifecycle.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T170000
+DTSTART;TZID=US/Pacific:20090721T133000
+DTSTAMP:20090320T181052
+LOCATION:Ballroom A8
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8327
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-13:30--8327
+SUMMARY:Becoming an OpenSolaris Power User
+DESCRIPTION:Presented by Nicholas Solter (OpenSolaris / Sun Microsystems
+ ), David Miner (Sun Microsystems). Join the authors of “OpenSolaris Bibl
+ e” for a tutorial in becoming an OpenSolaris power user. Learn about ZFS
+ , DTrace, FMA, SMF, and more.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T170000
+DTSTART;TZID=US/Pacific:20090721T133000
+DTSTAMP:20090310T213100
+LOCATION:Meeting Room B1/B4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8238
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-13:30--8238
+SUMMARY:Just Enough C For Open Source Projects
+DESCRIPTION:Presented by Andy Lester (theworkinggeek.com). For programme
+ rs raised on open source who want to delve into lower-level mechanics of
+ C programming, this tutorial gives a complete overview of what it takes
+ to jump into the innards of your favorite open source projects. From My
+ SQL to Perl 5 to the Linux core, C is the foundation of many of the most
+ widely used open source packages. Learn the language, learn the tools,
+ and start contributing.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T170000
+DTSTART;TZID=US/Pacific:20090721T133000
+DTSTAMP:20090717T010624
+LOCATION:Meeting Room B2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10152
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-13:30--10152
+SUMMARY:Inside Symbian Tips and Tricks Tutorial
+DESCRIPTION:Presented by Lars Kurth (Symbian), Regan Coleman (Xenient).
+ The Symbian tutorial is the ideal place to gain insight and hands-on exp
+ erience with the Symbian Mobile Platform using Runtime tools including W
+ eb, Adobe Flash Lite, and Python, as well as an introduction to native
+ C++ development. The first 60 attendees will receive their very own unlo
+ cked Nokia 5800 device.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T170000
+DTSTART;TZID=US/Pacific:20090721T133000
+DTSTAMP:20090311T013744
+LOCATION:Meeting Room J1/J4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8159
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-13:30--8159
+SUMMARY:Django in the Real World
+DESCRIPTION:Presented by Jacob Kaplan-Moss (Django). There's plenty of m
+ aterial (documentation, blogs, books) out there that'll help you write a
+ site using Django... but then what? You've still got to test, deploy, m
+ onitor, and tune the site; failure at deployment time means all your bea
+ utiful code is for naught. This tutorial examines how best to cope when
+ the Real World intrudes on your carefully designed website.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T170000
+DTSTART;TZID=US/Pacific:20090721T133000
+DTSTAMP:20090629T231133
+LOCATION:Meeting Room J2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8225
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-13:30--8225
+SUMMARY:Learn to use Semantic Technologies using Open Source Tools
+DESCRIPTION:Presented by Jamie Taylor (Metaweb), Toby Segaran (Metaweb),
+ Colin Evans (Metaweb). Semantic Technologies provide a simple, standard
+ ized methodology for representing, combing and sharing data and serve as
+ the foundation for creating communities of open data. These technologi
+ es are both easy to learn and easy to use. This tutorial will introduce
+ you to semantic programming using a variety of open source tools and pro
+ gramming techniques that you can use on your projects today.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T170000
+DTSTART;TZID=US/Pacific:20090721T133000
+DTSTAMP:20090310T220642
+LOCATION:Meeting Room J3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8457
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-13:30--8457
+SUMMARY:Using Drupal
+DESCRIPTION:Presented by James Walker (Lullabot), Addison Berry (Lullabo
+ t). Drupal is a highly modular, Open Source Content Management System wi
+ th a wealth of powerful add-on modules. Learn to harness it all and buil
+ d dynamic websites with Drupal from authors of the book, Using Drupal.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T203000
+DTSTART;TZID=US/Pacific:20090721T193000
+DTSTAMP:20090630T234102
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9010
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-19:30--9010
+SUMMARY:Ignite OSCON
+DESCRIPTION:If you had five minutes on stage what would you say? What if
+ you only got 20 slides and they rotated automatically after 15 seconds?
+ Would you pitch a project? Launch a web site? Teach a hack? We’re going
+ to find out when we try our first Ignite event at OSCON. Damian Conway
+ is scheduled to end OSCON Ignite in style. Want to present at Ignite?
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090721T210000
+DTSTART;TZID=US/Pacific:20090721T203000
+DTSTAMP:20090430T234511
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9000
+UID:http://conferences.oreilly.com/oscon--s2009-07-21-20:30--9000
+SUMMARY:Google O'Reilly Open Source Awards
+DESCRIPTION:Winners of the Google O'Reilly Open Source Award will be ann
+ ounced during this fun evening event.
+END:VEVENT
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/OSCON20090722.ics Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,1630 @@
+BEGIN:VCALENDAR
+X-WR-CALNAME:OSCON 2009
+VERSION:2.0
+PRODID:Expectnation
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T091500
+DTSTART;TZID=US/Pacific:20090722T090000
+DTSTAMP:20090422T155324
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9014
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-09:00--9014
+SUMMARY:Welcome
+DESCRIPTION:Presented by Allison Randal (O'Reilly Media, Inc.), Edd Dumb
+ ill (O'Reilly Media, Inc. ). Opening remarks by the OSCON program chairs
+ , Allison Randal and Edd Dumbill.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T180000
+DTSTART;TZID=US/Pacific:20090722T090000
+DTSTAMP:20090625T233620
+LOCATION:Meeting Room C1/C4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9001
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-09:00--9001
+SUMMARY:OSCamp 2009
+DESCRIPTION:OSCamp 2009, a community organized event designed to share a
+ nd improve the essential skills required to participate in collaborative
+ , free and open online projects. OSCamp attendance is free with an Expo
+ Hall pass.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T180000
+DTSTART;TZID=US/Pacific:20090722T090000
+DTSTAMP:20090702T000426
+LOCATION:Meeting Room N
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10232
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-09:00--10232
+SUMMARY:Sunlight Labs Hackathon
+DESCRIPTION:At the Sunlight Labs hackathon, Sunlight Labs will be workin
+ g with developers on two major projects: 1. Parsing sites at for our 50
+ state project to get every state legislature in a common data format, an
+ d 2. Adding data into Sunlight's newest project, Congrelate.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T093000
+DTSTART;TZID=US/Pacific:20090722T091500
+ALTDTSTART;TZID=US/Pacific:20090722T090000
+DTSTAMP:20090615T165620
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9170
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-09:15--9170
+SUMMARY:The O'Reilly Radar
+DESCRIPTION:Presented by Tim O'Reilly (O'Reilly Media, Inc.). Keynote by
+ Tim O'Reilly.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T094500
+DTSTART;TZID=US/Pacific:20090722T093000
+ALTDTSTART;TZID=US/Pacific:20090722T090000
+DTSTAMP:20090617T221507
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10153
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-09:30--10153
+SUMMARY:Intel and Open Source: Innovation and Leadership for Continued G
+ rowth
+DESCRIPTION:Presented by Imad Sousou (Intel Corporation). Imad Sousou, D
+ irector of Intel Open Source Technology Center will present the technolo
+ gy vision and direction for Intel’s overall Open Source efforts, includi
+ ng Mobility, Virtualization, Power, and Performance.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T100000
+DTSTART;TZID=US/Pacific:20090722T094500
+ALTDTSTART;TZID=US/Pacific:20090722T090000
+DTSTAMP:20090501T161347
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9124
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-09:45--9124
+SUMMARY:A Brief History of Software
+DESCRIPTION:Presented by Michael Lopp (Rands in Repose). In 15 minutes,
+ discover 15 years of secrets behind building software faster, more effi
+ ciently, and using less floppy disks.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T101500
+DTSTART;TZID=US/Pacific:20090722T100000
+ALTDTSTART;TZID=US/Pacific:20090722T090000
+DTSTAMP:20090325T170953
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9015
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-10:00--9015
+SUMMARY:Q & A
+DESCRIPTION:An open microphone question and answer session with the morn
+ ing's keynote speakers.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T113000
+DTSTART;TZID=US/Pacific:20090722T104500
+DTSTAMP:20090311T194433
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7865
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-10:45--7865
+SUMMARY:With Software as a Service, Is Only the Network Luddite Free?
+DESCRIPTION:Presented by Bradley Kuhn (Software Freedom Law Center / Sof
+ tware Freedom Conservancy), Benjamin Mako Hill (MIT Center for Future Ci
+ vic Media), Evan Prodromou (Identi.ca), Nathan Yergler (Creative Commons
+ ), Tim O'Reilly (O'Reilly Media, Inc.). At OSCON 2008, Tim O'Reilly rais
+ ed in his keynote a new challenge we face: Software as a Service. This
+ panel discusses the work spawned by autonomo.us to inspire the Open Sour
+ ce and Software Freedom Movement to address the challenge. The talk wil
+ l discuss the AGPL, a license designed to address these concerns, and th
+ e federated service model that must exist to succeed in addressing this
+ problem.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T113000
+DTSTART;TZID=US/Pacific:20090722T104500
+DTSTAMP:20090317T130826
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8161
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-10:45--8161
+SUMMARY:Conferences for Beginners
+DESCRIPTION:Presented by Jim Brandt (Synacor, Inc.). While the OSCON con
+ ference materials are a great resource, much of the benefit from OSCON c
+ omes from the hallway track. This talk will educate first-timers on how
+ to get the most out of OSCON.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T113000
+DTSTART;TZID=US/Pacific:20090722T104500
+DTSTAMP:20090612T213025
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8215
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-10:45--8215
+SUMMARY:Btrfs: A new Linux file system
+DESCRIPTION:Presented by Valerie Aurora (formerly Henson) (Red Hat, Inc.
+ ). Btrfs is a new file system for Linux. It includes snapshots, pooling
+ of multiple devices, and checksums. This talk will describe btrfs for
+ both the systems administrator and the programmer.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T113000
+DTSTART;TZID=US/Pacific:20090722T104500
+DTSTAMP:20090311T045122
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7872
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-10:45--7872
+SUMMARY:Zen and the Art of Abstraction Maintenance
+DESCRIPTION:Presented by Alex Martelli (Google). Abstraction is a powerf
+ ul servant, but a dangerous master. We code, design, think, debug ... o
+ n a tower of abstractions. Spolsky's Law tells us that "All abstractions
+ leak". This talk explores why they leak, why that's often a problem, wh
+ at to do about it; I also cover why sometimes abstractions SHOULD "leak"
+ , and how best to produce and consume abstraction layers.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T113000
+DTSTART;TZID=US/Pacific:20090722T104500
+DTSTAMP:20090527T172713
+LOCATION:Ballroom A4/A5
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8139
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-10:45--8139
+SUMMARY:How Not to Use Memcached
+DESCRIPTION:Presented by Jonathan Steinert (SixApart). Many people know
+ how to use memcached, the popular caching system powering much of web1+.
+ Most folks, though, don't know how not to use it, and how improper usa
+ ge can cause data problems, poor site/application performance, and an in
+ credibly grumpy DBA. Learn what memcached is good for, and what it's no
+ t good for from those that have learned the wrong way.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T113000
+DTSTART;TZID=US/Pacific:20090722T104500
+DTSTAMP:20090311T115817
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7823
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-10:45--7823
+SUMMARY:Release Mismanagement: How to Alienate Users and Frustrate Devel
+ opers
+DESCRIPTION:Presented by Hyrum Wright (University of Texas at Austin). T
+ o most users, unreleased software is non-existent software. Even when t
+ he source code is freely available, most users desire, or even require,
+ releases which are provided and blessed by the project. In this talk, I
+ 'll discuss release management, who does it, how it's done, and what hap
+ pens when things go wrong.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T113000
+DTSTART;TZID=US/Pacific:20090722T104500
+DTSTAMP:20090310T214406
+LOCATION:Ballroom A8
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7931
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-10:45--7931
+SUMMARY:Reconnoiter: Monitoring and Trend Analysis
+DESCRIPTION:Presented by Theo Schlossnagle (OmniTI). Monitoring systems
+ to collect metrics is systems administration 101. However, systems are
+ more complicated, there are more metrics and correlation is a must to tr
+ oubleshoot problems or plan for growth. As our problem got bigger, our
+ tools didn't get better. Reconnoiter is a large-scale monitoring and tr
+ end analysis system designed to nip these problems in the bud.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T113000
+DTSTART;TZID=US/Pacific:20090722T104500
+DTSTAMP:20090310T213328
+LOCATION:Meeting Room B1/B4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8382
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-10:45--8382
+SUMMARY:Grokkin' Design
+DESCRIPTION:Presented by Jon Tan (OmniTI). Design is 80% science and 20%
+ art. This talk dives straight into the science to give you the techniqu
+ es to create your own interfaces and demystify design. From using the go
+ lden ratio in layout and Fibonacci numbers in typography, to brand desig
+ n and art direction, it covers it all in simple, tasty, bite-size pieces
+ .
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T113000
+DTSTART;TZID=US/Pacific:20090722T104500
+DTSTAMP:20090310T235716
+LOCATION:Meeting Room B2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8138
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-10:45--8138
+SUMMARY:Educating Students in 21st Century Skills via FOSS
+DESCRIPTION:Presented by Bryant Patten (National Center for Open Source
+ and Education). The new U.S. technology standards for K-12 schools are a
+ ll about 21st Century Skills - problem solving, collaboration, authentic
+ work. This talk, targeted at FOSS project leaders and community manage
+ rs, is about getting students to contribute to Open Source software proj
+ ects and how FOSS projects can help with this effort.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T113000
+DTSTART;TZID=US/Pacific:20090722T104500
+DTSTAMP:20090415T180635
+LOCATION:Meeting Room B3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8843
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-10:45--8843
+SUMMARY:Building Applications Using Ubuntu One
+DESCRIPTION:Presented by Stuart Langridge (Canonical). Ubuntu One isn't
+ just a set of services for Ubuntu, it's a platform for you to build your
+ own services too. Stuart Langridge explains the APIs Ubuntu One offers
+ to developers and shows some examples of applications you could build th
+ at take advantage of storage in the cloud and synchronised databases for
+ your apps: build your own on the desktop or the web to work collaborati
+ vely with Ubuntu One.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T113000
+DTSTART;TZID=US/Pacific:20090722T104500
+DTSTAMP:20090529T205411
+LOCATION:Meeting Room C2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9907
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-10:45--9907
+SUMMARY:How to Develop Moblin Core Technologies
+DESCRIPTION:Presented by Rob Bradford (Intel). Moblin has been talked ab
+ out a lot in the last few months. By the time OSCON comes around, the re
+ lease of Moblin 2.0 should be close. This talk will give an update on wh
+ ere Moblin is and where it is going.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T113000
+DTSTART;TZID=US/Pacific:20090722T104500
+DTSTAMP:20090507T163801
+LOCATION:Meeting Room C3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9258
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-10:45--9258
+SUMMARY:Development Principles of Liferay's Expanse UI Framework
+DESCRIPTION:Presented by Nate Cavanaugh (Liferay, Inc.). The number of q
+ uality open source JS frameworks leads to an interesting question: Why d
+ id Liferay build Expanse UI? This session will cover not only the motiva
+ tions and technical hurdles it was designed to overcome, but also the de
+ velopment principles it adheres to in building a complete UI solution.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T113000
+DTSTART;TZID=US/Pacific:20090722T104500
+DTSTAMP:20090407T194156
+LOCATION:Meeting Room J1/J4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8552
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-10:45--8552
+SUMMARY:Building Belonging
+DESCRIPTION:Presented by Jono Bacon (Canonical Ltd). In his new talk Bui
+ lding Belonging, Jono Bacon explores the underlying recipe behind what m
+ akes great community and talks about many of the concepts that he and hi
+ s team have used as part of the Ubuntu community. The presentation takes
+ a fun, amusing and anecdote laden tour-de-force of community in a way t
+ hat any community can implement. Be sure to be there!
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T113000
+DTSTART;TZID=US/Pacific:20090722T104500
+DTSTAMP:20090311T004452
+LOCATION:Meeting Room J2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8179
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-10:45--8179
+SUMMARY:MVCs in Perl, Too Many Ways To Do It!
+DESCRIPTION:Presented by Jacinta Richardson (Perl Training Australia). E
+ veryone else is using Model-View-Controller (MVC) frameworks to create t
+ heir websites, but Perl has so many! How is an MVC-novice to choose bet
+ ween Catalyst, Jifty, Gantry, Maypole or many of the others? Come along
+ for a whirlwind tour of these frameworks and more and see their strengt
+ hs, their failures and make an informed decision about which one you'll
+ use for your next project.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T113000
+DTSTART;TZID=US/Pacific:20090722T104500
+DTSTAMP:20090312T231305
+LOCATION:Meeting Room J3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8073
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-10:45--8073
+SUMMARY:Testing iPhone apps with Ruby and Cucumber
+DESCRIPTION:Presented by Ian Dees (Tektronix). The iPhone and the Cucumb
+ er test framework have something in common, besides the adoration of gee
+ ks. They're both designed to get out of your way, so you can think abou
+ t the task at hand. So it's only natural that we'd want to use our favo
+ rite framework to drive apps on our favorite phone.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T122000
+DTSTART;TZID=US/Pacific:20090722T113500
+DTSTAMP:20090715T233328
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8057
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-11:35--8057
+SUMMARY:Even Faster Websites
+DESCRIPTION:Presented by Steve Souders (Google), Lindsey Simon (Google).
+ Steve Souders, author of High Performance Web Sites and creator of YSlo
+ w, discusses his new insights into faster web pages including how to loa
+ d JavaScript asynchronously, optimizing CSS, and sharding resources acro
+ ss multiple domains.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T122000
+DTSTART;TZID=US/Pacific:20090722T113500
+DTSTAMP:20090317T195103
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8789
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-11:35--8789
+SUMMARY:Getting Started in Free and Open Source
+DESCRIPTION:Presented by Cat Allman (Google), Leslie Hawthorn (Google, I
+ nc.). Leslie Hawthorn and I co-present this talk for beginners who are i
+ nterested to getting involved but don't know where or how to start. We
+ cover the basics of: -why you might want to get involved -what you can g
+ et out of participating -more than coding is needed -how to chose a proj
+ ect -how to get started -etiquette of lists and other communication -dos
+ and don't of joining a community
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T122000
+DTSTART;TZID=US/Pacific:20090722T113500
+DTSTAMP:20090320T032040
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8438
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-11:35--8438
+SUMMARY:The Future of Filesystems and Storage
+DESCRIPTION:Presented by Theodore Ts'o (Linux Foundation). What does the
+ future hold in store for filesystem and storage technologies? Why is i
+ t that there has been a flowering of new filesystems showing up in Linux
+ in the last 18 months? This talk will review the new file systems and
+ storage technologies which have shown up in Linux and discuss what is l
+ ikely to come in the future.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T122000
+DTSTART;TZID=US/Pacific:20090722T113500
+DTSTAMP:20090310T213853
+LOCATION:Ballroom A4/A5
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8198
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-11:35--8198
+SUMMARY:Gearman: Bringing the Power of Map/Reduce to Everyday Applicatio
+ ns
+DESCRIPTION:Presented by Eric Day (Sun Microsystems), Brian Aker (Sun Mi
+ crosystems, Inc.). Come learn the fundamentals of how to leverage Gearma
+ n, the open-source, distributed job queuing system. Originally designed
+ to scale LiveJournal.com, Gearman is now faster than ever and can help y
+ ou build your own scalable applications. Gearman's generic design allows
+ it to be used as a building block for almost any use - from speeding up
+ your website to building your own Map/Reduce cluster.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T122000
+DTSTART;TZID=US/Pacific:20090722T113500
+DTSTAMP:20090310T221241
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8333
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-11:35--8333
+SUMMARY:Distributed Bug Tracking with SD
+DESCRIPTION:Presented by Jesse Vincent (Best Practical). SD is a disconn
+ ected, replicated bug tracking system designed to let developers track a
+ nd resolve bugs without sacrificing the flexibility of the modern workfl
+ ows that distributed version control systems have made possible. This t
+ alk will teach you how to start becoming more productive with SD without
+ giving up your existing bug tracker.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T122000
+DTSTART;TZID=US/Pacific:20090722T113500
+DTSTAMP:20090708T162549
+LOCATION:Ballroom A8
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8468
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-11:35--8468
+SUMMARY:Virtualize vs Containerize: Fight! Why the Biggest Virtualizati
+ on Technologies Aren't Always the Best Choice
+DESCRIPTION:Presented by Irving Popovetsky (Irving Popovetsky Consulting
+ ). Everyone has a reason to love virtualization: security, configuration
+ isolation... the list goes on. But containerization offers many of the
+ same goodies as virtualization, alongside an efficiency and performance
+ advantage. Just what you need, more options. There's no wrong answer. An
+ dy de la Lucha and Irving Popovetsky help you ask the right questions ab
+ out what's right for your environment.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T122000
+DTSTART;TZID=US/Pacific:20090722T113500
+DTSTAMP:20090604T214930
+LOCATION:Meeting Room B1/B4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7982
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-11:35--7982
+SUMMARY:The Linux Defenders: Stop the Trolls, Protect Linux, Further Inn
+ ovation
+DESCRIPTION:Presented by Keith Bergelt (Open Invention Network). Open In
+ vention Network (OIN) has collaboratively unveiled the free Linux Defend
+ ers program, which is designed to make prior art more readily accessible
+ to patent and trademark office examiners, as well as increase the quali
+ ty of granted patents and reduce the number of second-rate patents. Keit
+ h Bergelt, CEO of OIN, will demonstrate how to use the program and discu
+ ss its benefits.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T122000
+DTSTART;TZID=US/Pacific:20090722T113500
+DTSTAMP:20090310T213841
+LOCATION:Meeting Room B2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7593
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-11:35--7593
+SUMMARY:New Ways for Teaching Children Software Programming
+DESCRIPTION:Presented by Howard Abrams (Joule Labs). Software programmin
+ g has come a long way for students and younger children since the days o
+ f Logo. Syntax has been replaced with connecting blocks and the triangle
+ turtle has been replaced with custom artwork children create themselves
+ . Now, multi-threading and event processing are easier to teach children
+ than functions, and this session discusses these ideas as well as so th
+ e edge of kid code.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T122000
+DTSTART;TZID=US/Pacific:20090722T113500
+DTSTAMP:20090414T190527
+LOCATION:Meeting Room B3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8808
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-11:35--8808
+SUMMARY:Industrialization of OBM in Ubuntu
+DESCRIPTION:Presented by Sylvain Garcia (LINAGORA). It is not an easy ta
+ sk to integrate an OpenSource solution in an enterprise. We'll show you
+ how you can turn a successful OS project into an enterprise-grade produc
+ t. We'll share our experience with industrialization and virtualization
+ of a big OS project, how we built ubuntu packages, how we included our p
+ roject in the Ubuntu distribution and how we use virtualization to devel
+ op our product.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T122000
+DTSTART;TZID=US/Pacific:20090722T113500
+DTSTAMP:20090520T162210
+LOCATION:Meeting Room C2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9399
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-11:35--9399
+SUMMARY:A Guide to Free, Self-hosted Online Video Apps
+DESCRIPTION:Presented by Shay David (Kaltura). Video lovers of the world
+ unite. Shay will present the world's first full open source video solut
+ ion stack (used by Wikipedia and 27,000 other publishers), and demo seve
+ ral self-hosted video applications. He’ll walk through technicalities of
+ setting up an online video platform, discuss pros and cons of self-hos
+ ted versus SaaS, and even dive into some code.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T122000
+DTSTART;TZID=US/Pacific:20090722T113500
+DTSTAMP:20090625T170111
+LOCATION:Meeting Room C3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10225
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-11:35--10225
+SUMMARY:Interoperability - Build Mission Critical Applications in PHP, R
+ uby, Java and Eclipse Using Microsoft Software and Services
+DESCRIPTION:Presented by Vijay Rajagopalan (Microsoft). Microsoft has de
+ livered multiple technologies that focus on interoperability with non-Mi
+ crosoft and Open Source technologies. Learn how to use the Eclipse tools
+ today to build Silverlight applications that run on PCs and Macs; how t
+ o develop using combinations of PHP, Java and Ruby in addition to the st
+ andard Microsoft languages.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T122000
+DTSTART;TZID=US/Pacific:20090722T113500
+DTSTAMP:20090310T223705
+LOCATION:Meeting Room J1/J4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8403
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-11:35--8403
+SUMMARY:ElectionAudits: a Django App for Advanced Election Auditing
+DESCRIPTION:Presented by Neal McBurnett (Internet2). The open source Ele
+ ctionAudits software was used in Boulder Colorado's groundbreaking elect
+ ion audit in 2008. Recent advances in auditing practices can help incre
+ ase confidence in elections. This new Django-based app ties together vo
+ ter-verified paper ballots, batch reporting, verifiably random selection
+ of batches, hand counts, and statistical analysis. Come, and help audi
+ t in your state!
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T122000
+DTSTART;TZID=US/Pacific:20090722T113500
+DTSTAMP:20090323T213732
+LOCATION:Meeting Room J2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7941
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-11:35--7941
+SUMMARY:State-of-the-art Profiling with Devel::NYTProf
+DESCRIPTION:Presented by Tim Bunce (TigerLead). Devel::NYTProf has revol
+ utionized profiling perl code. Making accurate and detailed performance
+ data available for the first time, and in richly annotated and inter-lin
+ ked HTML reports. Come and learn how NYTProf can shed light on the perfo
+ rmance hot spots in your code.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T122000
+DTSTART;TZID=US/Pacific:20090722T113500
+DTSTAMP:20090409T184505
+LOCATION:Meeting Room J3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8108
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-11:35--8108
+SUMMARY:Introduction to Animation and OpenGL on the Android SDK
+DESCRIPTION:Presented by Satya Komatineni (Active Intellect, Inc.). Hand
+ held is the new personal computer. The open sourced handheld plaftform,
+ Android SDK, presents a great opportunity for programmers all around the
+ world to make an impact on education and entertainement. This session w
+ ill take you through the Animation and OpenGl capabilities of the Androi
+ d SDK to get you started on a path of innovation.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T143000
+DTSTART;TZID=US/Pacific:20090722T134500
+DTSTAMP:20090604T162322
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7413
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-13:45--7413
+SUMMARY:Green Computing for the Little Guys: What Can a Fortune 2000 Com
+ pany Do To Green Their Centralized Computing Resources?
+DESCRIPTION:Presented by James Turner (O'Reilly Media), Bill Weihl (Goog
+ le, Inc.), Jim Oberholtzer (United States Bowling Congress), Allyson Kle
+ in (Intel Corporation). Large data center providers such as Google and M
+ icrosoft are taking significant steps to cut down their power and coolin
+ g requirements, but how about a typical company with a campus-sized data
+ center? What can be done to make a server room full of rack-mounted 1U
+ systems more efficient? Does virtualization hold the key? Are more co
+ res better than less? Our panelists will clue you in.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T143000
+DTSTART;TZID=US/Pacific:20090722T134500
+DTSTAMP:20090312T031828
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8213
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-13:45--8213
+SUMMARY:Bug Fixing for Everyone
+DESCRIPTION:Presented by Akkana Peck (*). One of the most commonly menti
+ oned benefits of open source is: "Users can fix bugs themselves!" But wh
+ at if you aren't a programmer? This talk will take non-programmers throu
+ gh the basics of searching bug reports, filing good bugs, tracking down
+ what's causing a bug, and maybe even fixing it yourself, all without any
+ prior programming experience.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T143000
+DTSTART;TZID=US/Pacific:20090722T134500
+DTSTAMP:20090310T213127
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8370
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-13:45--8370
+SUMMARY:Simplify Packaging with openSUSE Build Service
+DESCRIPTION:Presented by Joe Brockmeier (Novell). Creating packages for
+ all major Linux distros can be a snap with the openSUSE Build Service. L
+ earn how to create RPMs and Debian Packages, custom distributions, or ev
+ en run your own build service instance.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T143000
+DTSTART;TZID=US/Pacific:20090722T134500
+DTSTAMP:20090310T214058
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7461
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-13:45--7461
+SUMMARY:Programmer Insecurity and the Genius Myth
+DESCRIPTION:Presented by Ben Collins-Sussman (Google, Inc.), Brian Fitzp
+ atrick (Google, Inc.). A pervasive elitism hovers in the background of c
+ ollaborative software development: everyone secretly wants to be seen a
+ s a genius. In this talk, we discuss how to avoid this trap and gracefu
+ lly exchange personal ego for personal growth and super-charged collabor
+ ation. We'll also examine how software tools affect social behaviors, a
+ nd how to successfully manage the growth of new ideas.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T143000
+DTSTART;TZID=US/Pacific:20090722T134500
+DTSTAMP:20090318T002405
+LOCATION:Ballroom A4/A5
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7950
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-13:45--7950
+SUMMARY:Full Text Search with Sphinx
+DESCRIPTION:Presented by Peter Zaitsev (MySQL Performance Blog). Sphinx
+ Full Text search engine became increasingly popular over years powering
+ search for number of Alexa 100 sites as Craigslist and NetLog. Sphinx
+ combines powerful full text search features with ease of use and high p
+ erformance. Being specially designed for indexing database content it i
+ s natural fit for modern database powered web sites.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T143000
+DTSTART;TZID=US/Pacific:20090722T134500
+DTSTAMP:20090310T231038
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8400
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-13:45--8400
+SUMMARY:Getting it Done
+DESCRIPTION:Presented by Wez Furlong (Message Systems). Stressing out ab
+ out meeting deadlines for delivering software? A good development proces
+ s can make a world of difference to the quality of your work and work en
+ vironment. I'd like to share my experiences and tell you about the proce
+ ss that I use to manage my development teams at Message Systems.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T143000
+DTSTART;TZID=US/Pacific:20090722T134500
+DTSTAMP:20090311T205758
+LOCATION:Ballroom A8
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8410
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-13:45--8410
+SUMMARY:Automating System Builds and Maintenance with Cobbler and Puppet
+DESCRIPTION:Presented by Eric Mandel (BlackMesh), Jason Ford (BlackMesh)
+ . Quickly, accurately, and reliably deploying new systems, across the en
+ tire spectrum of production, test, and development systems, is a constan
+ t challenge for system administrators and developers. We leveraged Cobb
+ ler and Puppet to overcome these challenges and will show attendees how
+ they can use Cobbler and Puppet to quickly, accurately, and reliably dep
+ loy new systems.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T143000
+DTSTART;TZID=US/Pacific:20090722T134500
+DTSTAMP:20090326T000947
+LOCATION:Meeting Room B1/B4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7507
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-13:45--7507
+SUMMARY:User Interface Year 2020
+DESCRIPTION:Presented by Robin Rowe (Linux Plus Magazine). In the Year 2
+ 020 the user interface will look completely different from today. What w
+ ill that be and how can FOSS lead the way?
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T143000
+DTSTART;TZID=US/Pacific:20090722T134500
+DTSTAMP:20090317T133740
+LOCATION:Meeting Room B2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8365
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-13:45--8365
+SUMMARY:Open Source and Democracy - Creating transparent, trustworthy vo
+ ting systems
+DESCRIPTION:Presented by James Tillman (Elections by the People Foundati
+ on, Inc.), Richard Benham (Elections by the People Foundation, Inc.). Ov
+ er the last few years, developments in the use of Open Source for creati
+ ng efficient, verifiable, and trustworthy voting systems present viable
+ approaches to solving technical problems in elections systems. The next
+ wave of development will build on these recent achievements in the fiel
+ d by integrating them into the real, often messy, world of election admi
+ nistration and law.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T143000
+DTSTART;TZID=US/Pacific:20090722T134500
+DTSTAMP:20090404T185848
+LOCATION:Meeting Room B3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7837
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-13:45--7837
+SUMMARY:Building a Private Cloud with Ubuntu Server
+DESCRIPTION:Presented by Rick Clark (Canonical USA), Søren Hansen (Canon
+ ical Ltd.). A discussion and demonstration on building and managing a pr
+ ivate cloud using Ubuntu Server, and Eucalyptus
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T143000
+DTSTART;TZID=US/Pacific:20090722T134500
+DTSTAMP:20090616T225603
+LOCATION:Meeting Room C2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10193
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-13:45--10193
+SUMMARY:Collaboration as a Business Function
+DESCRIPTION:Presented by Brent McConnell (Novell). With collaboration an
+ d community tools like blogs, wikis, forums, tagging, and rating systems
+ , the enterprise has become filled with collaboration tools to enable pr
+ oductivity. However, the lack of integration in all these platforms crea
+ tes not only Data Silos but Collaboration Silos.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T143000
+DTSTART;TZID=US/Pacific:20090722T134500
+DTSTAMP:20090619T215349
+LOCATION:Meeting Room C3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10213
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-13:45--10213
+SUMMARY:Open Source Telephony in a Connected World
+DESCRIPTION:Presented by Nagarajan Guru (Intel), Denis Kenzior (Intel).
+ As open source became mainstream and open source grew in the offering of
+ applications, frameworks and system software, telephony platform and te
+ lephony frameworks in the open source did not exist until recently. In t
+ his session we will show you the how to of developing Linux telephony ap
+ plications using Ofono and share with you the under-the-hood workings of
+ a cellular telephony software stack.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T143000
+DTSTART;TZID=US/Pacific:20090722T134500
+DTSTAMP:20090506T185508
+LOCATION:Meeting Room J1/J4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8308
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-13:45--8308
+SUMMARY:Innovative Interaction Using wiiMotes
+DESCRIPTION:Presented by John Harrison (Insight Industries), Matthew Har
+ rison (Insight Industries). wiiMote headtracking demos are a YouTube sen
+ sation and the technology is making its way from demos to production gam
+ es and scientific visualization. Learn the theory behind wiiMote headtra
+ cking, see it in action, and imagine what you might do with it.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T143000
+DTSTART;TZID=US/Pacific:20090722T134500
+DTSTAMP:20090311T225215
+LOCATION:Meeting Room J2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8059
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-13:45--8059
+SUMMARY:Perl 6 Update
+DESCRIPTION:Presented by Larry Wall (Netlogic Microsystems), Damian Conw
+ ay (Thoughtstream). Larry Wall and Damian Conway will present the latest
+ features of Perl 6, and discuss the on-going implementation of the new
+ Perl.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T143000
+DTSTART;TZID=US/Pacific:20090722T134500
+DTSTAMP:20090311T110247
+LOCATION:Meeting Room J3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8082
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-13:45--8082
+SUMMARY:GNOME Mobile
+DESCRIPTION:Presented by Dave Neary (Neary Consulting). GNOME Mobile is
+ a collection of community projects which are at the heart of an increasi
+ ng number of mobile Linux platforms. We will present the genesis of the
+ initiative, the state of the art, and our plans for the project, as we b
+ ecome increasingly relevant to free software mobile developers.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T152000
+DTSTART;TZID=US/Pacific:20090722T143500
+DTSTAMP:20090311T174202
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7388
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-14:35--7388
+SUMMARY:Open Source / Open Government
+DESCRIPTION:Presented by Danese Cooper (Open Source Initiative and REvol
+ ution Computing), Greg Elin (Sunlight Foundation), Brian Behlendorf (sel
+ f), Silona Bonewald (League Of Technical Voters), Michael Tiemann (Open
+ Source Initiative). Panel of movers and shakers in the movement to open
+ government using the principals of Open Source.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T152000
+DTSTART;TZID=US/Pacific:20090722T143500
+DTSTAMP:20090310T213150
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7885
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-14:35--7885
+SUMMARY:Putting It All Together: Contributing to Open Source Projects
+DESCRIPTION:Presented by Justin Erenkrantz (The Apache Software Foundati
+ on). In most open-source projects, often left unsaid is how to effective
+ ly contribute within the accepted "societal norms" of a project. Do not
+ become a poisonous person and instead learn how to constructively contr
+ ibute to your favorite open source project!
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T152000
+DTSTART;TZID=US/Pacific:20090722T143500
+DTSTAMP:20090310T214156
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8055
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-14:35--8055
+SUMMARY:Tracking Package Freshness
+DESCRIPTION:Presented by Scott Shawcroft (University of Washington). Com
+ e find out which distribution is best... at keeping their official repos
+ itories up to date. Or which distribution has the most up to date LAMP
+ packages. This presentation explores trends culled from package release
+ s since October '08, discusses the challenge of making sense of it all a
+ nd possible improvements to distribution and package maintenance.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T152000
+DTSTART;TZID=US/Pacific:20090722T143500
+DTSTAMP:20090310T231420
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8217
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-14:35--8217
+SUMMARY:Living on the Edge
+DESCRIPTION:Presented by Danny O'Brien (Electronic Frontier Foundation).
+ Why do we trust our most personal diary entries with only our closest f
+ riends -- and distant machines of a faceless social networking service?
+ Why do you hand over to Amazon files and passwords that you wouldn't tel
+ l your own mother? EFF's Danny O'Brien explains why innovation still com
+ es from the edge of our networks -- and how the next generation of free
+ software will help.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T152000
+DTSTART;TZID=US/Pacific:20090722T143500
+DTSTAMP:20090701T165951
+LOCATION:Ballroom A4/A5
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7607
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-14:35--7607
+SUMMARY:What You Need to Know About Rails3
+DESCRIPTION:Presented by Yehuda Katz (Engine Yard Inc.). In December, Ra
+ ils announced it would merge with Merb, and that they would be working t
+ ogether to bring many of the salient elements of Merb into the next vers
+ ion of Rails. Yehuda Katz, the maintainer of Merb (now on the Rails core
+ team), will walk you through what's new, with a special focus on modula
+ rity, performance, and a clean plugin API, three new points of focus for
+ the framework
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T152000
+DTSTART;TZID=US/Pacific:20090722T143500
+DTSTAMP:20090418T020503
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8039
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-14:35--8039
+SUMMARY:CMake/CTest/CDash/CPack - Build, Test, and Deploy Software in a
+ Cross-Platform Development Environment
+DESCRIPTION:Presented by William Hoffman (Kitware Inc). CMake is a popul
+ ar cross-platform, open-source build system used by KDE and many other p
+ rojects. CMake builds software using a set of simple platform independe
+ nt configuration files. CMake generates native makefiles and workspaces
+ targeted many popular compiler environments. CMake is actually a family
+ of tools that can be used to build (CMake), test (CTest/CDash) and deplo
+ y (CPack) software.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T152000
+DTSTART;TZID=US/Pacific:20090722T143500
+DTSTAMP:20090409T175134
+LOCATION:Ballroom A8
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8472
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-14:35--8472
+SUMMARY:Server Management & Source Control: The key to scalability and t
+ eamwork
+DESCRIPTION:Presented by Lance Albertson (Oregon State University Open S
+ ource Lab). Keeping track of configuration changes between hundreds of s
+ ervers is a challenging task not to mention keeping a history of all the
+ changes that were made. This session focusing on utilizing open source
+ technology to not only help you manage your servers but it also promote
+ teamwork and self documentation. I'll focus on how the OSU Open Source L
+ ab uses cfengine and git to manage their servers.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T152000
+DTSTART;TZID=US/Pacific:20090722T143500
+DTSTAMP:20090325T080647
+LOCATION:Meeting Room B1/B4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8401
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-14:35--8401
+SUMMARY:Ten Usability Epiphanies for Your Open Source Web-app
+DESCRIPTION:Presented by Sigurd Magnusson (SilverStripe). Web 2.0, Ajax,
+ usability, and thoughtful graphic design are now commonplace, but open
+ source web applications are lagging behind. Learn techniques that will m
+ ake your project easier to use, more productive, less prone to user-frus
+ tration, and more successful.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T152000
+DTSTART;TZID=US/Pacific:20090722T143500
+DTSTAMP:20090310T225802
+LOCATION:Meeting Room B2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8413
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-14:35--8413
+SUMMARY:Transparent Sharing of Complex Data with YAML
+DESCRIPTION:Presented by Ingy döt Net (Hackers, Inc). YAML is the serial
+ ization language that enables sharing of complex data between Perl, Pyth
+ on, Ruby, PHP and Java. It does it so in a human friendly manner. Many p
+ opular frameworks use YAML, including Ruby on Rails. In this talk, Ingy
+ döt Net, one of the authors of the YAML specification, will show you how
+ to share data objects not feasible by JSON or XML.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T152000
+DTSTART;TZID=US/Pacific:20090722T143500
+DTSTAMP:20090403T235114
+LOCATION:Meeting Room B3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8191
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-14:35--8191
+SUMMARY:Where'd my Files Go? A guide to Modern Ubuntu Distributions
+DESCRIPTION:Presented by Kyle Rankin (QuinStreet, Inc.). While you might
+ not be able to tell at a glance, a lot has changed behind the scenes on
+ a modern Ubuntu system. For instance, did you know Ubuntu is phasing ou
+ t System V init and has already replaced the init binary? In this talk K
+ yle discusses the current changes Ubuntu is making to what we might cons
+ ider the traditional Linux system.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T152000
+DTSTART;TZID=US/Pacific:20090722T143500
+DTSTAMP:20090630T211204
+LOCATION:Meeting Room C2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10278
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-14:35--10278
+SUMMARY:Sun GlassFish (OpenSolaris) Web Stack - The Next Generation Open
+ Web Infrastructure
+DESCRIPTION:Presented by Murthy Chintalapati (Sun Microsystems Inc.), Jy
+ ri Virkki (Sun Microsystems). The OpenSolaris Web Stack is an open sourc
+ e project consists of popular open source web infrastructure (known as
+ LAMP or SAMP) technologies, such as Apache HTTPd, PHP, Python, MySQL, l
+ ighttpd, as well as GlassFish and Tomcat. As a fully integrated in the
+ OpenSolaris operating system, Web Stack delivers close integration with
+ OpenSolaris innovations such as DTrace, ZFS, SMF and RBAC.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T152000
+DTSTART;TZID=US/Pacific:20090722T143500
+DTSTAMP:20090713T174407
+LOCATION:Meeting Room C3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10438
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-14:35--10438
+SUMMARY:The State of SourceForge
+DESCRIPTION:Presented by Ross Turk (SourceForge, Inc.). Campaigning for
+ wider adoption of open source, Ross attends conferences around the world
+ , represents SourceForge in multiple industry consortia and professional
+ groups, and makes open source software a little more fun through innova
+ tive programs like the Community Choice Awards.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T152000
+DTSTART;TZID=US/Pacific:20090722T143500
+DTSTAMP:20090323T204625
+LOCATION:Meeting Room J1/J4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8317
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-14:35--8317
+SUMMARY:Best practices for 'scripting' with Python 3
+DESCRIPTION:Presented by Matthew Harrison (Insight Industries). Sure you
+ it's easy to throw a script over the fence for your users, but how do y
+ ou deal with maintenance, testing, packaging and distributing your scrip
+ ts? This talk will cover best practices for python scripting including
+ any changes needed for version 3.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T152000
+DTSTART;TZID=US/Pacific:20090722T143500
+DTSTAMP:20090325T211627
+LOCATION:Meeting Room J2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8582
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-14:35--8582
+SUMMARY:Hacking Rakudo Perl
+DESCRIPTION:Presented by Patrick Michaud (pmichaud.com). This talk prese
+ nts ways in which people can become active contributors to Perl 6 and Ra
+ kudo Perl. It presents the details needed to quickly become a Rakudo Pe
+ rl and Perl 6 library developer.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T152000
+DTSTART;TZID=US/Pacific:20090722T143500
+DTSTAMP:20090310T233457
+LOCATION:Meeting Room J3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8360
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-14:35--8360
+SUMMARY:Making Test Frameworks Mobile - How to Stuff a 900lb Gorilla int
+ o a Smartphone
+DESCRIPTION:Presented by Clint Talbert (Mozilla), Joel Maher (Mozilla).
+ The Mozilla project has six test frameworks with over 100,000 combined t
+ ests. For the Fennec mobile Firefox project, we coerced those frameworks
+ to run on Maemo, Windows Mobile, and Symbian platforms. We will cover
+ the challenges we faced and the lessons we learned. Come find out how w
+ e did it and how to apply these ideas to your next mobile project.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T171500
+DTSTART;TZID=US/Pacific:20090722T163000
+DTSTAMP:20090310T213128
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8384
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-16:30--8384
+SUMMARY:Bureaucrats, Technocrats and Policy Cats: How the Government is
+ turning to Open Source, and Why.
+DESCRIPTION:Presented by Deborah Bryant (OSU Open Source Lab), Bjorn Fre
+ eman-Benson (DemocracyLab), Greg Lund-Chaix (Oregon State University Ope
+ n Source Lab), Clay Johnson (Sunlight Labs), Aleksandar Totic (Open Sour
+ ce Digital Voting Foundation). Open source shares critical values with g
+ overnment and public education that make them function in the ideal; mer
+ itocracy of ideas, transparency, collaboration. But where is the sweet s
+ pot in the confluence of these social, technical, and public policy idea
+ ls? And where is the opportunity for the citizen developer to get involv
+ ed?
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T171500
+DTSTART;TZID=US/Pacific:20090722T163000
+DTSTAMP:20090310T231927
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8085
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-16:30--8085
+SUMMARY:Stand Up to the Lawyers -- Open Source Licensing and Intellectua
+ l Property Law 101 for Developers
+DESCRIPTION:Presented by Donald Smith (The Eclipse Foundation). Have you
+ ever had a manager or legal department slow down your project why they
+ try to figure out software licensing issues? This session will arm you
+ with all the key information you need to join the conversation and recog
+ nize when your lawyer is trying to pull a fast one, versus when you’re f
+ acing a legitimate challenge.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T171500
+DTSTART;TZID=US/Pacific:20090722T163000
+DTSTAMP:20090311T054730
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8371
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-16:30--8371
+SUMMARY:Hacking your Portable Linux Server
+DESCRIPTION:Presented by Federico Lucifredi (SUSE team, Novell). Hackin
+ g the Western Digital Mybook II to transform this elegant external hard
+ drive into a bare-bones, extremely flexible hardware platform, in a revi
+ val of what we did with the Linksys WRT54G a few years ago. Intermediate
+ system skills (particularly Perl and Shell) recommended, along with ima
+ gination and the desire to have fun!
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T171500
+DTSTART;TZID=US/Pacific:20090722T163000
+DTSTAMP:20090323T210250
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8465
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-16:30--8465
+SUMMARY:Antifeatures
+DESCRIPTION:Presented by Benjamin Mako Hill (MIT Center for Future Civic
+ Media). This talk provides a humorous description of an argument in fav
+ or of free and open source software based on what I call "antifeatures:"
+ functionality that technology developers charge users to not include. F
+ rom DRM to crippled OSes to digital cameras, I will show off many of the
+ most egregious antifeatures and describe how open source both makes the
+ m impossible and helps users work around them.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T171500
+DTSTART;TZID=US/Pacific:20090722T163000
+DTSTAMP:20090310T213139
+LOCATION:Ballroom A4/A5
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7378
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-16:30--7378
+SUMMARY:Using Hadoop for Big Data Analysis
+DESCRIPTION:Presented by Mike Olson (Cloudera). Hadoop is a powerful ope
+ n source tool for analyzing large volumes of data. I'll provide an over
+ view of Hadoop's architecture and describe some real-world use cases.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T171500
+DTSTART;TZID=US/Pacific:20090722T163000
+DTSTAMP:20090310T221202
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8216
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-16:30--8216
+SUMMARY:Embracing Forks: How Git Changes Open Source Contribution
+DESCRIPTION:Presented by Tom Preston-Werner (GitHub). Git is a distribut
+ ed version control system with easy branching that has forever changed t
+ he way that open source projects accept contributions. By embracing a pa
+ ttern of casual forking, the barrier to submit patches and track upstrea
+ m changes is reduced, resulting in an explosion of contributors and patc
+ hes. This talk will use case studies to illustrate how your project can
+ enjoy these benefits.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T171500
+DTSTART;TZID=US/Pacific:20090722T163000
+DTSTAMP:20090706T173909
+LOCATION:Ballroom A8
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8972
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-16:30--8972
+SUMMARY:R we f#¢$ed? Why We Don't Understand Risk, and How it Dooms Us A
+ ll
+DESCRIPTION:Presented by Danese Cooper (Open Source Initiative and REvol
+ ution Computing), David Smith (REvolution Computing). Risk and chance pl
+ ay a huge part in our daily lives, yet the human brain doesn't come pre-
+ loaded with the right software to make intuitive decisions about them. T
+ his talk is to provide some illumination in the basic principles to help
+ you understand and quantify risk, and to introduce you to the open-sour
+ ce language R, an essential tool for finding statistical solutions to yo
+ ur own problems.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T171500
+DTSTART;TZID=US/Pacific:20090722T163000
+DTSTAMP:20090311T045701
+LOCATION:Meeting Room B1/B4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8028
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-16:30--8028
+SUMMARY:Sex and Design Axioms
+DESCRIPTION:Presented by Juhan Sonin (Involution Studios). Sex and Desig
+ n Axioms describes the minimal rule set for designing interfaces: the fo
+ undational concepts that are required knowledge for designers and engine
+ ers to create usable and elegant interfaces. It is the analog for The El
+ ements of Style by Strunk and White on user interface that encompasses l
+ ayout, interaction, visual design, and prototyping tenets.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T171500
+DTSTART;TZID=US/Pacific:20090722T163000
+DTSTAMP:20090310T224645
+LOCATION:Meeting Room B2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8432
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-16:30--8432
+SUMMARY:Linux Filesystem Performance for Databases
+DESCRIPTION:Presented by Selena Deckelmann (PostgreSQL Project). How do
+ you choose the right filesystem for your database management system? Adm
+ inistrators have a variety of filesystems to choose from, as well as vol
+ ume management and hardware or software RAID. This talk will examine how
+ different the performance of filesystems really are, and how do you go
+ about systematically determining which configuration will be the best fo
+ r your application and hardware.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T171500
+DTSTART;TZID=US/Pacific:20090722T163000
+DTSTAMP:20090604T162724
+LOCATION:Meeting Room B3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8621
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-16:30--8621
+SUMMARY:A Survey of Ubuntu Server in the Enterprise
+DESCRIPTION:Presented by Nick Barcet (Canonical UK Ltd). A recent survey
+ conducted by the Ubuntu Server community jointly with Canonical and Red
+ monk delivers some great insights on why more and more enterprises are c
+ hoosing Ubuntu Server Edition for their deployments and what workloads a
+ re being used. This talk will discuss the survey findings and propose so
+ me conclusions.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T171500
+DTSTART;TZID=US/Pacific:20090722T163000
+DTSTAMP:20090714T175949
+LOCATION:Meeting Room C2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10369
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-16:30--10369
+SUMMARY:The Cloud: OSS Business Model 3.0
+DESCRIPTION:Presented by Jeff Lawson (Twilio). Open source-based busines
+ ses have successfully relied a small but reliable set of business models
+ , including the support model and the freemium model. More recently, co
+ mpanies have discovered that the Cloud offers a new monetization model,
+ focused on reliability, scalability and simplified configuration.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T171500
+DTSTART;TZID=US/Pacific:20090722T163000
+DTSTAMP:20090715T204601
+LOCATION:Meeting Room C3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10451
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-16:30--10451
+SUMMARY:The Power of Cloud API's
+DESCRIPTION:Presented by Alex Polvi (Cloudkick), Michael Mayo (ioffer.co
+ m), Erik Carlin (Rackspace). Coming soon!
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T171500
+DTSTART;TZID=US/Pacific:20090722T163000
+DTSTAMP:20090310T222907
+LOCATION:Meeting Room J1/J4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7370
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-16:30--7370
+SUMMARY:Using Windmill
+DESCRIPTION:Presented by Adam Christian (Slide Inc.). Windmill is the be
+ st-integrated solution for Web test development and its success is large
+ ly due to its involved Open Source Community. This talk will get you wri
+ ting and running automated tests and show off some of the most useful bu
+ ilt-in tools for debugging and continuous integration.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T171500
+DTSTART;TZID=US/Pacific:20090722T163000
+DTSTAMP:20090314T012857
+LOCATION:Meeting Room J2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8224
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-16:30--8224
+SUMMARY:UTF8, Perl and You
+DESCRIPTION:Presented by Rafael Almeria (Xerox). Do you have a website w
+ ritten in Perl that you need to migrate to UTF-8? Here are some importan
+ t details that you need to know in order to achieve that goal.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T171500
+DTSTART;TZID=US/Pacific:20090722T163000
+DTSTAMP:20090311T184157
+LOCATION:Meeting Room J3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8814
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-16:30--8814
+SUMMARY:Building an Atom-enabled Map-driven Location-aware Web-centric M
+ obile Application with POJOs and Android
+DESCRIPTION:Presented by Tim Bray (Sun Microsystems, Inc.). The good new
+ s is that you can do what the title says, and pretty easily too. The eve
+ n better news is that the platform and market are radically open. There
+ are some warts and some bad news too; this talk is a personal narrative
+ covering the lessons, pleasing and painful, learned in the course of my
+ first hands-on Android project.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T180500
+DTSTART;TZID=US/Pacific:20090722T172000
+DTSTAMP:20090528T164026
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8453
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-17:20--8453
+SUMMARY:Hacking the Open Government
+DESCRIPTION:Presented by Adina Levin, Debra Bowen (State of California),
+ Silona Bonewald (League Of Technical Voters), Kevin Marks (Google), Ila
+ n Rabinovitch (Geek-PAC). This panel will discuss accessing open governm
+ ent initiatives and creating new services around existing government dat
+ a on the internet. The idea is to get a point of view from each step of
+ the process for open government initiatives, from producer and publisher
+ , to standards advocate, to consumer and user, and to elected representa
+ tive.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T180500
+DTSTART;TZID=US/Pacific:20090722T172000
+DTSTAMP:20090310T214051
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8352
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-17:20--8352
+SUMMARY:Business Models for Open Source Developers
+DESCRIPTION:Presented by Darrius Thompson (OpenCandy, Inc.). There are m
+ any different Open Source business models. Yet the search continues for
+ reliable revenue generating plans. This session will explore the variety
+ of approaches available to developers and will analyze both the advanta
+ ges and disadvantages of existing business models, while also exploring
+ new models, such as revenue sharing, recommendations, third-party bundli
+ ng, advertising, and more.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T180500
+DTSTART;TZID=US/Pacific:20090722T172000
+DTSTAMP:20090312T032839
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8207
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-17:20--8207
+SUMMARY:Featherweight Linux: How to turn a netbook or older laptop into
+ a Ferrari
+DESCRIPTION:Presented by Akkana Peck (*). This talk will cover ways of c
+ onfiguring a Linux distribution to run efficiently on slow CPU, low memo
+ ry machines. You can get big performance gains from areas such as: * sp
+ eeding up the boot process * options for lightweight window managers *
+ performance tools that can help you find bottlenecks * tuning your ker
+ nel * Finding lightweight alternatives to big applications
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T180500
+DTSTART;TZID=US/Pacific:20090722T172000
+DTSTAMP:20090310T214807
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7493
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-17:20--7493
+SUMMARY:Five Musical Patterns for Programmers
+DESCRIPTION:Presented by Jon Dahl (Tumblon). Music and software a lot in
+ common. We will look at five patterns from the world of music that are
+ relevant to programming, and talk about how music history and theory can
+ help us become better software developers.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T180500
+DTSTART;TZID=US/Pacific:20090722T172000
+DTSTAMP:20090310T223128
+LOCATION:Ballroom A4/A5
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8404
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-17:20--8404
+SUMMARY:Open Source Analytics: Visualization and Predictive Modeling of
+ Big Data with the R Programming Language
+DESCRIPTION:Presented by Michael Driscoll (Dataspora). The age of Big Da
+ ta demands open-source tools that move beyond storage towards analytics:
+ tools to turn terabytes into insights. R is an open-source language fo
+ r statistical computing and graphics, and an extensible, embeddable tool
+ for the analysis of large data sets. In this session, I showcase R's po
+ wer by building predictive models for Brazilian soybean harvests and bas
+ eball slugger salaries.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T180500
+DTSTART;TZID=US/Pacific:20090722T172000
+DTSTAMP:20090310T225028
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8385
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-17:20--8385
+SUMMARY:Bluffer's Guide to autoconf and automake
+DESCRIPTION:Presented by Casey West (Casey West Consulting). As users of
+ FLOSS software we have, on occasion, the need to understand the configu
+ ration systems of the software we use. This presentation will arm you wi
+ th just enough knowledge to be dangerous. You will learn how to write co
+ nfigure template files and, yes, you will learn about m4. m4 is the macr
+ o processor language used by autoconf.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T180500
+DTSTART;TZID=US/Pacific:20090722T172000
+DTSTAMP:20090310T215203
+LOCATION:Ballroom A8
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7842
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-17:20--7842
+SUMMARY:Preventing Data Loss Through Prudent Archiving
+DESCRIPTION:Presented by Bruce Momjian (EnterpriseDB). No one likes the
+ sinking feeling of having lost data --- pictures, documents, source code
+ , or video that is gone and can never be fully recreated. Though pruden
+ t archiving and risk analysis, it is possible to avoid data loss in all
+ but the most extreme circumstances. Data longevity is also an important
+ aspect of archiving, including the use of open data formats.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T180500
+DTSTART;TZID=US/Pacific:20090722T172000
+DTSTAMP:20090311T033158
+LOCATION:Meeting Room B1/B4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8149
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-17:20--8149
+SUMMARY:Put Down the Superglobals! Secure PHP Development with Inspekt
+DESCRIPTION:Presented by Edward Finkler (Funkatron Productions). Inspekt
+ is a filtering and validation library for PHP5. With a focus on ease o
+ f use, Inspekt makes writing secure PHP applications faster and easier.
+ This talk covers the Inspekt library and the "input cage" concept, best
+ practices when utilizing the library, and how to integrate Inspekt with
+ existing applications and popular frameworks.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T180500
+DTSTART;TZID=US/Pacific:20090722T172000
+DTSTAMP:20090310T213744
+LOCATION:Meeting Room B2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7988
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-17:20--7988
+SUMMARY:Practical Object-Oriented Models in SQL
+DESCRIPTION:Presented by Bill Karwin (Karwin Software Solutions). SQL is
+ from Mars, Objects are from Venus. This talk is for software developers
+ who know SQL but are stuck trying to implement common object-oriented s
+ tructures in an SQL database. Mimicking polymorphism, extensibility, an
+ d hierarchical data in the relational database paradigm can be confusing
+ and awkward, but they don't have to be.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T180500
+DTSTART;TZID=US/Pacific:20090722T172000
+DTSTAMP:20090714T021831
+LOCATION:Meeting Room B3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8025
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-17:20--8025
+SUMMARY:Getting It Out There: Distribute Your Software For Ubuntu With L
+ aunchpad
+DESCRIPTION:Presented by Josh Cronemeyer (ThoughtWorks). So you've just
+ finished writing the next big thing, but how do you convince people to u
+ se it and build community around it? This talk will illustrate how to us
+ e Ubuntu's Launchpad to distribute open source applications. Launchpad i
+ s project hosting with unique features that facilitate simple installati
+ ons and upgrades leveraging the standard Debian distribution stack.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T180500
+DTSTART;TZID=US/Pacific:20090722T172000
+DTSTAMP:20090706T154519
+LOCATION:Meeting Room J1/J4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8268
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-17:20--8268
+SUMMARY:Snakebite: The Open Network
+DESCRIPTION:Presented by Trent Nelson (Snakebite), Titus Brown (Michigan
+ State University). Snakebite is a culmination of ten months of secretiv
+ e work, seven trips to Michigan State University, six blown fuses and ab
+ out $60,000. The end result? A network of around 37-ish servers of all
+ different shapes and sizes, specifically geared towards the development
+ needs of open source projects. Get the inside scoop from Snakebite's F
+ ounder, Trent Nelson, and MSU Director Dr. Titus Brown.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T180500
+DTSTART;TZID=US/Pacific:20090722T172000
+DTSTAMP:20090312T042450
+LOCATION:Meeting Room J2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8011
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-17:20--8011
+SUMMARY:Choosing a Web Architecture for Perl
+DESCRIPTION:Presented by Perrin Harkins (We Also Walk Dogs). In the past
+ few years, many new web proxy servers have come onto the scene with new
+ performance promises and features. At the same time, FastCGI has become
+ more widely used, giving people a possible alternative to mod_perl. Thi
+ s talk will help you choose the right architecture for you by presenting
+ a useful set of benchmarks and a comparison of strong points and key fe
+ atures.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T180500
+DTSTART;TZID=US/Pacific:20090722T172000
+DTSTAMP:20090310T213219
+LOCATION:Meeting Room J3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8873
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-17:20--8873
+SUMMARY:Wikipedia for the iPhone/OLPC: storing the sum of human knowledg
+ e in 2GB
+DESCRIPTION:Presented by Patrick Collison (Live Current Media). Released
+ in early 2008 under the GPL, and downloaded over 100,000 times, the off
+ line Wikipedia reader for the iPhone was one of the most popular pre-SDK
+ apps. Now available in 17 languages for the iPhone/OLPC, it's the main
+ means of browsing Wikipedia for those without internet access. This talk
+ explains the techniques and challenges involved in efficiently storing
+ Wikipedia on a mobile device.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T190000
+DTSTART;TZID=US/Pacific:20090722T180000
+DTSTAMP:20090708T162028
+LOCATION:Exhibit Hall 2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9003
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-18:00--9003
+SUMMARY:Expo Hall Reception / OSCON Author Meet and Greet
+DESCRIPTION:Have a drink and mingle with other OSCON participants, and s
+ ee the latest products, projects, services, and gadgets from sponsors an
+ d exhibitors during the Expo Hall Reception. The OSCON Author Meet and G
+ reet will be held there as well at the same time.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T200000
+DTSTART;TZID=US/Pacific:20090722T190000
+DTSTAMP:20090709T170447
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9380
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-19:00--9380
+SUMMARY:Open Source Language Roundtable
+DESCRIPTION:Join us for a live web-casted roundtable discussion with som
+ e of the leading figures in open source languages such as Ruby, Perl, Py
+ thon and PHP, hosted by O'Reilly Media. We'll debate and discuss the st
+ rengths and weaknesses, and what the sweet spots are in the application
+ space for each language.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T200000
+DTSTART;TZID=US/Pacific:20090722T190000
+DTSTAMP:20090512T171501
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9091
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-19:00--9091
+SUMMARY:Open Source Network Monitoring & Management
+DESCRIPTION:As businesses, both small and large, try to cut operating co
+ sts, they begin to turn to open source software. How do we lessen the e
+ ntry barrier to network monitoring with open source software, and what h
+ urdles do we still need to jump?
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T200000
+DTSTART;TZID=US/Pacific:20090722T190000
+DTSTAMP:20090716T201619
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10432
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-19:00--10432
+SUMMARY:StackOverflow Flash Mob for the R User Community
+DESCRIPTION:We will lead an online flashmob to populate StackOverflow wi
+ th R language content. R, the open source statistical language, has a n
+ otoriously steep learning curve. The same technical questions tend be a
+ sked repeatedly on the R-help mailing lists. StackOverflow's forum repr
+ esents a powerful corrective to this ailment, and could prove a valuable
+ resource to the growing R community.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T200000
+DTSTART;TZID=US/Pacific:20090722T190000
+DTSTAMP:20090602T100259
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9778
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-19:00--9778
+SUMMARY:OpenSolaris Source Juicer: Discussing Cloud-based Community Soft
+ ware Development
+DESCRIPTION:OpenSolaris Source Juicer is a web service for software cent
+ ric collaboration and development. Much of the software development env
+ ironment can now be moved into the cloud. I will discuss the capabiliti
+ es of this system as well as future possibilities for collaborative clou
+ d based software development.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T200000
+DTSTART;TZID=US/Pacific:20090722T190000
+DTSTAMP:20090615T233651
+LOCATION:Ballroom A4/A5
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10184
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-19:00--10184
+SUMMARY:Writing (and More) for O'Reilly
+DESCRIPTION:Would you like to write for O'Reilly? Blog? Create podcast
+ s or screencasts? Come find out what the possibilities include.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T200000
+DTSTART;TZID=US/Pacific:20090722T190000
+DTSTAMP:20090602T172042
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9760
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-19:00--9760
+SUMMARY:Meet Authors from Pragmatic Bookshelf
+DESCRIPTION:Gather with published and upcoming authors of programming bo
+ oks from the industry favorite publisher, Pragmatic Bookshelf. Join thi
+ s informal chat about programming, writing books, job hunting, and caree
+ r development.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T200000
+DTSTART;TZID=US/Pacific:20090722T190000
+DTSTAMP:20090528T210752
+LOCATION:Ballroom A8
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9775
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-19:00--9775
+SUMMARY:Gearman
+DESCRIPTION:Did you miss the Gearman tutorial or session? Have a questio
+ n that didn't get answered? Here's one more chance to discuss things!
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T200000
+DTSTART;TZID=US/Pacific:20090722T190000
+DTSTAMP:20090611T032239
+LOCATION:Meeting Room B1/B4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10161
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-19:00--10161
+SUMMARY:Taking Advantage of the Cloud
+DESCRIPTION:Join us to learn about Cloud Computing, how to get started,
+ and how to take advantage of all of the available technology in cloud co
+ mputing today. This buzzword has a lot of interesting innovation behind
+ it and you can take advantage of this innovation easily!
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T200000
+DTSTART;TZID=US/Pacific:20090722T190000
+DTSTAMP:20090617T172607
+LOCATION:Meeting Room B2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10192
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-19:00--10192
+SUMMARY:BASH and Beyond...
+DESCRIPTION:Explore the concepts in automating tasks with BASH, PERL and
+ other scripting languages. What command line tools do you use to get th
+ e job done efficiently and effectively? With the growing prevalence of w
+ eb front-ends, how do you still use the command line to administer your
+ systems?
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T200000
+DTSTART;TZID=US/Pacific:20090722T190000
+DTSTAMP:20090629T192310
+LOCATION:Meeting Room B3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10222
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-19:00--10222
+SUMMARY:Best Practices for Social Websites in the Enterprise
+DESCRIPTION:Companies are increasing looking to use social publishing to
+ build audiences, get feedback about their products, make it easy for us
+ ers and fans to participate socially on their website, and help get conn
+ ected through integration with social networks. In this session we will
+ review best practices in performance, scalability, security, and conten
+ t staging for these social publishing sites.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T200000
+DTSTART;TZID=US/Pacific:20090722T190000
+DTSTAMP:20090709T234248
+LOCATION:Meeting Room C2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10352
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-19:00--10352
+SUMMARY:Joomla! Community Meet Up
+DESCRIPTION:What's happening in the Joomla! project? Meet Up to talk abo
+ ut 1.6, the Joomla! Framework, project organization, how to get involved
+ and future directions for Joomla! and its community.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T210000
+DTSTART;TZID=US/Pacific:20090722T200000
+DTSTAMP:20090714T163812
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10443
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-20:00--10443
+SUMMARY:Legal and Organizational Help for FOSS Non-Profits
+DESCRIPTION:FOSS projects regularly face legal issues. Often these rela
+ te to licensing their own code, but as projects grow they also deal with
+ organizational issues, patent risk, and a variety of other challenges.
+ In this BoF, FOSS legal and non-profit management professionals from th
+ e Software Freedom Law Center and Conservancy will talk about how to man
+ age these issues.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T210000
+DTSTART;TZID=US/Pacific:20090722T200000
+DTSTAMP:20090715T171153
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10444
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-20:00--10444
+SUMMARY:FamilySearch Genealogical Platform and You
+DESCRIPTION:FamilySearch is delivering Open Genealogical platform that i
+ ncludes: 1) APIs to billions of names and records 2) encouraging and con
+ tributing to open source projects for API wrappers and sample code for m
+ any environments. Free Developers Services at DevNet.FamilySearch.org. F
+ amilySearch is a nonprofit organization with the world's largest reposit
+ ory of genealogical resources.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T210000
+DTSTART;TZID=US/Pacific:20090722T200000
+DTSTAMP:20090716T180202
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10455
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-20:00--10455
+SUMMARY:Open Data and the Semantic Web
+DESCRIPTION:Are you interested in open data? How about connecting your
+ data to other data sets using Semantic Web technology? We'll be sharing
+ ideas and answering questions on these topics and more.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090722T220000
+DTSTART;TZID=US/Pacific:20090722T210000
+DTSTAMP:20090716T183501
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10454
+UID:http://conferences.oreilly.com/oscon--s2009-07-22-21:00--10454
+SUMMARY:Is Enterprise Flash Ready for Prime Time?
+DESCRIPTION:Enterprise flash should mean higher performance and easier s
+ caling for web datacenters. However, questions remain about flash’s reli
+ ability, and exploiting its advantages will require new approaches to we
+ b application design. Peter Zaitsev will moderate this informative sessi
+ on where participants can discuss the opportunities and challenges for l
+ everaging flash.
+END:VEVENT
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/OSCON20090723.ics Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,1534 @@
+BEGIN:VCALENDAR
+X-WR-CALNAME:OSCON 2009
+VERSION:2.0
+PRODID:Expectnation
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T091500
+DTSTART;TZID=US/Pacific:20090723T090000
+DTSTAMP:20090619T154409
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10173
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-09:00--10173
+SUMMARY:Standing Out in the Crowd
+DESCRIPTION:Presented by Kirrily Robert (Infotrope). What's it like to b
+ e a woman in an open source project that's 99% men? What's it like to be
+ a woman in a project that's 75%... women? Kirrily Robert, who has worke
+ d on both kinds of projects, will talk about the differences, and what w
+ e can learn from majority-female open source projects.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T180500
+DTSTART;TZID=US/Pacific:20090723T090000
+DTSTAMP:20090625T233546
+LOCATION:Meeting Room C1/C4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9008
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-09:00--9008
+SUMMARY:OSCamp 2009
+DESCRIPTION:OSCamp 2009, a community organized event designed to share a
+ nd improve the essential skills required to participate in collaborative
+ , free and open online projects. The event features a mix of educational
+ presentations and hands-on coaching from experts in participatory commu
+ nities.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T180000
+DTSTART;TZID=US/Pacific:20090723T090000
+DTSTAMP:20090702T000503
+LOCATION:Meeting Room N
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10250
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-09:00--10250
+SUMMARY:Sunlight Labs Hackathon
+DESCRIPTION:At the Sunlight Labs hackathon, Sunlight Labs will be workin
+ g with developers on two major projects: 1. Parsing sites at for our 50
+ state project to get every state legislature in a common data format, an
+ d 2. Adding data into Sunlight's newest project, Congrelate.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T093000
+DTSTART;TZID=US/Pacific:20090723T091500
+ALTDTSTART;TZID=US/Pacific:20090723T090000
+DTSTAMP:20090715T172914
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9168
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-09:15--9168
+SUMMARY:Your Work in Open Source, the Numbers
+DESCRIPTION:Presented by Chris DiBona (Google, Inc.). Google crawls more
+ than just web pages, we also crawl source code. Ever wondered just how
+ much open source code is out there? What licenses is all that code unde
+ r? Which projects are the most shared? We'll try to answer these questio
+ ns in this talk.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T094500
+DTSTART;TZID=US/Pacific:20090723T093000
+ALTDTSTART;TZID=US/Pacific:20090723T090000
+DTSTAMP:20090624T145340
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10209
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-09:30--10209
+SUMMARY:Enabling Academic Research – Open Tools and Services on Microsof
+ t Platforms
+DESCRIPTION:Presented by Tony Hey (Microsoft Corporation). Microsoft Ext
+ ernal Research builds bridges between academia, industry, and government
+ to advance computer science, education, and scientific research. Modern
+ science and academic research increasingly relies on integrated informa
+ tion technologies and computation to collect, process, and analyze compl
+ ex data.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T100000
+DTSTART;TZID=US/Pacific:20090723T094500
+ALTDTSTART;TZID=US/Pacific:20090723T090000
+DTSTAMP:20090427T153754
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9210
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-09:45--9210
+SUMMARY:Cloud Computing - Why IT Matters
+DESCRIPTION:Presented by Simon Wardley (Canonical Ltd). Keynote by Simon
+ Wardley, Canoncial Ltd.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T101500
+DTSTART;TZID=US/Pacific:20090723T100000
+ALTDTSTART;TZID=US/Pacific:20090723T090000
+DTSTAMP:20090325T171030
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9016
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-10:00--9016
+SUMMARY:Q & A
+DESCRIPTION:An open microphone question and answer session with the morn
+ ing's keynote speakers.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T113000
+DTSTART;TZID=US/Pacific:20090723T104500
+DTSTAMP:20090310T214001
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8196
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-10:45--8196
+SUMMARY:Drizzle: Status, Principles, and Ecosystem
+DESCRIPTION:Presented by Brian Aker (Sun Microsystems, Inc.), Monty Tayl
+ or (Sun Microsystems - Drizzle), Mark Atwood (Network.com at Sun Microsy
+ stems), Ronald Bradford (42SQL), Eric Day (Sun Microsystems), Patrick G
+ albraith (Lycos Inc.). In this panel talk a number of core Drizzle devel
+ opers will explain where development sits today, critical tools involved
+ , best practices that were used to get here, and how a vibrant open-sour
+ ce developer community has been built.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T113000
+DTSTART;TZID=US/Pacific:20090723T104500
+DTSTAMP:20090713T211653
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8008
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-10:45--8008
+SUMMARY:<video> and the Open Web
+DESCRIPTION:Presented by Mark Surman (Mozilla Foundation), Asa Dotzler (
+ Mozilla). Using the <video> tag in HTML5, developers can do all sorts of
+ things that are hard or impossible with plugins. In this presentation,
+ Mozilla's Mark Surman and Asa Dotzler paint a picture of the open video
+ future and demo the cool stuff you can do with web video when it's prope
+ rly integrated with a page.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T113000
+DTSTART;TZID=US/Pacific:20090723T104500
+DTSTAMP:20090310T213033
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8133
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-10:45--8133
+SUMMARY:Persistence Solutions with the Smalltalk Seaside Web Framework
+DESCRIPTION:Presented by Randal L. Schwartz (Stonehenge Consulting Servi
+ ces, Inc.). Nearly all Web Applications need persistent solutions to be
+ effective. For Perl and Ruby, the choice is generally "use an Object-Rel
+ ational Mapper to put data into an SQL database", but with Smalltalk's o
+ bject model, pure-object storage is also available as an option. We'll
+ look at ORM and Object solutions for web apps built with Seaside, includ
+ ing a few commercial solutions like GemStone/S
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T113000
+DTSTART;TZID=US/Pacific:20090723T104500
+DTSTAMP:20090629T215044
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8105
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-10:45--8105
+SUMMARY:Computational Journalism
+DESCRIPTION:Presented by Nick Diakopoulos (Georgia Tech), Brad Stenger (
+ Ars Technica). The era of traditional journalism is giving way to someth
+ ing else. We think that something else is Computational Journalism. CJ r
+ ecognizes the need for internal production and for public-facing news de
+ livery innovations. What journalists provide in terms of services, inter
+ faces, and business models are in flux. To settle things, smart experime
+ nts (often using Open Source APIs) are critical.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T113000
+DTSTART;TZID=US/Pacific:20090723T104500
+DTSTAMP:20090312T152958
+LOCATION:Ballroom A4/A5
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8135
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-10:45--8135
+SUMMARY:Situation Normal, Everything Must Change
+DESCRIPTION:Presented by Simon Wardley (Canonical Ltd). In today's compu
+ ting world, it can often feel like we are drowning in wave after wave of
+ new trends such as mashups, service oriented architecture and cloud com
+ puting. This sea of concepts are simply the manifestation of an underlyi
+ ng change in IT. In this session we will explore what is happening and w
+ hy open source is the dominant model for the future.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T113000
+DTSTART;TZID=US/Pacific:20090723T104500
+DTSTAMP:20090310T220333
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8194
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-10:45--8194
+SUMMARY:Introduction to Forensics
+DESCRIPTION:Presented by Kyle Rankin (QuinStreet, Inc.). n this talk Kyl
+ e Rankin will provide an introduction to performing forensics analysis o
+ n Linux machines using the popular Sleuthkit tools with their easy-to-us
+ e Autopsy web-based front-end. The talk will cover basic concepts for a
+ forensics investigation, and at the end there will be a demo with a comp
+ romised Linux image.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T113000
+DTSTART;TZID=US/Pacific:20090723T104500
+DTSTAMP:20090310T213251
+LOCATION:Ballroom A8
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7920
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-10:45--7920
+SUMMARY:There Are No Unicorns: And Other Lessons Learned While Running a
+ n Innovation Team
+DESCRIPTION:Presented by Rolf Skyberg (eBay, Inc.). Everybody wants inno
+ vation. Innovation is believed to be magical unicorn which will lead the
+ way to success and riches, but this is easier said than done. In this t
+ alk I'll discuss lessons learned from two years driving innovation on eB
+ ay's Disruptive Innovation team; which strategies worked and which didn'
+ t, and what questions you should start asking first when someone tells y
+ ou to "go innovate"!
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T113000
+DTSTART;TZID=US/Pacific:20090723T104500
+DTSTAMP:20090310T213245
+LOCATION:Meeting Room B1/B4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8416
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-10:45--8416
+SUMMARY:What Has Worked: OpenOffice.org Around the World
+DESCRIPTION:Presented by Louis Suarez-Potts (Sun Microsystems, Inc. / Op
+ enOffice.org). OOo has succeeded in engaging thousands of contributors a
+ round the world. Many are not technical. How was this done? As well, gov
+ ernments are now adopting OpenOffice.org: Why? And, how do the local and
+ localization communuties contribute to this adoption? Finally, what les
+ sons can other Foss projects take from OpenOffice.org's accompishments?
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T113000
+DTSTART;TZID=US/Pacific:20090723T104500
+DTSTAMP:20090714T180056
+LOCATION:Meeting Room B2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8792
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-10:45--8792
+SUMMARY:Wrangling Your Ubuntu Systems
+DESCRIPTION:Presented by Ken Drachnik (Canonical). As Ubuntu environment
+ s grow, the complexity of managing packages and updating systems quickly
+ outgrows the ability of a sys admin to easily manage servers and deskto
+ ps with manual commands and scripts. This talk will explore some of t
+ he technologies that Ubuntu admins can use to manage their Ubuntu enviro
+ nments and how these can be extended to managing Cloud environments.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T113000
+DTSTART;TZID=US/Pacific:20090723T104500
+DTSTAMP:20090504T175843
+LOCATION:Meeting Room B3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8999
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-10:45--8999
+SUMMARY:Building Enterprise Social Networks with Liferay Portal
+DESCRIPTION:Presented by Brian Chan (Liferay, Inc.). Liferay Portal is a
+ Java framework that provides blogs, document management, message boards
+ , and wikis, with a social network flavor. We'll demo how to use Liferay
+ Social API to wire collaborative social network sites for Cisco and Min
+ i United, write an app that will automatically expose it to Facebook and
+ iGoogle, and how to write language-agnostic apps in Java, Groovy, PHP,
+ Python, and Ruby.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T113000
+DTSTART;TZID=US/Pacific:20090723T104500
+DTSTAMP:20090716T202709
+LOCATION:Meeting Room C2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9914
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-10:45--9914
+SUMMARY:Building Complex UI Animations in Moblin Clutter 1.0
+DESCRIPTION:Presented by Chris Lord (Intel). In the process of creating
+ application for the new user experience in Moblin 2.0, a lot has been le
+ arned about how to effectively use Clutter to build aesthetically pleasi
+ ng and practical interfaces. This will be a tutorial on how to implement
+ complex and good-looking UI animations using Clutter.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T113000
+DTSTART;TZID=US/Pacific:20090723T104500
+DTSTAMP:20090615T205745
+LOCATION:Meeting Room C3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10185
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-10:45--10185
+SUMMARY:Give Your ERP Some REST with p2ee
+DESCRIPTION:Presented by Alejandro Imass (Yabarana Corporation). ERP is
+ an area where FOSS programmers haven't particularly excelled at challeng
+ ing the dogmas of traditional IS. In fact, the “monolithic ERP” challeng
+ es the very nature of FOSS and the diversity of it's communities. p2ee i
+ s a back-to-basics approach, based on the REST architectural style and n
+ ew Web2 technologies.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T113000
+DTSTART;TZID=US/Pacific:20090723T104500
+DTSTAMP:20090714T153106
+LOCATION:Meeting Room J1/J4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9119
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-10:45--9119
+SUMMARY:JRuby on Google App Engine
+DESCRIPTION:Presented by John Woodell (Google, Inc. ), Max Ross (Google,
+ Inc. ), Ted Han (Videojuicer). Using JRuby, apps created with Ruby fram
+ eworks like Rails or Merb can now be deployed to Google's highly scalabl
+ e infrastructure. This talk, will provide an overview of App Engine, wit
+ h attention to current features and apis. We will also show some demos,
+ including deployment to the production environment, and provide some ins
+ ight into (and best practices for) using the App Engine Datastore.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T113000
+DTSTART;TZID=US/Pacific:20090723T104500
+DTSTAMP:20090310T233842
+LOCATION:Meeting Room J2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8169
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-10:45--8169
+SUMMARY:All the Little Pieces: Distributed systems with PHP
+DESCRIPTION:Presented by Andrei Zmievski (Digg). Scaling up takes you on
+ ly so far. Every Web business serious about its future needs to think ab
+ out scaling out. Distributed systems are a key component of this strateg
+ y, but they aren't as difficult as they sound. This session will cover s
+ everal distributed technologies and their use with PHP.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T113000
+DTSTART;TZID=US/Pacific:20090723T104500
+DTSTAMP:20090311T021751
+LOCATION:Meeting Room J3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7373
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-10:45--7373
+SUMMARY:Java Testing on the Fast Lane
+DESCRIPTION:Presented by Andres Almiray (Oracle USA Inc.), Ixchel Ruiz (
+ CCA). Learn how the Groovy language can help you enhance your testing ex
+ perience of Java applications.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T122000
+DTSTART;TZID=US/Pacific:20090723T113500
+DTSTAMP:20090310T214816
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8415
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-11:35--8415
+SUMMARY:Functional Programming for the Real World
+DESCRIPTION:Presented by Bryan O'Sullivan (Serpentine Green Design). Lan
+ guages like Erlang, Haskell, Scala and Clojure have been gaining visibil
+ ity rapidly over the past few years. Our panel will discuss the advantag
+ es and challenges of developing and deploying software using functional
+ languages. How do coding, QA, and maintenance change in this world?
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T122000
+DTSTART;TZID=US/Pacific:20090723T113500
+DTSTAMP:20090325T211619
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8584
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-11:35--8584
+SUMMARY:Building Compilers with the Parrot Compiler Toolkit
+DESCRIPTION:Presented by Patrick Michaud (pmichaud.com). This talk provi
+ des a tutorial on creating compilers in Parrot using the Parrot Compiler
+ Toolkit. It walks through the process of creating a parser, building a
+ n abstract syntax tree, and generating executable output.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T122000
+DTSTART;TZID=US/Pacific:20090723T113500
+DTSTAMP:20090314T035856
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7859
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-11:35--7859
+SUMMARY:Tips and Tricks for Writing PostGIS Spatial Queries
+DESCRIPTION:Presented by Leo Hsu (Paragon Corporation), Regina Obe (Para
+ gon Corporation). We shall present 10 tricks/techniques for writing effi
+ cient PostGIS spatial queries.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T122000
+DTSTART;TZID=US/Pacific:20090723T113500
+DTSTAMP:20090602T160439
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8354
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-11:35--8354
+SUMMARY:The Google Open Source Update
+DESCRIPTION:Presented by Chris DiBona (Google, Inc.). In this talk, Chri
+ s DiBona will bring the audience up to date on recent Google activities
+ in open source. We will specifically cover advances in Android's open so
+ urce deployment infrastructure, including the Gerrit and Repo tools, and
+ the directions those tools are taking.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T122000
+DTSTART;TZID=US/Pacific:20090723T113500
+DTSTAMP:20090310T220701
+LOCATION:Ballroom A4/A5
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7984
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-11:35--7984
+SUMMARY:Eucalyptus: an Open Source Infrastructure for Cloud Computing
+DESCRIPTION:Presented by Rich Wolski (University of California, Santa Ba
+ rbara (UCSB)). We will present Eucalyptus -- Elastic Utility Computing A
+ rchitecture for Linking Your Programs to Useful Systems -- an open sourc
+ e software infrastructure that implements IaaS-style cloud computing. Th
+ e goal of Eucalyptus is to allow sites with existing clusters and server
+ infrastructure to host an elastic computing service that is interface-c
+ ompatible with Amazon's AWS.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T122000
+DTSTART;TZID=US/Pacific:20090723T113500
+DTSTAMP:20090310T214915
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8397
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-11:35--8397
+SUMMARY:Security-Centered Design: Exploring the Impact of Human Behavior
+DESCRIPTION:Presented by Chris Shiflett (OmniTI). Perception is as impor
+ tant as reality. In this multifarious talk, I'll introduce some of what
+ I have learned about cognitive psychology, exploring topics such as chan
+ ge blindness and ambient signifiers, and I'll show some real-world examp
+ les that demonstrate the profound impact human behavior can have on secu
+ rity.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T122000
+DTSTART;TZID=US/Pacific:20090723T113500
+DTSTAMP:20090311T010407
+LOCATION:Ballroom A8
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8218
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-11:35--8218
+SUMMARY:Building a Business on the Cheap
+DESCRIPTION:Presented by Chris Wanstrath (GitHub). With all the hype sur
+ rounding multimillion dollar rounds of funding, it's easy forget there's
+ another way to build a business: by being cheap and smart. By relying o
+ n open source, building in increments, and only buying what you need, it
+ 's possible to create a successful company on your own (or with a few co
+ -founders). This talk will focus on just that: the frugal path to profit
+ ability.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T122000
+DTSTART;TZID=US/Pacific:20090723T113500
+DTSTAMP:20090310T225036
+LOCATION:Meeting Room B2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8381
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-11:35--8381
+SUMMARY:Make Great Spreadsheets
+DESCRIPTION:Presented by Casey West (Casey West Consulting). "Spreadshee
+ t::WriteExcel":http://search.cpan.org/~jmcnamara/Spreadsheet-WriteExcel-
+ 2.25/ is a great Perl module for generating useful Spreadsheets with mul
+ tiple worksheets, cell formatting, and data validation. You can use thes
+ e spreadsheets for simple reporting, of course, or you can use them as a
+ n alternate interface to a data heavy application.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T122000
+DTSTART;TZID=US/Pacific:20090723T113500
+DTSTAMP:20090404T003942
+LOCATION:Meeting Room B3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8298
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-11:35--8298
+SUMMARY:Launchpad Foundations: Learning to Leverage a Component Architec
+ ture
+DESCRIPTION:Presented by Gary Poster (Canonical, Ltd.). Study gains and
+ losses in how Launchpad, a collaboration web service for the open-source
+ community, used a Python component library from Zope 3 to help manage a
+ large project. Discuss when the approach might be appropriate. Code exa
+ mples include automatic REST web service generation. Demonstrate how th
+ e component architecture might be leveraged in popular frameworks such a
+ s Django.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T122000
+DTSTART;TZID=US/Pacific:20090723T113500
+DTSTAMP:20090706T231047
+LOCATION:Meeting Room C3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10357
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-11:35--10357
+SUMMARY:Controlling the Addiction: Best Practices for Scaling With Memca
+ ched (a.k.a "Crack for Developers") & the LAMP Stack
+DESCRIPTION:Presented by Joaquin Ruiz (Gear6). Dynamic consumer content
+ on the Web is straining the LAMP stack and demands a new caching tier fo
+ r maximum scale. Take a hit of Memcached and the sky's the scalability
+ limit, but be careful not to overdose.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T122000
+DTSTART;TZID=US/Pacific:20090723T113500
+DTSTAMP:20090311T132123
+LOCATION:Meeting Room J1/J4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8417
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-11:35--8417
+SUMMARY:Accelerate your Rails Site with Automatic Generation-based Actio
+ n Caching
+DESCRIPTION:Presented by Rod Cope (OpenLogic, inc.). Rails caching is di
+ fficult and complicated. It takes some work to set it up, but it's even
+ harder to make sure you always clear the right cache when data gets cha
+ nged. This session demonstrates how to build an automatic generation-ba
+ sed action caching mechanism built on memcached that can handle edits fr
+ om any angle while guaranteeing that users never see stale data.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T122000
+DTSTART;TZID=US/Pacific:20090723T113500
+DTSTAMP:20090310T213904
+LOCATION:Meeting Room J2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7529
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-11:35--7529
+SUMMARY:Untestable Code
+DESCRIPTION:Presented by Sebastian Bergmann (thePHP.cc). How do you writ
+ e untestable code and anger an ancient goddess? These and other question
+ s will guide us while we discuss testability, an often forgotten attribu
+ te of software design and quality. Starting from untestable code fragmen
+ ts, the audience will learn why the code is untestable and how it can be
+ refactored for testability.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T122000
+DTSTART;TZID=US/Pacific:20090723T113500
+DTSTAMP:20090318T211034
+LOCATION:Meeting Room J3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8348
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-11:35--8348
+SUMMARY:Spring Framework 3.0- New and Notable
+DESCRIPTION:Presented by Rod Johnson (SpringSource). The Spring Framewor
+ k is the most popular application programming framework for Java/Java EE
+ development, with widespread adoption across many industries. If you’re
+ a Spring user, you should understand the Spring 3.0 features and how th
+ ey may benefit you; if you are not yet a Spring user, you may find Sprin
+ g significantly more compelling.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T152000
+DTSTART;TZID=US/Pacific:20090723T134500
+DTSTAMP:20090324T032001
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8106
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-13:45--8106
+SUMMARY:State of Lightning Talks 2009
+DESCRIPTION:Presented by Josh Berkus (PostgreSQL Experts, Inc.). Come se
+ e your favorite open source projects for updates on what they've been do
+ ing while you were out partying (or job-hunting) all year. What has Moz
+ illa been up to? What's going on with the FreeBSD Kernel? Have MySQL a
+ nd PostgreSQL finally killed each other off? Join us for a 1 1/2 hour se
+ ssion of 5-minute project updates, combined with both intentional and un
+ intentional humor.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T143000
+DTSTART;TZID=US/Pacific:20090723T134500
+DTSTAMP:20090716T182601
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7999
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-13:45--7999
+SUMMARY: Thunderbird 3: A user-centric platform for email, learning from
+ the web
+DESCRIPTION:Presented by David Ascher (Mozilla Messaging), Dan Mosedale
+ (Mozilla). Thunderbird 3 is nearing release -- in this developer-oriente
+ d talk, David Ascher and Dan Mosedale will talk about what Thunderbird 3
+ will mean to people who want to take an active role in managing their e
+ mail lives.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T143000
+DTSTART;TZID=US/Pacific:20090723T134500
+DTSTAMP:20090310T213506
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7905
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-13:45--7905
+SUMMARY:Taming Your Data: Practical Data Integration Solutions with Kett
+ le
+DESCRIPTION:Presented by Roland Bouman (XCDSQL Solutions / Strukton Rail
+ ). Nowadays, data is everywhere: databases, spreadsheets, the web...if o
+ nly we could access it at on time, at the right place, in the right form
+ ... Turning data into information is a struggle. Like diamonds are mined
+ and cut to create jewels, so must data be extracted and transformed to
+ create information. Learn how the open source data integration tool Kett
+ le helps to fight your data dragons.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T143000
+DTSTART;TZID=US/Pacific:20090723T134500
+DTSTAMP:20090310T213248
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8409
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-13:45--8409
+SUMMARY:Email Hates the Living!
+DESCRIPTION:Presented by Ricardo Signes (Pobox.com). Email: you see it e
+ very day. It's on your desktop. It's in your servers. Through the magic
+ of modern technology, it flows invisibly through the air and into your P
+ DA! Your cellular phone conducts silent and arcane conversations with d
+ istant servers, speaking the ancient language of SMTP and the unknowable
+ dialects of IMAP. Surely all this technology means progress of mankind.
+ .. or does it?
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T143000
+DTSTART;TZID=US/Pacific:20090723T134500
+DTSTAMP:20090312T072823
+LOCATION:Ballroom A4/A5
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7927
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-13:45--7927
+SUMMARY:Building Custom Linux Images for Amazon EC2
+DESCRIPTION:Presented by Eric Hammond (Campus Explorer, Inc.). Learn how
+ to create your own Linux machine images (AMIs) for running on Amazon EC
+ 2 (Elastic Compute Cloud) customized with your choice of software packag
+ es and application software configured to your liking. Use the latest op
+ en source software to build custom images from scratch in a secure, auto
+ mated, reproducible process. Discover when to use a public image with au
+ tomatic customization at boot.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T143000
+DTSTART;TZID=US/Pacific:20090723T134500
+DTSTAMP:20090619T154230
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10204
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-13:45--10204
+SUMMARY:Why It Is Hard To Be Fast
+DESCRIPTION:Presented by Dirk Hohndel (Intel Corporation), Arjan van de
+ Ven (Intel). From the early 80s to the early 2000s computers and softwar
+ e got faster. But in the last 5 years the perception of performance hasn
+ 't really changed - or has even gotten worse! In this presentation we'll
+ explain why it is hard to be fast, walk the audience step by step throu
+ gh one example where we addressed the issue and talk about ways to look
+ at the problem more systematically.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T143000
+DTSTART;TZID=US/Pacific:20090723T134500
+DTSTAMP:20090311T110242
+LOCATION:Ballroom A8
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8083
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-13:45--8083
+SUMMARY:Does Working with Free Software Have to be so Hard?
+DESCRIPTION:Presented by Dave Neary (Neary Consulting). Most companies w
+ ho start working with free software projects have trouble. They run over
+ common stumbling blocks. Questions go unanswered, patches go unreviewed
+ . Why does it take so much time and evergy to be a good citizen? This pr
+ esentation will outline the problems, and will give some metrics which y
+ ou can use to evaluate a community's health before marrying them.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T143000
+DTSTART;TZID=US/Pacific:20090723T134500
+DTSTAMP:20090407T194535
+LOCATION:Meeting Room B1/B4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7564
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-13:45--7564
+SUMMARY:Erlang for Five Nines: A non technical introduction to Erlang
+DESCRIPTION:Presented by Francesco Cesarini (Erlang Training and Consult
+ ing Ltd). This talk will introduce Erlang, expanding on what the hype is
+ all about. It will provide a high level technical overview, looking at
+ its concurrency model and distribution models, software upgrade during r
+ untime and scalability on multicore. It will describe its ever expanding
+ community and domains of use, with examples on open source applications
+ , commercial products and research projects
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T143000
+DTSTART;TZID=US/Pacific:20090723T134500
+DTSTAMP:20090313T012221
+LOCATION:Meeting Room B2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8166
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-13:45--8166
+SUMMARY:FreeTUIT - Codeless GUI Programming
+DESCRIPTION:Presented by Eric Wilhelm (Scratch Computing). FreeTUIT is d
+ esktop programming with less code. A concise, declarative syntax for wi
+ dget layout and an expressive API for runtime give you clean and maintai
+ nable wxWidgets or Qt cross-platform applications in minutes.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T143000
+DTSTART;TZID=US/Pacific:20090723T134500
+DTSTAMP:20090406T140712
+LOCATION:Meeting Room B3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8411
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-13:45--8411
+SUMMARY:Building a Corporate Blog Portal Using WordPress MU
+DESCRIPTION:Presented by Dan York (Voxeo Corporation). In this tight eco
+ nomy, are you looking for a way to create a multi-blog portal for your c
+ ompany or organization without spending a zillion dollars? This talk wi
+ ll introduce how you can create a powerful, custom-branded blog portal s
+ upporting blogs and podcasts using the open source WordPress MU.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T143000
+DTSTART;TZID=US/Pacific:20090723T134500
+DTSTAMP:20090714T205725
+LOCATION:Meeting Room C3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10436
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-13:45--10436
+SUMMARY:The Secured Enterprise: Leverage OpenID with Web Services
+DESCRIPTION:Presented by Prabath Siriwardena (WSO2 Inc.). SOA security n
+ eeds to be by design, not as an afterthought. This session will demonstr
+ ate implementing Message Interceptor Gateway security pattern with WSO2
+ ESB, WSO2 WSAS and WSO2 Identity Server - together with the OpenID/Infor
+ mation Cards integration pattern at the front end.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T143000
+DTSTART;TZID=US/Pacific:20090723T134500
+DTSTAMP:20090310T220812
+LOCATION:Meeting Room J1/J4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8480
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-13:45--8480
+SUMMARY:Rubinius 1.0: The Ruby VM That Could
+DESCRIPTION:Presented by Brian Ford (Engine Yard). This talk will give a
+ n overview of Rubinius, an alternative Ruby implementation with a C++ VM
+ , Ruby standard library, and Ruby compiler. It will also detail major re
+ cent changes like switching away from stackless execution and improvemen
+ ts in the core library data structures, garbage collector, compiler, and
+ JIT assembler.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T143000
+DTSTART;TZID=US/Pacific:20090723T134500
+DTSTAMP:20090323T204710
+LOCATION:Meeting Room J2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8363
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-13:45--8363
+SUMMARY:Scaling Firefox Support with PHP
+DESCRIPTION:Presented by Laura Thomson (Mozilla Corporation). On Downloa
+ d Day 2008 eight million users downloaded Firefox 3 and set a Guinness W
+ orld Record. Firefox 3's in-product help is provided by support.mozilla
+ .com, written in PHP and using a variety of FOSS tools. Learn how we sc
+ aled up for Download Day and how we support millions of users worldwide.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T143000
+DTSTART;TZID=US/Pacific:20090723T134500
+DTSTAMP:20090317T235758
+LOCATION:Meeting Room J3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8144
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-13:45--8144
+SUMMARY:A Survey of Concurrency Constructs
+DESCRIPTION:Presented by Ted Leung (Sun Microsystems). This talk will be
+ a survey of concurrent programming constructs which are currently avail
+ able in some programming language or library. We will look at program
+ ming model being presented, as well as examining some of the implementat
+ ion challenges for the various models.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T152000
+DTSTART;TZID=US/Pacific:20090723T143500
+DTSTAMP:20090312T074111
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8264
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-14:35--8264
+SUMMARY:Prism, Bringing Web Applications to the Desktop
+DESCRIPTION:Presented by Matthew Gertner (Independent). Although web app
+ lications are catching up with their desktop counterparts, there is stil
+ l ground to cover. Prism, a project initiated by Mozilla Labs, is an att
+ empt to bridge this gap. In this talk, we explain why Prism represents a
+ superior web client for running web applications. We use a live demo to
+ show how easy it is to use Prism to customize a popular web app.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T152000
+DTSTART;TZID=US/Pacific:20090723T143500
+DTSTAMP:20090311T095939
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8364
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-14:35--8364
+SUMMARY:Neo4j - The Benefits of Graph Databases
+DESCRIPTION:Presented by Emil Eifrem (Neo Technology). A graph db stores
+ data in a network structure rather than in relational tables. This mode
+ l is well suited for many web use cases such as tagging, metadata annota
+ tions, social networks, wikis and other network-shaped or hierarchical d
+ ata sets. This talk will introduce Neo4j: a high-performance, transactio
+ nal open source graph db, which frequently outperforms RDBMSs with >1000
+ x for such use cases.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T152000
+DTSTART;TZID=US/Pacific:20090723T143500
+DTSTAMP:20090310T223205
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7925
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-14:35--7925
+SUMMARY:How To Lie Like A Geek
+DESCRIPTION:Presented by Michael Schwern (Open Sourcery). Geeks have a s
+ pecial relationship with The Truth. Nothing is more important than corr
+ ecting a falsehood, no matter how small, and nothing is more odious than
+ not telling The Truth. Unfortunately the meaning is often mangled and
+ the end result is the opposite, a lie. This leads to misunderstanding,
+ mangled interfaces and the myth of the stupid user.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T152000
+DTSTART;TZID=US/Pacific:20090723T143500
+DTSTAMP:20090716T023654
+LOCATION:Ballroom A4/A5
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8362
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-14:35--8362
+SUMMARY:Building a Highly Scalable, Open Source, Twitter Clone
+DESCRIPTION:Presented by Dan Diephouse (MuleSource), Paul Brown (Multifa
+ rious, Inc). What would you do if you were tasked with building a Twitte
+ r clone which was highly scalable, made from open source components and
+ deployed in this infamous thing we call the cloud?
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T152000
+DTSTART;TZID=US/Pacific:20090723T143500
+DTSTAMP:20090714T213122
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10435
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-14:35--10435
+SUMMARY:MariaDB: Community Driven SQL Server
+DESCRIPTION:Presented by Kurt von Finck (Monty Program Ab), Michael Wide
+ nius (Monty Program Ab). MariaDB is a fork of Sun's MySQL product. This
+ talk will present how MariaDB is both similar to and different from MySQ
+ L, in both social and technical senses.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T152000
+DTSTART;TZID=US/Pacific:20090723T143500
+DTSTAMP:20090311T190108
+LOCATION:Ballroom A8
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7453
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-14:35--7453
+SUMMARY:Apache's "Open for Business" - Holistic Analysis and Design
+DESCRIPTION:Presented by David E Jones (Apache Software Foundation). Ope
+ n source software opens a new world of efficiency and flexibility for so
+ ftware, leading to new levels of custom built and customized software. T
+ he approach described combines common pre-implementation artifacts used
+ in specific ways to lead from requirements to designs and then to softwa
+ re that does a good job of meeting the needs of individuals and organiza
+ tions.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T152000
+DTSTART;TZID=US/Pacific:20090723T143500
+DTSTAMP:20090316T203734
+LOCATION:Meeting Room B1/B4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8377
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-14:35--8377
+SUMMARY:The Role of Users in Open Source Projects
+DESCRIPTION:Presented by Stormy Peters (GNOME Foundation). While consume
+ rs and the open source community don't interact often, users are importa
+ nt to projects because users test software, spread the word, motivate de
+ velopers, lend credibility, contribute financially and participate in us
+ ers groups. Come learn why users are important to an open source project
+ and how they can be more involved.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T152000
+DTSTART;TZID=US/Pacific:20090723T143500
+DTSTAMP:20090310T230538
+LOCATION:Meeting Room B2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8230
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-14:35--8230
+SUMMARY:High Performance SQL with PostgreSQL
+DESCRIPTION:Presented by David Fetter (PgExperts). PostgreSQL 8.4 is the
+ first Open Source database management system to handle trees and lists
+ using SQL:2008-compliant Common Table Expressions and Windowing function
+ s. You'll learn how these work, see intriguing examples, and walk out r
+ eady to use them to your advantage.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T152000
+DTSTART;TZID=US/Pacific:20090723T143500
+DTSTAMP:20090504T112015
+LOCATION:Meeting Room B3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8460
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-14:35--8460
+SUMMARY:Improving Legal Certainty in FOSS: Best Practices for Upstream P
+ rojects
+DESCRIPTION:Presented by Richard Fontana (Red Hat, Inc.). FOSS can be se
+ en as a new kind of legal system that facilitates sharing rights in code
+ . Viewed in this way, FOSS can benefit from greater public knowledge of
+ code origins and licensing rules. My talk will focus on practical guidan
+ ce for projects seeking to improve legal certainty in the code they writ
+ e and use. I will conclude with some longer-term institutional proposal
+ s.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T152000
+DTSTART;TZID=US/Pacific:20090723T143500
+DTSTAMP:20090609T174834
+LOCATION:Meeting Room C2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10154
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-14:35--10154
+SUMMARY:Solving The Troll Problem: The Role of Allied Security Trust and
+ Open Invention Network
+DESCRIPTION:Presented by Keith Bergelt (Open Invention Network), Daniel
+ McCurdy (Allied Security Trust). Over the last decade, patent litigation
+ s launched by “patent trolls” have increased from approximately 3% of al
+ l patent litigations filed to over 17%. This session will analyze this
+ issue and offer detailed recommendations to reduce exposures to “patent
+ trolls,” including the role of AST and OIN in reducing such threats.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T152000
+DTSTART;TZID=US/Pacific:20090723T143500
+DTSTAMP:20090701T203154
+LOCATION:Meeting Room C3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10340
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-14:35--10340
+SUMMARY:How to Become a RESTafarian WOArrior
+DESCRIPTION:Presented by Aaron Fulkerson (MindTouch, Inc. ). The web has
+ evolved into the preeminent application platform. The design principles
+ and technologies that have served the Internet well in terms of cost, s
+ cale and ease of development are just beginning to be applied to the ent
+ erprise. This session explains the characteristics and benefits of Web O
+ riented Architecture (WOA), provides strategies and includes enterprise
+ success stories.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T152000
+DTSTART;TZID=US/Pacific:20090723T143500
+DTSTAMP:20090630T174954
+LOCATION:Meeting Room J1/J4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7965
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-14:35--7965
+SUMMARY:IronRuby 0.9
+DESCRIPTION:Presented by Jimmy Schementi (Microsoft). IronRuby is almost
+ at 1.0! Come and see how IronRuby is used in .NET programs, how well it
+ performs, and how conformant it is.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T152000
+DTSTART;TZID=US/Pacific:20090723T143500
+DTSTAMP:20090317T190258
+LOCATION:Meeting Room J2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8386
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-14:35--8386
+SUMMARY:2009 PHP Best Practices
+DESCRIPTION:Presented by Luke Welling (OmniTI), Laura Thomson (Mozilla C
+ orporation). Web applications are like trees. Slice through them and yo
+ u can judge their age by looking at the growth rings. You've probably ab
+ andoned PHP4 compatibility by now, but are you taking advantage of pract
+ ices that have made web application development a mature discipline? Com
+ e with us on a tour of PHP best practices in 2009.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T152000
+DTSTART;TZID=US/Pacific:20090723T143500
+DTSTAMP:20090310T220346
+LOCATION:Meeting Room J3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7917
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-14:35--7917
+SUMMARY:Clojure: Functional Concurrency for the JVM
+DESCRIPTION:Presented by Howard Lewis Ship (Formos). Clojure is a functi
+ onal programming language that runs on the JVM and features great perfor
+ mance and innovative concurrency support.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T180500
+DTSTART;TZID=US/Pacific:20090723T163000
+DTSTAMP:20090311T033638
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7934
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-16:30--7934
+SUMMARY:Perl Lightning Talks
+DESCRIPTION:Presented by R Geoffrey Avery (Marchex Voice Services). A se
+ ries of 5-minute talks on anything related to Perl or people who use it.
+ A chance to get one-third of your 15 minutes of fame.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T171500
+DTSTART;TZID=US/Pacific:20090723T163000
+DTSTAMP:20090323T205157
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8107
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-16:30--8107
+SUMMARY:Mashing-up Music with Songbird
+DESCRIPTION:Presented by Steven Bengston (Pioneers of the Inevitable). K
+ now Javascript, HTML, and CSS? Interested in music, and exploring what'
+ s possible when you combine the power of Mozilla, add-ons, and music on
+ the web? Songbird, a desktop media player powered by Mozilla's XULRunne
+ r/Firefox platform, allows you to build Javascript extensions to create
+ new digital media mashups using open APIs, and media web services.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T171500
+DTSTART;TZID=US/Pacific:20090723T163000
+DTSTAMP:20090310T221754
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7975
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-16:30--7975
+SUMMARY:Cassandra: Open Source Bigtable + Dynamo
+DESCRIPTION:Presented by Jonathan Ellis (Rackspace Hosting). Cassandra i
+ s a third-generation open source distributed database that marries Bigta
+ ble's rich data model with Dynamo's aggressive simplicity to produce a u
+ niquely compelling alternative to traditional relational databases.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T171500
+DTSTART;TZID=US/Pacific:20090723T163000
+DTSTAMP:20090622T213820
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8300
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-16:30--8300
+SUMMARY:Beyond the Hype: The True Costs of Open Source
+DESCRIPTION:Presented by Matt Asay (Alfresco), Zack Urlocker (MySQL), Ma
+ tt Deuel (Virgin Mobile), Jeffrey Hammond (Forrester Research), Barry K
+ lawans (San Francisco International Airport, IT&T Department). In a time
+ of tight IT budgets, open source has attracted much attention due to it
+ s cost advantages. But what is hype and what is reality? Join industry
+ veterans, analysts and end-users as the look at the true costs and cost
+ savings of open source. Participants will discuss how smart open source
+ implementation can save money and where investments need to be made.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T171500
+DTSTART;TZID=US/Pacific:20090723T163000
+DTSTAMP:20090716T175345
+LOCATION:Ballroom A4/A5
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7910
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-16:30--7910
+SUMMARY:Portability in the Cloud: An Open Standard for Using Cloud Resou
+ rces
+DESCRIPTION:Presented by Alex Polvi (Cloudkick). This talk will discuss
+ the on going effort to standardize the interfaces into the cloud. Curren
+ tly every cloud provider has a unique, proprietary, API for consuming th
+ e services they offer. The Cloud Computing Interoperability movement aim
+ s to provide standards that will overcome vendor lock-in, benefit the co
+ nsumers, and allow the cloud ecosystem to grow transparently.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T171500
+DTSTART;TZID=US/Pacific:20090723T163000
+DTSTAMP:20090325T210033
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8559
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-16:30--8559
+SUMMARY:Implementing Privacy: OAuth & Token Madness
+DESCRIPTION:Presented by Evan 'Rabble' Henshaw-Plath (entp.com). Ever cr
+ inge when you're asked to enter your email address and password to a thi
+ rd party service? This talk will cover how to build and consume services
+ which protect users privacy with OAuth and other techniques.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T171500
+DTSTART;TZID=US/Pacific:20090723T163000
+DTSTAMP:20090310T213239
+LOCATION:Ballroom A8
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8256
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-16:30--8256
+SUMMARY:Easy as BIRT: Introduction to Reporting
+DESCRIPTION:Presented by Jason Weathersby (Actuate Corporation). This se
+ ssion will detail using BIRT to create interactive content for your intr
+ anet and external web based applications.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T171500
+DTSTART;TZID=US/Pacific:20090723T163000
+DTSTAMP:20090311T004447
+LOCATION:Meeting Room B1/B4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8212
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-16:30--8212
+SUMMARY:Just Get the Job Done! Serving the Community One Argument at a T
+ ime.
+DESCRIPTION:Presented by Jacinta Richardson (Perl Training Australia). T
+ he president of your committee is doing most of the work and none of the
+ management. The secretary hasn't written the minutes for any of the me
+ etings for the last 6 months (you wrote the last 4 agendas). The treasu
+ rer can't access the bank account, and you haven't heard from your publi
+ city officer since you started planning the big event. Welcome to the f
+ un of volunteer communities!
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T171500
+DTSTART;TZID=US/Pacific:20090723T163000
+DTSTAMP:20090310T215811
+LOCATION:Meeting Room B2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7438
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-16:30--7438
+SUMMARY:Open Source Documentation Doesn't Have to Suck
+DESCRIPTION:Presented by Addison Berry (Lullabot). Many people view Open
+ Source documentation as something they have to suffer if they want to u
+ se a free product. As Open Source code spreads faster and further in the
+ great, wide world, we need to up the ante on documentation as well to k
+ eep fanning the flames. We'll take a look at how one community, the Drup
+ al project, is trying to raise the bar and how others can learn from the
+ ir ups and downs.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T171500
+DTSTART;TZID=US/Pacific:20090723T163000
+DTSTAMP:20090415T180534
+LOCATION:Meeting Room B3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7915
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-16:30--7915
+SUMMARY:XTraDB OpenSource Storage Engine for MySQL
+DESCRIPTION:Presented by Vadim Tkachenko (Percona Inc), Ryan Lowe (Perco
+ na). A storage engine for MySQL based on the InnoDB storage engine, desi
+ gned to better scale on modern hardware, and including a variety of othe
+ r features useful in high performance environments. It is fully backward
+ s compatible, and so can be used as a drop-in replacement for standard I
+ nnoDB.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T171500
+DTSTART;TZID=US/Pacific:20090723T163000
+DTSTAMP:20090508T154947
+LOCATION:Meeting Room J1/J4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8049
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-16:30--8049
+SUMMARY:Unit Test Your Database!
+DESCRIPTION:Presented by David Wheeler (Kineticode, Inc.). You unit test
+ your application API. You unit test your presentation layer. You write
+ integration and acceptance tests. But your database is tested only as a
+ side-effect to testing everything else. That's a pretty important part o
+ f the stack to just leave to the assumption it works as expected! Come t
+ o this talk to learn about the tools that enable integrated unit tests f
+ or your database.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T171500
+DTSTART;TZID=US/Pacific:20090723T163000
+DTSTAMP:20090319T000405
+LOCATION:Meeting Room J2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8126
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-16:30--8126
+SUMMARY:Website Releases Made Easy with the PEAR Installer
+DESCRIPTION:Presented by Helgi Thomar Thorbjoernsson (echolibre). Ever w
+ ondered if there is a easier way to manage releases for your website ? Y
+ ou will learn how to harness the power of the PEAR installer to make the
+ release process as lean, mean and slick as possible so even your intern
+ s will be able to handle it.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T171500
+DTSTART;TZID=US/Pacific:20090723T163000
+DTSTAMP:20090311T024947
+LOCATION:Meeting Room J3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7505
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-16:30--7505
+SUMMARY:NASA World Wind: A New Mission
+DESCRIPTION:Presented by Patrick Hogan (NASA), Randy Kim (NASA). We are
+ entering an era when 3D visualization technology will become as standard
+ as 2D web browsers are today. NASA World Wind is standards-based, open
+ source technology oriented to stimulate innovation. Just as public highw
+ ays built for the common good opened up huge opportunities for society,
+ so too NASA World Wind client *and* server technology provides a public
+ domain 3D highway.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T180500
+DTSTART;TZID=US/Pacific:20090723T172000
+DTSTAMP:20090310T223443
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8332
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-17:20--8332
+SUMMARY:Use LINA to Reach Your Users on all Platforms
+DESCRIPTION:Presented by Saill White (Lina Software), Paul Honis (Lina
+ Software). In this session, we will help you create a single universal b
+ inary and installer of your Open Source project that can run on Windows,
+ Mac, UNIX, Xen, VMware, VirtualBox, Qemu, Parallels, and Amazon's EC2.
+ If you want to Linafy your app, just create a Debian package of your app
+ lication and bring that and a 128x128 PNG image of your logo.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T180500
+DTSTART;TZID=US/Pacific:20090723T172000
+DTSTAMP:20090318T002422
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7948
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-17:20--7948
+SUMMARY:MySQL Community Patches & Extensions
+DESCRIPTION:Presented by Peter Zaitsev (MySQL Performance Blog). Besides
+ MySQL release officially available from Sun there are multiple patches
+ and extensions developed by community. In this Presentation we will loo
+ k into them to see what extra features patches from Google, Percona and
+ OurDelta offer and how can you use them to make your MySQL life more fun
+ .
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T180500
+DTSTART;TZID=US/Pacific:20090723T172000
+DTSTAMP:20090529T184807
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7471
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-17:20--7471
+SUMMARY:What Web App Design Can Learn From the Harpsichord
+DESCRIPTION:Presented by Elaine Wherry (Meebo). Baroque harpsichordists
+ excelled at taking simple melodies and creating elaborate, beautiful pi
+ eces of music. But in their desire to push the boundaries of experimenta
+ tion, these keyboard virtuosi eventually ornamented the music beyond the
+ limits of good taste, making the composer’s original melody unrecogniza
+ ble. Something similar happens in web design.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T180500
+DTSTART;TZID=US/Pacific:20090723T172000
+DTSTAMP:20090310T221244
+LOCATION:Ballroom A4/A5
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8825
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-17:20--8825
+SUMMARY:Building Applications Across the Enterprise and Cloud Using Mule
+DESCRIPTION:Presented by Ken Yagen (MuleSource). This session details ho
+ w developers can use Mule -- an open source enterprise service bus (ESB)
+ -- to develop, deploy and integrate composite applications on both side
+ s of the firewall, and how Mule can work with complementary technology t
+ o address virtualization concerns.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T180500
+DTSTART;TZID=US/Pacific:20090723T172000
+DTSTAMP:20090310T214627
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8081
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-17:20--8081
+SUMMARY:What Zope did wrong, and how we fixed it
+DESCRIPTION:Presented by Lennart Regebro (Independent). Ten years old, Z
+ ope is the granddaddy of open source web frameworks. It introduced many
+ new concepts that have spread through the web framework world. But not a
+ ll of them was such great ideas. This talk is about the bad ideas that y
+ our framework risk end up repeating. It also talks about how these prob
+ lems have been fixed in Zope, and why Zope still is the leading edge of
+ web development.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T180500
+DTSTART;TZID=US/Pacific:20090723T172000
+DTSTAMP:20090713T230529
+LOCATION:Ballroom A8
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8038
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-17:20--8038
+SUMMARY:Writing Books using Open Source Software
+DESCRIPTION:Presented by wesley chun (CyberWeb Consulting). These days,
+ there are countless number of software applications and web services tha
+ t have been developed using free and open source software (FOSS). Such t
+ ools have become so flexible, powerful, and universal, that it should al
+ so be possible for authors to write manuscripts using FOSS in the same w
+ ay that applications are developed. In this talk, we present some case s
+ tudies of this phenomenon.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T180500
+DTSTART;TZID=US/Pacific:20090723T172000
+DTSTAMP:20090310T213149
+LOCATION:Meeting Room B1/B4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8074
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-17:20--8074
+SUMMARY:Effective Job Interviewing from Both Sides of the Desk
+DESCRIPTION:Presented by Andy Lester (theworkinggeek.com). An engaging,
+ frank discussion of the job interview, its failings, and how to make it
+ work for all involved. Effective interviewing reframes the interview as
+ what it really is: The candidate's first day on the job. This session,
+ aimed at the specific needs of the technical professional, shows how ma
+ nager and candidate must work together for their common benefit.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T180500
+DTSTART;TZID=US/Pacific:20090723T172000
+DTSTAMP:20090323T205650
+LOCATION:Meeting Room B2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7548
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-17:20--7548
+SUMMARY:Version Control for Mere Mortals
+DESCRIPTION:Presented by Emma Jane Hogbin (HICK Tech). As a freelance de
+ veloper chances are good you use either many, or no, version control sys
+ tems for your code. If your mental health has been compromised by index.
+ version080912f-b.inc file naming, or you wish there was more flexibility
+ in how (and when) your files are submitted to data central, it’s possib
+ le that Bazaar is the version control system you’ve been waiting for.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T180500
+DTSTART;TZID=US/Pacific:20090723T172000
+DTSTAMP:20090505T195950
+LOCATION:Meeting Room B3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8896
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-17:20--8896
+SUMMARY:Building a Business on Open Source Distributed Computing
+DESCRIPTION:Presented by Bradford Stephens (Visible Technologies). The e
+ nd of "scale-up" computing is near. The coming wave of web-scale data is
+ too big to justify exponentially increasing hardware costs for decreasi
+ ng returns. Apache's "Cloud Stack" (Hadoop, Lucene, HBase, etc) is enabl
+ ing Visible Technologies to move from a non-scalable MS-exclusive platfo
+ rm to a large cluster processing millions of pieces of content a day.Her
+ e's what we learned.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T180500
+DTSTART;TZID=US/Pacific:20090723T172000
+DTSTAMP:20090311T144659
+LOCATION:Meeting Room J1/J4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7754
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-17:20--7754
+SUMMARY:"Design Patterns" in Dynamic Languages
+DESCRIPTION:Presented by Neal Ford (ThoughtWorks). Design patterns descr
+ ibe common problems in software development, but many people believe tha
+ t the GoF book demonstrates the best ways to implement these patterns. D
+ ynamic languages provide more facilities than C++ or Java; this session
+ shows alternative implementations of design patterns using dynamic langu
+ ages (Ruby and Groovy).
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T180500
+DTSTART;TZID=US/Pacific:20090723T172000
+DTSTAMP:20090316T134515
+LOCATION:Meeting Room J2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8089
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-17:20--8089
+SUMMARY:XDebug Your Code: Tips and Tricks for Writing Bug-Free High Impa
+ ct Code
+DESCRIPTION:Presented by Brandon Savage (Applied Security). Most develop
+ ers have heard of XDebug, but how many of them have actually used it to
+ its full potential? Here we explore all the exciting things XDebug can d
+ o to improve code, from profiling to benchmarking to variable output.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T180500
+DTSTART;TZID=US/Pacific:20090723T172000
+DTSTAMP:20090310T220616
+LOCATION:Meeting Room J3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8088
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-17:20--8088
+SUMMARY:What Open Source Projects Need to Know About Interacting with th
+ e Press
+DESCRIPTION:Presented by Esther Schindler (freelance writer and editor),
+ Steven Vaughan-Nichols (Practical Technology), Joe Brockmeier (Novell),
+ James Turner (O'Reilly Media), Jennifer Cloer (Page One PR). Plenty of
+ FOSS projects yearn for visibility, within the tech press or in the lar
+ ger world. But few know how to respond when a journalist indicates inter
+ est. These experienced writers and editors will explain how your project
+ can get attention and present itself in the best possible light.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T183000
+DTSTART;TZID=US/Pacific:20090723T181500
+DTSTAMP:20090625T182346
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9004
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-18:15--9004
+SUMMARY:White Camel Awards
+DESCRIPTION:In the lands where the camel roams, the white (albino) camel
+ is a rare and revered individual. The White Camel Awards recognize the
+ many significant contributions made by the unsung heros of the Perl comm
+ unity. The efforts of these volunteers collectively make the Perl langua
+ ge and the Perl community better for all of us.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T193000
+DTSTART;TZID=US/Pacific:20090723T183000
+ALTDTSTART;TZID=US/Pacific:20090723T181500
+DTSTAMP:20090529T172427
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9005
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-18:30--9005
+SUMMARY:State of the Onion Address
+DESCRIPTION:Presented by Larry Wall (Netlogic Microsystems). The OSCON t
+ radition continues as Larry Wall delivers the annual State of the Onion
+ Address.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T200000
+DTSTART;TZID=US/Pacific:20090723T190000
+DTSTAMP:20090528T233838
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9407
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-19:00--9407
+SUMMARY:Freedom For the Cloud: How We Learn to Control the Cloud and Liv
+ e Happy
+DESCRIPTION:This BoF will serve as introduction to the debate over the c
+ oncept of software freedom for cloud based applications and services. OS
+ CON attendants will learn what tools are available and will dig into the
+ wider concept of the 'cloud' and how the keys to the success of GNU/Lin
+ ux can be replicated in this evolved scenario.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T200000
+DTSTART;TZID=US/Pacific:20090723T190000
+DTSTAMP:20090602T225645
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9678
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-19:00--9678
+SUMMARY:OpenJDK + You - Adding Open to JDK development
+DESCRIPTION:With more then 30 new committers within a year, OpenJDK has
+ been growing quickly, but that's just a start - if you are hacking on J
+ DK 7 or using one of the OpenJDK subprojects like Da Vinci VM, or just w
+ ant to get a taste for the direction in which JDK 7 is going, or want to
+ explore what it would take to get your favorite programming language ru
+ nning well on the JVM - come and join us at the BoF.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T200000
+DTSTART;TZID=US/Pacific:20090723T190000
+DTSTAMP:20090716T182215
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10412
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-19:00--10412
+SUMMARY:Dynamic Tracing of Your AMP Website
+DESCRIPTION:Ever wonder which PHP script or MySQL query in your web site
+ is keeping your system busy or how to quickly find out which module wit
+ hin your PHP application is struck ? Stop by to find out how simple DTra
+ ce skills can get this information painlessly.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T200000
+DTSTART;TZID=US/Pacific:20090723T190000
+DTSTAMP:20090622T043727
+LOCATION:Ballroom A4/A5
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10195
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-19:00--10195
+SUMMARY:OpenStreetMap
+DESCRIPTION:What's Open Source without Open Data as an input? OpenStree
+ tMap is a set of free and open geodata. You can use it as vectors (try
+ THAT with Google Maps), as tiles, as a base layer for your GIS. You can
+ overlay your data or contribute it if appropriate. Let's talk about ma
+ ps and mapping!
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T200000
+DTSTART;TZID=US/Pacific:20090723T190000
+DTSTAMP:20090615T211454
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10175
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-19:00--10175
+SUMMARY:Creating Communities Worldwide with phpBB
+DESCRIPTION:Organizations, businesses, clubs, and all kinds of user grou
+ ps around the world are using online bulletin boards to bring communitie
+ s together, and phpBB is the most widely used free and open source bulle
+ tin board solution online. Join local Bay Area phpBB users and team memb
+ ers to learn more about phpBB and how you can use it to bring your commu
+ nity together online.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T200000
+DTSTART;TZID=US/Pacific:20090723T190000
+DTSTAMP:20090623T154313
+LOCATION:Ballroom A8
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10201
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-19:00--10201
+SUMMARY:SilverStripe - An Object-oriented Open Source CMS - Community Me
+ etup
+DESCRIPTION:SilverStripe is a PHP5-based CMS downloaded 160,000+ times.
+ It focuses on being user friendly to end-users, and has an object orient
+ ed framework, Sapphire, within it, for developers. Meet a founder and o
+ thers who use the software. Gain an overview of the project and ask lots
+ of questions!
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T200000
+DTSTART;TZID=US/Pacific:20090723T190000
+DTSTAMP:20090624T164216
+LOCATION:Meeting Room B1/B4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10212
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-19:00--10212
+SUMMARY:Women in FLOSS and Allies Gathering
+DESCRIPTION:Women represent around 1-2% of FLOSS developers, and only a
+ slightly higher percentage of OSCON attendees. Let's meet and share exp
+ eriences, discuss tools for change, and get to know each other. Women a
+ nd allies of other genders are all welcome.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T200000
+DTSTART;TZID=US/Pacific:20090723T190000
+DTSTAMP:20090712T081056
+LOCATION:Meeting Room B2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10214
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-19:00--10214
+SUMMARY:What is Python?
+DESCRIPTION:Python's a simple & robust programming language that has an
+ ever-increasing mindshare & number of worldwide users. It features an ea
+ sy-to-learn syntax that is clear & concise, making it popular for a wide
+ range of apps. This tutorial provides an in-depth introduction so you c
+ an get started right away! Come find out why Google, Yahoo, LucasFilm, V
+ Mware, Ubuntu, YouTube, & Red Hat all use Python.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T200000
+DTSTART;TZID=US/Pacific:20090723T190000
+DTSTAMP:20090714T005657
+LOCATION:Meeting Room B3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10379
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-19:00--10379
+SUMMARY:Open Source goes to the Museum
+DESCRIPTION:Design a museum exhibit for The Tech Museum! Win a cash pri
+ ze! Help teach several hundred thousand kids a year about technology an
+ d open source! Come to this BOF and learn more.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T200000
+DTSTART;TZID=US/Pacific:20090723T190000
+DTSTAMP:20090715T121934
+LOCATION:Meeting Room C2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10392
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-19:00--10392
+SUMMARY:Going Social at NYTimes.com
+DESCRIPTION:The New York Times is first and foremost in the news busines
+ s. We don't want to be the next Facebook, Twitter, etc. But we see lots
+ of potential for a community and social layer on NYTimes.com, and TimesP
+ eople is a great example of how we've begun to build that layer. Come sh
+ are your thoughts and ideas on how The New York Times can better turn it
+ s readers into users.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T200000
+DTSTART;TZID=US/Pacific:20090723T190000
+DTSTAMP:20090716T182231
+LOCATION:Meeting Room C3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9776
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-19:00--9776
+SUMMARY:Drizzle
+DESCRIPTION:Did you miss the Drizzle panel? Have a question that didn't
+ get answered? Here's one more chance to discuss things!
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T210000
+DTSTART;TZID=US/Pacific:20090723T200000
+DTSTAMP:20090716T111313
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10448
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-20:00--10448
+SUMMARY:How I Built a Cool Monitoring Application Using Dojo, AJAX and R
+ EST
+DESCRIPTION:WEB2.0 and RIA (Rich Internet Applications) are the new plat
+ forms of developing web applications. Join this discussion on how open s
+ ource tools and frameworks were used to build the Web Stack Enterprise M
+ anager, a monitoring and management web application based on Dojo, AJAX
+ and REST.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T210000
+DTSTART;TZID=US/Pacific:20090723T200000
+DTSTAMP:20090716T182148
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10442
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-20:00--10442
+SUMMARY:OSOSOS - Offering Security in OpenSource Operating Systems
+DESCRIPTION:Many operating system security mechanisms are necessary for
+ developers to build secure software. While this session presents a few
+ such mechanisms available and under development in _OpenSolaris_, it pri
+ marily seeks the dialogue and discussion how important these features ar
+ e and how they compare to those of other OSes.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090723T220000
+DTSTART;TZID=US/Pacific:20090723T200000
+DTSTAMP:20090714T180852
+LOCATION:Meeting Room B2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10349
+UID:http://conferences.oreilly.com/oscon--s2009-07-23-20:00--10349
+SUMMARY:BayPIGgies July Meeting
+DESCRIPTION:BayPIGgies is the Bay Area Python Interest Group, which meet
+ s on the fourth Thursday of every month. In honor of OSCON moving to Sa
+ n Jose, we're switching our meeting location to the San Jose Convention
+ Center for July.
+END:VEVENT
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/OSCON20090724.ics Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,506 @@
+BEGIN:VCALENDAR
+X-WR-CALNAME:OSCON 2009
+VERSION:2.0
+PRODID:Expectnation
+CALSCALE:GREGORIAN
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T091500
+DTSTART;TZID=US/Pacific:20090724T090000
+DTSTAMP:20090716T203002
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10458
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-09:00--10458
+SUMMARY:Applying Open Source Principles to Federal Government
+DESCRIPTION:Presented by Gunnar Hellekson (Red Hat Government). The cur
+ rent Administration talks the talk in terms of its adoption of new techn
+ ology solutions, access to information, and the call for transparency an
+ d increased citizen participation. But can it walk the walk? This keyn
+ ote will address how open source advocates can help the Federal Governme
+ nt unlock the innovative potential of the open source development model.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T140000
+DTSTART;TZID=US/Pacific:20090724T090000
+DTSTAMP:20090702T000544
+LOCATION:Meeting Room N
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10251
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-09:00--10251
+SUMMARY:Sunlight Labs Hackathon
+DESCRIPTION:At the Sunlight Labs hackathon, Sunlight Labs will be workin
+ g with developers on two major projects: 1. Parsing sites at for our 50
+ state project to get every state legislature in a common data format, an
+ d 2. Adding data into Sunlight's newest project, Congrelate.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T093000
+DTSTART;TZID=US/Pacific:20090724T091500
+ALTDTSTART;TZID=US/Pacific:20090724T090000
+DTSTAMP:20090422T154805
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9099
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-09:15--9099
+SUMMARY:Fundamentalist Functional Programming
+DESCRIPTION:Presented by Erik Meijer (Microsoft). This talk argues that
+ fundamentalist functional programming-that is, radically eliminating all
+ side effects from programming languages, including strict evaluation-is
+ what it takes to conquer the concurrency and parallelism dragon.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T094500
+DTSTART;TZID=US/Pacific:20090724T093000
+ALTDTSTART;TZID=US/Pacific:20090724T090000
+DTSTAMP:20090716T162302
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10456
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-09:30--10456
+SUMMARY:The Rewilding: A Metaphor
+DESCRIPTION:Presented by Karl Schroeder. Open source software. Ecosyste
+ m services, distributed "smart" electrical grids, and sustainable econom
+ ics. Collective intelligence, the Science Commons, and Wikipedia. What
+ do all these have in common? They seem to represent a new ethos of "lett
+ ing go" of centralized control--in project management, industrial and ec
+ onomic infrastructure, and culture.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T100000
+DTSTART;TZID=US/Pacific:20090724T094500
+ALTDTSTART;TZID=US/Pacific:20090724T090000
+DTSTAMP:20090601T161557
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9248
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-09:45--9248
+SUMMARY:Where Next for Openness?
+DESCRIPTION:Presented by Mark Surman (Mozilla Foundation). Openness and
+ participation are now a pervasive part of digital life. Firefox. Wikiped
+ ia. Apache. Linux. Millions of Creative Commons pictures on Flickr. We h
+ ave moved mountains. The question is: what's next?
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T101500
+DTSTART;TZID=US/Pacific:20090724T100000
+ALTDTSTART;TZID=US/Pacific:20090724T090000
+DTSTAMP:20090325T171901
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9017
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-10:00--9017
+SUMMARY:Q & A
+DESCRIPTION:An open microphone question and answer session with the morn
+ ing's keynote speakers.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T113000
+DTSTART;TZID=US/Pacific:20090724T104500
+DTSTAMP:20090311T020212
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8165
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-10:45--8165
+SUMMARY:The Art of Klingon Programming
+DESCRIPTION:Presented by Paul Fenwick (Perl Training Australia). A good
+ programmer needs many qualities: intelligence, foresight, dedication, an
+ d the ability to fight off a hundred angry targh armed only with your ba
+ t'leth. On Qo'noS, software developers undertake an intensive course in
+ combat programming before they are cleared for active duty. Join Paul Fe
+ nwick as he examines how Perl's new autodie pragma can bring you the ver
+ y best of Klingon programming.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T113000
+DTSTART;TZID=US/Pacific:20090724T104500
+DTSTAMP:20090714T182503
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8862
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-10:45--8862
+SUMMARY:Recent Advances in the Linux Kernel Resource Management
+DESCRIPTION:Presented by Kirill Kolyshkin (OpenVZ). The talk outlines th
+ e standard Linux kernel mechanisms for controlling resources (such as CP
+ U, RAM, disk) and reveals their shortcomings. It explains what are conta
+ iners and why resource management is important for those. A new Linux ke
+ rnel features -- cgroups and memory controller -- are explained in detai
+ ls, with some tricky implementation details and a look into what else ha
+ s yet to be done.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T113000
+DTSTART;TZID=US/Pacific:20090724T104500
+DTSTAMP:20090320T170912
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8395
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-10:45--8395
+SUMMARY:Open APIs of The New York Times
+DESCRIPTION:Presented by Derek Gottfrid (The New York Times). We have em
+ barked on a mission to share more of what we do on the development side
+ of The Times. So far, we’ve done that via conference presentations, open
+ -source software, blog posts and (most recently and probably most import
+ antly) our APIs. We see our site as more than just a source of news and
+ information: it’s a platform on which news and information become buildi
+ ng blocks.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T113000
+DTSTART;TZID=US/Pacific:20090724T104500
+DTSTAMP:20090310T213213
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8376
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-10:45--8376
+SUMMARY:Forking Encouraged: Folk Programming, Open Source, and Social So
+ ftware Development
+DESCRIPTION:Presented by Kirrily Robert (Metaweb), Yoz Grahame (Linden L
+ ab), Jason Douglas (Metaweb). The term "Folk Computing" was coined 20+ y
+ ears ago to describe how people learn to program by copying and experime
+ ntation. Learn how open source licenses, hosted development environment
+ s, and other folk programming concepts lower barriers to entry and help
+ people get up to speed as coders. We'll also be showing off some modern
+ folk programming platforms, from Yahoo Pipes to the OLPC and beyond.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T113000
+DTSTART;TZID=US/Pacific:20090724T104500
+DTSTAMP:20090604T162038
+LOCATION:Ballroom A4/A5
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9093
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-10:45--9093
+SUMMARY:Democratizing the Cloud Using the LiveLabs Reactive Framework
+DESCRIPTION:Presented by Erik Meijer (Microsoft). By leveraging the fact
+ that the iterator and the subject/observer design pattern are dual, we
+ show how LINQ query comprehensions and imperative iterators and foreach
+ loops, provide a compositional programming model for reactive and distri
+ buted programming.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T113000
+DTSTART;TZID=US/Pacific:20090724T104500
+DTSTAMP:20090415T180459
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8335
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-10:45--8335
+SUMMARY:The Bee: UNICEF's Portable Infrastructure for Emergency Communic
+ ations
+DESCRIPTION:Presented by Seth Herr (UNICEF), Merrick Schaefer (UNICEF).
+ The Bee is an emergency communications system utilizing innovative open
+ -source hardware and software. The Bee can be deployed anywhere in the w
+ orld, can navigate power and connectivity challenges, and can be checked
+ as baggage on commercial airlines. It's rugged, customizable, and desig
+ ned to contribute to the community long after the crisis has passed.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T113000
+DTSTART;TZID=US/Pacific:20090724T104500
+DTSTAMP:20090318T002433
+LOCATION:Ballroom A8
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7936
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-10:45--7936
+SUMMARY:Goal Driven Performance Application
+DESCRIPTION:Presented by Peter Zaitsev (MySQL Performance Blog). So you
+ have ambiguous task to optimize Web Site Performance and you have few re
+ sources and time available. How to make the biggest impact with them ? T
+ his presentation gives you insight in methodology show practical tips an
+ d tools for web site performance optimization.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T113000
+DTSTART;TZID=US/Pacific:20090724T104500
+DTSTAMP:20090310T214156
+LOCATION:Meeting Room B1/B4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7949
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-10:45--7949
+SUMMARY:Moving into the Cloud
+DESCRIPTION:Presented by Bernard Golden (HyperStratus). Many new applica
+ tions are being created to take advantage of cloud computing. But what a
+ bout the enormous installed base of existing apps? How can those leverag
+ e cloud computing? This presentation describes migrating an existing app
+ lication into Amazon's EC2, and covers the technical, organizational, an
+ d financial aspects of migration.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T113000
+DTSTART;TZID=US/Pacific:20090724T104500
+DTSTAMP:20090406T150441
+LOCATION:Meeting Room B2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8856
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-10:45--8856
+SUMMARY:The HTML 5 Experiments
+DESCRIPTION:Presented by Bruce Lawson (Opera Software ASA). A pragmatic
+ look at HTML 5 by experimenting with converting a real site to HTML 5 -
+ how does it work? Where it useful and where is it annoying? How is suppo
+ rt in current browsers?
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T113000
+DTSTART;TZID=US/Pacific:20090724T104500
+DTSTAMP:20090505T214002
+LOCATION:Meeting Room B3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8190
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-10:45--8190
+SUMMARY:What's in a Name: Can Trademarks be Helpful to Free Software Pro
+ jects?
+DESCRIPTION:Presented by Karen Sandler (Software Freedom Law Center), Si
+ mon Phipps (Sun Microsystems), Gervase Markham (Mozilla Foundation), La
+ rry Augustin (SugarCRM), Chris Messina (OpenID Foundation). Trademark la
+ w is designed to prevent confusion in the market place but understanding
+ how it can benefit the FOSS community can often be confusing. This pane
+ l will discuss whether it is useful to register a trademark and, if so,
+ how to permit its use by others. Various policies and enforcement strate
+ gies will be evaluated from corporate and non-profit perspectives, ofte
+ n in strong disagreement.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T113000
+DTSTART;TZID=US/Pacific:20090724T104500
+DTSTAMP:20090310T223011
+LOCATION:Meeting Room J1/J4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7985
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-10:45--7985
+SUMMARY:The Freedom to Cure Cancer: Open Source Software in Genomics
+DESCRIPTION:Presented by David Dooling (The Genome Center at Washington
+ University in St. Louis). It has long been know that free/libre/open sou
+ rce software (FLOSS), especially GNU/Linux and Perl, played a major role
+ in the Human Genome Project. This presentation will discuss the use and
+ development of FLOSS in the post-genomics era, focusing on its pervasiv
+ e use in sequencing the first cancer genome at The Genome Center at Wash
+ ington University in St. Louis.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T113000
+DTSTART;TZID=US/Pacific:20090724T104500
+DTSTAMP:20090313T181028
+LOCATION:Meeting Room J2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7946
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-10:45--7946
+SUMMARY:Conventional Thinking, a guide to database naming standards
+DESCRIPTION:Presented by Robert Treat (OmniTI). Everyone agrees that we
+ need coding standards, but they often overlook the need to define a nami
+ ng standard for thier SQL and database related items. This talk we not b
+ e a top-down explination of "the right way to do it", but rather we'll e
+ xplore the key issues you need to be aware of, from all sides, and help
+ you determine the right standards for your organization.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T113000
+DTSTART;TZID=US/Pacific:20090724T104500
+DTSTAMP:20090311T000332
+LOCATION:Meeting Room J3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7623
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-10:45--7623
+SUMMARY:The JSON Saga
+DESCRIPTION:Presented by Douglas Crockford (Yahoo! Inc.). How JSON overc
+ ame intolerance, inurement, and death threats to become the preferred da
+ ta interchange format.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T122000
+DTSTART;TZID=US/Pacific:20090724T113500
+DTSTAMP:20090422T230607
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8060
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-11:35--8060
+SUMMARY:The Conway Channel
+DESCRIPTION:Presented by Damian Conway (Thoughtstream). The usual smorga
+ sbord of new and improbably useful modules beamed straight into your min
+ d from the secret island hideaway of Perl's own Dr Evil.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T122000
+DTSTART;TZID=US/Pacific:20090724T113500
+DTSTAMP:20090310T230330
+LOCATION:Ballroom A1
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8452
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-11:35--8452
+SUMMARY:How Green Is Our City? The Urban Forest Mapping Project
+DESCRIPTION:Presented by Kelaine Vargas (Urban Forest Map). The Urban Fo
+ rest Mapping Project will map every tree in San Francisco using online i
+ nput from community members as well as official data, and calculate the
+ ecosystem services the urban forest is providing. This web-based, open-s
+ ource application makes use of crowd-sourced data from "citizen scientis
+ ts" to help us use our urban natural resources to increase sustainabilit
+ y.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T122000
+DTSTART;TZID=US/Pacific:20090724T113500
+DTSTAMP:20090312T021906
+LOCATION:Ballroom A2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8153
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-11:35--8153
+SUMMARY:NPR, Open Content and API's
+DESCRIPTION:Presented by Daniel Jacobson (National Public Radio). It has
+ been a year since NPR's public API launched (announced at OSCON 2008).
+ This session will explore how the marketplace has changed for media org
+ anizations over the last year, how API's have played a role in that chan
+ ge, and what the future looks like for NPR, its API, and other media org
+ anizations.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T122000
+DTSTART;TZID=US/Pacific:20090724T113500
+DTSTAMP:20090310T215150
+LOCATION:Ballroom A3/A6
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7841
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-11:35--7841
+SUMMARY:Practical Computerized Home Automation
+DESCRIPTION:Presented by Bruce Momjian (EnterpriseDB), Matthew Momjian (
+ Student). You can control devices in your home from your computer with n
+ o new wiring. This session covers controlling lights, bells, and motors
+ using open source software. Wireless remotes can also control devices
+ . Sensors can provide information about motion, sunset, temperature. C
+ apturing caller id and auto-dialing is also covered.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T122000
+DTSTART;TZID=US/Pacific:20090724T113500
+DTSTAMP:20090310T214824
+LOCATION:Ballroom A4/A5
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8408
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-11:35--8408
+SUMMARY:Stream Fusion: Beautiful Performance in Haskell
+DESCRIPTION:Presented by Bryan O'Sullivan (Serpentine Green Design). The
+ Haskell language makes it possible to write elegant code while achievin
+ g top-notch performance. We'll introduce you to the features that make f
+ ast code possible, focusing on one of the newest and most exciting techn
+ iques for number crunching and text processing: stream fusion.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T122000
+DTSTART;TZID=US/Pacific:20090724T113500
+DTSTAMP:20090311T235210
+LOCATION:Ballroom A7
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8442
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-11:35--8442
+SUMMARY:Security Without Disruption: Ksplice Kernel Updates
+DESCRIPTION:Presented by Jeff Arnold (Ksplice, Inc.). Today, every mains
+ tream operating system in the world requires regular reboots in order to
+ be up to date and secure. Since reboots cause downtime and disruption,
+ people are forced into the uncomfortable dilemma of choosing between se
+ curity and convenience. New open source technology out of MIT, called Ks
+ plice, enables running systems to stay secure without the disruption of
+ rebooting.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T122000
+DTSTART;TZID=US/Pacific:20090724T113500
+DTSTAMP:20090310T213836
+LOCATION:Ballroom A8
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8426
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-11:35--8426
+SUMMARY:High Performance APC
+DESCRIPTION:Presented by Brian Shire (Facebook, Inc.), Graham Kelly (Fac
+ ebook, Inc.). The Alternative PHP Cache is an opcode and variable cache
+ for PHP that can be used to improve PHP performance, scalability, and en
+ d user experience.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T122000
+DTSTART;TZID=US/Pacific:20090724T113500
+DTSTAMP:20090310T231026
+LOCATION:Meeting Room B1/B4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8563
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-11:35--8563
+SUMMARY:Scan Open Source Report 2008 and the Architecture Library
+DESCRIPTION:Presented by David Maxwell (Coverity, Inc.). This talk will
+ present the 2008 results from the Scan Project, a Department of Homeland
+ Security open source initiative run by Coverity, designed to improve th
+ e quality and security of popular open source projects used to power gov
+ ernment and private websites.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T122000
+DTSTART;TZID=US/Pacific:20090724T113500
+DTSTAMP:20090311T050608
+LOCATION:Meeting Room B2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/8331
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-11:35--8331
+SUMMARY:Crash Reporting: Mozilla's Open Source Solution
+DESCRIPTION:Presented by K Lars Lohn (Mozilla Corporation), Ted Mielcza
+ rek (Mozilla Corporation), Austin King (Mozila Corporation). Mozilla's o
+ pen source crash reporting system premiered in Firefox 3.0. Combining t
+ he Google Breakpad and Mozilla Socorro projects, Mozilla has created a s
+ ystem that allows millions of client applications to report crashes bac
+ k to a central location for analysis. This talk is intended for people i
+ nterested in how the new Firefox crash reporting works and how it is app
+ licable to other projects.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T122000
+DTSTART;TZID=US/Pacific:20090724T113500
+DTSTAMP:20090624T070410
+LOCATION:Meeting Room B3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/9257
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-11:35--9257
+SUMMARY:Automating the Cloud with Chef
+DESCRIPTION:Presented by Adam Jacob (Opscode). Infrastructure is code -
+ the separation between how you manage your infrastructure and how you bu
+ ild your applications is disappearing. Adam Jacob, CTO of Opscode and p
+ rimary author of Chef, will teach you what this means in practice - thro
+ ugh showing how to deploy real-world applications with Chef on EC2.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T122000
+DTSTART;TZID=US/Pacific:20090724T113500
+DTSTAMP:20090311T032948
+LOCATION:Meeting Room J1/J4
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7889
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-11:35--7889
+SUMMARY:Sex, Drugs and XMPP
+DESCRIPTION:Presented by Paul Scott (University of the Western Cape). XM
+ PP is a cheap, low bandwidth alternative to the web in bandwidth poor co
+ untries. This talk will show how we have used XMPP networks to address s
+ ocial problems like gansterism, drug abuse and HIV AIDS.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T122000
+DTSTART;TZID=US/Pacific:20090724T113500
+DTSTAMP:20090310T221803
+LOCATION:Meeting Room J2
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7955
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-11:35--7955
+SUMMARY:What Every Developer Should Know About Database Scalability
+DESCRIPTION:Presented by Jonathan Ellis (Rackspace Hosting). Replication
+ . Partitioning. Relational databases. Bigtable. Dynamo. There is no
+ one-size-fits-all approach to scaling your database, and the CAP theorem
+ proved that there never will be. This talk will explain the advantages
+ and limits of the approaches to scaling traditional relational database
+ s, as well as the tradeoffs made by the designers of newer systems like
+ Google's Bigtable.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T122000
+DTSTART;TZID=US/Pacific:20090724T113500
+DTSTAMP:20090313T053329
+LOCATION:Meeting Room J3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/7850
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-11:35--7850
+SUMMARY:Building and Running An Open-Source Community: The FreeBSD Proje
+ ct
+DESCRIPTION:Presented by Marshall Kirk McKusick (Marshall Kirk McKusick
+ Consultancy). This talk will tell the story of the the FreeBSD project w
+ hich started from the open-source release of 4.4BSD-Lite from the Univer
+ sity of California at Berkeley. The FreeBSD project patterned its initi
+ al community structure on the development structure built up at Berkeley
+ .
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T133000
+DTSTART;TZID=US/Pacific:20090724T123000
+DTSTAMP:20090716T165536
+LOCATION:Exhibit Hall 3
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10416
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-12:30--10416
+SUMMARY:Moblin, Chrome, Android, Ubuntu, etc: What's the Deal with Linux
+ on the Desktop?
+DESCRIPTION:Presented by Jim Zemlin (The Linux Foundation). Join Jim Zem
+ lin as he takes a look back at the big moves that drove Linux to dominat
+ e the server and super computing markets and how we are seeing similar t
+ rends start now in the desktop.
+END:VEVENT
+BEGIN:VEVENT
+DTEND;TZID=US/Pacific:20090724T140000
+DTSTART;TZID=US/Pacific:20090724T133000
+DTSTAMP:20090710T164522
+LOCATION:Concourse Two
+URL:http://en.oreilly.com/oscon2009/public/schedule/detail/10409
+UID:http://conferences.oreilly.com/oscon--s2009-07-24-13:30--10409
+SUMMARY:Closing Reception
+DESCRIPTION:Join us at the "build your own Hamburger bar". Enjoy burger
+ s, veggie crudites, soda pop, and water. Take this opportunity to netwo
+ rk one last time at this closing event. Say thank you and exchange conta
+ ct information until next year.
+END:VEVENT
Binary file OSCON/WRTKit/Resources/CheckBox.png has changed
Binary file OSCON/WRTKit/Resources/ContentPanelFoldIcons.png has changed
Binary file OSCON/WRTKit/Resources/ControlAssemblyBackground.png has changed
Binary file OSCON/WRTKit/Resources/DocumentBackground.png has changed
Binary file OSCON/WRTKit/Resources/FormButtonCenter.png has changed
Binary file OSCON/WRTKit/Resources/FormButtonLeft.png has changed
Binary file OSCON/WRTKit/Resources/FormButtonRight.png has changed
Binary file OSCON/WRTKit/Resources/ListViewCaptionBackground.png has changed
Binary file OSCON/WRTKit/Resources/NotificationPopupBackground.png has changed
Binary file OSCON/WRTKit/Resources/NotificationPopupTypeIndicator.png has changed
Binary file OSCON/WRTKit/Resources/ProgressBarUnknown.gif has changed
Binary file OSCON/WRTKit/Resources/RadioButton.png has changed
Binary file OSCON/WRTKit/Resources/ScrollbarThumbBottom.png has changed
Binary file OSCON/WRTKit/Resources/ScrollbarThumbMiddle.png has changed
Binary file OSCON/WRTKit/Resources/ScrollbarThumbTop.png has changed
Binary file OSCON/WRTKit/Resources/ScrollbarTrackBottom.png has changed
Binary file OSCON/WRTKit/Resources/ScrollbarTrackMiddle.png has changed
Binary file OSCON/WRTKit/Resources/ScrollbarTrackTop.png has changed
Binary file OSCON/WRTKit/Resources/SeparatorCenter.png has changed
Binary file OSCON/WRTKit/Resources/SeparatorLeft.png has changed
Binary file OSCON/WRTKit/Resources/SeparatorRight.png has changed
Binary file OSCON/WRTKit/Resources/Thumbs.db has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/Resources/UI.css Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,925 @@
+ /*
+� Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (�Nokia�) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokia�s copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+/******************************************************************************/
+/* Definition of visuals for the WRTKit user interface toolkit */
+/******************************************************************************/
+
+/* Fix for font size inheritance */
+html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p,
+blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl,
+dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody,
+tfoot, thead, tr, th, td {
+ font-weight: inherit;
+ font-style: inherit;
+ font-size: 100%;
+ font-family: inherit;
+}
+
+
+/******************************************************************************/
+/* Document body rules */
+
+body {
+ margin: 0px;
+ background: url("DocumentBackground.png") repeat; /* repeat-x fixed; */
+ font: normal 18px Arial, sans-serif;
+ color: rgb(255,255,255);
+}
+
+
+
+/******************************************************************************/
+/* Override default WRT styling for HTML form controls */
+
+/* Textarea when focused */
+textarea:focus {
+ outline: none;
+}
+
+/* Textarea when hovering */
+textarea:hover {
+ outline: none;
+}
+
+/* Select elements when focused */
+select:focus {
+ outline: none;
+}
+
+/* Select elements when hovering */
+select:hover {
+ outline: none;
+}
+
+/* Input elements when focused */
+input:focus {
+ outline: none;
+}
+
+/* Input elements when hovering */
+input:hover {
+ outline: none;
+}
+
+/* Link elements */
+a {
+ text-decoration: none;
+ color: rgb(255,255,255);
+}
+
+/* Links when focused */
+a:focus {
+ background: none;
+ outline: none;
+}
+
+/* Links when hovering */
+a:hover {
+ background: none;
+ outline: none;
+}
+
+
+/******************************************************************************/
+/* Rules for default view and document scrollbar containers */
+
+/* Default view container rules */
+.ViewContainer {
+ margin: 0px 0px 0px 0px;
+}
+
+/* Default document scrollbar container rules */
+.DocumentScrollbarContainer {
+ position: fixed;
+ right: 0px;
+ top: 0px;
+ height: 100%;
+ width: 7px;
+}
+
+
+/******************************************************************************/
+/* View style rules */
+
+/* Rules for the list view */
+.ListView {
+ margin: 0px 0px 0px 0px;
+}
+
+/* Rules for the list view caption */
+.ListViewCaption {
+ background: url("ListViewCaptionBackground.png");
+ height: 35px;
+}
+
+/* Rules for the list view caption text */
+.ListViewCaptionText {
+ font-size: 1.2em;
+ font-weight: bold;
+ padding: 7px 0px 0px 11px;
+}
+
+/* Rules for the list view control list element */
+.ListViewControlList {
+ margin: 1px 10px 1px 3px;
+}
+
+
+/******************************************************************************/
+/* Control style rules */
+
+/* Rules for control root element (rootElement) */
+.Control {
+
+}
+
+/* Control assembly rules (assemblyElement) */
+.ControlAssembly {
+ background: url("ControlAssemblyBackground.png") repeat-x;
+ padding: 1px 5px;
+}
+
+/* Control assembly in normal state */
+.ControlAssemblyNormal {
+ background-position: 0px 0px;
+}
+
+/* Control assembly in focused state */
+.ControlAssemblyFocus {
+ background-position: 0px -250px;
+}
+
+/* Control assembly in hovering state */
+.ControlAssemblyHover {
+ background-position: 0px -500px;
+}
+
+/* Control assembly in disabled state */
+.ControlAssemblyDisabled {
+ background-position: 0px 0px;
+}
+
+/* Caption for controls (captionElement) */
+.ControlCaption {
+ font-weight: bold;
+ padding: 3px 0px 0px 3px;
+}
+
+/* Caption for controls in normal state */
+.ControlCaptionNormal {
+
+}
+
+/* Caption for controls when focused */
+.ControlCaptionFocus {
+ color: rgb(255,255,255);
+}
+
+/* Caption for controls when hovering */
+.ControlCaptionHover {
+
+}
+
+/* Caption for controls when disabled */
+.ControlCaptionDisabled {
+ color: rgb(185,185,185);
+}
+
+/* Control element rules (controlElement) */
+.ControlElement {
+ padding: 3px 3px 3px 3px;
+}
+
+/******************************************************************************/
+/* Label */
+
+/* Rules for the text value of a Label control */
+.LabelText {
+
+}
+
+
+/******************************************************************************/
+/* ContentPanel */
+
+/* Caption area rules for non-foldable content panels */
+.ContentPanelCaptionNonFoldable {
+ padding: 3px 0px 0px 3px;
+}
+
+/* Caption area rules for foldable content panels */
+.ContentPanelCaptionFoldable {
+ padding: 4px 0px 3px 3px;
+}
+
+/* Rules for fold toggling element in content panel */
+.ContentPanelFoldToggle {
+ background: url("ContentPanelFoldIcons.png") no-repeat;
+ padding-left: 16px;
+}
+
+/* Collapsed fold */
+.ContentPanelFoldToggleCollapsed {
+ background-position: 0px 0px;
+}
+
+/* Expanded fold */
+.ContentPanelFoldToggleExpanded {
+ background-position: 0px -150px;
+}
+
+/* Rules for the content panel caption text */
+.ContentPanelCaptionText {
+ font-weight: bold;
+}
+
+/* Caption text for content panel in normal state */
+.ContentPanelCaptionTextNormal {
+
+}
+
+/* Caption text for content panel when focused */
+.ContentPanelCaptionTextFocus {
+ color: rgb(255,255,255);
+}
+
+/* Caption text for content panel when hovering */
+.ContentPanelCaptionTextHover {
+
+}
+
+/* Caption text for content panel when disabled */
+.ContentPanelCaptionTextDisabled {
+ color: rgb(185,185,185);
+}
+
+/* Rules for content in the content panel */
+.ContentPanelContent {
+ padding: 2px 2px 2px 8px;
+}
+
+
+/******************************************************************************/
+/* FormButton */
+
+/* Rules for form button */
+.FormButton {
+
+}
+
+/* Rules for form button control element */
+.FormButtonControlElement {
+
+}
+
+/* Rules for form button table (table) */
+.FormButtonTable {
+ width: 100%;
+ border-spacing: 0px;
+ padding: 0px;
+ table-layout: fixed;
+}
+
+/* Form button row (tr) */
+.FormButtonRow {
+ padding: 0px;
+}
+
+/* Rules for form button left cell (td) */
+.FormButtonLeftCell {
+ width: 8px;
+ height: 26px;
+ background: url("FormButtonLeft.png") no-repeat;
+ padding: 0px;
+}
+
+/* Rules for form button center cell (td) */
+.FormButtonCenterCell {
+ height: 26px;
+ background: url("FormButtonCenter.png") repeat-x;
+ padding: 0px;
+ vertical-align: middle;
+ text-align: center;
+}
+
+/* Rules for form button right cell (td) */
+.FormButtonRightCell {
+ width: 8px;
+ height: 26px;
+ background: url("FormButtonRight.png") no-repeat;
+ padding: 0px;
+}
+
+/* Rules for form button left cell in normal state (td) */
+.FormButtonLeftCellNormal {
+ background-position: 0px 0px;
+}
+
+/* Rules for form button left cell in focused state (td) */
+.FormButtonLeftCellFocus {
+ background-position: 0px -50px;
+}
+
+/* Rules for form button left cell in hover state (td) */
+.FormButtonLeftCellHover {
+ background-position: 0px -100px;
+}
+
+/* Rules for form button left cell in disabled state (td) */
+.FormButtonLeftCellDisabled {
+ background-position: 0px -150px;
+}
+
+/* Rules for form button center cell in normal state (td) */
+.FormButtonCenterCellNormal {
+ background-position: 0px 0px;
+}
+
+/* Rules for form button center cell in focused state (td) */
+.FormButtonCenterCellFocus {
+ background-position: 0px -50px;
+}
+
+/* Rules for form button center cell in hover state (td) */
+.FormButtonCenterCellHover {
+ background-position: 0px -100px;
+}
+
+/* Rules for form button center cell in disabled state (td) */
+.FormButtonCenterCellDisabled {
+ background-position: 0px -150px;
+}
+
+/* Rules for form button left cell in normal state (td) */
+.FormButtonRightCellNormal {
+ background-position: 0px 0px;
+}
+
+/* Rules for form button left cell in focused state (td) */
+.FormButtonRightCellFocus {
+ background-position: 0px -50px;
+}
+
+/* Rules for form button left cell in hover state (td) */
+.FormButtonRightCellHover {
+ background-position: 0px -100px;
+}
+
+/* Rules for form button left cell in disabled state (td) */
+.FormButtonRightCellDisabled {
+ background-position: 0px -150px;
+}
+
+/* Rules for form button text */
+.FormButtonText {
+ font-weight: bold;
+}
+
+/* Form button text in normal state */
+.FormButtonTextNormal {
+ color: rgb(255,255,255);
+}
+
+/* Form button text when focused */
+.FormButtonTextFocus {
+ color: rgb(255,255,255);
+}
+
+/* Form button text when hovering */
+.FormButtonTextHover {
+ color: rgb(255,255,255);
+}
+
+/* Form button text when disabled */
+.FormButtonTextDisabled {
+ color: rgb(200,200,200);
+}
+
+
+/******************************************************************************/
+/* NavigationButton */
+
+/* Rules for navigation button */
+.NavigationButton {
+
+}
+
+/* Rules for navigation button control element */
+.NavigationButtonControlElement {
+ padding: 3px 3px 3px 3px;
+}
+
+/* Rules for navigation button table (table) */
+.NavigationButtonTable {
+ border-spacing: 0px;
+ padding: 0px;
+}
+
+/* Navigation button row (tr) */
+.NavigationButtonRow {
+ padding: 0px;
+}
+
+/* Rules for navigation button image cell (td) */
+.NavigationButtonImageCell {
+ line-height: 1px;
+ font-size: 1px;
+ vertical-align: middle;
+}
+
+/* Rules for navigation button text cell (td) */
+.NavigationButtonTextCell {
+ vertical-align: middle;
+ padding: 0px;
+}
+
+/* Rules for navigation button image */
+.NavigationButtonImage {
+ padding: 0px 5px 0px 0px;
+}
+
+/* Rules for navigation button text */
+.NavigationButtonText {
+ font-weight: bold;
+}
+
+/* Navigation button text in normal state */
+.NavigationButtonTextNormal {
+
+}
+
+/* Navigation button text when focused */
+.NavigationButtonTextFocus {
+ color: rgb(255,255,255);
+}
+
+/* Navigation button text when hovering */
+.NavigationButtonTextHover {
+
+}
+
+/* Navigation button text when disabled */
+.NavigationButtonTextDisabled {
+ color: rgb(185,185,185);
+}
+
+
+/******************************************************************************/
+/* TextField */
+
+/* Rules for textField */
+.TextField {
+ width: 100%;
+ border: 1px solid rgb(255,255,255);
+ background: rgb(57,56,52);
+ margin: 0px 0px 3px 0px;
+}
+
+/* TextField in normal state */
+.TextFieldNormal {
+
+}
+
+/* TextField in focus state */
+.TextFieldFocus {
+
+}
+
+/* TextField in hover state */
+.TextFieldHover {
+
+}
+
+/* TextField in disabled state */
+.TextFieldDisabled {
+ color: rgb(185,185,185);
+ background: rgb(57,56,52);
+}
+
+
+/******************************************************************************/
+/* TextArea */
+
+/* Rules for TextArea */
+.TextArea {
+ width: 100%;
+ border: 1px solid rgb(255,255,255);
+ background: rgb(57,56,52);
+ margin: 0px 0px 3px 0px;
+}
+
+/* TextArea in normal state */
+.TextAreaNormal {
+
+}
+
+/* TextArea in focus state */
+.TextAreaFocus {
+
+}
+
+/* TextArea in hover state */
+.TextAreaHover {
+
+}
+
+/* TextArea in disabled state */
+.TextAreaDisabled {
+ color: rgb(185,185,185);
+ background: rgb(57,56,52);
+}
+
+
+/******************************************************************************/
+/* Separator */
+
+/* Rules for Separator (table) */
+.Separator {
+ width: 100%;
+ padding: 0px;
+ border-spacing: 0px;
+ table-layout: fixed;
+ margin: 3px 0px;
+}
+
+/* Separator row (tr) */
+.SeparatorRow {
+ padding: 0px;
+}
+
+/* Separator left cell (td) */
+.SeparatorLeftCell {
+ width: 5px;
+ height: 2px;
+ background: url("SeparatorLeft.png") no-repeat;
+ padding: 0px;
+}
+
+/* Separator center cell (td) */
+.SeparatorCenterCell {
+ height: 2px;
+ background: url("SeparatorCenter.png") repeat-x;
+ padding: 0px;
+}
+
+/* Separator right cell (td) */
+.SeparatorRightCell {
+ width: 6px;
+ height: 2px;
+ background: url("SeparatorRight.png") no-repeat;
+ padding: 0px;
+}
+
+
+/******************************************************************************/
+/* SelectionMenu */
+
+/* Rules for SelectionMenu select element */
+.SelectionMenu {
+ width: 100%;
+ border: 1px solid rgb(255,255,255);
+ background: rgb(57,56,52);
+ margin: 0px 0px 3px 0px;
+}
+
+/* SelectionMenu in normal state */
+.SelectionMenuNormal {
+
+}
+
+/* SelectionMenu in focus state */
+.SelectionMenuFocus {
+
+}
+
+/* SelectionMenu in hover state */
+.SelectionMenuHover {
+
+}
+
+/* SelectionMenu in disabled state */
+.SelectionMenuDisabled {
+ color: rgb(185,185,185);
+ background: rgb(57,56,52);
+}
+
+/* Rules for SelectionMenu option elements */
+.SelectionMenuOption {
+ background: rgb(57,56,52);
+}
+
+/* SelectionMenu option in normal state */
+.SelectionMenuOptionNormal {
+
+}
+
+/* SelectionMenu option in focus state */
+.SelectionMenuOptionFocus {
+
+}
+
+/* SelectionMenu option in hover state */
+.SelectionMenuOptionHover {
+
+}
+
+/* SelectionMenu option in disabled state */
+.SelectionMenuOptionDisabled {
+ color: rgb(185,185,185);
+ background: rgb(57,56,52);
+}
+
+
+/******************************************************************************/
+/* SelectionList */
+
+/* SelectionList option list element */
+.SelectionList {
+
+}
+
+/* SelectionList option list element in normal state */
+.SelectionListNormal {
+
+}
+
+/* SelectionList option list element in focus state */
+.SelectionListFocus {
+
+}
+
+/* SelectionList option list element in hover state */
+.SelectionListHover {
+
+}
+
+/* SelectionList option list element in disabled state */
+.SelectionListDisabled {
+
+}
+
+/* SelectionList option element in single selection mode */
+.SelectionListOptionSingle {
+ padding-left: 19px;
+ background: url("RadioButton.png") no-repeat;
+ height: 16px;
+}
+
+/* SelectionList option element in single selection mode, unchecked normal state */
+.SelectionListOptionSingleUncheckedNormal {
+ background-position: 0px 0px;
+}
+
+/* SelectionList option element in single selection mode, unchecked focus state */
+.SelectionListOptionSingleUncheckedFocus {
+ background-position: 0px -50px;
+}
+
+/* SelectionList option element in single selection mode, unchecked diabled state */
+.SelectionListOptionSingleUncheckedDisabled {
+ background-position: 0px -100px;
+}
+
+/* SelectionList option element in single selection mode, checked normal state */
+.SelectionListOptionSingleCheckedNormal {
+ background-position: 0px -150px;
+}
+
+/* SelectionList option element in single selection mode, checked focus state */
+.SelectionListOptionSingleCheckedFocus {
+ background-position: 0px -200px;
+}
+
+/* SelectionList option element in single selection mode, checked diabled state */
+.SelectionListOptionSingleCheckedDisabled {
+ background-position: 0px -250px;
+}
+
+/* SelectionList option element in multi selection mode */
+.SelectionListOptionMulti {
+ padding-left: 19px;
+ background: url("CheckBox.png") no-repeat;
+ height: 16px;
+}
+
+/* SelectionList option element in multi selection mode, unchecked normal state */
+.SelectionListOptionMultiUncheckedNormal {
+ background-position: 0px 0px;
+}
+
+/* SelectionList option element in multi selection mode, unchecked focus state */
+.SelectionListOptionMultiUncheckedFocus {
+ background-position: 0px -50px;
+}
+
+/* SelectionList option element in multi selection mode, unchecked diabled state */
+.SelectionListOptionMultiUncheckedDisabled {
+ background-position: 0px -100px;
+}
+
+/* SelectionList option element in multi selection mode, checked normal state */
+.SelectionListOptionMultiCheckedNormal {
+ background-position: 0px -150px;
+}
+
+/* SelectionList option element in multi selection mode, checked focus state */
+.SelectionListOptionMultiCheckedFocus {
+ background-position: 0px -200px;
+}
+
+/* SelectionList option element in multi selection mode, checked diabled state */
+.SelectionListOptionMultiCheckedDisabled {
+ background-position: 0px -250px;
+}
+
+/* SelectionList option text */
+.SelectionListOptionText {
+
+}
+
+/* SelectionList option text in normal state */
+.SelectionListOptionTextNormal {
+
+}
+
+/* SelectionList option text in focus state */
+.SelectionListOptionTextFocus {
+ color: rgb(255,255,255);
+}
+
+/* SelectionList option text in hover state */
+.SelectionListOptionTextHover {
+
+}
+
+/* SelectionList option text in disabled state */
+.SelectionListOptionTextDisabled {
+ color: rgb(185,185,185);
+}
+
+
+/******************************************************************************/
+/* Scrollbar */
+
+/* Scrollbar root element */
+.Scrollbar {
+ position: absolute;
+ height: 100%;
+ width: 7px;
+}
+
+/* Top portion of scrollbar track */
+.ScrollbarTrackTop {
+ position: absolute;
+ background: url("ScrollbarTrackTop.png") no-repeat;
+ width: 7px;
+ height: 4px;
+}
+
+/* Middle portion of scrollbar track */
+.ScrollbarTrackMiddle {
+ position: absolute;
+ background: url("ScrollbarTrackMiddle.png") repeat-y;
+ width: 7px;
+}
+
+/* Bottom portion of scrollbar track */
+.ScrollbarTrackBottom {
+ position: absolute;
+ background: url("ScrollbarTrackBottom.png") no-repeat;
+ width: 7px;
+ height: 4px;
+}
+
+/* Top portion of scrollbar thumb */
+.ScrollbarThumbTop {
+ position: absolute;
+ background: url("ScrollbarThumbTop.png") no-repeat;
+ width: 7px;
+ height: 5px;
+}
+
+/* Middle portion of scrollbar thumb */
+.ScrollbarThumbMiddle {
+ position: absolute;
+ background: url("ScrollbarThumbMiddle.png") repeat-y;
+ width: 7px;
+}
+
+/* Bottom portion of scrollbar thumb */
+.ScrollbarThumbBottom {
+ position: absolute;
+ background: url("ScrollbarThumbBottom.png") no-repeat;
+ width: 7px;
+ height: 5px;
+}
+
+
+/******************************************************************************/
+/* NotificationPopup */
+
+/* Container that defines the area for the popup dialog */
+.NotificationPopupContainer {
+ position: fixed;
+ bottom: 0px;
+ left: 50%;
+ margin-left: -115px;
+ width: 230px;
+ height: 85px;
+}
+
+/* Notification popup dialog */
+.NotificationPopup {
+ position: absolute;
+ width: 230px;
+ height: 85px;
+ background: url("NotificationPopupBackground.png") repeat-x;
+ border: 1px solid rgb(255,255,255);
+}
+
+/* Notification type indicator */
+.NotificationPopupTypeIndicator {
+ position: absolute;
+ left: 195px;
+ top: 10px;
+ width: 24px;
+ height: 34px;
+ background: url("NotificationPopupTypeIndicator.png") no-repeat;
+}
+
+/* Notification type indicator for notifications of undefined type */
+.NotificationPopupTypeIndicatorNone {
+ background-position: 0px 0px;
+}
+
+/* Notification type indicator for info notifications */
+.NotificationPopupTypeIndicatorInfo {
+ background-position: 0px -50px;
+}
+
+/* Notification type indicator for warning notifications */
+.NotificationPopupTypeIndicatorWarning {
+ background-position: 0px -100px;
+}
+
+/* Notification type indicator for wait notifications */
+.NotificationPopupTypeIndicatorWait {
+ background-position: 0px -150px;
+}
+
+/* Notification text area */
+.NotificationPopupText {
+ position: absolute;
+ left: 10px;
+ top: 8px;
+ width: 180px;
+ height: 50px;
+}
+
+/* Progress bar */
+.NotificationPopupProgressBar {
+ position: absolute;
+ left: 6px;
+ top: 60px;
+ width: 218px;
+ height: 16px;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/ActionControl.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,144 @@
+/*
+ Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (Nokia) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokias copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// The ActionControl class is an abstract base class for action controls like
+// buttons. Don't use ActionControl directly.
+
+// Constructor.
+function ActionControl(id, caption) {
+ if (id != UI_NO_INIT_ID) {
+ this.init(id, caption);
+ }
+}
+
+// ActionControl inherits from Control.
+ActionControl.prototype = new Control(UI_NO_INIT_ID);
+
+// Reference to the button element.
+ActionControl.prototype.buttonElement = null;
+
+// Reference to the link element.
+ActionControl.prototype.linkElement = null;
+
+// Enabled status.
+ActionControl.prototype.enabled = false;
+
+// Initializer - called from constructor.
+ActionControl.prototype.init = function(id, caption) {
+ uiLogger.debug("ActionControl.init(" + id + ", " + caption + ")");
+
+ // call superclass initializer
+ Control.prototype.init.call(this, id, caption);
+
+ // the control defaults to enabled
+ this.enabled = true;
+}
+
+// Common event listeners hookup function called from subclasses.
+ActionControl.prototype.bindActionControlListeners = function() {
+ var self = this;
+ this.linkElement.addEventListener("focus", function() { self.focusStateChanged(true); }, false);
+ this.linkElement.addEventListener("blur", function() { self.focusStateChanged(false); }, false);
+ this.buttonElement.addEventListener("mouseover", function() { self.hoverStateChanged(true); }, false);
+ this.buttonElement.addEventListener("mouseout", function() { self.hoverStateChanged(false); }, false);
+ this.buttonElement.addEventListener("mousedown", function(event) {
+ self.controlClicked(event);
+ event.stopPropagation();
+ event.preventDefault();
+ }, true);
+ this.buttonElement.addEventListener("keydown", function(event) {
+ // center and enter trigger the action
+ if (event.keyCode == 0 || event.keyCode == 13) {
+ self.controlClicked();
+ event.stopPropagation();
+ event.preventDefault();
+ }
+ }, true);
+}
+
+// Returns the enabled state.
+ActionControl.prototype.isEnabled = function() {
+ return this.enabled;
+}
+
+// Sets the enabled state.
+ActionControl.prototype.setEnabled = function(enabled) {
+ uiLogger.debug("ActionControl.setEnabled(" + enabled + ")");
+ // switch the state
+ this.enabled = enabled;
+}
+
+// Sets the focused state for the control.
+// Note: This may not always succeed.
+ActionControl.prototype.setFocused = function(focused) {
+ uiLogger.debug("ActionControl.setFocused(" + focused + ")");
+ if (this.enabled) {
+ if (focused) {
+ this.linkElement.focus();
+ } else {
+ this.linkElement.blur();
+ }
+ }
+}
+
+// Callback for clicks.
+ActionControl.prototype.controlClicked = function(event) {
+ uiLogger.debug("ActionControl.controlClicked()");
+
+ // if we're enabled then a click results in an action performed event
+ if (this.enabled) {
+ // focus when clicked
+ if (!this.focused) {
+ this.linkElement.focus();
+ }
+
+ // notify event listeners
+ this.actionPerformed(event);
+ }
+}
+
+// Callback for action performed events.
+ActionControl.prototype.actionPerformed = function(event) {
+ uiLogger.debug("ActionControl.actionPerformed()");
+ // notify event listeners
+ this.fireEvent(this.createEvent("ActionPerformed", event));
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/Ajax.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,103 @@
+/*
+� Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (�Nokia�) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokia�s copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// Ajax utility calss to create XmlHttpRequest object
+function Ajax()
+{
+ // xmlHttpRequest object
+ var request = null;
+
+ // branch for native XMLHttpRequest object
+ if(window.XMLHttpRequest && !(window.ActiveXObject)) {
+ try
+ {
+ request = new XMLHttpRequest();
+ try
+ {
+ // attach the Bypass code, if the browser is firefox
+ if(netscape.security.PrivilegeManager.enablePrivilege)
+ {
+ // duplicate the function
+ request._open = request.open;
+
+ // redefine the function definition
+ request.open = function(method, url, flag)
+ {
+ try
+ {
+ // Enable Universal Browser Read
+ netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
+
+ // call the native XmlHttpRequest.open method
+ this._open(method, url, flag);
+ }catch(e)
+ {
+ // call the native XmlHttpRequest.open method
+ this._open(method, url, flag);
+ }
+ }
+ }
+ }
+ catch(e)
+ {
+ // eatup all exceptions
+ }
+ }
+ catch(e) {
+ request = null;
+ }
+ // branch for IE/Windows ActiveX version
+ } else if(window.ActiveXObject) {
+ try {
+ request = new ActiveXObject("Msxml2.XMLHTTP");
+ } catch(e) {
+ try {
+ request = new ActiveXObject("Microsoft.XMLHTTP");
+ } catch(e) {
+ alert('Failed to create XmlHttprequest');
+ return null;
+ }
+ }
+ }
+
+ return (request);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/ContentPanel.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,368 @@
+/*
+� Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (�Nokia�) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokia�s copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// The ContentPanel class is a control for displaying content. The panel
+// can be expanded and collapsed.
+
+// Constructor.
+function ContentPanel(id, caption, content, foldable, expanded) {
+ if (id != UI_NO_INIT_ID) {
+ this.init(id, caption, content, foldable, expanded);
+ }
+}
+
+// ContentPanel inherits from Control.
+ContentPanel.prototype = new Control(UI_NO_INIT_ID);
+
+// The element hierarchy in a content panel is as follows:
+//
+// rootElement
+// assemblyElement
+// captionElement
+// foldToggleElement
+// captionLinkElement
+// captionTextElement
+// contentElement
+//
+// captionTextElement is moved under foldToggleElement if disabled
+// or captionElement if not foldable
+
+// The fold toggle element used for folding content panels.
+ContentPanel.prototype.foldToggleElement = null;
+
+// The caption link element of this control.
+ContentPanel.prototype.captionLinkElement = null;
+
+// The caption text element of this control.
+ContentPanel.prototype.captionTextElement = null;
+
+// The content element of this control.
+ContentPanel.prototype.contentElement = null;
+
+// The foldable state of this control.
+ContentPanel.prototype.foldable = false;
+
+// The expanded state of this control.
+ContentPanel.prototype.expanded = false;
+
+// Enabled status.
+ContentPanel.prototype.enabled = false;
+
+// Initializer - called from constructor.
+ContentPanel.prototype.init = function(id, caption, content, foldable, expanded) {
+ uiLogger.debug("ContentPanel.init(" + id + ", " + caption + ", " + content + ", " + foldable + ", " + expanded + ")");
+
+ // call superclass initializer
+ Control.prototype.init.call(this, id, caption);
+
+ // the control defaults to enabled
+ this.enabled = true;
+
+ // create caption text element
+ this.captionTextElement = document.createElement("span");
+
+ // disconnect the control element
+ this.assemblyElement.removeChild(this.controlElement);
+
+ // set the foldable state
+ this.foldable = foldable;
+
+ // is this a foldable content panel?
+ if (foldable) {
+ // create fold toggle element
+ this.foldToggleElement = document.createElement("div");
+ this.captionElement.appendChild(this.foldToggleElement);
+
+ // create caption link and add to caption element
+ this.captionLinkElement = document.createElement("a");
+ this.captionLinkElement.href = "JavaScript:void(0)";
+ this.foldToggleElement.appendChild(this.captionLinkElement);
+
+ // add the text element to the link element
+ this.captionLinkElement.appendChild(this.captionTextElement);
+
+ // bind event listeners
+ var self = this;
+ this.captionLinkElement.addEventListener("focus", function() { self.focusStateChanged(true); }, false);
+ this.captionLinkElement.addEventListener("blur", function() { self.focusStateChanged(false); }, false);
+ this.foldToggleElement.addEventListener("mouseover", function() { self.hoverStateChanged(true); }, false);
+ this.foldToggleElement.addEventListener("mouseout", function() { self.hoverStateChanged(false); }, false);
+ this.foldToggleElement.addEventListener("mousedown", function(event) {
+ self.captionClicked();
+ event.stopPropagation();
+ event.preventDefault();
+ }, true);
+ this.foldToggleElement.addEventListener("keydown", function(event) {
+ // center and enter trigger the action
+ if (event.keyCode == 0 || event.keyCode == 13) {
+ self.captionClicked();
+ event.stopPropagation();
+ event.preventDefault();
+ }
+ }, true);
+
+ this.expanded = expanded;
+ } else {
+ // since this is not a foldable panel the content should be expanded
+ this.expanded = true;
+
+ // add the text element directly to the caption element
+ this.captionElement.appendChild(this.captionTextElement);
+ }
+
+ // create content element
+ this.contentElement = document.createElement("div");
+ this.contentElement.style.display = this.expanded ? "block" : "none";
+ this.rootElement.appendChild(this.contentElement);
+
+ // set caption, content and expanded state
+ this.setCaption(caption);
+ this.setContent(content);
+
+ // update style
+ this.updateStyleFromState();
+}
+
+// Returns the enabled state.
+ContentPanel.prototype.isEnabled = function() {
+ return this.enabled;
+}
+
+// Sets the enabled state.
+ContentPanel.prototype.setEnabled = function(enabled) {
+ uiLogger.debug("ContentPanel.setEnabled(" + enabled + ")");
+
+ // bail out early if there is no change in state
+ if (this.enabled == enabled) {
+ return;
+ }
+
+ // set the enabled state
+ this.enabled = enabled;
+
+ // is this a foldable content?
+ if (this.foldable) {
+ // the caption link must be disabled
+ if (this.enabled) {
+ // diabled -> enabled
+ this.foldToggleElement.removeChild(this.captionTextElement);
+ this.foldToggleElement.appendChild(this.captionLinkElement);
+ this.captionLinkElement.appendChild(this.captionTextElement);
+ } else {
+ // enabled -> diabled
+ this.captionLinkElement.removeChild(this.captionTextElement);
+ this.foldToggleElement.removeChild(this.captionLinkElement);
+ this.foldToggleElement.appendChild(this.captionTextElement);
+ }
+ }
+
+ // update style
+ this.updateStyleFromState();
+}
+
+// Returns the caption; null if none.
+ContentPanel.prototype.getCaption = function() {
+ return this.caption;
+}
+
+// Sets the caption; null if none.
+ContentPanel.prototype.setCaption = function(caption) {
+ // bail out if the caption text element has not been created
+ // this is to prevent the superclass init calling this before
+ // we've initialized our custom caption
+ if (this.captionTextElement == null)
+ return;
+
+ uiLogger.debug("ContentPanel.setCaption(" + caption + ")");
+
+ // set the display style
+ this.captionElement.style.display = (caption == null) ? "none" : "block";
+
+ // set the caption
+ this.caption = caption;
+ this.captionTextElement.innerHTML = (caption == null) ? "" : caption;
+
+ // update style
+ this.updateStyleFromState();
+}
+
+// Returns the content.
+ContentPanel.prototype.getContent = function() {
+ return this.contentElement.innerHTML;
+}
+
+// Sets the content.
+ContentPanel.prototype.setContent = function(content) {
+ uiLogger.debug("ContentPanel.setContent(" + content + ")");
+ this.contentElement.innerHTML = (content == null) ? "" : content;
+}
+
+// Returns the focusable state for the control.
+ContentPanel.prototype.isFocusable = function() {
+ // a content panel is focusable if it's foldable and enabled
+ return (this.foldable && this.enabled);
+}
+
+// Sets the focused state for the control.
+// Note: This may not always succeed.
+ContentPanel.prototype.setFocused = function(focused) {
+ uiLogger.debug("ContentPanel.setFocused(" + focused + ")");
+ if (this.enabled && this.foldable) {
+ if (focused) {
+ this.captionLinkElement.focus();
+ } else {
+ this.captionLinkElement.blur();
+ }
+ }
+ // note that this.focused gets set as a result of focusStateChanged() being called
+ // rather than setting it explicitly here
+}
+
+// Returns the expanded state.
+ContentPanel.prototype.isExpanded = function() {
+ return this.expanded;
+}
+
+// Sets the expanded state.
+ContentPanel.prototype.setExpanded = function(expanded) {
+ uiLogger.debug("ContentPanel.setExpanded(" + expanded + ")");
+
+ // make sure only foldable content panels are folded
+ if (!this.foldable) {
+ uiLogger.warn("Cannot fold a non-foldable content panel!");
+ return;
+ }
+
+ this.expanded = expanded;
+ if (this.expanded) {
+ // expand
+ this.contentElement.style.display = "block";
+
+ // find out control top and bottom
+ var controlTop = this.getAbsoluteTop(this.rootElement);
+ var controlHeight = this.rootElement.clientHeight;
+ var controlBottom = controlTop + controlHeight;
+
+ // find out the viewport top and bottom
+ var viewportTop = window.scrollY;
+ var viewportHeight = window.innerHeight;
+ var viewportBottom = viewportTop + viewportHeight;
+
+ // make sure the control is positioned so that it can be seen
+ var overflow = controlBottom - viewportBottom;
+ if (overflow > 0) {
+ // there's overflow so we need to scroll to get the control
+ // into the viewport - however not so far that the control
+ // goes past the viewport top.
+ var distanceToTop = controlTop - viewportTop;
+ var scrollAmount = Math.min(overflow, distanceToTop);
+ window.scrollBy(0, scrollAmount);
+ }
+ } else {
+ // collapse
+ this.contentElement.style.display = "none";
+ }
+
+ // notify event listeners
+ this.fireEvent(this.createEvent("ExpandedStateChanged", this.expanded));
+
+ // update the style
+ this.updateStyleFromState();
+}
+
+// Returns the absolute position (y) of the given element.
+ContentPanel.prototype.getAbsoluteTop = function(element) {
+ // traverse from element to root and add top-offset
+ // for each element we find on the way
+ var absTop = 0;
+ while (element != null) {
+ absTop += element.offsetTop;
+ element = element.offsetParent;
+ }
+ return absTop;
+}
+
+// Callback for when the caption is clicked.
+ContentPanel.prototype.captionClicked = function() {
+ uiLogger.debug("ContentPanel.captionClicked()");
+
+ // if we're enabled then a click results toggling the expanded state
+ if (this.enabled) {
+ // focus when clicked
+ if (!this.focused) {
+ this.captionLinkElement.focus();
+ }
+
+ // toggle the expanded state
+ this.setExpanded(!this.expanded);
+ }
+}
+
+// Updates the style of the control to reflects the state of the control.
+ContentPanel.prototype.updateStyleFromState = function() {
+ uiLogger.debug("ContentPanel.updateStyleFromState()");
+
+ // determine the state name
+ var stateName = this.getStyleStateName();
+
+ // set root element class name
+ this.setClassName(this.rootElement, "Control");
+
+ // set the control assembly class names
+ this.setClassName(this.assemblyElement, "ControlAssembly ControlAssembly" + stateName);
+
+ if (this.foldable) {
+ // foldable content panel
+ this.setClassName(this.captionElement, "ContentPanelCaptionFoldable");
+ this.setClassName(this.foldToggleElement, "ContentPanelFoldToggle ContentPanelFoldToggle" + (this.expanded ? "Expanded" : "Collapsed"));
+ } else {
+ // non-folding
+ this.setClassName(this.captionElement, "ContentPanelCaptionNonFoldable");
+ }
+
+ // set the content caption text class names
+ this.setClassName(this.captionTextElement, "ContentPanelCaptionText ContentPanelCaptionText" + stateName);
+
+ // set the content element class names
+ this.setClassName(this.contentElement, "ContentPanelContent");
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/Control.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,231 @@
+/*
+ Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (Nokia) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokias copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// The Control class is an abstract base class for all user interface controls.
+
+// Constructor.
+function Control(id, caption) {
+ if (id != UI_NO_INIT_ID) {
+ this.init(id, caption);
+ }
+}
+
+// Control inherits from UIElement.
+Control.prototype = new UIElement(UI_NO_INIT_ID);
+
+// The view that control belongs to.
+Control.prototype.view = null;
+
+// Is the control focused?
+Control.prototype.focused = false;
+
+// Is the pointer over this control?
+Control.prototype.hovering = false;
+
+// The element hierarchy in a control is as follows:
+//
+// rootElement
+// assemblyElement
+// captionElement
+// controlElement
+//
+// The assembly element groups the portion of a control that typically handle
+// the visual effects for focus and hover states. Having a separate root and
+// assembly elements allows other elements to be added to a control without
+// them being affected by the CSS rules of the assembly element.
+
+// The assembly element of this control.
+Control.prototype.assemblyElement = null;
+
+// The caption of this control; null if none.
+Control.prototype.caption = null;
+
+// The caption element of this control.
+Control.prototype.captionElement = null;
+
+// The control element of this control.
+Control.prototype.controlElement = null;
+
+// Initializer - called from constructor.
+Control.prototype.init = function(id, caption) {
+ uiLogger.debug("Control.init(" + id + ", " + caption + ")");
+
+ // call superclass initializer
+ UIElement.prototype.init.call(this, id);
+
+ // create assembly, caption and control elements
+ this.assemblyElement = document.createElement("div");
+ this.captionElement = document.createElement("div");
+ this.assemblyElement.appendChild(this.captionElement);
+ this.controlElement = document.createElement("div");
+ this.assemblyElement.appendChild(this.controlElement);
+ this.rootElement.appendChild(this.assemblyElement);
+
+ // set the caption
+ // style is not updated because the subclass will update the style later
+ // when it has completely initialized the component
+ this.setCaption(caption, true);
+}
+
+// Returns the caption; null if none.
+Control.prototype.getCaption = function() {
+ return this.caption;
+}
+
+// Sets the caption; null if none.
+Control.prototype.setCaption = function(caption, noStyleUpdate) {
+ uiLogger.debug("Control.setCaption(" + caption + ")");
+
+ // set the display style
+ this.captionElement.style.display = (caption == null) ? "none" : "block";
+
+ // set the caption
+ this.caption = caption;
+ this.captionElement.innerHTML = (caption == null) ? "" : caption;
+
+ // update style
+ if (!noStyleUpdate) {
+ this.updateStyleFromState();
+ }
+}
+
+// Returns the enabled state.
+// Override this in subclasses as required to implement the state change.
+Control.prototype.isEnabled = function() {
+ return false;
+}
+
+// Sets the enabled state.
+// Override this in subclasses as required to implement the state change.
+Control.prototype.setEnabled = function(enabled) {
+ uiLogger.debug("Control.setEnabled(" + enabled + ")");
+}
+
+// Returns the focusable state for the control.
+// Defaults focusable if enabled - override this in subclasses as required.
+Control.prototype.isFocusable = function() {
+ return this.isEnabled();
+}
+
+// Returns the focused state for the control.
+Control.prototype.isFocused = function() {
+ return this.focused;
+}
+
+// Sets the focused state for the control.
+// Note: This may not always succeed.
+// Override this in subclasses as required to implement the state change.
+Control.prototype.setFocused = function(focused) {
+ uiLogger.debug("Control.setFocused(" + focused + ")");
+ // note that this.focused gets set as a result of focusStateChanged() being called
+ // rather than setting it explicitly here
+}
+
+// Called when the focus state has changed for this control.
+Control.prototype.focusStateChanged = function(focused) {
+ uiLogger.debug("Control.focusStateChanged(" + focused + ")");
+ if (this.focused != focused) {
+ this.focused = focused;
+
+ // let the view know about the focus change
+ if (this.view != null) {
+ this.view.focusedControlChanged(focused ? this : null);
+ }
+
+ // update the style from the current state
+ this.updateStyleFromState();
+
+ // notify event listeners
+ this.fireEvent(this.createEvent("FocusStateChanged", focused));
+ }
+}
+
+// Called when the hover state has changed for this control.
+Control.prototype.hoverStateChanged = function(hovering) {
+ uiLogger.debug("Control.hoverStateChanged(" + hovering + ")");
+ if (this.hovering != hovering) {
+ this.hovering = hovering;
+
+ // update the style from the current state
+ this.updateStyleFromState();
+
+ // notify event listeners
+ this.fireEvent(this.createEvent("HoverStateChanged", hovering));
+ }
+}
+
+// Helper method that returns the state name for the current state.
+Control.prototype.getStyleStateName = function() {
+ var focusable = this.isFocusable();
+ if (focusable && this.focused) {
+ return "Focus";
+ } else if (focusable && this.hovering) {
+ return "Hover";
+ } else if (!this.isEnabled()) {
+ return "Disabled";
+ } else {
+ return "Normal";
+ }
+}
+
+// Resets the state tracking for focus and hover.
+// Override this in subclasses as required to implement the state reset.
+Control.prototype.resetFocusState = function() {
+ uiLogger.debug("Control.resetFocusState()");
+ this.hovering = false;
+ this.focused = false;
+ this.updateStyleFromState();
+}
+
+// Helper function that sets a classname for an element.
+// Only sets the class name if it actually is different from the current value.
+Control.prototype.setClassName = function(element, className) {
+ if (element.className != className) {
+ element.className = className;
+ }
+}
+
+// Updates the style of the control to reflects the state of the control.
+// Override this in subclasses as required to implement the state change.
+Control.prototype.updateStyleFromState = function() {
+ uiLogger.debug("Control.updateStyleFromState()");
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/FormButton.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,177 @@
+/*
+ Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (Nokia) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokias copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// The FormButton class implements a button control for use in form-style UIs.
+
+// Constructor.
+function FormButton(id, text) {
+ if (id != UI_NO_INIT_ID) {
+ this.init(id, text);
+ }
+}
+
+// FormButton inherits from ActionControl.
+FormButton.prototype = new ActionControl(UI_NO_INIT_ID);
+
+// Button table element.
+FormButton.prototype.tableElement = null;
+
+// Button table row element.
+FormButton.prototype.tableRowElement = null;
+
+// Button table left cell element.
+FormButton.prototype.tableLeftCellElement = null;
+
+// Button table center cell element.
+FormButton.prototype.tableCenterCellElement = null;
+
+// Button text element.
+FormButton.prototype.textElement = null;
+
+// Button table right cell element.
+FormButton.prototype.tableRightCellElement = null;
+
+// Initializer - called from constructor.
+FormButton.prototype.init = function(id, text) {
+ uiLogger.debug("FormButton.init(" + id + ", " + text + ")");
+
+ // call superclass initializer
+ ActionControl.prototype.init.call(this, id, null);
+
+ // remove caption element
+ this.assemblyElement.removeChild(this.captionElement);
+
+ // construct the button
+ this.buttonElement = document.createElement("div");
+ this.tableElement = document.createElement("table");
+ this.tableRowElement = document.createElement("tr");
+ this.tableLeftCellElement = document.createElement("td");
+ this.tableCenterCellElement = document.createElement("td");
+ this.linkElement = document.createElement("a");
+ this.linkElement.href = "JavaScript:void(0)";
+ this.textElement = document.createElement("span");
+ this.tableRightCellElement = document.createElement("td");
+ this.tableElement.appendChild(this.tableRowElement);
+ this.tableRowElement.appendChild(this.tableLeftCellElement);
+ this.tableRowElement.appendChild(this.tableCenterCellElement);
+ this.tableCenterCellElement.appendChild(this.linkElement);
+ this.linkElement.appendChild(this.textElement);
+ this.tableRowElement.appendChild(this.tableRightCellElement);
+ this.buttonElement.appendChild(this.tableElement);
+ this.controlElement.appendChild(this.buttonElement);
+
+ // set the text
+ this.setText(text);
+
+ // bind event listeners
+ this.bindActionControlListeners();
+
+ // update the style
+ this.updateStyleFromState();
+}
+
+// Sets the enabled state.
+FormButton.prototype.setEnabled = function(enabled) {
+ uiLogger.debug("FormButton.setEnabled(" + enabled + ")");
+
+ // bail out early if there is no change in state
+ if (this.enabled == enabled) {
+ return;
+ }
+
+ // set the enabled state
+ this.enabled = enabled;
+
+ if (this.enabled) {
+ // diabled -> enabled
+ this.tableCenterCellElement.removeChild(this.textElement);
+ this.tableCenterCellElement.appendChild(this.linkElement);
+ this.linkElement.appendChild(this.textElement);
+ } else {
+ // enabled -> diabled
+ this.linkElement.removeChild(this.textElement);
+ this.tableCenterCellElement.removeChild(this.linkElement);
+ this.tableCenterCellElement.appendChild(this.textElement);
+ }
+
+ // update the style
+ this.updateStyleFromState();
+}
+
+// Returns the button text.
+FormButton.prototype.getText = function() {
+ return this.textElement.innerHTML;
+}
+
+// Sets the button text.
+FormButton.prototype.setText = function(text) {
+ uiLogger.debug("FormButton.setText(" + text + ")");
+ this.textElement.innerHTML = (text == null) ? "" : text;;
+}
+
+// Updates the style of the control to reflects the state of the control.
+FormButton.prototype.updateStyleFromState = function() {
+ uiLogger.debug("FormButton.updateStyleFromState()");
+
+ // determine the state name
+ var stateName = this.getStyleStateName();
+
+ // set root element class name
+ this.setClassName(this.rootElement, "Control");
+
+ // set the control assembly class names
+ this.setClassName(this.assemblyElement, "ControlAssembly ControlAssemblyNormal");
+
+ // control element
+ this.setClassName(this.controlElement, "ControlElement FormButtonControlElement");
+
+ // set the button table class names
+ this.setClassName(this.buttonElement, "FormButton");
+ this.setClassName(this.tableElement, "FormButtonTable");
+ this.setClassName(this.tableRowElement, "FormButtonRow");
+ this.setClassName(this.tableLeftCellElement, "FormButtonLeftCell FormButtonLeftCell" + stateName);
+ this.setClassName(this.tableCenterCellElement, "FormButtonCenterCell FormButtonLeftCell" + stateName);
+ this.setClassName(this.tableRightCellElement, "FormButtonRightCell FormButtonLeftCell" + stateName);
+
+ // set the button text class name
+ this.setClassName(this.textElement, "FormButtonText FormButtonText" + stateName);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/ImageLabel.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,94 @@
+// ////////////////////////////////////////////////////////////////////////////
+// Symbian Foundation Example Code
+//
+// This software is in the public domain. No copyright is claimed, and you
+// may use it for any purpose without license from the Symbian Foundation.
+// No warranty for any purpose is expressed or implied by the authors or
+// the Symbian Foundation.
+// ////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+// The ImageLabel class implements a control that displays an image
+
+// Constructor.
+function ImageLabel(id, caption, image) {
+ if (id != UI_NO_INIT_ID) {
+ this.init(id, caption, image);
+ }
+}
+
+// Label inherits from Control.
+ImageLabel.prototype = new Control(UI_NO_INIT_ID);
+
+// Content element for the ImageLabel
+ImageLabel.prototype.contentElement = null;
+
+// DOM element for image
+ImageLabel.prototype.image = null;
+
+// DOM element for text
+ImageLabel.prototype.text = null;
+
+// Initializer - called from constructor.
+ImageLabel.prototype.init = function(id, caption, image) {
+ uiLogger.debug("ImageLabel.init(" + id + ", " + caption + ", " + image + ")");
+
+ // call superclass initializer
+ Control.prototype.init.call(this, id, null);
+
+ // create content element
+ this.contentElement = document.createElement("div");
+ this.controlElement.appendChild(this.contentElement);
+
+ this.image = image;
+ this.label = caption;
+ this.updateContentElement();
+}
+
+// Returns the enabled state for the control.
+ImageLabel.prototype.isEnabled = function() {
+ return true;
+}
+
+// Returns the focusable state for the control.
+ImageLabel.prototype.isFocusable = function() {
+ return false;
+}
+
+// Returns the button image (URL); null if none.
+ImageLabel.prototype.getImage = function() {
+ return image;
+}
+
+// Sets the button image (URL); null if none.
+ImageLabel.prototype.setImage = function(image) {
+ this.image = image;
+}
+
+// Sets the text
+ImageLabel.prototype.setLabel = function(text) {
+ this.label = label;
+}
+
+ImageLabel.prototype.updateContentElement = function(){
+ var buf = "";
+ if ( this.image != null ) {
+ buf += "<img src=" + this.image+" ALIGN=MIDDLE>";
+ }
+ if (this.label != null ) {
+ buf += this.label;
+ }
+ this.contentElement.innerHTML = buf;
+}
+
+// Updates the style of the control to reflects the state of the control.
+ImageLabel.prototype.updateStyleFromState = function() {
+ uiLogger.debug("Label.updateStyleFromState()");
+
+ // set element class names
+ this.setClassName(this.rootElement, "Control");
+ this.setClassName(this.assemblyElement, "ControlAssembly ControlAssemblyNormal");
+ this.setClassName(this.captionElement, "ControlCaption ControlCaptionNormal");
+ this.setClassName(this.controlElement, "ControlElement");
+ this.setClassName(this.contentElement, "ContentPanelCaptionText");
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/Label.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,105 @@
+/*
+� Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (�Nokia�) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokia�s copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// The Label class implements a control that displays textual content.
+
+// Constructor.
+function Label(id, caption, text) {
+ if (id != UI_NO_INIT_ID) {
+ this.init(id, caption, text);
+ }
+}
+
+// Label inherits from Control.
+Label.prototype = new Control(UI_NO_INIT_ID);
+
+// Content element for label text.
+Label.prototype.contentElement = null;
+
+// Initializer - called from constructor.
+Label.prototype.init = function(id, caption, text) {
+ uiLogger.debug("Label.init(" + id + ", " + caption + ", " + text + ")");
+
+ // call superclass initializer
+ Control.prototype.init.call(this, id, caption);
+
+ // create content element
+ this.contentElement = document.createElement("div");
+ this.controlElement.appendChild(this.contentElement);
+
+ // set the text
+ this.setText(text);
+}
+
+// Returns the enabled state for the control.
+Label.prototype.isEnabled = function() {
+ return true;
+}
+
+// Returns the focusable state for the control.
+Label.prototype.isFocusable = function() {
+ return false;
+}
+
+// Returns the control text.
+Label.prototype.getText = function() {
+ return this.contentElement.innerHTML;
+}
+
+// Sets the text for the control.
+Label.prototype.setText = function(text) {
+ uiLogger.debug("Label.setText(" + text + ")");
+ this.contentElement.innerHTML = (text == null) ? "" : text;
+ this.updateStyleFromState();
+}
+
+// Updates the style of the control to reflects the state of the control.
+Label.prototype.updateStyleFromState = function() {
+ uiLogger.debug("Label.updateStyleFromState()");
+
+ // set element class names
+ this.setClassName(this.rootElement, "Control");
+ this.setClassName(this.assemblyElement, "ControlAssembly ControlAssemblyNormal");
+ this.setClassName(this.captionElement, "ControlCaption ControlCaptionNormal");
+ this.setClassName(this.controlElement, "ControlElement");
+ this.setClassName(this.contentElement, "LabelText");
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/ListView.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,186 @@
+/*
+� Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (�Nokia�) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokia�s copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// The ListView class implements a vertical list view that hosts controls
+// as child components.
+
+// Constructor.
+function ListView(id, caption) {
+ if (id != UI_NO_INIT_ID) {
+ this.init(id, caption);
+ }
+}
+
+// ListView inherits from View.
+ListView.prototype = new View(UI_NO_INIT_ID);
+
+// The caption of this view; null if none.
+ListView.prototype.caption = null;
+
+// The caption element of this view.
+ListView.prototype.captionElement = null;
+
+// The caption text element of this view.
+ListView.prototype.captionTextElement = null;
+
+// Root HTML element for controls.
+ListView.prototype.listElement = null;
+
+// List of controls in the view.
+ListView.prototype.controls = null;
+
+// Initializer for ListView.
+ListView.prototype.init = function(id, caption) {
+ uiLogger.debug("ListView.init(" + id + ", " + caption + ")");
+
+ // call superclass initializer
+ View.prototype.init.call(this, id);
+
+ // init control array
+ this.controls = [];
+
+ // set style class name for root element
+ this.rootElement.className = "ListView";
+
+ // create caption and caption text elements
+ this.captionElement = document.createElement("div");
+ this.captionElement.className = "ListViewCaptionText";
+ this.rootElement.appendChild(this.captionElement);
+
+ // create root element for controls and add to the view root element
+ this.listElement = document.createElement("div");
+ this.listElement.className = "ListViewControlList";
+ this.rootElement.appendChild(this.listElement);
+
+ // set the caption
+ this.setCaption(caption);
+}
+
+// Returns the caption; null if none.
+ListView.prototype.getCaption = function() {
+ return this.caption;
+}
+
+// Sets the caption; null if none.
+ListView.prototype.setCaption = function(caption) {
+ uiLogger.debug("ListView.setCaption(" + caption + ")");
+
+ // set the display style
+ this.captionElement.style.display = (caption == null) ? "none" : "block";
+
+ // set the caption
+ this.caption = caption;
+ this.captionElement.innerHTML = (caption == null) ? "" : caption;
+}
+
+// Returns an array of controls in the view.
+ListView.prototype.getControls = function() {
+ return this.controls;
+}
+
+// Adds a control to the view.
+ListView.prototype.addControl = function(control) {
+ uiLogger.debug("ListView.addControl(" + control + ")");
+
+ // add the control to the controls array and attach it to the list element
+ this.controls.push(control);
+ this.listElement.appendChild(control.rootElement);
+ control.view = this;
+}
+
+// Inserts a control to the view before the specified control.
+ListView.prototype.insertControl = function(control, beforeControl) {
+ uiLogger.debug("ListView.insertControl(" + control + ", " + beforeControl + ")");
+
+ // iterate through current controls
+ for (var i = 0; i < this.controls.length; i++) {
+ // is this the control we should insert before?
+ if (this.controls[i] == beforeControl) {
+ // we found the control to insert before - insert here and connect to list element
+ this.controls.splice(i, 0, control);
+ this.listElement.insertBefore(control.rootElement, beforeControl.rootElement);
+ control.view = this;
+ return;
+ }
+ }
+
+ // the control wasn't found so we'll add it last
+ this.addControl(control);
+}
+
+// Removes a control from the view.
+ListView.prototype.removeControl = function(control) {
+ uiLogger.debug("ListView.removeControl(" + control + ")");
+
+ // iterate through current controls
+ for (var i = 0; i < this.controls.length; i++) {
+ // is this the control we should remove?
+ if (this.controls[i] == control) {
+ // we found the control to remove - remove it from the list element
+ this.controls.splice(i, 1);
+ this.listElement.removeChild(control.rootElement);
+ control.view = null;
+ }
+ }
+}
+
+// Attempts to focus the first focusable control.
+ListView.prototype.focusFirstControl = function() {
+ uiLogger.debug("ListView.focusFirstControl()");
+ for (var i = 0; i < this.controls.length; i++) {
+ // is this control focusable?
+ var control = this.controls[i];
+ if (control.isFocusable()) {
+ control.setFocused(true);
+ break;
+ }
+ }
+}
+
+// Attempts to reset all control focus states.
+// Override in subclasses as required.
+ListView.prototype.resetControlFocusStates = function() {
+ uiLogger.debug("ListView.resetControlFocusStates()");
+ for (var i = 0; i < this.controls.length; i++) {
+ this.controls[i].resetFocusState();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/NavigationButton.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,220 @@
+/*
+� Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (�Nokia�) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokia�s copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// The NavigationButton class implements a button control for use in
+// navigational contexts in menu-style UIs.
+
+// Constructor.
+function NavigationButton(id, image, text) {
+ if (id != UI_NO_INIT_ID) {
+ this.init(id, image, text);
+ }
+}
+
+// NavigationButton inherits from ActionControl.
+NavigationButton.prototype = new ActionControl(UI_NO_INIT_ID);
+
+// Button table element.
+NavigationButton.prototype.tableElement = null;
+
+// Button table row element.
+NavigationButton.prototype.tableRowElement = null;
+
+// Button table left cell element.
+NavigationButton.prototype.tableLeftCellElement = null;
+
+// Button table right cell element.
+NavigationButton.prototype.tableRightCellElement = null;
+
+// Button image element.
+NavigationButton.prototype.imageElement = null;
+
+// Button link element.
+NavigationButton.prototype.linkElement = null;
+
+// Button text element.
+NavigationButton.prototype.textElement = null;
+
+// Initializer - called from constructor.
+NavigationButton.prototype.init = function(id, image, text) {
+ uiLogger.debug("NavigationButton.init(" + id + ", " + image + ", " + text + ")");
+
+ // call superclass initializer
+ ActionControl.prototype.init.call(this, id, null);
+
+ // remove caption element
+ this.assemblyElement.removeChild(this.captionElement);
+
+ // construct the button
+ this.buttonElement = document.createElement("div");
+ this.tableElement = document.createElement("table");
+ this.tableRowElement = document.createElement("tr");
+ this.tableLeftCellElement = document.createElement("td");
+ this.tableRightCellElement = document.createElement("td");
+ this.imageElement = null;
+ this.linkElement = document.createElement("a");
+ this.linkElement.href = "JavaScript:void(0)";
+ this.textElement = document.createElement("span");
+ this.tableElement.appendChild(this.tableRowElement);
+ this.tableRowElement.appendChild(this.tableLeftCellElement);
+ this.tableRowElement.appendChild(this.tableRightCellElement);
+ this.tableRightCellElement.appendChild(this.linkElement);
+ this.linkElement.appendChild(this.textElement);
+ this.buttonElement.appendChild(this.tableElement);
+ this.controlElement.appendChild(this.buttonElement);
+
+ // set the image and text
+ this.setImage(image);
+ this.setText(text);
+
+ // bind event listeners
+ this.bindActionControlListeners();
+
+ // update the style
+ this.updateStyleFromState();
+}
+
+// Sets the enabled state.
+NavigationButton.prototype.setEnabled = function(enabled) {
+ uiLogger.debug("NavigationButton.setEnabled(" + enabled + ")");
+
+ // bail out early if there is no change in state
+ if (this.enabled == enabled) {
+ return;
+ }
+
+ // set the enabled state
+ this.enabled = enabled;
+
+ if (this.enabled) {
+ // diabled -> enabled
+ this.tableRightCellElement.removeChild(this.textElement);
+ this.tableRightCellElement.appendChild(this.linkElement);
+ this.linkElement.appendChild(this.textElement);
+ } else {
+ // enabled -> diabled
+ this.linkElement.removeChild(this.textElement);
+ this.tableRightCellElement.removeChild(this.linkElement);
+ this.tableRightCellElement.appendChild(this.textElement);
+ }
+
+ // update the style
+ this.updateStyleFromState();
+}
+
+// Returns the button image (URL); null if none.
+NavigationButton.prototype.getImage = function() {
+ return (this.imageElement != null) ? this.imageElement.src : null;
+}
+
+// Sets the button image (URL); null if none.
+NavigationButton.prototype.setImage = function(image) {
+ uiLogger.debug("NavigationButton.setImage(" + image + ")");
+
+ if (image == null) {
+ // remove image - if any
+ if (this.imageElement != null) {
+ this.tableLeftCellElement.removeChild(this.imageElement);
+ }
+ } else {
+ // default to not append image element
+ var append = false;
+
+ // create image element if one doesn't exist
+ if (this.imageElement == null) {
+ this.imageElement = document.createElement("img");
+ this.imageElement.setAttribute("alt", "");
+ append = true;
+ }
+
+ // set image source URL
+ this.imageElement.src = image;
+
+ // append the image element to the left cell?
+ if (append) {
+ this.tableLeftCellElement.appendChild(this.imageElement);
+ }
+ }
+}
+
+// Returns the button text.
+NavigationButton.prototype.getText = function() {
+ return this.textElement.innerHTML;
+}
+
+// Sets the button text.
+NavigationButton.prototype.setText = function(text) {
+ uiLogger.debug("NavigationButton.setText(" + text + ")");
+ this.textElement.innerHTML = (text == null) ? "" : text;;
+}
+
+// Updates the style of the control to reflects the state of the control.
+NavigationButton.prototype.updateStyleFromState = function() {
+ uiLogger.debug("NavigationButton.updateStyleFromState()");
+
+ // determine the state name
+ var stateName = this.getStyleStateName();
+
+ // set root element class name
+ this.setClassName(this.rootElement, "Control");
+
+ // set the control assembly class names
+ this.setClassName(this.assemblyElement, "ControlAssembly ControlAssembly" + stateName);
+
+ // control element
+ this.setClassName(this.controlElement, "ControlElement NavigationButtonControlElement");
+
+ // set the button table class names
+ this.setClassName(this.buttonElement, "NavigationButton");
+ this.setClassName(this.tableElement, "NavigationButtonTable");
+ this.setClassName(this.tableRowElement, "NavigationButtonRow");
+ this.setClassName(this.tableLeftCellElement, "NavigationButtonImageCell");
+ this.setClassName(this.tableRightCellElement, "NavigationButtonTextCell");
+
+ // set image class names
+ if (this.imageElement) {
+ this.setClassName(this.imageElement, "NavigationButtonImage");
+ }
+
+ // set the button text class name
+ this.setClassName(this.textElement, "NavigationButtonText NavigationButtonText" + stateName);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/NotificationPopup.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,321 @@
+/*
+� Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (�Nokia�) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokia�s copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// The NotificationPopup class handles the display of notifications such as
+// warnings, information messages and progress indication.
+
+// Constructor.
+function NotificationPopup() {
+ // create notification popup
+ this.containerElement = document.createElement("div");
+ this.containerElement.className = "NotificationPopupContainer";
+ this.popupElement = document.createElement("div");
+ this.popupElement.className = "NotificationPopup";
+ this.typeIndicatorElement = document.createElement("div");
+ this.typeIndicatorElement.className = "NotificationPopupTypeIndicator";
+ this.textElement = document.createElement("div");
+ this.textElement.className = "NotificationPopupText";
+ this.progressBarElement = document.createElement("div");
+ this.progressBarElement.className = "NotificationPopupProgressBar";
+
+ // assemble popup
+ this.popupElement.appendChild(this.typeIndicatorElement);
+ this.popupElement.appendChild(this.textElement);
+ this.popupElement.appendChild(this.progressBarElement);
+ this.containerElement.appendChild(this.popupElement);
+
+ // create progress bar image element and initialize it
+ this.progressBarImageElement = document.createElement("img");
+ var self = this;
+ this.progressBarImageElement.addEventListener("load", function() { self.progressBarImageLoadingCompleted(); }, false);
+ this.progressBarImageElement.setAttribute("alt", "");
+ this.progressBarImageURL = this.getProgressBarImage(this.PROGRESS_BAR_IMAGE_NONE);
+ this.progressBarImageElement.src = this.progressBarImageURL;
+ this.progressBarElement.appendChild(this.progressBarImageElement);
+
+ // init the popup to be fully down
+ this.popupElement.style.top = "100%";
+
+ // set default popup contents
+ this.setPopupContents(null, null, null);
+}
+
+// Notification container element.
+NotificationPopup.prototype.containerElement = null;
+
+// Notification popup element.
+NotificationPopup.prototype.popupElement = null;
+
+// Type indicator element.
+NotificationPopup.prototype.typeIndicatorElement = null;
+
+// Notification text element.
+NotificationPopup.prototype.textElement = null;
+
+// Progress bar element.
+NotificationPopup.prototype.progressBarElement = null;
+
+// Progress bar image element.
+NotificationPopup.prototype.progressBarImageElement = null;
+
+// Progress bar image URL.
+NotificationPopup.prototype.progressBarImageURL = null;
+
+// Has the progress bar image been loaded?
+NotificationPopup.prototype.progressBarImageLoaded = false;
+
+// Flag that tracks whether we're in the middle of starting to
+// show a notification popup.
+NotificationPopup.prototype.processingShowNotification = false;
+
+// Notification popup position (0 = hidden, 1 = showing).
+NotificationPopup.prototype.popupPosition = 0;
+
+// Interval for timer ticks (in milliseconds)
+NotificationPopup.prototype.ANIM_TIMER_INTERVAL = 25;
+
+// Animation timer identifier or null if no active timer.
+NotificationPopup.prototype.animTimerId = null;
+
+// Time in milliseconds for the popup animation to complete
+NotificationPopup.prototype.ANIM_TIME = 300;
+
+// Flag that determines the behavior of showNotification(). If set to true
+// the popup will snap open when showNotification() is called instead of
+// animation.
+NotificationPopup.prototype.SHOW_SNAPS_OPEN = true;
+
+// Animation direction (0 = no movement, -1 hiding, +1 = showing).
+NotificationPopup.prototype.animDir = 0;
+
+// Auto-hide timer identifier or null if no active timer.
+NotificationPopup.prototype.autoHideTimerId = null;
+
+// The commanded display time.
+NotificationPopup.prototype.displayTime = -1;
+
+NotificationPopup.prototype.PROGRESS_BAR_IMAGE_NONE = 0;
+
+// Displays a notification.
+NotificationPopup.prototype.showNotification = function(displayTime, type, text, progress) {
+ uiLogger.debug("NotificationPopup.showNotification(" + displayTime + ", " + type + ", " + text + ", " + progress + ")");
+
+ // mark that showNotification() has been called and that we are in
+ // the middle of starting to show the notification popup
+ this.processingShowNotification = true;
+
+ // remember the display time
+ this.displayTime = displayTime;
+
+ // attach the popup to the document if not attached
+ if (this.containerElement.parentNode == null) {
+ document.body.appendChild(this.containerElement);
+ uiLogger.debug("Notification popup attached to document");
+ }
+
+ // set popup contents and update style
+ this.setPopupContents(type, text, progress);
+
+ // if the progress image is loaded then we can complete the showing
+ // of the notification popup immediately - otherwise the image loaded
+ // allback will complete the process.
+ if (this.progressBarImageLoaded) {
+ this.completeShowNotification();
+ }
+}
+
+// Completes displaying of a notification.
+// Note: Used internally - don't call this directly.
+NotificationPopup.prototype.completeShowNotification = function() {
+ uiLogger.debug("NotificationPopup.completeShowNotification()");
+
+ // animation direction is +1 for showing the popup
+ if (this.popupPosition != 1) {
+ if (this.SHOW_SNAPS_OPEN) {
+ if (this.popupPosition == 0) {
+ this.popupPosition = 1;
+ }
+ }
+ this.animatePopup(1);
+ }
+
+ // setup auto hiding if a display time is specified
+ if (this.displayTime > 0) {
+ // stop any existing timer
+ if (this.autoHideTimerId != null) {
+ clearTimeout(this.autoHideTimerId);
+ uiLogger.debug("Auto hide timer stopped");
+ }
+ // set timer to hide notification
+ var self = this;
+ this.autoHideTimerId = setTimeout(function() {
+ if (self.displayTime > 0) {
+ self.hideNotification();
+ }
+ }, this.ANIM_TIME + this.displayTime);
+ uiLogger.debug("Auto hide timer started");
+ }
+
+ // mark us as no longer processing a show notification call
+ this.processingShowNotification = false;
+}
+
+// Hides the currently displayed notification.
+NotificationPopup.prototype.hideNotification = function() {
+ uiLogger.debug("NotificationPopup.hideNotification()");
+ // mark us as no longer processing a show notification call
+ this.processingShowNotification = false;
+
+ // animation direction is -1 for hiding the popup
+ if (this.popupPosition != 0) {
+ this.animatePopup(-1);
+ }
+
+ // stop auto hide timer if one is set
+ if (this.autoHideTimerId != null) {
+ clearTimeout(this.autoHideTimerId);
+ this.autoHideTimerId = null;
+ uiLogger.debug("Auto hide timer stopped");
+ }
+}
+
+// Starts animation of the popup (1 to show, -1 to hide).
+NotificationPopup.prototype.animatePopup = function(direction) {
+ uiLogger.debug("NotificationPopup.animatePopup(" + direction + ")");
+ // set the direction and star the animation timer
+ this.animDir = direction;
+ if (this.animTimerId == null) {
+ var self = this;
+ this.animTimerId = setInterval(function() { self.animate(); }, this.ANIM_TIMER_INTERVAL);
+ uiLogger.debug("Notification popup animation started");
+ }
+}
+
+// Callback for animation timer.
+NotificationPopup.prototype.animate = function() {
+ // calculate new popup position and clamp
+ var animStep = (this.ANIM_TIMER_INTERVAL / this.ANIM_TIME) * this.animDir;
+ var newPos = this.popupPosition + animStep;
+ if (newPos < 0) {
+ newPos = 0;
+ } else if (newPos > 1) {
+ newPos = 1;
+ }
+
+ // set the new position to the popup element
+ this.popupPosition = newPos;
+ this.popupElement.style.top = (100 - Math.round(this.popupPosition * 100)) + "%";
+
+ // have we reached the end of the animation?
+ if (newPos == 0 || newPos == 1) {
+ // reset animation direction
+ this.animDir = 0;
+
+ // remove the popup from the body if its hidden
+ if (newPos == 0) {
+ document.body.removeChild(this.containerElement);
+ uiLogger.debug("Notification popup detached from document");
+ }
+
+ // stop timer
+ clearTimeout(this.animTimerId);
+ this.animTimerId = null;
+ uiLogger.debug("Notification popup animation stopped");
+ }
+}
+
+// Returns a URL for the progress bar image to use for the specified progress.
+NotificationPopup.prototype.getProgressBarImage = function(progress) {
+ // path for progress bar images
+ var progressBarImagePath = "WRTKit/Resources/";
+
+ // unknown progress
+ return progressBarImagePath + "ProgressBarUnknown.gif";
+}
+
+// Sets the contents of the popup.
+NotificationPopup.prototype.setPopupContents = function(type, text, progress) {
+ uiLogger.debug("NotificationPopup.setPopupContents(" + type + ", " + text + ", " + progress + ")");
+
+ // figure out notification type style name
+ var typeName = (type == null) ? "none" : type.toLowerCase();
+ typeName = typeName.charAt(0).toUpperCase() + typeName.substring(1);
+
+ // set type element class names
+ this.typeIndicatorElement.className = "NotificationPopupTypeIndicator NotificationPopupTypeIndicator" + typeName;
+
+ // set notification text
+ this.textElement.innerHTML = (text == null) ? "" : text;
+
+ // set progress
+ this.progressBarElement.style.display = (progress == null) ? "none" : "block";
+ if (progress != null) {
+ var imgURL = this.getProgressBarImage(progress);
+ if (imgURL != this.progressBarImageURL) {
+ // load new image
+ this.progressBarImageLoaded = false;
+ this.progressBarImageURL = imgURL;
+ this.progressBarImageElement.src = imgURL;
+ } else {
+ // the correct image is already loaded
+ this.progressBarImageLoaded = true;
+ }
+ } else {
+ // there is no progress bar so there is no need
+ // to load any progress bar image
+ this.progressBarImageLoaded = true;
+ }
+}
+
+// Callback for notifying the object that its progress bar image completed loading.
+NotificationPopup.prototype.progressBarImageLoadingCompleted = function() {
+ uiLogger.debug("NotificationPopup.progressBarImageLoadingCompleted()");
+
+ // mark the progress bar image as loaded
+ this.progressBarImageLoaded = true;
+
+ // complete the process of displaying the notification popup
+ // if it has been commanded but not yet completed
+ if (this.processingShowNotification) {
+ this.completeShowNotification();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/OsconContentPanel.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,16 @@
+
+
+///////////////////////////////////////////////////////////////////////////////
+// The OsconContentPanel class is a control for displaying content.
+// The panel has a title bar and
+// can be expanded and collapsed.
+
+// Constructor.
+function OsconContentPanel(id, caption, content, foldable, expanded) {
+ if (id != UI_NO_INIT_ID) {
+ this.init(id, caption, content, foldable, expanded);
+ }
+}
+
+// ContentPanel inherits from Control.
+ContentPanel.prototype = new Control(UI_NO_INIT_ID);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/Scrollbar.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,173 @@
+/*
+ Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (Nokia) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokias copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// The Scrollbar class is an implementation of a user interface element that
+// indicates the current viewport position in a document.
+
+// Constructor.
+function Scrollbar(parentElement) {
+ uiLogger.debug("Scrollbar(" + parentElement + ")");
+
+ // get the parent element
+ this.parentElement = parentElement;
+
+ // create the root element
+ this.rootElement = document.createElement("div");
+ this.rootElement.className = "Scrollbar";
+ this.rootElement.style.visibility = "hidden";
+
+ // create the scrollbar
+ // the scrollbar consists of a root element with six children
+ // (three track elements and three thumb elements)
+
+ // track
+ this.trackTopElement = document.createElement("div");
+ this.trackTopElement.className = "ScrollbarTrackTop";
+ this.trackMiddleElement = document.createElement("div");
+ this.trackMiddleElement.className = "ScrollbarTrackMiddle";
+ this.trackBottomElement = document.createElement("div");
+ this.trackBottomElement.className = "ScrollbarTrackBottom";
+
+ // thumb
+ this.thumbTopElement = document.createElement("div");
+ this.thumbTopElement.className = "ScrollbarThumbTop";
+ this.thumbMiddleElement = document.createElement("div");
+ this.thumbMiddleElement.className = "ScrollbarThumbMiddle";
+ this.thumbBottomElement = document.createElement("div");
+ this.thumbBottomElement.className = "ScrollbarThumbBottom";
+
+ // assemble and attach the scrollbar
+ this.rootElement.appendChild(this.trackTopElement);
+ this.rootElement.appendChild(this.trackMiddleElement);
+ this.rootElement.appendChild(this.trackBottomElement);
+ this.rootElement.appendChild(this.thumbTopElement);
+ this.rootElement.appendChild(this.thumbMiddleElement);
+ this.rootElement.appendChild(this.thumbBottomElement);
+ this.parentElement.appendChild(this.rootElement);
+
+ // bring the scrollbar up to date
+ this.update(0, 100, 100);
+}
+
+// Parent element for the scrollbar.
+Scrollbar.prototype.parentElement = null;
+
+// Root HTML element in the scrollbar.
+Scrollbar.prototype.rootElement = null;
+
+// Scrollbar track top element.
+Scrollbar.prototype.trackTopElement = null;
+
+// Scrollbar track middle element.
+Scrollbar.prototype.trackMiddleElement = null;
+
+// Scrollbar track bottom element.
+Scrollbar.prototype.trackBottomElement = null;
+
+// Scrollbar thumb top element.
+Scrollbar.prototype.thumbTopElement = null;
+
+// Scrollbar thumb middle element.
+Scrollbar.prototype.thumbMiddleElement = null;
+
+// Scrollbar thumb bottom element.
+Scrollbar.prototype.thumbBottomElement = null;
+
+// Is the scrollbar needed?
+Scrollbar.prototype.scrollbarNeeded = false;
+
+// Updates the scrollbar.
+Scrollbar.prototype.update = function(scrollY, viewportHeight, documentHeight) {
+ // figure out current heights
+ var scrollbarHeight = this.rootElement.clientHeight;
+ var trackTopHeight = this.trackTopElement.clientHeight;
+ var trackBottomHeight = this.trackBottomElement.clientHeight;
+ var thumbTopHeight = this.thumbTopElement.clientHeight;
+ var thumbBottomHeight = this.thumbBottomElement.clientHeight;
+
+ // scrollable height is the larger of document and viewport heights
+ var scrollableHeight = documentHeight;
+ var scrollbarNeeded = true;
+ if (viewportHeight >= documentHeight) {
+ scrollableHeight = viewportHeight;
+ scrollbarNeeded = false;
+ }
+
+ // show or hide scrollbar?
+ if (scrollbarNeeded != this.scrollbarNeeded) {
+ this.scrollbarNeeded = scrollbarNeeded;
+ this.rootElement.style.visibility = scrollbarNeeded ? "visible" : "hidden";
+ }
+
+ // calculate thumb top position...
+ var thumbTopPct = scrollY / scrollableHeight;
+ var thumbTop = scrollbarHeight * thumbTopPct;
+ // ...and bottom position...
+ var thumbBottomPct = (scrollY + viewportHeight) / scrollableHeight;
+ var thumbBottom = scrollbarHeight * thumbBottomPct;
+
+ // ...and thumb height
+ var thumbHeight = thumbBottom - thumbTop;
+
+ // ensure that the thumb is not too small
+ var thumbMinHeight = thumbTopHeight + thumbBottomHeight;
+ if (thumbHeight < thumbMinHeight) {
+ var underflow = thumbMinHeight - thumbHeight;
+ // adjust thumb top pos assuming a shorter scrollbar track
+ var thumbMid = (scrollbarHeight - underflow) * ((thumbTopPct + thumbBottomPct) / 2) + (underflow / 2);
+ thumbTop = thumbMid - (thumbMinHeight / 2);
+ thumbBottom = thumbTop + thumbMinHeight;
+ thumbHeight = thumbBottom - thumbTop;
+ }
+
+ // position and size track element (add 1 to the middle section height for rounding errors)
+ this.trackTopElement.style.top = "0px";
+ this.trackMiddleElement.style.top = Math.round(trackTopHeight) + "px";
+ this.trackMiddleElement.style.height = Math.round(scrollbarHeight - trackTopHeight - trackBottomHeight + 1) + "px";
+ this.trackBottomElement.style.top = Math.round(scrollbarHeight - trackTopHeight) + "px";
+
+ // position and size thumb element (add 1 to the middle section height for rounding errors)
+ this.thumbTopElement.style.top = Math.round(thumbTop) + "px";
+ this.thumbMiddleElement.style.top = Math.round(thumbTop + thumbTopHeight) + "px";
+ this.thumbMiddleElement.style.height = Math.round(thumbHeight - thumbTopHeight - thumbBottomHeight + 1) + "px";
+ this.thumbBottomElement.style.top = Math.round(thumbBottom - thumbBottomHeight) + "px";
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/SelectionControl.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,189 @@
+/*
+ Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (Nokia) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokias copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// The SelectionControl class is an abstract base class for controls that lets
+// the user select one or more options from a list of options. Don't use
+// SelectionControl directly.
+
+// Constructor.
+function SelectionControl(id, caption, options, multipleSelection, selected) {
+ if (id != UI_NO_INIT_ID) {
+ this.init(id, caption, options, multipleSelection, selected);
+ }
+}
+
+// SelectionControl inherits from Control.
+SelectionControl.prototype = new Control(UI_NO_INIT_ID);
+
+// List of options.
+SelectionControl.prototype.options = null;
+
+// The single selected option in single selection controls
+// or list of options in multi selection controls.
+SelectionControl.prototype.selected = null;
+
+// Single or multiple selection.
+SelectionControl.prototype.multipleSelection = false;
+
+// Initializer - called from constructor.
+SelectionControl.prototype.init = function(id, caption, options, multipleSelection, selected) {
+ uiLogger.debug("SelectionControl.init(" + id + ", " + caption + ", " + options + ", " + multipleSelection + ", " + selected + ")");
+
+ // call superclass initializer
+ Control.prototype.init.call(this, id, caption);
+
+ // set the multiple selection property
+ this.multipleSelection = multipleSelection;
+
+ // init options and selected (makes copies of the original arrays)
+ this.options = (options != null) ? options.slice(0) : [];
+ if (multipleSelection) {
+ this.selected = (selected == null) ? [] : selected.slice(0);
+ } else {
+ this.selected = selected;
+ }
+ this.validateSelected();
+}
+
+// Returns true if the control is a multiple selection control; false if single.
+SelectionControl.prototype.isMultipleSelection = function() {
+ return this.multipleSelection;
+}
+
+// Returns true if the specified option is selected; false if not.
+SelectionControl.prototype.isSelected = function(option) {
+ if (this.multipleSelection) {
+ // multiple selection
+ // iterate through all selected options and look for the specified option
+ for (var i = 0; i < this.selected.length; i++) {
+ if (this.selected[i] == option) {
+ return true;
+ }
+ }
+ return false;
+ } else {
+ // single selection
+ return (this.selected == option);
+ }
+}
+
+// Returns the currently selected option in a single selection control or
+// an array of selected options in a multiple selection control. If there are
+// no selected options a single selection control returns null and a multiple
+// selection control returns an empty array.
+SelectionControl.prototype.getSelected = function() {
+ return this.multipleSelection ? this.selected.slice(0) : this.selected;
+}
+
+// Sets the currently selected options. Pass a single option in a single selection
+// control or an array of selected controls in a multiple selection control. To
+// deselect all options pass null in a single selection control and an empty array
+// in a multiple selection control.
+// Override in sublcasses to provide full implementation.
+SelectionControl.prototype.setSelected = function(selected) {
+ this.selected = this.multipleSelection ? selected.slice(0) : selected;
+ // make sure the selected option or options are legal
+ this.validateSelected();
+}
+
+// Ensures that the selected option or options exist among the options in this control.
+SelectionControl.prototype.validateSelected = function() {
+ if (this.multipleSelection) {
+ // multiple selection
+ // iterate through all selected options and ensure they exist among the options
+ for (var i = 0; i < this.selected.length; i++) {
+ // check that the selected option exists among the options
+ var found = false;
+ for (var j = 0; j < this.options.length; j++) {
+ if (this.options[j] == this.selected[i]) {
+ // found - stop looking for this option
+ found = true;
+ break;
+ }
+ }
+ // not found - remove this selected element
+ if (!found) {
+ this.selected.splice(i, 1);
+ // since we removed an entry we must re-check this position
+ i--;
+ }
+ }
+ } else {
+ // single selection
+ if (this.selected != null) {
+ // check that the selected option exists among the options
+ for (var i = 0; i < this.options.length; i++) {
+ if (this.options[i] == this.selected) {
+ // found - we're done
+ return;
+ }
+ }
+ // not found - remove the selection
+ this.selected = null;
+ }
+ }
+}
+
+// Returns the options in the control as an array of option objects with
+// a value and text property.
+SelectionControl.prototype.getOptions = function() {
+ return this.options;
+}
+
+// Sets the options in the control.
+// Override in sublcasses to provide full implementation.
+SelectionControl.prototype.setOptions = function(options) {
+ this.options = options.slice(0);
+ // make sure the selected option or options are legal
+ this.validateSelected();
+}
+
+// Returns the option that has the specified value; null if none.
+SelectionControl.prototype.getOptionForValue = function(value) {
+ // iterate through all options and look for a match
+ for (var i = 0; i < this.options.length; i++) {
+ if (this.options[i].value == value) {
+ return this.options[i];
+ }
+ }
+ return null;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/SelectionList.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,355 @@
+/*
+ Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (Nokia) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokias copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// The SelectionList class implements a single or multi selection control
+// that lets users select one or more options from a list of options.
+
+// Constructor.
+function SelectionList(id, caption, options, multipleSelection, selected) {
+ if (id != UI_NO_INIT_ID) {
+ this.init(id, caption, options, multipleSelection, selected);
+ }
+}
+
+// SelectionList inherits from SelectionControl.
+SelectionList.prototype = new SelectionControl(UI_NO_INIT_ID);
+
+// Root element for options.
+SelectionList.prototype.optionListElement = null;
+
+// Array for tracking option elements.
+SelectionList.prototype.optionElements = null;
+
+// Tracking for currently focused option; null if none.
+SelectionList.prototype.focusedOption = null;
+
+// Enabled status.
+SelectionList.prototype.enabled = false;
+
+// Initializer - called from constructor.
+SelectionList.prototype.init = function(id, caption, options, multipleSelection, selected) {
+ uiLogger.debug("SelectionList.init(" + id + ", " + caption + ", " + options + ", " + multipleSelection + ", " + selected + ")");
+
+ // call superclass initializer
+ SelectionControl.prototype.init.call(this, id, caption, options, multipleSelection, selected);
+
+ // create option list element
+ this.optionListElement = document.createElement("div");
+ this.controlElement.appendChild(this.optionListElement);
+
+ // the control defaults to enabled
+ this.enabled = true;
+
+ // init option element arrays
+ this.optionElements = [];
+
+ // update the option elements to match the options in this control
+ this.updateOptionElements();
+}
+
+// Returns the enabled state.
+SelectionList.prototype.isEnabled = function() {
+ return this.enabled;
+}
+
+// Sets the enabled state.
+SelectionList.prototype.setEnabled = function(enabled) {
+ uiLogger.debug("SelectionList.setEnabled(" + enabled + ")");
+ // switch the state and update the the control
+ this.enabled = enabled;
+ this.updateOptionElements();
+}
+
+// Sets the focused state for the control.
+// Note: This may not always succeed.
+SelectionList.prototype.setFocused = function(focused) {
+ uiLogger.debug("SelectionList.setFocused(" + focused + ")");
+ if (this.enabled && this.optionElements.length > 0) {
+ if (focused) {
+ this.optionElements[0].link.focus();
+ } else {
+ this.optionElements[0].link.blur();
+ }
+ }
+}
+
+// Sets the currently selected options. Pass a single option in a single selection
+// control or an array of selected controls in a multiple selection control. To
+// deselect all options pass null in a single selection control and an empty array
+// in a multiple selection control.
+SelectionList.prototype.setSelected = function(selected) {
+ // call superclass setSelected()
+ SelectionControl.prototype.setSelected.call(this, selected);
+ this.updateStyleFromState();
+}
+
+// Sets the options in the control.
+SelectionList.prototype.setOptions = function(options) {
+ // call superclass setOptions()
+ SelectionControl.prototype.setOptions.call(this, options);
+ this.updateOptionElements();
+}
+
+// Updates the option elements for the control element.
+SelectionList.prototype.updateOptionElements = function() {
+ uiLogger.debug("SelectionControl.updateOptionElements()");
+
+ // start by removing all current options from the option list element
+ while (this.optionListElement.firstChild != null) {
+ this.optionListElement.removeChild(this.optionListElement.firstChild);
+ }
+
+ // iterate through the options and add (and possibly create) a
+ // properly configured option element for each option
+ for (var i = 0; i < this.options.length; i++) {
+ // get the option and option element we're working on
+ var option = this.options[i];
+
+ // option, link and text elements for this option
+ var optionElement;
+ var optionLinkElement;
+ var optionTextElement;
+
+ // get the elements
+ if (i == this.optionElements.length) {
+ // we need to create a new option element...
+ optionElement = document.createElement("div");
+
+ // ...and a new option link element...
+ optionLinkElement = document.createElement("a");
+ optionLinkElement.href = "JavaScript:void(0)";
+
+ // ...and a new option text element
+ optionTextElement = document.createElement("span");
+
+ // hook up event listeners to the element
+ var self = this;
+ optionLinkElement.addEventListener("focus", function(event) { self.optionFocusStateChanged(event, true); }, false);
+ optionLinkElement.addEventListener("blur", function(event) { self.optionFocusStateChanged(event, false); }, false);
+ optionElement.addEventListener("mouseover", function() { self.hoverStateChanged(true); }, false);
+ optionElement.addEventListener("mouseout", function() { self.hoverStateChanged(false); }, false);
+ optionElement.addEventListener("mousedown", function(event) {
+ self.optionClicked(event)
+ event.stopPropagation();
+ event.preventDefault();
+ }, true);
+ optionElement.addEventListener("keydown", function(event) {
+ // center and enter trigger the action
+ if (event.keyCode == 0 || event.keyCode == 13) {
+ self.optionClicked(event)
+ event.stopPropagation();
+ event.preventDefault();
+ }
+ }, true);
+
+ // add the elements to the option element array
+ this.optionElements.push({ option: optionElement, link: optionLinkElement, text: optionTextElement });
+ } else {
+ // we already have ready elements so we'll reuse them
+ optionElement = this.optionElements[i].option;
+ optionLinkElement = this.optionElements[i].link;
+ optionTextElement = this.optionElements[i].text;
+
+ // remove the option link element from its current parent - if any
+ if (optionLinkElement.parentNode != null) {
+ optionLinkElement.parentNode.removeChild(optionLinkElement);
+ }
+
+ // remove the option text element from its current parent - if any
+ if (optionTextElement.parentNode != null) {
+ optionTextElement.parentNode.removeChild(optionTextElement);
+ }
+ }
+
+ // set the option text
+ optionTextElement.innerHTML = option.text;
+
+ // hook up the option to the control
+ if (this.enabled) {
+ // add the option link element to the option element
+ optionElement.appendChild(optionLinkElement);
+ // add the text element to the option element
+ optionLinkElement.appendChild(optionTextElement);
+ } else {
+ // add the text element directly to the control element
+ optionElement.appendChild(optionTextElement);
+ }
+ // add the option element to the option list element
+ this.optionListElement.appendChild(optionElement);
+ }
+
+ // update the style
+ this.updateStyleFromState();
+}
+
+// Callback for focus state change events.
+SelectionList.prototype.optionFocusStateChanged = function(event, focused) {
+ uiLogger.debug("SelectionControl.optionFocusStateChanged()");
+
+ // get the event source option
+ var option = null;
+ var optionElement = null;
+ for (var i = 0; i < this.optionElements.length; i++) {
+ optionElement = this.optionElements[i];
+ if (optionElement.link == event.currentTarget) {
+ option = this.options[i];
+ break;
+ }
+ }
+
+ // remember the focused option; or null if none is focused
+ if (focused) {
+ this.focusedOption = option;
+ } else {
+ this.focusedOption = null;
+ }
+
+ // call the superclass focus state change handler
+ this.focusStateChanged(focused);
+}
+
+// Callback for clicks.
+SelectionList.prototype.optionClicked = function(event) {
+ uiLogger.debug("SelectionControl.optionClicked()");
+
+ // bail out if we're not enabled
+ if (!this.enabled) {
+ return false;
+ }
+
+ // get the changed option
+ var option = null;
+ var optionElement = null;
+ for (var i = 0; i < this.optionElements.length; i++) {
+ optionElement = this.optionElements[i];
+ if (optionElement.option == event.currentTarget) {
+ option = this.options[i];
+ break;
+ }
+ }
+
+ // make sure the option is focused
+ optionElement.link.focus();
+
+ // toggle the selection
+ if (this.multipleSelection) {
+ // iterate through the selected options and see if this
+ // option is selected. if not then add it to the selection.
+ // if it already is selected then them remove it.
+ var found = false;
+ for (var i = 0; i < this.selected.length; i++) {
+ if (this.selected[i] == option) {
+ // remove from selected set
+ found = true;
+ this.selected.splice(i, 1);
+ break;
+ }
+ }
+ if (!found) {
+ // add to the selected set
+ this.selected.push(option);
+ }
+ } else {
+ // update the selected option
+ this.selected = option;
+ }
+
+ // update the style
+ this.updateStyleFromState();
+
+ // notify event listeners
+ this.fireEvent(this.createEvent("SelectionChanged", this.getSelected()));
+}
+
+// Resets the state tracking for focus and hover.
+// Override this in subclasses as required to implement the state reset.
+SelectionList.prototype.resetFocusState = function() {
+ uiLogger.debug("SelectionList.resetFocusState()");
+ this.hovering = false;
+ this.focused = false;
+ this.focusedOption = null;
+ this.updateStyleFromState();
+}
+
+// Updates the style of the control to reflects the state of the control.
+SelectionList.prototype.updateStyleFromState = function() {
+ uiLogger.debug("SelectionList.updateStyleFromState()");
+
+ // determine the state name
+ var stateName = this.getStyleStateName();
+
+ // set element class names
+ this.setClassName(this.rootElement, "Control");
+ this.setClassName(this.controlElement, "ControlElement");
+ this.setClassName(this.assemblyElement, "ControlAssembly ControlAssembly" + stateName);
+ this.setClassName(this.captionElement, "ControlCaption ControlCaption" + stateName);
+
+ // set option list and option class names
+ this.setClassName(this.optionListElement, "SelectionList SelectionList" + stateName);
+ for (var i = 0; i < this.options.length; i++) {
+ var option = this.options[i];
+
+ // get the option and option text elements for this option
+ var optionElement = this.optionElements[i].option;
+ var optionTextElement = this.optionElements[i].text;
+
+ // figure out the option state
+ var optionStateName = this.isSelected(option) ? "Checked" : "Unchecked";
+ if (!this.enabled) {
+ optionStateName += "Disabled";
+ } else if (this.focusedOption == option) {
+ optionStateName += "Focus";
+ } else {
+ optionStateName += "Normal";
+ }
+
+ // set option element class names
+ if (this.multipleSelection) {
+ this.setClassName(optionElement, "SelectionListOptionMulti SelectionListOptionMulti" + optionStateName);
+ } else {
+ this.setClassName(optionElement, "SelectionListOptionSingle SelectionListOptionSingle" + optionStateName);
+ }
+
+ // set option text class names
+ this.setClassName(optionTextElement, "SelectionListOptionText SelectionListOptionText" + stateName);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/SelectionMenu.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,204 @@
+/*
+ Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (Nokia) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokias copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// The SelectionMenu class implements a single or multi selection control
+// that lets users select one or more options from a menu.
+
+// Constructor.
+function SelectionMenu(id, caption, options, multipleSelection, selected) {
+ if (id != UI_NO_INIT_ID) {
+ this.init(id, caption, options, multipleSelection, selected);
+ }
+}
+
+// SelectionMenu inherits from SelectionControl.
+SelectionMenu.prototype = new SelectionControl(UI_NO_INIT_ID);
+
+// Reference to the peer HTML element.
+SelectionControl.prototype.peerElement = null;
+
+// Array for tracking option elements.
+SelectionMenu.prototype.optionElements = null;
+
+// Initializer - called from constructor.
+SelectionMenu.prototype.init = function(id, caption, options, multipleSelection, selected) {
+ uiLogger.debug("SelectionMenu.init(" + id + ", " + caption + ", " + options + ", " + multipleSelection + ", " + selected + ")");
+
+ // call superclass initializer
+ SelectionControl.prototype.init.call(this, id, caption, options, multipleSelection, selected);
+
+ // create the control
+ this.peerElement = document.createElement("select");
+ this.peerElement.multiple = multipleSelection;
+ this.controlElement.appendChild(this.peerElement);
+
+ // init option elements array
+ this.optionElements = [];
+
+ // update the option elements to match the options in this control
+ this.updateOptionElements();
+
+ // bind event listeners
+ var self = this;
+ this.peerElement.addEventListener("focus", function() { self.focusStateChanged(true); }, false);
+ this.peerElement.addEventListener("blur", function() { self.focusStateChanged(false); }, false);
+ this.peerElement.addEventListener("mouseover", function() { self.hoverStateChanged(true); }, false);
+ this.peerElement.addEventListener("mouseout", function() { self.hoverStateChanged(false); }, false);
+ this.peerElement.addEventListener("change", function() { self.selectionChanged(); }, false);
+}
+
+// Returns the enabled state.
+SelectionMenu.prototype.isEnabled = function() {
+ return !this.peerElement.disabled;
+}
+
+// Sets the enabled state.
+SelectionMenu.prototype.setEnabled = function(enabled) {
+ uiLogger.debug("SelectionMenu.setEnabled(" + enabled + ")");
+ this.peerElement.disabled = !enabled;
+}
+
+// Sets the focused state for the control.
+// Note: This may not always succeed.
+SelectionMenu.prototype.setFocused = function(focused) {
+ uiLogger.debug("SelectionMenu.setFocused(" + focused + ")");
+ if (focused) {
+ this.peerElement.focus();
+ } else {
+ this.peerElement.blur();
+ }
+}
+
+// Sets the currently selected options. Pass a single option in a single selection
+// control or an array of selected controls in a multiple selection control. To
+// deselect all options pass null in a single selection control and an empty array
+// in a multiple selection control.
+SelectionMenu.prototype.setSelected = function(selected) {
+ // call superclass setSelected()
+ SelectionControl.prototype.setSelected.call(this, selected);
+
+ // iterate through the options and set the selected state
+ // on the corresponding option element
+ for (var i = 0; i < this.options.length; i++) {
+ this.optionElements[i].selected = this.isSelected(this.options[i]);
+ }
+}
+
+// Sets the options in the control.
+SelectionMenu.prototype.setOptions = function(options) {
+ // call superclass setOptions()
+ SelectionControl.prototype.setOptions.call(this, options);
+ this.updateOptionElements();
+}
+
+// Updates the option elements for the peer select element.
+SelectionMenu.prototype.updateOptionElements = function() {
+ // start by removing all current options from the select element
+ while (this.peerElement.firstChild != null) {
+ this.peerElement.removeChild(this.peerElement.firstChild);
+ }
+
+ // iterate through the options and add (and possibly create) a
+ // properly configured option element for each option
+ for (var i = 0; i < this.options.length; i++) {
+ // do we need to create a new option element?
+ if (i == this.optionElements.length) {
+ this.optionElements.push(document.createElement("option"));
+ }
+
+ // get the option and option element we're working on
+ var option = this.options[i];
+ var optionElement = this.optionElements[i];
+
+ // set the state for this option element and add it to the
+ // peer select element
+ optionElement.text = option.text;
+ optionElement.selected = this.isSelected(option);
+ this.peerElement.appendChild(optionElement);
+ }
+
+ // update the style
+ this.updateStyleFromState();
+}
+
+// Callback for selection change events.
+SelectionMenu.prototype.selectionChanged = function() {
+ uiLogger.debug("SelectionControl.selectionChanged()");
+
+ // update the selected options array or reference
+ this.selected = (this.multipleSelection) ? [] : null;
+ for (var i = 0; i < this.options.length; i++) {
+ if (this.optionElements[i].selected) {
+ if (this.multipleSelection) {
+ this.selected.push(this.options[i]);
+ } else {
+ this.selected = this.options[i];
+ break;
+ }
+ }
+ }
+
+ // notify event listeners
+ this.fireEvent(this.createEvent("SelectionChanged", this.getSelected()));
+}
+
+// Updates the style of the control to reflects the state of the control.
+SelectionMenu.prototype.updateStyleFromState = function() {
+ uiLogger.debug("SelectionMenu.updateStyleFromState()");
+
+ // determine the state name
+ var stateName = this.getStyleStateName();
+
+ // set element class names
+ this.setClassName(this.rootElement, "Control");
+ this.setClassName(this.controlElement, "ControlElement");
+ this.setClassName(this.assemblyElement, "ControlAssembly ControlAssembly" + stateName);
+ this.setClassName(this.captionElement, "ControlCaption ControlCaption" + stateName);
+
+ // set select and option element class names
+ var peerStateName = this.isEnabled() ? stateName : "Disabled";
+ this.setClassName(this.peerElement, "SelectionMenu SelectionMenu" + peerStateName);
+ for (var i = 0; i < this.options.length; i++) {
+ var option = this.optionElements[i];
+ this.setClassName(option, "SelectionMenuOption SelectionMenuOption" + peerStateName);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/Separator.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,119 @@
+/*
+ Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (Nokia) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokias copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// The Separator class is used to provide a visual separator in a list.
+
+// Constructor.
+function Separator(id) {
+ if (id != UI_NO_INIT_ID) {
+ this.init(id);
+ }
+}
+
+// Separator inherits from Control.
+Separator.prototype = new Control(UI_NO_INIT_ID);
+
+// Reference to the separator element.
+Separator.prototype.separatorElement = null;
+
+// Separator row element.
+Separator.prototype.tableRowElement = null;
+
+// Left cell element.
+Separator.prototype.tableLeftCellElement = null;
+
+// Center cell element.
+Separator.prototype.tableCenterCellElement = null;
+
+// Right cell element.
+Separator.prototype.tableRightCellElement = null;
+
+// Initializer - called from constructor.
+Separator.prototype.init = function(id) {
+ uiLogger.debug("Separator.init(" + id + ")");
+
+ // call superclass initializer
+ Control.prototype.init.call(this, id, null);
+
+ // remove caption and control elements
+ this.assemblyElement.removeChild(this.captionElement);
+ this.assemblyElement.removeChild(this.controlElement);
+
+ // create separator
+ this.separatorElement = document.createElement("table");
+ this.tableRowElement = document.createElement("tr");
+ this.tableLeftCellElement = document.createElement("td");
+ this.tableCenterCellElement = document.createElement("td");
+ this.tableRightCellElement = document.createElement("td");
+ this.tableRowElement.appendChild(this.tableLeftCellElement);
+ this.tableRowElement.appendChild(this.tableCenterCellElement);
+ this.tableRowElement.appendChild(this.tableRightCellElement);
+ this.separatorElement.appendChild(this.tableRowElement);
+ this.assemblyElement.appendChild(this.separatorElement);
+
+ // update style
+ this.updateStyleFromState();
+}
+
+// Returns the enabled state for the control.
+Separator.prototype.isEnabled = function() {
+ return true;
+}
+
+// Returns the focusable state for the control.
+Separator.prototype.isFocusable = function() {
+ return false;
+}
+
+// Updates the style of the control to reflects the state of the control.
+Separator.prototype.updateStyleFromState = function() {
+ uiLogger.debug("Separator.updateStyleFromState()");
+
+ // set element class names
+ this.setClassName(this.rootElement, "Control");
+ this.setClassName(this.assemblyElement, "ControlAssembly ControlAssemblyNormal");
+ this.setClassName(this.separatorElement, "Separator");
+ this.setClassName(this.tableRowElement, "SeparatorRow");
+ this.setClassName(this.tableLeftCellElement, "SeparatorLeftCell");
+ this.setClassName(this.tableCenterCellElement, "SeparatorCenterCell");
+ this.setClassName(this.tableRightCellElement, "SeparatorRightCell");
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/SlidingTransition.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,75 @@
+
+
+function SlidingScreenTransition(oldView, newView, direction, callback)
+{
+ /* DOM element to be "pushed out" */
+ this.currentScreen = oldView.rootElement;
+
+ /* DOM element to be "pulled in" */
+ this.nextScreen = newView.rootElement;
+
+ /* direction of the sliding transition */
+ this.direction = direction;
+
+ // callback when done
+ this.callback = callback;
+}
+
+/* constant value for right-to-left transitions */
+SlidingScreenTransition.DIRECTION_LEFT = 1;
+
+/* constant value for left-to-right transitions */
+SlidingScreenTransition.DIRECTION_RIGHT = -1;
+
+/* total number of steps of the sliding transition */
+SlidingScreenTransition.TRANSITION_STEPS = 10;
+
+
+SlidingScreenTransition.prototype.start = function()
+{
+ var self = this;
+
+ this.nextScreen.style.top = '0px';
+ this.nextScreen.style.left = (this.direction * screen.availWidth) + 'px';
+
+ this.transitionStep = 0;
+
+ this.transitionInterval = setInterval(
+ function()
+ {
+ self.doTransitionStep();
+ },
+ 100
+ );
+}
+
+SlidingScreenTransition.prototype.stop = function() {
+ clearInterval ( this.transitionInterval );
+ if (this.callback) {
+ this.callback.call();
+ }
+}
+
+
+SlidingScreenTransition.prototype.doTransitionStep = function()
+{
+ this.transitionStep++;
+
+ if(this.transitionStep <= SlidingScreenTransition.TRANSITION_STEPS)
+ {
+ this.nextScreen.style.left =
+ (screen.availWidth *
+ (SlidingScreenTransition.TRANSITION_STEPS - this.transitionStep) *
+ this.direction / SlidingScreenTransition.TRANSITION_STEPS)
+ + 'px';
+
+ this.currentScreen.style.left =
+ (- screen.availWidth * this.transitionStep * this.direction /
+ SlidingScreenTransition.TRANSITION_STEPS)
+ + 'px';
+ }
+ else
+ {
+ this.stop();
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/TextArea.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,96 @@
+/*
+ Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (Nokia) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokias copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// The TextArea class implements a multi line text entry control.
+
+// Constructor.
+function TextArea(id, caption, value, rows) {
+ if (id != UI_NO_INIT_ID) {
+ this.init(id, caption, value, rows);
+ }
+}
+
+// TextArea inherits from TextEntryControl.
+TextArea.prototype = new TextEntryControl(UI_NO_INIT_ID);
+
+// Initializer - called from constructor.
+TextArea.prototype.init = function(id, caption, value, rows) {
+ uiLogger.debug("TextArea.init(" + id + ", " + caption + ", " + value + ", " + rows + ")");
+
+ // call superclass initializer
+ TextEntryControl.prototype.init.call(this, id, caption);
+
+ // create the peer element
+ this.peerElement = document.createElement("textarea");
+ // default rowcount is 3 if not defined
+ // width always comes from style but is a required attribute
+ this.peerElement.rows = (rows != null) ? rows : 3;
+ this.peerElement.cols = 20;
+ this.controlElement.appendChild(this.peerElement);
+
+ // set the value
+ this.peerElement.value = (value == null) ? "" : value;
+
+ // bind event listeners
+ this.bindTextEntryControlListeners();
+
+ // update the style
+ this.updateStyleFromState();
+}
+
+// Updates the style of the control to reflects the state of the control.
+TextArea.prototype.updateStyleFromState = function() {
+ uiLogger.debug("TextArea.updateStyleFromState()");
+
+ // determine the state name
+ var stateName = this.getStyleStateName();
+
+ // set element class names
+ this.setClassName(this.rootElement, "Control");
+ this.setClassName(this.controlElement, "ControlElement");
+ this.setClassName(this.assemblyElement, "ControlAssembly ControlAssembly" + stateName);
+ this.setClassName(this.captionElement, "ControlCaption ControlCaption" + stateName);
+
+ // set peer element class names
+ var peerStateName = this.isEnabled() ? stateName : "Disabled";
+ this.setClassName(this.peerElement, "TextArea TextArea" + stateName);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/TextEntryControl.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,125 @@
+/*
+ Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (Nokia) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokias copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// The TextEntryControl class is an abstract base class for the single and multi-
+// line text entry controls TextField and TextArea. Don't use TextEntryControl
+// directly.
+
+// Constructor.
+function TextEntryControl(id, caption) {
+ if (id != UI_NO_INIT_ID) {
+ this.init(id, caption);
+ }
+}
+
+// TextEntryControl inherits from Control.
+TextEntryControl.prototype = new Control(UI_NO_INIT_ID);
+
+// Reference to the peer HTML element.
+TextEntryControl.prototype.peerElement = null;
+
+// Initializer - called from constructor.
+TextEntryControl.prototype.init = function(id, caption) {
+ uiLogger.debug("TextEntryControl.init(" + id + ", " + caption + ")");
+
+ // call superclass initializer
+ Control.prototype.init.call(this, id, caption);
+}
+
+// Common event listeners hookup function called from subclasses.
+TextEntryControl.prototype.bindTextEntryControlListeners = function() {
+ var self = this;
+ this.peerElement.addEventListener("focus", function() { self.focusStateChanged(true); }, false);
+ this.peerElement.addEventListener("blur", function() { self.focusStateChanged(false); }, false);
+ this.peerElement.addEventListener("mouseover", function() { self.hoverStateChanged(true); }, false);
+ this.peerElement.addEventListener("mouseout", function() { self.hoverStateChanged(false); }, false);
+ this.peerElement.addEventListener("change", function() { self.valueChanged(); }, false);
+}
+
+// Returns the enabled state.
+// Override this in subclasses as required to implement the state change.
+TextEntryControl.prototype.isEnabled = function() {
+ return !this.peerElement.readOnly;
+}
+
+// Sets the enabled state.
+// Override this in subclasses as required to implement the state change.
+TextEntryControl.prototype.setEnabled = function(enabled) {
+ uiLogger.debug("TextEntryControl.setEnabled(" + enabled + ")");
+ this.peerElement.readOnly = !enabled;
+ // update the style
+ this.updateStyleFromState();
+}
+
+// Returns the control text.
+TextEntryControl.prototype.getText = function() {
+ return this.peerElement.value;
+}
+
+// Sets the text for the control.
+TextEntryControl.prototype.setText = function(text) {
+ this.peerElement.value = text;
+}
+
+// Returns the focusable state for the control.
+TextEntryControl.prototype.isFocusable = function() {
+ // text entry controls are always focusable
+ return true;
+}
+
+// Sets the focused state for the control.
+// Note: This may not always succeed.
+TextEntryControl.prototype.setFocused = function(focused) {
+ uiLogger.debug("TextEntryControl.setFocused(" + focused + ")");
+ if (focused) {
+ this.peerElement.focus();
+ } else {
+ this.peerElement.blur();
+ }
+}
+
+// Callback for value change events.
+TextEntryControl.prototype.valueChanged = function() {
+ uiLogger.debug("TextEntryControl.valueChanged()");
+ // notify event listeners
+ this.fireEvent(this.createEvent("ValueChanged", this.peerElement.value));
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/TextField.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,93 @@
+/*
+ Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (Nokia) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokias copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// The TextField class implements a single line text entry control.
+
+// Constructor.
+function TextField(id, caption, value, masked) {
+ if (id != UI_NO_INIT_ID) {
+ this.init(id, caption, value, masked);
+ }
+}
+
+// TextField inherits from TextEntryControl.
+TextField.prototype = new TextEntryControl(UI_NO_INIT_ID);
+
+// Initializer - called from constructor.
+TextField.prototype.init = function(id, caption, value, masked) {
+ uiLogger.debug("TextField.init(" + id + ", " + caption + ", " + value + ", " + masked + ")");
+
+ // call superclass initializer
+ TextEntryControl.prototype.init.call(this, id, caption);
+
+ // create the peer element
+ this.peerElement = document.createElement("input");
+ this.peerElement.type = masked ? "password" : "text";
+ this.controlElement.appendChild(this.peerElement);
+
+ // set the value
+ this.peerElement.value = (value == null) ? "" : value;
+
+ // bind event listeners
+ this.bindTextEntryControlListeners();
+
+ // update the style
+ this.updateStyleFromState();
+}
+
+// Updates the style of the control to reflects the state of the control.
+TextField.prototype.updateStyleFromState = function() {
+ uiLogger.debug("TextField.updateStyleFromState()");
+
+ // determine the state name
+ var stateName = this.getStyleStateName();
+
+ // set element class names
+ this.setClassName(this.rootElement, "Control");
+ this.setClassName(this.controlElement, "ControlElement");
+ this.setClassName(this.assemblyElement, "ControlAssembly ControlAssembly" + stateName);
+ this.setClassName(this.captionElement, "ControlCaption ControlCaption" + stateName);
+
+ // set peer element class names
+ var peerStateName = this.isEnabled() ? stateName : "Disabled";
+ this.setClassName(this.peerElement, "TextField TextField" + peerStateName);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/UIElement.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,114 @@
+/*
+ Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (Nokia) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokias copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// The UIElement class is the base class for all user interface elements.
+
+// Constructor.
+function UIElement(id) {
+ if (id != UI_NO_INIT_ID) {
+ this.init(id);
+ }
+}
+
+// UI element identifier.
+UIElement.prototype.id = null;
+
+// Root HTML element in the UI element.
+UIElement.prototype.rootElement = null;
+
+// Initializer for UIElement.
+UIElement.prototype.init = function(id) {
+ uiLogger.debug("UIElement.init(" + id + ")");
+
+ // copy identifier
+ this.id = id;
+
+ // init event listener array
+ this.eventListeners = [];
+
+ // create the root element
+ this.rootElement = document.createElement("div");
+ if (id != null) {
+ this.rootElement.id = id;
+ }
+}
+
+// Returns an array containing the current event listeners.
+UIElement.prototype.getEventListeners = function() {
+ return this.eventListeners;
+}
+
+// Adds an event listener.
+UIElement.prototype.addEventListener = function(eventType, listener) {
+ var listenerDef = { type: eventType, listener: listener };
+ this.eventListeners.push(listenerDef);
+}
+
+// Removes an event listener.
+UIElement.prototype.removeEventListener = function(eventType, listener) {
+ // iterate through current listeners and remove the specified
+ // listener when its found
+ for (var i = 0; i < this.eventListeners.length; i++) {
+ var listenerDef = this.eventListeners[i];
+ if ((listenerDef.type == eventType) &&
+ (listenerDef.listener == listener)) {
+ this.eventListeners.splice(i, 1);
+ return;
+ }
+ }
+}
+
+// Factory method for an event object where this object is the source object.
+UIElement.prototype.createEvent = function(type, value) {
+ return { source: this, type: type, value: value };
+}
+
+// Fires an event to all listeners.
+UIElement.prototype.fireEvent = function(event) {
+ // iterate through all event listeners and notify them of the event
+ for (var i = 0; i < this.eventListeners.length; i++) {
+ var listenerDef = this.eventListeners[i];
+ if (listenerDef.type == null || listenerDef.type == event.type) {
+ listenerDef.listener.call(this, event);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/UIInit.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,49 @@
+/*
+� Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (�Nokia�) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokia�s copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// The UIInit script is included before the rest of the UI scripts to setup
+// any resources needed by the UI toolkit.
+
+// Create UI logger.
+var uiLogger = new Logger();
+uiLogger.level = uiLogger.LOG_LEVEL_DEBUG;
+uiLogger.filter = ["QECR"];
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/UIManager.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,245 @@
+/*
+� Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (�Nokia�) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokia�s copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+
+///////////////////////////////////////////////////////////////////////////////
+// The UI manager manages a set of views and other user interface elements.
+
+// Constructor.
+function UIManager(viewParentElement, scrollbarParentElement, enableScrollBar, delayInit) {
+ uiLogger.debug("UIManager(" + viewParentElement + ", " + scrollbarParentElement + ")");
+ if (delayInit == null) {
+ this.init(viewParentElement, enableScrollBar, scrollbarParentElement);
+ }
+}
+
+// Parent element for views.
+UIManager.prototype.viewParentElement = null;
+
+// Parent element for scrollbar.
+UIManager.prototype.scrollbarParentElement = null;
+
+// The currently displayed view.
+UIManager.prototype.currentView = null;
+
+// Reference to the scrollbar.
+UIManager.prototype.scrollbar = null;
+
+// Current scroll Y position.
+UIManager.prototype.scrollY = -1;
+
+// Current viewport height.
+UIManager.prototype.viewportHeight = -1;
+
+// Current document height.
+UIManager.prototype.documentHeight = -1;
+
+// Timer identifier or null if no active timer.
+UIManager.prototype.timerId = null;
+
+// Interval for timer ticks for the UI manager timer (in milliseconds)
+UIManager.prototype.TIMER_INTERVAL = 250;
+
+// Reference to the notification popup used to displays notifications.
+UIManager.prototype.notificationPopup = null;
+
+// is scrollbar enabled
+UIManager.prototype.enableScrollBar = null;
+
+// View switch animation
+UIManager.prototype.viewSwitchAnimation = false;
+UIManager.prototype.viewSwitchTimer = null;
+UIManager.prototype.viewSwitchDivPos = 0;
+UIManager.prototype.VIEW_SWITCH_TIMER_INTERVAL = 25;
+
+// init function
+UIManager.prototype.init = function(viewParentElement, enableScrollBar, scrollbarParentElement) {
+ this.enableScrollBar = enableScrollBar;
+
+ // parent element for views
+ if (viewParentElement == null) {
+ // create a parent for views
+ this.viewParentElement = document.createElement("div");
+ this.viewParentElement.className = "ViewContainer";
+ document.body.appendChild(this.viewParentElement);
+ }
+ else {
+ this.viewParentElement = viewParentElement;
+ }
+
+ // parent element for scrollbar
+ if (enableScrollBar) {
+ if (scrollbarParentElement == null) {
+ // create a parent for the scrollbar
+ this.scrollbarParentElement = document.createElement("div");
+ this.scrollbarParentElement.className = "DocumentScrollbarContainer";
+ document.body.appendChild(this.scrollbarParentElement);
+ }
+ else {
+ this.scrollbarParentElement = scrollbarParentElement;
+ }
+ }
+
+ // currently selected view
+ this.currentView = null;
+
+ // create the notification popup
+ // the notification popup adds itself as a child element to the document body
+ this.notificationPopup = new NotificationPopup();
+
+ // create scrollbar
+ if (enableScrollBar) {
+ this.scrollbar = new Scrollbar(this.scrollbarParentElement);
+ }
+
+ // setup scrollbar tracking
+ var self = this;
+ this.startTimer();
+ if (enableScrollBar) {
+ window.addEventListener("resize", function(){
+ self.updateScrollbar();
+ }, false);
+ window.addEventListener("scroll", function(){
+ self.updateScrollbar();
+ }, false);
+ }
+}
+
+// Returns the current view.
+UIManager.prototype.getView = function() {
+ return this.currentView;
+}
+
+// Switches to the specified view.
+UIManager.prototype.setView = function(view){
+ // remove the current view from the parent element
+ if (this.currentView != null) {
+ this.viewParentElement.removeChild(this.currentView.rootElement);
+ }
+
+ // reset scroll
+ window.scrollTo(0, 0);
+
+ // add the new view to the parent element
+ if (view != null) {
+ this.currentView = view;
+ this.currentView.resetControlFocusStates();
+ this.viewParentElement.appendChild(this.currentView.rootElement);
+ }
+
+ // update scrollbar
+ if (this.enableScrollBar) {
+ this.updateScrollbar();
+ }
+
+ // focus the first focusable control
+ // a timer is used to prevent unwanted focus shift
+ setTimeout(function(){ view.focusFirstControl();}, 1);
+}
+
+// Updates the scrollbar.
+UIManager.prototype.updateScrollbar = function() {
+ if (this.enableScrollBar) {
+ // get current viewport and document position and dimensions
+ var scrollY = window.scrollY;
+ var viewportHeight = window.innerHeight;
+ var documentHeight = Math.max(document.documentElement.scrollHeight, document.height);
+
+ // check if the scroll position or view has changed
+ if (this.scrollY != scrollY ||
+ this.viewportHeight != viewportHeight ||
+ this.documentHeight != documentHeight) {
+ // scroll position or view has changed
+ this.scrollY = scrollY;
+ this.viewportHeight = viewportHeight;
+ this.documentHeight = documentHeight;
+
+ // update the scrollbar
+ this.scrollbar.update(scrollY, viewportHeight, documentHeight);
+ uiLogger.debug("Scrollbar updated");
+ }
+ }
+}
+
+// Starts the view manager timer.
+UIManager.prototype.startTimer = function() {
+ if (this.timerId == null) {
+ uiLogger.debug("UIManager timer started");
+ var self = this;
+ // setup the timer
+ this.timerId = setInterval(function() { self.onTimer(); }, this.TIMER_INTERVAL);
+ } else {
+ uiLogger.warn("UIManager timer already running");
+ }
+}
+
+// Stops the view manager timer.
+UIManager.prototype.stopTimer = function() {
+ if (this.timerId != null) {
+ // stop the timer
+ clearTimeout(this.timerId);
+ this.timerId = null;
+ } else {
+ uiLogger.warn("UIManager timer already stopped");
+ }
+}
+
+// Timer callback function.
+UIManager.prototype.onTimer = function() {
+ if (this.enableScrollBar) {
+ // make sure the scrollbar is up to date
+ this.updateScrollbar();
+ }
+}
+
+// Displays a notification.
+UIManager.prototype.showNotification = function(displayTime, type, text, progress) {
+ uiLogger.debug("UIManager.showNotification(" + displayTime + ", " + type + ", " + text + ", " + progress + ")");
+ // use the notification popup to show the notification
+ this.notificationPopup.showNotification(displayTime, type, text, progress);
+}
+
+// Hides the currently displayed notification.
+UIManager.prototype.hideNotification = function() {
+ uiLogger.debug("UIManager.hideNotification()");
+ // hide the notification popup
+ this.notificationPopup.hideNotification();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/UI/View.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,131 @@
+/*
+� Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (�Nokia�) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokia�s copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// The View class is an abstract base class for views in the UI toolkit.
+// Don't use the View directly - instead use a concrete subclass like ListView.
+
+// Constructor.
+function View(id) {
+ if (id != UI_NO_INIT_ID) {
+ this.init(id);
+ }
+}
+
+// View inherits from UIElement.
+View.prototype = new UIElement(UI_NO_INIT_ID);
+
+// Currently focused control.
+View.prototype.focusedControl = null;
+
+// Allows going back from every view
+View.prototype.previousView = null;
+
+// Initializer - called from constructor.
+View.prototype.init = function(id) {
+ uiLogger.debug("View.init(" + id + ")");
+
+ // call superclass initializer
+ UIElement.prototype.init.call(this, id);
+}
+
+// Returns the currently focused control; null if none.
+View.prototype.getFocusedControl = function() {
+ return this.focusedControl;
+}
+
+// Used to notify the view that the focused control has changed.
+View.prototype.focusedControlChanged = function(control) {
+ uiLogger.debug("View.focusedControlChanged(" + control + ")");
+ this.focusedControl = control;
+ // notify event listeners
+ this.fireEvent(this.createEvent("FocusedControlChanged", this.focusedControl));
+}
+
+// Attempts to focus the first focusable control.
+// Override in subclasses as required.
+View.prototype.focusFirstControl = function() {
+ uiLogger.debug("View.focusFirstControl()");
+}
+
+// Attempts to reset all control focus states.
+// Override in subclasses as required.
+View.prototype.resetControlFocusStates = function() {
+ uiLogger.debug("View.resetControlFocusStates()");
+}
+
+
+// ////////////////////////////////////////////////////////////////////
+// Added functions
+
+// set up soft keys. Default implementation sets right soft
+// key to Back if the previous view is set
+View.prototype.setupSoftKeys = function() {
+ if (window.widget) {
+ if (this.previousView != null) {
+ var self = this;
+ menu.setRightSoftkeyLabel("Back", function(){self.goBack();});
+ } else {
+ menu.setRightSoftkeyLabel("Exit", function(){window.close();});
+ }
+ }
+}
+
+// show the view - sets up soft keys
+View.prototype.show = function () {
+ this.setupSoftKeys();
+ this.update(false);
+ uiManager.setView(this);
+}
+
+// abstract function for updating page content
+View.prototype.update = function(forceUpdate){
+}
+
+
+// Default back button handler takes us to previous view
+// if one is set
+View.prototype.goBack = function() {
+ if ( this.previousView != null ) {
+ this.previousView.show();
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/Utils/Logger.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,117 @@
+/*
+ Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (Nokia) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokias copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// Logger utility class that uses the Firebug console class.
+
+// Constructor (everything is static so this is empty).
+function Logger() {
+ // Set default logger level.
+ this.level = this.LOG_LEVEL_OFF;
+}
+
+// Logger levels.
+Logger.prototype.LOG_LEVEL_DEBUG = 0;
+Logger.prototype.LOG_LEVEL_INFO = 1;
+Logger.prototype.LOG_LEVEL_WARN = 2;
+Logger.prototype.LOG_LEVEL_ERROR = 3;
+Logger.prototype.LOG_LEVEL_OFF = 4;
+
+Logger.prototype.level = null;
+Logger.prototype.filter = null;
+
+// Disable logging on other browsers except Firefox.
+Logger.prototype.enabled = (navigator.userAgent.indexOf("Firefox") != -1);
+
+// Dumps an objects properties and methods to the console.
+Logger.prototype.dump = function(obj) {
+ if (this.enabled) {
+ console.dir(obj);
+ }
+}
+
+// Dumps a stracktrace to the console.
+Logger.prototype.trace = function() {
+ if (this.enabled) {
+ console.trace();
+ }
+}
+
+// Prints a debug message to the console.
+Logger.prototype.debug = function(str) {
+ if (this.enabled && this.level <= this.LOG_LEVEL_DEBUG) {
+ if (this.filter == null) {
+ console.debug(str);
+ } else {
+ var show = false;
+ for (i in this.filter) {
+ if (str.indexOf(this.filter[i]) >= 0) {
+ show = true;
+ break;
+ }
+ }
+ if (show) {
+ console.debug(str);
+ }
+ }
+ }
+}
+
+// Prints an info message to the console.
+Logger.prototype.info = function(str) {
+ if (this.enabled && this.level <= this.LOG_LEVEL_INFO) {
+ console.info(str);
+ }
+}
+
+// Prints a warning message to the console.
+Logger.prototype.warn = function(str) {
+ if (this.enabled && this.level <= this.LOG_LEVEL_WARN) {
+ console.warn(str);
+ }
+}
+
+// Prints an error message to the console.
+Logger.prototype.error = function(str) {
+ if (this.enabled && this.level <= this.LOG_LEVEL_ERROR) {
+ console.error(str);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/WRTKit/WRTKit.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,93 @@
+/*
+� Copyright 2008 Nokia Corporation. All rights reserved.
+
+IMPORTANT: The Nokia software ("WRTKit and Example Widget files") is supplied to you by Nokia
+Corporation (�Nokia�) in consideration of your agreement to the following terms. Your use, installation
+and/or redistribution of the WRTKit and Example Widget files constitutes acceptance of these terms. If
+you do not agree with these terms, please do not use, install, or redistribute the WRTKit and Example
+Widget files.
+
+In consideration of your agreement to abide by the following terms, and subject to these terms, Nokia
+grants you a personal, non-exclusive license, under Nokia�s copyrights in the WRTKit and Example
+Widget files, to use, reproduce, and redistribute the WRTKit and Example files, in text form (for HTML,
+CSS, or JavaScript files) or binary form (for associated images), for the sole purpose of creating S60
+Widgets.
+
+If you redistribute the WRTKit and Example files, you must retain this entire notice in all such
+redistributions of the WRTKit and Example files.
+
+You may not use the name, trademarks, service marks or logos of Nokia to endorse or promote products
+that include the WRTKit and Example files without the prior written explicit agreement with Nokia.
+Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by
+Nokia herein, including but not limited to any patent rights that may be infringed by your products that
+incorporate the WRTKit and Example files or by other works in which the WRTKit and Example files
+may be incorporated.
+
+The WRTKit and Example files are provided on an "AS IS" basis. NOKIA MAKES NO
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
+WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE, REGARDING THE EXAMPLES OR ITS USE AND OPERATION
+ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+IN NO EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, AND/OR
+DISTRIBUTION OF THE EXAMPLES, HOWEVER CAUSED AND WHETHER UNDER THEORY
+OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE,
+EVEN IF NOKIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+// This script includes the WRTKit for use in a widget.
+
+// WRTKit version (major.minor.revision, e.g. 1.0.0).
+var WRTKIT_VERSION_MAJOR = 1;
+var WRTKIT_VERSION_MINOR = 0;
+var WRTKIT_VERSION_REVISION = 0;
+var WRTKIT_RESOURCE_DIRECTORY = "WRTKit/Resources/";
+
+// Include util script files.
+includeScript("WRTKit/Utils/Logger.js");
+
+// Include UI visual definition.
+includeStyleSheet("WRTKit/Resources/UI.css");
+
+// Include all UI toolkit script files.
+var UI_NO_INIT_ID = "UI_NO_INIT_ID";
+
+includeScript("WRTKit/UI/UIInit.js");
+includeScript("WRTKit/UI/UIElement.js");
+includeScript("WRTKit/UI/Scrollbar.js");
+includeScript("WRTKit/UI/NotificationPopup.js");
+includeScript("WRTKit/UI/SlidingTransition.js");
+includeScript("WRTKit/UI/UIManager.js");
+includeScript("WRTKit/UI/View.js");
+includeScript("WRTKit/UI/ListView.js");
+includeScript("WRTKit/UI/Control.js");
+includeScript("WRTKit/UI/Separator.js");
+includeScript("WRTKit/UI/Label.js");
+includeScript("WRTKit/UI/ContentPanel.js");
+includeScript("WRTKit/UI/TextEntryControl.js");
+includeScript("WRTKit/UI/TextField.js");
+includeScript("WRTKit/UI/TextArea.js");
+includeScript("WRTKit/UI/SelectionControl.js");
+includeScript("WRTKit/UI/SelectionMenu.js");
+includeScript("WRTKit/UI/SelectionList.js");
+includeScript("WRTKit/UI/ActionControl.js");
+includeScript("WRTKit/UI/FormButton.js");
+includeScript("WRTKit/UI/NavigationButton.js");
+includeScript("WRTKit/UI/TabView.js");
+includeScript("WRTKit/UI/Ajax.js");
+includeScript("WRTKit/UI/ImageLabel.js");
+
+// Includes a script file by writing a script tag.
+function includeScript(src) {
+ document.write("<script type=\"text/javascript\" src=\"" + src + "\"></script>");
+}
+
+// Includes a style sheet by writing a style tag.
+function includeStyleSheet(src) {
+ document.write("<style type=\"text/css\"> @import url(\"" + src + "\"); </style>");
+}
Binary file OSCON/day.png has changed
Binary file OSCON/day1.png has changed
Binary file OSCON/day2.png has changed
Binary file OSCON/day3.png has changed
Binary file OSCON/day4.png has changed
Binary file OSCON/day5.png has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/iCalReader.js Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,726 @@
+ /*************** START iCalReader.js ******************************************************************************/
+
+/* HEADER START
+
+ iCalendar Reader for Javascript v. 1.1
+ Parses and reads iCalendar data format.
+
+ By Per-Kristian Nordnes (pk@yammin.com), august 2007.
+ Copyright (C) 2007 - Per Kristian Nordnes.
+ All rights reserved.
+
+ The parsing algorithm in iCalendar.parse() is inspired by a PHP-script by Roman Ožana.
+
+ Changelog:
+ 1.0 - Initial release (aug. 2007).
+ 1.1 - Some fixes for parsing Google iCal-data. Thanks to Emilis Dambauskas (feb. 25, 2008)
+
+ Contents:
+
+ Class: iCalReader() - parser object.
+ Public methods:
+ * Array prepareData(String data) : set and prepare iCalendar data to read.
+ Throws exception if invalid data.
+ * void parse() : parse the data.
+ * void sort() : sort events in the calendar object.
+ * vCalendar getCalendar() : get the calendar object.
+
+ Class: vCalendar() - calendar object.
+ Public methods:
+ * Array<vEvent> getEvents() : get a array of the calendar events.
+ * Int getNrOfEvents() : get the number of events.
+ * Array<String> getPropertyNames() : get an array of the calendar's property names.
+ * PropertyMap getProperties() : get the property map object for the calendar.
+ * 0bject getProperty(String key) : get a property value by name.
+ Throws exception if property is not found (invalidPropertyException).
+ * vEvent getEventAtIndex(int index) : get an event object at given position in calendar.
+
+ Class: vEvent() - event object.
+ Public methods:
+ * Date getStartDate() : get the starting date for the event.
+ * Date getEndDate() : get the ending date for the event.
+ * String getTimezone() : get the timezone accociated with the event.
+ * PropertyMap getRuleProperties() : get a map of rules for the event.
+ * Array<String> getPropertyNames() : get an array of available property names.
+ * Object getProperty(String key) : get an event property by name.
+ Throws exception if property is not found (invalidPropertyException).
+ * String getHtmlValue(String key) : get an string property in HTML format (\n become <br/>).
+ Throws exception if property is not found (invalidPropertyException).
+
+ Class: PropertyMap() - property hashmap object for vCal and vEvent.
+ Public methods:
+ * Object getProperty(String) : get property value of property with key.
+ * void toString() : print an overview of the map's properties and values.
+ * boolean containsValue(Object value) : check if the property map contains a given value.
+ * boolean containsKey(String key) : check if the property map contains a given property name.
+ * int size() : the length of the property map.
+
+ There are also several "private" methods which are used internally by the reader/parser (but available).
+ Please refer to the code for overview/documentation on these.
+
+ License:
+ You may use this script, as long as this header is kept intact.
+ Released under the GNU General Public License Version 2 or later (the "GPL").
+
+ Usage example:
+
+ This example parses a iCalendar file and displays every property within it.
+
+ [Begin example code]
+
+ // Parse data
+
+ var myTestData = [some string content of iCalendar file or stream];
+
+ var myCalReader = new iCalReader(); // Construction of the reader object.
+ myCalReader.prepareData(myTestData); // Prepare and set the data for the parser.
+ myCalReader.parse(); // Parse the data.
+ myCalReader.sort(); // Sort the data.
+
+ // Read data
+
+ // Get the calendar properties.
+
+ var calendarInfo = 'Properties for calendar:\n\n';
+
+ var calendarPropertyNames = myCalReader.getCalendar().getPropertyNames(); // Get the list of availale properties.
+
+ for(var i=0; i<calendarPropertyNames.length; i++) { // Loop through all the properties.
+ var propertyName = calendarPropertyNames[i];
+ var propertyValue = myCalReader.getCalendar().getProperty(propertyName);
+ calendarInfo += 'Calendar property "'+propertyName+'" has value: "'+propertyValue+'"\n';
+ }
+
+ alert(calendarInfo);
+
+ // Get the event properties.
+
+ alert('About to show all events and their properties...');
+
+ var events = myCalReader.getCalendar().getEvents(); // Get all events.
+
+ for(var i=0; i<myCalReader.getCalendar().getNrOfEvents(); i++) { // Loop through all events.
+
+ var event = myCalReader.getCalendar().getEventAtIndex(i); // A single event.
+
+ // Get Javascript date for start and end time.
+ var startDate = event.getStartDate();
+ var endDate = event.getEndDate();
+ var timeZone = event.getTimeZone();
+
+ // Get rules.
+ var rules = event.getRuleProperties();
+
+ var eventInfo = 'Showing properties for event number '+(i+1)+'.\n\n'+
+ 'This event starts '+startDate+' and ends '+endDate+'\n\n'+'Timezone is: "'+timeZone+'"\n\n'+
+ 'This event have the following rules: '+rules.toString()+'\n\n';
+
+ var eventPropertyNames = event.getPropertyNames(); // Get the list of available properties.
+
+ for(var n=0; n<eventPropertyNames.length; n++) { // Loop through all the properties.
+ var propertyName = eventPropertyNames[n];
+ var propertyValue = event.getProperty(propertyName);
+ eventInfo += 'Property "'+propertyName+'" has value: "'+propertyValue+'"\n';
+ }
+
+ alert(eventInfo);
+
+ } // End for each event.
+
+ [End example code]
+
+HEADER END /*
+
+/*************** CLASS DEFINITIONS ***************************************************************************/
+
+ /**
+ * The main object for reading and parsing iCalendar data.
+ */
+function iCalReader() {
+ this.data = null; // Holds the iCalendar input data.
+ this.calendar = new vCalendar(); // The VCALENDAR object.
+ this.eventCount = -1; // Tracks the number of events in the calendar.
+ this.lastKey = null; // Reference to last proccessed key (property).
+}
+ // Class methods
+
+ iCalReader.prototype = {
+ /**
+ * Prepares and sets the data for the parser.
+ * @input calendar file data (string).
+ * @throws invalidCalendarException
+ * @return prepared data (array of lines)
+ */
+ prepareData: function(data) {
+ // Fix for malformed Mozilla VCALENDAR syntax.
+ this.data = data.replace(/[\r\n]{1,} ([:;])/g, '$1');
+ // Make array of all the lines.
+ this.data = this.data.split(/\r?\n/);
+ // Is it really a VCALENDAR?
+ if(this.data[0].indexOf('BEGIN:VCALENDAR') == -1) {
+ throw('invalidCalendarException');
+ }
+ return this.data;
+ },
+ /**
+ * Method that does the actual parsing.
+ */
+ parse: function() {
+ this.calendar = new vCalendar();
+ // Loop through all lines and analyze them.
+ for(var i=0; i<this.data.length; i++) {
+ var line = this.data[i];
+ // Get possible key/value for line.
+ var values = this.returnKeyValue(line);
+ key = values[0];
+ value = values[1];
+ switch(line) {
+ // It's a new event.
+ case 'BEGIN:VEVENT':
+ this.eventCount++;
+ type = 'VEVENT';
+ break;
+ // It's a calendar property.
+ case 'BEGIN:VCALENDAR':
+ case 'BEGIN:DAYLIGHT':
+ case 'BEGIN:VTIMEZONE':
+ case 'BEGIN:STANDARD':
+ type = value;
+ break;
+ // It's the end of the calendar property or event.
+ case 'END:VEVENT':
+ case 'END:VCALENDAR':
+ case 'END:DAYLIGHT':
+ case 'END:VTIMEZONE':
+ case 'END:STANDARD':
+ type = 'VCALENDAR';
+ break;
+ // Add data to the calendar or event.
+ default:
+ this.addToCalendar(type, key, value);
+ break;
+ }
+ }
+ },
+ /**
+ * Adds data to the calendar object from the parser.
+ * @input type of current item in parsing queue.
+ * @input key (name) of item property.
+ * @input value of item property.
+ */
+ addToCalendar: function(type, key, value) {
+ // Make a new event if we are not proccessing a current one and type is VEVENT.
+ if(type == 'VEVENT') {
+ try {
+ var event = this.calendar.getEventAtIndex(this.eventCount);
+ } catch(e) {
+ var event = new vEvent();
+ this.calendar.addEvent(event);
+ }
+ }
+ // If no key, add the current value to currently proccessing property's value.
+ if (key == false) {
+ key = this.lastKey;
+ var oldValue;
+ switch(type) {
+ case 'VEVENT':
+ oldValue = this.calendar.getEventAtIndex(this.eventCount).getProperty(key);
+ value = oldValue+this.trimStart(value);
+ break;
+ }
+ }
+ // Convert calendar date properties to javascript date.
+ if ((key == 'DTSTAMP') || (key == 'LAST-MODIFIED') || (key == 'CREATED')) {
+ value = this.toDate(value);
+ }
+ // Convert event date properties to own detailed mapping.
+ if (key.indexOf('DTSTART') > -1 || key.indexOf('DTEND') > -1|| key.indexOf('ALTDTSTART') > -1) {
+ var dateArray = this.toDateProperties(key,value);
+ key = dateArray[0];
+ value = dateArray[1];
+ }
+ // Parse any rules for item.
+ if (key == 'RRULE' ) {
+ value = this.makeRuleProperties(value);
+ }
+ // Add the data.
+ switch(type) {
+ // It's an event. Add property and value to event.
+ case 'VEVENT':
+ this.calendar.getEventAtIndex(this.eventCount).setProperty(key,value);
+ break;
+ // It's a calendar's property.
+ default:
+ this.calendar.setProperty(key,value);
+ break;
+ }
+ // Reference last proccessed key.
+ this.lastKey = key;
+ },
+ /**
+ * Make rule property map.
+ * @input string RRULE-string.
+ * @return PropertyMap of rules.
+ */
+ makeRuleProperties: function(value) {
+ var ruledata = value.split(';');
+ var rule = new PropertyMap();
+ for(var r in ruledata) {
+ var data = ruledata[r].split('=');
+ rule.put(data[0], data[1]);
+ }
+ return rule;
+ },
+ /**
+ * Parse a VEVENT type date to a own property map object.
+ * @input string property name (like "DTSTART;TZID=Europe/Oslo")
+ * @input string property value (like "20070719T220000").
+ * @return array(string DTSTART or DTEND, PropertyMap{ property JSDATE = [Date], property TZID = [string] } )
+ */
+ toDateProperties: function(key,value) {
+
+ var dtProperty = new PropertyMap();
+ dtProperty.put('TZID', 'Undefined'); // Default in case we don't find any timezone data.
+
+ // Convert time to JS-date and make property.
+ dtProperty.put('JSDATE', this.toDate(value));
+
+ // Get date info from key value.
+ var dtInfo = key.split(';');
+
+ key = dtInfo[0]; // Shorten the key to read DTSTART or DTEND not "DTSTART;TZID=Europe/Oslo".
+ dtProperty.put(key, value);
+
+ if(typeof(dtInfo[1]) != 'undefined') { // Timezone is specified.
+ // Get timezone.
+ var tzInfo = dtInfo[1].split('=');
+ var timezoneValue = tzInfo[1];
+ dtProperty.put('TZID', timezoneValue);
+ return new Array(key,dtProperty);
+ } else {
+ // Try get the calendar default TZ.
+ try { dtProperty.put('TZID', this.calendar.getProperty('TZID')); } catch(e) {}
+ try { dtProperty.put('TZID', this.calendar.getProperty('X-WR-TIMEZONE')); } catch(e) {}
+ return new Array(key,dtProperty);
+ }
+ },
+ /**
+ * Convert a iCal type timestamp to Javascript date.
+ * @input calendar type date string.
+ * @return javascript date object.
+ * @throws invalidDateException.
+ */
+ toDate: function(dateString) {
+ dateString = dateString.replace('T', '');
+ dateString = dateString.replace('Z', '');
+ var pattern = /([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{0,2})([0-9]{0,2})([0-9]{0,2})/;
+
+ try {
+ var dArr = pattern.exec(dateString);
+ var calDate = new Date();
+
+ var months = (dArr[2][0] == '0') ? dArr[2][1] : dArr[2];
+ months = parseInt(months)-1;
+ var days = (dArr[3][0] == '0') ? dArr[3][1] : dArr[3];
+ days = parseInt(days);
+
+ var hours = (dArr[4][0] == '0') ? dArr[4][1] : dArr[4];
+ hours = hours == '' ? '0' : hours;
+ hours = parseInt(hours);
+
+ var minutes = (dArr[5][0] == '0') ? dArr[5][1] : dArr[5];
+ minutes = minutes == '' ? '0' : minutes;
+ minutes = parseInt(minutes);
+
+ var seconds = (dArr[6][0] == '0') ? dArr[6][1] : dArr[6];
+ seconds = seconds == '' ? '0' : seconds;
+ seconds = parseInt(seconds);
+
+ calDate.setFullYear(dArr[1]);
+ calDate.setMonth(months);
+ calDate.setDate(days);
+ calDate.setHours(hours);
+ calDate.setMinutes(minutes);
+ calDate.setSeconds(seconds);
+
+ } catch(e) {
+ throw('invalidDateException');
+ }
+ return calDate;
+ },
+ /**
+ * Returns a possible value/key-set of a calendar data line.
+ * @input calendar data line (string).
+ * @return array of key,value.
+ */
+ returnKeyValue: function(line) {
+ // Regex for VCALENDAR syntax. Match letters in uppercase in the beginning
+ // of the line followed by VCALENDAR-type operator and value.
+ var pattern = /^([A-Z]+[^:]+)[:]([\w\W]*)/;
+ var matches = pattern.exec(line);
+ if(matches) {
+ return matches.splice(1,2);
+ }
+ // No key found, just return value.
+ return new Array(false,line);
+ },
+ /**
+ * Trims the beginning of string one whitespace character.
+ * @input string to trim.
+ * @return trimmed string.
+ */
+ trimStart: function(str) {
+ str=str.replace(/^\s{0,1}(.*)/, '$1');
+ return str;
+ },
+ /**
+ * Get the calendar object for the reader.
+ * @return vCalendar object.
+ */
+ getCalendar: function() {
+ return this.calendar;
+ },
+ /**
+ * Sorts the calendar events by time desc.
+ *
+ */
+ sort: function(){
+ this.calendar.sort();
+ }
+}
+
+/**
+ * Object to hold the calendar propterties.
+ */
+function vCalendar() {
+ this.vEvents = new Array();
+ this.properties = new PropertyMap();
+}
+ // Class methods
+
+ vCalendar.prototype = {
+ /**
+ * Gets the event array.
+ * @return array of event objects.
+ */
+ getEvents: function() {
+ return this.vEvents;
+ },
+ /**
+ * Gets the properties hashmap.
+ * @return PropertyMap.
+ */
+ getProperties: function() {
+ return this.properties;
+ },
+ /**
+ * Get the number of events.
+ * @return number
+ */
+ getNrOfEvents: function() {
+ return this.vEvents.length;
+ },
+ /**
+ * Sorts the array of events by time desc.
+ *
+ */
+ sort: function(){
+ this.vEvents = this.vEvents.sort(this.sortByDate);
+ },
+ /**
+ * Get list of available properties for the calendar.
+ * @return array of strings.
+ */
+ getPropertyNames: function() {
+ return this.properties.keys();
+ },
+ /**
+ * Get an event at a given index.
+ * @input int index.
+ * @return vEvent event.
+ */
+ getEventAtIndex: function(index) {
+ var evt = this.vEvents[index];
+ if(typeof(evt) == 'undefined') {
+ throw('eventNotFoundException');
+ }
+ return this.vEvents[index];
+ },
+ /**
+ * Get value of a given property.
+ * @input string property name.
+ * @return object value.
+ */
+ getProperty: function(property) {
+ try {
+ return this.properties.get(property);
+ } catch(e) {
+ throw(e);
+ }
+ },
+ /**
+ * Adds a vEvent object to the event array.
+ * @input vEvent event.
+ */
+ addEvent: function(vEvent) {
+ this.vEvents.push(vEvent);
+ },
+ /**
+ * Set a property to the calendar.
+ * @input string property name.
+ * @input object value.
+ */
+ setProperty: function(property, value) {
+ if(typeof(property) == 'string' && property != null && property != '') {
+ this.properties.put(property,value);
+ } else {
+ throw('invalidKeyNameException');
+ }
+ },
+ /**
+ * Sorting method for the events.
+ *
+ */
+ sortByDate: function(a, b) {
+ var x = a.getStartDate();
+ var y = b.getStartDate();
+ return ((x < y) ? -1 : ((x > y) ? 1 : 0));
+ }
+ }
+
+/**
+ * Object to hold the VEVENT propterties.
+ */
+function vEvent() {
+ this.properties = new PropertyMap();
+}
+ // Class methods
+
+ vEvent.prototype = {
+ /**
+ * Get start time for event.
+ * @return Date start.
+ */
+ getStartDate: function() {
+ var dt = this.getProperty('DTSTART');
+ return dt.get('JSDATE');
+ },
+ /**
+ * Get start time for event.
+ * @return Date start.
+ */
+ getAltStartDate: function() {
+ var dt = this.getProperty('ALTDTSTART');
+ return dt.get('JSDATE');
+ },
+ /**
+ * Get end time for event.
+ * @return Date end.
+ */
+ getEndDate: function() {
+ var dt = this.getProperty('DTEND');
+ return dt.get('JSDATE');
+ },
+ /**
+ * Get timezone for event.
+ * @return string timezone.
+ */
+ getTimeZone: function() {
+ var dt = this.getProperty('DTSTART');
+ return dt.get('TZID');
+ },
+ /**
+ * Get rules for event.
+ * @return PropertyMap of rules.
+ */
+ getRuleProperties: function() {
+ var r;
+ try {
+ var r = this.getProperty('RRULE');
+ } catch(e) {
+ r = new PropertyMap();
+ }
+ return r;
+ },
+ /**
+ * Get a property by name.
+ * @input string property
+ * @return property value.
+ * @throws invalidPropertyException.
+ */
+ getProperty: function(property) {
+ try {
+ return this.removeSlashes(this.properties.get(property));
+ } catch(e) {
+ throw(e);
+ }
+ },
+ /**
+ * Sets a property with given name and value.
+ * @input string property name.
+ * @input object value.
+ */
+ setProperty: function(property, value) {
+ if(typeof(property) == 'string' && property != null && property != '') {
+ this.properties.put(property, value);
+ } else {
+ throw('invalidKeyNameException');
+ }
+ },
+ /**
+ * Get property with given key in HTML-format.
+ * @input string property name.
+ * @return HTML-string.
+ */
+ getHtmlValue: function(property) {
+ prop = this.removeSlashes(this.properties.get(property));
+ if(typeof(prop) == 'string') {
+ prop = prop.replace('\n','<br/>', 'g');
+ return prop;
+ } else {
+ return prop;
+ }
+ },
+ /**
+ * Get a list of property- names for this event.
+ * @return array of strings.
+ */
+ getPropertyNames: function() {
+ return this.properties.keys();
+ },
+ /**
+ * Removes slashes from a string
+ * @input string.
+ * @return fixed string.
+ */
+ removeSlashes: function(str) {
+ if(typeof(str) == 'string') {
+ str = str.replace('\\n','\n', 'g');
+ str = str.replace('\\,','\,', 'g');
+ str = str.replace('\\;','\;', 'g');
+ }
+ return str;
+ }
+ }
+
+/**
+ * Hashmap class to hold properties
+ * for calendar and events.
+ */
+function PropertyMap() {
+ this.size = 0;
+ this.properties = new Object();
+}
+
+ // Class methods
+
+ PropertyMap.prototype = {
+ /**
+ * Add or update property.
+ */
+ put: function(key, value) {
+ if(!this.containsKey(key)) {
+ this.size++ ;
+ }
+ this.properties[key] = value;
+ },
+ /**
+ * Get property with given key.
+ * @input property name.
+ * @return object.
+ * @throws invalidPropertyException.
+ */
+ get: function(key) {
+ if(this.containsKey(key)) {
+ return this.properties[key];
+ } else {
+ throw('invalidPropertyException');
+ }
+ },
+ /**
+ * Alias for get method to keep consistancy in syntax in regard to the other classes.
+ * @input property name.
+ * @return object.
+ * @throws invalidPropertyException.
+ */
+ getProperty: function(key) {
+ try {
+ return this.get(key);
+ } catch(e) {
+ throw(e);
+ }
+ },
+ /**
+ * Remove property with key.
+ */
+ remove: function(key) {
+ if( this.containsKey(key) && (delete this.properties[key])) {
+ size--;
+ }
+ },
+ /**
+ * Check if a property exists.
+ */
+ containsKey: function(key) {
+ return (key in this.properties);
+ },
+ /**
+ * Check if a value exists.
+ * @return boolean.
+ */
+ containsValue: function(value) {
+ for(var prop in this.properties) {
+ if(this.properties[prop] == value) {
+ return true;
+ }
+ }
+ return false;
+ },
+ /**
+ * Get all the values.
+ * @return array of values.
+ */
+ values: function () {
+ var values = new Array();
+ for(var prop in this.properties) {
+ values.push(this.properties[prop]);
+ }
+ return values;
+ },
+ /**
+ * Get all the keys.
+ * @return array of keys.
+ */
+ keys: function () {
+ var keys = new Array();
+ for(var prop in this.properties) {
+ keys.push(prop);
+ }
+ return keys;
+ },
+ /**
+ * Get the size of map.
+ * @return int size.
+ */
+ size: function () {
+ return this.size;
+ },
+ /**
+ * Clears all properties.
+ */
+ clear: function () {
+ this.size = 0;
+ this.properties = new Object();
+ },
+ /**
+ * Gives a string representation of this propertymap.
+ */
+ toString: function() {
+ var str = '';
+ for(var prop in this.properties) {
+ str += prop+'='+this.get(prop)+', ';
+ }
+ return '{ '+str.substring(0,(str.length-2))+' }';
+ }
+}
+/*************** END iCalReader.js ******************************************************************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/index.html Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,15 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <script type="text/javascript" src="WRTKit/WRTKit.js"></script>
+ <script type="text/javascript" src="Main.js"></script>
+ <script type="text/javascript" src="iCalReader.js"></script>
+ <link rel="stylesheet" href="oscon.css" type="text/css">
+ <META NAME="Generator" CONTENT="Nokia WRT plug-in for Aptana Studio 2.0.0" />
+ </head>
+ <body onload="init()">
+ </body>
+</html>
\ No newline at end of file
Binary file OSCON/logo.png has changed
Binary file OSCON/oscon-home.png has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/oscon.css Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,33 @@
+/* Feed item date */
+.FeedItemDate {
+ font-style: italic;
+}
+
+/* Feed item text */
+.FeedItemDescription {
+ padding: 4px 0px;
+}
+
+/* Feed item links */
+.FeedItemLink {
+ font-weight: bold;
+}
+
+/* Anchor tags in the context of a feed item link */
+.FeedItemLink a {
+ text-decoration: underline;
+ font-weight: bold;
+ color: rgb(255,255,255);
+}
+
+/* Focused anchor tags */
+.FeedItemLink a:focus {
+ background: rgb(65,131,68);
+ color: rgb(255,255,255);
+}
+
+/* Focused anchor tags */
+.FeedItemLink a:hover {
+ background: rgb(65,100,68);
+ color: rgb(255,255,255);
+}
Binary file OSCON/session.png has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/OSCON/test.html Tue Jul 21 12:22:37 2009 +0100
@@ -0,0 +1,12 @@
+<html>
+<body>
+<script language="JavaScript">
+function function1() {
+ var myElement = document.createElement('<div style="width:300; height:200;background-color:blue;"></div>');
+ document.all.myDiv.insertBefore(myElement);
+}
+</script>
+<button id="myButton" onclick="function1();">Insert element</button>
+<div id="myDiv" style="width:300; height:200;"></div>
+</body>
+</html>
\ No newline at end of file