Put it in the Syntax

I just came across this musing by Graydon Hoare:

I have an ongoing thesis at the moment which I'm exploring in the programming language literature, which is that programming language features do well (all other things being equal) when they eliminate either distant or dynamic state and replace it with either close or lexical state. the underlying point being that we may favour language features that facilitate copying and modifying small bits of code -- fragments which work in their new context -- as a fundamental programming activity.

Yeah, what he said! I'm now going to ramble through some less-than-half-baked ideas that have been going through my head recently. I hope you'll take what you can, and forgive the rest.

Just a couple days ago at work, inspired by the Objects Have Failed paper by Richard Gabriel, and the C History paper by Dennis Ritchie, I was blue-skying about how one could create a radically simpler programming language. I wrote the following on my whiteboard:

  • avoid computation
  • avoid state
  • avoid indirection

At work about a year ago, I designed a language for coordinating clusters of computers in production, which has been moderately successful. That language was designed to be obvious to non-programmers, and so it has no state, no computation, and only grudgingly allows indirection (although it's surprising how close you can get to simulating computation if all you're given is indirection).

Note that all data structures are a form of indirection, even if they're immutable, like in functional languages. As soon as the data structure forgets where it came from (i.e. where it was created), it has become indirect. In fact, I could go even further: as soon as an immediate, direct concept like a person gets abstracted into a non-immediate concept like a social security number, you've paid the price of indirection. Really indirection is just one form of abstraction, although it's an especially confusing one. Abstraction is confusing.

My blue-sky language had a couple other points on the whiteboard besides the "avoid"s above:

  • handle hierarchy
  • handle associations
  • handle collections

  • prefer isomorphisms to transforms

By hierarchy, I was thinking of things like XML and XPath. By associations, I was thinking of things like containment relationships (e.g. between objects and their members), bidirectional relationships (e.g. tables in a relational database), and meta relationships (e.g. RDF). I think you know what I meant by collections.

I think the "isomorphisms vs transforms" part might be incomprehensible without explanation. By "transforms", I meant things like XSL stylesheets which cannot be undone once they're applied, or taking data from a database and presenting it in a UI without without keeping track of where that data came from.

An isomorphism, in contrast to a transform, is reversible. If I have a UI presenting a list of things that came from a database table, then an isomorphism will preserve that relationship, so that when I click on an item in the list, I can immediately traverse back to the database row that the item came from. Since they're isomorphic, you can actually think of them as the "same thing", just with two different representations.

In most modern languages, if I want to traverse from a UI element back to a database element, I'm forced to store some kind of primary key along with the UI elements. If I'm lucky I can use a language that lets me store this extra info as an extra member variable on the UI element -- otherwise I need to create a parallel array to hold the extra info. But it would be more intuitive if I didn't have to forsake the immediately-obvious idea of a "record" and exchange it for the weak, abstract concept of a "record id".

[Aside: This ties in with my belief that an ideal language would not use plain integers to index into lists -- instead it would use a type that is clearly tied to the list that it is an index into. I hardly ever want to do arithmetic on list indices (other than incrementing them to get the next item). So treating list indices as plain old integers is as primitive and brutal as the way that C treats pointers like plain old integers.]

What's the big deal about using isomorphisms as opposed to transforms? I think they help you avoid indirection. And I think indirection is the root of all complexity.

It's interesting that programming-language afficionados, especially the elite ones (i.e. the ones that like functional languages) tend to love adding new features to their languages, but that they do this by increasing indirection and abstraction. Parameterized types, virtual methods, function pointers, closures, continuations, etc. All of these things make programs harder to understand. Yes, they add a lot of power, but I think we should focus on making programs more powerful without having to resort to more abstractions to do it. We should be gaining power by removing layers of abstraction, rather than by adding more layers to cope with the inadequacies of the existing layers.

Amusingly, a lot of programmers hate lisp-style macros because they think they make programs harder to read. I completely disagree. I think macros decrease the level of abstraction in a program. They make the syntax more directly-meaningful, closer to the problem domain. Which brings us back to the quote by Graydon I started this post with.

Followups to Put it in the Syntax:

Posted on August 21, 2003 07:44 PM
More languages articles

Comments

I think there is no single person that has a clearer view of Lisp macros that Paul Graham. He says that Lisp macros *increase* the level of abstraction (which is a *good* thing).

Perhaps we disagree on the definition of "level of abstraction"?

Posted by: Alex Peake at August 23, 2003 04:07 PM

I think we agree on the definition of abstraction, but we're coming at it from opposite directions. You're talking about abstracting away from the implementation details, which is a good thing. I'm talking about abstracting away from the problem domain, so that the the program works only with the platonic ideals of integers, strings, and arrays. Which is a bad thing.

Programmers are frequently encouraged to do both kinds of abstraction, without realizing that the direction matters. I think you should only use abstraction to get closer to the problem domain (the "real world").

Here's a map. Go left.

real world -- program -- language -- machine

Some people have known for a long time (since before I was born) that abstraction away from the problem domain is bad. These people advocate writing programs in a "bottom-up" style. Sometimes they go even further and advocate creating a domain-specific language, or "little language" first, so that you can write the actual program in a language that has non-abstract concepts for all important features of your domain. This is a common strategy in the lisp world.

Now consider macros. Macros let you create a bit of custom syntax and abstract away the implementation details of how it actually works -- macros help abstract away the machine, which is good. But if you don't have macros, you have to write your concept in terms of objects, pointers, data structures, etc. You're forced to translate the problem into the concepts provided by the programming language. This is bad.

When you think to yourself "I'll identify web pages by their URL, and I'll represent the URL as a string", you're abstracting away from the problem domain. Most programming languages encourage you to do this -- they force you to type a lot more code to express your concept directly.

When people talk about how important it is for a new language to have a large standard library, they're really saying that it's important to have non-abstract concepts built into the language for lots of real-world things. The java.io.File class is still abstract (it hides platform-specific differences), but it's a lot less abstract than just a string that holds a file name.

I could go on, and explain why I think that it's better to program closer to the problem domain, but as they say, "that's another story". And one which you probably already know.

Posted by: kim at August 23, 2003 06:45 PM

I think we are essentially in agreement. We believe in abstracting the machine and even linguistic details and focussing on the problem domain.

However, your statement:
"But if you don't have macros, you have to write your concept in terms of objects, pointers, data structures, etc. You're forced to translate the problem into the concepts provided by the programming language."
I believe is stopping short of the possible. In an OOP world, for example, we use objects and methods to provide our *good* abstractions. Objects and methods are *abstract* if written well.

Posted by: Alex Peake at August 24, 2003 10:04 AM

I don't understand what you mean by "avoid computation." This is after all, about writing programs that run on a computer, and a computer does "computations."

Unless I'm missing something.

And a lot of what you are talking about in this entry sounds very similar to what Forth programmers talk about when writing code. If you ever come across a book called "Thinking Forth" (by Leo Brodie) it would be well worth your time to read it. Even though I don't do any Forth programming, it was one of only two books I've read on programming that actually affected the way I write programs (and enforced my dislike of late binding, but that may be due to my thinking that execution speed is still paramount in programming).

Posted by: Sean Conner at August 24, 2003 10:00 PM

Just when I think I'm about to make a pithy comment, somebody beats me to it. I once heard Forth described as "Defining words until the programmer can write a sentence that describes and is the program." But Forth, like Lisp is more an implementation language for the sort of DSL you're talking about. Blue-Sky sounds like a paradigm rather than any one, specific language. (When encountering a domain, create a programming language specifically suited to expression ideas and concrete "imperatives" about that domain--or something like that. I'm sure it's been said better elsewhere.)

I'm also vague on what you mean by "computation." Is that computed: jumps? relationships? values?

Posted by: Bill Glover at August 25, 2003 06:00 PM

Alex, on the contrary, I think limiting yourself to objects and methods is stopping short of the possible. You may be used to them, and so they may seem intuitive, but they really aren't. They're shoes that you have to horn your program into, just like all other programming language abstractions.

I'm not clear what you mean by saying that objects are "abstract if written well". Do you mean that they limit the number of assumptions they make about the rest of the problem? Do you mean that they're reusable?

Sean and Bill, what I mean by avoiding computation is that you should avoid constructs where the behavior of the program is not clear statically. If you have to run the program in your head to figure out what it might do, then it's less clear than it could be. Virtual methods are one of the most common examples of this kind of thing, but it's not just limited to flow of control -- it also applies to values and data structures.

I think the comments about forth and lisp are pretty close to what I'm talking about -- they both have such lightweight syntaxes that they approach "putting it in the syntax" merely by virtue of leaving the syntax so free. Forth has an even more fluid syntax than lisp (ignoring reader macros). I don't have much forth experience, but I think after that recommendation I'll play with it some more.

Bill, you're right that at this point, this is more of a paradigm than a language. But it all began with thinking about what makes a program clean and intuitive, and then thinking about how a language can encourage that kind of program. I think a lot of programs tend to encourage the programmer to map their problem to the structures provided by the language. While I recognize that this is frequently the only way to solve the problem, the main goal that I was trying to achieve was to figure out how to keep from encouraging people to do that.

The trick (and it's a colossal trick), would be for the language designer to get rid of every construct that takes a programmer away from the direct, tangible parts of their problem. Syntax is one of the biggest distraction in most languages. But even when the syntax is flexible, nearly all languages still have an underlying execution model that you need to conform to (cons-cells and lambdas in lisp, stacks in forth, messages in smalltalk).

The concept of an execution model is an example of the kind of thinking that I was trying to get away from. If macros alleviate the problem of fixed syntax, then what would alleviate the problem of a standard execution model?

Posted by: kim at August 25, 2003 08:28 PM

By the way, "Blue Sky" is a great name. Thanks.

Posted by: kim at August 25, 2003 09:39 PM

Abstraction
-----------
"I'm talking about abstracting away from the problem domain,
so that the the program works only with the platonic ideals of integers, strings, and arrays."

Your definition of abstraction is an uncommon one (I've never seen it before).
It's so uncommon that most people seem to miss that it's in the opposite direction
to what they expect; see:
http://www.sauria.com/blog/2003/08/23#507
(where Ted Leung assumes that increasing the level of abstraction takes you closer to the problem domain.)


"Parameterized types, virtual methods, function pointers, closures, continuations
... make programs harder to understand. ... we should focus on making programs more powerful
without having to resort to more abstractions to do it.
We should be gaining power by removing layers of abstraction ..."

(This is quite confusing. Here you talk about things like parameterised types and virtual methods
as adding abstractions, which will take you further away from the machine (and further away from
the platonic ideals of integers, strings, and arrays).
I think that further away from the machine means closer to your problem domain.
This is in contrast to you discussing abstraction as taking you away from the problem domain,
which you do in this same paragraph.)

Anyway, I totally disagree. Higher-order functions (function pointers and closures),
parametric polymorphism (parameterised types), and inclusion polymorphism (virtual methods)
are useful abstraction mechanisms that allow us to express ideas
in code that is closer to the problem domain.
Closer, that is, than code for programming languages that lack these features.

Computation
----------
When you say no computation, what you mean is:
"... avoid constructs where the behavior of the program is not clear statically.
If you have to run the program in your head to figure out what it might do,
then it's less clear than it could be."

Can you give some examples of programs that are not clear statically,
and how you would change them so that they are clear statically?
Or, perhaps, some examples of programs that are clear statically, and do something useful.

Consider a parser, which builds an abstract syntax tree at runtime.
The tree it builds obviously depends on the parser's input,
and cannot be predicted statically.
How would you write a parser while "avoiding computation"?

I would like to see examples of the cluster coordination language you designed,
so I can get an idea of how a language "without computation" would look and would be used.
All I can imagine at present is that a language without computation would be like
specifying a static data-structure at compile-time.
Once it's created, you can't do anything with it.

Posted by: Alistair Bayley at August 28, 2003 08:06 AM

Alistair: the only problem domain that I know of that involves "Higher-order functions, parametric polymorphism, and inclusion polymorphism" is compilers. If you are forced to use any of these things in order to express your problem, then your programming language is forcing you to express your problem in abstract terms. I am using the word abstract as it's defined in dictionaries:


  • Considered apart from concrete existence: an abstract concept
  • Not applied or practical; theoretical.
  • Difficult to understand; abstruse: abstract philosophical problems.

You are correct in pointing out that code that uses these concepts can frequently be clearer and more direct than code that lacks these concepts. For example, see my recent post about how it would be nice to have asynchronous operations built into C# at the syntax level. But just because sophisticated abstractions are better than primitive abstractions doesn't mean that we should be satisfied with requiring the programmer to reconceptualize their problem in terms of functions, polymorphism, collections, etc. These concepts are really irrelevant to the problem at hand, except insofar as they are the best techniques that we currently have for describing an executable solution.

Introducing a new abstraction in order to move from CPU-level computation (integers, pointers) to a higher-level representation (HOFs, type systems) doesn't mean it's any less abstract with respect to the actual problem.

As for your question about avoiding computation, I think you took my statements too strongly. There are situations where you have to do computation. But I'll give you an example: it's easier for me to tell you to look at the page at http://www.kimbly.com/, than it is for me to describe to you the intricacies of the HTTP protocol. A URL is a simple noun, while a protocol is a long involved procedural description. When I said to "avoid computation" I didn't mean to ban it outright -- just to prefer techniques that are declarative and/or specific, rather than techniques that are procedural and/or indirect.

And for the record, I think non-side-effecting functional languages are still procedural and indirect -- often even more so than imperative languages.

The language I designed does in fact look very much like data structures described at compile time. It's halfway between a configuration file and a Python script. Here's an example. This describes an instantiation of our indexer, which takes some input files, indexes them, and writes some output files.

wine_dgidx : Dgidx
        input = data/post_forge/wine
        output = data/dgraph_input/wine

The output from the indexer is used by an online server, described thusly:

wine_dgraph : Dgraph
        log_dir = logs/
        input = data/run/wine
        port = 8000

To restart a server, you use a Script:

runme : Script
        wine_dgidx
        if wine_dgraph.running
                wine_dgraph.stop
        rotate_data
        wine_dgraph.start

There are other features to the language, such as single-assign variables, repetition, error handling, and an escape hatch for tasks that aren't built in (you can either fall back to using the command prompt, or you can embed Perl code).

When I was designing the language, I would have preferred to create it as a domain-specific language embedded in Scheme. But that wasn't an option.

Posted by: kim at August 28, 2003 01:46 PM

I'm looking for an excuse... er evaluating the value of a DSL for one or more domains. This thread just came near some questions I've been wanting to ask.

"When I was designing the language, I would have preferred to create it as a domain-specific language embedded in Scheme."

I'd like to hear more about the language.

What did you use as an implementation language?

What was the problem you solved by going with a DSL over, say Perl scripts?

How did you implement the language: By hand? Flex/Bison? JavaCC?

How complex is the grammar (LL - LALR)?

Nosy questions so just say, "I can't tell you." if it's secret. But I would be interested in any more you could say. Maybe this deserves it's own post?

Posted by: Bill Glover at August 28, 2003 03:40 PM

(Sorry the first post was so long. It's a real art to write clearly and succinctly, and I've a long way to go ...)

"the only problem domain that I know of ... is compilers. If you are forced to use any of these things ..."

Higher-order functions are an elegant way of creating domain-specific languages. Creating type-safe collections (trees, maps, and other homogenous data strcutures) is easier with parametric polymorphism. It's a shame I can't think of compelling uses for inclusion polymorphism (subtyping) but I'm sure they exist.

"Introducing a new abstraction in order to move from CPU-level computation (integers, pointers) to a higher-level representation (HOFs, type systems) doesn't mean it's any less abstract with respect to the actual problem."

Yes it does - that's exactly what it means. It's less abstract w.r.t. the problem domain because you're moving closer to the problem domain. You're able to model the problem domain in terms that are higher-level - less detailed - than before. That's almost always an advantage. For example, if you have a good type system then the types you define can model directly the concepts in your problem domain, and the compiler can check whether or not the things you're doing to them are sane or not.

In "avoiding computation" I didn't understand your URL example. You want me to look at a URL, so I use something (a library or browser) which gives me a simple interface with with to fetch the resource at the URL. Using this something (library, browser) means I don't need to know the underlying details (http protocol) about how the resource is fetched. That is simply abstraction.

And I still don't understand your definition of indirection; I don't understand why data structures are a form of indirection. And what is "the price of indirection"?

Posted by: Alistair Bayley at August 29, 2003 03:32 AM
You're moving closer to the problem domain. You're able to model the problem domain in terms that are higher-level - less detailed - than before.

I think this is the crux of our miscommunication. You're pointing out that abstractions help you model the problem domain, but it's precisely the process of creating a model that I'm objecting to. I think we should strive to make modeling unnecessary.

I think you're coming at this from the perspective of someone writing reusable libraries -- from that perspective, you want to have as many abstractions as you need in order to model your domain succinctly and precisely. Meanwhile I'm coming at it from the perspective of the actual language user -- the code grunt working on J2EE projects with 200 other programmers, or the hacker who wants to slap together a script to connect his cell phone and his web site.

My gripe is that in languages like Java, library writers are forced to phrase their "model" in terms of classes -- there really are no other ways in which a solution can be expressed. Haskell isn't much better, forcing you to express your solution in terms of functions and types. What haskell does have going for it is extensible infix syntax, which allows you to separate the syntax from the semantic model. Plus its higher-order features let your semantic model be arbitrarily complex.

As for the example of the URL, I'll try again. I have so much to write about it, that I'll make it a whole post on its own.

Posted by: kim at August 29, 2003 02:25 PM

Here's a paper titled "Usability Issues in the Design of Novice Programming Systems". One of the suggestions is "Support Direct Manipulation and Definition by Example", which seems very related to the theme of this post.

http://www-2.cs.cmu.edu/~pane/cmu-cs-96-132.html

Posted by: kim at November 11, 2003 06:48 PM

From the creator of the "XL" language, a short blurb on "Concept Programming". I think he and I are aiming at the same idea. Specifically, he uses the word "abstract" in the same way as I do.

The point of concept programming is to highlight that abstractions are always destructive. There is always something from the concept that doesn't appear in its code representation. Understanding this, and trying to minimize the differences, is key to writing good code.

LtU has a thread discussing concept programming.

Posted by: kim at January 19, 2004 06:38 PM

That link to the LtU dicussion of concept programming has changed to:

http://lambda-the-ultimate.org/classic/message10694.html

Posted by: John Eikenberry at February 9, 2005 01:20 PM

50% Off for Ed Hardy Clothing,Christian Audigier Clothes,Ed hardy tattoo,Ed Hardy,Christian Audigier,Ed Hardy Hat,Ed Hardy Shirt,Ed Hardy Hoodies
discount ed hardy
ED Hardy Caps
Ed Hardy Handbags
ED Hardy sunglasses

Posted by: kate at September 30, 2009 03:11 AM

These Women's Classsic Tall 5815 Boots in pink flower print can either be worn at their normal height if you want Ugg boots, but in order for you to create a more casual look to what you are wearing they can be pushed down Women's UGG Classic Tall 5815 Boots in Baked Clay

Posted by: ugg boots on sale at October 27, 2009 02:37 PM

Love this man. Great stuff, great prices, free shipping. Email him if you cant find what you are looking for and he will look for you. Good customer service.louis vuittonSomeone who is knowledgeable in louis vuitton.Another guy from hong Kong (Largest louis vuitton second hand city, I believe) he has great stuff at fair prices but his shipping is insane

Posted by: louis vuitton at October 29, 2009 09:08 AM

Love this man. Great stuff, great prices, free shipping. Email him if you cant find what you are looking for and he will look for you. Good customer service.louis vuittonSomeone who is knowledgeable in louis vuitton.Another guy from hong Kong (Largest louis vuitton second hand city, I believe) he has great stuff at fair prices but his shipping is insane

Posted by: louis vuitton at October 29, 2009 09:08 AM

Love this man. Great stuff, great prices, free shipping. Email him if you cant find what you are looking for and he will look for you. Good customer service.louis vuittonSomeone who is knowledgeable in louis vuitton.Another guy from hong Kong (Largest louis vuitton second hand city, I believe) he has great stuff at fair prices but his shipping is insane

Posted by: louis vuitton at October 29, 2009 09:08 AM

Love this man. Great stuff, great prices, free shipping. Email him if you cant find what you are looking for and he will look for you. Good customer service.louis vuittonSomeone who is knowledgeable in louis vuitton.Another guy from hong Kong (Largest louis vuitton second hand city, I believe) he has great stuff at fair prices but his shipping is insane

Posted by: louis vuitton at October 29, 2009 09:08 AM

Oh! What a cool points and the cold weather, the winter is coming, I’d like to share the UGG Boots tips to keep your feet warm.. there’s few series UGGS for you to see the winter out, such as classic tall ugg boots, classic short ugg boots, claasic cardy ugg boots and so on, the cute boots not only show you the warm, but also the fashion style. Well, seems too much words, see you next time~

Posted by: ugg boots at November 2, 2009 01:35 AM

Good day! Thx for your great post and Im thinking about how to introduce my ugg boots to you cos Im not sure if u like this. Many people who live in the cold area like the ugg boots, especially the north-europe. Our uggshare.co.uk supply the cheapest classic cardy ugg boots, class tall ugg boots, classic short ugg boots and other series of uggs, hope my words didn’t trouble u, cy!

Posted by: ugg boots at November 4, 2009 10:41 PM

People all over the world know the abercrombie and fitch,but not everyone really knows how fashion the abercrombie is,hollister is the Legend maker. Everybody wears the hollister clothing would be the abercrombie mensand the abercrombie womens, if you want know you can search the Ruehl No.925 or abercrombie outlet in the www.google.com .

Posted by: anf at November 13, 2009 12:34 AM

Uggs on sale now.UGG Classic Cardy Boot makes me different form the other

girls. The UGG Bailey Button Boot is a good choice for female.

Posted by: ugg classic cardy boots at November 16, 2009 11:34 PM

Louis Vuitton , commonly referred to as Louis Vuitton 08 FW Senior RTW Show and Louis Vuitton Limited Sports Car, or sometimes shortened to Louis Vuitton & Infiniti In 2009 Geneva Motor Show has become one of the most Luis Vuitton bags Agendas luxurybrands Louis Vuitton Change Flower Into ATM.

Posted by: at November 17, 2009 01:14 AM

Louis Vuitton , commonly referred to as Louis Vuitton 08 FW Senior RTW Show and Louis Vuitton Limited Sports Car, or sometimes shortened to Louis Vuitton & Infiniti In 2009 Geneva Motor Show has become one of the most Luis Vuitton bags Agendas luxurybrands Louis Vuitton Change Flower Into ATM.

Posted by: 1 at November 17, 2009 01:16 AM

UGG Bailey Button bootsis a new style in 2009.The classic cardy uggs boots is another hot boots that worth of buying.And the classic tall ugg boots will make your winter amusing.And now uggs on sale,if you are looking for such a boot,the ugg boots is good choice this year.

Posted by: UGG Bailey Button Boots at November 17, 2009 02:13 AM

I bought a pair of ugg boots last year, so pretty! the quality of it is also good, I have wear it for a long time without any problem.you don't need to worry about its quality at all. with a reasonabal price and good quality ,I think it deserve you to own uggs boots on sale.

Posted by: uggs on sale at November 17, 2009 07:50 PM

www.enjoywholesale.com

china wholesale clothing,china wholesale shoes,china wholesale electronics,china wholesale suppliers,china manufacturers

china wholesale products,light in the box,wholesale lots,wholesale ipod
china direct,china dropship,china trade,made in china

electronics wholesaler,ebay wholesaler,financial wholesaler
fashion wholesaler,clothing wholesaler,wholesaler magazine

computer wholesaler,external wholesaler,dvd wholesaler,wholesaler definition,china wholesaler,mutual fund wholesaler,define wholesaler,insurance wholesaler


discount ugg boots
forture
ugg boots
Discount store

Posted by: wholesaler business website, net shopping site, external wholesaler,dvd wholesaler,wholesaler definition,china wholesaler,mutual fund wholesaler,define wholesaler,insurance wholesaler at November 18, 2009 03:04 AM

lxjuan08ed hardyis a famous ed hardy store which sell directly ed hardy clothing, shoes, boots, swim suit and other cheap ed hardy.

Browse through our catalogue of hundreds of ed hardy clothing,Ed hardy Shirt,Ed hardy ... Buy Ed Hardy today for a gift, for a friend, or for yourself.

Posted by: ed hardy at November 18, 2009 03:52 AM

What is good for winter in 2009? I think the new UGG Mayfaire Boots
5116
is a good choice for lady.And the UGG Classic Cardy
Boots
makes you special.If you want to be warm in the cold days,the 27_31_49.html">UGG Classic Tall Boots makes your dream come true.And aslo the UGG Women's Bailey Button Boot is as fashion as comfortable.There is a special ugg boots for you.

Posted by: uggs on sale at November 19, 2009 03:57 AM


This

99.html">ugg mayfaire boots

pictured here is

the standard, the one I have has a zipper on the inside and that

makes them much easier to get in and out of. Mine have studs on the

side and are black. Very stylish! Great to wear in the winter but

be careful of the snow.

Posted by: aetrewte at November 19, 2009 07:49 PM

We are the best online sales for the china wholesale . Here you can have a large of choices of kinds Ugg Boots,Converse Shoes,Timberland Boots,puma shoes,Nike Shox Shoes ,Nike Dunk SB Shoes,Nike Air Max,Links Of London,Tiffany Jewelry,Dior Handbags?,jimmy choo handbags ,Cartier Watches, 8GB Mp4 Players,Bluetooth Car DVDs. All our cheap online cheap goods are high quality and original packages, and best service. We offer our customers the best service, 7 days arrive at your door.Enjoy your easy and happy shopping with us.

Posted by: cheap goods sale. at November 19, 2009 09:51 PM

Wedding and bridesmaid dresses and shoes from Hell.

Everything you need to know about om dresses. As always, the best place for full info on businesses,

Look more beautiful on your wedding day wearing gorgeous Wedding dress that are unique and with lasting impression.

Posted by: cokefish at November 20, 2009 02:42 AM

Wedding and bridesmaid dresses and shoes from Hell.

Everything you need to know about om dresses. As always, the best place for full info on businesses,

Look more beautiful on your wedding day wearing gorgeous Wedding dress that are unique and with lasting impression.

Posted by: cokefish at November 20, 2009 02:42 AM

Wedding and bridesmaid dresses and shoes from Hell.

Everything you need to know about om dresses. As always, the best place for full info on businesses,

Look more beautiful on your wedding day wearing gorgeous Wedding dress that are unique and with lasting impression.

Posted by: cokefish at November 20, 2009 02:44 AM

Do you like sports? If you like it,the NIke Air Max TN and Nike Air Max 360 is a good choice for you.And now the there is a good news,CheapNike Air Max running Shoes is waiting for you.I think The New Nike Air MAX 2009 Running Shoes makes you great comfortable.

Posted by: Nike Air Max shoes at November 20, 2009 03:22 AM

Both items in excellent condition and I'm thrilled to find these

href="http://www.mytobling.com/ugg-mayfaire-boots-c-99.html">ugg

mayfaire boots

! Thanks!

Posted by: aewree at November 20, 2009 03:49 AM

xiaorong Auction house Antiquorum auctioned off a very rare vintage chronograph Patek Philippe that
replica watches
replica watches
replica Jaeger LeCoultre watches


replica watches
replica watches
replica A.Lange&Sohne watches

replica watches
replica watches
replica Breitling watches

Posted by: replica Piaget watches at November 21, 2009 05:44 AM

Your article is write very well, I like it very much ~
ghd Hair Straightener
ghd Hair Straighteners
ghd straighteners
GHD
hair straighteners
bose in ear headphones
bose on ear headphones
bose headphones
nike sb dunks
nike dunks
I wish you have a wonderful day!Thank you.

Posted by: ghd straighteners at November 22, 2009 08:28 PM

Your article is write very well, I like it very much ~
ghd Hair Straightener
ghd Hair Straighteners
ghd straighteners
GHD
hair straighteners
bose in ear headphones
bose on ear headphones
bose headphones
nike sb dunks
nike dunks
I wish you have a wonderful day!Thank you.

Posted by: ghd straighteners at November 22, 2009 08:29 PM

Your article is write very well, I like it very much ~
ghd Hair Straightener
ghd Hair Straighteners
ghd straighteners
GHD
hair straighteners
bose in ear headphones
bose on ear headphones
bose headphones
nike sb dunks
nike dunks
I wish you have a wonderful day!Thank you.

Posted by: ghd straighteners at November 22, 2009 08:29 PM

Your article is write very well, I like it very much ~
ghd Hair Straightener
ghd Hair Straighteners
ghd straighteners
GHD
hair straighteners
bose in ear headphones
bose on ear headphones
bose headphones
nike sb dunks
nike dunks
I wish you have a wonderful day!Thank you.

Posted by: ghd straighteners at November 22, 2009 08:30 PM

Timeberland boots on sale now! Do you want moreTimeberland boots information?Just move your mouse and press it to our Timberland shoes online store.

Posted by: Timberland uk at November 22, 2009 11:01 PM

Timeberland boots on sale now! Do you want moreTimeberland boots information?Just move your mouse and press it to our Timberland shoes online store.

Posted by: Timberland uk at November 22, 2009 11:01 PM

[url=http://www.cartierwatches.us/Rado/]Radowatches[/url]
[url=http://www.cartierwatches.us/Tag-Heuer/]TagHeuerwatches[/url]
[url=http://www.iwcwurltches.us/Vurlcheron-Consturlntin/]Vurlcheron Consturlntin wurltches[/url]
[url=http://www.iwcwurltches.us/Rolex/]Rolex wurltches[/url]
[url=http://www.longineswurltches.org/Rolex/Explorer/]Rolex Explorer wurltches[/url]
[url=http://www.longineswurltches.org/Rolex/GMT/]Rolex GMT wurltches[/url]
[url=http://www.patekphilippewatches.us/Rolex/Air%20King/]Rolex Air-King watches[/url]

Posted by: Rolex Air-King watches at November 23, 2009 08:39 AM

Laptop Battery Laptop Battery Laptop Batteries
Laptop Batteries discount laptop battery
discount laptop battery
notebook battery notebook battery
computer battery computer battery
replacement laptop battery replacement laptop battery
notebook batteries notebook batteries

Posted by: Laptop Battery at November 23, 2009 09:56 PM

ugg boots

Posted by: ugg boots at November 25, 2009 01:27 AM

Ugg Classic Cardy

Boots

Ugg Classic Tall

Boots

Ugg Classic Short

Boots

Posted by: topuggshoes at November 26, 2009 03:25 AM

I have learned a lot from this article, thanks for the info.

Posted by: hisunglasses ratings at November 27, 2009 03:35 AM

We are the best online sales for the china wholesale . Here you can have a large of choices of kinds cheap ugg classic tall boots on sale, tiffany & co jewelry,tiffany and co silver earrings,tiffany cheap silver rings,mbt shoes on sale.All our cheap online cheap goods are high quality and original packages, and best service. We offer our customers the best service, 7 days arrive at your door.Enjoy your easy and happy shopping with us.

Posted by: China Wholesale at November 27, 2009 04:27 AM

Just wanted to say great job with the blog, today is my first visit here and I’ve enjoyed reading your posts so far
ugg bailey button
Wow, my ugg classic mini will not be coming off now! I’ve had them on for 12hrs strait and I do not want to take them off. Thanks for everything, well worth the wait.

Posted by: ugg bailey button boots at November 28, 2009 03:50 AM

Buy Kamagra
Earn Google
M65 Jacket
Airline Dog Carrier

Posted by: Cheap Kamagra at November 28, 2009 03:58 AM

chaoying nfl jerseys
Giants Jerseys
Patriots Jerseys
Packers Jerseys
These things are good, I hope you can continue to maintain!

Posted by: jerseysleague at November 29, 2009 03:34 AM

Paul Smith has been collaborating with a few different organizations recently and his latest venture sees him teaming up with Japanese bicycle saddle, Paul Smith bag, on a limited edition leather saddle. The release features Smith’s signature stripes where only 20 will be available at Paul Smith Clothing store in Japan and 8 at the Floral Street store in London. Get on it quick

Posted by: at November 29, 2009 11:08 AM

Paul Smith has been collaborating with a few different organizations recently and his latest venture sees him teaming up with Japanese bicycle saddle, Paul Smith bag, on a limited edition leather saddle. The release features Smith’s signature stripes where only 20 will be available at Paul Smith Clothing store in Japan and 8 at the Floral Street store in London. Get on it quick

Posted by: fasf at November 29, 2009 12:12 PM

Australian GlobalNike Dunks Campus Group after the closure of many institutions, the resettlement of thousands of international students has not been Nike Dunkcompleted, a private language school in Sydney have recently closed down. The reporter learned from the Australian Nike SBConsulate-General Guangzhou Education Division was informed that the New South Wales, Australia Maewill English Language Institute Nike Dunk High (Marvel English Language Institute) on November 19 into the automatic bankruptcy supervision procedures, including Nike Dunk Low23 Chinese students, including 200 international students be affected thereby.
According to reports,
Nike Air Max is located in Sydney's northern coast Maewill English Language Institute November 19 closure notices postedAir Max Shoes abruptly, resulting in nearly 200 international students facing the school, including 23 Chinese students, most under the age of 18 minors. Air Max 90This school is located 30 kilometers north of Sydney urban area, not large scale in private schools. 19 noon, the school classrooms and Air Max 95offices upstairs doors have been locked, only the ground floor of the reception room open.
English
nike jordansLanguage Institute at the Marvel web site can be seen, the school jordan shoeswas established in June 1996 by two partners who owned and operated. It is understood that the language school students are from air jordanAsia and South America (including China, Japan, South Korea, Brazil and Peru, etc.), air jordansin language learning and high school curricula.

Posted by: nicole at November 29, 2009 08:12 PM


ugg boots http://www.uggbootshoes.com
Cheap ugg boots http://www.uggbootshoes.com
ugg boots classic http://www.uggbootshoes.com
ugg classic Boots http://www.uggbootshoes.com
Cheap UGG Boots http://www.uggbootshoes.com
Ugg Boots Show All http://www.uggbootshoes.com
Ugg Boots 2009 Hot Bailey Button http://www.uggbootshoes.com
Ugg Boots Classic Mini http://www.uggbootshoes.com
Ugg Boots Classic Cardy http://www.uggbootshoes.com
Ugg Boots Classic Leopard http://www.uggbootshoes.com
Ugg Boots Classic Metallic http://www.uggbootshoes.com
Ugg Boots Classic Paisley http://www.uggbootshoes.com
Ugg Boots Classic Short http://www.uggbootshoes.com
Ugg Boots Classic Tall http://www.uggbootshoes.com
Ugg Boots Nightfall http://www.uggbootshoes.com
Ugg Boots Sundance II http://www.uggbootshoes.com
Ugg Boots Ultra Short http://www.uggbootshoes.com
Ugg Boots Ultra Tall http://www.uggbootshoes.com

Posted by: ugg boots at November 30, 2009 01:17 AM

Just wanted to say great job with the blog, today is my first visit here and I’ve enjoyed reading your posts so far
ugg bailey button
Wow, my ugg classic mini will not be coming off now! I’ve had them on for 12hrs strait and I do not want to take them off. Thanks for everything, well worth the wait.

Posted by: ugg bailey button boots at November 30, 2009 05:35 AM

Just wanted to say great job with the blog, today is my first visit here and I’ve enjoyed reading your posts so far
ugg bailey button
Wow, my ugg classic mini will not be coming off now! I’ve had them on for 12hrs strait and I do not want to take them off. Thanks for everything, well worth the wait.

Posted by: ugg bailey button boots at November 30, 2009 06:07 AM

You should go to www.uggssky.com who want to buy cheap ugg boots ,classic tall boots,
short tall and bailey boots,buy youself or your friedns a pair of ugg boots for the christmas!

Posted by: UGG Bailey Button Boots at November 30, 2009 12:30 PM

Nice post. This post is different from what I read on most blog. And it have so many valuable things to learn. Thank you for your sharing!

Posted by: stargate worlds naquadah at November 30, 2009 10:00 PM

Spring is near,every girl wants to be the bride in the special season.They are eager to put on beautiful Wedding Dresses or the Bridal gowns.During the day the Wedding gowns is the good choose,and the night,if you want radiant,you need the Evening gowns.
About the bridesmaid,they have to wear Bridesmaid Dresses in order to avoid grab limelight with the bride.And the Flower Girl has the Flower Girl Dresses,too.In the wedding,the Cocktail Dresses and the Evening Dresses is necessary,too!And remember,the Wedding Dress of the Bridal Dress must be the most glaring!

Posted by: weddingdressclub at December 1, 2009 12:16 AM

What kind of girls do you like? [url=http://www.louisvuittonlive.com/products/17549.html]Louis Vuitton Eugenie Wallet Replica[/url] And what kind of girls do you want to marry? Such these kinds [url=http://www.louisvuittonlive.com/products/17524.html]Neverfull MM[/url] of questions that many men have asked to themselves.[url=http://www.louisvuittonlive.com/products/17524.html]Louis Vuitton Neverfull MM Replica[/url]and she is [url=http://www.replicaguccisale.com]gucci[/url] always dressed in fantastic clothes and never forgets to take the style bag. But I want to marry a girl who may have never bought any style bag but she knows how to save money and how to build a family.” These words are said by a man, which is the answer of these questions of most of men.How to judge a girl who is better to love or better to marry is quite difficult for men. When a man is young, the likely decision for him to make maybe is choosing the girl with

Posted by: fanqin at December 1, 2009 12:40 AM

The world famous luxury brand Louis Vuitton Replica Speedy 25 not only provides tremendously expensive and elegant Louis Vuitton handbags and Louis Vuitton Speedy 25 Replica, it also has a wide range gucci variety of aviator style sunglasses. Moreover the oversized style is the celebrity favorite. Marc Jacob’s wild aspiration and delicate detailing add color to the Louis Vuitton sunglasses, which have distinguished Louis Vuitton styles from other designers.The instant hit, Galliera GM first line of limited edition sunglasses, launched in 2005 was a tremendous success. Though it was inspired by the classic gangster movie, Scarface, the designer has kept a secret and engaged in designing until the release for months prior to the date. It turned out to be a overwhelming wise decision which led Louis Vuiton sunglasses to a constant collection later that year.

Posted by: fanqin at December 1, 2009 12:41 AM

Now more and more young people love to wear puma running shoes,due to the puma shoes make you feel more comfortable and more fashionable,buy cheap puma shoes online that you could go to www.ilovepuma.com the puma store to buy
Puma Future Cat,
fluxion ii
or cat puma shoes,high quality and best sprice with free shipping.

Posted by: puma running shoes at December 1, 2009 06:32 AM

Thanks for the awesome information.To celebrate Christmas,there are great sale promotions on http://nikejordanshoes2sell.com/,all of our products such as cheap air jordan men shoes,af1 shoes,nike nz shoes or ed hardy high boots ,d&g high boots are on sale,ugg sundance II boots low price,high quaility.Time limited!come on to get what you want!

Posted by: nike dunk SB at December 1, 2009 08:57 AM

Thank you for the message supplyer!There are amazing ugg ultra tall ,ugg sundance II and cheap ugg night fall sale promotions on our company to thank for the customer of http://www.uggboots2buy.com/ and to embrace the coming Christmas. You can Get one gift free once you buy an ugg boots,such as cheap ugg classic crochet or ugg bailey button on sale on our website. Action is louder than speak. Hurry up and you may be the first one to get the gift.

Posted by: ugg boots at December 1, 2009 08:58 AM


It seems that I got the right things! these chestnut

href="http://www.mytobling.com/ugg-ultra-short-boots-c-

42.html">ugg ultra short

comfortable,beautiful,and the price is competitive.
LOVE IT Beautiful. Thank you for all you have done.

href="http://www.mytobling.com/ugg-ultra-tall-boots-c-43.html">ugg

ultra tall


Posted by: ewferrewter at December 1, 2009 12:22 PM


It seems that I got the right things! these chestnut

href="http://www.mytobling.com/ugg-ultra-short-boots-c-

42.html">ugg ultra short

comfortable,beautiful,and the price is competitive.
LOVE IT Beautiful. Thank you for all you have done.

href="http://www.mytobling.com/ugg-ultra-tall-boots-c-43.html">ugg

ultra tall


Posted by: ewferrewter at December 1, 2009 12:23 PM

What forms of payment do you accept for this

href="http://www.mytobling.com/ugg-ultra-short-boots-c-

42.html">ugg ultra short

?
Received and cute

boots-c-43.html">ugg ultra tall

as can be.

Thanks for fast response and shipping. STARS!

Posted by: eqwfwer at December 1, 2009 12:25 PM

[url=http://www.realugg.com/ugg-bailey-button-c-52.html]UGG Bailey Button[/url]

[url=http://www.realugg.com/ugg-christmas-special-offer-c-75.html]UGG Christmas Special Offer[/url]

[url=http://www.realugg.com/ugg-classic-crochet-c-36.html]UGG Classic Crochet[/url]

[url=http://www.realugg.com/ugg-knightsbridge-c-58.html]UGG Knightsbridge[/url]

[url=http://www.realugg.com/ugg-lo-pro-button-c-57.html]Ugg Lo Pro Button[/url]

[url=http://www.realugg.com/ugg-locarno-c-72.html]UGG Locarno[/url]

[url=http://www.realugg.com/uQgg-mayfaire-boots-c-74.html]UGG Mayfaire Boots[/url]

[url=http://www.realugg.com/ugg-new-style-5220-c-60.html]UGG New Style[/url]

[url=http://www.realugg.com/ugg-suede-boots-c-70.html]UGG Suede Boots[/url]

[url=http://www.realugg.com/ugg-tall-stripe-cable-knit-c-73.html]UGG Tall Stripe Cable Knit[/url]

[url=http://www.realugg.com/ugg-womens-classic-argyle-knit-c-71.html]UGG Women's Classic Argyle Knit[/url]

[url=http://www.realugg.com/womens-coquette-c-59.html]Women's Coquette[/url]

[url=http://www.realugg.com/ugg-mini-boots-c-33.html]UGG Classic Mini [/url]

[url=http://www.realugg.com/ugg-womens-rainier-c-53.html]Ugg Women's Rainier[/url]

[url=http://www.realugg.com/ugg-tall-boots-c-30.html]UGG Tall Boots[/url]

[url=http://www.realugg.com/ugg-sundance-c-32.html]UGG Sundance[/url]

[url=http://www.realugg.com/ugg-cardy-boots-c-29.html]UGG Cardy boots[/url]

[url=http://www.realugg.com/ugg-nightfall-c-31.html]UGG Nightfall[/url]

[url=http://www.realugg.com/ugg-ultra-short-c-34.html]UGG Ultra Short[/url]

[url=http://www.realugg.com/ugg-ultra-tall-c-35.html]UGG Bailey Button[/url]

[url=http://www.realugg.com/ugg-christmas-special-offer-c-75.html]UGG Christmas Special Offer[/url]

[url=http://www.realugg.com/ugg-classic-crochet-c-36.html]UGG Classic Crochet[/url]

[url=http://www.realugg.com/ugg-knightsbridge-c-58.html]UGG Knightsbridge[/url]

[url=http://www.realugg.com/ugg-lo-pro-button-c-57.html]Ugg Lo Pro Button[/url]

[url=http://www.realugg.com/ugg-locarno-c-72.html]UGG Locarno[/url]

[url=http://www.realugg.com/ugg-mayfaire-boots-c-74.html]UGG Mayfaire Boots[/url]

[url=http://www.realugg.com/ugg-new-style-5220-c-60.html]UGG New Style[/url]

[url=http://www.realugg.com/ugg-suede-boots-c-70.html]UGG Suede Boots[/url]

[url=http://www.realugg.com/ugg-tall-stripe-cable-knit-c-73.html]UGG Tall Stripe Cable Knit[/url]

[url=http://www.realugg.com/ugg-womens-classic-argyle-knit-c-71.html]UGG Women's Classic Argyle Knit[/url]

[url=http://www.realugg.com/womens-coquette-c-59.html]Women's Coquette[/url]

[url=http://www.realugg.com/ugg-mini-boots-c-33.html]UGG Classic Mini [/url]

[url=http://www.realugg.com/ugg-womens-rainier-c-53.html]Ugg Women's Rainier[/url]

[url=http://www.realugg.com/ugg-tall-boots-c-30.html]UGG Tall Boots[/url]

[url=http://www.realugg.com/ugg-sundance-c-32.html]UGG Sundance[/url]

[url=http://www.realugg.com/ugg-cardy-boots-c-29.html]UGG Cardy boots[/url]

[url=http://www.realugg.com/ugg-nightfall-c-31.html]UGG Nightfall[/url]

[url=http://www.realugg.com/ugg-ultra-short-c-34.html]UGG Ultra Short[/url]

[url=http://www.realugg.com/ugg-ultra-tall-c-35.html]UGG Ultra Tall[/url]

[url=http://www.realugg.com/ugg-boots-insoles-c-56.html]Ugg Boots Insoles[/url]

[url=http://www.realugg.com/ugg-short-boots-c-28.html]UGG Short Boots[/url]

[url=http://www.realugg.com/ugg-ascot-c-41.html]UGG Ascot[/url]

[url=http://www.realugg.com/ugg-keychains-c-37.html]Ugg Keychains[/url]

[url=http://www.realugg.com/specials.html]ugg boots sale[/url]

[url=http://www.realugg.com/ugg-tall-boots-c-30.html]classic ugg boots[/url]

[url=http://www.realugg.com/ugg-tall-boots-c-30.html]classic tall ugg[/url]

[url=http://www.realugg.com/ugg-short-boots-c-28.html]ugg short[/url]

[url=http://www.realugg.com/specials.html]ugg sale[/url]

[url=http://www.realugg.com/specials.html]ugg boots uk[/url]

[url=http://www.realugg.com/specials.html]ugg uk[/url]

[url=http://www.realugg.com/specials.html]ugg boots[/url]

[url=http://www.realugg.com/ugg-tall-boots-c-30.html]Tall Ugg Boots[/url]
UGG Ultra Tall

[url=http://www.realugg.com/ugg-boots-insoles-c-56.html]Ugg Boots Insoles[/url]

[url=http://www.realugg.com/ugg-short-boots-c-28.html]UGG Short Boots[/url]

[url=http://www.realugg.com/ugg-ascot-c-41.html]UGG Ascot[/url]

[url=http://www.realugg.com/ugg-keychains-c-37.html]Ugg Keychains[/url]

[url=http://www.realugg.com/specials.html]ugg boots sale[/url]

[url=http://www.realugg.com/ugg-tall-boots-c-30.html]classic ugg boots[/url]

[url=http://www.realugg.com/ugg-tall-boots-c-30.html]classic tall ugg[/url]

[url=http://www.realugg.com/ugg-short-boots-c-28.html]ugg short[/url]

[url=http://www.realugg.com/specials.html]ugg sale[/url]

[url=http://www.realugg.com/specials.html]ugg boots uk[/url]

[url=http://www.realugg.com/specials.html]ugg uk[/url]

[url=http://www.realugg.com/specials.html]ugg boots[/url]

[url=http://www.realugg.com/ugg-tall-boots-c-30.html]Tall Ugg Boots[/url]

Posted by: wang at December 1, 2009 09:32 PM

ugg boots sale at a time when large heat has set off a winter 08/09 to Ewha.Outlines the

warm wool winter fashion degree to wool crocheted wool ugg boots uk to join after the

body does not stimulate your skin soft, soft comfort UP. Fashion can not without
ugg boots presence in Winter.and ugg boots have many series.such as:
ugg classic
UGG Bailey Button boots
ugg nightfall
ugg kids

Posted by: uggboots at December 2, 2009 07:44 PM
Post a comment









Remember info?




Prove you're human. Type "human":