all repos — h3rald @ a44804dfee4d083d524c3efbd9cd3ac3cd193f44

The sources of https://h3rald.com

Added all old images and resources.
h3rald h3rald@h3rald.com
Sun, 16 Aug 2009 18:46:06 +0200
commit

a44804dfee4d083d524c3efbd9cd3ac3cd193f44

parent

09de4570a010c9e042347cee2d233d59f85a0fdd

235 files changed, 788 insertions(+), 12 deletions(-)

jump to
M layouts/default.htmlayouts/default.htm

@@ -57,7 +57,7 @@ <![endif]-->

<!-- HEADER START --> <div id="header-container"> <div id="header-left"> - <h1><img alt="H3RALD" id="logo" src="/images/logo.png" /></h1> + <h1><img alt="H3RALD" id="logo" src="/images/theme/logo.png" /></h1> </div> <div id="header-right"> <ul id="navigation">
M resources/css/elements.cssresources/css/elements.css

@@ -31,7 +31,7 @@ color:#555;

font-style:italic; padding:0 0 0 33px; margin: 0; - background: url(/images/theme/quote.gif) no-repeat top left; + background: url(/images/theme/theme/quote.gif) no-repeat top left; }

@@ -138,7 +138,7 @@ /*** Palette ***/

#down-arrow { - background: url('../images/icons/down.png'); + background: url('../images/theme/icons/down.png'); display: block; height: 41px; width: 40px;

@@ -146,12 +146,12 @@ }

#down-arrow:hover { - background: url('../images/icons/down_hover.png'); + background: url('../images/theme/icons/down_hover.png'); } #up-arrow { - background: url('../images/icons/up.png'); + background: url('../images/theme/icons/up.png'); display: block; height: 41px; width: 40px;

@@ -159,7 +159,7 @@ }

#up-arrow:hover { - background: url('../images/icons/up_hover.png'); + background: url('../images/theme/icons/up_hover.png'); } /*** COMMENTS ***/

@@ -332,7 +332,7 @@ }

div.gsc-clear-button { - background: transparent url('../images/icons/close.png') no-repeat center 50%; + background: transparent url('../images/theme/icons/close.png') no-repeat center 50%; width: 10px; height: 10px; }
M resources/css/layout.cssresources/css/layout.css

@@ -110,7 +110,7 @@ }

#main { - background: #fff url('../images/bkg.png') top repeat; + background: #fff url('../images/theme/bkg.png') top repeat; } #content

@@ -130,13 +130,13 @@ }

#border-top { - background: #000 url('../images/border-top.png') bottom repeat-x; + background: #000 url('../images/theme/border-top.png') bottom repeat-x; height: 35px; } #border-bottom { - background: #000 url('../images/border-bottom.png') top repeat-x; + background: #000 url('../images/theme/border-bottom.png') top repeat-x; height: auto; padding: 0 30px; padding-top:40px;

@@ -144,7 +144,7 @@ }

.inner-border { - background: #000 url('../images/redcloth.png') top repeat-x; + background: #000 url('../images/theme/redcloth.png') top repeat-x; height: 30px; }
M resources/css/text.cssresources/css/text.css

@@ -64,7 +64,7 @@

#content li { vertical-align: middle; - background: url("../images/icons/bullet.png") top left no-repeat; + background: url("../images/theme/icons/bullet.png") top left no-repeat; padding-left: 20px; }
A resources/files/10_programming_languages_worth_checking_out.html

@@ -0,0 +1,389 @@

+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <meta http-equiv="content-type" content="text/html;charset=UTF-8" /> + <title>HTML export of 10 programming languages worth checking out</title> + <link rel="shortcut icon" href="/favicon.ico" /> + <style type="text/css" media="all"> +body { margin: 2em 5em; font-size: 1em; font-family: Garamond; } +h1, h2, h3, h4, h5, h6 { font-family: Garamond; } + +table { background-color: #ccc; margin: 10px 0 14px 0; } +td { background-color: #fff; padding: 5px; font-size: 12px; } + + </style> +</head> +<body> + <h1>10 programming languages worth checking out</h1> +<p>If you program for fun or profit, chances are that you know C, C++, Java, <span class="caps">PHP</span>, Perl, Python or Ruby. These programming languages are all widely known, and, to a different degree, used in commercial applications. At least some of them can safely be considered <em>mainstream</em>, even if that word has become so overused and misused that has almost lost its original meaning, if it ever had one.<br/> +If you are earning your living by coding, it&#8217;s often one of these languages that pays the bills. Nevertheless, true hackers frequently meander in other directions, exploring and discovering different paradigms and methodologies, sometimes to the most <a href="http://esolangs.org/wiki/Main_Page">esoteric</a> extremes.</p> + + + <blockquote> + <p>&#8220;The most obvious common ‘personality’ characteristics of hackers are high intelligence, consuming curiosity, and facility with intellectual abstractions. Also, most hackers are ‘neophiles’, stimulated by and appreciative of novelty (especially intellectual novelty). Most are also relatively individualistic and anti-conformist.&#8221;</p> + </blockquote> + + + <p style="padding-left:4em;">&ndash; Eric S. Raymond, <cite><a href="http://catb.org/jargon/html/personality.html">The Jargon File</a></cite></p> + + + <p>Even if you&#8217;re particularly devoted to one of the languages mentioned above, it is normal to be curious about what else is out there. As the end of the year approaches, I find myself thinking about learning &ndash; or at least become acquainted with &ndash; some less known, more experimental, programming languages.<br/> +I was originally planning on learning another programming language as a New Year&#8217;s Resolution, which is quite common among programmers. The most difficult task turned out to be <em>choosing</em> a particular language: there are so many out there which makes it very hard to decide.</p> + + + <p>This article deals with ten possible candidates, and it&#8217;s far from being an exhaustive list. The programming languages described henceforth are very different from each other, but they all have one thing in common: they all stimulate my curiosity in their own, very different ways.</p> + + + <ul> + <li><a href="#haskell">Haskell</a></li> + <li><a href="#erlang">Erlang</a></li> + <li><a href="#io">Io</a></li> + <li><a href="#plt-scheme"><span class="caps">PLT</span> Scheme</a></li> + <li><a href="#clojure">Clojure</a></li> + <li><a href="#squeak">Squeak</a></li> + <li><a href="#ocaml">OCaml</a></li> + <li><a href="#factor">Factor</a></li> + <li><a href="#lua">Lua</a></li> + <li><a href="#scala">Scala</a></li> + </ul> + + + <h3 id="haskell">Haskell</h3> + + + <p>I tried to learn Haskell in the past. Quietly, I started diving into the multitude of articles, tutorials, overviews and even books about this fascinating academic language which claims to achieve functional purity though remaining extremely useful, practical and efficient. Sadly, I&#8217;m still not able to fully grasp some of its most crucial concepts, such as <a href="http://en.wikibooks.org/wiki/Programming:Haskell_monads">monads</a>, but this still doesn&#8217;t put me off <em>wishing</em> to learn the language.</p> + + + <p>If you&#8217;ve never enountered Haskell before, I find <a href="http://www.willamette.edu/~fruehr/haskell/evolution.html">The Evolution of a Haskell Programmer</a> an amusing and informative read. Although aiming to be humorous in a way, it serves a very important didascalic purpose: it is one of the most complete collections of the different paradigms and programming approaches Haskell allows.</p> + + + <p>Besides its very elegant, pragmatic and almost-magical syntax, what really intrigues me about this language is what it offers, in terms of features:</p> + + + <ul> + <li>9 different <a href="http://www.haskell.org/haskellwiki/Implementations">implementations</a> (multiple compilers <em>and</em> interpreters)</li> + <li>Countless <a href="http://haskell.org/ghc/docs/latest/html/libraries/">standard libraries</a> <a href="http://hackage.haskell.org/packages/archive/pkg-list.html">packages</a> which can be used to solve <em>any</em> programming challenge</li> + <li>Abundant <a href="http://www.haskell.org/haskellwiki/Books_and_tutorials">learning material</a></li> + <li><a href="http://www.haskell.org/haskellwiki/Why_Haskell_matters#The_speed_of_Haskell">Speed</a> that rivals C and C++</li> + <li>Very mature cross-platform compatibility</li> + </ul> + + + <p>The catch? It is likely to be very different from any other language you might have encountered before, and that&#8217;s probably the reason why some people find it difficult to learn and master. That being said, if you are looking for a challenging (but very rewarding, I believe) New Year&#8217;s Resolution, you should definitely go for this.</p> + + + <h4>To get you started&#8230;</h4> + + + <ul> + <li><a href="http://www.haskell.org/">Official Haskell Wiki</a></li> + <li><a href="http://en.wikibooks.org/wiki/Haskell">Haskell Wikibook</a></li> + <li><a href="http://book.realworldhaskell.org/read/index.html">Real World Haskell</a></li> + <li><a href="http://cdsmith.wordpress.com/2007/07/29/37-reasons-to-love-haskell-playing-off-the-ruby-article/">37 Reasons to Love Haskell</a></li> + <li><a href="http://antoniocangiano.com/2007/03/13/haskell-eye-for-the-ruby-guy/">Haskell for the Ruby Guy</a></li> + <li><a href="http://www.techworld.com.au/article/261007/-z_programming_languages_haskell">A-Z of Programming Languages: Haskell</a></li> + <li><a href="http://learnyouahaskell.com/">Learn you a Haskell for Great Good!</a></li> + <li><a href="http://cgi.cse.unsw.edu.au/~dons/blog/2008/05/16">Haskell Hacking</a></li> + </ul> + + + <h3>Erlang</h3> + + + <p><a href="http://erlang.org/">Erlang</a> is a concurrent programming language originally developed by Ericsson for their real-time applications. It goes without saying that with these premise, Erlang seems the most natural answer to all concurrency problems you may encounter in your life as a programmer.<br/> +Developing with concurrency in mind feels natural and easy in Erlang, and the performance of Erlang-powered systems can be unmatched.</p> + + + <p>Quite a few interesting applications have been developed in this language, such as:</p> + + + <ul> + <li><a href="http://couchdb.apache.org/">CouchDB</a>, a popular distributed, document-oriented database</li> + <li><a href="http://yaws.hyber.org/">Yaws</a>, a high-performance web server</li> + <li>even <a href="http://www.facebook.com/note.php?note_id=14218138919&#38;id=9445547199">Facebook Chat</a></li> + </ul> + + + <p>The price Erlang adepts have to pay, as Damien Katz (CouchDB creator and Erlang enthusiast) <a href="http://damienkatz.net/2008/03/what_sucks_abou.html">points out</a>, is:</p> + + + <ul> + <li>Awkward syntax, inspired by Prolog</li> + <li>Weird if expressions</li> + <li>Difficult string operations</li> + <li>No classes or namespaces</li> + </ul> + + + <p>...this list could go on. Damien&#8217;s article is an interesting read, enough to put anyone off learning the language if read superficially. On the other hand, it provides an invaluable resource for newcomers who wish to be prepared before taking on the challenge of learning Erlang to build their next scalable, concurrent and industry-proof application.</p> + + + <h4>To get you started&#8230;</h4> + + + <ul> + <li><a href="http://www.erlang.org/">Official Erlang Web Site</a></li> + <li><a href="http://www.onlamp.com/pub/a/onlamp/2007/09/13/introduction-to-erlang.html">An Introduction to Erlang</a></li> + <li><a href="http://www.defmacro.org/ramblings/concurrency.html">Erlang Style Concurrency</a></li> + <li><a href="http://www.planeterlang.org/">PlanetErlang</a></li> + <li><a href="http://www.erlang-projects.org/">Erlang Projects</a></li> + </ul> + + + <h3 id="io">Io</h3> + + + <p><a href="http://iolanguage.com/">Io</a> is a relatively new programming language by Steve Dekorte which recently surfaced from Google&#8217;s oblivion (if you tried googling for it a few months ago, you couldn&#8217;t event find its home page) thanks to a short vut stimulating <a href="http://hackety.org/2008/01/05/ioHasAVeryCleanMirror.html">article</a> by <a href="http://whytheluckystiff.net/">_why</a>. It doesn&#8217;t have the best name for a programming language, that&#8217;s for sure, but it&#8217;s definitely a breath of fresh air in terms of the way it works.</p> + + + <p>Its unusual, minimalist and yet elegant and powerful syntax reminds of Smalltalk, but the language goes far beyond that. Io is an object-oriented, prototype-based, message-based and fully-reflective programming language. This means that you use messages like in Smalltalk, you create objects like in Javascript and every bit of your code can be inspected and passed around as you see fit.</p> + + + <p>If you think Ruby allows fancy (and potentially dirty) tricks like metaprogramming and monkey-patching, Io takes this to a whole different level, imposing virtually no limitation to the programmer. What&#8217;s truly amazing is that its grammar and syntax are so minimal that you can learn them in literally 10 minutes. After that, you can start experimenting, first with its extremely small core and then with its extension libraries and bindings.</p> + + + <p>Io has indeed a lot of potential. Granted, it&#8217;s still young and under development, but also already quite efficient and suitable for real-world tasks demanding high speed and concurrency. It is implemented in C, but Ola Bini started to design a similar language called <a href="http://kenai.com/projects/ioke/">Ioke</a> for the Java Virtual Machine.</p> + + + <h4>To get you started&#8230;</h4> + + + <ul> + <li><a href="http://iolanguage.com/">Official Io Web Site</a></li> + <li><a href="http://github.com/stevedekorte/io/tree/master">Io Repository on Github</a></li> + <li><a href="http://tech.groups.yahoo.com/group/iolanguage/">Io user group</a></li> + <li><a href="http://hackety.org/2008/01/05/ioHasAVeryCleanMirror.html">Io has a very clean mirror</a></li> + <li><a href="http://iota.flowsnake.org/">Io Notes</a></li> + <li><a href="http://wiki.type-z.org/index.php/Io/IoLanguage">Io Language Notes</a></li> + <li><a href="http://ozone.wordpress.com/2006/03/15/blame-it-on-io/">Blame it on Io! A slow-paced introduction to the Io language</a></li> + <li><a href="http://en.wikibooks.org/wiki/Programming:Io">Io Wikibook</a></li> + </ul> + + + <h3 id="plt-scheme"><span class="caps">PLT</span> Scheme</h3> + + + <p>I stumbled upon the <a href="http://plt-scheme.org/"><span class="caps">PLT</span> Scheme web site</a> while browsing for different Lisp flavors about a year ago. At the time, I was determined to learn the rudiments of Lisp and I started reading a few articles and books on this old and yet still popular language.<br/> +Although I was originally put off by certain Common Lisp literature, which dismissed Scheme as an almost-heretic attempt to revitalize an venerable language, I soon found out that Scheme &ndash; and <span class="caps">PLT</span> Scheme in particular &ndash; is definitely worthy of attention and interest.</p> + + + <p>Being a technical writer, I immediately became fond of the <a href="http://docs.plt-scheme.org/guide/"><span class="caps">PLT</span> Scheme Guide</a>, one of the clearest and most well-organized examples of documentation available for a programming language I&#8217;ve ever come across.<br/> +The manual is exquisitely crafted as a Getting Started Manual and a Reference Book at the same time, though remaining pleasant to read sequentially: a rare trait in technical documentation. Best of all, it&#8217;s free: you simply have no real excuse not to read it.</p> + + + <p>Besides its excellent documentation, <span class="caps">PLT</span> Scheme feels like a fresh and modern implementation of one of the two most important dialects of Lisp. It&#8217;s cross-platform, it has an extensive <a href="http://planet.plt-scheme.org/">collection of packages</a> and a very active community behind it. <br/> +After my first attempt to learn Haskell, I felt compelled to try out <span class="caps">PLT</span> Scheme and it immediately felt much easier and more user friendly to learn, partly because of <a href="http://download.plt-scheme.org/drscheme/">DrScheme</a> a dedicated <span class="caps">IDE</span>/learning tool optimized to get you started and feel comfortable with the language.<br/> +Caveats? None, unless you have an adversion for parenthesis, that is.</p> + + + <h4>To get you started&#8230;</h4> + + + <ul> + <li><a href="http://plt-scheme.org/">Official <span class="caps">PLT</span> Scheme Web Site</a></li> + <li><a href="http://docs.plt-scheme.org/guide/index.html"><span class="caps">PLT</span> Scheme Guide</a></li> + <li><a href="http://planet.plt-scheme.org/">PLaneT</a></li> + <li><a href="http://docs.plt-scheme.org/quick/">Quick: An Introduction to <span class="caps">PLT</span> Scheme with Pictures</a></li> + <li><a href="http://docs.plt-scheme.org/more/">More: Systems Programming with <span class="caps">PLT</span> Scheme</a></li> + </ul> + + + <h3 id="clojure">Clojure</h3> + + + <p><a href="http://clojure.org/">Clojure</a> is the most recent and notable attempt to bring Lisp back to life and ready to face the challenges posed to IT systems by the new century: concurrency and scalability. Because it runs on the Java Virtual Machine, you also get Java interoperability for free, in a more Lispy flavour. Although I&#8217;m a bit reluctant to deal with anything related to Java nowadays, Clojure&#8217;s approach makes it more appealing.</p> + + + <p>Unlike other Lisps (and Schemes) you may have encountered before, Clojure comes with some interesting additions:</p> + + + <ul> + <li><a href="http://clojure.org/multimethods">Multimethods</a></li> + <li><a href="http://clojure.org/agents">Agents asynchronous actions</a></li> + <li>Some interestings <a href="http://clojure.org/special_forms">special forms</a></li> + <li>Many pre-built <a href="http://clojure.org/data_structures">data structures</a>, like Vectors, Maps, Sets, Collections, ...</li> + </ul> + + + <p>Despite all this, Rich Hickey became increasingly popular both in the Lisp and Java world for creating such an interesting and well-designed language. Unlike with many new (and old) programming languages, I have yet to find a single blog post or article which is seriously criticizing Clojure in any way.</p> + + + <h4>To get you started&#8230;</h4> + + + <ul> + <li><a href="http://clojure.org">Official Clojure Web Site</a></li> + <li><a href="http://groups.google.com/group/clojure">Clojure User Group</a></li> + <li><a href="http://www.infoq.com/presentations/hickey-clojure">Clojure presentation on InfoQ</a></li> + <li><a href="http://netzhansa.blogspot.com/2008/10/trying-clojure.html">Trying Clojure</a></li> + <li><a href="http://groups.google.com/group/clojure/msg/f038decc18c7da37">My first look at Clojure</a></li> + <li><a href="http://enclojure.net/Index.html">Enclojure</a></li> + </ul> + + + <h3 id="squeak">Squeak</h3> + + + <p><a href="http://www.squeak.org/">Squeak</a> has become one of the most popular Smalltalk implementations available. It has been used in some very interesting projects:</p> + + + <ul> + <li><a href="http://wiki.laptop.org/go/Smalltalk_Development_on_XO">EToys</a>, a kids-oriented but powerful development environment built in Squeak, was included as part of the educational sofware suite of the <a href="http://www.laptop.org"><span class="caps">OLPC</span></a>.</li> + <li><a href="http://www.seaside.st/">Seaside</a> is a modern and very productive web framework running on Squeak.</li> + <li><a href="http://www.croquetproject.org/index.php/Main_Page">Croquet</a> is a development solution to build complex, multi-user virtual worlds.</li> + </ul> + + + <p>If you ask <a href="http://www.stonehenge.com/merlyn/">Randal Schwartz</a>, he&#8217;ll explain you <a href="http://www.infoq.com/articles/smalltalk-comeback-schwartz">why</a> Squeak and Smalltalk are at least worth a look. Personally, while I&#8217;m attracted by Smalltalk&#8217;s unique approach to programming and its friendly syntax, I am still a bit overwhelmed by the way it works. <br/> +Squeak, and Smalltalk in general, runs inside (literally) a virtual machine written in Squeak itself. This means that:</p> + + + <ul> + <li>You write your code inside Squeak</li> + <li>You debug, inspect and interact your code inside squeak</li> + <li>You run your code inside Squeak</li> + <li>You can install Squeak on virtually any platform, including mobile phones, fairly easily</li> + </ul> + + + <p>Everything lives inside Squeak. It&#8217;s very weird to picture this without actually trying it, so I suggest you <a href="http://www.squeak.org/Download/">download it</a> and give it a try: it will definitely be an unusual but intriguing experience.</p> + + + <p>Smalltalk takes programming to a whole different level, which is simply unimaginable for other languages. In return, it asks you to fully embrace the Smalltalk way of doing things, according to which external text editors, external version control systems and other common tools familiar to traditional programmers simply loose their purpose.</p> + + + <h4>To get you started&#8230;</h4> + + + <ul> + <li><a href="http://www.squeak.org/">Official Squeak Web Site</a></li> + <li><a href="http://squeakbyexample.org/">Squeak by Example</a></li> + <li><a href="http://www.squeakland.org/">SqueakLand</a></li> + <li><a href="http://www.infoq.com/articles/smalltalk-comeback-schwartz">Ruby&#8217;s Roots: Smalltalk Comeback and Randal Schwartz on Smalltalk</a></li> + <li><a href="http://twit.tv/floss29"><span class="caps">FLOSS</span> Weekly 29: Dan Ingalls</a></li> + </ul> + + + <h3 id="ocaml">OCaml</h3> + + + <p>Like Smalltalk, <a href="http://caml.inria.fr/">OCaml</a> has been getting more attention recently than in the past. Sure, not everyone is planning to learn is these days, but after reading <a href="http://enfranchisedmind.com/blog/2008/04/14/useful-things-about-static-typing/">this article</a> I admit I was eager to give it a proper try.</p> + + + <p>Despite being statically typed, OCaml offers some of the features which are common in dynamically typed languages like Ruby, such as duck typing, the possibility of creating Domain-Specific Languages and even extending the language syntax with custom operators and constructs.</p> + + + <p>Additionally, the <a href="http://batteries.forge.ocamlcore.org/">OCaml Batteries Included</a> project was created as an attempt to bundle a standard set of commonly-used library together with the language core. Even if this project is still in alpha stage, it definitely <a href="http://dutherenverseauborddelatable.wordpress.com/2008/11/07/a-taste-of-ocaml-batteries-included/">looks promising</a>.</p> + + + <h4>To get you started&#8230;</h4> + + + <ul> + <li><a href="http://caml.inria.fr/">Official Caml Web Site</a></li> + <li><a href="http://www.ocaml-tutorial.org/">Objective Caml Tutorial</a></li> + <li><a href="http://www.csc.villanova.edu/~dmatusze/resources/ocaml/ocaml.html">A Concise Introduction to Objective Caml</a></li> + <li><a href="http://wiki.cocan.org/">The OCaml Alliance Network</a></li> + <li><a href="http://ocamlnews.blogspot.com/">OCaml News</a></li> + <li><a href="http://batteries.forge.ocamlcore.org/">OCaml Batteries Included</a></li> + </ul> + + + <h3>Factor</h3> + + + <p><a href="http://factorcode.org/">Factor</a> is to Forth what <a href="http://clojure.org">Clojure</a> is to Common Lisp: a reincarnation of an ancient language in a more modern and practical form. In the specific case, although it borrows from Lisp and Self as well, Factor retains the main characteristics of its ancestor: it&#8217;s stack-based, concatenative and has postfix notation.<br/> +While this is enough to put some people off, if you digg deeper you&#8217;ll discover that Factor offers all the most important features available in contemporary programming languages: garbage collection, dynamic typing, an object system, ... they&#8217;re just presented in a very different way:</p> + + + <blockquote> + <p>&#8220;Learning Factor is tough. One reason for this is that Factor is very different from other programming languages. Programmers today are used to imperative programming languages where data is stored and passed around in named variables (or function calls, which name their variables). Factor is the opposite of this. A lot of code tends to be written in a functional style, and even more jarringly, variables are rare, only referenced in a small fraction of words. Nobody intends to change any of this; it&#8217;s a feature, not a bug!&#8221;</p> + </blockquote> + + + <p style="padding-left:3em;">&ndash; Daniel Ehrenberg, <cite><a href="http://useless-factor.blogspot.com/2008/01/learning-factor.html">Learning Factor</a></cite></p> + + + <p>Like Haskell, Factor demands a completely different programming approach to what you may be used to, but once you get past that, it can be as useful as any other language, if not more. The <a href="http://docs.factorcode.org/content/article-furnace.html">Furnace</a> web framework, which powers the <a href="http://concatenative.org/">Concatenative</a> wiki, is entirely built in Factor and runs on top of a Factor web server.</p> + + + <h4>To get you started&#8230;</h4> + + + <ul> + <li><a href="http://factorcode.org/">Official Factor Web Site</a></li> + <li><a href="http://concatenative.org/wiki/view/Factor">Factor on the Concatenative Wiki</a></li> + <li><a href="http://docs.factorcode.org/">Factor Documentation</a></li> + <li><a href="http://learnfactor.org/">Learn Factor</a></li> + <li><a href="http://planet.factorcode.org/">Planet Factor</a></li> + </ul> + + + <h3 id="lua">Lua</h3> + + + <p><a href="http://www.lua.org/">Lua</a> (&#8220;Moon&#8221; in Portuguese), is a lightweight and fast scripting language which can be easily embedded in other systems. Compared to the other languages mentioned in this article, it is definitely the less alien of the lot: if you know a tiny bit of C or Java, you&#8217;ll be able to understand (and possibly write) 80% of Lua code without reading a single line of its documentation.</p> + + + <p>Despite its simplicity, Lua is considered a multi-paradigm language supporting imperative, functional and even object-oriented approaches. More specifically, Lua&#8217;s <em>tables</em> provide a simple but powerful way to create arrays, hashes and even classes (or better, prototypes). Simple (and multiple) inheritance is achieved through <em>metatables</em>, which allow calls to undefined functions to be <em>transferred</em> to parent tables.</p> + + + <p>Lua programs are not interpreted in the traditional way: they are compiled to bytecode and then executed in the Lua Virtual Machine. As a result, Lua code tends to be executed much faster than other interpreted languages, so fast that &#8220;as fast as Lua&#8221; has become a proverbial expression.<br/> +Lua found its niche in embedded applications and games development, basically everywhere there&#8217;s the need to provide a fast scripting language which is also very easy to learn and extend with C or other languages.</p> + + + <h4>To get you started&#8230;</h4> + + + <ul> + <li><a href="http://www.lua.org/">Official Lua Web Site</a></li> + <li><a href="http://www.lua.org/manual/">Lua Manual</a></li> + <li><a href="http://lua-users.org/">Lua-users</a></li> + <li><a href="http://icculus.org/~theoddone33/lua/">Learning Lua</a></li> + <li><a href="http://lua.gts-stolberg.de/en/index.php?uml=1">Lua for Beginners</a></li> + </ul> + + + <h3 id="scala">Scala</h3> + + + <p>You may not be happy to see <a href="http://www.scala-lang.org/">Scala</a> in this list instead of other very valid and equally powerful languages for the Java Virtual Machine such as <a href="http://groovy.codehaus.org/">Groovy</a>. While there was no doubt on whether Clojure should have been included or not, I was a bit hesitant to include Scala. In the end, I chose to do so simply because Scala fits better in this list than other languages: as you should have noticed by now, I am somehow more inclined to learn functional languages as opposed to their object-oriented counterparts.</p> + + + <p>Scala is both object oriented and functional. It offers the best of both worlds: classes, traits and mixins which may be familiar to <span class="caps">OOP</span> lovers but also anonymous functions, currying and pattern matching which may please Haskell enthusiasts. Additionally, it&#8217;s also compatible with Java: so if you use Java for work, trying out Scala for pleasure is definitely the most logical next step, especially if you want to experiment with functional programming in the meantime.</p> + + + <p>Compared to learning a fully-functional (no pun intended) language like Haskell, Clojure or <span class="caps">PLT</span> Scheme, learning Scala is definitely easier and will feel less alien.</p> + + + <h4>To get you started&#8230;</h4> + + + <ul> + <li><a href="http://www.scala-lang.org/">Official Scala Web Site</a></li> + <li><a href="http://blogs.zdnet.com/Burnette/?p=690">The Case for Scala</a></li> + <li><a href="http://scala.sygneca.com/">Scala Wiki</a></li> + <li><a href="http://grok-code.com/75/learning-scala-with-project-euler/">Learning Scala with Project Euler</a></li> + <li><a href="http://www.codecommit.com/blog/scala/roundup-scala-for-java-refugees">Roundup: Scala for Java Refugees</a></li> + </ul> + + + <h3>Epilogue</h3> + + + <p>There are so many interesting programming language out there that it&#8217;s very easy to keep track of them, and I hope this list can aid you in the right direction, whichever it may be. Some people may debate over the very essence of this article: why <em>choosing</em> a programming language? Why spending time and energy in a task which may lead to a lot of confusion in your mind and lead you nowhere? What&#8217;s the purpose of learning something which may feel totally alien to you?</p> + + + <p>A programming language is ultimately just a tool to get your job done. If you have to write an end-user, desktop <span class="caps">GUI</span> application which will always run on Windows and which needs to inteface with Microsoft technologies, you&#8217;ll choose C# over Haskell, there&#8217;s no doubt about that. Especially if 500 developers in your company already develop in C# and you don&#8217;t, as a matter of fact, have a saying on the matter.</p> + + + <p>But what if you <em>could</em> choose? What if you wanted to develop your own geeky command line application to automate a particular task for yourself, and not because someone else tells you to do so? Would you be willing to experiment with something totally different and potentially difficult just for the sake of learning new things?</p> + + + <p>If the answer is yes, then you should take a look at this list again. Not now, maybe not this month or this year, but when you feel the time is right, and give one of these languages a shot. It may not end well (so far I attempted to learn Haskell twice, with no luck), but I promise you it will be worthwhile, in the long run. <br/> +If you already mastered some of these languages already, or even all of them, be assured that they&#8217;re plenty out there ready to be discovered and open your mind even more. Or, if you prefer, there are a lot of minds out there which may need guidance in learning and discovery. Help them. Write articles, tutorials, books, educate and evangelize: ultimately, that will be your greatest reward.</p> + + +</body> +</html>
A resources/files/herald.vim

@@ -0,0 +1,385 @@

+" Vim color file +" Name: herald.vim +" Author: Fabio Cevasco <h3rald@h3rald.com> +" Version: 0.2.0 +" Notes: Supports 8, 16, 256 and 16,777,216 (RGB) color modes + +hi clear + +if exists("syntax_on") + syntax reset +endif + +let colors_name = "herald" + +set background=dark + +" Set some syntax-related variables +let ruby_operators = 1 + +if has("gui_running") + + " -> Text; Miscellaneous + hi Normal guibg=#1F1F1F guifg=#D0D0D0 gui=none + hi SpecialKey guibg=#1F1F1F guifg=#E783E9 gui=none + hi VertSplit guibg=#1F1F1F guifg=#FFEE68 gui=none + hi SignColumn guibg=#1F1F1F guifg=#BF81FA gui=none + hi NonText guibg=#1F1F1F guifg=#FC6984 gui=none + hi Directory guibg=#1F1F1F guifg=#FFEE68 gui=none + hi Title guibg=#1F1F1F guifg=#6DF584 gui=bold + + " -> Cursor + hi Cursor guibg=#FFEE68 guifg=#1F1F1F gui=none + hi CursorIM guibg=#FFEE68 guifg=#1F1F1F gui=none + hi CursorColumn guibg=#000000 gui=none + hi CursorLine guibg=#000000 gui=none + + " -> Folding + hi FoldColumn guibg=#001336 guifg=#003DAD gui=none + hi Folded guibg=#001336 guifg=#003DAD gui=none + + " -> Line info + hi LineNr guibg=#000000 guifg=#696567 gui=none + hi StatusLine guibg=#000000 guifg=#696567 gui=none + hi StatusLineNC guibg=#25365a guifg=#696567 gui=none + + " -> Messages + hi ErrorMsg guibg=#A32024 guifg=#D0D0D0 gui=none + hi Question guibg=#1F1F1F guifg=#FFA500 gui=none + hi WarningMsg guibg=#FFA500 guifg=#000000 gui=none + hi MoreMsg guibg=#1F1F1F guifg=#FFA500 gui=none + hi ModeMsg guibg=#1F1F1F guifg=#FFA500 gui=none + + " -> Search + hi Search guibg=#FF9E16 gui=none + hi IncSearch guibg=#FF9E16 gui=none + + " -> Diff + hi DiffAdd guibg=#006124 guifg=#ED9000 gui=none + hi DiffChange guibg=#0B294A guifg=#A36000 gui=none + hi DiffDelete guibg=#081F38 guifg=#ED9000 gui=none + hi DiffText guibg=#12457D guifg=#ED9000 gui=underline + + " -> Menu + hi Pmenu guibg=#140100 guifg=#660300 gui=none + hi PmenuSel guibg=#F17A00 guifg=#4C0200 gui=none + hi PmenuSbar guibg=#430300 gui=none + hi PmenuThumb guibg=#720300 gui=none + hi PmenuSel guibg=#F17A00 guifg=#4C0200 gui=none + + " -> Tabs + hi TabLine guibg=#141414 guifg=#1F1F1F gui=none + hi TabLineFill guibg=#000000 gui=none + hi TabLineSel guibg=#1F1F1F guifg=#D0D0D0 gui=bold + " + " -> Visual Mode + hi Visual guibg=#000000 guifg=#FFB539 gui=none + hi VisualNOS guibg=#000000 guifg=#696567 gui=none + + " -> Code + hi Comment guibg=#1F1F1F guifg=#696567 gui=none + hi Constant guibg=#1F1F1F guifg=#6DF584 gui=none + hi String guibg=#1F1F1F guifg=#FFB539 gui=none + hi Error guibg=#1F1F1F guifg=#FC4234 gui=none + hi Identifier guibg=#1F1F1F guifg=#70BDF1 gui=none + hi Function guibg=#1F1F1F guifg=#90CBF1 gui=none + hi Ignore guibg=#1F1F1F guifg=#1F1F1F gui=none + hi MatchParen guibg=#FFA500 guifg=#1F1F1F gui=none + hi PreProc guibg=#1F1F1F guifg=#BF81FA gui=none + hi Special guibg=#1F1F1F guifg=#FFB539 gui=none + hi Todo guibg=#1F1F1F guifg=#FC4234 gui=bold + hi Underlined guibg=#1F1F1F guifg=#FC4234 gui=underline + hi Statement guibg=#1F1F1F guifg=#E783E9 gui=none + hi Operator guibg=#1F1F1F guifg=#FC6984 gui=none + hi Delimiter guibg=#1F1F1F guifg=#FFEC48 gui=none + hi Type guibg=#1F1F1F guifg=#FFEE68 gui=none + hi Exception guibg=#1F1F1F guifg=#FC4234 gui=none + + " -> HTML-specific + hi htmlBold guibg=#1F1F1F guifg=#D0D0D0 gui=bold + hi htmlBoldItalic guibg=#1F1F1F guifg=#D0D0D0 gui=bold,italic + hi htmlBoldUnderline guibg=#1F1F1F guifg=#D0D0D0 gui=bold,underline + hi htmlBoldUnderlineItalic guibg=#1F1F1F guifg=#D0D0D0 gui=bold,underline,italic + hi htmlItalic guibg=#1F1F1F guifg=#D0D0D0 gui=italic + hi htmlUnderline guibg=#1F1F1F guifg=#D0D0D0 gui=underline + hi htmlUnderlineItalic guibg=#1F1F1F guifg=#D0D0D0 gui=underline,italic + +elseif &t_Co == 256 + + " -> Text; Miscellaneous + hi Normal ctermbg=234 ctermfg=252 cterm=none + hi SpecialKey ctermbg=234 ctermfg=176 cterm=none + hi VertSplit ctermbg=234 ctermfg=227 cterm=none + hi SignColumn ctermbg=234 ctermfg=141 cterm=none + hi NonText ctermbg=234 ctermfg=204 cterm=none + hi Directory ctermbg=234 ctermfg=227 cterm=none + hi Title ctermbg=234 ctermfg=84 cterm=bold + + " -> Cursor + hi Cursor ctermbg=227 ctermfg=234 cterm=none + hi CursorIM ctermbg=227 ctermfg=234 cterm=none + hi CursorColumn ctermbg=0 cterm=none + hi CursorLine ctermbg=0 cterm=none + + " -> Folding + hi FoldColumn ctermbg=234 ctermfg=25 cterm=none + hi Folded ctermbg=234 ctermfg=25 cterm=none + + " -> Line info + hi LineNr ctermbg=0 ctermfg=241 cterm=none + hi StatusLine ctermbg=0 ctermfg=241 cterm=none + hi StatusLineNC ctermbg=237 ctermfg=241 cterm=none + + " -> Messages + hi ErrorMsg ctermbg=124 ctermfg=252 cterm=none + hi Question ctermbg=234 ctermfg=214 cterm=none + hi WarningMsg ctermbg=214 ctermfg=0 cterm=none + hi MoreMsg ctermbg=234 ctermfg=214 cterm=none + hi ModeMsg ctermbg=234 ctermfg=214 cterm=none + + " -> Search + hi Search ctermbg=214 cterm=none + hi IncSearch ctermbg=214 cterm=none + + " -> Diff + hi DiffAdd ctermbg=22 ctermfg=208 cterm=none + hi DiffChange ctermbg=235 ctermfg=130 cterm=none + hi DiffDelete ctermbg=234 ctermfg=208 cterm=none + hi DiffText ctermbg=24 ctermfg=208 cterm=underline + + " -> Menu + hi Pmenu ctermbg=0 ctermfg=52 cterm=none + hi PmenuSel ctermbg=208 ctermfg=52 cterm=none + hi PmenuSbar ctermbg=52 cterm=none + hi PmenuThumb ctermbg=52 cterm=none + hi PmenuSel ctermbg=208 ctermfg=52 cterm=none + + " -> Tabs + hi TabLine ctermbg=233 ctermfg=234 cterm=none + hi TabLineFill ctermbg=0 cterm=none + hi TabLineSel ctermbg=234 ctermfg=252 cterm=bold + " + " -> Visual Mode + hi Visual ctermbg=0 ctermfg=215 cterm=none + hi VisualNOS ctermbg=0 ctermfg=241 cterm=none + + " -> Code + hi Comment ctermbg=234 ctermfg=241 cterm=none + hi Constant ctermbg=234 ctermfg=84 cterm=none + hi String ctermbg=234 ctermfg=215 cterm=none + hi Error ctermbg=234 ctermfg=203 cterm=none + hi Identifier ctermbg=234 ctermfg=75 cterm=none + hi Function ctermbg=234 ctermfg=117 cterm=none + hi Ignore ctermbg=234 ctermfg=234 cterm=none + hi MatchParen ctermbg=214 ctermfg=234 cterm=none + hi PreProc ctermbg=234 ctermfg=141 cterm=none + hi Special ctermbg=234 ctermfg=215 cterm=none + hi Todo ctermbg=234 ctermfg=203 cterm=bold + hi Underlined ctermbg=234 ctermfg=203 cterm=underline + hi Statement ctermbg=234 ctermfg=176 cterm=none + hi Operator ctermbg=234 ctermfg=204 cterm=none + hi Delimiter ctermbg=234 ctermfg=227 cterm=none + hi Type ctermbg=234 ctermfg=227 cterm=none + hi Exception ctermbg=234 ctermfg=203 cterm=none + + " -> HTML-specific + hi htmlBold ctermbg=234 ctermfg=252 cterm=bold + hi htmlBoldItalic ctermbg=234 ctermfg=252 cterm=bold,italic + hi htmlBoldUnderline ctermbg=234 ctermfg=252 cterm=bold,underline + hi htmlBoldUnderlineItalic ctermbg=234 ctermfg=252 cterm=bold,underline,italic + hi htmlItalic ctermbg=234 ctermfg=252 cterm=italic + hi htmlUnderline ctermbg=234 ctermfg=252 cterm=underline + hi htmlUnderlineItalic ctermbg=234 ctermfg=252 cterm=underline,italic + +elseif &t_Co == 16 + + " -> Text; Miscellaneous + hi Normal ctermbg=8 ctermfg=15 cterm=none + hi SpecialKey ctermbg=8 ctermfg=5 cterm=none + hi VertSplit ctermbg=8 ctermfg=14 cterm=none + hi SignColumn ctermbg=8 ctermfg=5 cterm=none + hi NonText ctermbg=8 ctermfg=4 cterm=none + hi Directory ctermbg=8 ctermfg=14 cterm=none + hi Title ctermbg=8 ctermfg=10 cterm=bold + + " -> Cursor + hi Cursor ctermbg=14 ctermfg=8 cterm=none + hi CursorIM ctermbg=14 ctermfg=8 cterm=none + hi CursorColumn ctermbg=0 cterm=none + hi CursorLine ctermbg=0 cterm=none + + " -> Folding + hi FoldColumn ctermbg=0 ctermfg=1 cterm=none + hi Folded ctermbg=0 ctermfg=1 cterm=none + + " -> Line info + hi LineNr ctermbg=0 ctermfg=7 cterm=none + hi StatusLine ctermbg=0 ctermfg=7 cterm=none + hi StatusLineNC ctermbg=0 ctermfg=7 cterm=none + + " -> Messages + hi ErrorMsg ctermbg=4 ctermfg=7 cterm=none + hi Question ctermbg=8 ctermfg=14 cterm=none + hi WarningMsg ctermbg=14 ctermfg=0 cterm=none + hi MoreMsg ctermbg=8 ctermfg=14 cterm=none + hi ModeMsg ctermbg=8 ctermfg=14 cterm=none + + " -> Search + hi Search ctermbg=6 cterm=none + hi IncSearch ctermbg=6 cterm=none + + " -> Diff + hi DiffAdd ctermbg=0 ctermfg=10 cterm=none + hi DiffChange ctermbg=0 ctermfg=14 cterm=none + hi DiffDelete ctermbg=0 ctermfg=12 cterm=none + hi DiffText ctermbg=1 ctermfg=14 cterm=underline + + " -> Menu + hi Pmenu ctermbg=0 ctermfg=4 cterm=none + hi PmenuSel ctermbg=14 ctermfg=4 cterm=none + hi PmenuSbar ctermbg=0 cterm=none + hi PmenuThumb ctermbg=4 cterm=none + hi PmenuSel ctermbg=14 ctermfg=4 cterm=none + + " -> Tabs + hi TabLine ctermbg=7 ctermfg=8 cterm=none + hi TabLineFill ctermbg=0 cterm=none + hi TabLineSel ctermbg=8 ctermfg=7 cterm=bold + " + " -> Visual Mode + hi Visual ctermbg=0 ctermfg=14 cterm=none + hi VisualNOS ctermbg=0 ctermfg=7 cterm=none + + " -> Code + hi Comment ctermbg=8 ctermfg=7 cterm=none + hi Constant ctermbg=8 ctermfg=10 cterm=none + hi String ctermbg=8 ctermfg=6 cterm=none + hi Error ctermbg=8 ctermfg=4 cterm=none + hi Identifier ctermbg=8 ctermfg=11 cterm=none + hi Function ctermbg=8 ctermfg=11 cterm=none + hi Ignore ctermbg=8 ctermfg=8 cterm=none + hi MatchParen ctermbg=14 ctermfg=8 cterm=none + hi PreProc ctermbg=8 ctermfg=5 cterm=none + hi Special ctermbg=8 ctermfg=12 cterm=none + hi Todo ctermbg=8 ctermfg=12 cterm=bold + hi Underlined ctermbg=8 ctermfg=12 cterm=underline + hi Statement ctermbg=8 ctermfg=13 cterm=none + hi Operator ctermbg=8 ctermfg=4 cterm=none + hi Delimiter ctermbg=8 ctermfg=14 cterm=none + hi Type ctermbg=8 ctermfg=14 cterm=none + hi Exception ctermbg=8 ctermfg=12 cterm=none + + " -> HTML-specific + hi htmlBold ctermbg=8 ctermfg=7 cterm=bold + hi htmlBoldItalic ctermbg=8 ctermfg=7 cterm=bold,italic + hi htmlBoldUnderline ctermbg=8 ctermfg=7 cterm=bold,underline + hi htmlBoldUnderlineItalic ctermbg=8 ctermfg=7 cterm=bold,underline,italic + hi htmlItalic ctermbg=8 ctermfg=7 cterm=italic + hi htmlUnderline ctermbg=8 ctermfg=7 cterm=underline + hi htmlUnderlineItalic ctermbg=8 ctermfg=7 cterm=underline,italic + + +elseif &t_Co == 8 + + " -> Text; Miscellaneous + hi Normal ctermbg=8 ctermfg=7 cterm=none + hi SpecialKey ctermbg=8 ctermfg=5 cterm=none + hi VertSplit ctermbg=8 ctermfg=6 cterm=none + hi SignColumn ctermbg=8 ctermfg=5 cterm=none + hi NonText ctermbg=8 ctermfg=4 cterm=none + hi Directory ctermbg=8 ctermfg=6 cterm=none + hi Title ctermbg=8 ctermfg=2 cterm=bold + + " -> Cursor + hi Cursor ctermbg=6 ctermfg=8 cterm=none + hi CursorIM ctermbg=6 ctermfg=8 cterm=none + hi CursorColumn ctermbg=0 cterm=none + hi CursorLine ctermbg=0 cterm=none + + " -> Folding + hi FoldColumn ctermbg=0 ctermfg=1 cterm=none + hi Folded ctermbg=0 ctermfg=1 cterm=none + + " -> Line info + hi LineNr ctermbg=0 ctermfg=7 cterm=none + hi StatusLine ctermbg=0 ctermfg=7 cterm=none + hi StatusLineNC ctermbg=0 ctermfg=7 cterm=none + + " -> Messages + hi ErrorMsg ctermbg=4 ctermfg=7 cterm=none + hi Question ctermbg=8 ctermfg=6 cterm=none + hi WarningMsg ctermbg=6 ctermfg=0 cterm=none + hi MoreMsg ctermbg=8 ctermfg=6 cterm=none + hi ModeMsg ctermbg=8 ctermfg=6 cterm=none + + " -> Search + hi Search ctermbg=6 cterm=none + hi IncSearch ctermbg=6 cterm=none + + " -> Diff + hi DiffAdd ctermbg=0 ctermfg=2 cterm=none + hi DiffChange ctermbg=0 ctermfg=6 cterm=none + hi DiffDelete ctermbg=0 ctermfg=4 cterm=none + hi DiffText ctermbg=1 ctermfg=6 cterm=underline + + " -> Menu + hi Pmenu ctermbg=0 ctermfg=4 cterm=none + hi PmenuSel ctermbg=6 ctermfg=4 cterm=none + hi PmenuSbar ctermbg=0 cterm=none + hi PmenuThumb ctermbg=4 cterm=none + hi PmenuSel ctermbg=6 ctermfg=4 cterm=none + + " -> Tabs + hi TabLine ctermbg=7 ctermfg=8 cterm=none + hi TabLineFill ctermbg=0 cterm=none + hi TabLineSel ctermbg=8 ctermfg=7 cterm=bold + " + " -> Visual Mode + hi Visual ctermbg=0 ctermfg=6 cterm=none + hi VisualNOS ctermbg=0 ctermfg=7 cterm=none + + " -> Code + hi Comment ctermbg=8 ctermfg=7 cterm=none + hi Constant ctermbg=8 ctermfg=2 cterm=none + hi String ctermbg=8 ctermfg=6 cterm=none + hi Error ctermbg=8 ctermfg=4 cterm=none + hi Identifier ctermbg=8 ctermfg=3 cterm=none + hi Function ctermbg=8 ctermfg=3 cterm=none + hi Ignore ctermbg=8 ctermfg=8 cterm=none + hi MatchParen ctermbg=6 ctermfg=8 cterm=none + hi PreProc ctermbg=8 ctermfg=5 cterm=none + hi Special ctermbg=8 ctermfg=4 cterm=none + hi Todo ctermbg=8 ctermfg=4 cterm=bold + hi Underlined ctermbg=8 ctermfg=4 cterm=underline + hi Statement ctermbg=8 ctermfg=5 cterm=none + hi Operator ctermbg=8 ctermfg=4 cterm=none + hi Delimiter ctermbg=8 ctermfg=6 cterm=none + hi Type ctermbg=8 ctermfg=6 cterm=none + hi Exception ctermbg=8 ctermfg=4 cterm=none + + " -> HTML-specific + hi htmlBold ctermbg=8 ctermfg=7 cterm=bold + hi htmlBoldItalic ctermbg=8 ctermfg=7 cterm=bold,italic + hi htmlBoldUnderline ctermbg=8 ctermfg=7 cterm=bold,underline + hi htmlBoldUnderlineItalic ctermbg=8 ctermfg=7 cterm=bold,underline,italic + hi htmlItalic ctermbg=8 ctermfg=7 cterm=italic + hi htmlUnderline ctermbg=8 ctermfg=7 cterm=underline + hi htmlUnderlineItalic ctermbg=8 ctermfg=7 cterm=underline,italic + +endif + +hi! default link bbcodeBold htmlBold +hi! default link bbcodeBoldItalic htmlBoldItalic +hi! default link bbcodeBoldItalicUnderline htmlBoldUnderlineItalic +hi! default link bbcodeBoldUnderline htmlBoldUnderline +hi! default link bbcodeItalic htmlItalic +hi! default link bbcodeItalicUnderline htmlUnderlineItalic +hi! default link bbcodeUnderline htmlUnderline + +" Spellcheck formatting +if has("spell") + hi SpellBad guisp=#FC4234 gui=undercurl + hi SpellCap guisp=#70BDF1 gui=undercurl + hi SpellLocal guisp=#FFEE68 gui=undercurl + hi SpellRare guisp=#6DF584 gui=undercurl +endif
A resources/robots.txt

@@ -0,0 +1,2 @@

+User-agent: * +Disallow: /admin