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
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.
Creating Multiple Worksheet Excel Exports with PHPExcel [www.phpexcel.net]
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();
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.
We were recently tasked with an Elgg project that requires forum discussions to behave like mailing lists. There's already a community contributed plugin that does something similar but doesn't quite meet the client's required specifications, notably with regards to permissions.
During the initial design, the client mentioned that we should think about reusability since the system might require other functionality that makes use of incoming emails in the future. So instead of just coding a plugin that will take care of discussions via email I decided to write a plugin that can handle incoming emails in a generic way and then trigger plugin hooks. The different plugins will then be responsible for implementation on how to handle the incoming email.
When Location Matters to your Website ... Mapping with Google [www.contextsensitivesolutions.org]
At the risk of revealing my age, there was a time when I had hoped there was a website that could map the world. A site that could tell me where to find what on the globe and show me how to get there.
Obviously a site like that would take an enormous investment and effort to build and I'm glad, thrilled even, to see companies like Google take on that challenge when they released Google Maps to the public in 2005.
What's even more exciting is that Google makes this data available thru an application programming interface (API) to web developers like you and me.
So in what cases can Google Maps or an equivalent service help your website ?
We recently posted about our project that implements Single Sign-On between Moodle and Elgg using Moodle Network (MNET). We wrote an Elgg plugin that extends the mnet-lib PHP library as part of this implementation. This early version of the plugin allows Elgg to function as an Identity Provider (IdP) so that its users can SSO to moodle. The current implementation assumes that ELGG is the authorative system. It doesn't have the capability to act as Service Provider. We expect to be doing a great deal more work to extend this plugin in its early stages so stay tuned!
Selenium Remote Control with Tcl and OpenACS [seleniumhq.org]
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.
I am very happy to inform everyone that the Ajax Photo Album User Interface has been committed to OpenACS CVS.
Following the design pattern we used on Ajax File Storage UI, the Ajax Photo Album UI creates an ajax powered user interface on top of the photo album package using the principle of graceful degradation. Using the ExtJs and Shadowbox javascript libraries, AjaxPA UI v0.1d has the following features :
Interested to try it out ? Grab the code from OpenACS and install the package on your OpenACS instance.
Solution Grove has a client who wanted to try out Adaptive Curriculum's (AC) Activity Objects (AO) inside Moodle. This initially sounded trivial since they provide SCORM compliant packages and I thought it was easy as just creating a SCORM activity for the AO. It turned out that AC's AOs are not standalone and they require authentication when installed on third party servers. Their objects use standard SCORM API calls for getting the user and session information then use these values to authenticate. The first part's the easy one since I don't need to write any code for that because Moodle already has API for SCORM 1.2.
The problem I encountered was that the authentication method used by AC needs to be run in a stateless manner through a server-to-server HTTP post using the user and session information that originated from the third party server (in this case, the moodle installation). This presents a problem for server-to-server communication because in moodle, the session id for the user is stored in a cookie and we will only be able to get that cookie if the script is run in the browser where it was issued. At this point, we are now in contact with AC to ask a few questions so that I can proceed implementing a code to support their AOs.
What makes a design "Googly"? [googleblog.blogspot.com]
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.
Session Timout Usability [www.codinghorror.com]
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.
Better Merging with Subversion [www.orcaware.com]
In an earlier blog post about branching and merging with subversion, I detailed how I do merging with subversion alone.
It's great to understand the basics but as Mark Aufflick commented on that same article, you're crazy if you don't use "svnmerge.py".
So, what is svnmerge.py? Why do you need it?
The problem stems from the fact that Subversion, older than version 1.5, do not keep track of your merges.
As a result, the developer needs to keep track of merges manually. This means that a developer will have to take note of which revisions were merged to the trunk or to a branch. If the developer is not organized and diligent with tracking his/her merges, it is perfectly possible to "remerge" revisions that have already been merged before, resulting into lots of conflicts and hours of trying to sort them out.
News Flash: Design Requires Effort [www.useit.com]
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.
Accessibility, Google Reader Example of WAI-RIA [googleblog.blogspot.com]
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.
I have been quite busy these past two weeks with a front-end project for a client. I can't say who yet but the "user-agent" matrix they had tells me that they maybe sticklers, making sure the Web pages we are developing for them work and look good across different browsers.
So, in the last two weeks I was transported back to the year 2000 when I was developing Web pages for IE5.5, IE6, and Netscape. Trust me, those were not the greatest times to be front-end developers.
Internet Explorer, in particular, was the bane of Web developers who happen to be working on projects where Web pages need to look consistent across different browsers. If the little annoying differences between IE and Netscape don't kill you, then the little annoying differences between IE5, IE5.5, and IE6 will.
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.
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.
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.
I envy the web apps running off apache. They get an incredible speed boost thru compression just by enabling the mod_gzip module.
Websites on AOLServer 4.5 can use ns_zlib to serve compressed adp pages but I don't know yet if static files like images, cascading style sheets or javascript can automatically be served compressed.
We've been doing lots of front end development and the size of javascript and css files can take its toll on load times.
Just yesterday I came accross this thread from the AOLServer mailing list archives where the author shares a filter for AOLServer that he wrote to serve up gzipped content if it's available. You don't need ns_zlib to use this filter as you are expected to gzip your resources beforehand. The filter will essentially ...
Version control is a must for projects such as ours with a geographically diverse team of developers each working on any number of these projects at the same time.
Subversion, because of its similarities to CVS, has made it easy for us to reap the benefits of version control with minimal effort. However, there is a lot more to subversion than update and commit. There is also branching and merging, but unlike CVS the concept is easier in subversion, at least, in my experience.
So when does branching become necessary or useful? Branching allows you to create a copy of the portion of your project to another location in the repository. This allows one developer to work on features that may not be part of the main line of development without disrupting the work of other developers.
Accessible Google Charts [ajaxian.com]
It's interesting how different companies, competitors even, can come together for a good cause in the name of making it easier for more people to use the Web.
In this feature from the Ajaxian, a Web architect from Yahoo, Chris Heilman, makes Google Charts, a product from Google, more accessible to people who can't see the charts it generates.
By "people who can't see", I am referring to people who are either fully or partially (color) blind and who rely on special screen readers like JAWS to view Web pages.
XSS: Welcome to 2003 (or thereabouts) [ajaxian.com]
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.
Pair Programming With the Users [vector.org.uk]
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.
Subscribe to notificaitons