elliot's blog

Gardening post-mortem

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:

  • We started out with lettuce, rocket and spinach, sown into paper pots, then planted into the ground when big enough. All were a complete failure and totally ravaged by slugs and snails. No crops.
  • We also grew some miniature sweetcorn which got to about 4 feet. The plants were healthy, but the yield was pitiful (6 cobs off 6 plants - delicious, but not enough). Should have started them earlier, or maybe fed them more, or given them better ground to grow in. Small success.
  • We tried pumpkins, which were again completely demolished by snails and slugs. They stayed fairly small for a long time, then around the start of September went demented and grew about 6 feet over the next 8 weeks. A few pumpkins started, but got chewed. Failure.
  • Radishes: we planted these out directly in the ground, and managed to crop a few. Not many though. I think the squirrels had them or something. Moderate success.
  • Salads growing in troughs hanging from the fence: the major success of the year. The troughs are attached about half-way up the fence around the patio, so they're warm and out of the way of slugs. I also put some wire mesh over the top to stop the squirrels and birds digging in them, then sowed through the mesh (so the plants grew through it). We had plenty of delicious crops from this, including mustard, spicy salad mix (rocket, leaf radish, etc.), lettuce, spinach, and endive. Endive is a great crop, by the way: everyone says it's bitter, and it consequently seems less attractive to wildlife; and the young leaves are at least as good as lettuce (I'd say tastier). Big success.

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.

Translation error

I thought this blog entry was hilarious.

Most promising open source CMS

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.

Flight of the Conchords

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.

Films I've watched: 3 word reviews

  • Cloverfield: bleak, gripping, relentless
  • Cube: metaphorical, atmospheric, tense
  • Nightwatch: perplexing, disjointed, disappointing
  • 10000 BC: rubbish, rubbish, avoid

Microsoft .NET for Programmers

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:

  • The coding is explained using code, rather than screenshots from Visual Studio.
  • The examples build around a simple core application (a poker game), demonstrating different aspects of .NET such as database access, validation, web services, email, XML, web forms, web sessions, Windows forms, and building up through short tutorials.
  • The code examples are succinct and pragmatic, but contain enough detail to be useful. (One book I've looked at about coding ASP.NET shows how to build a web application using two stage views with XSLT transforms, which has seemed a bad idea to me for several years - impractical, hard work, and not how I want to learn how to program .NET.)
  • It does explain .NET in a way that makes sense to programmers, rather than trying to teach programming at the same time as teaching .NET: coverage of constructors, destructors, data structures, packaging, configuration, reflection (though the large section about writing a compiler seemed slightly dense and unnecessary). There's also some good coverage of how to debug and trace applications, obviously written by someone who's done a lot of it.
  • It's got a big appendix explaining C# language constructs which is a useful reference.

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.

Using MySQL with ASP.Net, under Mono on Linux

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.

Setting up a MySQL database

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:

  • Created a new database called cdcat
  • Created a table called artist in that database
  • Put two artists into the table
  • Created a user called cdcat with SELECT, UPDATE, DELETE and INSERT privileges on all tables in the cdcat database
  • Made those privileges active

Installing Connector/Net

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.

Creating a simple page to show data from a table

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.

Getting ASP.Net (C#) running on Linux, using Mono and xsp2

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.

Yeah, I've been learning ASP.Net (C#)

You wanna fight about it?

I might even write a blog entry about it. Try to stop me.

Beauty

"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.

Syndicate content