Curl is a new web technology. Its home on the internet is www.curl.com.

This technology has 3 main components.

  • The curl content language
  • The surge platform
  • The Surge Lab IDE

The curl content language: Billed as a multi-faceted ultra-language that can solve every internet-related problem known to man. It is supposed to have markup functionality, scripting functionality as well as be completely object oriented. Like someone took java, HTML and javascript and threw them in a blender. The jury is still out on the validity of these claims. To be completely honest, I haven't made any real attempt to learn this language yet. I'll give it six months and see if it is still around and who has used it and to what effect and then decide if it is worth my time.

The Surge platform: The content-delivery mechanism. From what I saw it is basically a browser plugin that interprets and renders this curl language on the fly. In my opinion, this is the big weakness in the curl technology. People don't like to download plugins. I downloaded it and installed it with no problems or complications. I ran all of the demos. The demos were impressive. The real usefulness of the curl system seems to be in its graphics ability. Images are generated or rendered and raytraced within the browser. this could take some serious pressure off of servers for sites with dynamically generated images, such as graphs, charts or maps. I did run into a few bugs when running the demos. A few of them I had to try and run 2 or 3 times before they would work.

The Surge Lab IDE: I have not looked at this yet. There is hardly any point in downloading the IDE if I don't know, or intend to know the laguage any time soon. The site claims that the IDE is composed of a source editor, debugger, something called an "inspector", a console for system-level messages, a developers guide as well as some new functionality for viewing the applications directly from the editor. Sounds like your average IDE to me.

From what I have seen, curl seems to be a valid technology with with decent potential. However, the whole thing smells like java to me. Even on the curl website they call the curl applications "applets".

If anything pushes this technology forward, it will probably be the seemingly impressive graphics system. I never was overly impressed with java's graphics packages.

If anything kills this technology it will probably be the fact that you have to install a plugin. If they could get some built-in support from the browsers (yeah right) that might help a lot.

All in all, I think curl is neat. But I'm not sure how useful it is. Without a decent development community and some really useful applications, it will be hard to get anyone to put any eggs in the curl basket.

We'll see.

Definition:

Curl is a differential operator on vector fields in R3. The curl of a field f(x) is denoted curl f or x f, and it is a vector density field (which is the same thing as a vector field for most purposes). In cartesian coordinates its components are

x f = (∂fz/∂y - ∂fy/∂z, ∂fz/∂x - ∂fx/∂z, ∂fx/∂y - ∂fy/∂x)

The notation x f comes from the fact that if we consider ∇ = (∂/∂x, ∂/∂y, ∂/∂z) to be a vector then the expression above is that for the vector product of and f.


Interpretation:

curl f in some sense measures the "rotatingness" of the field f. In particular x (w x x) = 2w, with the interpretation that the curl of a rigid rotation with angular velocity w is 2w.
Another way to see that curl is related to rotation is to consider the circulation round some small square. If we for simplicity let the opposite vertices of the square be (0, 0, 0), (dx, dy, 0) then the circulation is to linear order

fx(0, 0, 0)dx + fy(dx, 0, 0)dy - fx(0, dy, 0)dx - fy(0, 0, 0)dx = (∂fx/∂y)dydx - (∂fy/∂x)dxdy = ( x f)zdxdy

More generally the circulation round the boundary of a small square with area dS and normal n is ( x f).ndS. Stokes' theorem is the formalisation of this statement.
A field with x f ≡ 0 is called irrotational.


Equations:

The following identities hold for scalar fields k, vector fields f, g:

x (kf) = (k) x f + k( x f)
x (f x g) = f(.g) - g(.f) + (g.)f - (f.)g
x ( x f) = (.f) - 2f
x (k) = 0

It is important to remember that the above definition of curl in component form only works in a cartesian coordinate frame. In order to obtain similar expressions for other coordinate frames you have to make some rather messy transformations. For cylindrical coordinates (r, θ, z) and spherical coordinates (r, θ, φ) the respective expressions are

x f = (r -1∂fz/∂θ - ∂fθ/∂z, ∂fr/∂z - ∂fz/∂r, r -1∂(r fθ)/∂r - r -1∂fr/∂θ)
x f = ((r sinθ)-1(∂(sinθfφ)/∂θ - ∂fθ/∂φ), (r sinθ)-1∂fr/∂φ - r -1∂(r fφ)/∂r, r -1(∂(r fθ)/∂r - ∂fr/∂θ))

The expressions may be hard to decipher, but I assure you that it is more painful to derive them yourself.

cURL, or "a client that groks the URLs", is a handy command line tool that is available for most platforms. It makes basically all url-related functions, such as up- & downloading, easy to go about. If you have a *nix system, it's probably installed. Otherwise, you can obtain it at http://curl.haxx.se/.

The basic way of usage is simply typing curl "http://www.everything2.com/" for instance. This will grab whatever comes out of the url http://www.everything2.com/ and spew it to standard output (if you're using a terminal, it will get printed there).

However, the real power of curl comes when you take into account the plethora of switches and options available to you. Some you should know are:

  • -f makes curl fail silently, not generating output on errors.
  • -O tells curl to give the file the same name as on the server, ie curl -O "http://www.everything2.com/index.pl" would save to a file called index.pl
  • -o (note the lower-case) tells curl to name the file as you specify, ie curl "http://www.everything2.com/index.pl" -o monkeysoy.html would save to a file called monkeysoy.html
  • -e "fakes" the referer (sic) field of the request, to make it appear as though coming from the server you specify. This is practical if a server blocks requests that come from outside.

Now, this is all fairly simple and not very devious. Let's get down and dirty, shall we?

One of the really sneaky parts is the way it can interpret the urls you give it. Say there's a website with a series of images on it, named sequentially. You've got your image1.jpg, image2.jpg, all the way up to image200.jpg. This would certainly be a hassle to type in by yourself. Sure, you could whip up some perl to do it for you, but still, there has to be an easier way!

Of course there is! Enter the [brackets]. Instead of typing out every url, simply replace the number in the aforementioned imagenames with a bracket containing a range, like so: curl -O "http://www.tehpixx0rs.com/stash/image[1-200].jpg" (I bet you're thinking up uses already, huh?). You can even pad with zeroes if that's the naming convention ([001-200]).

And as if that wasn't enough, there are the {curly brackets}... These can be used with a comma-delimited list of whatever you want, to make the urls even more complex! To wit: curl -O "http://www.monkeys.org/species/{rhesus,gorilla,spider}/closeup.jpg".

Oops. Did you spot the error up there? It's overwriting the previous monkey as it gets the next one! Now we need to use the sneaky parts of the -o switch. You can use placeholders for each of the variables in your url, with the first one being #1, the next #2 and so on up to #9. This makes the correct use of the previous line: curl "http://www.monkeys.org/species/{rhesus,gorilla,spider}/closeup.jpg" -o "#1-closeup.jpg" - or something to that effect.

So now, I'll leave you with a couple of examples of uses (all authentic, albeit I've changed the urls to protect the innocent). Your homework will be to figure out how and why they work, then find even better ways to abuse the inter-net (remember, though, that moderation is key!).

  • curl "http://www.mp3zforfree.org/" | perl -pe '/a href="([^"]+\.mp3)"/ig;if($1){$_="-f\n-O\nurl=\"$1\"\n"}else{$_=""};' | curl -K -
    I admit this could be done easier and prettier with wget, but if you don't have it handy, there is more than one way to do it.
  • curl "http://everything2.com/index.pl?node_id=762826&op=login&user=YOURNAME&passwd=YOURPASS" | perl -pe '/node_id="(\d+)"/i;if($1){$_="-f\n-o \"$1.xml\"\nurl=\"http://www.everything2.com/?node_id=$1&displaytype=xml\"\n"}else{$_=""};' | curl -K -
    Pretty useful if you need to back up your stuff, just remember that this will leave your username and password hanging in the terminal history, so you might want to find a better way.
  • curl -f "http://fakecomic.keenspace.com//comics/fake[1999-2002][01-12][01-31].{gif,jpg,png}" -o "fakecomic_#1#2#3.#4"
    This is very evil, and you shouldn't do it

But don't take my word for it, go out and try leeching entire websites yourself. Eat up that bandwidth, son!

Sources: curls man page, curl.haxx.se. Also sorry to baffo for being so slow with writing this. And I swear, this is for educational purposes only! Remember to abide by your local laws, y'hear? Any input or extra hints appreciated.

I never noticed, till today,
that curl of hair that
tucks itself, coiled
like a kitten,
into the curve of
his neck.

If anyone had asked me
this morning, before
that specific angle of his
head and that particular
ray of sunlight
revealed it to me,
I would have said
I know everything about him

This afternoon, though,
I spiral round the twist of
that troublesome curl,
trip, distracted, on a carpet edge,
grip at a windowsill
for balance.

And, looking out,
I am almost surprised
to find grass still green
and peonies
still crimson beside
the crumbling
stone wall.

Curl (k?rl), v. t. [imp. & p. p. Curled (k?rld); p. pr. & vb. n. Curling.] [Akin to D. krullen, Dan. krlle, dial. Sw. krulla to curl, crisp; possibly akin to E. crook. Cf. Curl, n., Cruller.]

1.

To twist or form into ringlets; to crisp, as the hair.

But curl their locks with bodkins and with braid. Cascoigne.

2.

To twist or make onto coils, as a serpent's body.

Of his tortuous train, Curled many a wanton wreath in sight of Eve. Milton.

3.

To deck with, or as with, curls; to ornament.

Thicker than the snaky locks That curledMegaera. Milton.

Curling with metaphors a plain intention. Herbert.

4.

To raise in waves or undulations; to ripple.

Seas would be pools without the brushing air To curl the waves. Dryden.

5. Hat Making

To shape (the brim) into a curve.

 

© Webster 1913.


Curl, v. i.

1.

To contract or bend into curis or ringlets, as hair; to grow in curls or spirals, as a vine; to be crinkled or contorted; to have a curly appearance; as, leaves lie curled on the ground.

Thou seest it [hair] will not curl by nature. Shak.

2.

To move in curves, spirals, or undulations; to contract in curving outlines; to bend in a curved form; to make a curl or curls.

"Cirling billows."

Dryden.

Then round her slender waist he curled. Dryden.

Curling smokes from village tops are seen. Pope.

Gayly curl the waves before each dashing prow. Byron.

He smiled a king of sickly smile, and curled up on the floor. Bret Harte.

<-- p>. 358 -->

3.

To play at the game called curling.

[Scot.]

 

© Webster 1913.


Curl (k?rl), n. [Akin to D. krul, Dan. krlle. See Curl, v. ]

1.

A ringlet, especially of hair; anything of a spiral or winding form.

Under a coronet, his flowing hair In curls on either cheek played. Milton.

2.

An undulating or waving line or streak in any substance, as wood, glass, etc.; flexure; sinuosity.

If the glass of the prisms . . . be without those numberless waves or curls which usually arise from the sand holes. Sir I. Newton.

3.

A disease in potatoes, in which the leaves, at their first appearance, seem curled and shrunken.

Blue curls. Bot. See under Blue.

 

© Webster 1913.

Log in or registerto write something here or to contact authors.