So I’ve passed my homological algebra exam. Today morning, I unexpectedly realized that I’m going to have a mathematics exam (yes… with the great pain I admit that HA is mathematics :-) and I actually don’t know any proof. This is because HA is so tedious – normally, I feel very uncomfortable if I don’t check at least some details by myself, prove few things by myself, etc. This time, I didn’t check any details. I wanted to several times, but looking at them (I was using a book by Gelfand & Manin) almost always discouraged me.
It’s not that there was nothing that interested me in itself – for example, I really wanted to know why when one passes from category of chains over abelian category to category localized in quasiisomorphisms (see below) then one gets all homotopic morphisms identified. In aforementioned book there are few definitions and diagrams -“nothing is happening”, but I don’t get illuminated even after longer moment of looking at them.
Correspondingly, my knowledge of derived/triangulated categories, simplicial objects and derived functors of nonadditive functors (these were the main topics of a course) is a little bit like a knowledge of history – I know essential facts, I even see some causal connections between them, but I miss something – a spirit of mathematics?.
I’d love to see some comments on how you are/were learning homological algebra. Especially, I’d love to know how (for example) Terrence Tao learned HA (as everybody probably knows, there is non-zero chance of meeting him around wordpress.com, so who knows :-). My General Theory of Geniuses(;-) predicts that he (or maybe He?:-) spent as much time as I did (or less, of course) on the given topic, but his unconsciousness checked all the details and communicated them to his consciousness, one day or another (actually, my GTG says that my unconsiousness also checked all the details, but it saved them for itself, damn bastard.)
Below follows a survey of what I’ve learned on this HA course, part I: derived categories, with some additional thoughts on the subject. I believe you may find it worth reading if you already know some basics of HA (nothing more than classical derived functors) and you’d like to read some informal introduction, to have some view on a matter before studying it for real. Comments are appreciated.
(*)
Derived categories. Is there any motivation for them? Well, for learning them there definitely is some – gossip I heard says that physicists are using them in non-trivial way. Actually,Homological Mirror Symmmetry is formulated using derived categories. I don’t know any details. I’d love to know.
(And since this thing is “Fightin’ the resistance of matter” (and I am listening to some old-style-grungy depressing music) I’d like to use this opportunity to express my bitter sorrow that I have to learn mathematics this way. I envy everybody “on the front of research” that they have so much fun out of doing mathematics, and I learn things that I know they’re using but don’t know actually why, so they seem artificial and not funny……)
Yes… So let’s pretend I know the motivation :-) Yay! I suppose you know few things about classical derived functors. You take an additive functor F: A –> B (A and B are abelian categories) which is, say, left exact, which means that for every exact sequence 0 -> X -> Y -> Z -> 0 you get exact sequence 0 -> F(X)-> F(Y)-> F(Z). In general the last arrow isn’t onto, so you want to measure how strongly it’s not onto. And you invent derived functors RiF which have a property that they fit into long exact sequence:
0 -> F(X)-> F(Y)-> F(Z)->
-> R1F(X)-> R 1 F(Y)-> R 1 F(X)->
-> R2F(X)-> R2F(X)-> R2F(X)->…
When we’ll have derived categories everything’ll be more elegant: All the information about derived functors will be encoded in only one functor DF: DA -> DB (DK denotes derived category of K). Greatest change in conciseness will be seen perhaps in derived functor of composition. You might remember that to compute R*(F∘G) one needs to write down a spectral sequence(AAA!!! NOOT A SPEECTRAAL SEEEEQUEEENCE!!!!). After introducing derived categories we’ll have very elegant D(F∘G)= DF ∘ DG. This is something I still need to understand – I don’t really know where the spectral sequence has gone (but I’m happy he went away, he may stay there if he wishes to). However, this statement’s elegance is quite convincing that derived category is right thing to do.
From more philosophical point of view – what’s the most important derived functor? No, it’s not some ?%*& ext or tor. It’s cohomology. It might be that you didn’t know that, so i’ll write explicetely: Cohomology of a topological space X can be realised as a derived functor of a Global Section functor Γ:Sheaves(X)->Ab which takes a sheaf on X and gives back an abelian group of all global section of this sheaf. For example, if you want to get de Rham cohomology of a manifold you simply take sheaf which on every connected open subset takes value R (real numbers)- it’s obvious from definitions that derived functors of Γ evaluated on this sheaf are de Rham cohomology groups, because de Rham complex is (by Poincare lemma) a resolution of sheaf R(and this resolution is suitable for computing derived functor, though it’s not injective – this isn’t very hard).
Taking other sheaves and evaluating derived functors of Γ on them leads to some different cohomology theories, which can measure some other things than ordinary cohomology theory does. So, taking derived category of Sheaves(X) and studying DΓ could be seen as “studying all cohomology theories in one time” which sounds like a cool thing to do.
Motivation for a following definition comes also from the desire to identify any object of A with its resolution. This in turn might be motivated by a following observation: if you want to compute Tori(X,X), value of classical derived functors of functor _⊗X on object X, you take injective resolution of X, tensor it with X and compute homologies.(BTW, at least when resolution of X is finite you could instead take resolution of X and tensor it with resolution of X, form a Tot complex and compute homologies – this also suggests that resolution and an object are very similar from HA point of view). So, if you somehow identified object with its resolution you could say simply “to compute value of derived functor on an object just compute original functor on an object”:-). It’s a little bit tricky, but basically this is what we’ll end with.
There are also some other motivations listed in Gelfand&Manin.
Ok, let’s fix an abelian category A. Let ChA be a category of (cohomological) chain complexes over A (perhaps bounded or bounded from right or bounded from left – constructions will not change at all, outcome will be called Db od D– or D+). Motivated by all the above we want to identify two objects in ChA if there is an quasiisomorphism between them (quasiisomorphism is a morphism which induces isomorphism on homology). Accordingly, we make a following definition.
Derived category of A is a pair (DA, Θ), where DA is an additive category and Θ: ChA –> DA is a functor that carries all quasiismorphisms to isomorphisms, such that this pair is universal for this property (if there is other such pair (B,Ψ) than there exists unique functor DA–>B such that suitable diagram commutes)
There exists a very simple proof of existence. Let DA be a category whose objects are the same objects as these of ChA (that is, Ob(DA)= OB(ChA)). Set of morphisms between two objects X and Y in DA, MorDA(X,Y), is a set of paths between X and Y in a directed graph whose vertices are objects of A, and whose edges are
i) morphisms in A
ii) edges xs, for every quasiisomorphism s: K->L, that go from vertex K to vertex L.
with a following relation: two paths in this graph are equivalent if you can obtain one from the other by a series of basic operations:
i) exchanging any edge f∘g with path consisting of edges g and f
ii) exchanging paths of form s∘xs with id.
Composition of morhism is defined by conjunction of paths in the above graph.
Above construction is called localisation of ChA with respect to quasiisomorphisms.
This is it. There is obvious functor Θ from Ch(A) to DA. Pair (DA, Θ) has a suitable universal property (no, I didn‘t check all the details but it stands to reason ;-). But, DA just constructed is poor to work with – it’d very hard to decide even whether given path represents a trivial morphism. So we should work some more.
Definition: Suppose we’re given category B and class of morphisms C ⊆ MorB. We say that this class C is localizing in B iff
i) idX∊C for ever X∊ObB
ii) if α, β ∊ C then α∘β ∊ C, if it makes sense
iii) for every α∊C and f ∊ MorB, α: X->Z, f: Y->Z there exist β∊C, g∊MorB, β: W->Y, g: W->X, such that suitable diagram commutes (draw it)
iv) for every α∊C and f ∊ MorB, α: X<-Z, f: Y<-Z there exist β∊C, g∊ MorB , β: W<-Y, g: W<-X, such that suitable diagram commutes (draw it)
v)if α∘f=α∘g for some α∊C, f,g∊MorB then there exists β∊C such that f∘β=g∘β
Proposition: If C is localizing in B then localisation of B with respect to C has a simple description. Every morphism between to objects X and Y in this localisation can be represented by a graph (denoted later (1))
X <-α- W -f-> Y
for some α∊C, f∊MorB. Moreover, two such diagrams
X <-α- W -f-> Y
X <-α’- W’-f’-> Y
represent the same morphism iff there exist β:Z->W, g:Z->W’, β∊C, g∊MorC, such that suitable diagram commutes.
Word about a proof: from a property iv)it follows that indeed every morphism in a localisation has suitable representation. Proof of the latter part is carried out in Gelfand&Manin in a following way: they define category B’ to be a category with objects same as in B and morphisms given by diagrams of form (1). They define suitably composition of such diagrams ((1) can be regarded as a fraction of form f/α and composition is realized by adding such fractions) and use all the properties i)–v)to prove that everything is well defined and that B’ has a suitable universal property. So indeed this B’ must be itself a localisation.
However, class of quasiismorphisms is not localizing in ChA. Cha!:-) We have to build an intermediate category out of ChA – so called homotopy category of A, denoted KA. Its objects are same as these of ChA, and
MorKA(X,Y):= MorChA(X,Y)/{morphisms which are chain homotopic to 0}
One painfully checks that quasiisomorphisms are localizing in KA, so KA localized in quasiisomorphisms has nice description guaranteed by above proposition.
Now follows actually something interesting. We don’t know whether localized KA is equivalent do DA. We have a functor from DA which is identity on objects and which is obviously surjective on morphisms (it’s really obvious). We don’t know whether it’s injective on morphisms. That is, we don’t know if the following is true:
Fact: If f,g: X->Y are homotopic in ChA then their images are equal in DA.
It turns out that it is true (G&M, III.4.3), but for me it’s kind of a miracle – DA is a localisation in quasiisomorphisms. The construction doesn’t say a word about homotopic morphisms. Proof occupies one page in G&M (so it’s about 0.9 pages to long for me to really understand :-).If anybody has any philosophical remarks on this I’ll greatly appreciate if he’ll share them!
Now, when we have our shiny derived category, we move slowly to derived functors. Before, let’s observe that we have a functor from our original category A to DA (realize object of A as a chain complex concentrated in dimension 0, send it to DA). I claim that this functor is an equivalence of categories A and full subcategory of DA consisting of chain complexes with nonzero homology only in dimension 0 (called “category of H0 complexes”).(This is one of very few things I actually checked so here you are :-). We have to check two things, that our functor gives a bijection MorA(X,Y)–> MorDA(X,Y) for every pair of objects X,Y ∊ A, and that every H0 complex of DA is isomorphic to one concentrated in dimension 0.
Both are easy: for the latter one we need to take H0 complex Z and build a diagram
Z <-α- V -β-> H0(Z)
with both α and β quasiisomorphisms. For Vi one can take Zi for i<0, ker(d0) for i=0 and 0 for i>0. For the first one let’s check surjectivity. So we have a diagram
X <-α- Z -f-> Y
and we need to check that it’s equivalent to a diagram
X <-id- X -g-> Y
(these diagrams are images of morphisms from A). For g one takes what f∘α-1 generates on H0, and for suitable β:V->Z, h:V->X one takes V as above, with obvious morphisms. Injectivity is pretty obvious,’cause no matter what representation for morphism you take, you always get the same thing on homologies.
For chain complex X*(or rather cocomplex), or its image in KA or DA, we define shifted complex X[i]n:= X[i+n]. For ~2 years I couldn’t remember this definition – there is always a problem “in which direction is it moving?”. But 2 days ago I finally managed to invent a suitable visualisation: I see integer points on a line which never move.Under this line I see an original complex and then I imagine that this complex moves violently in a direction opposite to the order of integer numbers by i places.
We turn to derived functors, for some simple case for now: suppose we’d like to compute classical ExtiA(X,Y) for some X,Y∊A. You can do it in a standard way, but there is also following:
Fact: ExtiA(X,Y) ≅ HomDA(X[k], Y[k+i])
(As I said in a motivation part, we have a functor Hom(_, Y): A -> A and we’d like to define DHom(_,Y): DA -> DA that would encode all the information about classical Exti(X,Y). Additionally it should be defined by pointwise use of normal Hom. The fact shows that we should have a chance to do something in this spirit)
Notice that left side doesn’t depend on k. However, it’s easy to see that right side doesn’t as well (up to natural isomorphism induced by “shifting functor”). This is very elegant: for example, one can now define product in Ext in a very simple manner:
ExtiA(X,Y) x ExtjA(X,Y)-> Exti+jA(X,Y)
is realized by a composition of morphisms in DA. Things like long exact sequences associated to short exact sequence 0 -> X -> Y -> Z ->0 also follow from general abstract nonsense.(Namely, in more general setting of triangulated category T we always have that so called distinguished triangle – and above short exact sequence is an example of distinguished triangle in derived category – gives rise to apropriate long exact HomTsequence. I hope to write few words on that in a next article.)
Word about a proof of a Fact: It’s easy to see that every element of classic ExtiA(X,Y) gives rise to an element of HomDA(X[k],Y[k+i]), for clarity let’s put k=0. Indeed, element of Ext group can be represented as an extension
0-> Y=V-i -> V-i+1 ->…-> V0-> V1=X -> 0
This extension clearly defines element of HomDA(X,Y[i]), that is a diagram
X <-d-1– V -> Y
where V is a 0 -> V-i->…-> V0-> 0. G&M prove that this assignment is an isomorphism.
Let’s focus for a moment on derived functor of a general additive left-exact functor F: A -> B. We’d like to obtain a DF: D+A -> D+B. Naively, we could take object of DA, represent it as a chain complex, and act on this chain complex with F. This is bad idea, because F in general doesn’t preserve quasiismorphisms – if it does, then I believe it’s exact (I’m sure there is an implication exactness => preserves quasiisomorphisms)(although, notice that F defines a functor on homotopy category KA, because it is additive, so it preserves chain homotopy). So we woudn’t end up with a functor, as functor must preserve isomorphisms (and quasiisomorphisms become isomorphisms in derived category).
What we’ll do instead is motivated by classical derived functors.
We say that class R⊆ObA is adapted to the functor F if following conditions hold:
i) R is closed with respect to taking finite sums
ii) Every object of A might be embedded in some object of R
iii) F takes bounded from the left, exact chain complexes consisting of objects of R into exact sequences (for right exact F one would have to take here complexes bounded from the right).
Now, to make long story short, It’s pretty simple to see that F defines a functor G from K+(R) localized in quasiisomorphisms to DB, where K+(C) is a full subcategory of K+A consisting of these chain complexes whose all objects are from C. One proves that actually K+(C) localized in quasiisomorphisms is equivalent to DA, so we can choose an equivalence Ω: D+A ->”K+(C) localized in quasiisomorphisms” and say that DF is a composition G∘Ω.
This definitions depends obviously on a choice of adapted class C and of equivalence Ω. That’s why one for a second forgets what we’ve done and adopts following definition for a derived functor:
Definition: Given F: A->B as usually, derived functor is a pair consisting of
1) a functor DF: D+A -> D+B which takes exact triples into exact triples
2) a natural transformation εF of obvious functors
K+A -> K+B -> DB and K+A -> DA -> DB
that is universal with these properties (it there is some other pair (G, ε) then there is a unique transformation of functors
K+A —-> DA —DF—> DB and K+A —-> DA —G—> DB
such that suitable diagram commutes.)
Remark about 1): DA, and D+A, are not abelian, but we call a triple exact if it comes from an exact triple in ChA (or Ch+A).
It takes some trouble to prove that what we’ve constructed above is a derived functor, after equipping it with suitable εF.(5 pages in G&M. I don’t even guess what’s trivial and what’s not.)
But, modulo some checking, we’ve done what we wanted to :-)
(There’s a famous exercise in Lang’s Algebra, in the chapter concerning homological algebra:”Take any Homological Algebra notebook and prove all the theorems by yourself”. There is also a famous footnote in polish translation:”We advise a reader to omit this exercise at a first reading”)
I hope to read rest of G&M’s chapter on derived categories, using the “homological momentum” that the exam gave me. Maybe then I’ll write some (shorter) notes here.
14 comments
Comments feed for this article
March 13, 2007 at 2:39 pm
sirix
A few words about learning homological algebra, by James Dolan. Follow both links in his posts.
March 23, 2007 at 1:16 pm
Mikael Johansson
First off, I would sincerely discourage people from learning homological algebra and derived categories from Gelfand-Manin – it really isn’t the best, or even good, on that subject.
Take a look at Weibel – that one’s decent enough.
That said – the post is very interesting, and when I’m not about to leave the office, I’m going to sit down and read it in detail. I had the great luck of doing my undergraduacy at a University with very high emphasis on homological algebra, and thus have something almost reminiscent of a vague feel for what the deal is with derived category. Thus, in the lecture course my thesis advisor is giving this summer on homological algebra, I’ll be stepping in to cover DG-algebras, DG-modules, DG-categories, derived categories and model categories.
Which brings me to the first substantial point I have to make. There are, essentially, two different mainstream ways of getting to a category that has the properties that the derived category has (which include, at the top of the list, that Ext and Tor now are Hom and tensor products). One of them is the derived category approach – and the other is the model category theory from Quillen. Basically, Quillen looked long and hard at what the people doing homotopy in topology were doing, and then adapted that to a purely algebraic context. This, also, lets you localize your category in the quasi-isomorphisms, but you do it in a slightly different way, and with different resutls from it.
I envy you for your capacity to grok sheaf cohomology. I take rather the other direction – for me, the important realization has been that Hochschild cohomology and group cohomology (and Lie algebra cohomology too for that matter) is nothing other than Ext for different abelian categories.
March 23, 2007 at 3:19 pm
John Armstrong
Yeah, Mikael is right: Weibel is the way to go at first. I’m generally of the opinion that if you’re breaking your brain over homological algebra you’re doing it wrong. HA is like the Tao (not the mathematician). You just sit and let the HA do itself.
March 23, 2007 at 4:05 pm
Mikael Johansson
John: We seem to comment on the same threads all over the place. I love the Tao analogy – I need to find a way to use it myself somewhere.
For my own part, I encountered HA through Tor with my MSc thesis subject, and fell in deep and passionate love with it. Things are so … well … I want to say neat, but that’s wrong. I want to say elegant, but that’s not it either. I think connected may cover parts of it, but certainly not all.
March 25, 2007 at 1:24 am
sirix
Guys: I envy you both that you’re able to read Weibel! This was my first lecture on homological algebra and I was literally unable to understand anythuing after first 4 chapters (5th was “Spectral sequences” and I just can’t get over that traumatic experience of reading it in Weibel – I still didn’t learn it properly :-). BTW: Have you seen errata on Weibel’s page? It’s huuuge :-)
I think I might try to try to ignore difficulties I have with HA and just wait for proper time to learn it, as James Dolan suggested in posts above.
Mikael: Maybe You feel like writing something about these interpretations of ext on your blog (or here, of course)? I’d love to read it.
This week I was told of very neat interpretation of Ext. Namely, if one takes a moduli space of (some) bundles (moduli = space where points are in natural correspondence with given objects – in this case with algebraic bundles) then a tangent space in given point of this moduli space – which is some bundle E – can be naturally identified with Ext(E,E).
May 29, 2007 at 6:12 pm
bb
I just discovered your blog, and really like it! A couple of remarks:
1) To see why homotopic maps give the same map in D(A), it suffices to see (by additivity) that nullhomotopic maps give the zero map in D(A). This is the same as showing that nullhomotopic maps factor through an object that has no cohomology (any such object is canonically isomorphic to the 0 object in D(A)). Then there’s an easy “cone proof”: A map of complexes f:K -> L is nullhomotpic if and only if it factors through the cone(K), and the latter is by construction acyclic.
The intuition here comes from topology. The cone on a space X is some contractible space made by degenerating X to a point (so take X x I and crush one of the ends, or something). And now it’s clear that whenever you have a map X -> Y that’s homotopic to the constant map, it means that the map can factor through X -> cone(X) — this is almost true by definition, because this is exactly what homotopic to a constant map means! Applying the philosophy, and keeping in mind that cone and cylinder have topological meanings, a lot of the basic formalism when working with derived categories becomes (I think).
2) A bit of care needs to exercised with the Ext comment! One typically only gets Ext^1(E,E) (think of line bundles), and there isn’t usually a nice moduli “space” of objects of the derived category. This is precisely because when we construct the derived category, we identify homotopic maps but we do NOT remember how these were homotopic — the number of ways two maps F -> F can be homotopic is classified by the group Ext^-1(F,F), upto higher homotopies which are classified by Ext^-2(F,F), ad infinitum. The topological analogue of this is that if you take a topological space and look at the category whose objects are points of the space and maps are homotopy classes of paths, you only remember pi_1 of the space, but forget the higher homotopy groups. In both these situations, the remedy is to construct an object which remembers these higher homotopies. With the appropriate correct definitions, you’ll then get a moduli “space” of objects of the derived category such that the tangent space to a point [F] is the ENTIRE complex RHom(F,F) (so not only do you get the cohomologies Ext^i(F,F), but you also get whatever non-trivial extensions there might be).
June 1, 2007 at 1:40 pm
sirix
bb: I’m very glad you like my blog!
Big thanks for 2), I wondered how one constructs this moduli space out of objects of derived category which are “discrete” – analogy with fundamental groupoid (I think that’s what you reffered to) is helpful.
However, I still don’t really know why one speaks of a “tangent space” in this concept (and what this tangent space has to do with Ext/RHom).
June 2, 2007 at 11:21 am
sirix
On second thought, I think I don’t get it :-) Can you give any reference to point 2)? I tried to find something about it in Gelfand/Manin but there is nothing apparently.
June 2, 2007 at 8:52 pm
bb
The “Neron Models” book explains the construction of the moduli space of line bundles. The paper “Moduli of complexes for a proper morphism” by Max Lieblich (http://arxiv.org/abs/math/0502198) explains the negative ext condition. Here’s my attempt at explaining where the positive exts come from (if you know most/all of this, pardon me for belabouring the point!):
Set k[e] to be the ring k[y]/(y^2), the so called ring of dual numbers. Let X be a smooth projective variety over a field k. Say (just for example) we’re trying to parametrise vector bundles on X. What this means is that we’re trying to represent the functor Vect_X: (k-algebras) -> (Sets) given by Vect_X(R) = {isomorphism classes of vector bundles on X x_k R}.
The tangent space to any functor F:(k-algebras) -> (Sets), at a point x of F(k) is defined to be the fibre over x of the reduction mod e map F(k[e] -> F(k). That is, these are “solutions to the equation defining F in k[e] which give the same solution when reduced mod e” in equation language.
In our case, this says that for a locally free sheaf E on X, the tangent space to Vect_X at the point [E] in Vect_X(k) is the set of isomorphism classes of vector bundles on X x k[e] which give the bundle E when reduced mod e (these are called infinitesimal deformations of E). It’s well known (and really easy to prove) that this set is identified with Ext^1(E,E).
If you replaced Vect_X with the functor to groupoids which associates to a k-algebra R the groupoid of vector bundles on X x_k R (it’s a groupoid by force — you forget the non-isomorphisms), then the resulting thing you’d get would be a stack, rather than a scheme. The tangent space to a stack has two parts (i.e: is a 2-term complex). The first cohomology group of this complex parametrisies infinitesimal deformations, just like before. The 0-th cohomology sheaf parametrises automorphisms of a fixed infintesimal deformation. In our case, this would be (check!) Ext^0(E,E) = Hom(E,E).
June 3, 2007 at 3:56 am
bb
I just noticed that I ended rather abruptly up there, and didn’t explain point 2) of my previous comment. What is missing is the following:
So this tells us that, at the expense of replacing schemes by stacks, we gain the information of an extra cohomology group. Namely, the group Ext^0(E,E) of automorphisms of an infinitesimal deformation. At this point, I think the most natural question to ask is if there’s some other notion of “space” which allows us to recover the ENTIRE complex RHom(E,E), rather than just its first two cohomology groups.
The answer to this question is “yes, there’s something”, but that something is quite complicated (and still under intense development at the hands of Lurie, Toen-Vezzosi, etc) for me to explain (or even understand…). This space is called a derived stack and is an infinity-categorical concept — you can find a sketchy overview the Toen-Vezzosi construction at http://arxiv.org/abs/math/0604504.
June 3, 2007 at 4:49 am
John Armstrong
It’s worth noting that we’ve been pursuing stacks since before Grothendieck was living on a farm in France and shooting at documentary filmmakers who tried to interview him.
June 5, 2007 at 11:50 am
sirix
bb: I need some time to parse what You wrote (so it’s not the case that I know it all :-).
However, I managed to understand what You wrote in 1) – it’s truly just as John Armstrong said above: just sit and allow the Homological Algebra do it for you! :-)
I find it very strange that the proof in Gelfand/Manin doesn’t go along these lines (I don’t have this book right now but I remember even some noncommutative (!) diagrams in the proof). My lecturer reproduced this proof in a classroom – I’m considering to send him what You wrote, for the benefit of next generations…
May 31, 2010 at 10:38 am
Katherine Conklin
You have done it once more. Superb article!
December 23, 2010 at 11:02 pm
Avri
Hey! Really great website! One of a few good blogs on the web.