Author's posts
Aug 03 2010
Bamboo Pen and Touch
This is a tiny technology review. I recently bought a Wacom Bamboo Pen and Touch tablet, I say recently – I picked it up from the post office a little over 2 hours ago!
I used a Wacom tablet extensively as a mouse replacement at work some years back, and rather liked it. I only gave up because I moved into industry from academia and they are a bit more fussy about what I attach to the PC with which I am provided. At home the pen interface didn’t work quite so well because at the time I was quite keen on computer games, first-person shooters in particular, and controlling the little man in such a game using a pen is exceedingly challenging, to say the least.
The big benefit of a pen interface to my mind is that I can hold the pen whilst typing, then when I need to do some “mousing” I don’t have to scrabble around for the mouse. The whole process is just much smoother.
Unlike my original Wacom tablet this model will accept both pen and touch (with your fingers) input – I must admit I’m not really anticipating using the touch input. It appears to support the range of multi-touch gestures that a smartphone will accept. The active area of the tablet is roughly journalists notepad size which makes it small for an artist type tablet.
In terms of software, the installation attempts to guide you into some spoken tutorials which treat you like a moron – praising fulsomely your every successful pen-stroke. None of this is actually necessary since using a pen is largely intuitive and all you really need to learn is what the right-click simulation is (it’s the button on the body of the pen) and what the configurable buttons on the tablet do.
I have the tablet installed on a Windows 7 system, which is “ink” aware – it understands interacting via a pen: A little palette will pop out wherein the miracle of the “handwriting recognition” is performed – being able to read my scrawl is impressive but it’s a bit like a talking dog: it’s very clever but ultimately pointless on a computer with a keyboard. Office 2007 is also ink aware, you can open up a document and scribble on a separate layer – obviously the first thing I did was draw a big circle around something and wrote “bollocks” next to it.
The tablet also comes with some little mini-apps in which you can doodle and play games, you can also download more mini-apps. They don’t look fantastically useful.
All in all I think we’re going to be happy together – holding the pen feels just like old times!
Aug 02 2010
A set of blog posts on SQL
This is a roundup post for a rather specialist set of posts I wrote on SQL (Structured Query Language), a computer language for creating and querying databases. Basically the posts are my notes on the language which I’m learning because a couple of programming projects I have in mind will need it. The main source for these notes is the Head First SQL book. I’ve used a another book in this series (Head First Design Patterns) – I quite like the presentational style. The code in the posts is formatted for display using this SQL to HTML formatter.
Topics covered:
Some notes on SQL: 1 – Creation
Some notes on SQL: 2 – Basic SELECT
Some notes on SQL: 3 – Changing a table
Some notes on SQL: 4 – Advanced SELECT
Some notes on SQL: 5 – Database design
Some notes on SQL: 6 – Multi-table operations
Some notes on SQL: 7 – Subqueries and views
Of course you can find SQL cheatsheets elsewhere.
The Head First SQL book also has material on transactions and security, if I get a renewed bout of enthusiasm I will add a post on these items.
I used MySQL via its command line client to do the exercises, because it’s about as straightforward as you can get. Notepad++ recognises SQL as a language and will do syntax highlighting, so I type my commands into it and copy them into the MySQL command line client. MySQL is pretty straightforward to install. I also installed Microsoft SQL Server Express 2008, which turned out to be a bit more of a struggle but on the plus side integration the C# .NET, which is what I normally program in, looks better than for MySQL.
I’ve been using with the SQL Server via SQL Management Studio (a graphical interface to databases) on the general election data compiled by The Guardian. First contact with actual data, as opposed to learning exercises has proved interesting! A lot of things that are fiddly to do in a spreadsheet are straightforward using SQL.
SQL was designed in the early 1970’s, with commercial implementations appearing towards the end of the decade. It’s influence visible is visible in more modern languages, such as the LINQ extensions to C# (this influence is pretty explicitly stated). Some of the ideas of database design (normalisation) seem relevant to object-oriented programming.
It’s been an interesting learning experience, my scientific background in programming has me stuffing pretty much any sort of data into an array in the first instance. SQL and a database look like a much better solution for many situations.
Aug 02 2010
Some notes on SQL: 7 – Subqueries, combining selections and views
UPDATE raw_candidate_data
SET gender = ‘f’
WHERE firstname IN (SELECT firstname
FROM firstname_gender_lookup
WHERE gender = ‘f’);
The inner query is the clause in brackets, in this instance it is a shorthand way of building a list for an “IN” comparison. Often an inner query returns a single value, i.e. for an average or maximum in a list.
This expression contains a correlated subquery:
UPDATE raw_candidate_data
SET party_id = (SELECT party_id
FROM parties
WHERE raw_candidate_data.party = parties.party_name);
The inner query requires information from the outer query to work, this expression acts as a look up.
Complex queries can be given aliases using the VIEW keyword, for example:
CREATE VIEW web_designer AS SELECT mc.first_name, mc.last_name, mc.phone,
mc.email FROM my_contacts mc NATURAL JOIN job_desired jd WHERE jd.title=‘Web Designer’;
Can subsequently be used by:
SELECT * FROM web_designers;
The view web_designers can be treated just as any other table.
The results of multiple select commands can be combined using the keywords: UNION, UNION ALL, INTERSECT and EXCEPT. UNION returns the distinct union of the results of all the selects, i.e. with no repeats, UNION ALL includes the repeats. INTERSECT returns items that are common to both SELECTs and EXCEPT returns those items that are returned by the first SELECT but not the second. The general form for these combination operations is as follows:
SELECT title FROM job_current
UNION
SELECT title FROM job_desired
UNION
SELECT title FROM job_listings
ORDER BY title;
Each SELECT statement must return the same number of columns and each column must be coercible to the same datatype. Only a single ORDER BY statement for the set of SELECTs can be used.
Keywords: UNION, UNION ALL, INTERSECT, EXCEPT, VIEW
Jul 28 2010
Spider silk
Photo by Fir0002/flagstaffotos (GFDL license) |
I’ve never worked on spider silk myself, but my work on synthetic polymers and biological physics took me to conferences where spider silk work was presented and it always struck me as a very interesting. Spider silk has a rather impressive set of material properties, yet it is produced rapidly at the back end of a spider under everyday conditions. This is a pretty electron micrograph of spider spinnarets from where the silk comes (warning: page includes creepy crawlies).
I introduced molecules, and proteins back in this post. Proteins are the key molecules used to make organisms, an organism’s DNA are the instructions to make a set of proteins. Spider silk is made from protein. A spider is able to produce a whole range of silks with different physical properties: dragline silk is used to make the outer-rim and spokes of a web and is strong and tough; capture-spiral silk is sticky, stretchy and tough; tubiliform silk is used for egg cases and is the stiffest; aciniform silk used for wrapping prey is the toughest; minor-ampullate silk used to make temporary scaffolding for building a web (it’s not as strong but very stretchy). From a technical point of view “strong” refers to how hard it is to stretch something, and “tough” refers to how hard it is to break something. Spider silk is similar to silkworm silk but it is stronger and more extensible.
The closest synthetic material to spider silk in terms of it’s strength per weight is Kevlar. Kevlar is processed using hot sulphuric acid under high pressure which as you might imagine is not very nice. Spider silk, on the other hand is made at room temperature and pressure from an aqueous solution of benign materials. Not only this, a spider can eat the silk it’s already made and use it to make more silk. As scientists, this makes us more than a little bit jealous.
Not only is spider silk interesting of itself, but from a material scientist point of view, it really isn’t fun to make and use new polymers (you need to build expensive plant to make them, you need to work out your ingredient supply chain, you need to check for safety and environmental problems). If, on the other hand, you can get the properties you want from one of your pre-existing polymers by changing the microstructure then life is much easier. Spider silk may provide hints as to how this might be done.
Scientists have done research on the effect of different drugs on web spinning, filmmakers have made some fun of this experiment* (warning: contains spiders). Other interesting biomaterials include, mollusc adhesive and slug slime and I’ve already written about why butterflies are blue.
Update: Curtesy of @happymouffetard, the evolutionary origin of spider-silk spinnarets appears to be hair follicles, according to this article.
*Thanks to Stephen Curry for pointing me to the “spiders on drugs” video.
Jul 25 2010
Some notes on SQL: 6 – Multi-table operations
This is the sixth in a series of blog posts on SQL, the first covered creating a database, the second selecting information from a database, the third commands to modify the structure and contents of an existing database, the fourth, advanced selection. The fifth post covered database design. This post covers multi-table database operations. No claim of authority is made for these posts, they are mainly intended as my notes on the topic.
Good database design leads us to separate information into separate tables, the information we require from a SELECT statement may reside in multiple tables. There are keywords and methods in SQL to help with extracting data from multiple tables. To assist with clarity aliases, indicated using the AS keyword, allow tables to be given shorter, or clearer, names temporarily. Various JOIN keywords enable lookups between tables, as with other aspects of SQL there are multiple ways of achieving the same results – in this case ‘subqueries’.
The AS keyword can be used to populate a new table with the results of a SELECT statement, or it can be used to alias a table name. In it’s aliasing guise it can be dropped, in shorthand. This is AS being used in table creation:
CREATE TABLE profession
(
id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
profession VARCHAR(20)
) AS
SELECT profession
FROM my_contacts
GROUP BY profession
ORDER BY profession;
The following two forms are equivalent, the first uses the AS to alias, the second uses an implicit alias:
SELECT profession AS mc_prof
FROM my_contacts AS mc
GROUP BY mc_prof
ORDER BY mc_prof;
SELECT profession mc_prof
FROM my_contacts mc
GROUP BY mc_prof
ORDER BY mc_prof;
The following examples use two tables boys which is a three column table {boy_id, boy, toy_id} and toys a two column table {toy_id, toy}.
boy_id | boy | toy_id |
---|---|---|
1 | Davey | 3 |
2 | Bobby | 5 |
3 | Beaver | 2 |
4 | Richie | 1 |
toy_id | toy |
---|---|
1 | Hula hoop |
2 | balsa glider |
3 | Toy soldiers |
4 | Harmonica |
5 | Baseball cards |
Cross, cartesian, comma join are all names for the same, relatively little used operation which returns every row from one table crossed with every row from a second table, that’s to say two 6 row tables will produce a result with 36 rows. Although see here for an application.
SELECT t.toy,
b.boy
FROM toys AS t
CROSS JOIN boys AS b;
Notice the use of the period and aliases to reference columns, this query will produce a 20 row table.
Inner join combines the rows from two tables using comparison operators in a condition, an equijoin returns rows which are the same, a non-equijoin returns rows that are different. These are carried out with the same keywords, the condition is different. This is an equijoin:
SELECT boys.boy,
toys.toy
FROM boys
INNER JOIN toys
ON boys.toy_id = toys.toy_id;
The ON and WHERE keywords can be used interchangeable; in this instance we do not use aliases furthermore since the columns in the two tables (toys and boys) have the same name we could use a natural join:
SELECT boys.boy,
toys.toy
FROM boys
NATURAL JOIN toys;
Natural join is a straightforward lookup operation, a key from one table is used to extract a matching row from a second table, where the key column has the same name in each table. Both of these versions produce the following table:
boy | toy |
---|---|
Richie | hula hoop |
Beaver | balsa glider |
Davey | toy soldiers |
Bobby | harmonica |
A non-equijoin looks like this:
SELECT boys.boy,
toys.toy
FROM boys
INNER JOIN toys
ON boys.toy_id<>toys.toy_id
ORDER BY boys.boy;
the resultant in this instance is four rows for each boy containing the four toys he does not have.
Outer joins are quite similar to inner joins, with the exception that they can return rows when no match is found, inserting a null value. The following query
SELECT b.boy,
t.toy
FROM boys b
LEFT OUTER JOIN toys t
ON b.toy_id = t.toy_id;
produces this result
Boy | toy |
---|---|
Richie | Hula hoop |
Beaver | balsa glider |
Davey | Toy soldiers |
NULL | Harmonica |
Bobby | Baseball cards |
That’s to say each row of the toys table is taken and matched to the boys table, where there is no match (for toy_id=4, harmonica) a null value is inserted in the boy column. Both LEFT OUTER JOIN and RIGHT OUTER JOIN are available but the same effect can be achieved by swapping the order in which tables are used in the query.
In some instances a table contains a self-referencing foreign key which is the primary key of the table. An example might be a three column table, clown_info, of “clowns” {id, name, boss_id} where each id refers to a clown name and the bosses identified by boss_id are simply other clowns in the same table. To resolve this type of key a self-join is required this uses two aliases of the same table.
SELECT c1.name,
c2.name AS boss
FROM clown_info c1
INNER JOIN clown_info c2
ON c1.boss_id = c2.id;
Notice both c1 and c2 alias to clown_info.
Keywords: AS, ON, INNER JOIN, NATURAL JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, UNION, INTERSECT, EXCEPT