Sometimes you have static content like a Flash SWF file which you want to prevent browsers from caching. Normally allowing clients to cache this type of content is useful however if you update it not all browsers will immediately fetch the new version.
To force a client to grab the new copy you can use the HTTP headers Cache-Control and Expires. It’s easy to do this in a dynamic page coded with PHP or similar. But how can you do this for static content?
Luckily the Apache server has an extension module called mod_expires which allows us to do this.
Basically mod_expires defines three directives: ExpiresActive, ExpiresByType, and ExpiresDefault.
ExpiresActive is required to switch on or off generation of the Expires and Cache-Control headers. ExpiresByType allows you to specify a expiration rule for a specific MIME type. ExpiresDefault allows you to set up a default expiration rule for all content within it’s scope.
Here’s a small example
-
-
# Switch on the Expires and Cache-Control headers
-
ExpiresActive On
-
-
# Set a default rule: headers will report expiration
-
# date as 4 weeks from when the page is accessed
-
ExpiresDefault "access plus 4 weeks"
-
-
# Flash content is updated often so expiration is
-
# immediate.
-
ExpiresByType application/x-shockwave-flash "access plus 0 minutes"
-
Here’s a list of some of my favourite or most relied-upon applications on Ubuntu. It’s not exhaustive but it’s a start. It doesn’t include extras like multi-media codecs or any of the sort of things you can get easily with something like EasyUbuntu. The lists arranged by purpose and are ordered alphabetically not by preference. Some things are not available in the Ubuntu repositories and are marked as such.
Desktop
- deskbar-applet
- gnome-keyring-manager
- kde-style-polymer (from external source - makes QT apps look ok on gnome, see my post here)
- MSTCoreFonts
- nautilus-open-terminal
- nautilus-scripts:
- nautilus-script-collection-svn (subversion shortcuts)
- nautilus-script-manager
- skype (only beta 1.3 works, needs kde-style-polymer or looks ugly, get it from www.skype.com)
- Tomboy (desktop notes tool)
- xnest (for nested X logins)
Development
- apache2
- emacs-snapshot-gtk (emacs for the gnome desktop)
- JEdit (from external jedit repo http://dl.sourceforge.net/sourceforge/jedit)
- java:
- meld (visual/graphical diff tool)
- mysql:
- mysql-server
- mysql-client
- mysql-admin (note a wrapper script is needed as a bug workaround on this, can’t remember the bug link just now)
- mysql-query
- .Net (just listing the basic dev packages here)
- mono-devel
- monodoc-manual
- php5:
- php5 (basic setup for use with apache)
- php5-* (choose whatever extra modules you need)
- php5-cli (command line version)
- python
- ruby
- ruby
- irb
- lib*-ruby (pickup any of the extra packages you need)
- ri
- rdoc
- rails
- subversion
- vim-gnome (gvim)
- vmware-server
Networking
- Avahi (zeroconf/bonjour)
- avahi-daemon
- avahi-utils
- libapache2-mod-dnssd (to auto-advertise apache2 sites available on your machine)
- service-discovery-applet
- libnss-mdns
- ethereal
- firestarter (basic firewall manager)
- gftp (sftp and ftp client)
- NetworkManager
- rdesktop (Remote Desktop and Terminal Services Client)
Sound & Multimedia
- banshee music player
- f-spot photomanager
- gnomebaker (cd-burner)
- gxine (media player)
I used to use FileZilla on Windows before I migrated to Ubuntu Linux. Found out today that the FileZilla team are working on a port to Linux. Alpha snapshots are available here:
http://filezilla-project.org/nightly.php.
FileZilla is a great FTP tool, user friendly and very capable. It appears that the team are using the cross-platform wxWidgets GUI toolkit for the UI, it uses GTK+ on linux so FileZilla already looks good on the Ubuntu (Gnome) desktop. I look forward to the official release of version 3 on linux. Here’s a screen shot.

I’ve just set up SQL Server Express on our staging server cause I needed to interface Moodle with a customers existing SQLServer database for authentication.
This wasn’t as simple as I thought it would be, but after some set backs I got it working
Firstly, TCP connections to SQL Server Express are switched off by default to prevent newbie users opening themselves up to potential remote attack. Here’s a link to instructions on how to enable TCP connections: How to: Configure Express to accept remote connections.
Also note from the comments on the PHP mssql_connect function documentation that the hostname and port in the connection string are delimited using a comma ‘,’ rather than the more common colon ‘:’. E.g.
-
-
mssql_connect(‘localhost,1433′, ‘myusername’, ‘mypass’);
-
The first problem I encountered after this was an ‘Unable to connect to server’ error. By scanning the user comments on the PHP mssql_connect function page I noticed that a key step in fixing the problem was to replace the PHP5 provided ntwdblib.dll with a newer one from the MS SQL Client Tools. However, this DLL no longer ships with MS SQL Server Express. Luckily I had a developer installation of SQL Server 2000 on my XP partition and was able to pick up version 2000.80.2039.0 from that.
However, I then ran into another problem. When I replaced the PHP 5 provided version ntwdblib.dll of with the new one and restarted IIS, the output from phpinfo() showed that the mssql extension wasn’t loading anymore. I couldn’t see any errors reported in browser nor the system error logs.
By chance I decided to run php -i on the command line. This was lucky cause this way a system error dialog popped up a warning about a missing DLL dependency.
The problem was that the new ntwdblib.dll had a dependency on MSVCR71.DLL which couldn’t be found in IIS’ path. I did a search for msvcr*.dll in C:\WINDOWS and found a copy of this DLL in C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\. I copied it into my PHP install dir and restarted IIS. Then when I ran phpinfo() again the extension showed up.
Found a interesting article on Sitepoint about currently available open source JavaScript libraries.
The JavaScript Library World Cup [JavaScript & DHTML Tutorials]
Edd Dumbill posted an interesting article on his blog about his development infrastructure: In search of agile infrastructure for web applications.
He makes extensive use of
- Ubuntu/Debian cause of their stability and ease of setup.
- Virtualization with Xen, VMWare and Parallels cause it allows him to run multiple test/staging servers on one piece of hardware. Plus it allows him to scratch and rebuild a server with minimum fuss.
- .deb packaging his web apps cause it makes deployment and upgrades nice, neat, and easy.
- SVK or BazaarNG for source control in order to take advantage of their distributed development capabilities and easier merging.
- avahi for mDNS (also known as Rendezvous / Bonjour / ZeroConf) - to make temporary DNS setup dynamic.
Thanks for sharing Edd
Found a link to a good set of instructions for setting up PHP on IIS 6.
How to install PHP 5.x on Windows Server 2003 with IIS 6
Having to get PHP 5 running with IIS 6 on Windows Server 2003 today. I was finding the process quite interesting until I wanted to check the error logs to find out the cause of an HTTP 500 error. It seems the default IIS setup doesn’t provide an easy way to get error logging info out of it. I totally agree with the sentiments expressed here. At least Apache comes setup out of the box to allow developers, developers, developers to do their job.
Then I found this page on the Microsoft site, seems I may have to write a VBScript to coax IIS into outputting it’s errors to the system error log :-|. I’m hoping something in the IIS Resource Kit will make my life easier.
While investigating Rails I decided to create a Mind Map as an excuse to try out the new version of Freemind (v0.8.0). The map is a little bit sketchy but I enjoyed making it. Personally, I find creating Mind Maps extremely useful when learning about something new.