|
View this notebook on a map
|
Gmail - perfect, I talked to noah and he said he can have a report together before I sign the
mail.google.com/mail/#inbox/11f2de7eab5bc4d6
In Flanders fields the poppies blow Between the crosses, row on row ... - Google Search
www.google.com/search?hl=en&q=In+Flanders+fields+t... In Flanders fields the poppies blow Between the crosses, row on row ... - Google Search
www.google.com/search?hl=en&q=In+Flanders+fields+t... In Flanders fields the poppies blow Between the crosses, row on row ...
In Flanders fields the poppies blow Between the crosses, row on row ... - Google Search
www.google.com/search?hl=en&q=In+Flanders+fields+t... In Flanders fields the poppies blow Between the crosses, row on row ...
Streaming Television: Watch CNN Live and Full-screen with VLC
lifehacker.com/5076441/watch-cnn-live-and-full+scr... The Perfect Desktop - Ubuntu 8.10 (Intrepid Ibex) | HowtoForge - Linux Howtos and Tutorials
howtoforge.com/the-perfect-desktop-ubuntu-8.10 Linux.com :: Three scripts for package management on Debian and Ubuntu systems
www.linux.com/feature/151125 Code Newbie Articles - http://codenewbie.com/
Feature: Analyze Your Email Usage with Mail Trends
lifehacker.com/379328/analyze-your-email-usage-wit... Analyze Your Email Usage with Mail Trends
Let's take a look at what Mail Trends tells you and how to run it on your Gmail account. What you'll needTo start analyzing your email usage with Mail Trends, you'll need:
What you'll getAfter you run Mail Trends from the command line with Python, you'll get a regular web page full of interesting information about your email usage. Mail Trends logs into your Gmail account, grabs the "message headers" (sender, recipient, subject, date) from your Gmail "All Mail" folder, and generates charts and lists with statistics. See an example of Mail Trends charts based on a set of email from Enron employees. My Mail Trends results reveal a few too many email addresses to post in full, but here's my daily email traffic chart, which shows I receive the most email around 10-11AM each day:
Here's what the month of March 2008 looked like on my personal Gmail account. Notice the lower activity on weekends. (Not surprising.)
When I ran Mail Trends on my Lifehacker email account, I wasn't surprised to find out that Adam is my most frequent sender and recipient. However, people listed a few lines down on my Top Sender and Top Recipient list did surprise me. Who you email and how often can give you interesting insight into your communication habits. What's the point?
While it may seem like self-indulgent data-wanking, Mail Trends and tools like it can help you make informed decisions about how you handle email. For instance, you may find out that the person you send the most email to is your co-worker two cubicles down—and decide to meet in person on a regular to discuss more things offline. If that mailing list you lost interest in months ago is generating a lot of inbox traffic, you could unsubscribe. If you want to process your email in batches, at certain times of day, you could use Mail Trends' time of day chart to figure out what hour brings the most email to your inbox on average, and schedule your processing time around it. Setting up Mail TrendsBefore we start with Mail Trends, know that this is a command line operation using the Python scripting language. Judging from the comments on the project homepage, some users have run into kinks setting it up (though I got it down with just a couple of tries.) Comfort with the command line and a little past experience with Python will make using Mail Trends easier. If that all doesn't sound like your cup of tea, check out the lower section on easier-to-setup alternatives to Mail Trends. Still with me? Ok, assuming you've already got Python installed on your machine, here's how to get Mail Trends going. (Note: these instructions assume you know how to navigate directories from the command line. See also Mail Trend's Getting Started page.)
Note that you can tell Mail Trends what addresses you send mail from (using the Once Mail Trends completes processing, simply open the Other email analysis toolsPreviously mentioned Outlook plugin Xobni is still in invite-only beta, but it looks like one of the best up and coming email analysis tools for Outlook users. Check out the video below for a Xobni demo.
The Seek Thunderbird extension adds "faceted search" to the 'bird. While it doesn't generate usage reports a la Mail Trends, it does list frequency numbers based on date and recipient as you search. Here's a video demo of Seek:
Have you given Mail Trends or other similar tools a run on your email archive? Find out anything interesting? Tell us about it in the comments. Gina Trapani, the editor of Lifehacker, is cutting off email overload at the source. Her weekly feature, Geek to Live, appears every Monday on Lifehacker. Subscribe to the Geek to Live feed to get new installments in your newsreader. Particletree » How to Add an API to your Web Service
particletree.com/features/how-to-add-an-api-to-you... Donald Trump Jr. Talks Affliction's Future Plans
mmarated.com/articles/article/news/20080821/donald... MMARated Radio was rolling with the big dogs today as we welcomed Donald Trump Jr. (left) to the program to talk, what else, Affliction. Some of the topics we touched on included: * His role with Affliction * Why did the Trumps decided to get involved in MMA? * Why not build their own promotion? * His take on the inaugural show * An update on the Tito Ortiz situation * Was he surprised at how much Ortiz demanded? * Will Affliction look to secure a network television deal (potentially with NBC)? * The thought process behind Affliction's large payroll * What we can expect from "Day of Reckoning" on October 11th Computer Science Community - My Steps for Setup on Windows/Cygwin
csc.cdf.toronto.edu/bb/YaBB.pl?num=1190059840 Computer Science Community - My Steps for Setup on Windows/Cygwin
csc.cdf.toronto.edu/bb/YaBB.pl?num=1190059840 Here I assume:
1. You will put the 4 tar files and the shell script to unpack and install the utilities in a folder called C:\cygwin\os161 2. You will install these utilities in a folder called C:\cygwin\u\csc369h\fall\pub\os161 3. You chose to put the root of your kernel in C:\cygwin\home (notice here that I don't mean $HOME). I chose these locations so that the directory names will work, binaries won't conflict in $PATH, among other considerations. This is the process I took: 1. Create a dir in C:\cygwin called os161, and a dir tree called u\csc369h\fall\pub\os161 to end up with C:\cygwin\os161 and C:\cygwin\u\csc369h\fall\pub\os161, respectively 2. In C:\cygwin\u\csc369h\fall\pub\os161 create a dir called root 3. Make sure your $PATH variable includes . and C:\cygwin\bin but nothing else related to cygwin or sys/161 4. Use an FTP client to download the 4 tar files and the shell script into C:\cygwin\os161 5. Make sure you have the latest version of cygwin (1.5.x), Eclipse Europa (3.3.0), and CDT for Eclipse (4.0) which you can update from http://download.eclipse.org/tools/cdt/releases/europa 6. You can follow the instructions to check out your repository. Make sure when you’re giving Eclipse the location that you end it at CDFID and that you have a trailing “/”. Make sure you check out the “trunk” dir. 7. In C:\cygwin\os161, manually unpack the tar files. 8. Open sys161-1.13\sys161-1.13\configure using an editor provided by cygwin. Line 17 reads SRCDIR=`echo "$0" | sed 's,[^/]*$,,`. Change it by adding a single quote so it reads: SRCDIR=`echo "$0" | sed 's,[^/]*$,,’`. Save and exit. 9. Change the shell script under C:\cygwin\os161 so that it only compiles and installs the utilities (not unpacks them – because you already unpacked them and made changes that would be lost if you don’t modify the script). 10. Run the script and capture stdout and stderr in different files: build_all.sh 1> out.log 2> err.log. Ignore any errors displayed on the screen dealing with pipe/fork/etc errors 11. When that’s done, very quickly skim the errors file to make sure the output was only warnings and not fatal errors. Quickly scan the output file as well to make sure all three utilities – binutils, gcc, and gdb (in that order) – were configured, compiled and installed (as indicated by the lines with ****) 12. Make sure C:\cygwin\u\csc369h\fall\pub\os161 has dirs bin and tools and that the bin dir has about 20 executable files and/or shortcuts to them including gdb, gcc, etc 13. Add that bin dir to your path 14. Use cygwin to go into the dir in which you checked out your project and go into the src dir 15. Type: ./configure –ostree=/home/root 16. Go into ./kern/conf and type: ./config ASST0 17. Go into src/kern/compile/ASST0 and use make as follows: make depend make make install 18. Copy src\sbin\mksfs\disk.c, src\sbin\mksfs\support.c and their related header files into src\sbin\dumpsfs\ Alternatively, you can use grep to find all Makefiles in which links are created using ln (e.g., src\sbin\dumpsfs\Makefile). Look for the lines in which ln is used (e.g., ln -s ../mksfs/disk.c .), comment those lines and replace them with the following: e.g., fsutil hardlink create ./disk.c ../mksfs/disk.c 19. Go back to src and type make 20. Copy C:\cygwin\u\csc369h\fall\pub\os161\bin\sys161.conf to C:\cygwin\home\root 21. In Eclipse, do the project modifications as indicated on the website as well as creating the make targets 56 Windrush Rd, Kleinburg, ON, Canada to 57 Charles St W, Toronto, ON, Canada - Google Maps
maps.google.com/maps?f=d&hl=en&geocode=15320493550... 56 Windrush Rd, Kleinburg, ON, Canada to 57 Charles St W, Toronto, ON, Canada - Google Maps
maps.google.com/maps?f=d&hl=en&geocode=15320493550... /tags/boinc_core_release_6_3_5/set-version - BOINC - Trac
boinc.berkeley.edu/trac/browser/tags/boinc_core_re...
Minimal Wordpress ThemeOctober 6th, 2006Minimal
is a 2 column Fixed width , Widget Friendly, Right Sidebar Wordpress
Theme with minimum design. If you come across any bugs please contact us.
Download Link: Minimal Wordpress Theme Delete Files Older Than x Days on LinuxThe find utility on linux allows you to pass in a bunch of interesting arguments, including one to execute another command on each file. We'll use this in order to figure out what files are older than a certain number of days, and then use the rm command to delete them.
Command Syntax
Note that there are spaces between rm, {}, and \; Explanation
This should work on Ubuntu, Suse, Redhat, or pretty much any version of linux.
The Geek is the founder of How-To Geek and a geek enthusiast. When he's
not coming up with great how-to articles, he's probably writing at his personal blog. This article was written on 02/21/07 and tagged with: Ubuntu, Solaris, Suse Linux
FOSSwire » Create a mirror of a website with Wget
fosswire.com/2008/04/21/create-a-mirror-of-a-websi... GNU’s wget command line program for downloading is very popular, and not without reason. While you can use it simply to retrieve a single file from a server, it is much more powerful than that and offers many more features. One of the more advanced features in wget is the mirror feature. This allows you to create a complete local copy of a website, including any stylesheets, supporting images and other support files. All the (internal) links will be followed and downloaded as well (and their resources), until you have a complete copy of the site on your local machine. In its most basic form, you use the mirror functionality like so:
There are several issues you might have with this approach, however.
First of all, it’s not very useful for local browsing, as the links in the pages themselves still point to the real URLs and not your local downloads. What that means is that, if, say, you downloaded http://www.example.com/, the link on that page to http://www.example.com/page2.html would still point to example.com’s server and so would be a right pain if you’re trying to browse your local copy of the site while being offline for some reason. To fix this, you can use the -k option in conjunction with the mirror option:
Now, that link I talked about earlier will point to the relative page2.html. The same happens with all images, stylesheets and resources, so you should be able to now get an authentic offline browsing experience. There’s one other major issue I haven’t covered here yet - bandwidth. Disregarding the bandwidth you’ll be using on your connection to pull down a whole site, you’re going to be putting some strain on the remote server. You should think about being kind and reduce the load on them (and you) especially if the site is small and bandwidth comes at a premium. Play nice. One of the ways in which you can do this is to deliberately slow down the download by placing a delay between requests to the server.
This places a delay of 20 seconds between requests. Replace that number, and optionally you can add a suffix of m for minutes, h for hours, and d for … yes, days, if you want to slow down the mirror even further. Now if you want to make a backup of something, or download your favourite website for viewing when you’re offline, you can do so with wget’s mirror feature. To delve even further into this, check out wget’s man page (man wget) where there are further options, such as random delays, setting a custom user agent, sending cookies to the site and lots more. Easily Install Prism Web Apps in Ubuntu 8.04 | Tombuntu
tombuntu.com/index.php/2008/03/24/easily-install-p... Published in March 24th, 2008
Mozilla Prism is a web browser that allows web applications to be integrated with a traditional desktop and act like native applications. Launching a web app using Prism is done in the same way as launching an application installed on your computer, from the Applications menu. The Prism browser is simplified to not get in the way of the web app. The integration between desktop and web applications has been taken to the next level in Ubuntu 8.04 Beta; you can now easily install Prism web apps from the Ubuntu repositories. Nine familiar sites (mostly from Google) are available at the moment, you can apt-get install or use your package manager to install any of these:
Setting up a web app with Prism isn’t difficult, so many more convenient packages could be on the way. You can create Prism launchers for your own favorite sites using the official Firefox extension. The Google Talk package (prism-google-talk) is terrific. I’ve been using the built-in chat in Gmail instead of a native client like Pidgin. The package uses another Gtalk web interface which is much better than the one in Gmail. Using Prism, I can launch Google Talk from my Applications->Internet menu: And get a window like this: Perhaps Ubuntu should include some web applications installed by default. Anyone else think that offering Google Docs in the Applications->Office menu as well as OpenOffice is a good idea? This isn’t the first time I’ve written about Prism. Thanks to Derek Buranen for pointing out these new packages.
Enjoyed this post and want more news, tips, and how-tos for Ubuntu Linux? Subscribe to Tombuntu now.
Digg This! (29 Diggs, 2 comments) • Stumble It! • Save to del.icio.us (64 saves, tagged: ubuntu prism linux) Related Postsfeatured linux download
RarCrack Opens Protected Archives Without PasswordsLinux only: Open and extract files from ZIP, RAR and 7Zip archives you've forgotten the password to, or never found at the download location, with RarCrack, a free Linux command line utility. Using a brute-force algorithm, RarCrack simply gets to work determining the password for compressed archives, which, in the case of most downloaded RAR files, isn't all that tough. You can point RarCrack in the direction of any special characters you know were used in creating the password, but the standard use—rarcrack yourfile.zip—works just fine in most cases. RarCrack is a free download for Linux systems only; Source files are available at the home page, and Ubuntu Unleashed explains how to quickly compile them.RarCrack [via Ubuntu Unleashed] Adjust Volume of Individual Applications with PulseAudio | Tombuntu
tombuntu.com/index.php/2008/04/10/adjust-volume-of... Adjust Volume of Individual Applications with PulseAudioPublished in April 10th, 2008
PulseAudio is the new sound server that’s being included in Ubuntu 8.04 and other recent Linux distros. A sound server lets changes be made to sound between the applications and sound hardware layers. Among other features, PulseAudio provides per-application volume controls, a plugin architecture, low-latency, networking features, and good application compatibility. PulseAudio can do a lot, but one great feature is the ability to adjust the volume of individual applications. This is great for applications such as Flash applets that usually don’t let you adjust volume. Ubuntu 8.04 is not currently including a user interface for this feature, but it’s easy to install one. Install the package pavucontrol from your package manager or by using the command below: Run pavucontrol in a terminal to start the PulseAudio Volume Control. (You’ll probably want to add an application menu item through System->Preferences->Main Menu.)
As new applications that use sound are launched, they will instantly appear in the window. You can adjust the volume sliders for each application and the sound output will also change instantly, different channels can even be adjusted separately. In the other tabs, you can adjust the volume for entire input and output devices just like applications. PulseAudio will remember your volume settings when you reopen applications, so don’t forget to change the volumes back to 100%. Index of /Tests/Tutorial
China vaults past USA in Internet users - USATODAY.com
www.usatoday.com/tech/world/2008-04-20-Internetuse...
Peacekeeper-missile-testing.jpg (JPEG Image, 3000x2272 pixels) - Scaled (33%)
upload.wikimedia.org/wikipedia/commons/5/5f/Peacek... ![]() ![]() POTATOES An old man lived alone in the country. He wanted to dig his potato garden but it was very hard work as the ground was hard. His only son Fred, who used to help him, was in prison. The old man wrote a letter to his son and described his predicament. Dear Fred,
A few days later he received a letter from his son. Dear Dad,
At 4am the next morning, FBI agents and local police arrived and dug up the entire area without finding any bodies. They apologized to the old man and left. That same day the old man received another letter from his son. Dear Dad,
Karen ReidLecturer in Department of Computer Science at the University of Toronto. TA TrainingCourses TaughtFall 2002 ResearchThe general area of my research is in resource management for clusters of computers. I have been looking at how to more efficiently transfer large data sets from external storage servers onto the local disks of the cluster for use during computation. "Overlapping Data Transfer With Application Execution on Clusters", Karen Reid and Michael Stumm appeared in the Workshop on Cluster Based Computing at ICS 2000. (postscript, pdf ) AddressKaren ReidDepartment of Computer Science University of Toronto 40 St. George Street Toronto, Ontario CANADA M5S 2E4 E-Mail: reid@cs.utoronto.ca (Current students should use the course specific email address.) Office: BA 4240 If a programming language was a boat…04Apr08 by: Tony
This one is inspired by a recent forum post, that still leaves me in amazement.
This makes no sense, since one doesn’t normally make water vehicles in Turing, the programming language. Though this got me thinking — if a programming language was a boat, what would it be? TuringTuring would definitely be a kayak (thank you for comments). It’s small. It’s human powered. It’s often used as a beginner “boat”. And it’s also very Canadian.
JavaJava is a cargo ship. It’s very bulky. It’s very enterprise~y. Though it can also carry a lot of weight. Will carry a project, but not very fun to drive.
PerlPerl is a tugboat. Powerful enough to tug Java around, in 80 characters or less.
RubyRuby is difficult to describe. It’s sleek, sexy, and very fun to drive. Here’s a picture. Very trendy.
PHPPHP is a bamboo raft. A series of hacks held together by string. Still keeps afloat though.
CC is a nuclear submarine. The instructions are probably in a foreign language, but all of the hardware itself is optimized for performance.
HTML
HTML isn’t really a
There’s a lot more to this, and it’s all up for discussion. How would your favourite programming language fare in open waters? Jonathon EdingtonFrom Wikipedia, the free encyclopediaJump to: navigation, search
Jonathon Edington (b. 1977) is a Fairfield, Connecticut, United States, patent lawyer who achieved national notoriety when, on August 28, 2006, he murdered his neighbor, Barry James, after being told that James had molested Edington's two-year-old daughter. There has been no evidence found that Barry James molested Edington's daughter or anyone else.[1] On August 30 Edington was released on $1 million bond. It was widely expected that Edington would attempt to mount a psychiatric defense at his murder trial [2], however Edington instead pled guilty to the crime and was sentenced to 12 years in prison on August 31, 2007.[3] The story had generated a large amount of press coverage in the United States and overseas.
Walmart Growth VideoMarch 20th, 2008 toby | The other day at work, I made this video showing the opening of Wal-mart retail locations over time. It’s pretty fun to watch how it starts very slowly with the first location in Arkansas in 1962 and then spreads into different regions over time. [Javascript required to view Flash movie, please turn it on and refresh this page]
It actually is built entirely from data that’s in Freebase, including the map itself. Here’s how it works: Freebase has a topic for every zip code, along with it’s longitude and latitude. Here’s one example. One query pulls out all the ZIP codes along with their longitudes and latitudes. You can turn longitudes and latitudes into graphical coordinates with some simple transformations (which will vary based on the region you’re plotting and how big your image is) — here are the ones I used:
If you plot all the ZIP codes using a library like PIL, you get a nice map with dots that roughly match population density, which has the advantage of looking a little bit like a night-time satellite photo of the United States. Freebase also contains a list of Wal-mart locations, along with their addresses and the year that they opened. Here’s an example. One query pulls all of these out of Freebase. To create the animation, I generated 30 images for each year starting with 1962. I spread all the Wal-marts that opened that year over the 30 frames. To show the appearance of a Wal-mart, all I had to do was plot a large white dot over the small yellow dot for the appropriate ZIP code. I turned the 1380 images into an animation using MEncoder. I’ve had a lot of suggestions for how to improve this, perhaps also showing ZIP code median income or overlay the spread of Starbucks at the same time. We’re trying to build a massive store of interconnected public data, so there are many many possibilities for visualizations. So, what would you guys like to see? Update: I’m getting a lot of traffic right now for this post, the site was down for a while, but seems to be working now. Those who like fun data analysis might also be interested in my craigslist w4m city analysis. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site. Trac on Ubuntu ¶These instructions were written for a fresh install of Ubuntu. This documentation suggests performing custom install when installing Ubuntu to create a base system without an X server or other graphical niceties. These instructions, however, should work reasonably well if you already have Ubuntu installed or you have performed a full install. Breezy users: See comments below for some of the problems encountered. Dapper users: should work fine with the following instructions. Note: For an alternative Ubuntu experience, using apache and configuring for multiple projects, see TracUbuntuMultipleProjects Also see: https://help.ubuntu.com/community/UbuntuTracHowto Installation ¶1. Install Software Packages ¶To install Trac on your system, install the trac and libapache2-svn packages: sudo apt-get install trac apache2 libapache2-svn
2. Create the Trac Environments Directory ¶You'll need a directory for Trac's environments to live that should be writable by the default Apache user: sudo mkdir /var/lib/trac
sudo chown www-data:www-data /var/lib/trac
If you put your environment somewhere else, make sure to note that and use that location in the appropriate places in the next step. 3. Setup Apache2 ¶Next, create a new Apache-2 virtualhost by saving the following as /etc/apache2/sites-available/trac : <VirtualHost *>
ServerAdmin webmaster@localhost
ServerName trac.example.com
DocumentRoot /usr/share/trac/cgi-bin/
<Directory /usr/share/trac/cgi-bin/>
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
allow from all
</Directory>
Alias /trac "/usr/share/trac/htdocs"
<Location /trac.cgi>
SetEnv TRAC_ENV "/var/lib/trac/YourProjectNameHere"
</Location>
DirectoryIndex trac.cgi
ErrorLog /var/log/apache2/error.trac.log
CustomLog /var/log/apache2/access.trac.log combined
</VirtualHost>
Note: If you get errors later that pertain to environment look at SetEnv TRAC_ENV. You can also use SetEnv TRAC_ENV_PARENT_DIR "/var/lib/trac" to host multiple projects. You also need to uncomment the AddHandler line in /etc/apache2/apache2.conf so that the Trac CGI program will be executed: # To use CGI scripts outside /cgi-bin/: # AddHandler cgi-script .cgi Now, disable the default virtualhost, enable the Trac virtualhost, and restart Apache2: sudo a2dissite default
sudo a2ensite trac
sudo /etc/init.d/apache2 reload
If you are going to want to login, you're going to need authentication. I added the following to my virtual host file to get this to work: <Location "/trac.cgi/login">
AuthType Basic
AuthName "Trac"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
</Location>
This will share the password with your subversion install. You'll also need to grant each user rights using trac-admin. Alternately, you can use htpasswd to create an htpasswd file, and point AuthUserFile? at that location. 4. Creating Environments ¶I installed my Subversion repository at /var/lib/svn/YourProjectNameHere. So I did a quick starting config of subversion with the following commands: sudo mkdir /var/lib/svn sudo mkdir /var/lib/svn/YourProjectNameHere sudo mkdir /tmp/YourProjectNameHere sudo mkdir /tmp/YourProjectNameHere/branches sudo mkdir /tmp/YourProjectNameHere/tags sudo mkdir /tmp/YourProjectNameHere/trunk sudo svnadmin create /var/lib/svn/YourProjectNameHere sudo svn import /tmp/YourProjectNameHere file:///var/lib/svn/YourProjectNameHere -m "initial import" sudo rm -rf /tmp/YourProjectNameHere Some permissions changes and an apache restart are now needed: sudo chown -R www-data /var/lib/svn/YourProjectNameHere
sudo chown -R www-data /usr/share/trac
sudo apache2 -k restart
Test by web-browsing to http://servername/svn/YourProjectNameHere If you see a simple web page which says Revision 1: / and lists branches, tags, and trunk, your Subversion install is up and running! Here's what to do if you see 404 Not Found Check you Subversion installation, specifically /etc/apache2/mods-available/dav_svn.conf and make sure you really have a valid configuration. Still having problems see Ubuntu SVN documentation Now let's finish the Trac install (but don't go on to Trac install until you have the above working properly). I put my trac environment at /var/lib/trac/YourProjectNameHere. Of course you could use any other path or name - something a little more descriptive of your project would probably be a good idea. First I ran these commands: sudo mkdir /var/lib/trac
sudo trac-admin /var/lib/trac/YourProjectNameHere initenv
sudo chown -R www-data /var/lib/trac/YourProjectNameHere
The "trac-admin" command shown above prompted me to enter:
... then it prints out a bunch of stuff. If there are no errors you should now be able to surf to your Trac site at http://servername/trac.cgi At the time I did my install, there was one glitch in the Ubuntu Universe Trac installer. It doesn't install the neo_cgi.so file needed in the python2.4 directory space. So when I surfed to my Trac site, I got the error ImportError: No module named neo_cgi. I was able to fix this by symlinking the python2.3 version like so: sudo ln -s /usr/lib/python2.3/site-packages/neo_cgi.so /usr/lib/python2.4/site-packages/neo_cgi.so Voila! Your Trac system & website should be up and running. ![]()
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| File | Size | Description |
|---|---|---|
| MacStyleDock.js | 6285 bytes | Full version with comments |
| MacStyleDock.compressed.js | 2632 bytes | Compressed version |
Download one of the files listed above and upload it to your website. Link to it from your page with code such as:
<script type="text/javascript" src="MacStyleDock.js"></script>
The code for the dock is added to the document tree under an existing node, so create an element to contain with code such as:
<div id="dock"></div>
The dock can then be created as a new JavaScript object. Note that the dock’s document tree node must already exist when the constructor is called. This can be done either by including the JavaScript code below the node in the document source, or by calling the constructor when the document has loaded — one way to do this is by using the OnloadScheduler.
The constructor takes five paramaters:
An array each of whose elements are object with three properties:
Requested file names consist of the concatenation of the name property, one of the values of the size property, and the extension property.
For example:
<script type="text/javascript" >
var dock = new MacStyleDock(
document.getElementById('dock'),
[
{
name: 'mac-icon-0-',
extension: '.jpg',
sizes: [32,64],
onclick: function(){
alert('You clicked on the first icon');
}
},
{
name: 'mac-icon-1-',
extension: '.jpg',
sizes: [32,64],
onclick: function(){
alert('You clicked on the second icon');
}
}
],
32,
64,
2.5);
</script>
Multiple icon sizes should be supplied for operating systems such as Windows that scale images poorly. The function will scale down the next larger image from the size it requires.
If you’re looking for a JavaScript book, one of the best is the 1000-page JavaScript: The Definitive Guide by David Flanagan, published by O’Reilly and now in its fifth edition. It covers all aspects of JavaScript and details the most common browser compatibility issues that you may encounter:
| Your e-mail address: | |
|---|---|
| Your message: | Enter your message |
| Send message |

|
| Donor | Contribution | Address | ||
|
|
Randall Erben |
Q1/2008 John McCain $2,300 |
3310 RIVER RD Austin TX |

Want to know if a celebrity is playing both sides of the fence? Whether that new guy you're seeing is actually a Republican or just dresses like one? If your boss maxed out at that fundraiser or got comped? Whether your neighbor's political involvement stops at that hideous lawn sign?
FundRace makes it easy to search by name or address to see which presidential candidates your friends, family, co-workers, and neighbors are contributing to. Or you can see if your favorite celebrity is putting their money where their mouth is.
FundRace gives you the technology to do what politicians and journalists have been doing for years: find out where the money's coming from, see who it's going to, and solve the mystery of why that crazy ex-roommate of yours is now the Ambassador to Turks and Caicos.
|
| Donor | Contribution | Address | ||
|
|
Randall Erben |
Q1/2008 John McCain $2,300 |
3310 RIVER RD Austin TX |

Want to know if a celebrity is playing both sides of the fence? Whether that new guy you're seeing is actually a Republican or just dresses like one? If your boss maxed out at that fundraiser or got comped? Whether your neighbor's political involvement stops at that hideous lawn sign?
FundRace makes it easy to search by name or address to see which presidential candidates your friends, family, co-workers, and neighbors are contributing to. Or you can see if your favorite celebrity is putting their money where their mouth is.
FundRace gives you the technology to do what politicians and journalists have been doing for years: find out where the money's coming from, see who it's going to, and solve the mystery of why that crazy ex-roommate of yours is now the Ambassador to Turks and Caicos.
The telecom company that carries most of Pakistan’s traffic, PCCW, has found it necessary to shut Pakistan off from the Internet while they filter out the malicious routes that a Pakistani ISP, PieNet, announced earlier today. Evidently PieNet took this step to enforce a decree from the Pakistani government that ISP’s must block access to YouTube because it was a source of blasphemous content.
I cannot let the irony pass with out commenting. A religious state, Pakistan, identifies a content provider, YouTube, as the source of blasphemous, seditious content and orders, King Canute style, that the Internet tides be stopped. A zealous ISP ignorantly decides the best way to comply with the decree is to re-route all of YouTube’s IP addresses to whatever site they thought was more appropriate. The first repercussion was that YouTube disappeared from the Internet for almost an hour. I suspect the second repercussion was that Pakistan’s Internet access crawled to a halt as all of a sudden they were handling IP requests for one of the busiest sites in the world. As of this writing YouTube has announced more granular routes so that at least in the US they supercede the routes announced by PieNet. The rest of the world is still struggling. So, while working on a fix that will filter out the spurious route announcements, PCCW has found it necessary to shut down Pakistan’s Internet access. The leadership of Pakistan just created a massive Denial of Service on their own country.
I could say: “be careful what you wish for” to those elements that object to free and open access to information and expression of ideas. But to put it in terms they might understand better: Do not anger the Internet gods or you will suffer their wrath!
Update: This blog points out that the “blasphemous content” claim may be a red herring. There may be more political motivations behind it.












|
Re: Massive (500) Internal Server Error.outage started 35 minutes ago
Posted: Feb 15, 2008 8:56 PM PST |
||
|
Here’s some additional detail about the problem we experienced earlier today. Early this morning, at 3:30am PST, we started seeing elevated levels of authenticated requests from multiple users in one of our locations. While we carefully monitor our overall request volumes and these remained within normal ranges, we had not been monitoring the proportion of authenticated requests. Importantly, these cryptographic requests consume more resources per call than other request types. Shortly before 4:00am PST, we began to see several other users significantly increase their volume of authenticated calls. The last of these pushed the authentication service over its maximum capacity before we could complete putting new capacity in place. In addition to processing authenticated requests, the authentication service also performs account validation on every request Amazon S3 handles. This caused Amazon S3 to be unable to process any requests in that location, beginning at 4:31am PST. By 6:48am PST, we had moved enough capacity online to resolve the issue. As we said earlier today, though we're proud of our uptime track record over the past two years with this service, any amount of downtime is unacceptable. As part of the post mortem for this event, we have identified a set of short-term actions as well as longer term improvements. We are taking immediate action on the following: (a) improving our monitoring of the proportion of authenticated requests; (b) further increasing our authentication service capacity; and (c) adding additional defensive measures around the authenticated calls. Additionally, we’ve begun work on a service health dashboard, and expect to release that shortly. Sincerely, The Amazon Web Services Team |
|
|||
|
|||
|
Sockets are a mechanism for exchanging data between processes. These processes can either be on the same machine, or on different machines connected via a network. Once a socket connection is established, data can be sent in both directions until one of the endpoints closes the connection.
I needed to use sockets for a project I was working on, so I developed and refined a few C++ classes to encapsulate the raw socket API calls. Generally, the application requesting the data is called the client, and the application servicing the request is called the server. I created two primary classes, ClientSocket and ServerSocket, that the client and server could use to exchange data.
The goal of this article is to teach you how to use the ClientSocket and ServerSocket classes in your own applications. We will first briefly discuss client-server communications, and then we will develop a simple example server and client that utilize these two classes.
Before we go jumping into code, we should briefly go over the set of steps in a typical client-server connection. The following table outlines these steps:
| Server | Client |
| 1. Establish a listening socket and wait for connections from clients. | |
| 2. Create a client socket and attempt to connect to server. | |
| 3. Accept the client's connection attempt. | |
| 4. Send and receive data. | 4. Send and receive data. |
| 5. Close the connection. | 5. Close the connection. |
That's basically it. First, the server creates a listening socket, and waits for connection attempts from clients. The client creates a socket on its side, and attempts to connect with the server. The server then accepts the connection, and data exchange can begin. Once all data has been passed through the socket connection, either endpoint can close the connection.
Now its time to dig into the code. In the following section we will create both a client and a server that perform all of the steps outlined above in the overview. We will implement these operations in the order they typically happen - i.e. first we'll create the server portion that listens to the socket, next we'll create the client portion that connects to the server, and so on. All of the code in this section can be found in simple_server_main.cpp and simple_client_main.cpp.
If you would rather just examine and experiment with the source code yourself, jump to this section. It lists the files in the project, and discusses how to compile and test them.The first thing we need to do is create a simple server that listens for incoming requests from clients. Here is the code required to establish a server socket:
listing 1 : creating a server socket ( part of simple_server_main.cpp )#include "ServerSocket.h"
#include "SocketException.h"
#include <string>
int main ( int argc, int argv[] )
{
try
{
// Create the server socket
ServerSocket server ( 30000 );
// rest of code -
// accept connection, handle request, etc...
}
catch ( SocketException& e )
{
std::cout << "Exception was caught:" << e.description() << "\nExiting.\n";
}
return 0;
}
That's all there is to it. The constructor for the ServerSocket class calls the necessary socket APIs to set up the listener socket. It hides the details from you, so all you have to do is create an instance of this class to begin listening on a local port.
Notice the try/catch block. The ServerSocket and ClientSocket classes use the exception-handling feature of C++. If a class method fails for any reason, it throws an exception of type SocketException, which is defined in SocketException.h. Not handling this exception results in program termination, so it is best to handle it. You can get the text of the error by calling SocketException's description() method as shown above.
The second step in a typical client-server connection is the client's responsibility - to attempt to connect to the server. This code is similar to the server code you just saw:
listing 2 : creating a client socket ( part of simple_client_main.cpp )#include "ClientSocket.h"
#include "SocketException.h"
#include <iostream>
#include <string>
int main ( int argc, int argv[] )
{
try
{
// Create the client socket
ClientSocket client_socket ( "localhost", 30000 );
// rest of code -
// send request, retrieve reply, etc...
}
catch ( SocketException& e )
{
std::cout << "Exception was caught:" << e.description() << "\n";
}
return 0;
}
By simply creating an instance of the ClientSocket class, you create a linux socket, and connect it to the host and port you pass to the constructor. Like the ServerSocket class, if the constructor fails for any reason, an exception is thrown.
The next step of the client-server connection occurs within the server. It is the responsibility of the server to accept the client's connection attempt, which opens up a channel of communication between the two socket endpoints.
We have to add this functionality to our simple server. Here is the updated version:
listing 3 : accepting a client connection ( part of simple_server_main.cpp )#include "ServerSocket.h"
#include "SocketException.h"
#include <string>
int main ( int argc, int argv[] )
{
try
{
// Create the socket
ServerSocket server ( 30000 );
while ( true )
{
ServerSocket new_sock;
server.accept ( new_sock );
// rest of code -
// read request, send reply, etc...
}
}
catch ( SocketException& e )
{
std::cout << "Exception was caught:" << e.description() << "\nExiting.\n";
}
return 0;
}
Accepting a connection just requires a call to the accept method. This method accepts the connection attempt, and fills new_sock with the socket information about the connection. We'll see how new_sock is used in the next section.
Now that the server has accepted the client's connection request, it is time to send data back and forth over the socket connection.
An advanced feature of C++ is the ability to overload operators - or simply, to make an operator perform a certain operation. In the ClientSocket and ServerSocket classes I overloaded the << and >> operators, so that when used, they wrote data to and read data from the socket. Here is the updated version of the simple server:
listing 4 : a simple implementation of a server ( simple_server_main.cpp )#include "ServerSocket.h"
#include "SocketException.h"
#include <string>
int main ( int argc, int argv[] )
{
try
{
// Create the socket
ServerSocket server ( 30000 );
while ( true )
{
ServerSocket new_sock;
server.accept ( new_sock );
try
{
while ( true )
{
std::string data;
new_sock >> data;
new_sock << data;
}
}
catch ( SocketException& ) {}
}
}
catch ( SocketException& e )
{
std::cout << "Exception was caught:" << e.description() << "\nExiting.\n";
}
return 0;
}
The new_sock variable contains all of our socket information, so we use it to exchange data with the client. The line "new_sock >> data;" should be read as "read data from new_sock, and place that data in our string variable 'data'." Similarly, the next line sends the data in 'data' back through the socket to the client.
If you're paying attention, you'll notice that what we've created here is an echo server. Every piece of data that gets sent from the client to the server gets sent back to the client as is. We can write the client so that it sends a piece of data, and then prints out the server's response:
listing 5 : a simple implementation of a client ( simple_client_main.cpp )#include "ClientSocket.h"
#include "SocketException.h"
#include <iostream>
#include <string>
int main ( int argc, int argv[] )
{
try
{
ClientSocket client_socket ( "localhost", 30000 );
std::string reply;
try
{
client_socket << "Test message.";
client_socket >> reply;
}
catch ( SocketException& ) {}
std::cout << "We received this response from the server:\n\"" << reply << "\"\n";;
}
catch ( SocketException& e )
{
std::cout << "Exception was caught:" << e.description() << "\n";
}
return 0;
}
We send the string "Test Message." to the server, read the response from the server, and print out the response to std output.
Now that we've gone over the basic usage of the ClientSocket and ServerSocket classes, we can build the whole project and test it.
The following files make up our example:
Compiling is simple. First save all of the project files into one subdirectory, then type the following at your command prompt:
prompt$ cd directory_you_just_created prompt$ make
This will compile all of the files in the project, and create the simple_server and simple_client output files. To test these two output files, run the server in one command prompt, and then run the client in another command prompt:
first prompt: prompt$ ./simple_server running.... second prompt: prompt$ ./simple_client We received this response from the server: "Test message." prompt$
The client will send data to the server, read the response, and print out the response to std output as shown above. You can run the client as many times as you want - the server will respond to each request.
Sockets are a simple and efficient way to send data between processes. In this article we've gone over socket communications, and developed an example server and client. You should now be able to add socket communications to your applications!
|
The Half-Ton Man http://video.google.com/videoplay?d...73171&hl=en Patrick Deuel is the male version of MissJackie. I like how people blame Leptin. Leptin doesn't make you sit on your bed and not move for seven years. Shit, some of these people are over 7' wide. The Boy With The Incredible Brain http://video.google.com/videoplay?d...196365903075662 This kid is bad ass -- he learns enough Icelandic in one week to have a suitable listening comprehension and a large enough vocabulary to have a conversation on live television. I like how people become so eager to pin him with autism. Dangerous Knowledge http://video.google.com/videoplay?d...877302082311448 Gotta love Google Video and the BBC. If you have any links to kick ass documentaries, post away. Feel free to relate material or have a dis |
h
One line description : installs like a dream
here is how you can set it up on your machine.
Binutils for MIPS os161-binutils.tar.gz [13MB]
MIPS Cross-Compiler os161-gcc.tar.gz [14MB]
GDB for Use with OS/161 os161-gdb.tar.gz [16MB]
sys/161 sys161.tar.gz 0.1 2
OS/161 os161.tar.gz 0.2 3
untar tar -xzf os161-binutils.tar.gz
cd cs161-binutils-1.4
build : ./toolbuild.sh
you will have a new directory : $HOME/cs350/tools[compiled utilites] and $HOME/cs350/bin[symbolic links].add to bash : export PATH=$HOME/cs350/bin:$PATH
untar: tar -xzf os161-gcc.tar.gz
cd cs161-gcc-1.4
Build : ./toolbuild.sh
Step 3: Install ncurses-dev
apt-get install ncurses-dev
untar: tar -xzf os161-gdb.tar.gz
cd cs161-gdb-1.4
Build: ./toolbuild.sh
untar tar -xzf sys161.tar.gz
cd sys161-1.13
./configure –installdir=${HOME}/cs350/bin –docdir=${HOME}/cs350/man mipseb
make
make install
untar tar -xzf os161.tar.gz
cd $HOME/os161-1.11
./configure --ostree=$HOME/cs350/root –toolprefix=cs350-
cd kern/conf
./config ASST0
cd ../compile/ASST0
make depend
make
make install
Finally, build the OS/161 user-level utilities:
cd $HOME/os161-1.11
make
running OS161:
cd $HOME/cs350/root
cp ../bin/sys161.conf.sample sys161.conf
sys161 kernel
My current Operating Systems course requires us to use the OS161,SYS161,CS161-gcc,CS161-gdb bundle for the assignments. I was able to install the above things in my laptop which is running Ubuntu Gutsy Alpha (Tribe5) after going through few bumpers. Following are the problems I faced and the solutions I used (mostly found from WWW) to overcome them. Hope those will help somebody in the future.
Labels: academic, operating systems
nautilus-script-manager enable Subversion
Thanks to your early action, your XO laptop is scheduled to be delivered between December 14 and December 24. Our "first day" donors are our highest priority and we are making every effort to deliver your XO laptop(s) as soon as possible. We will send you an update upon shipment.If you did, give a shout out in the comments below with your order date. Let's see who is going to be the first kids on their block to get an OLPC XO laptop.
CANADA UPDATE: If you are a Canadian G1G1 participant but didn't get a FDD email, a commenter suggests you try calling OLPC G1G1 toll free at 1-877-705-2786 to confirm that your online PayPal payment has been received. A quick call to OLPC's donation line can get you a confirmation number and assurance of December 14-24 delivery.
FRAPPER MAP UPDATE: Thanks to Joe we now have a OLPC Community Frapper map
USA XO SHIPPING UPDATE If you are a G1G1 particpant in the USA, here's your shipping schedule. Sorry Canada.
The edges can be represented in Prolog as facts:
edge(1,2). edge(1,4). edge(1,3). edge(2,3). edge(2,5). edge(3,4). edge(3,5). edge(4,5).
To represent the fact that the edges are bi-directional we could either add eight more 'edge' clauses (edge(2,1),etc.) or we could try a rule like:
(*) edge(X,Y) :- edge(Y,X).
This is not a good idea, however. To see why it is not a good idea, try the following goal.
?- edge(5,1).
Notice that the rule (*) will be tried over and over in an infinite loop, so the goal will not terminate. Try it! A better way to handle this is to use a rule such as the following.
connected(X,Y) :- edge(X,Y) ; edge(Y,X).
Note the use of disjunction ';' in this rule. This rule could have been written as two rules:
connected(X,Y) :- edge(X,Y). connected(X,Y) :- edge(Y,X).
We wish to develop a Prolog definition which generates paths between any two nodes of the graph. More specifically, we require the following (kind of) behavior for the predicate 'paths'.
?- path(1,5,P). P = [1,2,5] ; P = [1,2,3,5] ; P = [1,2,3,4,5] ; P = [1,4,5] ; P = [1,4,3,5] ; P = [1,4,3,2,5] ; P = [1,3,5] ; P = [1,3,4,5] ; P = [1,3,2,5] ; no
The paths are represented by the list of nodes through which one must travel to get from node 1 to node 5. Here is a definition for paths:
path(A,B,Path) :-
travel(A,B,[A],Q),
reverse(Q,Path).
travel(A,B,P,[B|P]) :-
connected(A,B).
travel(A,B,Visited,Path) :-
connected(A,C),
C \== B,
\+member(C,Visited),
travel(C,B,[C|Visited],Path). 
Getting them installed in Ubuntu is a breeze, thanks to a script I found.
To install the Vista ClearType fonts in Ubuntu, you need to install cabextract first. Cabextract is a utility found in the universe repository, so before you run the following command, make sure you have universe enabled in your repository list. Once this is done, install cabextract using:
$sudo apt-get install cabextract
Then, once that is done, use this script to install the Vista fonts. Create a file called “vista-fonts-installer.sh” in your home (~) directory.
Then open up a text editor and copy and paste the script into that file.
Do a chmod a+x ~/vista-fonts-installer.sh to make the file/script executable.
Then run the script using:
$ ~/vista-fonts-installer.sh
The script downloads the Powerpoint Viewer installer from microsoft.com, and then extracts the Vista cleartype fonts using cabextract. These fonts are then installed in the ~/.fonts directory.
Please remember that the ClearType Vista fonts are not free as in they are not GPL-ed or made available under a re-distributable license. Since you are downloading the fonts from the MS website, and since you might already have a Windows XP/Vista license, this is not a crime, but consider yourself warned against the perils of supporting closed systems
Update::
| Typeface | Calibri |
|---|---|
| Category | Sans-serif |
| Designer(s) | Lucas de Groot |
| Foundry | Microsoft |
| Sample | |
Calibri is a humanist sans-serif typeface family, best known as the new default typeface for the Microsoft Office 2007 suite of applications. It replaces the previous defaults Times New Roman (for Microsoft Word) and Arial (for PowerPoint, Excel and Outlook).
Calibri is one of six new western (Latin, Greek and Cyrillic) ClearType Collection typefaces that come with Microsoft Windows Vista and is the first sans-serif type to be designated the default face for the word processing application Microsoft Office Word. Earlier releases of Microsoft Word have consistently used Times New Roman as the default typeface.
Calibri was designed by Lucas de Groot for Microsoft to take advantage of Microsoft's ClearType rendering technology. The typeface won an award in the Type System category at the Type Directors Club's Type Design Competition in 2005. It includes characters from Latin, Latin extended, Greek, and Cyrillic scripts.
In a survey conducted by researchers at Wichita State University, Calibri was the most popular font for e-mail, instant messaging and PowerPoint presentations. It also ranked highly for use in website text. The survey asked participants to rate images of sample text in various fonts.[1]
November 3rd, 2007
There is no doubt that Ubuntu’s popularity has grown dramatically over the past few years, but just how popular is Ubuntu? How many people have ever heard of Ubuntu? How many people visit the Ubuntu site each month? How many people have tried Ubuntu, and more importantly, how many people are actually using it?
According to Canonical’s official press release for Gutsy Gibbon, Ubuntu has a “strong and growing user base of over 6 million people.” Where Canonical got this number is not clear, and they have provided no evidence to back up this claim. Nobody really knows how many people are using Ubuntu, but we found some interesting statistics online that show Ubuntu’s popularity is growing. From these statistics, it looks like Ubuntu has become far more popular than any other Linux distribution.
Note: this article is in no way a scientific study of Ubuntu’s popularity, it is just a collection of interesting stats from around the net. Have fun with it!
So, where can we look online to judge Ubuntu’s popularity?
Traditionally, people have turned to DistroWatch.com’s ranking of different versions of Linux to judge a distro’s popularity. This is simply a ranking of the average number of hits per day that each distro’s page gets on the DistroWatch.com site. This ranking system is obviously not a very accurate representation of a Linux distro’s popularity, but it is the generally accepted by the community as an indication of what distros are most popular. Ubuntu has been at the top of this list for some time, and only in the last six months has been surpassed by PCLinuxOS.
Does this mean that PCLinuxOS is now more popular that Ubuntu? As the following stats show, this is hardly the case.
There are several companies that specialize in ranking websites. None of these sites are perfect and many people discount them all together. We thought it would be interesting to see how some of the top Linux distribution websites stack up in these net rankings. Here are current rankings for the top 10 distros (from the Distrowatch list). When a distro has a corporate sponsor, we’ve included their website ranking in parentheses.
Update: As someone pointed out on Digg, Gentoo’s website should probably be included in this list. We didn’t include Gentoo in our original numbers because we used the Distrowatch.com top 10 as our starting point (you have to start somewhere). To be fair, let it be noted that Gentoo’s Netcraft ranking is 859 and their Alexa ranking is 8,919 which would place gentoo.com in 1st place and 4th place respectively.
Sites like Technorati and BlogPulse allow you to track how often people are blogging about a certain topic. We compared Ubuntu’s blog buzz to other top Linux distros and found that people are writing about Ubuntu far more than any other Linux distro.
We took the top 3 Linux distros from the above website rankings and compared them on BlogPulse. As you can see, people are blogging about Ubuntu far more often. There is also a large surge in blog posts about Ubuntu surrounding the recent October 18th release of Gutsy Gibbon.

Technorati shows very similar results when comparing Ubuntu, Debian and Fedora over the last 30 days (note the scale difference in these graphs).
| Ubuntu | Debian | Fedora |
![]() |
![]() |
![]() |
Perhaps the most interesting statistics come from Google Trends. This tool allows you to compare different terms and see how often people search for them. The tool is far from perfect and is still in Google’s “labs”, but it does give some interesting insight into how often people search for different Linux distros. Of course, there is a lot of room for error as someone could be searching for the philosophy of Ubuntu, for a new Fedora hat, or for The Red Hat Society.
First we compare our top 3 distros from above. You can clearly see that from the second half of 2006, there are far more searches for Ubuntu than for Debian and Fedora (including Fedora Core, and Red Hat searches).
Next we compare Ubuntu to the rest of the top 10 distros combined (including variations of the distro names such as Red Hat). As you can see, for the last few months, Ubuntu has been searched for more often than all the other top 10 combined.
We found another interesting trend when comparing Ubuntu to Linux, Unix, FreeBSD and Solaris. Clearly Linux has the lead, but Ubuntu is not far behind.
Finally, just to be fair, we compare Ubuntu, Linux, Mac, and Windows.
Then there’s always Digg.com. How many times have these popular Linux distros made it to the front page of Digg in the last 6 months (stories containing the distro’s name in the title)? We did some searching and found the following information very interesting.
So what do all these statistics really mean? Honestly, probably nothing. They can’t tell us anything about real Ubuntu usage. However, they do seem to show that Ubuntu has managed to gain a large portion of the Linux mind share, at least amongst the tech community. We enjoyed uncovering and compiling these stats, but please remember that it’s just a bunch of unscientific data, it’s just for fun. We hope you enjoyed this article, now back to your favorite OS (whatever that might be).
The distrowatch ranking of distros means absolutely nothing outside distrowatch.. and the distrowatch folks have stated that time and time again. I know of lots of people who go to the Distrwatch page on a daily basis and click on a specific distro’s link (PCLinuxOS) just to raise the hit count for that distro. That rating system is flawed and I feel that it should not even be mentioned. I wish they would take that silly rating off their site and leave it off.. it’s misleading to a lot of people.
1) Blogs:
“Sites like Technorati and BlogPulse allow you to track how often people are blogging about a certain topic.”
Are you counting the negative blog entires as well as the positive blog entries? I have seen blogs that state Ubuntu is the worst distro some people have used.
2) Number of installs:
I install and use many distros when a new version is released. But, most of them are uninstalled within days because due to bugs and the like. So gauging popularity by number of installs is not accurate either.
3) Searching Google (and other search engines) does not equate to distro popularity:
Many times I search for a distro, read about it, and decide it’s not for me.. so that distro never gets installed on my machine - but I did search for it.
4) Digg.com:
I have used more than 28 distros at one time or another, but I don’t have a Digg.com account, so gauging popularity that way is also inaccurate.
Conclusion:
There’s really no accurate way to gauge a distro’s popularity because one man’s trash is another man’s treasure. Use the distro that works for you and stop worrying about the numbers.
In the Alexa rankings the third and fourth place seem to be swapped.
And imo there is a huge difference between “having heard about” or even “tried” and actual usage. Still haven’t seem any resilient number about actual usage/installations.
The “6 million users” number of Canonical seems to be made up: http://spevack.livejournal.com/31016.html
Great posting. I assume you’re probably trying to deflect flaming comments by saying all these numbers are just for fun, but I think together they give the clearest and most balanced view possible of Ubuntu adoption. Anyone familiar with webstats will know that you can’t really measure what you want to know directly (ie. do people like my site?), so those folks (like myself) are accustomed to inferring from a number of related indicators (like blog activity, search string activity…).
Personally, I think the Google Trends data is the strongest. Why do people enter search stings with Ubuntu in them? I think it’s because they’re interested in Ubuntu and at the core of all that search activity is people actually using the OS. It’s not a 1:1 relationship, obviously, but it’s best used to compare OSs to get a indication of the relative popularity of an OS. Like you said, we can’t figure out the actual number of users, but we can determine the relative number of users, and in the end that’s what everyone is really interested in: rankings.
Just to add to the confusion of stats. Mozilla recently stated that half of those who download Firefox don’t end up actually using it. I wonder how many people download Ubuntu to test it out and don’t actually end up using it either. Or triple or quadruple boot?
With all I have read about linux and Ubuntu, I would like to try Ubuntu,
however I can’t get past a certain requirement by windows xp, so I can’t do it
on my own and I need help but no one, so far will help me. i have asked for help but no one I have asked ever responds to my request. Oh well, xp works ok.
Can this be done remotely? I’m surprised that no one will help me. too bad so sad.
Thanks,—Doug Rosbury
why not add things like size of forums/mailing lists.
also there are the popcon rankings for debian and ubuntu, not sure if other distros have similar systems. http://popcon.ubuntu.com/ http://popcon.debian.org/
The size of forums was published in a recent issue of Linux Format Magazine.
Here was the results:
———————
Ubuntu: 376,200
Gentoo: 109,000
Fedora: 100,000
Mandriva: 58,800
OpenSuse: 52,000
Kubuntu: 21,000
Freespire: 18,600
PCLinuxOS: 11,700
Arch Linux: 10,600
Sabayon: 8,500
Puppy: 7,000
Mint and Zenwalk: 3,400
I have been using Ubuntu for some time. Very interesting stats - I am happy to see it making headway.
More impressive than Ubuntu’s gains is your post. I am really impressed with your use of stats tools and how you put the post together. All in all - well said.
Ok Doug, I’ll bite. What’s the issue that’s holding you to Windows XP that is preventing you trying Ubuntu?
private message me on the Ubuntu forums with your repsonse.
Doug, same here. You can contact me via the Ubuntuforums private messaging system, as Bil-E-daKid says, username p a p a t r p t 8 9 (without the spaces)
No mention of Dell and their Ubuntu option?
I would think that the count would be more accurate if you counted UbuntuForums.org hits instead of Ubuntu.com hits. There is more registered users at the forums than the main site. I know I visit the forums more than the main site. Also does this include the *buntu derivatives(Kubuntu,Xbuntu,etc)?
I did a similar experiment looking at some statistics of websites and a/emule
http://grigio.org/quanti_sono_utenti_linux_statistiche_ottobre
Normal Linux users are lesser than 1%, but among “techie” users, Linux beat Mac.
Ubuntu provides automatic software updates, which should theoretically provide a good estimate of how many people are using their OS regularly. I don’t know if that’s how they got their numbers, but it makes sense to me. There’s also a package you can install to allow them to use your package list to help determine package popularity, if you want them to do that.
Well it seems to me the best way to calculate usage is with the patch/update downloads. Again not totally accurate as I guess some people won’t keep there machines patched, but I tend to think it would be about the most accurate way we have. just my 2 cents worth.
Comparing google trends with the word ‘windows’ is misleading. Most windows are made of glass.
I agree with 14 & 15. The easiest way to discern a distro’s popularity is updates. Of course this depends on two factors, A) the distro in question has an update system, B) the person using said distro has an internet connection. I think it’s fairly accurate since most distros that do have an automatic update system have it set to connect with the server to look for updates automatically, regardless if the person chooses to update or not. This would show “at least” that x-amount of people used said distro at least once.
Keep your stick on the ice…
Landor
Nice statistics. It is indeed hard to draw conclusions, but alltogether these numbers say something about the popularity of the different distro’s! (though this does not imply correlations with quality, look for example at the popularity of the distro called windows…..)
Parachute pants were popular, but still quite lame.
I’ve tried several versions of Bloatbuntu, and I have yet to be impressed.
STOP! Hammer time!
The most helpful marker would be the number of discreet computers accessing the ubuntu repositories over a short span of time (2-4 weeks), which would catch people who only update occasionally, without double-counting folks who have reinstalled (maybe changing the identification of their computer).
I don’t know if any distros really make this possible, since it is a potential privacy breach.
Name (required)
Mail (will not be published) (required)
Website
Open /etc/apt/sources.list and add:
deb http://hendrik.kaju.pri.ee/ubuntu edgy screenlets deb http://hendrik.kaju.pri.ee/ubuntu feisty screenlets deb http://hendrik.kaju.pri.ee/ubuntu gutsy screenlets
depending on your version of Ubuntu. Then run this in a terminal:
wget http://hendrik.kaju.pri.ee/ubuntu/hendrikkaju.gpg -O- | sudo apt-key add - && sudo apt-get update
and install package 'screenlets' with:
sudo apt-get install screenlets
First of all you need python (tested with 2.4 and 2.5). Further you need pygtk (at least version 2.10), pycairo, python-xdg and the package python-gnome2-desktop. The latter is unfortunately needed for the wnck/rsvg bindings (hopefully this will change sometime).
Note: An official package for SSHMenu has recently been added to Debian Unstable and Testing thanks to the efforts of Debian maintainer Kevin Coyner. If you're running either of those distributions then simply install SSHMenu from your standard repository rather than the one listed here.
SSHMenu is available pre-packaged for Debian and Ubuntu (etc) Linux systems, as two .deb packages:
If you like doing things the hard way, you can go and grab the latest .deb files directly from here.
Or you can add this entry to your /etc/apt/sources.list:
deb http://sshmenu.sourceforge.net/debian stable contrib
Import our repository key:
gpg --keyserver subkeys.pgp.net --recv-keys 4CC00851
gpg --export --armor 4CC00851 | sudo apt-key add -
And then install the relevant package and dependencies with these commands:
sudo apt-get update
sudo apt-get install sshmenu-gnome
If you use Synaptic to manage your packages, you can add the repository as follows. On the Settings menu, select Repositories. Then press the Add button followed by the Custom button. Fill in the box labelled 'APT Line' as shown below and press the Add Channel button. Use the Close button to return to Synaptic and then press the Reload button on the toolbar to download package listings.
below are 11 incredible photos taken from space which illustrate just a few of earth’s fascinating geographical features and nature’s frightening unpredictability.
click on all pictures for humongous versions.
1. sri lankan coast, 26th december 2004
(above) the ocean rapidly retreats 400 metres on the south-western coast of sri lanka, just 5 minutes prior to the arrival of a devastating tsunami.
(above) the swirling waters continue to batter the coast just moments after the main wall of water has hit.
2. an alluvial fan, xinjiang province, china
(above) covering an area 56.6 x 61.3 km and taken on may 2nd, 2002, this photo shows an alluvial fan that formed on the southern border of the taklimakan desert in china. an alluvial fan usually forms as water leaves a canyon, each new stream eventually closing up due to sediment - the result being a triangle of active and inactive channels. the blue ones on the left are currently active.
3. retreating glaciers in the bhutan-himalaya
(above) a beautiful but clear sign that glaciers are slowly melting due to global warming. easily visible are the ends of most of these glacial valleys’ surfaces turning to water to form lakes, a trend which has been noticed only in the last few decades.
4. hurricane isabel, 2003
(above) this terrifying photo of hurricane isabel was taken on the international space station in 2003 and illustrates the immense size of the hurricane’s eye. this particular hurricane was the deadliest of 2003 and winds reached 165 mph at its peak.
5. greenland’s eastern coast, august 21st, 2003
(above) the fractal coastline of greenland and its numerous fjords as seen from space.
‘little spots of white in the water seem to be ice originating from the deeper fjords that reach all the way to the icecap covering most of the island.’ link
6. aurora borealis
(above) an astounding and spooky photo of the natural phenomenon known as aurora borealis, taken on-board space shuttle atlantis during the sts-117 mission.
7. a total solar eclipse from space, 1999
(above) the shadow of the moon covers part of earth on august 11th, 1999 in this photo taken from mir space station. this shadow raced across earth at 2000 km/h, all areas under the centre of it plunged into darkness during a total solar eclipse. this was apparently one the final photos taken from mir.
8. egmont national park, new zealand
(above) mt. egmont volcano last erupted in 1755 and is now situated at the centre of egmont national park. park regulations have ensured the survival of a forest which extends at a 9.5 km radius from the summit of the volcano, the result of which can be seen from space in the form of huge dark green disc. this photo was taken during the sts-110 mission, april 2002.
9. mt. etna eruption, october 2001
(above) taken from the international space station in 2001, this is a photo of a particularly violent eruption on the island of sicily which produced a cloud of ash that travelled as far as libya. on the humongous version of the photo lighter coloured smoke can be seen near the volcano - this was caused by lava igniting nearby forests.
10. richat structure, mauritania
(above) the cause of the richat structure in the sahara desert of mauritania has been debated for many years. at first it was thought to be a meteor impact crater due to its circularity but this has since been disproven due to the lack of shock-altered rock in its vicinity. this massive (30 mile diameter) oddity is now believed to have been a rock dome sculpted over time by erosion. this incredible image was taken by the advanced spaceborne thermal emission and reflection radiometer (aster) on october 7th, 2000.
Here are just a few of the ways Ubuntu is being used in businesses and schools around the world. We'd also love to hear how you are using Ubuntu in your workplace, at home, or in your school or college.
Cost-effective, easy-to-use and reliable, Ubuntu proved to be the open source platform of choice on which to build a support system for technology-enabled classrooms at The Johns Hopkins University.
Read the full story or download the PDF.
Stability and managability helps Locatrix deploy mobile applications to thousands of new users each week.
Enhanced security, outstanding support and maintenance times - Ubuntu was the optimal choice for Contact Air GmbH.
Read the full story or download the PDF.
Delivering training coursers to researchers in developing countries - Ubuntu was the first choice for The Wellcome Trust Sangar Institute.
Read the full story or download the PDF.
Stability, reduced maintenance times and significant cost savings - Ubuntu proved an outstanding choice for Skegness Grammar School.
Read the full story or download the PDF.
Simplicity in switching, ease-of-use, great client/server side management and outstanding reliabilty - Ubuntu proved the best choice for KRUU-FM radio station.
|
|
#2 |
|
Quad Shot of Ubuntu
|
Re: gutsy + dual-head nvidia + compiz fusion
This post could be related to an Ubuntu bug filed at: https://bugs.launchpad.net/ubuntu/+s...22/+bug/144777 ---------------------------- I was able to get it working... but not without pulling some hair out. So the ultimate question is how is this attainable without the loss of hair. First things first, make a backup of your /etc/X11/xorg.conf file. Install the nvidia-glx drivers (or nvidia-glx-new if you have a 7 series or newer card). Go to the restricted drivers manager and enable the card. Then you will need to open the nvidia settings Code:
gksudo nvidia-settings Code:
Save to X Configuration File From here, you can enable compiz-fusion through System : Preferences : Appearance If you want to configure how compiz runs, apt-get the compizconfig-settings-manager and you can access it through System : Preferences : Advanced Desktop Effects Settings. Post your findings on this if you could please. |
Apache Server at www.cse.iitd.ernet.in Port 80Name Last modified Size Description
Parent Directory -
arith-seq.sml 07-Mar-2004 21:19 739
bintree.dat 04-Apr-2004 22:08 448
bintree.sml 04-Apr-2004 22:07 2.7K
comb-with-fact-1.sml 03-Feb-2004 20:16 183
comb-with-fact-2.sml 03-Feb-2004 21:45 263
comb-with-fact-3.sml 03-Feb-2004 21:47 263
comb.sml 28-Jan-2004 22:19 243
days.sml 25-Mar-2004 12:30 118
euclidean-composites..> 15-Feb-2004 16:14 1.5K
fact.sml 03-Feb-2004 20:11 115
fastpower.sml 04-Feb-2004 23:31 333
fibonacci.sml 26-Feb-2004 12:12 705
gcd.sml 14-Jan-2007 17:08 70
higher-order.sml 14-Mar-2004 12:26 1.2K
imperative/ 12-May-2004 11:36 -
intsqrt.sml 15-Feb-2004 15:57 1.0K
lists.sml 11-Mar-2004 11:37 531
matrix-mult.sml 04-Nov-2005 23:26 2.7K
perfect.sml 29-Jan-2004 01:30 1.5K
perfect2.sml 08-Feb-2004 22:53 591
perfect3.sml 08-Feb-2004 18:29 626
polynomial.sml 21-Mar-2004 19:51 399
power1.sml 26-Jan-2004 14:48 130
primes2.sml 03-Mar-2004 23:55 609
primes3.sml 03-Mar-2004 23:55 895
propLogic/ 30-Apr-2004 09:12 -
queens.sml 06-Apr-2004 15:28 2.2K
queues/ 30-Apr-2004 18:11 -
rationals/ 30-Apr-2004 18:09 -
resistors.sml 31-Mar-2004 17:24 584
reverse-integer.sml 20-Mar-2004 14:29 470
shapes.sml 25-Mar-2004 12:17 521
sieve.sml 15-Feb-2004 15:10 708
sort/ 22-Apr-2004 13:46 -
transpose.sml 25-Mar-2004 18:49 811
| my.utoronto.ca | UofT | A & S | DCS | CDF | my CDF | UGA | ||||
|
Hey, Edward A Robinson, you have 0 messages.
|
||||
|
| Computer Science Community › Fall 2007 Course Boards › CSC363H1F: Computational Complexity and Computability | ‹ Previous topic | Next topic › |
|
c5taijoh Student Posts: 11 |
Can numbers be repeated in the list of 5 natural numbers?
i.e. is [1,1,1,1,1] a list of 5 natural numbers? And also does the order of the list matter? i.e. is [1,2,3,4,5] one list and [5,4,3,2,1] another? |
| Back to top |
|
|
François Pitt
Administrator
Instructor Don't Worry, Be Happy! Posts: 55 |
I was going to post a hint about that question anyway, so let me do it at the same time as I answer your question.
Let me start with something related: there are countably many pairs of natural numbers, by an argument similar to what we used to show that the positive rational numbers are countable. This yields the following list of all pairs of natural numbers: (0,0), (0,1), (1,0), (0,2), (1,1), (2,0), (0,3), (1,2), (2,1), (3,0), ... Now, consider triplets of natural numbers. Think about how to extend the system used for pairs. Next, consider quadruplets of natural numbers. Finally, for the Exercise, consider quintuplets of natural numbers (that's what I meant by "lists of 5"). With that explanation, I hope it is clear that the answers to your questions are all "yes". |
| Back to top |
François Pitt, Senior Lecturer
|
|
c5taijoh Student Posts: 11 |
Yup, thanks
The hint was very helpful. |
| Back to top |
|
| Computer Science Community › Fall 2007 Course Boards › CSC363H1F: Computational Complexity and Computability | ‹ Previous topic | Next topic › |
| Forum Jump: ----------------------------- General CS Community ----------------------------- - Announcements - General Chat - Technical Q&A - Jobs and Professional Experience - Buy, Sell, and Trade - Study Groups ----------------------------- First Year Community ----------------------------- - General Chat - Program of Study (POSts) - Ask an Upper-Year Student - Study Groups ----------------------------- Computer Science Student Union ----------------------------- - General Chat - Suggestion Box ----------------------------- Contact Us ----------------------------- - Ask a Professor - Ask the Undergraduate Office - Ask the CDF Admins - Suggestion Box ----------------------------- Fall 2007 Course Boards ----------------------------- - CSC108H1F: Introduction to Computer Programming - - Announcements - - General - - Find a Partner - - CodeLab and Labs - - Assignment 1 - - Assignment 2 - - Assignment 3 - - Assignment 4 - - Project - - Tests - CSC148H1F: Introduction to Computer Science - - Closed Laboratories - - Assignment 1 - - Assignment 2 - - Assignment 3 - - Assignment 4 - - Past exams discussion - CSC150H1F: Accelerated Introduction to Computer Science - - Tools - - Assignment 1 - - Assignment 2 - - Assignment 3 - - Assignment 4 - CSC165H1F: Mathematical Expression and Reasoning for Computer Science - - Tutorial Exercises - - Problem Solving - - Assignment 1 - - Assignment 2 - - Assignment 3 - CSC209H1F: Software Tools and Systems Programming - - General - - Assignment 1 - - Assignment 2 - - Assignment 3 - - Assignment 4 - - Tests - CSC236H1F: Introduction to the Theory of Computation - CSC263H1F: Data Structures and Analysis - CSC301H1F: Introduction to Software Engineering - CSC309H1F: Programming on the Web - - Assignment 1 - - Assignment 2 - - Assignment 3 - - Assignment 4 - - Midterm and Exam - CSC324H1F: Principles of Programming Languages - CSC336H1F: Numerical Methods - - Student Discussions - CSC343H1F: Introduction to Databases - - PostgreSQL - - Assignment 1 - - Assignment 2 - - Assignment 3 - CSC350H1F: Numerical Algebra and Optimization => CSC363H1F: Computational Complexity and Computability - CSC369H1F: Operating Systems - - OS161 and tool chain - - Assignment 0 - - Assignment 1 - - Assignment 2 - - Assignment 3 - - Finding partners - CSC411H1F: Machine Learning and Data Mining - CSC418H1F: Introduction to Computer Graphics - CSC443H1F: Database Systems Technology - CSC469H1F: Advanced Operating Systems - CSC487H1F: Foundations of Computer Vision - SCI199H1Y: Computational Reality, Illusion, and Deception - Test Zone ----------------------------- Summer 2007 Course Boards ----------------------------- - CSC108H1Y: Introduction to Computer Programming - - Prelab (Codelab) and Labs - - Assignment 1 - - Assignment 2 - - Assignment 3 - CSC148H1Y: Introduction to Computer Science - - Closed Laboratories - - Assignment 1 - - Assignment 2 - - Assignment 3 - - Assignment 4 - - Past exams discussion - CSC263H1Y: Data Structures and Analysis - CSC320H1Y: Introduction to Visual Computing - Test Zone |
/*
* Charles Swiger (cs4w@andrew)
* 15-347 HW1, Problem 4
*
* This implements a timer to measure the running time of an arbitrary
* function.
*/
#include "etime.h"
#include "ftime.h"
/* This function returns a reasonable estimate of delta, the clock period of a
* machine. It works by waiting for one tick to pass and returns that time.
*/
double
compute_delta() {
int i,n;
double start, time;
init_etime();
/* We'll start somewhere within a tick and loop until the time changes. */
start = time = get_etime();
for (i = 0; time == start; i++) {
time = get_etime();
}
return (time - start);
}
/* This function uses the doubling method described in the homework assignment
* to compute the running time of an arbitrary function to within a specified
* accuracy.
*/
double
ftime(test_funct P, double E) {
int i,n;
double start, time, tprime, delta, pprime;
delta = compute_delta();
n = 1;
tprime = 0;
init_etime();
while (tprime < (delta * (1 - E) / E)) {
start = get_etime();
for (i = 0; i < n; i++) {
P();
}
time = get_etime();
tprime = time - start;
n *= 2;
}
n /= 2; /* we doubled n one time too many */
pprime = tprime / n;
/* printf("\nn = %d, tprime = %f, ftime = %f\n", n, tprime, pprime); */
return pprime;
}
/* function timer */ typedef void (*test_funct)(void); double ftime(test_funct P, double E);
#define MAX_ETIME 86400 void init_etime(void); double get_etime(void); void init_etime_real(void); double get_etime_real(void);
/*
* etime.c - timer package that uses the Unix interval timer
* to measure elapsed time in seconds.
*/
#include <stdio.h>
#include <sys/time.h>
#include "etime.h"
/* static variable that holds the initial value of the interval timer */
struct itimerval first_u; /* user time */
struct itimerval first_r; /* real time */
/*
* elapsed user time routines
*/
/* init the timer */
void init_etime(void)
{
first_u.it_interval.tv_sec = 0;
first_u.it_interval.tv_usec = 0;
first_u.it_value.tv_sec = MAX_ETIME;
first_u.it_value.tv_usec = 0;
setitimer(ITIMER_VIRTUAL, &first_u, NULL);
}
/* return elapsed seconds since call to init_etime */
double get_etime(void) {
struct itimerval curr;
getitimer(ITIMER_VIRTUAL, &curr);
return (double) ((first_u.it_value.tv_sec - curr.it_value.tv_sec) +
(first_u.it_value.tv_usec - curr.it_value.tv_usec)*1e-6);
}
/*
* elapsed real time routines
*/
/* init the timer */
void init_etime_real(void)
{
first_r.it_interval.tv_sec = 0;
first_r.it_interval.tv_usec = 0;
first_r.it_value.tv_sec = MAX_ETIME;
first_r.it_value.tv_usec = 0;
setitimer(ITIMER_REAL, &first_r, NULL);
}
/* return elapsed seconds since call to init_etime_real */
double get_etime_real(void) {
struct itimerval curr;
getitimer(ITIMER_REAL, &curr);
return (double) ((first_r.it_value.tv_sec - curr.it_value.tv_sec) +
(first_r.it_value.tv_usec - curr.it_value.tv_usec)*1e-6);
}
Parent Node : Subsystems
This section will cover the internals of Interrupt Handling in Linux Kernel (all explaination is related to i386 platform). This section is under development and might be incomplete right now.
I will cover the following topics in this section, explaining the hardware as well as software part of it, How the interrupts are generated, routed and then handled by the low level code of Linux Kernel.
Linux Kernel support for Handling Interrupts - Details of do_IRQ() function, core of Interrupt Handling
This section will discuss the hardware prospective of interrupt handling from the CPU, the Linux Kernel's Interrupt Routing subsystem and Device Drivers's role in Interrupt handling.
Term Interrupt is self defined, Interrupts are signals sent to a CPU on an INTR bus (providing the connection to the CPU), issued whenever any device wants to get attention of the CPU. As soon as the interrupt signal occurs, CPU defer the current activity and service the interrupt by executing the interrupt handler corresponding to that interrupt number (also known as IRQ number).
One of the classifications of Interrupts can be done as follows: - Synchronous Interrupts (also know on as software interrupts) - Asynchronous Interrupts (also know as hardware interrupts)
The basic difference between these is that, synchronous interrupts are generated by CPU's control unit when some abnormal condition is faced; these are also know as exceptions in Intel's termenology. Synchronous interrupts are interrupts which are generated by the CPU itself, either when the CPU detects an abnormal condition or when the CPU executes some of the special instructions like 'int' or 'int3' etc. On other hand, asynchronous interupts are those, which actually are generated by the outside world (devices connected to CPU). As these interrupts can occur at any point of time, these are known asynchronous interrupts.
It's important to note that both synchronous and asynchronous interrupts are handled by the CPU on the completion of an instruction during which the interrupt occurs. Execution of a machine instruction is not done in one single CPU cycle, it will take some cycles to complete. Any interrupt occurring in between the execution of an instruction, will not be handled immediately. Rather, the CPU will handle interrupts after completion of the instruction.
There are few things we always expect the CPU to do on the occurence of the handling of an interrupt. Whenever an interrupt occurs, the CPU performs some hardware checks, required to make the system secure. Before discussing the hardware checks, we will explaining how interrupts are routed to the CPU from the hardware devices.
Details of Programmable Interrupt Controller
On Intel architecture, system devices (device controllers) are connected to a special device known as PIC (Programmable Interrupt Controller). CPUs have two lines for receiving interrupt signals: NMI and INTR. the NMI line is to recieve non-maskable interrupts; non-maskable indicates that the interrupt can not be blocked. These interrupts have the hightest priority and are rarely used. INTR line is the line on which all the interrupts from system devices are received. These interrupts can be masked (blocked). Since all the interrupt signals need to be multiplexed on a single CPU line, we need some mechanism through which interrupts from different device controllers can be routed to a single line of CPU. This routing, or multiplexing is done by PIC (Programmable Interrupt Controller). PIC sits between system devices and CPU and have multiple input lines; each line connected to a different device contoller in the system. On the other hand IPCs have only one output line which is connected to the CPU's INTR line on which it sends a signal to the CPU. There are two PIC controllers joined together and the output of the second PIC controller is connected to the second input of first PCI. This setup allows maximum of 15 input lines on which different system device controllers can be connected. PICs have some programmable registers, through which the CPU can communicate with it (give command, mask/unmask interrup lines, read status). Both PICs have their own following registers:
Mask Register
Status Register
A mask register is used to mask/unmask a specific interrupt line. CPU can ask the PIC to mask (block) the specific interrupt by setting the corresponding bit in the mask register. Unmasking can be done by clearing that bit. When a particular interrupt is being masked, PICs do receive the interrupts on its corresponding input line, but do not send the interrupt singnal to a CPU in which case the CPU keeps on doing what it was doing. When an interrupts is being masked, they are not lost, rather PIC remembers those and does send the interrupt to the CPU when the CPU unmasks that interrupt line. Masking is different from blocking all the interrupts to the CPU. CPUs can ignore all the interrupts coming on INTR line by clearing the IF (Interrupt Falg) flag in the EFLAGS register of CPU. When this bit is cleared, interrupts coming on an INTR line are simply ignored by the CPU, we can then consider it to be blocking interrupts. So now we understand that masking is done at PIC level and individual interrupt lines can be masked or unmasked, whereas blocking is done at CPU level and is done for all the interrupts coming to that CPU except for NMIs (Non-Maskable Interrupts), that are received on a NMI line of the CPU and can not be blocked or ignored.
Nowdays, interrupt architecture is not as simple as shown above: machines use the APIC (Advanced Programmable Interrupt Controller), which can support up to 256 interrupt lines. Along with APIC, every CPU also has an inbuilt IO-APIC. I won't go into details of these right now.
Once the interrupt signal is received by the CPU, the CPU performs some hardware checks for which no software machine instructions are executed. Before looking into what these checks are, we need to understand some architecture specific data structures maintained by the kernel.
The kernel needs to maintain one IDT (Interrupt Descriptor Table), which actually maps the interrupt line with the interrupt handler routine. This table has 256 entries and each entry has 8 bytes. The first 32 enteries of this table are used for exceptions and the remaining are used for hardware interrupts received from the 'outside world'. This table can contain three different type of enteries; these three different types are as follows:
Task Gates, Trap Gates and Interrupt Gates
Lets see what these gates are where these are used.
a). Task Gates
Format of task gates is as follows:
Basically the task gates are used in IDT, to allow the user process to make a context switch with another process without requesting the kernel to do this. As soon as this gate is hit (interrupt received on line for which there is a task gate in IDT), The CPU saves the context - the state of the processors' registers - of currently running processes to the TSS of current processeses, whose address is saved in the TR (Task Register) of the CPU. After saving the context of a current process the CPU sets the CPU registers with the values stored in the TSS of a new process, whose pointer is saved in the 16-31 bits of the task gate. Once the registers are set with these new values, the processor gets the new process and the context switch is done. Linux does not use the task gates, it only uses the trap and interrupt gates in IDT. I will not explain the task gates any further.
b). Trap Gates
Format of trap gates is as follows:
Trap gates are basically used to handle exceptions generated by CPU. 0-15 bits and 48-63 bits together form the pointer (offset in segment identified by 16-31 bits of this entry) to a kernel function. The only difference between trap gates and interrupt gates is that, whenever an interrupt gate is hit, the CPU automatically disables the interrupts by clearing the IF flag in the CPU's EFLAG register. In case of trap gate, on the other hand, this is not done and interrupts remain enabled. As mentioned earlier, trap gates are used for exceptions, so in the Linux Kernel the first 32 enteries in the IDT are initialized with trap gates. In addition to this, the Linux Kernel also uses the trap gate for an system call entry (entry128 of IDT).
c). Interrupt Gates
Format is as follows:
Format of interrupt gates is same as trap gates explained above,expect the value of type field (40-43 bits). In case of trap gates this has a value 1111 and in case of interrupts it has 1110.
Note: whenever the interrupt gate is hit, interrupts are disabled automaticly.
Whenever an exception or interrupt occurs, the corresponding trap/interrupt gate is hit and the CPU performs some checks with fields of these gates. Things done by the CPU are as follows:
1). get the ith entry from the IDT (the physical address and the size of an IDT is stored in the IDTR register of the CPU), here 'i' means the interrupt number.
2). read the segment descriptor index from the 16-31 bits of the IDT entry, lets call this 'n'
3). get the segment descriptor from the 'n'th entry in the GDT (the physical address and the size of an GDT is stored in the GDTR register of the CPU)
4). the DPL of the nth entry in the GDT should be less than equal to the CPL (the Current Priviledge Level, specified in the read-only lowermost two bits of the CS register). Incase DPL > CPL, the CPU will generate a general protection exception. We will discuss later what this check will mean and why this is done. In short:
general protection exception IfDPL (of GDT entry) < CPL, we are entering the higher previlege level (probably from user to kernel mode). In this case CPU switches thehardware stack (SS and ESP registers) from currently running process'suser mode stack to its kernel mode stack. We will see ahead, how this stack switch is exactly done. Note: stack switching idea has been mentioned here, but it actually happens after the 5th step mentioned below.
5). for software interrupts (generated by assembly instructions 'int'), one more check is done. This check is not performed for hardware interrupts (interrupts generated by system devices and forwarded by PIC). Simply saying:
DPL (of IDT entry) >= CPL : ok, we have permission to enter through this gate
DPL < CPL : genreal protection exception
6).switches the stack if DPL (of GDT entry) < CPL. In addition to this mode of CPU (least significant two bits of CS) is also changed from CPL to DPL (of GDT entry)
7). if the stack switch has taken place (SS and ESP registers reset to kernelstack), then pushes the oldvalues of SS and ESP (pointing to user stack) on this new stack (kernel stack)
8). pushes the EFALGS, CS and EIP registers on the stack (note: now we are working on kernel stack). This actually saves the pointer to user application instruction to which we need to return back after servicing the interrupt or exception
9). In case of exceptions, if there is any harware code, processor pushes that also on kernel stack
10). loads the CS with the value of GDT entry and EIP with the offset entry of IDT (0-15 bits + 48-63 bits)
All the above action is done by CPU hardware without the execution of any software instruction. Checks performed at step 4th and 5th (mentioned above) are important.
4th checks make sure that the code we are going to execute (Interrupt Service Routine) does not fall in a segment with lesser previlege. Obivously the ISR can not be in lesser previlege segment than that what we are into. DPL or CPL can have 4 values (0,1,2 for kernel mode and 3 fo user mode). Out of these four only two are used, that is 0 (for kernel mode) and 3 (for user mode).
5th check makes sure that application can enter the kernel mode through specific gates only, in Linux only through 128th gate entry which is for system call invocation. If we set the DPL field of IDT entry to be 0,1 or 2,application programme (running with CPL 3) cannot enter through that gate entry. If it tries, CPU will generate general protection exception. This is the reason that in Linux, DPL fields of all the IDT enteries (except 128th entry used for system call) are initialized with value '0', this makes sure only kernel code can access these gates not application code. In Linux 128th entry (used for system call) is of trap gate type and its DPL value is initialized to 3, so that application code can enter through this gate by assembly instruction"int 0x80"
Now lets see how does the stack switch happens when the DPL (of GDT entry) < CPL. CPU have TR (Task Register) register,which actually points to the TSS (Task Sate Segment) od currently running process. TSS is an architecture defined data structure which contains the stae of processor registers whenever context switch ofthis process happens. TSS include three sets of ESS and ESP fields, one for each level of processor (0,1 and 2). These fields specifies the stack to be used whenever we enter that processor level. Lets say the DPL value in GDT entry is 0, in this case, CPU will load the SS register with the value of SS field in TSS for 0 level and ESP registerwith the value of ESP field in TSS for 0 level. After loading the SS and ESP with these values, CPU starts pointing to the new kernel levelstack o current process. Old values of SS and ESP (CPU remembers them somehow) are now pushed on this new kernel level stack; this is done as we need to return back to old stack oncewe service the interrupts,exception or system call. Prudent readers must be wondering, why there is no field for level 3 stack in TSS. Well the reason for this is that we never use the CPU's stack switching mechanism to switch from higher CPU level (kernel mode - 0,1 and 2) to lower CPU level (user mode - 3).This is the reason that CPU while entering the higher level (kernel mode) saves the previously used lower level stack (user mode) on thekernel stack.
Once all this CPU action is done, CPU's CS and EIP registers are pointing to the kernel functions written for handling interrupts or exceptions. CPU simply start executing the instructions at this point (now we are in kernel mode - level 0)
As this is the software part related to handling of Interrupts and maybe interest of wider audience so I wrote this on a seperate page, please find this here.
Parent Node : Subsystems
Download the software from http://symphony.lotus.com/software/lotus/symphony/home.jspa.
Note: You have to register first.
There is currently a bug, which prevents the installation if you have desktop effects enabled (Compiz/Beryl).
So be sure that you have disabled the desktop effects
before you proceed.
chmod +x IBM_Lotus_Symphony_Linux.bin
./IBM_Lotus_Symphony_Linux.bin
cd IBM_Lotus_Symphony_Linux/
sudo ./setup.bin
Next the installation wizard will pop up:

The following window contains the license agreement:

Choose a location for the installation - I recommend to use the default:

Now the software is ready to be installed:

The software is being installed:

When the install is complete, choose Exit and open later:

After the installation finished, you'll see that the lotus folder in your home directory belongs to root. So you have to change the ownership:
cd /home/%yourusername%/
sudo chown -R %yourusername%:%yourusername% lotus/
Currently the software is very slow (depending on your hardware). It is accessible via the Applications menu in the gnome panel:


If you want to uninstall the software, simlpy run the uninstaller:
cd /opt/ibm/lotus/Symphony/_uninst/
sudo ./uninstaller.bin
The B* probability based search algorithm has been implemented on the chess machine Hitech. En route we have developed effective techniques for:
Below are the instructions to add the Medibuntu repository to your system's list of APT repositories.
Add Medibuntu to your sources.list, as well as its GPG key to your keyring. Make sure to use the correct sources.list that corresponds to your current distribution.
Ubuntu 6.06 "Dapper Drake":
sudo wget http://www.medibuntu.org/sources.list.d/dapper.list -O /etc/apt/sources.list.d/medibuntu.list wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O- | sudo apt-key add - && sudo apt-get update
Ubuntu 6.10 "Edgy Eft":
sudo wget http://www.medibuntu.org/sources.list.d/edgy.list -O /etc/apt/sources.list.d/medibuntu.list wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O- | sudo apt-key add - && sudo apt-get update
Ubuntu 7.04 "Feisty Fawn":
sudo wget http://www.medibuntu.org/sources.list.d/feisty.list -O /etc/apt/sources.list.d/medibuntu.list wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O- | sudo apt-key add - && sudo apt-get update
Weather wallpaper is a program which connects to NOAA each hour to get the current weather at the specified location and creates and sets a wallpaper with the data retrieved.
If you use Debian, Ubuntu, or another distro which uses deb packages, you can download the deb (weather-wallpaper-0.2.0.deb) and simply double-click on it to launch the installer, or you can add my repository to your sources.list file, so that your distro can inform you of new releases.
If you choose for the second method, open the file /etc/apt/sources.list with your favorite editor as root and add this line:
deb http://mundogeek.net/repo feisty all
Update the list of packages writing sudo aptitude update on the terminal, and install the application by writing sudo aptitude install weather-wallpaper.
If you use Archlinux, you can find the PKGBUILD at the ArchLinux User-community Repository.
If you use Gentoo, you can find the ebuild at Gentoo's Bugzilla.
If you use other distribution, download the tar.gz: weather-wallpaper-0.2.0.tar.gz, uncompress it, and execute the command make install with root privileges.
Yes, we do. You do need to install some additional software. Check out the Tribler readme.txt in the source code available from this server and our SourceForge page.
Alternatively, you can try our Ubuntu package, by adding our Ubuntu repository to the Synaptic Package Manager, as follows:
You can now start Tribler from the Applications / Internet menu.
$ sudo apt-get install epm
#!/usr/bin/env python # # helloworld.py # print 'Hello, World!'
%product Hello World %copyright 2007 by Yours Truly %vendor Yours Truly %description This program prints "Hello, World!" %version 0.1 %readme README %license LICENSE %requires python f 755 root sys /usr/bin/helloworld.py helloworld.py
$ touch README $ touch LICENSE
$ epm -f deb helloworld
epm: Warning - file permissions and ownership may not be correct
in Debian packages unless you run EPM as root!
epm -n -f deb helloworld
Ok, so it’s not really Xubuntu-related, but it is something that I think will be helpful to a lot of people. If you’re a GetDeb.net user, you can use this tip to sync your GetDeb packages with the update manager and Synaptic.
1) Open up a terminal (Xfce Menu > Terminal) and run the following:
gksudo mousepad /etc/apt/sources.list
2) Put in the following on a new line at the end of the file:
deb http://ubuntu.org.ua/ getdeb/
Save the file and exit.
3) Now run the following in the terminal:
sudo apt-get update
sudo apt-get upgrade
If all works well, you should get updates for the programs you downloaded through GetDeb.net, and be able to install GetDeb.net programs through the Synaptic package manager.
From my experience, the site has occasional downtime. If running sudo apt-get update gives you 404 Errors relating to http://ubuntu.org.ua/, don’t panic. Simply be patient and try rerunning sudo apt-get update later in the day.
Enjoy!
Below is the code you need to copy and paste to your own web page to include this RSS feed. The NOSCRIPT tag provides a link to a HTML display of the feed for users who may not have JavaScript enabled.
cut and paste javascript:
A matroid is an ordered pair
satisfying the following conditions.
1. S is a finite nonempty set.
2.
is a nonempty family of subsets of S, called the independent subsets of S, such that if
and A
B, then
. We say that
is hereditary if it satisfies this property. Note that the empty set
is necessarily a member of
.
The set SG is defined to be E, the set of edges of G.
The graphic matroid MG is closely related to the minimum-spanning-tree problem, which is covered in detail in Chapter 24.
If G is an undirected graph, then
is a matroid.
All maximal independent subsets in a matroid have the same size.
We say that a matroid
is weighted if there is an associated weight function w that assigns a strictly positive weight w(x) to each element x
S. The weight function w extends to subsets of S by summation:
Many problems for which a greedy approach provides optimal solutions can be formulated in terms of finding a maximum-weight independent subset in a weighted matroid. That is, we are given a weighted matroid
, and we wish to find an independent set
such that w(A) is maximized. We call such a subset that is independent and has maximum possible weight an optimal subset of the matroid. Because the weight w(x) of any element x
S is positive, an optimal subset is always a maximal independent subset--it always helps to make A as large as possible.
For example, in the minimum-spanning-tree problem, we are given a connected undirected graph G = (V, E) and a length function w such that w (e) is the (positive) length of edge e. (We use the term "length" here to refer to the original edge weights for the graph, reserving the term "weight" to refer to the weights in the associated matroid.) We are asked to find a subset of the edges that connects all of the vertices together and has minimum total length. To view this as a problem of finding an optimal subset of a matroid, consider the weighted matroid MG with weight function w', where w'(e) = w0 - w(e) and w0 is larger than the maximum length of any edge. In this weighted matroid, all weights are positive and an optimal subset is a spanning tree of minimum total length in the original graph. More specifically, each maximal independent subset A corresponds to a spanning tree, and since
w'(A) = (|V| - 1)w0 - w(A)
We now prove that GREEDY returns an optima1 subset.
w(A) = w(B) - w(y) + w(x)
w(B) .
Because B is optimal, A must also be optimal, and because x
A, the lemma is proven.
We next show that if an element is not an option initially, then it cannot be an option later.
Let x be the first element of S chosen by GREEDY for the weighted matroid
. The remaining problem of finding a maximum-weight independent subset containing x reduces to finding a maximum-weight independent subset of the weighted matroid
, where
Pyro is a new kind of desktop environment for Linux built on Mozilla Firefox. Its goal is to enable true integration between the Web and modern desktop computing.
By merging the Web with the desktop, Pyro offers the first big step toward a new future for the Web and the applications built for it.
In Pyro, Web content is no longer confined to the browser's window. Instead, trusted Web sites and extensions are given access to the full range of interactivity and control enjoyed by native applications today.
Imagine...
Pyro enables a desktop that tracks the latest in Web technology, and helps mold
|
As I've announced previously, we'll have three capstone courses running this year:
490 in the fall by Steve Engels. 491 in the fall by Karan Singh. 490 in the winter by Greg Wilson. We'd like you to consider taking these courses, so I've asked the three instructors to provide "blurbs" describing their plans. They're not all in yet, but here's what we have so far. Steve Engels: Introduction to Game Design An introduction to the process of game design. This course provides a comprehensive look at the software engineering, artificial intelligence, graphics and human-computer interaction in video games. Topics include the history, social issues and story elements behind video games, and the business of game development and promotion. The main focus is a team implementation of a complete video game as a course project, with smaller deliverables that correspond to milestones in real-world game development. Greg Wilson In this section, students will be matched up with real customers from local companies, non-profits, open source organizations, and university departments other than CS, and tasked with building real, useful software. Past projects (done under the CSC494/495 banner) are summarized at https://stanley.cs.toronto.edu/reports/reports.html , and include brain scan visualization, mail clouds, a genealogical data viewer, and an inventory tool for a local foodbank. |
|
| Back to top |
Jim Clarke, Senior Lecturer and Associate Chair for Undergraduate Studies |
How To Raise Money From VCsDuncan Riley30 comments »The following video “How To Raise Money From VC’s” comes from 5min.com This entry was posted on Saturday, July 14th, 2007 at 11:13 pm and is filed under Company & Product Profiles. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
<SCRIPT language='JavaScript1.1' SRC="http://ad.doubleclick.net/adj/N296.Federated_Media/B2271082.9;abr=!ie;sz=300x250;ord=1184513030?">
</SCRIPT>
<NOSCRIPT>
<A HREF="http://ad.doubleclick.net/jump/N296.Federated_Media/B2271082.9;abr=!ie4;abr=!ie5;sz=300x250;ord=1184513030?">
<IMG SRC="http://ad.doubleclick.net/ad/N296.Federated_Media/B2271082.9;abr=!ie4;abr=!ie5;sz=300x250;ord=1184513030?" BORDER=0 WIDTH=300 HEIGHT=250 ALT="Click Here"></A>
</NOSCRIPT>
Trackbacks/Pings (Trackback URL)CommentsRSS feed for comments on this post.
Name (required) Mail (will not be published) (required) Website
|
with Ada.Text_IO;
use Ada.Text_IO;
procedure helloubuntu is
username : String(1..30);
lastchar : Integer;
begin
Put_Line("Hi! What's your name?");
Get_Line(username, lastchar);
Put_Line("Hello, " & username(1..lastchar) & "! Welcome to Ubuntu!");
end helloubuntu;
with Ada.Text_IO, Ada.Text_IO.Unbounded_IO, Ada.Strings.Unbounded;
use Ada.Text_IO, Ada.Text_IO.Unbounded_IO, Ada.Strings.Unbounded;
procedure helloubuntu is
username : Unbounded_String;
begin
Put("Hi! What's your name? ");
Get_Line(username);
Put_Line("Hello, " & username & "! Welcome to Ubuntu!");
end helloubuntu;
If you have an account with us please login below. If not, please register now.
This guide is designed to help with setting up a PC from scratch to be freecycled off to a family with children. It is part of the 'Give away a childproof PC' campaign. It tries to cover all aspects and provide links to resources on the web. If you would like to add anything, please contact us through the contact form.

If you are reading this, chances are you know a thing or two about Linux and are not afraid of pulling your PC apart. This is a skill that could be put to good for someone else. The main reward will be a warm feeling inside once you're done.
Linux distributions have come a long way recently. I'd even say that they are now easier to own than a Windows machine if you consider the bother with viruses and spyware. It therefore makes sense to set up a machine so that it will be useful for more years to come.
First you need a PC. The place to get it is off your local Freecycle network. PCs normally go like hot cakes, so don't expect a top system. You will probably be able to get a PC without a hard drive, a broken computer or a very slow one which isn't fast enough to run Windows XP. If you tell people what you are doing you might be surprised by how helpful people can be. Some will even offer to drop the parts off when they are in your area.
Some words of wisdom: Try to build one system at a time and don't collect large boxes of random hardware. Chances are they are not working or are not of use to you. You could get stuck with a lot of hardware knocking around.
Make sure you know who gave you what so you can acknowledge them later.
It is probably a good idea to get a monitor for your system. If you set it up using your own monitor and freecycle it without one, the new owner might run into trouble with setting that up. Thanks to flat screens, good CRT monitors are easy to come by these days.
This section describes how to install Xubuntu on the computer. This is a good choice because it runs on low spec machines quite well. Also it is easy to maintain by someone who knows little about Linux. Edubuntu is geared towards children, but it needs a more powerful computer and parental control doesn't come as standard yet. Ubuntu CE (Christian Edition) comes with parental control but also needs better spec.
KateOS works better on lower spec computers. It's more difficult to install and doesn't have as good a package management as Ubuntu.
Puppy Linux will run on computers with lower spec than XUbuntu and runs with impressive speed. It's a cutdown no-frills in-memory version. It requires the user to want to learn about Linux. It uses it's own package management.
Your aim is to install a system that runs comfortably on the machine. There is no point in pushing it to it's limit. If it can run Ubuntu, install Xubuntu anyway. This way the computer will be fast for longer.
Installing Xubuntu is easy to do. You download a LiveCD, boot, make sure you like it and tell it to install. The LiveCD requires 128MB of RAM. To install on a 64MB machine, there is an alternative install CD. The alternative install CD assumes you know a bit more about Linux. This document assumes you are installing Xubuntu 7.40. It can be downloaded from the Xubuntu website. (If you only have 64MB of RAM it might be an idea to request more memory on the Freecycle group.)
You will be asked for the account name of the first user. This user will be an administrator. As you don't know who is going to get the PC, I usually go for 'me'.
To get parental control working you'll need to install the following packages:
Firehol is a firewall that will redirect all traffic directed at the internet through TinyProxy which will use Dansguardian to apply parental control rules. It's a bit of a fiddle to install this manually.
Thankfully there is a script which does this for you. You can download the script from the Ubuntu CE download area. Extract it and follow the instructions in the README file. The default setting seems to work well.
The only problem with this script is that because it's designed for Ubuntu and not Xubuntu it results in a broken dansguardian package. This is easily fixed by starting Synaptic Package Manager and under Edit you can tell it to fix broken packages.
Another thing is that you need to run the following command to fix a problem with Firehol.
The script will also install a GUI for parental control under System->Configure Parental Control.
Make sure your /etc/firehol/firehol.conf looks like this:
If you want to allow the server to be connected to via ssh, then you must edit this file accordingly. There seems to be a problem with Firehol making it impossible to enable samba (Windows File Sharing) if protection is set to 'strong'.
Remember to restart Firehol for any changes in the config file to take affect.
There is a helpful thread if you need more information.
You can test the parental control by pointing Firefox at www.playboy.com.
Firefox will have been configured to use the local proxy. To make sure all browsers will work try the following: