rubyneat 0.4.0.alpha.4 → 0.4.0.alpha.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,136 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1">
8
+
9
+ <title>Welcome to Jekyll!</title>
10
+ <meta name="description" content="You’ll find this post in your _posts directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different wa...">
11
+
12
+ <link rel="stylesheet" href="/css/main.css">
13
+ <link rel="canonical" href="http://rubyneat.de/jekyll/update/2016/03/25/welcome-to-jekyll.html">
14
+ <link rel="alternate" type="application/rss+xml" title="RubyNEAT" href="http://rubyneat.de/feed.xml">
15
+ </head>
16
+
17
+
18
+ <body>
19
+
20
+ <header class="site-header">
21
+
22
+ <div class="wrapper">
23
+
24
+ <a class="site-title" href="/">RubyNEAT</a>
25
+
26
+ <nav class="site-nav">
27
+ <a href="#" class="menu-icon">
28
+ <svg viewBox="0 0 18 15">
29
+ <path fill="#424242" d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.031C17.335,0,18,0.665,18,1.484L18,1.484z"/>
30
+ <path fill="#424242" d="M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0c0-0.82,0.665-1.484,1.484-1.484 h15.031C17.335,6.031,18,6.696,18,7.516L18,7.516z"/>
31
+ <path fill="#424242" d="M18,13.516C18,14.335,17.335,15,16.516,15H1.484C0.665,15,0,14.335,0,13.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.031C17.335,12.031,18,12.696,18,13.516L18,13.516z"/>
32
+ </svg>
33
+ </a>
34
+
35
+ <div class="trigger">
36
+
37
+
38
+ <a class="page-link" href="/about/">About</a>
39
+
40
+
41
+
42
+
43
+
44
+ <a class="page-link" href="/index.org">RubyNEAT</a>
45
+
46
+
47
+
48
+
49
+ </div>
50
+ </nav>
51
+
52
+ </div>
53
+
54
+ </header>
55
+
56
+
57
+ <div class="page-content">
58
+ <div class="wrapper">
59
+ <article class="post" itemscope itemtype="http://schema.org/BlogPosting">
60
+
61
+ <header class="post-header">
62
+ <h1 class="post-title" itemprop="name headline">Welcome to Jekyll!</h1>
63
+ <p class="post-meta"><time datetime="2016-03-25T23:35:08+01:00" itemprop="datePublished">Mar 25, 2016</time></p>
64
+ </header>
65
+
66
+ <div class="post-content" itemprop="articleBody">
67
+ <p>You’ll find this post in your <code class="highlighter-rouge">_posts</code> directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run <code class="highlighter-rouge">jekyll serve</code>, which launches a web server and auto-regenerates your site when a file is updated.</p>
68
+
69
+ <p>To add new posts, simply add a file in the <code class="highlighter-rouge">_posts</code> directory that follows the convention <code class="highlighter-rouge">YYYY-MM-DD-name-of-post.ext</code> and includes the necessary front matter. Take a look at the source for this post to get an idea about how it works.</p>
70
+
71
+ <p>Jekyll also offers powerful support for code snippets:</p>
72
+
73
+ <figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="k">def</span> <span class="nf">print_hi</span><span class="p">(</span><span class="nb">name</span><span class="p">)</span>
74
+ <span class="nb">puts</span> <span class="s2">"Hi, </span><span class="si">#{</span><span class="nb">name</span><span class="si">}</span><span class="s2">"</span>
75
+ <span class="k">end</span>
76
+ <span class="n">print_hi</span><span class="p">(</span><span class="s1">'Tom'</span><span class="p">)</span>
77
+ <span class="c1">#=&gt; prints 'Hi, Tom' to STDOUT.</span></code></pre></figure>
78
+
79
+ <p>Check out the <a href="http://jekyllrb.com/docs/home">Jekyll docs</a> for more info on how to get the most out of Jekyll. File all bugs/feature requests at <a href="https://github.com/jekyll/jekyll">Jekyll’s GitHub repo</a>. If you have questions, you can ask them on <a href="https://talk.jekyllrb.com/">Jekyll Talk</a>.</p>
80
+
81
+
82
+ </div>
83
+
84
+ </article>
85
+
86
+ </div>
87
+ </div>
88
+
89
+ <footer class="site-footer">
90
+
91
+ <div class="wrapper">
92
+
93
+ <h2 class="footer-heading">RubyNEAT</h2>
94
+
95
+ <div class="footer-col-wrapper">
96
+ <div class="footer-col footer-col-1">
97
+ <ul class="contact-list">
98
+ <li>RubyNEAT</li>
99
+ <li><a href="mailto:fred.mitchell@gmx.de">fred.mitchell@gmx.de</a></li>
100
+ </ul>
101
+ </div>
102
+
103
+ <div class="footer-col footer-col-2">
104
+ <ul class="social-media-list">
105
+
106
+ <li>
107
+ <a href="https://github.com/flajann2"><span class="icon icon--github"><svg viewBox="0 0 16 16"><path fill="#828282" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/></svg>
108
+ </span><span class="username">flajann2</span></a>
109
+
110
+ </li>
111
+
112
+
113
+
114
+ <li>
115
+ <a href="https://twitter.com/flajann"><span class="icon icon--twitter"><svg viewBox="0 0 16 16"><path fill="#828282" d="M15.969,3.058c-0.586,0.26-1.217,0.436-1.878,0.515c0.675-0.405,1.194-1.045,1.438-1.809c-0.632,0.375-1.332,0.647-2.076,0.793c-0.596-0.636-1.446-1.033-2.387-1.033c-1.806,0-3.27,1.464-3.27,3.27 c0,0.256,0.029,0.506,0.085,0.745C5.163,5.404,2.753,4.102,1.14,2.124C0.859,2.607,0.698,3.168,0.698,3.767 c0,1.134,0.577,2.135,1.455,2.722C1.616,6.472,1.112,6.325,0.671,6.08c0,0.014,0,0.027,0,0.041c0,1.584,1.127,2.906,2.623,3.206 C3.02,9.402,2.731,9.442,2.433,9.442c-0.211,0-0.416-0.021-0.615-0.059c0.416,1.299,1.624,2.245,3.055,2.271 c-1.119,0.877-2.529,1.4-4.061,1.4c-0.264,0-0.524-0.015-0.78-0.046c1.447,0.928,3.166,1.469,5.013,1.469 c6.015,0,9.304-4.983,9.304-9.304c0-0.142-0.003-0.283-0.009-0.423C14.976,4.29,15.531,3.714,15.969,3.058z"/></svg>
116
+ </span><span class="username">flajann</span></a>
117
+
118
+ </li>
119
+
120
+ </ul>
121
+ </div>
122
+
123
+ <div class="footer-col footer-col-3">
124
+ <p>Write an awesome description for your new site here. You can edit this line in _config.yml. It will appear in your document head meta (for Google search results) and in your feed.xml site description.
125
+ </p>
126
+ </div>
127
+ </div>
128
+
129
+ </div>
130
+
131
+ </footer>
132
+
133
+
134
+ </body>
135
+
136
+ </html>
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "RubyNEAT",
3
+ "tagline": "Ruby Neural Evolution of Augmenting Topologies (NEAT)",
4
+ "body": "# Introduction to RubyNEAT\r\n\r\n## What is NEAT?\r\nNEAT is an acronym for Neural Evolution of Augmenting Topologies. In short, neural nets that are evolved from a minimal topology, allowing selection to decide on what topologies are most adequate for resolving the problem at hand.\r\n\r\n## What is RubyNEAT?\r\nRubyNEAT is the world's first (and currently only) implementation of the NEAT algorithm in the Ruby programming language. RubyNEAT leverages some of the benefits of Ruby, such as metaprogramming, to implement activation of the Neural Net.\r\n\r\nBasically, the Neural Nets in RubyNEAT manifests themselves in the Phenotypes as functional programs -- of a sort. You may think of it as an application of Genetic Programming techniques to resolving the NEAT algorithm. As such, once fit Critters (neural nets) are found, they may be extracted as pure Ruby code, not needing the RubyNEAT engine for activation.\r\n\r\n## Architecture\r\n\r\nRubyNEAT comprises many interacting modules. While it is not strictly necessary to understand RubyNEAT at this level of detail, it would be beneficial for a number of reasons, especially in understanding how to tweak the parameters to improve performance for your application. \r\n\r\nRubyNEAT comprises the following modules: Controller, Expressor, Evaluator, Evolver, Population, and Critter.\r\n\r\n#### Controller\r\nThe Controller mediates all aspects of RubyNEAT evolution, the various modules involved and their interactions, and also holds the settings the other modules will refer to. \r\n\r\nThe Controller is singular. There can only be one Controller in the RubyNEAT system. All other objects associated with the Controller shall have embedded in them a reference to their controller.\r\n\r\n#### Evolver\r\nThe Evolver module houses the evolving algorithms for RubyNEAT. It evolves the entire Population of Critters.\r\n\r\n#### Expressor\r\nThe Expressor module is responsible for interpreting the Genotype of the Critters and creating their Phenotypes. The default Expressor generates Ruby code and attaches that code to the Phenotype instances of the Critter. \r\n\r\nIt is entirely possible to swap in a different Expressor and generate code for a different target language, or create some other construct. There is no limit to what you could have an Expressor do.\r\n\r\n#### Evaluator\r\nThe Evaluator is a kind of bridge between the inner \"biology\" of the RubyNEAT \"ecosystem\" and the outside world. It has ties to the RubyNEAT DSL where you encode your own fitness functions and data links to some external problem space. It is, in a sense, the \"gateway\".\r\n\r\n#### Population\r\nThe Population is what your intuition tells you. It is a environment that houses a collection of Critters. \r\n\r\n#### Critter\r\nThe Critter is the embodiment of both the genetics for the neural net and also the expression of the same. It contains, in other words, the Genotype and the Phenotype.\r\n\r\nCritters are mated through the Evolver, and have their genes expressed through the Expressor. \r\n\r\n== Installation==\r\n\r\nYou may install RubyNEAT by cloning the repo at GitHub:\r\n[https://github.com/flajann2/rubyneat RubyNEAT Github]\r\n\r\nOr you may get it via a gem\r\n > gem install rubyneat --pre \r\n\r\n=== Requirements ===\r\nYou will need at least Ruby 2.0.0, though we strongly recommend 2.1.1 or better. We will NOT be supporting 1.9.x, as that is being phased out anyway.\r\n\r\n== Examples ==\r\nClone:\r\n > git clone git@github.com:flajann2/rubyneat_examples.git\r\n\r\nand cd into the '''rubyneat_examples''' directory. \r\n\r\nType: \r\n > neat list neaters\r\n\r\nto get a list of neaters. To run one like, say, the XOR test:\r\n > neat run xor\r\n\r\n== Note Well ==\r\nThe pole-balancing invpend neater is still under development. It will display a window with the cart and pole, but will not balance yet. Just a matter of me finishing up that code. All the others work.\r\n\r\n=== RubyNEAT ===\r\n\r\n* GitHUB\r\n** [https://github.com/flajann2/rubyneat RubyNEAT GitHub]\r\n\r\n* Ruby GEM\r\n** > gem install rubyneat --pre\r\n\r\n=== RubyNEAT Examples ===\r\n* Github\r\n** [https://github.com/flajann2/rubyneat_examples Example Neaters on GitHub]\r\n\r\n== RubyNEAT DSL ==\r\n\r\nI will take the '''XOR''' neater and document it. This is not the perfect way to go, but I will get more extensive later.\r\n\r\n=== The XOR Neater Example ===\r\n require 'xor'\r\n include NEAT::DSL\r\n\r\n-The first lines here includes the special XOR library, which is basically:\r\n def xor(*inp)\r\n inp.map{|n| (n > 0) ? 1 : 0}.reduce {|p, i| p + ((i > 0) ? 1 : 0) } == 1\r\n end\r\n-\r\n\r\n-Basic settings for the '''XOR''', which can handle more than 2 inputs.\r\n XOR_INPUTS = 2\r\n XOR_STATES = 2 ** XOR_INPUTS\r\n MAX_FIT = XOR_STATES\r\n ALMOST_FIT = XOR_STATES - 0.5\r\n\r\n- The actual definition of the Neater. Here you specify the parameters RubyNEAT\r\nwill use to run the evolution, as well as the CPPN neuron types, the fitness function,\r\netc.\r\n define \"XOR System\" do\r\n\r\n- Inputs defined as name: Neuron, name: Neuron ... hash. In this segment, we\r\ncreate a block to generate the hash since we can have a variable number of\r\ninputs to the XOR. The input names must be unique. Note that a bias neuron\r\nis also supplied, and it is always called :bias.\r\n inputs {\r\n cinv = Hash[(1..XOR_INPUTS).map{|i| [(\"i%s\" % i).to_sym, InputNeuron]}]\r\n cinv[:bias] = BiasNeuron\r\n cinv\r\n }\r\n\r\n- Outputs are defined in a similar fashion to the inputs. The names of all the \r\noutput neurons must be unique. Here in this example we only have one output, and\r\nwe use the hyperbolic tan Neuron as the output. There is also a sigmoid Neuron\r\nthat could be used as well, but the input levels would have to be conditioned\r\nto vary from 0 to 1 instead of from -1 to one.\r\n outputs out: TanhNeuron\r\n\r\n- Hidden neuron specification is optional. \r\nThe names given here are largely meaningless, but but follow the same rules\r\nfor uniqueness. The neurons specified will be selected randomly as the topologies\r\nare augmented.\r\n hidden tan: TanhNeuron\r\n\r\n==== Settings ====\r\nFor RubyNEAT. Extensive documentation will be provided on a later date\r\nas to the meanings, which closely follow the parameters for Ken Stanley's NEAT\r\nimplementation.\r\n===== General =====\r\n hash_on_fitness false\r\n start_population_size 30\r\n population_size 30\r\n max_generations 10000\r\n max_population_history 10\r\n\r\n===== Evolver probabilities and SDs =====\r\n- Perturbations\r\n mutate_perturb_gene_weights_prob 0.10\r\n mutate_perturb_gene_weights_sd 0.25\r\n\r\n===== Complete Change of weight =====\r\n mutate_change_gene_weights_prob 0.10\r\n mutate_change_gene_weights_sd 1.00\r\n\r\n===== Adding new neurons and genes =====\r\n mutate_add_neuron_prob 0.05\r\n mutate_add_gene_prob 0.20\r\n\r\n===== Switching genes on and off =====\r\n mutate_gene_disable_prob 0.01\r\n mutate_gene_reenable_prob 0.01\r\n\r\n interspecies_mate_rate 0.03\r\n mate_only_prob 0.10 #0.7\r\n\r\n===== Mating =====\r\n survival_threshold 0.20 # top % allowed to mate in a species.\r\n survival_mininum_per_species 4 # for small populations, we need SOMETHING to go on.\r\n\r\n===== Fitness costs =====\r\n fitness_cost_per_neuron 0.00001\r\n fitness_cost_per_gene 0.00001\r\n\r\n===== Speciation =====\r\n compatibility_threshold 2.5\r\n disjoint_coefficient 0.6\r\n excess_coefficient 0.6\r\n weight_coefficient 0.2\r\n max_species 20\r\n dropoff_age 15\r\n smallest_species 5\r\n\r\n===== Sequencing =====\r\nThe evaluation function is called repeatedly, and each iteration is given a\r\nmonotonically increasing integer which represents the sequence number. The results\r\nof each run is returned, and those results are evaluated elsewhere in the Neater.\r\n start_sequence_at 0\r\n end_sequence_at 2 ** XOR_INPUTS - 1\r\nend\r\n\r\n==== The Evolution Block ====\r\n evolve do\r\n\r\n===== The Query Block ===== \r\nThis query shall return a vector result that will serve\r\nas the inputs to the critter. \r\n query { |seq|\r\n # We'll use the seq to create the xor sequences via\r\n # the least signficant bits.\r\n condition_boolean_vector (0 ... XOR_INPUTS).map{|i| (seq & (1 << i)) != 0}\r\n }\r\n\r\n===== The Compare Block =====\r\nCompare the fitness of two critters. We may choose a different ordering here.\r\n compare {|f1, f2| f2 <=> f1 }\r\n\r\n===== The Cost of Fitness Block =====\r\nHere we integrate the cost with the fitness.\r\n cost { |fitvec, cost|\r\n fit = XOR_STATES - fitvec.reduce {|a,r| a+r} - cost\r\n $log.debug \">>>>>>> fitvec #{fitvec} => #{fit}, cost #{cost}\"\r\n fit\r\n }\r\n\r\n===== The Fitness Block =====\r\nThe fitness block is called for each activation and is given the input vector,\r\nthe output vector, and the sequence number given to the query. The results are\r\nevaluated and a fitness scalar is returned.\r\n fitness { |vin, vout, seq|\r\n unless vout == :error\r\n bin = uncondition_boolean_vector vin\r\n bout = uncondition_boolean_vector vout\r\n bactual = [xor(*vin)]\r\n vactual = condition_boolean_vector bactual\r\n fit = (bout == bactual) ? 0.00 : 1.00\r\n #simple_fitness_error(vout, vactual.map{|f| f * 0.50 })\r\n bfit = (bout == bactual) ? 'T' : 'F'\r\n fit\r\n else\r\n $log.debug \"Error on #{vin} [#{seq}]\"\r\n 1.0\r\n end\r\n }\r\n\r\n===== The Termination Condition =====\r\nWhen the desired fitness level is reached, you may want to end the\r\nNeater run. If so, provide a block to do just that.\r\n stop_on_fitness {|fitness, c|\r\n puts \"*** Generation Run #{c.generation_num}, best is #{fitness[:best]} ***\\n\\n\"\r\n fitness[:best] >= ALMOST_FIT\r\n }\r\n end\r\n\r\n==== Report Generating Block ====\r\nThis particular report block just adds something to the log. You could easily\r\nreplace that with a visual update if you like, etc.\r\n report do |rept|\r\n $log.info \"REPORT #{rept.to_yaml}\"\r\n end\r\n\r\n==== Engine Run Block ====\r\nThe block here is called upon the completion of each generation. The\r\n'c' parameter is the RubyNEAT Controller, the same as given to the stop_on_fitness\r\nblock.\r\n run_engine do |c|\r\n $log.info \"******** Run of generation %s completed, history count %d ********\" %\r\n [c.generation_num, c.population_history.size]\r\n end\r\n\r\n=== Releases ===\r\n\r\n== v0.4.0.alpha.4 ==\r\n* First crude cut of a dashboard rubyneat_dashboard\r\n\r\n== 0.3.5.alpha.6 ==\r\n* Command line workflow is a bit cleaner\r\n* Removed neater examples completely and place them in \r\n https://github.com/flajann2/rubyneat_examples\r\n* Cleaned up the internal docs a bit\r\n* Uniquely Generated Named Objects (UGNOs) cleaned up to be respectable\r\n\r\n\r\n== 2015-06-08 ==\r\n* Working on the Iterated ES HyperNEAT still, after being side-tracked by having to make a living. Also creating a maze environment for the critters to operate as bots in order to test the new ES HyperNEAT extension.\r\n* rnDSL, as a result of TWEANN Compositions, is undergoing radical changes. All example Neaters will be eventually update to reflect the new syntax.\r\n\r\n== 2014-09-25 ==\r\nHot on the efforts on adding two major features to RubyNEAT:\r\n\r\n* TWEANN Compositions -- you will be able to define composites of TWEANNs on a per critter basis. This should mirror how, say, biological brains composite themselves into regions of speciality. You may specify different selections of neurons for each TWEANN. This is totally experiential, so we'll see if this results in better convergence for some problems.\r\n\r\n* iterated ES HyperNEAT -- one of the compsitions above can be specified as a Hyper TWEANN, and just represent one of the many compositions you may have.\r\n\r\n* The syntax of the Neater DSL will change quite a bit to reflect the new features, and all of the examples will be rewritten to show this.\r\n\r\nDo not confuse the ANN compositions here with CPPNs, which are completely different. By default, all TWEANNs in HyperNEAT are potential CPPNs anyway, as you can specify more than one neuron type.\r\n\r\n\r\n== 2014-08-03 ==\r\nJust released a very crude alpha cut of a dashboard for RubyNEAT. You will have to install it manually, along with rubyneat. The gem is rubyneat_dashboard.\r\n\r\n* I am currently working on a Dashboard for RubyNEAT. It will be a gemmable plugin that will allow you to use the browser as the dashboard. It will have realtime updates and the like, allowing you to monitor the progress of your Neaters, and to view and possibly set parameters, and to see what your Critters look like.\r\n\r\n",
5
+ "note": "Don't delete this file! It's used internally to help with page regeneration."
6
+ }
@@ -0,0 +1,116 @@
1
+ /*
2
+ Copyright 2014 GitHub Inc.
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+
16
+ */
17
+
18
+ .pl-c /* comment */ {
19
+ color: #969896;
20
+ }
21
+
22
+ .pl-c1 /* constant, markup.raw, meta.diff.header, meta.module-reference, meta.property-name, support, support.constant, support.variable, variable.other.constant */,
23
+ .pl-s .pl-v /* string variable */ {
24
+ color: #0086b3;
25
+ }
26
+
27
+ .pl-e /* entity */,
28
+ .pl-en /* entity.name */ {
29
+ color: #795da3;
30
+ }
31
+
32
+ .pl-s .pl-s1 /* string source */,
33
+ .pl-smi /* storage.modifier.import, storage.modifier.package, storage.type.java, variable.other, variable.parameter.function */ {
34
+ color: #333;
35
+ }
36
+
37
+ .pl-ent /* entity.name.tag */ {
38
+ color: #63a35c;
39
+ }
40
+
41
+ .pl-k /* keyword, storage, storage.type */ {
42
+ color: #a71d5d;
43
+ }
44
+
45
+ .pl-pds /* punctuation.definition.string, string.regexp.character-class */,
46
+ .pl-s /* string */,
47
+ .pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */,
48
+ .pl-sr /* string.regexp */,
49
+ .pl-sr .pl-cce /* string.regexp constant.character.escape */,
50
+ .pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */,
51
+ .pl-sr .pl-sre /* string.regexp source.ruby.embedded */ {
52
+ color: #183691;
53
+ }
54
+
55
+ .pl-v /* variable */ {
56
+ color: #ed6a43;
57
+ }
58
+
59
+ .pl-id /* invalid.deprecated */ {
60
+ color: #b52a1d;
61
+ }
62
+
63
+ .pl-ii /* invalid.illegal */ {
64
+ background-color: #b52a1d;
65
+ color: #f8f8f8;
66
+ }
67
+
68
+ .pl-sr .pl-cce /* string.regexp constant.character.escape */ {
69
+ color: #63a35c;
70
+ font-weight: bold;
71
+ }
72
+
73
+ .pl-ml /* markup.list */ {
74
+ color: #693a17;
75
+ }
76
+
77
+ .pl-mh /* markup.heading */,
78
+ .pl-mh .pl-en /* markup.heading entity.name */,
79
+ .pl-ms /* meta.separator */ {
80
+ color: #1d3e81;
81
+ font-weight: bold;
82
+ }
83
+
84
+ .pl-mq /* markup.quote */ {
85
+ color: #008080;
86
+ }
87
+
88
+ .pl-mi /* markup.italic */ {
89
+ color: #333;
90
+ font-style: italic;
91
+ }
92
+
93
+ .pl-mb /* markup.bold */ {
94
+ color: #333;
95
+ font-weight: bold;
96
+ }
97
+
98
+ .pl-md /* markup.deleted, meta.diff.header.from-file */ {
99
+ background-color: #ffecec;
100
+ color: #bd2c00;
101
+ }
102
+
103
+ .pl-mi1 /* markup.inserted, meta.diff.header.to-file */ {
104
+ background-color: #eaffea;
105
+ color: #55a532;
106
+ }
107
+
108
+ .pl-mdr /* meta.diff.range */ {
109
+ color: #795da3;
110
+ font-weight: bold;
111
+ }
112
+
113
+ .pl-mo /* meta.output */ {
114
+ color: #1d3e81;
115
+ }
116
+
@@ -0,0 +1,424 @@
1
+ /*! normalize.css v3.0.2 | MIT License | git.io/normalize */
2
+
3
+ /**
4
+ * 1. Set default font family to sans-serif.
5
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
6
+ * user zoom.
7
+ */
8
+
9
+ html {
10
+ font-family: sans-serif; /* 1 */
11
+ -ms-text-size-adjust: 100%; /* 2 */
12
+ -webkit-text-size-adjust: 100%; /* 2 */
13
+ }
14
+
15
+ /**
16
+ * Remove default margin.
17
+ */
18
+
19
+ body {
20
+ margin: 0;
21
+ }
22
+
23
+ /* HTML5 display definitions
24
+ ========================================================================== */
25
+
26
+ /**
27
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
28
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11
29
+ * and Firefox.
30
+ * Correct `block` display not defined for `main` in IE 11.
31
+ */
32
+
33
+ article,
34
+ aside,
35
+ details,
36
+ figcaption,
37
+ figure,
38
+ footer,
39
+ header,
40
+ hgroup,
41
+ main,
42
+ menu,
43
+ nav,
44
+ section,
45
+ summary {
46
+ display: block;
47
+ }
48
+
49
+ /**
50
+ * 1. Correct `inline-block` display not defined in IE 8/9.
51
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
52
+ */
53
+
54
+ audio,
55
+ canvas,
56
+ progress,
57
+ video {
58
+ display: inline-block; /* 1 */
59
+ vertical-align: baseline; /* 2 */
60
+ }
61
+
62
+ /**
63
+ * Prevent modern browsers from displaying `audio` without controls.
64
+ * Remove excess height in iOS 5 devices.
65
+ */
66
+
67
+ audio:not([controls]) {
68
+ display: none;
69
+ height: 0;
70
+ }
71
+
72
+ /**
73
+ * Address `[hidden]` styling not present in IE 8/9/10.
74
+ * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
75
+ */
76
+
77
+ [hidden],
78
+ template {
79
+ display: none;
80
+ }
81
+
82
+ /* Links
83
+ ========================================================================== */
84
+
85
+ /**
86
+ * Remove the gray background color from active links in IE 10.
87
+ */
88
+
89
+ a {
90
+ background-color: transparent;
91
+ }
92
+
93
+ /**
94
+ * Improve readability when focused and also mouse hovered in all browsers.
95
+ */
96
+
97
+ a:active,
98
+ a:hover {
99
+ outline: 0;
100
+ }
101
+
102
+ /* Text-level semantics
103
+ ========================================================================== */
104
+
105
+ /**
106
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
107
+ */
108
+
109
+ abbr[title] {
110
+ border-bottom: 1px dotted;
111
+ }
112
+
113
+ /**
114
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
115
+ */
116
+
117
+ b,
118
+ strong {
119
+ font-weight: bold;
120
+ }
121
+
122
+ /**
123
+ * Address styling not present in Safari and Chrome.
124
+ */
125
+
126
+ dfn {
127
+ font-style: italic;
128
+ }
129
+
130
+ /**
131
+ * Address variable `h1` font-size and margin within `section` and `article`
132
+ * contexts in Firefox 4+, Safari, and Chrome.
133
+ */
134
+
135
+ h1 {
136
+ font-size: 2em;
137
+ margin: 0.67em 0;
138
+ }
139
+
140
+ /**
141
+ * Address styling not present in IE 8/9.
142
+ */
143
+
144
+ mark {
145
+ background: #ff0;
146
+ color: #000;
147
+ }
148
+
149
+ /**
150
+ * Address inconsistent and variable font size in all browsers.
151
+ */
152
+
153
+ small {
154
+ font-size: 80%;
155
+ }
156
+
157
+ /**
158
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
159
+ */
160
+
161
+ sub,
162
+ sup {
163
+ font-size: 75%;
164
+ line-height: 0;
165
+ position: relative;
166
+ vertical-align: baseline;
167
+ }
168
+
169
+ sup {
170
+ top: -0.5em;
171
+ }
172
+
173
+ sub {
174
+ bottom: -0.25em;
175
+ }
176
+
177
+ /* Embedded content
178
+ ========================================================================== */
179
+
180
+ /**
181
+ * Remove border when inside `a` element in IE 8/9/10.
182
+ */
183
+
184
+ img {
185
+ border: 0;
186
+ }
187
+
188
+ /**
189
+ * Correct overflow not hidden in IE 9/10/11.
190
+ */
191
+
192
+ svg:not(:root) {
193
+ overflow: hidden;
194
+ }
195
+
196
+ /* Grouping content
197
+ ========================================================================== */
198
+
199
+ /**
200
+ * Address margin not present in IE 8/9 and Safari.
201
+ */
202
+
203
+ figure {
204
+ margin: 1em 40px;
205
+ }
206
+
207
+ /**
208
+ * Address differences between Firefox and other browsers.
209
+ */
210
+
211
+ hr {
212
+ box-sizing: content-box;
213
+ height: 0;
214
+ }
215
+
216
+ /**
217
+ * Contain overflow in all browsers.
218
+ */
219
+
220
+ pre {
221
+ overflow: auto;
222
+ }
223
+
224
+ /**
225
+ * Address odd `em`-unit font size rendering in all browsers.
226
+ */
227
+
228
+ code,
229
+ kbd,
230
+ pre,
231
+ samp {
232
+ font-family: monospace, monospace;
233
+ font-size: 1em;
234
+ }
235
+
236
+ /* Forms
237
+ ========================================================================== */
238
+
239
+ /**
240
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
241
+ * styling of `select`, unless a `border` property is set.
242
+ */
243
+
244
+ /**
245
+ * 1. Correct color not being inherited.
246
+ * Known issue: affects color of disabled elements.
247
+ * 2. Correct font properties not being inherited.
248
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
249
+ */
250
+
251
+ button,
252
+ input,
253
+ optgroup,
254
+ select,
255
+ textarea {
256
+ color: inherit; /* 1 */
257
+ font: inherit; /* 2 */
258
+ margin: 0; /* 3 */
259
+ }
260
+
261
+ /**
262
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
263
+ */
264
+
265
+ button {
266
+ overflow: visible;
267
+ }
268
+
269
+ /**
270
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
271
+ * All other form control elements do not inherit `text-transform` values.
272
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
273
+ * Correct `select` style inheritance in Firefox.
274
+ */
275
+
276
+ button,
277
+ select {
278
+ text-transform: none;
279
+ }
280
+
281
+ /**
282
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
283
+ * and `video` controls.
284
+ * 2. Correct inability to style clickable `input` types in iOS.
285
+ * 3. Improve usability and consistency of cursor style between image-type
286
+ * `input` and others.
287
+ */
288
+
289
+ button,
290
+ html input[type="button"], /* 1 */
291
+ input[type="reset"],
292
+ input[type="submit"] {
293
+ -webkit-appearance: button; /* 2 */
294
+ cursor: pointer; /* 3 */
295
+ }
296
+
297
+ /**
298
+ * Re-set default cursor for disabled elements.
299
+ */
300
+
301
+ button[disabled],
302
+ html input[disabled] {
303
+ cursor: default;
304
+ }
305
+
306
+ /**
307
+ * Remove inner padding and border in Firefox 4+.
308
+ */
309
+
310
+ button::-moz-focus-inner,
311
+ input::-moz-focus-inner {
312
+ border: 0;
313
+ padding: 0;
314
+ }
315
+
316
+ /**
317
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
318
+ * the UA stylesheet.
319
+ */
320
+
321
+ input {
322
+ line-height: normal;
323
+ }
324
+
325
+ /**
326
+ * It's recommended that you don't attempt to style these elements.
327
+ * Firefox's implementation doesn't respect box-sizing, padding, or width.
328
+ *
329
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
330
+ * 2. Remove excess padding in IE 8/9/10.
331
+ */
332
+
333
+ input[type="checkbox"],
334
+ input[type="radio"] {
335
+ box-sizing: border-box; /* 1 */
336
+ padding: 0; /* 2 */
337
+ }
338
+
339
+ /**
340
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
341
+ * `font-size` values of the `input`, it causes the cursor style of the
342
+ * decrement button to change from `default` to `text`.
343
+ */
344
+
345
+ input[type="number"]::-webkit-inner-spin-button,
346
+ input[type="number"]::-webkit-outer-spin-button {
347
+ height: auto;
348
+ }
349
+
350
+ /**
351
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
352
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
353
+ * (include `-moz` to future-proof).
354
+ */
355
+
356
+ input[type="search"] {
357
+ -webkit-appearance: textfield; /* 1 */ /* 2 */
358
+ box-sizing: content-box;
359
+ }
360
+
361
+ /**
362
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
363
+ * Safari (but not Chrome) clips the cancel button when the search input has
364
+ * padding (and `textfield` appearance).
365
+ */
366
+
367
+ input[type="search"]::-webkit-search-cancel-button,
368
+ input[type="search"]::-webkit-search-decoration {
369
+ -webkit-appearance: none;
370
+ }
371
+
372
+ /**
373
+ * Define consistent border, margin, and padding.
374
+ */
375
+
376
+ fieldset {
377
+ border: 1px solid #c0c0c0;
378
+ margin: 0 2px;
379
+ padding: 0.35em 0.625em 0.75em;
380
+ }
381
+
382
+ /**
383
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
384
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
385
+ */
386
+
387
+ legend {
388
+ border: 0; /* 1 */
389
+ padding: 0; /* 2 */
390
+ }
391
+
392
+ /**
393
+ * Remove default vertical scrollbar in IE 8/9/10/11.
394
+ */
395
+
396
+ textarea {
397
+ overflow: auto;
398
+ }
399
+
400
+ /**
401
+ * Don't inherit the `font-weight` (applied by a rule above).
402
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
403
+ */
404
+
405
+ optgroup {
406
+ font-weight: bold;
407
+ }
408
+
409
+ /* Tables
410
+ ========================================================================== */
411
+
412
+ /**
413
+ * Remove most spacing between table cells.
414
+ */
415
+
416
+ table {
417
+ border-collapse: collapse;
418
+ border-spacing: 0;
419
+ }
420
+
421
+ td,
422
+ th {
423
+ padding: 0;
424
+ }