The Khan Academy platform is Open Source and you can setup your own custom installation, or contribute to Khan Academy platform development by setting up your very own development environment.

I have setup the Khan Academy platform development environment on Debian 6 and Ubuntu 11.04 so far.

I'll concentrate on Debian 6.

First setup a new install of Debian 6, or use an existing install. There are a few software requirements.

If you don't already have them install the basics:

apt-get install build-essential unzip python 2.5 python-setuptools python2.6-dev python-dulwich

View full post

posted in
Cash Costello posted a great tutorial to quickly get Elgg collecting stats with Piwik by creating a new simple plugin to extend the analytics view.

We are using Piwik with some Elgg sites and we do this in a similar way by using a plugin that holds all the custom code for that particular site.

Piwik is a great open source tool that lets you collect statistics similar to Google Analytics and also allows customization and integration. We have done some custom integration with Piwik and Elgg via the Piwik plugin API.

View full post

Piwik is an Open Source web analytics platform. This gives you similar statistics as Google Analytics with full control over all aspects of the data collection and reporting.

Piwik gives you a huge amount of control over the collection and display of statistics and has a great plugin API for customization and integration. I used this to do some direct integration with Elgg. This allowed me to build reports based on specific inteactions within Elgg, and to collect stats such as most active users, most interesting content, and to build client specific reports for user activity.

View full post

posted in ,

jQuery File Upload [aquantum-demo.appspot.com]

There are many enhanced HTML/Javascript/Ajax/Flash file upload widgets you can use. The landscape is constantly changing and the newer widgets are offering interesting new features based on HTML 5 on browsers where it is available.

I have reviewed two options, Jquery File Upload and Plupload. I decided on Jquery File Upload due to its greater simplicity and ease of customization.

Jquery File Upload is a jQuery UI plugin, which takes advantage of HTML 5 features where available, while still offering an acceptable user experience on browsers that do not support HTML 5 file upload yet. The jQuery UI Plugin design is very straightforward to extend and override the default behavior, and produces very clean code. If you want the easiest to integrate, and extend, use Jquery File Upload.

View full post

Jquery Create Event [www.erichynds.com]

The jQuery live event handler can monitor the DOM for changes and add event handlers to those elements that match a selector. It can not bind a function that fires when the DOM changes to check if a specific element has been added. Often when you need to work with third-party code, you might need to wait for an element to be added as the result of an Ajax request.

In this case you can use the create-event plugin. You can bind the create event to the eventual parent element where a new element will be created and trigger whatever code you need that relies on the new element's existence.

You can use this to add a plugin or just run some code:

View full post

posted in ,
I was trying to debug a 3rd-party script, and analyze its behavior to extend it without modifying the original code. The original code was obfuscated since it requires a license agreement.

All of the functions and variable names were obfuscated so it was difficult to determine exactly what was going on. It was clear there were some data structures containing the information that drove the script behavior but I did not know their names.

So I needed to search through the global namespace to track down the variables I needed to access to extend the script behavior. I searched around google and there are a few different solutions.

View full post

posted in
A quick search will turn up many JQuery plugins that can produce a tooltip effect for your web site. The trick is narrowing this down, and finding the one that is the most effective, and productive solution.

My research lead me to JQuery Tools, an add-on library for JQuery that contains the Tooltip effect, along with several other useful UI elements such as forms, overlays, tabs, scrollable, along with mousehweel and back button control.

I like the JQuery Tools tooltip because it is very simple, and can be added easily on page load, or added to dynamically created elements. In addition you can dynamically locate the tooltip depending on the relative location of the mouse and the browser window. The tooltips also can easily contain any HTML content and be populated from a span or div related to the trigger element.

View full post

Since MS Office 2007, OpenXML formats have been available, making it a little easier to generate files that are compatible with MS Office.

Recently I needed to build and Excel file from a web application. The most common solution is to generate a CSV or TSV file, which can then be imported into Excel. In my case, the client wanted multiple worksheets, so I searched and found PHPExcel. This library provides simple tools to build OpenXML files. There are also libraries for Word and Powerpoint.

Here is how I solved the problem:

$objPHPExcel = new PHPExcel();

View full post

posted in ,

In building a Facebook application and connected web site with the latest SDK, there isn't a built in function to show the permission request popup screen when a user visits your canvas page, or when a user accepts an applicaton invitation from a friend.

 With the old SDK you could call the require_login function. There is no analog in the new SDK. Luckily Google and a geneous programmer provide the answer. Quick Start on the New Faceook API shows the way.

 I took that code and created a new require login function.

View full post

My latest project was building a graph based on user entered data. With the HTML5 Canvas, it is possible to build well designed graphs in Javascript. I choose jQuery with jqPlot for this project.

I choose jQuery becase it allows me to get some powerful effects with very little code. I choose jqPlot from several choices that are compatible wit jQuery for the same reason.

I created a demonstration that takes a matrix of data and returns a line graph of the user's progress. The questions on the demo are from a book by a partner on an exciting, soon to be announced, new site by Solution Grove. The book is The Get it Done Guy by Stever Robbins.  

View full post

posted in , ,

Microsoft Education Labs has a free Office Addon for Moodle. This addon allows teachers or the owner of a Moodle course to upload documents to their course and access Moodle documents from within Office. Once the addon is installed to Office two items are added to the file menu: Open from Moodle, and Save to Moodle.

 The user configures the address of their Moodle server and logs in with their Moodle login. After this the user can access Moodle files from Office. 

 The addon works with Office 2003 and 2007 and Moodle 1.8.x and 1.9.x. The My Courses should be installed for the addon to work. No additional Moodle modules are required for the addon to work.

View full post

The Certificates module for Moodle will allow granting certificates based on completion of a Moodle activity.It allows uploading graphics and setting the style of the generatied certificate. Once a user has met the minimum criteria they can download a PDF and print their certificate.

There are several options for setting criteria for granting a certificate. These include overall course grade, time spent in the course, and ability to require one or more activities be completed, optionally with a minimum grade for the activities. Any of these requirements can be combined to determine when a student receives a certificate.

 Images can be uploaded to style the borders and include a watermark if desired. A signature image can be included, and of course, a logo can be uploaded.

View full post

posted in
Following up on our MNET Support plugin for Elgg, we also developed an extension to Moodle's MNET functionality to allow posting information from Moodle into the eportfolio. In our case we used ELGG 1.5 as the eportfolio. For Moodle 1.9.x, only posting files to the e-portfolio is supported. We needed to send information on a student's activities to the eportfolio, the Elgg "River" view which shows a history of student activities.

We added a new post_status method to Moodle's mnet enrol library that allows us to push updates from Moodle to ELGG. Once we had this function enabled we modifed a few of the Moodle features to call this function to update the eportfolio. These included course enrollment , successful completion of a questionnaire, earning a certificate, and posting to a forum. A simple function call for each action is all that is needed. To find the correct place in the code, I noticed add_to_log was called with similar information for the different actions so I added the code for Elgg posting in the same places. Since the users are already authenticating using MNE, we can match the corresponding user on Elgg so that the status goes to the correct student's River.

View full post


(photo by Oliver Widder)

At Solution Grove we are always experimenting with new ways to interweave web applications. We previously have created a Facebook API suport package for OpenACS that allows supporting Facebook applications with an OpenACS backend server. I am now working on Facebook Connect support which will allow users of an OpenACS site to publish entries such as status updated and photos to their Facebook page from an OpenACS application.

The first application will be a simple blog that will allow the user an option of publishing the blog or a summary to their Facebook page.

The next development will be a general "Share" button to allow any OpenACS content to put shared with Facebook users. 

View full post

Recently I had a project to integrate Elgg and Moodle. In an earlier post I discused the single sign on feature where users could login to Elgg and be automatically signed into Moodle when they clicked the link to Moodle pages.

In addition I needed to make the themes for Elgg and Moodle match. This is quite challanging. As of Moodle 1.9 course layout still uses some tables which make duplicating a similar layout to Elgg difficult.

In addition I had to make the top navigation/toolbar match between Elgg and Moodle. This was interesting because the menus in the toolbar were generated dynamically by Elgg based on the user identity. To accomplish this I created an AJAX based solution using the Yahoo UI library. I created a custom Elgg view that just provided the toolbar without any additional content. This was added on the fly to the top of the Moodle pages for a seamless experience.

View full post

posted in

We recently connected ELGG and Moodle using the Moodle Network feature. This provides an API to allow single-sign-on between multilple servers. This can include multiple Moodle server, or other servers that support the MNET API.

For this project we needed ELGG to be the primary authority so users would sign into ELGG first, and be able to access Moodle by clicking a link that would provide the proper information to Moodle to log them into Moodle. 

To the end user the integration is seamless. They click a link and the Moodle site can appear as integrated into the ELGG site. This requires some fiddling with the HTML and CSS to get Moodle and ELGG themes to be consistent. I address this in another post.

View full post

posted in

I have been exploring making a new theme for Moodle. There are already some good resources on creating a new theme in the Moodle documentation. These cover customizing the CSS to make changes to most parts of Moodle.

I did not find any good docs on actually changing the templates for Moodle. In the current Moodle 1.9.x design the index page and other course pages don't entirely share layouts. In addition Moodle 1.9.x uses table based layout so styling the boxes can be a little tricky.

The first problem I had was getting the spacing between the columns on the home page and the course pages consistent. Course pages have a container in the middle column that you can style, but the index page does not. It has a div that does not have a css id or class. 

View full post

Last week I looked into automating web-based user interface tests using Selenium Remote Control. This is a Java based server that listens for HTTP requests containing test commands. These commands are used to drive a web browser with a Javascript adapter. It works with IE, Firefox, or Safari depending on which operating system the Remote Control server is running on.

It was very easy to setup, download the Selenium Remote Control  java code. On Linux you can just type "java -jar selenium-server.jar" and the server starts up, waiting for commands on an HTTP server listening on port 4444.

View full post

Several of our .LRN client wished to print attendance or completion certificates after a user had completed and online or in-person course.

We developed an online system integrated with .LRN and the Attendance package to allow administators to choose which users had completed the course, and to layout and print certificates. We used the Reportlab rml XML format to define the templates and used tinyrml2pdf to generate the PDF files for each certificate.

Here is a demonstration of the system.

 

 

View full post

posted in

Connectivism Course [ltc.umanitoba.ca]


(photo by RonAlmog of Flickr)

I am participating, in a non-credit capacity, in the massively online course Connectivism and Connective Knowledge. This is a great experiment to apply the ideas of connective knowledge to a course about the same topic. As a programmer, I enjoy the recursive nature of that. The course started this week. I am a little behind on my homework but I am catching up. My first task was to post an introduction on the Moodle forum for the course.

 Here is what I posted to the forums:

I am Dave Bauer from a small town outside Albany, New York. I am chief architect at Solution Grove, a company that provides online learning technology, among other things.

I have been interested in learning pretty much ever since I got online. I have followed a networked, hyperlinked path all around learning and learning technology, and hopefully this course will give me even more to think about, and help me organize me thinking.

This course will be a success for me if I can take what I have learned, and actually explain it to someone else!

I have actually followed a networked learning path to my current job. I was exploring online for ways to improve a retail web site I ran about 10 years ago. I discovered an online book,  Philip and Alex's Guide to Online Publishing, and after reading that, I changed my focus. The main premise (besides the software behind it) is that a community is a set of people focused on learning. So from there I learned about online community software and eventually taught myself enough to find a full time job building interesting online communties, often focused on some form of learning.

I hope to be able to learn from this course how to make better software tools for online learning by understanding how the learning half of that actually works.

View full post


(photo by phatman of flickr)

Another reference to go along with my previous post notes how Richard Feynman's description of the NASA engineering process,

"The usual way that such engines are designed (for military or civilian aircraft) may be called the component system, or bottom-up design"

coincides with good programming practices.  Jake Voytko notices that Paul Graham says something similar in ANSI Common Lisp,

View full post

posted in

Don't Bother with SEO. Did it Ever Work? [www.cincomsmalltalk.com]


(photo by Irini Soulki of flickr)

 

Jeff Jarvis says that as Google makes search more personalized, search engine optimization will be less relevant.

"What does that mean to brands? The world gets confusing once more. But I think it means that true relevance becomes more important than SEO tricks"

James Robertson  says it has been irrelevant for awhile.

"Trying to "optimize" for Google (et. al.) is a game whose relevance is vanishing."

I agree, it has always been irrelevant if you were  actually providing useful content for your visitors.

View full post

posted in ,

2-3-98 Moodle Recap [confluence.delhi.edu:8443]


(photo by maxinstosh of flickr)

I attended the 2-3-98 Open Discussion on Technology in Education conference last week. In many cases, Open Source is becoming just another option when evaluating software for use in education. Of course, there are still objections from some, but more and more software in compared on the solution it can provide, without regard for the license. One day of the conference was devoted to Moodle, and it was clear that Moodle was regarded as a superior solution by those that chose it. There was not any bias in choosing open source or proprietary solutions noted by those that chose Moodle. That is, they chose Moodle for the the features it provides.

View full post


(photo by 2-3-98 Conference)

2-3-98 Conference: An Open Discussion on Technology in Education will address Open Source in Higher Education, and include a second day Moodle Moot. I'll be attending the conference June 19 & 20, 2008 as SUNY Delhi. SUNY Delhi is  using Moodle for their unversity LMS.

One of our clients, Stephen Wilmarth, from the Center for 21st. Century Skills will be giving a presentation on how they are using Moodle to conect high school students in CT and in China!

This should be a good opportunity to both learn more about Moodle, spread the word on LAMS and ELGG integrated with Moodle in an amazing setting. According to the web site: "Delhi, NY is nestled in the Catskill Mountains in a land of wooded hills and fertile green valleys with streams, covered bridges, well-tended dairy farms and beautiful vistas. Join us in a great setting for a great conference!"

View full post

What makes a design "Googly"? [googleblog.blogspot.com]


(photo by uptal of flickr)

Web application designer's can take inspiration from the Google User Experience Design Principles. These 10 guidelines are great to keep in mind and help you think about the people who will have to use your web application every day.  The principles tie directly into the Ten things Google has found to be true.

The first two are probably the most important to us here at Solution Grove.

1. Focus on people—their lives, their work, their dreams.
2. Every millisecond counts.

View full post

Session Timout Usability [www.codinghorror.com]


(photo by FABIOLA MEDEIROS of flickr)

Jeff Atwood is frustrated with web sites that timeout a session and lose the data that was typed into a form. There is a huge comment thread discussing the various ways around this.  Most of them are overly complex and try to use tricks like refreshing the page using AJAX. The simple answer of course is, don't lose the user's work.

Some commenters say you should just lock your computer, but that obviously is not appropriate in all situations. Short session timeouts are not the right answer for all situations either. 

Sessions timeouts are necessary for security in some applications, most people know about online banking, and really any application that expects users from a shared computer. The developers and administrators of a site need to balance security and usability and decide on the right session timeout.

View full post


(photo by jurvetson of flickr)

Gustavo Duarte makes a good observation about engineering and software. He compares some information in Richard Fenyman's report on the Challenger Disaster and software design. The most interesting parts are how the avioncs where designed.

The software is checked very carefully in a bottom-up fashion. First, each new line of code is checked, then sections of code or modules with special functions are verified. The scope is increased step by step until the new changes are incorporated into a complete system and checked. This complete output is considered the final product, newly released. But completely independently there is an independent verification group, that takes an adversary attitude to the software development group, and tests and verifies the software as if it were a customer of the delivered product.

 The testing step is the most important here.Each small part is tested as it is built to ensure it is correct before moving on to the next part. Software projects can learn from this. It is an interesting data point considering the quality level that is required for the Space Shuttle. All projects should work towards a goal of this level of quality. Testing at each phase can help improve quality and inform the design as the tests reveal shortcomings and expose new ways of thinking about a problem.

View full post


(photo by depone of flickr)

Scott Leslie blogged about a new wiki he set up to keep track of content conversion tools for course management systems. He is asking for help to complete it. 

This is necessary since no two CMS support import and export in exactly the same way. We have felt Scott's pain, the .LRN LORS (Learning Object Repository Service) package had to have special import procedures for each version of Blackboard we wanted to support import from.  It looks like there is still a long way to go in learning content interoperability.  

The cynical view is that there is very little ecconmic driver for any particular vendor to really get the bugs out of thier export.  Yes, it has to exist on the spreadsheet, work in the sales demo, or the product won't be bought. However, its years after the system is installed before users really start using export and by then the CMS Vendor has thier money.

View full post


(photo by dcjohn of flickr)

Jakob Nielson writes about the issues facing designers who want to design Web user interfaces that are easy to use. He promotes user testing and defines 3 levels of a designer-user continuum. The first is where the user is the designer; the second, where the designer understands the product or domain; and the third, where the designer is unfamiliar with the domain. He then gives some examples of projects and problems that could occur.

There is one example that I did not quite understand. He mentions a Web site selling suits and says the designers were too close to the people who make the suits, instead of the people who wear suits. It seems to me, you could probably find a designer who could, at least, pretend he wanted to buy a suit while designing the user interface. Of course, you have to remember to do this.

View full post

posted in , ,

Google Reader now fully supported by screenreaders using WAI-RIA specification.

 

View full post

posted in ,

Clickpass, simplified OpenID [www.clickpass.com]

Clickpass is a new service that helps you manage OpenIDs. Once you signup you can use one click login on sites that support it. By default it will generate a unqiue OpenID address for every site you sign up on, so you are anonymous unless you choose to share your information with that site.

In addition they have developer tools to add Clickpass support to your web site. This looks like a good step to making OpenID easier to use. 

View full post

posted in ,

(photo by Photo-Mojo of flickr)

I am interested in how games can be used in learning. Pablo recently announced the release of the e-Adventure engine. This is an adventure game authoring environment and engine for building educational games or simulations. It includes an assessment component and can integrate with an LMS that supports IMS-LD. It also supports adaptive learning and it is Open Source.

Another interesting project I just discovered is Platinum Arts Sandbox. The goal of this project is focused on using the platform to teach kids how to make games. This is a fully 3D game engine and again it is Open Source.

View full post

Distributed Social Networks [opencontent.org]


(photo by mattkeefe of flickr)

David Wiley posts about fully distributing the social network. This basically means empowering blogs or other personal Web sites to make the connections directly, without a centralized service such as Facebook.  One of the ideas that makes this work is URLs are people, too

Standards like OpenID, XFN, and  hCard can be used to tie all of this together.  The DISO-Project is working on the code to make this happen now. They are starting by building on Wordpress, but any Web platform should be able to support these formats.

View full post

posted in ,

(photo by pinkbelt of flickr)

OERCommons is a site organized around searching and sharing open educational resources.  They have partnered with major open education resource providers to build one community around sharing and reusing these resources.

Update: Annorate is a web service for sharing ratings and annotations of web pages. The source code is available so you can run your own annorate service. 

View full post

posted in

(photo by art_es_anna of flickr)

There is often a need to take content from the web and share it in a different format. For one client, we built a web based report. The client also wanted the report to be able to be downloaded and viewed using Microsoft Word. To do this we decided to export the HTML results of the report as an RTF document.

A quick search of the web will show there aren't too many options to convert HTML into an RTF document that will work with modern CSS based HTML. One program that can do this is OpenOffice. Of course, OpenOffice can convert from any format it can read in, and can convert to any format it can save ,so this technique is useful for many file format conversions.

View full post


(photo by CmdrGravy of flickr)

Step by step is a YUI-based tool that builds guided walkthroughs of Web applications.  This looks like a great tool to build documentation right into a Web application.  A context-sensitive help system could be built with this tool.  The script is available under a Creative Commons license.

The positives are it is much more interactive than a video or screencast and the users stay right on the Web site.   

The negative is that, at least for now, a programmer has to be involved in creating the experience.  A screencast or documentation page can be created by a nonprogrammer.  However, we could write a front end if someone wanted to use it extensively.

View full post


(photo by FSEE-INFO of flickr)

Scribd has a new feature they call iPaper. This basically involves converting various document formats, including word and powerpoint into embeddable Flash content with read-only access.

Many of our clients would like to display content originally created in MS Word on their Web sites. In most cases, copy/paste from Word into a WYSIWYG HTML editor like Xinha or TinyMCE is problematic at best. This is especially true if the original document uses tables or other advanced features besides simple paragraphs and fonts.  We have worked hard at trying to add documentation on how to do this, but Scribd may offer an easier alternative in some cases.

View full post


(photo by by ecstaticist)

George Siemens outlined some concrete steps to get started with connectivism/networked learning.

Number 4 is interesting!

"4. To be networked, resources and conversations need a degree of openness. This is one of the drawbacks of an LMS. Learners need to develop comfort with transparency and see the impact. In a recent course on digital literacies, Peter Tittenberger and I found learners can be uncomfortable with posting thoughts in an open public forum. There is something personal (vulnerable?) about learning that certain individuals prefer to keep "secure". To balance openness and privacy, tools exist, such as ELGG, that allow educators to create mini-networks with greater privacy than the open web."

By default, our MEL product configures ELGG as a closed "walled-garden".  We made this decision because the target audience includes the 6-12 grade range.  One of ELGG's strengths is access control, allowing users to choose to restrict access even within the school community. MEL creates an ELGG community for each Moodle class so students can set blog posts, files, etc. as visible only to one class, or even just for their teacher.

View full post


(photo by Yahoo UI Data Table Examples)

Yahoo UI 2.5.0 was recently released and it looks like they are moving towards a highly functional, accessible data table that could make our Ajax Listbuilder work even better. 

The DataTable page says:

"The DataTable control provides a simple yet powerful API to display screen-reader accessible tabular data on a web page. Notable features include sortable columns, pagination, scrolling, row selection, resizeable columns, and inline editing."

The promise of screen-reader accessibility is very encouraging. All along I have seen that Yahoo UI has been working on accessibility with their Javascript toolkit.

View full post

Ajax and Accessibility [openacs.org]

As we add Ajax-powered applications for our clients and share the code with others, there is some demand to make these features available within OpenACS and .LRN. .LRN, in particular, has a goal of meeting WAI accessibility guidelines. It is very challenging to meet these guidelines with Ajax-powered systems.

At the latest OpenACS/.LRN conference, we had a discussion on new Ajax applications and accessibility. I created a wiki page to document what we learned, including links to resources and best practices, as well as draft proposals from WAI for accessible rich internet applications.

View full post

I got back this week from the OpenACS/.LRN conference in Guatemala. There was a great bunch of interesting people there and there was a lot to learn.

I presented on an AJAX-enhanced data table, known in OpenACS as Listbuilder. The video and slides are available. The user interface was inspired by DabbleDB, which provides a collaborative alternative to spreadsheets for managing data. In our case, we needed to integrate this level of interactive data manipulation with an existing .LRN system. Data privacy was also an issue, so everything must be hosted internally. 

View full post

Phun learning physics [www.acc.umu.se]

Phun is a 2-D physics modeling environment, Windows only. A Mac OS X version is in the works according to the FAQ. It looks like another tool in the spirit of Squeak Etoys, Scratch. Scratch is generally geared more towards making games, while Etoys can be used for simulation as well as games. Of course, in any programming environment you can create anything with enough imagination.

View full post


(photo by daveb)
This quote from Mary Lou Jepson, the CTO of OLPC and designer of the amazing, low power, sunlight readable display inside it, shows why the OLPC will change the world while Intel just wanted to sell CPUs.

"Mary Lou Jepsen: Where to start: Classmate is more expensive, consumes 10 times the power, has 1/3 the wifi range, and can't be used outside. Also, the Classmate doesn't use neighboring laptops to extend the reach of the internet via hopping (mesh-networking) like the XO does. So not only is the XO cheaper than the Classmate, the XO requires less infrastructure expenditure for electricity and for internet access. In Peru we can run off on solar during the day and handcrank at night for an additional $25 or so per student – this is a one-time expense – the solar panel and the crank will last 10 or, perhaps, 20 years. Just try running electricity cables up and down the Peruvian Andes for that cost while making sure it's environmentally clean energy. The Classmate isn't as durable as the XO, and its screen is about 30% smaller, the batteries are the type that can explode and only last 1-2 years and can't be removed by the user and harm the environment. The batteries are expensive to replace: $30-40 per replacement. The XO batteries last for 5 years and cost less than $10 to replace. Finally, the XO is the greenest laptop ever made, the Classmate isn't – this matters a great deal when one proposes to put millions of them in the developing world."

View full post

posted in ,

(photo by Sociable Media)

Beyond Bullet Points is a Web site and book that helps you make more effective presentations. I just watched the first -five-minute screencast to help me get started using the story template you can download from the Web site.

Just going through the video and applying the ideas to my presentation, I was able to iterate quickly from a boring, traditional theme to a more interesting take on the same information. There's much more there but this is a great start. 

View full post

Ajaxian mentions SafeErb for Rails, an add-on to help secure that user input is safe. It does so by checking if you explicitly call a certain method to escape the user content.

OpenACS, the base for .LRN, has been doing this for awile now. We took a different approach. All content is escaped by default, and the programmer must decide when to let through unescaped content. Either way it's something all Web frameworks should support if they allow users to enter HTML. 

View full post

Printing the Public Domain [www.publicdomainreprints.org]


(photo by trint)
Public Domain Reprints calls itself "an experimental non-commercial project to re-print public domain books". This sounds like a great idea to me. Of course, not everyone can afford to reprint these books and they are all available online for free. It definitely is more affordable than printing it yourself on your inkjet printer. Saves time and the result is much nicer, too.

View full post

posted in

Intelligent Web App Email Handling [www.michaelnygard.com]

Should Email Errors Keep Customers From Buying? describes a robust way to handle email in Java. The main point is very clear - don't leave a web visitor waiting while the application server attempts to send an email to them.

I am surprised this is even an issue in 2007. I suppose not everyone has gotten the message (no pun intended!) that OpenACS has used a background thread to deliver email for years. It uses a simple queue that attempts to save the messages, batch them up, and send them to a local SMTP server regularly. Usually, it is done at least every 5 mins or so, but that depends on how much email you are sending out.

I can't imagine it's that hard to run a local SMTP server in this modern age. It doesn't seem necessary to rewrite a SMTP server within Java instead of just running something like Postfix on the same box. Postfix will then make sure the email gets delivered to the intended recipient. 

View full post

Recently, there have been blog posts describing Agile programming methods and the essential role of collaboration between the customer and the developers. Check out Professional Responsibility by James Shore, author of the Art of Agile Development, and Business software is Messy and Ugly by Bob Martin.

A crucial point of collaboration is defining the schedule. The customer and developer work together to write stories to define what will be developed. The customer prioritizes the order stories that are developed. It is up to the developers to, then, implement the stories.

View full post

10 Blogs You Should Be Reading [halfanhour.blogspot.com]

Stephen Downes presents his personal list of 10 blogs worth reading that did not win an Edublogs award. There looks like some very interesting stuff here.

One example is OU Profiles  Facebook application. This allows folks to let others know what Open University courses they are studying. This is a good complement to our Open Learning Search Facbook application that allows users find, then share, open learning content.

View full post

posted in ,

Yahoo Shortcuts Plugin for Wordpress [www.ysearchblog.com]


(photo by katechaux)

Yahoo Shortcuts are links to interesting, hopefully related content. Yahoo has released a plugin for the popular blogging platform Wordpress. This plugin scans the content of your post while you write it and shows suggested items to link to. The suggestions can include links to products, companies, Flickr photos, and more. The author always has the option to decide what shortcuts to add in. The plugin is backed by the Yahoo Term Extraction Service.

So far there are no ads in this content from Yahoo. A comprehensive review of the plugin is on Search Engine Journal.

View full post

Open Learning Search [www.facebook.com]


(photo by smellyknee)

We have been interested in Open Courseware and other open leanring resources for a long time now. Dave Bauer and Caroline Meeks attended the Open Education Conference in 2006 and we were inspired.

Time and again research in education show that people learn better when they work together, and as we work with OpenACS, the obvious place to help would be to build communities around open lear(ning materials, but it seemed tricky to build a critical mass of users to make the community successful. Ideally users would form their own groups and help each other take advantage of these resources.

View full post

posted in ,

Email enhanced collaboration? [www.mindthis.net]

(photo courtest of dangering) Lars Ploughman follows up to his 10-to-1 email rules post. Basically email is never ideal as the only collaboration tool, but should be part of an overall collaboration toolset. OpenACS is a collaboration tool that offers some good email integration while preserving the benefits of a collaboration toolset. For example, the discussion forums can be email enabled to send out new posts by email and to accept replies to those emails. This way, someone can refer later to a post by URL and all the email is archived in one place, and indexed for full text search. Other collaboration tools in the OpenACS platform can be enabled in the same way. Almost every applicaiton supports notification of new items and changes by email. Another tool that is becoming more common is RSS syndication. In this way the user chooses to be notified in a news reader instead of by email. To reply from there they can just click on a link and go to the collaboration web site within their browser. A collaboration toolset like OpenACS gives users the option to work with email, rss, or any combination. Of course, new communication mediums such as SMS can also be integrated with the right code. A mix of tools that fit each users work style while preseving a searchable centralized history and current status of the collaboration is a good solution taking advantage of the technology we have now.

View full post

posted in
Basic Effects http://www.solutiongrove.com/blogger/one-entry?entry%5fid=266153 http://www.solutiongrove.com/mashup/tutorial1 Using Ajax http://www.solutiongrove.com/blogger/one-entry?entry%5fid=266155 http://www.solutiongrove.com/mashup/tutorial2 Drag and Drop http://www.solutiongrove.com/blogger/one-entry?entry%5fid=268010 http://www.solutiongrove.com/mashup/tutorial3 The flash presentation : http://www.empressr.com/viewPresentation.aspx?pres=d1oNvrWG10E%3d# SG Web Desktop http://www.solutiongrove.com/ - demo drag and drop - demo mashup, integration with google maps, yahoo weather, google ads MyCSM Portal http://www.mycsm.com/xowiki/portal - demo calendar MyCSM Ajax FS http://dev.mycsm.com/ajaxfs/ - ajax tree view, loads branches in the background - drag and drop (but it's a bit clunky), drag a file to a folder to copy, drag a file to the trash can to delete Streaming Search and Tag Could http://www.3ecompass.info/library/web2 - searchable tagcloud - streaming search results - preview url in search results by hovering mouse over URL icon Google Maps Integration http://tech.contextsensitivesolutions.org/content/gen/state-profiles/CA - mouseover markers - click Case Studies and Organization & Contacts links Blog Comments http://www2.pps.org:8000/news/one-entry?entry_id=5144 - background submission and updating of a section of the webpage via ajax - example of graceful degradation, try to turn off javascript and then try to comment Javascript Charts http://uptime.solutiongrove.com/uptime/reports?monitor_id=831 click "Visitors" link - more google maps integration - javascript charts using tschartlib

View full post

posted in

Excercise your APIs [www.oreillynet.com]

Curtis Poe says
"Here’s a little secret that many “test-infected” developers know: testing makes you a better programmer. It’s not just that your code works. It’s that if you find something is hard to test, that’s a code smell. Maybe your superWunderFunction() which takes 13 arguments isn’t designed terribly well. That’s not saying that all hard-to-test code has a design flaw (GUIs, for example), but as you test more, you start writing code that’s easier to test.

Your functions will take fewer arguments. Your functions won’t try to do too many things. Your functions are more likely to be loosely coupled. You’ll have less reliance on global variables. The list goes on and on.

View full post

I have been reading James Shore's weblog for some time now. He discusses all aspects of Agile software development practices. My main agile focus is testing, during design and development, but recently I found another interesting idea in a draft book chapter called Single Code Base. The idea of single code base is keeping all your clients on the same code. The exact same code, no branches in your version control repository. Most of us will find this a surpising suggestion, but it does make sense if you can possibly accomplish it. Imagine not figuring out which code can be shared between projects, and imagine not merging code between projects, or merging it back into OpenACS itself. If OpenACS was more flexible it might even be possible to run client projects with the official OpenACS or .LRN code base. How could we make this possible? What features does OpenACS need to make this type of reusability a reality? Recently in IRC Don Baccus suggested that package inheritance would improve reusability. I'd like to explore that idea more. I guess it would involve allowing a certain package to provide an optional user interface, or extended features built onto a base package. Right now the worst example of the failure of reusability is file-storage. It has everthing, including the kitchen sink, tacked onto its feature set, making the user interface confusing and the code difficult to maintain. We could imagine a simplified folder/file browser that provided the basic tools to build a file-storage like package, without all the overhead. Of course, over the years we have improved the focus of the toolkit and defined some best practices for how to use the features of the toolkit that did not exist when file-storage was originally developed. Now that we have learned from the history of OpenACS is a good time to improve it. The other major feature OpenACS needs for reusability is theming. That is, a way to package up the look and feel of an OpenACS install. Improved use of CSS and standardized CSS classes and ids would improve reusability, not to mention usability of the applications built on the toolkit. Putting all the CSS, icons and other design resources in one place, that can easily be overidden with local modificaitons without rewriting the application packges would make out-of-the-box installation of a new look and feel much simpler. Even if we never get to a single code base for every OpenACS/.LRN project, working towards that goal can only improve the adoption of OpenACS/.LRN and focus developer effort on improved applications instead of working around the limitations of reusability. (Edited for typos 2006-09-06)

View full post

posted in
This document is a how-to for delivering full-text, in-database search of Word, Excel, Powerpoint, and PDF documents using OpenACS, PostgreSQL, tsearch2, and a collection of command line utilities to convert binary formats to text or HTML. These techniques allows search to return results from both OpenACS applications, such as forum posts and blogs and from a full full text indexing of files in file-storage. OpenACS search is integrated with the OpenACS permissions model, so search results are only returned for documents the searcher can read. Full-text, in-database search will be included in OpenACS 5.3 scheduled for fall 2006. It will work with PostgreSQL 7.4 and up. (There is also support for full text document indexing with Oracle under OpenACS that will be addressed in a future post.) If you would like to use this feature now, the Search package from OpenACS CVS (HEAD) is required. To check out this package from anonymous cvs use the following command.
cvs -d:pserver:anonymous@cvs.openacs.org:/cvsroot co openacs-4/packages/search
Once you have the new search package installed, you will need the following utilities Any other document formats can be supported by installing a filter or utility to convert the document to text or html. If you install the utilities in /usr/local/bin the should work as soon as you index your documents. If the utilities are installed someplace else, you will need to edit packages/search/tcl/search-convert-procs.tcl to point to the location of the executable file for each utility. The final step is to reindex all your files. If you have documents in file-storage, a query similar to this one can be used to queue the files for indexing.
insert into search_observer_queue 
(select live_revision,now(),'UPDATE'
from cr_items ci,
cr_revisions cr
where ci.live_revision=cr.revision_id
and   ci.content_type='file_storage_object'
and   ci.name like '%.doc')
You can repeat that query changing the like '%.doc' criteria to like '%.xls', etc... for each file type you want to index. Pdfftotext will not extract text from a PDF document that does not allow copy/paste from the text of the PDF document. In this case only the text of the filename will be indexed.

View full post

A talk by Stephen Taylor describes the differences between traditional, engineering based, software projects, and agile software projects. The analogies are very enlightening. The engineering model is compared to building a bridge. There are two main phases, design, and construction. After construction begins it is expensive if not impossible to change. Software is not like that at all. Specifications and requirements always emerge during the development process and change is inevitable in software projects. If we break up programming into two phases, the design phase continues until the moment the software is delivered. Construction, otherwise known as compilation, is cheap, and can by done a limitless number of times whenever the design changes. This leaves us with the ability to engage the users of the software directly, and collaborate with them to produce the final product. Frequent delivery of finished features provides for constant feedback, and hopefully allows the final product to better meet the users business needs. In the talk, they go even a step farther than most Agile projects. The users actually sit down with the programmer, "break" the problem, or demonstrate the behavior they need changed, and the programmer makes the changes right then, with direct collaboration between the end user of the software and the programmer who can make the changes. The speaker says
From this you can see we have collapsed the stages of analysis, specification, design, coding and testing into a short, uninterrupted dialogue with our user. Communication is high-bandwidth, face to face; feedback is rich and immediate.
The idea of uninterrupted dialogue with the user sounds like the ideal situation, and isn't possible in all projects, but striving towards that goal will improve the results of any software project.

View full post

posted in

LAMS Community Launched using .LRN [www.lamsfoundation.org]

The LAMS Foundation annouced the launch of the LAMS user community website using .LRN.
"LAMS creates "digital lesson plans" that can be run online with students, as well as shared among teachers. The LAMS Community allows teachers to share and adapt digital lesson plans, and discuss their experiences of using LAMS." "The LAMS Community is central to our strategy of empowering teachers to transform education using the revolutionary digital lesson planning approach offered by LAMS. Educators can now freely and openly share 'best practice teaching' in a way never seen before in the history of education," said Professor James Dalziel, leader of LAMS. "We chose .LRN for its sophisticated community management functions, complementary feature set, and our shared open source philosophy," Dalziel said.
An interesting side note in the press release is the announcement of integration between LAMS and .LRN for course management similar to the integration of LAMS with Moodle.
John Norman, Director of the Cambridge University Centre for Applied Research in Educational Technology praised the LAMS/.LRN collaboration, saying, "Both .LRN and LAMS have set the pace in the development of collaborative/active learning platforms for higher education. This integration and co-operation between the two projects will create a powerful learning environment for students".

View full post

George Siemens links to Co-opting the creative revolution over at the BBC web site. He makes a great observation that most LMSs don't do a good job of seperating the centralized administration model with a distributed learning model. He says "Certain aspects of learning should be centralized (particularly enrolment), and others should be decentralized (interaction, content exploration, learner-created content (blogs, wikis), etc.)" One partial solution that .LRN could provide is the dotFolio concept where a learner receives a personal space to organize and share their learning experiences alongside the .LRN system.

View full post

XML