So, the main growing season is largely over. Obviously you can grow some winter salads, plant bulbs and the like, but the garden is less active than it was a few weeks back. It was a fairly decent season for first-time vegetable growers (me and Madeleine); here's a summary:
For the rest of this year, I think I'll carry on planting salads, some in the greenhouse. Next year, I think we'll do sweetcorn again, plenty of salads, radishes and peas outside; then try squashes, courgettes, aubergines and tomatoes in the greenhouse. Just need to get my seed order sent off.
I was a judge this year on Packt Publishing's Most Promising Open Source CMS award: the results have just been announced. The winner was SilverStripe.
I was personally impressed by the slickness of the interface, and by the fact that it has been designed to scale well to large websites. The developers have obviously thought carefully about the architecture, and are aiming for the "CMS plus web platform" approach of Drupal. I was also personally impressed by the responsiveness of the development team, their willingness to work in the community, and the clarity of their vision for the product. Worthy winners. Give it a look.
I came late to the Conchords, and didn't realise what I'd been missing. (My sister's been a fan for a while, of course.)
I defy anyone not to find If You're Into It funny (not work safe):
And Business Time:
Currently their first series is being repeated on BBC Four on Tuesdays.
I've finally found a decent .NET book which suits the way I want to learn it: Microsoft .NET for Programmers by Fergal Grimes. Unlike most other .NET books I've looked at, it has the following plus points:
So even though it's not an ASP.NET book, there's enough about ASP.NET to get you started with decent coverage of the main elements you need to know about, and enough pointers to go further. Good for me, anyway.
Right, I decided there's not much point writing more about ASP.Net pages until I can show you how to do something useful with them. So I'm going to dive straight in and install the MySQL connector for ASP.Net, so we can do a bit of database-driven page stuff.
First, you'll need MySQL. I'm not going to tell you how to install that (depends on your Linux), but hopefully it could be as easy as it was for me on Ubuntu:
sudo apt-get install mysql-server mysql-client
How you create your database and users is up to you. I like MySQL Query Browser and phpMyAdmin. The latter needs PHP and a web server; but MySQL Query Browser is a standalone desktop application. If you want to do this in a tutorial style via the command line, you can run these once you've installed the MySQL server and client packages:
$ mysql -uroot -p ... mysql> CREATE DATABASE cdcat; Query OK, 1 row affected (0.10 sec) mysql> USE cdcat; Database changed mysql> CREATE TABLE artist ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) ); Query OK, 0 rows affected (0.09 sec) mysql> INSERT INTO artist VALUES(null, 'Wire'); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO artist VALUES(null, 'The Fall'); Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM artist; +----+----------+ | id | name | +----+----------+ | 1 | Wire | | 2 | The Fall | +----+----------+ 2 rows in set (0.00 sec) mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON cdcat.* TO cdcat@localhost IDENTIFIED BY 'hardpassword'; Query OK, 0 rows affected (0.12 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.13 sec)
What we've done here is setup the first table in a CD catalogue database, namely:
Now you've got a MySQL database server, database, table and user set up, you'll need the MySQL connector for ASP.Net. You need to download Connector/Net from the MySQL website. The one you need is Windows Binaries, no installer (ZIP).
Once the zip file is downloaded, create a directory somewhere and unzip its contents into it. The file you're after is in the resulting bin directory, MySQL.Data.dll. To install it, use the gacutil tool included in the Mono installer, which puts it into the right place in your Mono library directory:
gacutil -i /path/to/unzipped/connector/bin/MySQL.Data.dll
If gacutil isn't on your path you'll need to reference it correctly using its full path.
To prove you've got everything installed correctly, we'll create a page to display the contents of the artist table using one of the standard ASP.Net controls. Like I've said before, this isn't going to be a full ASP.Net tutorial, so I'm not going to try to explain Web Forms and all that jazz: I'm just giving a few examples to help you get the pieces working nicely together. See one of the countless ASP.Net books for more detail. (By the way, if anyone can recommend a half-decent tutorial book for ASP.Net, please let me know, as the ones I've looked at are generally good reference works, but lousy tutorials.) I'll try to put more tutorial material in as I learn more about ASP.Net.
First, create a file called artists.aspx inside your project folder.
Next, put this code into the file and save it:
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="MySql.Data.MySqlClient" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>CD cat</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script runat="server">
private void Page_Load(Object sender, EventArgs e)
{
string connectionString = "Server=localhost;Database=cdcat;User ID=cdcat;Password=hardpassword;Pooling=false;";
MySqlConnection dbcon = new MySqlConnection(connectionString);
dbcon.Open();
MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT * FROM artist", dbcon);
DataSet ds = new DataSet();
adapter.Fill(ds, "result");
dbcon.Close();
dbcon = null;
ArtistsControl.DataSource = ds.Tables["result"];
ArtistsControl.DataBind();
}
</script>
</head>
<body>
<h1>Artists</h1>
<asp:DataGrid runat="server" id="ArtistsControl" />
</body>
</html>
Finally, you need a web.config file, again in the project root directory. This contains application settings, such as which libraries your application needs. It should contain the following to enable the MySQL libraries to be loaded:
<configuration>
<system.web>
<compilation>
<assemblies>
<add assembly="MySql.Data"/>
</assemblies>
</compilation>
</system.web>
</configuration>
Now run your application again with xsp2 from inside the project directory and browse to http://localhost:8080/artists.aspx. You should see this:
I didn't get to code-behind pages this time. Maybe next time.
I'm going to keep this brief, but hopefully explain how to get ASP.Net to work on a Linux machine. Your best choice here is to use Mono, which implements most of the important bits of ASP.Net (in fact, probably all of them, but don't quote me). So for starters, here's how to get a simple ASP.Net page up and running under Linux. (Note that I didn't enjoy the MonoDevelop experience much, and didn't find a decent C# plugin for Eclipse, so I'll be writing code direct for now.)
First off, you're going to need Mono itself. The download site is at http://www.go-mono.com/mono-downloads/download.html. However, there aren't any official package for Ubuntu there, so I tried http://www.mono-project.com/Other_Downloads instead. If you can find a package for your distribution, that may well work.
I struggled to compile the source for Ubuntu and couldn't get the debs to work (I've got an old version of Ubuntu), before I noticed there's a cross-platform Linux installer which worked fine for me. However, Michael Hutchinson mentioned in a comment below that this isn't such a good idea; his blog entry links to another set of installation instructions I didn't manage to find on the Mono site, which look promising. I'll try those next time.
Here's the link in case you want to try it:
http://ftp.novell.com/pub/mono/archive/1.9.1/linux-installer/2/mono-1.9.1_2-installer.bin
From a terminal, make it executable and run it:
chmod +x mono-1.9.1_2-installer.bin ./mono-1.9.1_2-installer.bin
This starts up the graphical installer. Follow the prompts to get it on your system. I recommend putting it into a directory out of the way of the standard Linux directory structure: I installed it into a directory within my home directory.
Next, create a directory for your project and put a basic ASP.Net page into that directory, so you can test that the Mono compiler's working properly. Create a file called index.aspx with this content:
<%@ Page Language="C#" %>
<html>
<head>
<script runat="server">
private void Submit(Object sender, EventArgs e) {
button1.Text = "You clicked me!";
}
</script>
</head>
<body>
<h1>ASP.Net on Mono</h1>
<form runat="server">
<asp:Button id="button1" Text="Click me!" runat="server" OnClick="Submit"/>
</form>
</body>
</html>
I took this from the W3Schools tutorial on ASP.Net and modified it for C#.
To run your page, get a command line up and connect to your project's directory. Then run the embedded server xsp2 (bundled in the Mono installer), to start your application in its own web server:
xsp2 --port 9192
To see your site running, visit http://localhost:9192/ in a web browser. You should see a clickable button whose text changes when you click it.
That's enough for one night. Next time, where to put your code-behind pages, and perhaps how to get MySQL working with Mono.
You wanna fight about it?
I might even write a blog entry about it. Try to stop me.
"Beware of that which is breathtakingly beautiful, for at any moment the telephone may ring or the airplane come down in a vacant lot." (John Cage)
Nicola and I had this at our wedding:
Now I'm getting all nostalgic. We had this during the wedding ceremony too:
We are quite soppy, as you might have guessed.