nddrylliog_pismo 0.7.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/.document +5 -0
  2. data/.gitignore +29 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +23 -0
  5. data/NOTICE +4 -0
  6. data/README.markdown +131 -0
  7. data/Rakefile +72 -0
  8. data/bin/pismo +45 -0
  9. data/lib/pismo.rb +82 -0
  10. data/lib/pismo/document.rb +67 -0
  11. data/lib/pismo/external_attributes.rb +14 -0
  12. data/lib/pismo/internal_attributes.rb +316 -0
  13. data/lib/pismo/reader.rb +19 -0
  14. data/lib/pismo/reader/base.rb +259 -0
  15. data/lib/pismo/reader/cluster.rb +171 -0
  16. data/lib/pismo/reader/tree.rb +154 -0
  17. data/lib/pismo/stopwords.txt +1002 -0
  18. data/lib/pismo/version.rb +3 -0
  19. data/pismo.gemspec +30 -0
  20. data/test/corpus/bbcnews.html +2131 -0
  21. data/test/corpus/bbcnews2.html +1575 -0
  22. data/test/corpus/briancray.html +269 -0
  23. data/test/corpus/cant_read.html +426 -0
  24. data/test/corpus/factor.html +1362 -0
  25. data/test/corpus/gmane.html +138 -0
  26. data/test/corpus/huffington.html +2932 -0
  27. data/test/corpus/metadata_expected.yaml +72 -0
  28. data/test/corpus/metadata_expected.yaml.old +122 -0
  29. data/test/corpus/queness.html +919 -0
  30. data/test/corpus/reader_expected.yaml +39 -0
  31. data/test/corpus/readers/cluster_expected.yaml +45 -0
  32. data/test/corpus/readers/tree_expected.yaml +55 -0
  33. data/test/corpus/rubyinside.html +318 -0
  34. data/test/corpus/rww.html +1351 -0
  35. data/test/corpus/spolsky.html +298 -0
  36. data/test/corpus/techcrunch.html +1285 -0
  37. data/test/corpus/tweet.html +360 -0
  38. data/test/corpus/youtube.html +2348 -0
  39. data/test/corpus/zefrank.html +535 -0
  40. data/test/helper.rb +15 -0
  41. data/test/test_corpus.rb +54 -0
  42. data/test/test_pismo_document.rb +34 -0
  43. metadata +156 -0
@@ -0,0 +1,1362 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html dir='ltr'>
3
+ <head>
4
+ <script type="text/javascript">(function() { var a=window;function e(b){this.t={};this.tick=function(c,h,d){d=d?d:(new Date).getTime();this.t[c]=[d,h]};this.tick("start",null,b)}var f=new e;a.jstiming={Timer:e,load:f};try{a.jstiming.pt=a.gtbExternal&&a.gtbExternal.pageT()||a.external&&a.external.pageT}catch(g){};a.tickAboveFold=function(b){b=b;var c=0;if(b.offsetParent){do c+=b.offsetTop;while(b=b.offsetParent)}b=c;b<=750&&a.jstiming.load.tick("aft")};var i=false;function j(){if(!i){i=true;a.jstiming.load.tick("firstScrollTime")}}a.addEventListener?a.addEventListener("scroll",j,false):a.attachEvent("onscroll",j); })();</script>
5
+ <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>
6
+ <meta content='true' name='MSSmartTagsPreventParsing'/>
7
+ <meta content='blogger' name='generator'/>
8
+ <link href='http://www.blogger.com/favicon.ico' rel='icon' type='image/vnd.microsoft.icon'/>
9
+ <link href='http://factor-language.blogspot.com/2010/01/factors-bootstrap-process-explained.html' rel='canonical'/>
10
+ <link rel="alternate" type="application/atom+xml" title="Factor: a practical stack language - Atom" href="http://factor-language.blogspot.com/feeds/posts/default" />
11
+ <link rel="alternate" type="application/rss+xml" title="Factor: a practical stack language - RSS" href="http://factor-language.blogspot.com/feeds/posts/default?alt=rss" />
12
+ <link rel="service.post" type="application/atom+xml" title="Factor: a practical stack language - Atom" href="http://www.blogger.com/feeds/17087850/posts/default" />
13
+ <link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://www.blogger.com/rsd.g?blogID=17087850" />
14
+ <link rel="alternate" type="application/atom+xml" title="Factor: a practical stack language - Atom" href="http://factor-language.blogspot.com/feeds/657377910223810792/comments/default" />
15
+ <title>Factor: a practical stack language: Factor's bootstrap process explained</title>
16
+ <link type='text/css' rel='stylesheet' href='http://www.blogger.com/static/v1/widgets/3796602922-widget_css_bundle.css' />
17
+ <link rel="stylesheet" type="text/css" href="http://www.blogger.com/static/v1/v-css/3727950723-blog_controls.css"/>
18
+ <link rel="stylesheet" type="text/css" href="http://www.blogger.com/dyn-css/authorization.css?targetBlogID=17087850&zx=4f6e86e8-ac73-4bc8-b540-f35f3549b797"/>
19
+ <style type="text/css">#navbar-iframe { display:block }
20
+ </style>
21
+
22
+ <style id='page-skin-1' type='text/css'><!--
23
+ /*
24
+ -----------------------------------------------
25
+ Blogger Template Style
26
+ Name: Stretch Denim Light
27
+ Designer: Darren Delaye
28
+ URL: www.DarrenDelaye.com
29
+ Date: 11 Jul 2006
30
+ -----------------------------------------------
31
+ */
32
+ /* Variable definitions
33
+ ====================
34
+ <Variable name="bgColor" description="Page Background Color"
35
+ type="color" default="#ffffff">
36
+ <Variable name="textColor" description="Text Color"
37
+ type="color" default="#333333">
38
+ <Variable name="linkColor" description="Link Color"
39
+ type="color" default="#336699">
40
+ <Variable name="headerBgColor" description="Page Header Background Color"
41
+ type="color" default="#c4e1ff">
42
+ <Variable name="headerTextColor" description="Page Header Text Color"
43
+ type="color" default="#003366">
44
+ <Variable name="headerCornersColor" description="Page Header Corners Color"
45
+ type="color" default="#c4e1ff">
46
+ <Variable name="mainBgColor" description="Main Background Color"
47
+ type="color" default="#ffffff">
48
+ <Variable name="borderColor" description="Border Color"
49
+ type="color" default="#ffffff">
50
+ <Variable name="dateHeaderColor" description="Date Header Color"
51
+ type="color" default="#999999">
52
+ <Variable name="sidebarTitleBgColor" description="Sidebar Title Background Color"
53
+ type="color" default="#ffffff">
54
+ <Variable name="sidebarTitleTextColor" description="Sidebar Title Text Color"
55
+ type="color" default="#333333">
56
+ <Variable name="bodyFont" description="Text Font"
57
+ type="font" default="normal normal 100% Verdana, Arial, Sans-serif;">
58
+ <Variable name="headerFont" description="Page Header Font"
59
+ type="font" default="normal normal 210% Verdana, Arial, Sans-serif;">
60
+ <Variable name="startSide" description="Start side in blog language"
61
+ type="automatic" default="left">
62
+ <Variable name="endSide" description="End side in blog language"
63
+ type="automatic" default="right">
64
+ */
65
+ body {
66
+ background: #ffffff;
67
+ margin: 0;
68
+ padding: 0px;
69
+ font: x-small Verdana, Arial;
70
+ text-align: center;
71
+ color: #333333;
72
+ font-size/* */:/**/small;
73
+ font-size: /**/small;
74
+ }
75
+ a:link {
76
+ color: #336699;
77
+ }
78
+ a:visited {
79
+ color: #336699;
80
+ }
81
+ a img {
82
+ border-width: 0;
83
+ }
84
+ #outer-wrapper {
85
+ font: normal normal 100% Verdana, Arial, Sans-serif;;
86
+ }
87
+ /* Header
88
+ ----------------------------------------------- */
89
+ #header-wrapper {
90
+ margin:0;
91
+ padding: 0;
92
+ background-color: #c4e1ff;
93
+ text-align: left;
94
+ }
95
+ #header {
96
+ margin: 0 2%;
97
+ background-color: #c4e1ff;
98
+ color: #003366;
99
+ padding: 0;
100
+ font: normal normal 210% Verdana, Arial, Sans-serif;;
101
+ position: relative;
102
+ }
103
+ h1.title {
104
+ padding-top: 38px;
105
+ margin: 0 1% .1em;
106
+ line-height: 1.2em;
107
+ font-size: 100%;
108
+ }
109
+ h1.title a, h1.title a:visited {
110
+ color: #003366;
111
+ text-decoration: none;
112
+ }
113
+ #header .description {
114
+ display: block;
115
+ margin: 0 1%;
116
+ padding: 0 0 40px;
117
+ line-height: 1.4em;
118
+ font-size: 50%;
119
+ }
120
+ /* Content
121
+ ----------------------------------------------- */
122
+ .clear {
123
+ clear: both;
124
+ }
125
+ #content-wrapper {
126
+ margin: 0 2%;
127
+ padding: 0 0 15px;
128
+ text-align: left;
129
+ background-color: #ffffff;
130
+ border: 1px solid #ffffff;
131
+ border-top: 0;
132
+ }
133
+ #main-wrapper {
134
+ margin-left: 1%;
135
+ width: 64%;
136
+ float: left;
137
+ background-color: #ffffff;
138
+ display: inline; /* fix for doubling margin in IE */
139
+ word-wrap: break-word; /* fix for long text breaking sidebar float in IE */
140
+ overflow: hidden; /* fix for long non-text content breaking IE sidebar float */
141
+ }
142
+ #sidebar-wrapper {
143
+ margin-right: 1%;
144
+ width: 29%;
145
+ float: right;
146
+ background-color: #ffffff;
147
+ display: inline; /* fix for doubling margin in IE */
148
+ word-wrap: break-word; /* fix for long text breaking sidebar float in IE */
149
+ overflow: hidden; /* fix for long non-text content breaking IE sidebar float */
150
+ }
151
+ /* Headings
152
+ ----------------------------------------------- */
153
+ h2, h3 {
154
+ margin: 0;
155
+ }
156
+ /* Posts
157
+ ----------------------------------------------- */
158
+ .date-header {
159
+ margin: 1.5em 0 0;
160
+ font-weight: normal;
161
+ color: #999999;
162
+ font-size: 100%;
163
+ }
164
+ .post {
165
+ margin: 0 0 1.5em;
166
+ padding-bottom: 1.5em;
167
+ }
168
+ .post-title {
169
+ margin: 0;
170
+ padding: 0;
171
+ font-size: 125%;
172
+ font-weight: bold;
173
+ line-height: 1.1em;
174
+ }
175
+ .post-title a, .post-title a:visited, .post-title strong {
176
+ text-decoration: none;
177
+ color: #333333;
178
+ font-weight: bold;
179
+ }
180
+ .post div {
181
+ margin: 0 0 .75em;
182
+ line-height: 1.3em;
183
+ }
184
+ .post-footer {
185
+ margin: -.25em 0 0;
186
+ color: #333333;
187
+ font-size: 87%;
188
+ }
189
+ .post-footer .span {
190
+ margin-right: .3em;
191
+ }
192
+ .post img {
193
+ padding: 4px;
194
+ border: 1px solid #ffffff;
195
+ }
196
+ .post blockquote {
197
+ margin: 1em 20px;
198
+ }
199
+ .post blockquote p {
200
+ margin: .75em 0;
201
+ }
202
+ /* Comments
203
+ ----------------------------------------------- */
204
+ #comments h4 {
205
+ margin: 1em 0;
206
+ color: #999999;
207
+ }
208
+ #comments h4 strong {
209
+ font-size: 110%;
210
+ }
211
+ #comments-block {
212
+ margin: 1em 0 1.5em;
213
+ line-height: 1.3em;
214
+ }
215
+ #comments-block dt {
216
+ margin: .5em 0;
217
+ }
218
+ #comments-block dd {
219
+ margin: .25em 0 0;
220
+ }
221
+ #comments-block dd.comment-footer {
222
+ margin: -.25em 0 2em;
223
+ line-height: 1.4em;
224
+ font-size: 78%;
225
+ }
226
+ #comments-block dd p {
227
+ margin: 0 0 .75em;
228
+ }
229
+ .deleted-comment {
230
+ font-style:italic;
231
+ color:gray;
232
+ }
233
+ .feed-links {
234
+ clear: both;
235
+ line-height: 2.5em;
236
+ }
237
+ #blog-pager-newer-link {
238
+ float: left;
239
+ }
240
+ #blog-pager-older-link {
241
+ float: right;
242
+ }
243
+ #blog-pager {
244
+ text-align: center;
245
+ }
246
+ /* Sidebar Content
247
+ ----------------------------------------------- */
248
+ .sidebar h2 {
249
+ margin: 1.6em 0 .5em;
250
+ padding: 4px 5px;
251
+ background-color: #ffffff;
252
+ font-size: 100%;
253
+ color: #333333;
254
+ }
255
+ .sidebar ul {
256
+ margin: 0;
257
+ padding: 0;
258
+ list-style: none;
259
+ }
260
+ .sidebar li {
261
+ margin: 0;
262
+ padding-top: 0;
263
+ padding-right: 0;
264
+ padding-bottom: .5em;
265
+ padding-left: 15px;
266
+ text-indent: -15px;
267
+ line-height: 1.5em;
268
+ }
269
+ .sidebar {
270
+ color: #333333;
271
+ line-height:1.3em;
272
+ }
273
+ .sidebar .widget {
274
+ margin-bottom: 1em;
275
+ }
276
+ .sidebar .widget-content {
277
+ margin: 0 5px;
278
+ }
279
+ /* Profile
280
+ ----------------------------------------------- */
281
+ .profile-img {
282
+ float: left;
283
+ margin-top: 0;
284
+ margin-right: 5px;
285
+ margin-bottom: 5px;
286
+ margin-left: 0;
287
+ padding: 4px;
288
+ border: 1px solid #ffffff;
289
+ }
290
+ .profile-data {
291
+ margin:0;
292
+ text-transform:uppercase;
293
+ letter-spacing:.1em;
294
+ font-weight: bold;
295
+ line-height: 1.6em;
296
+ font-size: 78%;
297
+ }
298
+ .profile-datablock {
299
+ margin:.5em 0 .5em;
300
+ }
301
+ .profile-textblock {
302
+ margin: 0.5em 0;
303
+ line-height: 1.6em;
304
+ }
305
+ /* Footer
306
+ ----------------------------------------------- */
307
+ #footer {
308
+ clear: both;
309
+ text-align: center;
310
+ color: #333333;
311
+ }
312
+ #footer .widget {
313
+ margin:.5em;
314
+ padding-top: 20px;
315
+ font-size: 85%;
316
+ line-height: 1.5em;
317
+ text-align: left;
318
+ }
319
+ /** Page structure tweaks for layout editor wireframe */
320
+ body#layout #header {
321
+ width: 750px;
322
+ }
323
+
324
+ --></style>
325
+ <script type="text/javascript">
326
+ if (window.jstiming) window.jstiming.load.tick('headEnd');
327
+ </script></head>
328
+ <body>
329
+ <div class='navbar section' id='navbar'><div class='widget Navbar' id='Navbar1'><script type="text/javascript">
330
+ function setAttributeOnload(object, attribute, val) {
331
+ if(window.addEventListener) {
332
+ window.addEventListener("load",
333
+ function(){ object[attribute] = val; }, false);
334
+ } else {
335
+ window.attachEvent('onload', function(){ object[attribute] = val; });
336
+ }
337
+ }
338
+ </script>
339
+ <iframe src="http://www.blogger.com/navbar.g?targetBlogID=17087850&amp;blogName=Factor%3A+a+practical+stack+language&amp;publishMode=PUBLISH_MODE_BLOGSPOT&amp;navbarType=BLUE&amp;layoutType=LAYOUTS&amp;searchRoot=http%3A%2F%2Ffactor-language.blogspot.com%2Fsearch&amp;blogLocale=en_US&amp;homepageUrl=http%3A%2F%2Ffactor-language.blogspot.com%2F&amp;targetPostID=657377910223810792" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" height="30px" width="100%" id="navbar-iframe" allowtransparency="true" title="Blogger Navigation and Search"></iframe>
340
+ <div></div></div></div>
341
+ <div id='outer-wrapper'><div id='wrap2'>
342
+ <!-- skip links for text browsers -->
343
+ <span id='skiplinks' style='display:none;'>
344
+ <a href='#main'>skip to main </a> |
345
+ <a href='#sidebar'>skip to sidebar</a>
346
+ </span>
347
+ <div id='header-wrapper'>
348
+ <div class='header section' id='header'><div class='widget Header' id='Header1'>
349
+ <div id='header-inner'>
350
+ <div class='titlewrapper'>
351
+ <h1 class='title'>
352
+ <a href='http://factor-language.blogspot.com/'>Factor: a practical stack language</a>
353
+ </h1>
354
+ </div>
355
+ <div class='descriptionwrapper'>
356
+ <p class='description'><span><a href="http://factorcode.org/slava">Slava Pestov</a>'s weblog, primarily about <a href="http://factorcode.org">Factor</a>.</span></p>
357
+ </div>
358
+ </div>
359
+ </div></div>
360
+ </div>
361
+ <div id='content-wrapper'>
362
+ <div id='crosscol-wrapper' style='text-align:center'>
363
+ <div class='crosscol section' id='crosscol'></div>
364
+ </div>
365
+ <div id='main-wrapper'>
366
+ <div class='main section' id='main'><div class='widget Blog' id='Blog1'>
367
+ <div class='blog-posts hfeed'>
368
+ <!-- google_ad_section_start(name=default) -->
369
+ <h2 class='date-header'>Sunday, January 10, 2010</h2>
370
+ <div class='post hentry'>
371
+ <a name='657377910223810792'></a>
372
+ <h3 class='post-title entry-title'>
373
+ <a href='http://factor-language.blogspot.com/2010/01/factors-bootstrap-process-explained.html'>Factor's bootstrap process explained</a>
374
+ </h3>
375
+ <div class='post-header-line-1'></div>
376
+ <div class='post-body entry-content'>
377
+ <h3>Separation of concerns between Factor VM and library code</h3><br />The Factor VM implements an abstract machine consisting of a data heap of objects, a code heap of machine code blocks, and a set of stacks. The VM loads an image file on startup, which becomes the data and code heap. It then begins executing code in the image, by calling a special <i>startup quotation</i>.<br /><br />When new source files are loaded into a running Factor instance by the developer, they are parsed and compiled into a collection of objects -- words, quotations, and other literals, along with executable machine code. The new data and code heaps can then be saved into another image file, for faster loading in the future.<br /><br />Factor's core data structures, object system, and source parser are implemented in Factor and live in the image, so the Factor VM does not have enough machinery to start with an empty data and code heap and parse Factor source files by itself. Instead, the VM needs to start from a data and code heap that already contains enough Factor code to parse source files. This poses a chicken-and-egg problem; how do you build a Factor system from source code? The VM can be compiled with a C++ compiler, but the result is not sufficient by itself.<br /><br />Some image-based language systems cannot generate new images from scratch at all, and the only way to create a new image is to snapshot an existing session. This is the simplest approach but it has serious downsides -- it lacks determinism and reproducability, and it is difficult to make big changes to the system.<br /><br />While Factor can snapshot the current execution state into an image, it also has a tool to generate "fresh" image from source. While this tool is written in Factor and runs inside of an existing Factor system, the resulting images depend as little as possible on the particular state of the system that generated it.<br /><br /><h3>Stage 1 bootstrap: creating a boot image</h3><br />The initial data heap comes from a <i>boot image</i>, which is built from an existing Factor system, known as the <i>host</i>. The result is a new boot image which can run in the <i>target</i> system. Boot images are created using the <a href="http://gitweb.factorcode.org/gitweb.cgi?p=factor/.git;a=blob;f=basis/bootstrap/image/image.factor;hb=HEAD">bootstrap.image</a> tool, whose main entry point is the <a href="http://docs.factorcode.org/content/word-make-image%2Cbootstrap.image.html">make-image</a> tool. This word can be invoked from the listener in a running Factor instance: <pre>"x86.32" make-image</pre><br /><br />The <a href="http://docs.factorcode.org/content/word-make-image%2Cbootstrap.image.html">make-image</a> word parses source files using the host's parser, and the code in those source files forms the target image. This tool can be thought of as a form of cross-compiler, except boot images only contain a data heap, and not a code heap. The code heap is generated on the target by the VM, and later by the target's optimizing compiler in Factor.<br /> <br />The <a href="http://docs.factorcode.org/content/word-make-image%2Cbootstrap.image.html">make-image</a> word runs the source file <a href="http://gitweb.factorcode.org/gitweb.cgi?p=factor/.git;a=blob;f=core/bootstrap/stage1.factor;hb=HEAD">core/bootstrap/stage1.factor</a>, which kicks off the bootstrap process.<br /><br /><h4>Building the embryo for the new image</h4><br />The global namespace is most important object stored in an image file. The global namespace contains various global variables that are used by the parser, along them the <a href="http://docs.factorcode.org/content/word-dictionary%2Cvocabs.html">dictionary</a>. The dictionary is a hashtable mapping vocabulary names to vocabulary objects. Vocabulary objects contain various bits of state, among them a hashtable mapping word names to word objects. Word objects store their definition as a quotation. The dictionary is how code is represented in memory in Factor; it is built and modified by loading source files from disk.<br /><br />One of the tasks performed by <code>stage1.factor</code> is to read the source file <a href="http://gitweb.factorcode.org/gitweb.cgi?p=factor/.git;a=blob;f=core/bootstrap/primitives.factor;hb=HEAD">core/bootstrap/primitives.factor</a>. This source file creates a minimal global namespace and dictionary that target code can be loaded into. This initial dictionary consists of primitive words corresponding to all primitives implemented in the VM, along with some initial state for the object system, consisting of built-in classes such as <a href="http://docs.factorcode.org/content/word-array%2Carrays.html">array</a>. The code in this file runs in the host, but it constructs objects that will ultimately end up in the boot image of the target.<br /><br />A second piece of code that runs in order to prepare the environment for the target is the CPU-specific backend for the VM's non-optimizing compiler. Again, these are source files which run on the host:<br /><ul><br /><li><a href="http://gitweb.factorcode.org/gitweb.cgi?p=factor/.git;a=blob;f=basis/cpu/x86/bootstrap.factor;hb=HEAD">basis/cpu/x86/bootstrap.factor</a></li><br /><li><a href="http://gitweb.factorcode.org/gitweb.cgi?p=factor/.git;a=blob;f=basis/cpu/x86/32/bootstrap.factor;hb=HEAD">basis/cpu/x86/32/bootstrap.factor</a></li><br /><li><a href="http://gitweb.factorcode.org/gitweb.cgi?p=factor/.git;a=blob;f=basis/cpu/x86/64/bootstrap.factor;hb=HEAD">basis/cpu/x86/64/bootstrap.factor</a></li><br /><li><a href="http://gitweb.factorcode.org/gitweb.cgi?p=factor/.git;a=blob;f=basis/cpu/ppc/bootstrap.factor;hb=HEAD">basis/cpu/ppc/bootstrap.factor</a></li><br /></ul><br />The non-optimizing compiler does little more than glue chunks of machine code together, so the backends are relatively simple and consist of several dozen short machine code definitions. These machine code chunks are stored as byte arrays, constructed by Factor's x86 and PowerPC assemblers.<br /><br /><h4>Loading core source files</h4><br />Once the initial global environment consisting of primitives and built-in classes has been prepared, source files comprising the core library are loaded in. From this point on, code read from disk does not run in the host, only in the target. The host's parser is still being used, though.<br /><br />Factor's vocabulary system loads dependencies automatically, so <code>stage1.factor</code> simply calls <a href="http://docs.factorcode.org/content/word-require%2Cvocabs.loader.html">require</a> on a few essential vocabularies which end up pulling in everything in the <a href="http://gitweb.factorcode.org/gitweb.cgi?p=factor/.git;a=tree;f=core;hb=HEAD">core</a> <a href="http://docs.factorcode.org/content/article-vocabs.roots.html">vocabulary root</a>.<br /><br />During normal operation, any source code at the top level of a source file, not in any definition, is run when the source file is loaded. During stage1 bootstrap, top-level forms from source files in <code>core</code> are not run on the host. Instead, they need to be run on the target, when the VM is is launched with the new boot image.<br /><br />After loading all source files from <code>core</code>, this startup quotation is constructed. The startup quotation begins by calling top-level forms in core source files in the order in which they were loaded, and then runs <a href="http://gitweb.factorcode.org/gitweb.cgi?p=factor/.git;a=blob;f=basis/bootstrap/stage2.factor;hb=HEAD">basis/bootstrap/stage2.factor</a>.<br /><br /><h4>Serializing the result</h4><br />At this point, stage1 bootstrap has constructed a new global namespace consisting of a dictionary, object system meta-data, and other objects, together with a startup quotation which can kick off the next stage of bootstrap.<br /><br />Data heap objects that the VM needs to know about, such as the global namespace, startup quotation, and non-optimizing compiler definitions, are stored in an array of "special objects". Entries are defined in <a href="http://gitweb.factorcode.org/gitweb.cgi?p=factor/.git;a=blob;f=vm/objects.hpp;hb=HEAD">vm/objects.hpp</a>, and in the image file they are stored in the image header.<br /><br />This object graph, rooted at the special objects array, is now serialized to disk into an image file. The bootstrap image generator serializes objects in the same format in which they are stored in the VM's heap, but it does this without dumping VM's memory directly. This allows object layouts to be changed relatively easily, by first updating the bootstrap image tool, generating an image with the new layouts, then updating the VM and running the new VM with the new image.<br /><br />The bootstrap image generator also takes care to write the resulting data with the correct cell size and endianness. Along with containing CPU-specific machine code templates for the non-optimizing compiler, this is what makes boot images platform-specific.<br /><br /><h3>Stage 2 bootstrap: fleshing out a development image</h3><br />At this point, the host system has writen a boot image file to disk, and the next stage of bootstrap can begin. This stage runs on the target, and is initiated by starting the Factor VM with the new boot image: <pre>./factor -i=boot.x86.32.image</pre> The VM reads the new image into an empty data heap. At this point, it also notices that the boot image does not have a code heap, so it cannot start executing the boot quotation just yet.<br /><br /><h4>Early initialization</h4><br />Boot images have a special flag set in them which kicks off the "early init" process in the VM. This only takes a few seconds, and entails compiling all words in the image with the non-optimizing compiler. Once this is done, the VM can call the startup quotation. Quotations are also compiled by the non-optimizing compiler the first time they are called.<br /><br />This startup quotation was constructed during stage1 bootstrap. It runs top-level forms in core source files, then runs <a href="http://gitweb.factorcode.org/gitweb.cgi?p=factor/.git;a=blob;f=basis/bootstrap/stage2.factor;hb=HEAD">basis/bootstrap/stage2.factor</a>.<br /><br /><h4>Loading major subsystems</h4><br />Whereas the goal of stage1 bootstrap is to generate a minimal image that contains barely enough code to be able to load additional source files, stage2 creates a usable development image containing the optimizing compiler, documentation, UI tools, and everything else that makes it into a recognizable Factor system.<br /><br />The major vocabularies loaded by stage2 bootstrap include: <ul> <li><a href="http://gitweb.factorcode.org/gitweb.cgi?p=factor/.git;a=blob;f=basis/bootstrap/compiler/compiler.factor;hb=HEAD">Optimizing compiler</a> -- after the optimizing compiler has been loaded, all words in the image are compiled again. This is the longest part of stage2 bootstrap, taking several minutes.</li> <li><a href="http://gitweb.factorcode.org/gitweb.cgi?p=factor/.git;a=blob;f=basis/bootstrap/help/help.factor;hb=HEAD">Help system</a></li> <li><a href="http://gitweb.factorcode.org/gitweb.cgi?p=factor/.git;a=blob;f=basis/bootstrap/tools/tools.factor;hb=HEAD">Developer tools</a></li> <li><a href="http://gitweb.factorcode.org/gitweb.cgi?p=factor/.git;a=blob;f=basis/bootstrap/ui/ui.factor;hb=HEAD">UI framework</a></li> <li><a href="http://gitweb.factorcode.org/gitweb.cgi?p=factor/.git;a=blob;f=basis/bootstrap/ui/tools/tools.factor;hb=HEAD">UI tools</a></li> </ul><br /><h4>Finishing up</h4><br />The last step taken by stage2 bootstrap is to install a new startup quotation. This startup quotation does the usual command-line processing; if no switches are specified, it starts the UI listener, otherwise it runs a source file or vocabulary given on the command line.<br /><br />Once the new startup quotation has been installed, the current session is saved to a new image file using the <a href="http://docs.factorcode.org/content/word-save-image-and-exit%2Cmemory.html">save-image-and-exit</a> word.
378
+ <div style='clear: both;'></div>
379
+ </div>
380
+ <div class='post-footer'>
381
+ <div class='post-footer-line post-footer-line-1'><span class='post-timestamp'>
382
+ at
383
+ <a class='timestamp-link' href='http://factor-language.blogspot.com/2010/01/factors-bootstrap-process-explained.html' rel='bookmark' title='permanent link'><abbr class='published' title='2010-01-10T09:34:00-05:00'>9:34 AM</abbr></a>
384
+ </span>
385
+ <span class='post-comment-link'>
386
+ </span>
387
+ <span class='post-icons'>
388
+ <span class='item-action'>
389
+ <a href='http://www.blogger.com/email-post.g?blogID=17087850&postID=657377910223810792' title='Email Post'>
390
+ <img alt='' class='icon-action' height='13' src='http://www.blogger.com/img/icon18_email.gif' width='18'/>
391
+ </a>
392
+ </span>
393
+ <span class='item-control blog-admin pid-1165735073'>
394
+ <a href='http://www.blogger.com/post-edit.g?blogID=17087850&postID=657377910223810792' title='Edit Post'>
395
+ <img alt='' class='icon-action' height='18' src='http://www.blogger.com/img/icon18_edit_allbkg.gif' width='18'/>
396
+ </a>
397
+ </span>
398
+ </span>
399
+ </div>
400
+ <div class='post-footer-line post-footer-line-2'></div>
401
+ <div class='post-footer-line post-footer-line-3'></div>
402
+ </div>
403
+ </div>
404
+ <div class='comments' id='comments'>
405
+ <a name='comments'></a>
406
+ <h4>
407
+ 0
408
+ comments:
409
+
410
+ </h4>
411
+ <dl class='avatar-comment-indent' id='comments-block'>
412
+ </dl>
413
+ <p class='comment-footer'>
414
+ <a href='https://www.blogger.com/comment.g?blogID=17087850&postID=657377910223810792' onclick=''>Post a Comment</a>
415
+ </p>
416
+ <div id='backlinks-container'>
417
+ <div id='Blog1_backlinks-container'>
418
+ </div>
419
+ </div>
420
+ </div>
421
+ <!-- google_ad_section_end -->
422
+ </div>
423
+ <div class='blog-pager' id='blog-pager'>
424
+ <span id='blog-pager-older-link'>
425
+ <a class='blog-pager-older-link' href='http://factor-language.blogspot.com/2009/12/freeing-factor-from-gccs-embrace-and.html' id='Blog1_blog-pager-older-link' title='Older Post'>Older Post</a>
426
+ </span>
427
+ <a class='home-link' href='http://factor-language.blogspot.com/'>Home</a>
428
+ </div>
429
+ <div class='clear'></div>
430
+ <div class='post-feeds'>
431
+ <div class='feed-links'>
432
+ Subscribe to:
433
+ <a class='feed-link' href='http://factor-language.blogspot.com/feeds/657377910223810792/comments/default' target='_blank' type='application/atom+xml'>Post Comments (Atom)</a>
434
+ </div>
435
+ </div>
436
+ </div></div>
437
+ </div>
438
+ <div id='sidebar-wrapper'>
439
+ <div class='sidebar section' id='sidebar'><div class='widget BlogArchive' id='BlogArchive1'>
440
+ <h2>Older Posts</h2>
441
+ <div class='widget-content'>
442
+ <div id='ArchiveList'>
443
+ <div id='BlogArchive1_ArchiveList'>
444
+ <ul>
445
+ <li class='archivedate expanded'>
446
+ <a class='toggle' href='javascript:void(0)'>
447
+ <span class='zippy toggle-open'>&#9660;&#160;</span>
448
+ </a>
449
+ <a class='post-count-link' href='http://factor-language.blogspot.com/search?updated-min=2010-01-01T00%3A00%3A00-05%3A00&updated-max=2011-01-01T00%3A00%3A00-05%3A00&max-results=1'>2010</a>
450
+ <span class='post-count' dir='ltr'>(1)</span>
451
+ <ul>
452
+ <li class='archivedate expanded'>
453
+ <a class='toggle' href='javascript:void(0)'>
454
+ <span class='zippy toggle-open'>&#9660;&#160;</span>
455
+ </a>
456
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2010_01_01_archive.html'>January</a>
457
+ <span class='post-count' dir='ltr'>(1)</span>
458
+ <ul class='posts'>
459
+ <li><a href='http://factor-language.blogspot.com/2010/01/factors-bootstrap-process-explained.html'>Factor&#39;s bootstrap process explained</a></li>
460
+ </ul>
461
+ </li>
462
+ </ul>
463
+ </li>
464
+ </ul>
465
+ <ul>
466
+ <li class='archivedate collapsed'>
467
+ <a class='toggle' href='javascript:void(0)'>
468
+ <span class='zippy'>
469
+
470
+ &#9658;&#160;
471
+
472
+ </span>
473
+ </a>
474
+ <a class='post-count-link' href='http://factor-language.blogspot.com/search?updated-min=2009-01-01T00%3A00%3A00-05%3A00&updated-max=2010-01-01T00%3A00%3A00-05%3A00&max-results=35'>2009</a>
475
+ <span class='post-count' dir='ltr'>(35)</span>
476
+ <ul>
477
+ <li class='archivedate collapsed'>
478
+ <a class='toggle' href='javascript:void(0)'>
479
+ <span class='zippy'>
480
+
481
+ &#9658;&#160;
482
+
483
+ </span>
484
+ </a>
485
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2009_12_01_archive.html'>December</a>
486
+ <span class='post-count' dir='ltr'>(2)</span>
487
+ <ul class='posts'>
488
+ <li><a href='http://factor-language.blogspot.com/2009/12/freeing-factor-from-gccs-embrace-and.html'>Freeing Factor from gcc&#39;s embrace-and-extend C lan...</a></li>
489
+ <li><a href='http://factor-language.blogspot.com/2009/12/reducing-image-size-by-eliminating.html'>Reducing image size by eliminating literal tables ...</a></li>
490
+ </ul>
491
+ </li>
492
+ </ul>
493
+ <ul>
494
+ <li class='archivedate collapsed'>
495
+ <a class='toggle' href='javascript:void(0)'>
496
+ <span class='zippy'>
497
+
498
+ &#9658;&#160;
499
+
500
+ </span>
501
+ </a>
502
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2009_11_01_archive.html'>November</a>
503
+ <span class='post-count' dir='ltr'>(1)</span>
504
+ <ul class='posts'>
505
+ <li><a href='http://factor-language.blogspot.com/2009/11/mark-compact-garbage-collection-for.html'>Mark-compact garbage collection for oldest generat...</a></li>
506
+ </ul>
507
+ </li>
508
+ </ul>
509
+ <ul>
510
+ <li class='archivedate collapsed'>
511
+ <a class='toggle' href='javascript:void(0)'>
512
+ <span class='zippy'>
513
+
514
+ &#9658;&#160;
515
+
516
+ </span>
517
+ </a>
518
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2009_10_01_archive.html'>October</a>
519
+ <span class='post-count' dir='ltr'>(1)</span>
520
+ <ul class='posts'>
521
+ <li><a href='http://factor-language.blogspot.com/2009/10/improved-write-barriers-in-factors.html'>Improved write barriers in Factor&#39;s garbage collec...</a></li>
522
+ </ul>
523
+ </li>
524
+ </ul>
525
+ <ul>
526
+ <li class='archivedate collapsed'>
527
+ <a class='toggle' href='javascript:void(0)'>
528
+ <span class='zippy'>
529
+
530
+ &#9658;&#160;
531
+
532
+ </span>
533
+ </a>
534
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2009_09_01_archive.html'>September</a>
535
+ <span class='post-count' dir='ltr'>(3)</span>
536
+ <ul class='posts'>
537
+ <li><a href='http://factor-language.blogspot.com/2009/09/survey-of-domain-specific-languages-in.html'>A survey of domain-specific languages in Factor</a></li>
538
+ <li><a href='http://factor-language.blogspot.com/2009/09/advanced-floating-point-features.html'>Advanced floating point features: exceptions, roun...</a></li>
539
+ <li><a href='http://factor-language.blogspot.com/2009/09/eliminating-some-boilerplate-in.html'>Eliminating some boilerplate in the compiler</a></li>
540
+ </ul>
541
+ </li>
542
+ </ul>
543
+ <ul>
544
+ <li class='archivedate collapsed'>
545
+ <a class='toggle' href='javascript:void(0)'>
546
+ <span class='zippy'>
547
+
548
+ &#9658;&#160;
549
+
550
+ </span>
551
+ </a>
552
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2009_08_01_archive.html'>August</a>
553
+ <span class='post-count' dir='ltr'>(5)</span>
554
+ <ul class='posts'>
555
+ <li><a href='http://factor-language.blogspot.com/2009/08/struct-arrays-benchmark-revisited.html'>Struct arrays benchmark revisited: trig function c...</a></li>
556
+ <li><a href='http://factor-language.blogspot.com/2009/08/performance-comparison-between-factor.html'>Performance comparison between Factor and Java on ...</a></li>
557
+ <li><a href='http://factor-language.blogspot.com/2009/08/new-tool-for-locating-external-resource.html'>New tool for locating external resource leaks</a></li>
558
+ <li><a href='http://factor-language.blogspot.com/2009/08/status-of-powerpc-port-and-snow.html'>Status of the PowerPC port, and Snow Leopard&#39;s imm...</a></li>
559
+ <li><a href='http://factor-language.blogspot.com/2009/08/global-float-unboxing-and-some-other.html'>Global float unboxing and some other optimizations...</a></li>
560
+ </ul>
561
+ </li>
562
+ </ul>
563
+ <ul>
564
+ <li class='archivedate collapsed'>
565
+ <a class='toggle' href='javascript:void(0)'>
566
+ <span class='zippy'>
567
+
568
+ &#9658;&#160;
569
+
570
+ </span>
571
+ </a>
572
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2009_07_01_archive.html'>July</a>
573
+ <span class='post-count' dir='ltr'>(3)</span>
574
+ <ul class='posts'>
575
+ <li><a href='http://factor-language.blogspot.com/2009/07/dataflow-analysis-computing-dominance.html'>Dataflow analysis, computing dominance, and conver...</a></li>
576
+ <li><a href='http://factor-language.blogspot.com/2009/07/improved-value-numbering-branch.html'>Improved value numbering, branch splitting, and fa...</a></li>
577
+ <li><a href='http://factor-language.blogspot.com/2009/07/improvements-to-factors-register.html'>Improvements to Factor&#39;s register allocator</a></li>
578
+ </ul>
579
+ </li>
580
+ </ul>
581
+ <ul>
582
+ <li class='archivedate collapsed'>
583
+ <a class='toggle' href='javascript:void(0)'>
584
+ <span class='zippy'>
585
+
586
+ &#9658;&#160;
587
+
588
+ </span>
589
+ </a>
590
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2009_05_01_archive.html'>May</a>
591
+ <span class='post-count' dir='ltr'>(4)</span>
592
+ <ul class='posts'>
593
+ <li><a href='http://factor-language.blogspot.com/2009/05/factors-implementation-of-polymorphic.html'>Factor&#39;s implementation of polymorphic inline cach...</a></li>
594
+ <li><a href='http://factor-language.blogspot.com/2009/05/live-status-display-for-factors-build.html'>Live status display for Factor&#39;s build farm, and o...</a></li>
595
+ <li><a href='http://factor-language.blogspot.com/2009/05/unboxed-tuple-arrays-in-factor.html'>Unboxed tuple arrays in Factor</a></li>
596
+ <li><a href='http://factor-language.blogspot.com/2009/05/factor-vm-ported-to-c.html'>Factor VM ported to C++</a></li>
597
+ </ul>
598
+ </li>
599
+ </ul>
600
+ <ul>
601
+ <li class='archivedate collapsed'>
602
+ <a class='toggle' href='javascript:void(0)'>
603
+ <span class='zippy'>
604
+
605
+ &#9658;&#160;
606
+
607
+ </span>
608
+ </a>
609
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2009_04_01_archive.html'>April</a>
610
+ <span class='post-count' dir='ltr'>(4)</span>
611
+ <ul class='posts'>
612
+ <li><a href='http://factor-language.blogspot.com/2009/04/recent-ui-improvements.html'>Recent UI improvements</a></li>
613
+ <li><a href='http://factor-language.blogspot.com/2009/04/opengl-textures-and-power-of-two-size.html'>OpenGL textures and the power-of-two size restrict...</a></li>
614
+ <li><a href='http://factor-language.blogspot.com/2009/04/rendering-text-on-windows-via-uniscribe.html'>Rendering text on Windows via Uniscribe</a></li>
615
+ <li><a href='http://factor-language.blogspot.com/2009/04/sup-dawg-we-heard-you-like-smalltalk-so.html'>Sup dawg, we heard you like Smalltalk so we put Sm...</a></li>
616
+ </ul>
617
+ </li>
618
+ </ul>
619
+ <ul>
620
+ <li class='archivedate collapsed'>
621
+ <a class='toggle' href='javascript:void(0)'>
622
+ <span class='zippy'>
623
+
624
+ &#9658;&#160;
625
+
626
+ </span>
627
+ </a>
628
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2009_03_01_archive.html'>March</a>
629
+ <span class='post-count' dir='ltr'>(2)</span>
630
+ <ul class='posts'>
631
+ <li><a href='http://factor-language.blogspot.com/2009/03/better-static-safety-for-higher-order.html'>Better static safety for higher-order code</a></li>
632
+ <li><a href='http://factor-language.blogspot.com/2009/03/rendering-unicode-text-with-pango-and.html'>Rendering Unicode text with Pango and Cairo</a></li>
633
+ </ul>
634
+ </li>
635
+ </ul>
636
+ <ul>
637
+ <li class='archivedate collapsed'>
638
+ <a class='toggle' href='javascript:void(0)'>
639
+ <span class='zippy'>
640
+
641
+ &#9658;&#160;
642
+
643
+ </span>
644
+ </a>
645
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2009_02_01_archive.html'>February</a>
646
+ <span class='post-count' dir='ltr'>(4)</span>
647
+ <ul class='posts'>
648
+ <li><a href='http://factor-language.blogspot.com/2009/02/metric-bounds-versus-image-bounds.html'>Metric bounds versus image bounds</a></li>
649
+ <li><a href='http://factor-language.blogspot.com/2009/02/note-about-libdl-functions-on-netbsd.html'>A note about libdl functions on NetBSD and the &quot;Se...</a></li>
650
+ <li><a href='http://factor-language.blogspot.com/2009/02/font-metrics-and-baseline-alignment.html'>Font metrics and baseline alignment</a></li>
651
+ <li><a href='http://factor-language.blogspot.com/2009/02/implementing-opengl-texture-caching-and.html'>Implementing OpenGL texture caching and bitmap ima...</a></li>
652
+ </ul>
653
+ </li>
654
+ </ul>
655
+ <ul>
656
+ <li class='archivedate collapsed'>
657
+ <a class='toggle' href='javascript:void(0)'>
658
+ <span class='zippy'>
659
+
660
+ &#9658;&#160;
661
+
662
+ </span>
663
+ </a>
664
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2009_01_01_archive.html'>January</a>
665
+ <span class='post-count' dir='ltr'>(6)</span>
666
+ <ul class='posts'>
667
+ <li><a href='http://factor-language.blogspot.com/2009/01/rendering-unicode-text-to-opengl.html'>Rendering Unicode text to an OpenGL texture using ...</a></li>
668
+ <li><a href='http://factor-language.blogspot.com/2009/01/unicode-font-rendering-in-factor-ui-on.html'>Unicode font rendering in the Factor UI on Mac OS ...</a></li>
669
+ <li><a href='http://factor-language.blogspot.com/2009/01/bug-in-intel-video-driver-version-24.html'>Bug in Intel video driver version 2.4 for Linux fi...</a></li>
670
+ <li><a href='http://factor-language.blogspot.com/2009/01/screencast-editing-factor-code-with.html'>Screencast: editing Factor code with Emacs and FUE...</a></li>
671
+ <li><a href='http://factor-language.blogspot.com/2009/01/java-7-too-little-too-late.html'>Java 7: too little, too late</a></li>
672
+ <li><a href='http://factor-language.blogspot.com/2009/01/advantages-of-concatenative-and-stack.html'>Advantages of concatenative and stack-based langua...</a></li>
673
+ </ul>
674
+ </li>
675
+ </ul>
676
+ </li>
677
+ </ul>
678
+ <ul>
679
+ <li class='archivedate collapsed'>
680
+ <a class='toggle' href='javascript:void(0)'>
681
+ <span class='zippy'>
682
+
683
+ &#9658;&#160;
684
+
685
+ </span>
686
+ </a>
687
+ <a class='post-count-link' href='http://factor-language.blogspot.com/search?updated-min=2008-01-01T00%3A00%3A00-05%3A00&updated-max=2009-01-01T00%3A00%3A00-05%3A00&max-results=50'>2008</a>
688
+ <span class='post-count' dir='ltr'>(96)</span>
689
+ <ul>
690
+ <li class='archivedate collapsed'>
691
+ <a class='toggle' href='javascript:void(0)'>
692
+ <span class='zippy'>
693
+
694
+ &#9658;&#160;
695
+
696
+ </span>
697
+ </a>
698
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2008_12_01_archive.html'>December</a>
699
+ <span class='post-count' dir='ltr'>(4)</span>
700
+ <ul class='posts'>
701
+ <li><a href='http://factor-language.blogspot.com/2008/12/discussion-of-concatenative-languages.html'>Discussion of concatenative languages on various b...</a></li>
702
+ <li><a href='http://factor-language.blogspot.com/2008/12/prevalence-of-shuffle-words-and.html'>Prevalence of shuffle words and dataflow combinato...</a></li>
703
+ <li><a href='http://factor-language.blogspot.com/2008/12/arrays-of-unboxed-primitive-values-and.html'>Arrays of unboxed primitive values, and a faster M...</a></li>
704
+ <li><a href='http://factor-language.blogspot.com/2008/12/factor-now-fully-supported-on-64-bit.html'>Factor now fully supported on 64-bit Windows</a></li>
705
+ </ul>
706
+ </li>
707
+ </ul>
708
+ <ul>
709
+ <li class='archivedate collapsed'>
710
+ <a class='toggle' href='javascript:void(0)'>
711
+ <span class='zippy'>
712
+
713
+ &#9658;&#160;
714
+
715
+ </span>
716
+ </a>
717
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2008_11_01_archive.html'>November</a>
718
+ <span class='post-count' dir='ltr'>(9)</span>
719
+ <ul class='posts'>
720
+ <li><a href='http://factor-language.blogspot.com/2008/11/new-features-in-smtp-and-ssl-library.html'>New features in SMTP and SSL library allow sending...</a></li>
721
+ <li><a href='http://factor-language.blogspot.com/2008/11/faster-generic-arithmetic-and-integer.html'>Faster generic arithmetic and integer overflow che...</a></li>
722
+ <li><a href='http://factor-language.blogspot.com/2008/11/some-recent-ui-rendering-fixes.html'>Some recent UI rendering fixes</a></li>
723
+ <li><a href='http://factor-language.blogspot.com/2008/11/comparing-performance-of-factor-and-v8.html'>Comparing the performance of Factor and V8</a></li>
724
+ <li><a href='http://factor-language.blogspot.com/2008/11/factor-presentation-at-otug.html'>Factor presentation at OTUG</a></li>
725
+ <li><a href='http://factor-language.blogspot.com/2008/11/factor-port-to-win64-in-progress.html'>Factor port to Win64 in progress</a></li>
726
+ <li><a href='http://factor-language.blogspot.com/2008/11/further-performance-gains.html'>Further performance gains</a></li>
727
+ <li><a href='http://factor-language.blogspot.com/2008/11/new-low-level-optimizer-and-code.html'>New low-level optimizer and code generator</a></li>
728
+ <li><a href='http://factor-language.blogspot.com/2008/11/west-coast-trip-100-success.html'>West coast trip: 100% success</a></li>
729
+ </ul>
730
+ </li>
731
+ </ul>
732
+ <ul>
733
+ <li class='archivedate collapsed'>
734
+ <a class='toggle' href='javascript:void(0)'>
735
+ <span class='zippy'>
736
+
737
+ &#9658;&#160;
738
+
739
+ </span>
740
+ </a>
741
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2008_10_01_archive.html'>October</a>
742
+ <span class='post-count' dir='ltr'>(1)</span>
743
+ <ul class='posts'>
744
+ <li><a href='http://factor-language.blogspot.com/2008/10/california-trip-presenting-factor-at.html'>California trip - presenting Factor at Google, VPR...</a></li>
745
+ </ul>
746
+ </li>
747
+ </ul>
748
+ <ul>
749
+ <li class='archivedate collapsed'>
750
+ <a class='toggle' href='javascript:void(0)'>
751
+ <span class='zippy'>
752
+
753
+ &#9658;&#160;
754
+
755
+ </span>
756
+ </a>
757
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2008_09_01_archive.html'>September</a>
758
+ <span class='post-count' dir='ltr'>(9)</span>
759
+ </li>
760
+ </ul>
761
+ <ul>
762
+ <li class='archivedate collapsed'>
763
+ <a class='toggle' href='javascript:void(0)'>
764
+ <span class='zippy'>
765
+
766
+ &#9658;&#160;
767
+
768
+ </span>
769
+ </a>
770
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2008_08_01_archive.html'>August</a>
771
+ <span class='post-count' dir='ltr'>(5)</span>
772
+ </li>
773
+ </ul>
774
+ <ul>
775
+ <li class='archivedate collapsed'>
776
+ <a class='toggle' href='javascript:void(0)'>
777
+ <span class='zippy'>
778
+
779
+ &#9658;&#160;
780
+
781
+ </span>
782
+ </a>
783
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2008_07_01_archive.html'>July</a>
784
+ <span class='post-count' dir='ltr'>(5)</span>
785
+ </li>
786
+ </ul>
787
+ <ul>
788
+ <li class='archivedate collapsed'>
789
+ <a class='toggle' href='javascript:void(0)'>
790
+ <span class='zippy'>
791
+
792
+ &#9658;&#160;
793
+
794
+ </span>
795
+ </a>
796
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2008_06_01_archive.html'>June</a>
797
+ <span class='post-count' dir='ltr'>(9)</span>
798
+ </li>
799
+ </ul>
800
+ <ul>
801
+ <li class='archivedate collapsed'>
802
+ <a class='toggle' href='javascript:void(0)'>
803
+ <span class='zippy'>
804
+
805
+ &#9658;&#160;
806
+
807
+ </span>
808
+ </a>
809
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2008_05_01_archive.html'>May</a>
810
+ <span class='post-count' dir='ltr'>(6)</span>
811
+ </li>
812
+ </ul>
813
+ <ul>
814
+ <li class='archivedate collapsed'>
815
+ <a class='toggle' href='javascript:void(0)'>
816
+ <span class='zippy'>
817
+
818
+ &#9658;&#160;
819
+
820
+ </span>
821
+ </a>
822
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2008_04_01_archive.html'>April</a>
823
+ <span class='post-count' dir='ltr'>(13)</span>
824
+ </li>
825
+ </ul>
826
+ <ul>
827
+ <li class='archivedate collapsed'>
828
+ <a class='toggle' href='javascript:void(0)'>
829
+ <span class='zippy'>
830
+
831
+ &#9658;&#160;
832
+
833
+ </span>
834
+ </a>
835
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2008_03_01_archive.html'>March</a>
836
+ <span class='post-count' dir='ltr'>(9)</span>
837
+ </li>
838
+ </ul>
839
+ <ul>
840
+ <li class='archivedate collapsed'>
841
+ <a class='toggle' href='javascript:void(0)'>
842
+ <span class='zippy'>
843
+
844
+ &#9658;&#160;
845
+
846
+ </span>
847
+ </a>
848
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2008_02_01_archive.html'>February</a>
849
+ <span class='post-count' dir='ltr'>(17)</span>
850
+ </li>
851
+ </ul>
852
+ <ul>
853
+ <li class='archivedate collapsed'>
854
+ <a class='toggle' href='javascript:void(0)'>
855
+ <span class='zippy'>
856
+
857
+ &#9658;&#160;
858
+
859
+ </span>
860
+ </a>
861
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2008_01_01_archive.html'>January</a>
862
+ <span class='post-count' dir='ltr'>(9)</span>
863
+ </li>
864
+ </ul>
865
+ </li>
866
+ </ul>
867
+ <ul>
868
+ <li class='archivedate collapsed'>
869
+ <a class='toggle' href='javascript:void(0)'>
870
+ <span class='zippy'>
871
+
872
+ &#9658;&#160;
873
+
874
+ </span>
875
+ </a>
876
+ <a class='post-count-link' href='http://factor-language.blogspot.com/search?updated-min=2007-01-01T00%3A00%3A00-05%3A00&updated-max=2008-01-01T00%3A00%3A00-05%3A00&max-results=50'>2007</a>
877
+ <span class='post-count' dir='ltr'>(142)</span>
878
+ <ul>
879
+ <li class='archivedate collapsed'>
880
+ <a class='toggle' href='javascript:void(0)'>
881
+ <span class='zippy'>
882
+
883
+ &#9658;&#160;
884
+
885
+ </span>
886
+ </a>
887
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2007_12_01_archive.html'>December</a>
888
+ <span class='post-count' dir='ltr'>(5)</span>
889
+ </li>
890
+ </ul>
891
+ <ul>
892
+ <li class='archivedate collapsed'>
893
+ <a class='toggle' href='javascript:void(0)'>
894
+ <span class='zippy'>
895
+
896
+ &#9658;&#160;
897
+
898
+ </span>
899
+ </a>
900
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2007_11_01_archive.html'>November</a>
901
+ <span class='post-count' dir='ltr'>(13)</span>
902
+ </li>
903
+ </ul>
904
+ <ul>
905
+ <li class='archivedate collapsed'>
906
+ <a class='toggle' href='javascript:void(0)'>
907
+ <span class='zippy'>
908
+
909
+ &#9658;&#160;
910
+
911
+ </span>
912
+ </a>
913
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2007_10_01_archive.html'>October</a>
914
+ <span class='post-count' dir='ltr'>(10)</span>
915
+ </li>
916
+ </ul>
917
+ <ul>
918
+ <li class='archivedate collapsed'>
919
+ <a class='toggle' href='javascript:void(0)'>
920
+ <span class='zippy'>
921
+
922
+ &#9658;&#160;
923
+
924
+ </span>
925
+ </a>
926
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2007_09_01_archive.html'>September</a>
927
+ <span class='post-count' dir='ltr'>(15)</span>
928
+ </li>
929
+ </ul>
930
+ <ul>
931
+ <li class='archivedate collapsed'>
932
+ <a class='toggle' href='javascript:void(0)'>
933
+ <span class='zippy'>
934
+
935
+ &#9658;&#160;
936
+
937
+ </span>
938
+ </a>
939
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2007_08_01_archive.html'>August</a>
940
+ <span class='post-count' dir='ltr'>(21)</span>
941
+ </li>
942
+ </ul>
943
+ <ul>
944
+ <li class='archivedate collapsed'>
945
+ <a class='toggle' href='javascript:void(0)'>
946
+ <span class='zippy'>
947
+
948
+ &#9658;&#160;
949
+
950
+ </span>
951
+ </a>
952
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2007_07_01_archive.html'>July</a>
953
+ <span class='post-count' dir='ltr'>(6)</span>
954
+ </li>
955
+ </ul>
956
+ <ul>
957
+ <li class='archivedate collapsed'>
958
+ <a class='toggle' href='javascript:void(0)'>
959
+ <span class='zippy'>
960
+
961
+ &#9658;&#160;
962
+
963
+ </span>
964
+ </a>
965
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2007_06_01_archive.html'>June</a>
966
+ <span class='post-count' dir='ltr'>(12)</span>
967
+ </li>
968
+ </ul>
969
+ <ul>
970
+ <li class='archivedate collapsed'>
971
+ <a class='toggle' href='javascript:void(0)'>
972
+ <span class='zippy'>
973
+
974
+ &#9658;&#160;
975
+
976
+ </span>
977
+ </a>
978
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2007_05_01_archive.html'>May</a>
979
+ <span class='post-count' dir='ltr'>(12)</span>
980
+ </li>
981
+ </ul>
982
+ <ul>
983
+ <li class='archivedate collapsed'>
984
+ <a class='toggle' href='javascript:void(0)'>
985
+ <span class='zippy'>
986
+
987
+ &#9658;&#160;
988
+
989
+ </span>
990
+ </a>
991
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2007_04_01_archive.html'>April</a>
992
+ <span class='post-count' dir='ltr'>(12)</span>
993
+ </li>
994
+ </ul>
995
+ <ul>
996
+ <li class='archivedate collapsed'>
997
+ <a class='toggle' href='javascript:void(0)'>
998
+ <span class='zippy'>
999
+
1000
+ &#9658;&#160;
1001
+
1002
+ </span>
1003
+ </a>
1004
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2007_03_01_archive.html'>March</a>
1005
+ <span class='post-count' dir='ltr'>(9)</span>
1006
+ </li>
1007
+ </ul>
1008
+ <ul>
1009
+ <li class='archivedate collapsed'>
1010
+ <a class='toggle' href='javascript:void(0)'>
1011
+ <span class='zippy'>
1012
+
1013
+ &#9658;&#160;
1014
+
1015
+ </span>
1016
+ </a>
1017
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2007_02_01_archive.html'>February</a>
1018
+ <span class='post-count' dir='ltr'>(12)</span>
1019
+ </li>
1020
+ </ul>
1021
+ <ul>
1022
+ <li class='archivedate collapsed'>
1023
+ <a class='toggle' href='javascript:void(0)'>
1024
+ <span class='zippy'>
1025
+
1026
+ &#9658;&#160;
1027
+
1028
+ </span>
1029
+ </a>
1030
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2007_01_01_archive.html'>January</a>
1031
+ <span class='post-count' dir='ltr'>(15)</span>
1032
+ </li>
1033
+ </ul>
1034
+ </li>
1035
+ </ul>
1036
+ <ul>
1037
+ <li class='archivedate collapsed'>
1038
+ <a class='toggle' href='javascript:void(0)'>
1039
+ <span class='zippy'>
1040
+
1041
+ &#9658;&#160;
1042
+
1043
+ </span>
1044
+ </a>
1045
+ <a class='post-count-link' href='http://factor-language.blogspot.com/search?updated-min=2006-01-01T00%3A00%3A00-05%3A00&updated-max=2007-01-01T00%3A00%3A00-05%3A00&max-results=50'>2006</a>
1046
+ <span class='post-count' dir='ltr'>(207)</span>
1047
+ <ul>
1048
+ <li class='archivedate collapsed'>
1049
+ <a class='toggle' href='javascript:void(0)'>
1050
+ <span class='zippy'>
1051
+
1052
+ &#9658;&#160;
1053
+
1054
+ </span>
1055
+ </a>
1056
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2006_12_01_archive.html'>December</a>
1057
+ <span class='post-count' dir='ltr'>(23)</span>
1058
+ </li>
1059
+ </ul>
1060
+ <ul>
1061
+ <li class='archivedate collapsed'>
1062
+ <a class='toggle' href='javascript:void(0)'>
1063
+ <span class='zippy'>
1064
+
1065
+ &#9658;&#160;
1066
+
1067
+ </span>
1068
+ </a>
1069
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2006_11_01_archive.html'>November</a>
1070
+ <span class='post-count' dir='ltr'>(30)</span>
1071
+ </li>
1072
+ </ul>
1073
+ <ul>
1074
+ <li class='archivedate collapsed'>
1075
+ <a class='toggle' href='javascript:void(0)'>
1076
+ <span class='zippy'>
1077
+
1078
+ &#9658;&#160;
1079
+
1080
+ </span>
1081
+ </a>
1082
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2006_10_01_archive.html'>October</a>
1083
+ <span class='post-count' dir='ltr'>(25)</span>
1084
+ </li>
1085
+ </ul>
1086
+ <ul>
1087
+ <li class='archivedate collapsed'>
1088
+ <a class='toggle' href='javascript:void(0)'>
1089
+ <span class='zippy'>
1090
+
1091
+ &#9658;&#160;
1092
+
1093
+ </span>
1094
+ </a>
1095
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2006_09_01_archive.html'>September</a>
1096
+ <span class='post-count' dir='ltr'>(22)</span>
1097
+ </li>
1098
+ </ul>
1099
+ <ul>
1100
+ <li class='archivedate collapsed'>
1101
+ <a class='toggle' href='javascript:void(0)'>
1102
+ <span class='zippy'>
1103
+
1104
+ &#9658;&#160;
1105
+
1106
+ </span>
1107
+ </a>
1108
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2006_08_01_archive.html'>August</a>
1109
+ <span class='post-count' dir='ltr'>(26)</span>
1110
+ </li>
1111
+ </ul>
1112
+ <ul>
1113
+ <li class='archivedate collapsed'>
1114
+ <a class='toggle' href='javascript:void(0)'>
1115
+ <span class='zippy'>
1116
+
1117
+ &#9658;&#160;
1118
+
1119
+ </span>
1120
+ </a>
1121
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2006_07_01_archive.html'>July</a>
1122
+ <span class='post-count' dir='ltr'>(23)</span>
1123
+ </li>
1124
+ </ul>
1125
+ <ul>
1126
+ <li class='archivedate collapsed'>
1127
+ <a class='toggle' href='javascript:void(0)'>
1128
+ <span class='zippy'>
1129
+
1130
+ &#9658;&#160;
1131
+
1132
+ </span>
1133
+ </a>
1134
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2006_06_01_archive.html'>June</a>
1135
+ <span class='post-count' dir='ltr'>(11)</span>
1136
+ </li>
1137
+ </ul>
1138
+ <ul>
1139
+ <li class='archivedate collapsed'>
1140
+ <a class='toggle' href='javascript:void(0)'>
1141
+ <span class='zippy'>
1142
+
1143
+ &#9658;&#160;
1144
+
1145
+ </span>
1146
+ </a>
1147
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2006_05_01_archive.html'>May</a>
1148
+ <span class='post-count' dir='ltr'>(15)</span>
1149
+ </li>
1150
+ </ul>
1151
+ <ul>
1152
+ <li class='archivedate collapsed'>
1153
+ <a class='toggle' href='javascript:void(0)'>
1154
+ <span class='zippy'>
1155
+
1156
+ &#9658;&#160;
1157
+
1158
+ </span>
1159
+ </a>
1160
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2006_04_01_archive.html'>April</a>
1161
+ <span class='post-count' dir='ltr'>(4)</span>
1162
+ </li>
1163
+ </ul>
1164
+ <ul>
1165
+ <li class='archivedate collapsed'>
1166
+ <a class='toggle' href='javascript:void(0)'>
1167
+ <span class='zippy'>
1168
+
1169
+ &#9658;&#160;
1170
+
1171
+ </span>
1172
+ </a>
1173
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2006_03_01_archive.html'>March</a>
1174
+ <span class='post-count' dir='ltr'>(11)</span>
1175
+ </li>
1176
+ </ul>
1177
+ <ul>
1178
+ <li class='archivedate collapsed'>
1179
+ <a class='toggle' href='javascript:void(0)'>
1180
+ <span class='zippy'>
1181
+
1182
+ &#9658;&#160;
1183
+
1184
+ </span>
1185
+ </a>
1186
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2006_02_01_archive.html'>February</a>
1187
+ <span class='post-count' dir='ltr'>(5)</span>
1188
+ </li>
1189
+ </ul>
1190
+ <ul>
1191
+ <li class='archivedate collapsed'>
1192
+ <a class='toggle' href='javascript:void(0)'>
1193
+ <span class='zippy'>
1194
+
1195
+ &#9658;&#160;
1196
+
1197
+ </span>
1198
+ </a>
1199
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2006_01_01_archive.html'>January</a>
1200
+ <span class='post-count' dir='ltr'>(12)</span>
1201
+ </li>
1202
+ </ul>
1203
+ </li>
1204
+ </ul>
1205
+ <ul>
1206
+ <li class='archivedate collapsed'>
1207
+ <a class='toggle' href='javascript:void(0)'>
1208
+ <span class='zippy'>
1209
+
1210
+ &#9658;&#160;
1211
+
1212
+ </span>
1213
+ </a>
1214
+ <a class='post-count-link' href='http://factor-language.blogspot.com/search?updated-min=2005-01-01T00%3A00%3A00-05%3A00&updated-max=2006-01-01T00%3A00%3A00-05%3A00&max-results=23'>2005</a>
1215
+ <span class='post-count' dir='ltr'>(23)</span>
1216
+ <ul>
1217
+ <li class='archivedate collapsed'>
1218
+ <a class='toggle' href='javascript:void(0)'>
1219
+ <span class='zippy'>
1220
+
1221
+ &#9658;&#160;
1222
+
1223
+ </span>
1224
+ </a>
1225
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2005_12_01_archive.html'>December</a>
1226
+ <span class='post-count' dir='ltr'>(11)</span>
1227
+ </li>
1228
+ </ul>
1229
+ <ul>
1230
+ <li class='archivedate collapsed'>
1231
+ <a class='toggle' href='javascript:void(0)'>
1232
+ <span class='zippy'>
1233
+
1234
+ &#9658;&#160;
1235
+
1236
+ </span>
1237
+ </a>
1238
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2005_11_01_archive.html'>November</a>
1239
+ <span class='post-count' dir='ltr'>(3)</span>
1240
+ </li>
1241
+ </ul>
1242
+ <ul>
1243
+ <li class='archivedate collapsed'>
1244
+ <a class='toggle' href='javascript:void(0)'>
1245
+ <span class='zippy'>
1246
+
1247
+ &#9658;&#160;
1248
+
1249
+ </span>
1250
+ </a>
1251
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2005_10_01_archive.html'>October</a>
1252
+ <span class='post-count' dir='ltr'>(6)</span>
1253
+ </li>
1254
+ </ul>
1255
+ <ul>
1256
+ <li class='archivedate collapsed'>
1257
+ <a class='toggle' href='javascript:void(0)'>
1258
+ <span class='zippy'>
1259
+
1260
+ &#9658;&#160;
1261
+
1262
+ </span>
1263
+ </a>
1264
+ <a class='post-count-link' href='http://factor-language.blogspot.com/2005_09_01_archive.html'>September</a>
1265
+ <span class='post-count' dir='ltr'>(3)</span>
1266
+ </li>
1267
+ </ul>
1268
+ </li>
1269
+ </ul>
1270
+ </div>
1271
+ </div>
1272
+ <div class='clear'></div>
1273
+ <span class='widget-item-control'>
1274
+ <span class='item-control blog-admin'>
1275
+ <a class='quickedit' href='http://www.blogger.com/rearrange?blogID=17087850&widgetType=BlogArchive&widgetId=BlogArchive1&action=editWidget' onclick='return _WidgetManager._PopupConfig(document.getElementById("BlogArchive1"));' target='configBlogArchive1' title='Edit'>
1276
+ <img alt='' height='18' src='http://img1.blogblog.com/img/icon18_wrench_allbkg.png' width='18'/>
1277
+ </a>
1278
+ </span>
1279
+ </span>
1280
+ <div class='clear'></div>
1281
+ </div>
1282
+ </div><div class='widget Feed' id='Feed2'>
1283
+ <h2>Recent Factor commits</h2>
1284
+ <div class='widget-content' id='Feed2_feedItemListDisplay'>
1285
+ <span style='filter: alpha(25); opacity: 0.25;'>
1286
+ <a href='http://gitweb.factorcode.org/gitweb.cgi?p=factor/.git;a=atom;opt=--no-merges'>Loading...</a>
1287
+ </span>
1288
+ </div>
1289
+ <div class='clear'></div>
1290
+ <span class='widget-item-control'>
1291
+ <span class='item-control blog-admin'>
1292
+ <a class='quickedit' href='http://www.blogger.com/rearrange?blogID=17087850&widgetType=Feed&widgetId=Feed2&action=editWidget' onclick='return _WidgetManager._PopupConfig(document.getElementById("Feed2"));' target='configFeed2' title='Edit'>
1293
+ <img alt='' height='18' src='http://img1.blogblog.com/img/icon18_wrench_allbkg.png' width='18'/>
1294
+ </a>
1295
+ </span>
1296
+ </span>
1297
+ <div class='clear'></div>
1298
+ </div><div class='widget Feed' id='Feed1'>
1299
+ <h2>Planet Factor</h2>
1300
+ <div class='widget-content' id='Feed1_feedItemListDisplay'>
1301
+ <span style='filter: alpha(25); opacity: 0.25;'>
1302
+ <a href='http://planet.factorcode.org/feed.xml'>Loading...</a>
1303
+ </span>
1304
+ </div>
1305
+ <div class='clear'></div>
1306
+ <span class='widget-item-control'>
1307
+ <span class='item-control blog-admin'>
1308
+ <a class='quickedit' href='http://www.blogger.com/rearrange?blogID=17087850&widgetType=Feed&widgetId=Feed1&action=editWidget' onclick='return _WidgetManager._PopupConfig(document.getElementById("Feed1"));' target='configFeed1' title='Edit'>
1309
+ <img alt='' height='18' src='http://img1.blogblog.com/img/icon18_wrench_allbkg.png' width='18'/>
1310
+ </a>
1311
+ </span>
1312
+ </span>
1313
+ <div class='clear'></div>
1314
+ </div><div class='widget LinkList' id='LinkList1'>
1315
+ <h2>Links</h2>
1316
+ <div class='widget-content'>
1317
+ <ul>
1318
+ <li><a href='http://twitter.com/slava_pestov'>@slava_pestov</a></li>
1319
+ <li><a href='http://factorcode.org/slava/'>My home page</a></li>
1320
+ <li><a href='http://factorcode.org/'>Factor programming language</a></li>
1321
+ <li><a href='http://concatenative.org/'>Concatenative language wiki</a></li>
1322
+ <li><a href='http://planet.factorcode.org/'>Planet Factor</a></li>
1323
+ </ul>
1324
+ <div class='clear'></div>
1325
+ <span class='widget-item-control'>
1326
+ <span class='item-control blog-admin'>
1327
+ <a class='quickedit' href='http://www.blogger.com/rearrange?blogID=17087850&widgetType=LinkList&widgetId=LinkList1&action=editWidget' onclick='return _WidgetManager._PopupConfig(document.getElementById("LinkList1"));' target='configLinkList1' title='Edit'>
1328
+ <img alt='' height='18' src='http://img1.blogblog.com/img/icon18_wrench_allbkg.png' width='18'/>
1329
+ </a>
1330
+ </span>
1331
+ </span>
1332
+ <div class='clear'></div>
1333
+ </div>
1334
+ </div></div>
1335
+ </div>
1336
+ <!-- spacer for skins that want sidebar and main to be the same height-->
1337
+ <div class='clear'>&#160;</div>
1338
+ </div>
1339
+ <!-- end content-wrapper -->
1340
+ <div id='footer-wrapper'>
1341
+ <div class='footer section' id='footer'></div>
1342
+ </div>
1343
+ </div></div>
1344
+ <!-- end outer-wrapper -->
1345
+ <script type="text/javascript">
1346
+ if (window.jstiming) window.jstiming.load.tick('widgetJsBefore');
1347
+ </script><script type="text/javascript" src="http://www.blogger.com/static/v1/widgets/995923812-widgets.js"></script>
1348
+ <script type='text/javascript'>
1349
+ _WidgetManager._Init('http://www.blogger.com/rearrange?blogID=17087850', 'http://factor-language.blogspot.com/2010/01/factors-bootstrap-process-explained.html','17087850');
1350
+ _WidgetManager._SetPageActionUrl('http://www.blogger.com/display?blogID=17087850', '6Kx2_xHj7H1U4lwWYUaIufgAM4U:1263180850931');
1351
+ _WidgetManager._SetDataContext([{'name': 'blog', 'data': {'title': 'Factor: a practical stack language', 'pageType': 'item', 'url': 'http://factor-language.blogspot.com/2010/01/factors-bootstrap-process-explained.html', 'homepageUrl': 'http://factor-language.blogspot.com/', 'enabledCommentProfileImages': true, 'searchLabel': '', 'searchQuery': '', 'pageName': 'Factor\47s bootstrap process explained', 'pageTitle': 'Factor: a practical stack language: Factor\47s bootstrap process explained', 'encoding': 'UTF-8', 'locale': 'en-US', 'isPrivate': false, 'languageDirection': 'ltr', 'feedLinks': '\74link rel\75\42alternate\42 type\75\42application/atom+xml\42 title\75\42Factor: a practical stack language - Atom\42 href\75\42http://factor-language.blogspot.com/feeds/posts/default\42 /\76\n\74link rel\75\42alternate\42 type\75\42application/rss+xml\42 title\75\42Factor: a practical stack language - RSS\42 href\75\42http://factor-language.blogspot.com/feeds/posts/default?alt\75rss\42 /\76\n\74link rel\75\42service.post\42 type\75\42application/atom+xml\42 title\75\42Factor: a practical stack language - Atom\42 href\75\42http://www.blogger.com/feeds/17087850/posts/default\42 /\76\n\74link rel\75\42EditURI\42 type\75\42application/rsd+xml\42 title\75\42RSD\42 href\75\42http://www.blogger.com/rsd.g?blogID\07517087850\42 /\76\n\74link rel\75\42alternate\42 type\75\42application/atom+xml\42 title\75\42Factor: a practical stack language - Atom\42 href\75\42http://factor-language.blogspot.com/feeds/657377910223810792/comments/default\42 /\76\n', 'meTag': '', 'openIdOpTag': '', 'latencyHeadScript': '\74script type\75\42text/javascript\42\76(function() { var a\75window;function e(b){this.t\75{};this.tick\75function(c,h,d){d\75d?d:(new Date).getTime();this.t[c]\75[d,h]};this.tick(\42start\42,null,b)}var f\75new e;a.jstiming\75{Timer:e,load:f};try{a.jstiming.pt\75a.gtbExternal\46\46a.gtbExternal.pageT()||a.external\46\46a.external.pageT}catch(g){};a.tickAboveFold\75function(b){b\75b;var c\0750;if(b.offsetParent){do c+\75b.offsetTop;while(b\75b.offsetParent)}b\75c;b\74\075750\46\46a.jstiming.load.tick(\42aft\42)};var i\75false;function j(){if(!i){i\75true;a.jstiming.load.tick(\42firstScrollTime\42)}}a.addEventListener?a.addEventListener(\42scroll\42,j,false):a.attachEvent(\42onscroll\42,j); })();\74/script\076'}}]);
1352
+ _WidgetManager._SetSystemMarkup({'layout': {'varName': '', 'template': '\74div class\75\47widget-wrap1\47\76\n\74div class\75\47widget-wrap2\47\76\n\74div class\75\47widget-wrap3\47\76\n\74div class\75\47widget-content\47\76\n\74div class\75\47layout-title\47\76\74data:layout-title\76\74/data:layout-title\76\74/div\76\n\74a class\75\47editlink\47 expr:href\75\47data:widget.quickEditUrl\47 expr:onclick\75\47\46quot;return _WidgetManager._PopupConfig(document.getElementById(\\\46quot;\46quot; + data:widget.instanceId + \46quot;\\\46quot;));\46quot;\47 target\75\47chooseWidget\47\76\74data:edit-link\76\74/data:edit-link\76\74/a\76\n\74/div\76\n\74/div\76\n\74/div\76\n\74/div\076'}, 'quickedit': {'varName': '', 'template': '\74div class\75\47clear\47\76\74/div\76\n\74span class\75\47widget-item-control\47\76\n\74span class\75\47item-control blog-admin\47\76\n\74a class\75\47quickedit\47 expr:href\75\47data:widget.quickEditUrl\47 expr:onclick\75\47\46quot;return _WidgetManager._PopupConfig(document.getElementById(\\\46quot;\46quot; + data:widget.instanceId + \46quot;\\\46quot;));\46quot;\47 expr:target\75\47\46quot;config\46quot; + data:widget.instanceId\47 expr:title\75\47data:edit-link\47\76\n\74img alt\75\47\47 height\75\04718\47 src\75\47http://img1.blogblog.com/img/icon18_wrench_allbkg.png\47 width\75\04718\47/\76\n\74/a\76\n\74/span\76\n\74/span\76\n\74div class\75\47clear\47\76\74/div\076'}, 'all-head-content': {'varName': 'page', 'template': '\74data:blog.latencyHeadScript\76\74/data:blog.latencyHeadScript\76\n\74meta expr:content\75\47\46quot;text/html; charset\75\46quot; + data:page.encoding\47 http-equiv\75\47Content-Type\47/\76\n\74meta content\75\47true\47 name\75\47MSSmartTagsPreventParsing\47/\76\n\74meta content\75\47blogger\47 name\75\47generator\47/\76\n\74link href\75\47http://www.blogger.com/favicon.ico\47 rel\75\47icon\47 type\75\47image/vnd.microsoft.icon\47/\76\n\74link expr:href\75\47data:blog.url\47 rel\75\47canonical\47/\76\n\74data:blog.feedLinks\76\74/data:blog.feedLinks\76\n\74data:blog.meTag\76\74/data:blog.meTag\76\n\74data:blog.openIdOpTag\76\74/data:blog.openIdOpTag\076'}});
1353
+ _WidgetManager._RegisterWidget('_BlogArchiveView', new _WidgetInfo('BlogArchive1', 'sidebar',{'main': {'varName': '', 'template': '\74b:if cond\75\47data:title\47\76\n\74h2\76\74data:title\76\74/data:title\76\74/h2\76\n\74/b:if\76\n\74div class\75\47widget-content\47\76\n\74div id\75\47ArchiveList\47\76\n\74div expr:id\75\47data:widget.instanceId + \46quot;_ArchiveList\46quot;\47\76\n\74b:if cond\75\47data:style \75\75 \46quot;HIERARCHY\46quot;\47\76\n\74b:include data\75\47data\47 name\75\47interval\47\76\74/b:include\76\n\74/b:if\76\n\74b:if cond\75\47data:style \75\75 \46quot;FLAT\46quot;\47\76\n\74b:include data\75\47data\47 name\75\47flat\47\76\74/b:include\76\n\74/b:if\76\n\74b:if cond\75\47data:style \75\75 \46quot;MENU\46quot;\47\76\n\74b:include data\75\47data\47 name\75\47menu\47\76\74/b:include\76\n\74/b:if\76\n\74/div\76\n\74/div\76\n\74b:include name\75\47quickedit\47\76\74/b:include\76\n\74/div\076'}, 'flat': {'varName': 'data', 'template': '\74ul\76\n\74b:loop values\75\47data:data\47 var\75\47i\47\76\n\74li class\75\47archivedate\47\76\n\74a expr:href\75\47data:i.url\47\76\74data:i.name\76\74/data:i.name\76\74/a\76 (\74data:i.post-count\76\74/data:i.post-count\76)\n \74/li\76\n\74/b:loop\76\n\74/ul\076'}, 'menu': {'varName': 'data', 'template': '\74select expr:id\75\47data:widget.instanceId + \46quot;_ArchiveMenu\46quot;\47\76\n\74option value\75\47\47\76\74data:title\76\74/data:title\76\74/option\76\n\74b:loop values\75\47data:data\47 var\75\47i\47\76\n\74option expr:value\75\47data:i.url\47\76\74data:i.name\76\74/data:i.name\76 (\74data:i.post-count\76\74/data:i.post-count\76)\74/option\76\n\74/b:loop\76\n\74/select\076'}, 'interval': {'varName': 'intervalData', 'template': '\74b:loop values\75\47data:intervalData\47 var\75\47i\47\76\n\74ul\76\n\74li expr:class\75\47\46quot;archivedate \46quot; + data:i.expclass\47\76\n\74b:include data\75\47i\47 name\75\47toggle\47\76\74/b:include\76\n\74a class\75\47post-count-link\47 expr:href\75\47data:i.url\47\76\74data:i.name\76\74/data:i.name\76\74/a\76\n\74span class\75\47post-count\47 dir\75\47ltr\47\76(\74data:i.post-count\76\74/data:i.post-count\76)\74/span\76\n\74b:if cond\75\47data:i.data\47\76\n\74b:include data\75\47i.data\47 name\75\47interval\47\76\74/b:include\76\n\74/b:if\76\n\74b:if cond\75\47data:i.posts\47\76\n\74b:include data\75\47i.posts\47 name\75\47posts\47\76\74/b:include\76\n\74/b:if\76\n\74/li\76\n\74/ul\76\n\74/b:loop\076'}, 'toggle': {'varName': 'interval', 'template': '\74b:if cond\75\47data:interval.toggleId\47\76\n\74b:if cond\75\47data:interval.expclass \75\75 \46quot;expanded\46quot;\47\76\n\74a class\75\47toggle\47 href\75\47javascript:void(0)\47\76\n\74span class\75\47zippy toggle-open\47\76\46#9660;\46#160;\74/span\76\n\74/a\76\n\74b:else\76\74/b:else\76\n\74a class\75\47toggle\47 href\75\47javascript:void(0)\47\76\n\74span class\75\47zippy\47\76\n\74b:if cond\75\47data:blog.languageDirection \75\75 \46quot;rtl\46quot;\47\76\n \46#9668;\46#160;\n \74b:else\76\74/b:else\76\n \46#9658;\46#160;\n \74/b:if\76\n\74/span\76\n\74/a\76\n\74/b:if\76\n\74/b:if\076'}, 'posts': {'varName': 'posts', 'template': '\74ul class\75\47posts\47\76\n\74b:loop values\75\47data:posts\47 var\75\47i\47\76\n\74li\76\74a expr:href\75\47data:i.url\47\76\74data:i.title\76\74/data:i.title\76\74/a\76\74/li\76\n\74/b:loop\76\n\74/ul\076'}}, document.getElementById('BlogArchive1'), {'languageDirection': 'ltr'}, 'displayModeFull'));
1354
+ _WidgetManager._RegisterWidget('_FeedView', new _WidgetInfo('Feed2', 'sidebar',{'main': {'varName': '', 'template': '\74h2\76\74data:title\76\74/data:title\76\74/h2\76\n\74div class\75\47widget-content\47 expr:id\75\47data:widget.instanceId + \46quot;_feedItemListDisplay\46quot;\47\76\n\74span style\75\47filter: alpha(25); opacity: 0.25;\47\76\n\74a expr:href\75\47data:feedUrl\47\76\74data:loadingMsg\76\74/data:loadingMsg\76\74/a\76\n\74/span\76\n\74/div\76\n\74b:include name\75\47quickedit\47\76\74/b:include\076'}}, document.getElementById('Feed2'), {'title': 'Recent Factor commits', 'showItemDate': true, 'showItemAuthor': true, 'feedUrl': 'http://gitweb.factorcode.org/gitweb.cgi?p\75factor/.git;a\75atom;opt\75--no-merges', 'numItemsShow': 5, 'loadingMsg': 'Loading...'}, 'displayModeFull'));
1355
+ _WidgetManager._RegisterWidget('_FeedView', new _WidgetInfo('Feed1', 'sidebar',{'main': {'varName': '', 'template': '\74h2\76\74data:title\76\74/data:title\76\74/h2\76\n\74div class\75\47widget-content\47 expr:id\75\47data:widget.instanceId + \46quot;_feedItemListDisplay\46quot;\47\76\n\74span style\75\47filter: alpha(25); opacity: 0.25;\47\76\n\74a expr:href\75\47data:feedUrl\47\76\74data:loadingMsg\76\74/data:loadingMsg\76\74/a\76\n\74/span\76\n\74/div\76\n\74b:include name\75\47quickedit\47\76\74/b:include\076'}}, document.getElementById('Feed1'), {'title': 'Planet Factor', 'showItemDate': true, 'showItemAuthor': false, 'feedUrl': 'http://planet.factorcode.org/feed.xml', 'numItemsShow': 5, 'loadingMsg': 'Loading...'}, 'displayModeFull'));
1356
+ _WidgetManager._RegisterWidget('_LinkListView', new _WidgetInfo('LinkList1', 'sidebar',{'main': {'varName': '', 'template': '\74b:if cond\75\47data:title\47\76\74h2\76\74data:title\76\74/data:title\76\74/h2\76\74/b:if\76\n\74div class\75\47widget-content\47\76\n\74ul\76\n\74b:loop values\75\47data:links\47 var\75\47link\47\76\n\74li\76\74a expr:href\75\47data:link.target\47\76\74data:link.name\76\74/data:link.name\76\74/a\76\74/li\76\n\74/b:loop\76\n\74/ul\76\n\74b:include name\75\47quickedit\47\76\74/b:include\76\n\74/div\076'}}, document.getElementById('LinkList1'), {}, 'displayModeFull'));
1357
+ _WidgetManager._RegisterWidget('_HeaderView', new _WidgetInfo('Header1', 'header'));
1358
+ _WidgetManager._RegisterWidget('_NavbarView', new _WidgetInfo('Navbar1', 'navbar'));
1359
+ _WidgetManager._RegisterWidget('_BlogView', new _WidgetInfo('Blog1', 'main',{'main': {'varName': 'top', 'template': '\74div class\75\47blog-posts hfeed\47\76\n\74b:include data\75\47top\47 name\75\47status-message\47\76\74/b:include\76\n\74data:defaultAdStart\76\74/data:defaultAdStart\76\n\74b:loop values\75\47data:posts\47 var\75\47post\47\76\n\74b:if cond\75\47data:post.dateHeader\47\76\n\74h2 class\75\47date-header\47\76\74data:post.dateHeader\76\74/data:post.dateHeader\76\74/h2\76\n\74/b:if\76\n\74b:include data\75\47post\47 name\75\47post\47\76\74/b:include\76\n\74b:if cond\75\47data:blog.pageType \75\75 \46quot;static_page\46quot;\47\76\n\74b:include data\75\47post\47 name\75\47comments\47\76\74/b:include\76\n\74/b:if\76\n\74b:if cond\75\47data:blog.pageType \75\75 \46quot;item\46quot;\47\76\n\74b:include data\75\47post\47 name\75\47comments\47\76\74/b:include\76\n\74/b:if\76\n\74b:if cond\75\47data:post.includeAd\47\76\n\74b:if cond\75\47data:post.isFirstPost\47\76\n\74data:defaultAdEnd\76\74/data:defaultAdEnd\76\n\74b:else\76\74/b:else\76\n\74data:adEnd\76\74/data:adEnd\76\n\74/b:if\76\n\74div class\75\47inline-ad\47\76\n\74data:adCode\76\74/data:adCode\76\n\74/div\76\n\74data:adStart\76\74/data:adStart\76\n\74/b:if\76\n\74b:if cond\75\47data:post.trackLatency\47\76\n\74data:post.latencyJs\76\74/data:post.latencyJs\76\n\74/b:if\76\n\74/b:loop\76\n\74data:adEnd\76\74/data:adEnd\76\n\74/div\76\n\74b:include name\75\47nextprev\47\76\74/b:include\76\n\74b:include name\75\47feedLinks\47\76\74/b:include\76\n\74b:if cond\75\47data:top.showStars\47\76\n\74script src\75\47http://www.google.com/jsapi\47 type\75\47text/javascript\47\76\74/script\76\n\74script type\75\47text/javascript\47\76\n google.load(\46quot;annotations\46quot;, \46quot;1\46quot;, {\46quot;locale\46quot;: \46quot;\74data:top.languageCode\76\74/data:top.languageCode\76\46quot;});\n function initialize() {\n google.annotations.setApplicationId(\74data:top.blogspotReviews\76\74/data:top.blogspotReviews\76);\n google.annotations.createAll();\n google.annotations.fetch();\n }\n google.setOnLoadCallback(initialize);\n \74/script\76\n\74/b:if\076'}, 'nextprev': {'varName': '', 'template': '\74div class\75\47blog-pager\47 id\75\47blog-pager\47\76\n\74b:if cond\75\47data:newerPageUrl\47\76\n\74span id\75\47blog-pager-newer-link\47\76\n\74a class\75\47blog-pager-newer-link\47 expr:href\75\47data:newerPageUrl\47 expr:id\75\47data:widget.instanceId + \46quot;_blog-pager-newer-link\46quot;\47 expr:title\75\47data:newerPageTitle\47\76\74data:newerPageTitle\76\74/data:newerPageTitle\76\74/a\76\n\74/span\76\n\74/b:if\76\n\74b:if cond\75\47data:olderPageUrl\47\76\n\74span id\75\47blog-pager-older-link\47\76\n\74a class\75\47blog-pager-older-link\47 expr:href\75\47data:olderPageUrl\47 expr:id\75\47data:widget.instanceId + \46quot;_blog-pager-older-link\46quot;\47 expr:title\75\47data:olderPageTitle\47\76\74data:olderPageTitle\76\74/data:olderPageTitle\76\74/a\76\n\74/span\76\n\74/b:if\76\n\74b:if cond\75\47data:blog.homepageUrl !\75 data:blog.url\47\76\n\74a class\75\47home-link\47 expr:href\75\47data:blog.homepageUrl\47\76\74data:homeMsg\76\74/data:homeMsg\76\74/a\76\n\74b:else\76\74/b:else\76\n\74b:if cond\75\47data:newerPageUrl\47\76\n\74a class\75\47home-link\47 expr:href\75\47data:blog.homepageUrl\47\76\74data:homeMsg\76\74/data:homeMsg\76\74/a\76\n\74/b:if\76\n\74/b:if\76\n\74/div\76\n\74div class\75\47clear\47\76\74/div\076'}, 'post': {'varName': 'post', 'template': '\74div class\75\47post hentry\47\76\n\74a expr:name\75\47data:post.id\47\76\74/a\76\n\74b:if cond\75\47data:post.title\47\76\n\74h3 class\75\47post-title entry-title\47\76\n\74b:if cond\75\47data:post.link\47\76\n\74a expr:href\75\47data:post.link\47\76\74data:post.title\76\74/data:post.title\76\74/a\76\n\74b:else\76\74/b:else\76\n\74b:if cond\75\47data:post.url\47\76\n\74a expr:href\75\47data:post.url\47\76\74data:post.title\76\74/data:post.title\76\74/a\76\n\74b:else\76\74/b:else\76\n\74data:post.title\76\74/data:post.title\76\n\74/b:if\76\n\74/b:if\76\n\74/h3\76\n\74/b:if\76\n\74div class\75\47post-header-line-1\47\76\74/div\76\n\74div class\75\47post-body entry-content\47\76\n\74data:post.body\76\74/data:post.body\76\n\74div style\75\47clear: both;\47\76\74/div\76\n\74/div\76\n\74b:if cond\75\47data:post.hasJumpLink\47\76\n\74div class\75\47jump-link\47\76\n\74a expr:href\75\47data:post.url + \46quot;#more\46quot;\47 expr:title\75\47data:post.title\47\76\74data:post.jumpText\76\74/data:post.jumpText\76\74/a\76\n\74/div\76\n\74/b:if\76\n\74div class\75\47post-footer\47\76\n\74div class\75\47post-footer-line post-footer-line-1\47\76\74span class\75\47post-timestamp\47\76\n\74b:if cond\75\47data:top.showTimestamp\47\76\n\74data:top.timestampLabel\76\74/data:top.timestampLabel\76\n\74b:if cond\75\47data:post.url\47\76\n\74a class\75\47timestamp-link\47 expr:href\75\47data:post.url\47 rel\75\47bookmark\47 title\75\47permanent link\47\76\74abbr class\75\47published\47 expr:title\75\47data:post.timestampISO8601\47\76\74data:post.timestamp\76\74/data:post.timestamp\76\74/abbr\76\74/a\76\n\74/b:if\76\n\74/b:if\76\n\74/span\76\n\74span class\75\47post-comment-link\47\76\n\74b:if cond\75\47data:blog.pageType !\75 \46quot;item\46quot;\47\76\n\74b:if cond\75\47data:post.allowComments\47\76\n\74a class\75\47comment-link\47 expr:href\75\47data:post.addCommentUrl\47 expr:onclick\75\47data:post.addCommentOnclick\47\76\74b:if cond\75\47data:post.numComments \75\75 1\47\0761 \74data:top.commentLabel\76\74/data:top.commentLabel\76\74b:else\76\74/b:else\76\74data:post.numComments\76\74/data:post.numComments\76\n\74data:top.commentLabelPlural\76\74/data:top.commentLabelPlural\76\74/b:if\76\74/a\76\n\74/b:if\76\n\74/b:if\76\n\74/span\76\n\74span class\75\47post-icons\47\76\n\74b:if cond\75\47data:post.emailPostUrl\47\76\n\74span class\75\47item-action\47\76\n\74a expr:href\75\47data:post.emailPostUrl\47 expr:title\75\47data:top.emailPostMsg\47\76\n\74img alt\75\47\47 class\75\47icon-action\47 height\75\04713\47 src\75\47http://www.blogger.com/img/icon18_email.gif\47 width\75\04718\47/\76\n\74/a\76\n\74/span\76\n\74/b:if\76\n\74b:include data\75\47post\47 name\75\47postQuickEdit\47\76\74/b:include\76\n\74/span\76\n\74/div\76\n\74div class\75\47post-footer-line post-footer-line-2\47\76\74/div\76\n\74div class\75\47post-footer-line post-footer-line-3\47\76\74/div\76\n\74/div\76\n\74/div\076'}, 'postQuickEdit': {'varName': 'post', 'template': '\74b:if cond\75\47data:post.editUrl\47\76\n\74span expr:class\75\47\46quot;item-control \46quot; + data:post.adminClass\47\76\n\74a expr:href\75\47data:post.editUrl\47 expr:title\75\47data:top.editPostMsg\47\76\n\74img alt\75\47\47 class\75\47icon-action\47 height\75\04718\47 src\75\47http://www.blogger.com/img/icon18_edit_allbkg.gif\47 width\75\04718\47/\76\n\74/a\76\n\74/span\76\n\74/b:if\076'}, 'commentDeleteIcon': {'varName': 'comment', 'template': '\74span expr:class\75\47\46quot;item-control \46quot; + data:comment.adminClass\47\76\n\74a expr:href\75\47data:comment.deleteUrl\47 expr:title\75\47data:top.deleteCommentMsg\47\76\n\74img src\75\47http://www.blogger.com/img/icon_delete13.gif\47/\76\n\74/a\76\n\74/span\076'}, 'backlinkDeleteIcon': {'varName': 'backlink', 'template': '\74span expr:class\75\47\46quot;item-control \46quot; + data:backlink.adminClass\47\76\n\74a expr:href\75\47data:backlink.deleteUrl\47 expr:title\75\47data:top.deleteBacklinkMsg\47\76\n\74img src\75\47http://www.blogger.com/img/icon_delete13.gif\47/\76\n\74/a\76\n\74/span\076'}, 'comments': {'varName': 'post', 'template': '\74div class\75\47comments\47 id\75\47comments\47\76\n\74a name\75\47comments\47\76\74/a\76\n\74b:if cond\75\47data:post.allowComments\47\76\n\74h4\76\n\74b:if cond\75\47data:post.numComments \75\75 1\47\76\n 1 \74data:commentLabel\76\74/data:commentLabel\76:\n \74b:else\76\74/b:else\76\n\74data:post.numComments\76\74/data:post.numComments\76\n\74data:commentLabelPlural\76\74/data:commentLabelPlural\76:\n \74/b:if\76\n\74/h4\76\n\74b:if cond\75\47data:post.commentPagingRequired\47\76\n\74span class\75\47paging-control-container\47\76\n\74a expr:class\75\47data:post.oldLinkClass\47 expr:href\75\47data:post.oldestLinkUrl\47\76\74data:post.oldestLinkText\76\74/data:post.oldestLinkText\76\74/a\76\n \46#160;\n \74a expr:class\75\47data:post.oldLinkClass\47 expr:href\75\47data:post.olderLinkUrl\47\76\74data:post.olderLinkText\76\74/data:post.olderLinkText\76\74/a\76\n \46#160;\n \74data:post.commentRangeText\76\74/data:post.commentRangeText\76\n \46#160;\n \74a expr:class\75\47data:post.newLinkClass\47 expr:href\75\47data:post.newerLinkUrl\47\76\74data:post.newerLinkText\76\74/data:post.newerLinkText\76\74/a\76\n \46#160;\n \74a expr:class\75\47data:post.newLinkClass\47 expr:href\75\47data:post.newestLinkUrl\47\76\74data:post.newestLinkText\76\74/data:post.newestLinkText\76\74/a\76\n\74/span\76\n\74/b:if\76\n\74dl expr:class\75\47data:post.avatarIndentClass\47 id\75\47comments-block\47\76\n\74b:loop values\75\47data:post.comments\47 var\75\47comment\47\76\n\74dt expr:class\75\47\46quot;comment-author \46quot; + data:comment.authorClass\47 expr:id\75\47data:comment.anchorName\47\76\n\74b:if cond\75\47data:comment.favicon\47\76\n\74img expr:src\75\47data:comment.favicon\47 height\75\04716px\47 style\75\47margin-bottom:-2px;\47 width\75\04716px\47/\76\n\74/b:if\76\n\74a expr:name\75\47data:comment.anchorName\47\76\74/a\76\n\74b:if cond\75\47data:blog.enabledCommentProfileImages\47\76\n\74data:comment.authorAvatarImage\76\74/data:comment.authorAvatarImage\76\n\74/b:if\76\n\74b:if cond\75\47data:comment.authorUrl\47\76\n\74a expr:href\75\47data:comment.authorUrl\47 rel\75\47nofollow\47\76\74data:comment.author\76\74/data:comment.author\76\74/a\76\n\74b:else\76\74/b:else\76\n\74data:comment.author\76\74/data:comment.author\76\n\74/b:if\76\n\74data:commentPostedByMsg\76\74/data:commentPostedByMsg\76\n\74/dt\76\n\74dd class\75\47comment-body\47\76\n\74b:if cond\75\47data:comment.isDeleted\47\76\n\74span class\75\47deleted-comment\47\76\74data:comment.body\76\74/data:comment.body\76\74/span\76\n\74b:else\76\74/b:else\76\n\74p\76\74data:comment.body\76\74/data:comment.body\76\74/p\76\n\74/b:if\76\n\74/dd\76\n\74dd class\75\47comment-footer\47\76\n\74span class\75\47comment-timestamp\47\76\n\74a expr:href\75\47data:comment.url\47 title\75\47comment permalink\47\76\n\74data:comment.timestamp\76\74/data:comment.timestamp\76\n\74/a\76\n\74b:include data\75\47comment\47 name\75\47commentDeleteIcon\47\76\74/b:include\76\n\74/span\76\n\74/dd\76\n\74/b:loop\76\n\74/dl\76\n\74b:if cond\75\47data:post.commentPagingRequired\47\76\n\74span class\75\47paging-control-container\47\76\n\74a expr:class\75\47data:post.oldLinkClass\47 expr:href\75\47data:post.oldestLinkUrl\47\76\n\74data:post.oldestLinkText\76\74/data:post.oldestLinkText\76\n\74/a\76\n\74a expr:class\75\47data:post.oldLinkClass\47 expr:href\75\47data:post.olderLinkUrl\47\76\n\74data:post.olderLinkText\76\74/data:post.olderLinkText\76\n\74/a\76\n \46#160;\n \74data:post.commentRangeText\76\74/data:post.commentRangeText\76\n \46#160;\n \74a expr:class\75\47data:post.newLinkClass\47 expr:href\75\47data:post.newerLinkUrl\47\76\n\74data:post.newerLinkText\76\74/data:post.newerLinkText\76\n\74/a\76\n\74a expr:class\75\47data:post.newLinkClass\47 expr:href\75\47data:post.newestLinkUrl\47\76\n\74data:post.newestLinkText\76\74/data:post.newestLinkText\76\n\74/a\76\n\74/span\76\n\74/b:if\76\n\74p class\75\47comment-footer\47\76\n\74b:if cond\75\47data:post.embedCommentForm\47\76\n\74b:if cond\75\47data:post.allowNewComments\47\76\n\74b:include data\75\47post\47 name\75\47comment-form\47\76\74/b:include\76\n\74b:else\76\74/b:else\76\n\74data:post.noNewCommentsText\76\74/data:post.noNewCommentsText\76\n\74/b:if\76\n\74b:else\76\74/b:else\76\n\74b:if cond\75\47data:post.allowComments\47\76\n\74a expr:href\75\47data:post.addCommentUrl\47 expr:onclick\75\47data:post.addCommentOnclick\47\76\74data:postCommentMsg\76\74/data:postCommentMsg\76\74/a\76\n\74/b:if\76\n\74/b:if\76\n\74/p\76\n\74/b:if\76\n\74div id\75\47backlinks-container\47\76\n\74div expr:id\75\47data:widget.instanceId + \46quot;_backlinks-container\46quot;\47\76\n\74b:if cond\75\47data:post.showBacklinks\47\76\n\74b:include data\75\47post\47 name\75\47backlinks\47\76\74/b:include\76\n\74/b:if\76\n\74/div\76\n\74/div\76\n\74/div\076'}, 'comment-form': {'varName': 'post', 'template': '\74div class\75\47comment-form\47\76\n\74a name\75\47comment-form\47\76\74/a\76\n\74h4 id\75\47comment-post-message\47\76\74data:postCommentMsg\76\74/data:postCommentMsg\76\74/h4\76\n\74p\76\74data:blogCommentMessage\76\74/data:blogCommentMessage\76\74/p\76\n\74data:blogTeamBlogMessage\76\74/data:blogTeamBlogMessage\76\n\74a expr:href\75\47data:post.commentFormIframeSrc\47 id\75\47comment-editor-src\47\76\74/a\76\n\74iframe allowtransparency\75\47true\47 class\75\47blogger-iframe-colorize blogger-comment-from-post\47 frameborder\75\0470\47 height\75\047410\47 id\75\47comment-editor\47 name\75\47comment-editor\47 src\75\47\47 width\75\047100%\47\76\74/iframe\76\n\74data:post.friendConnectJs\76\74/data:post.friendConnectJs\76\n\74data:post.cmtfpIframe\76\74/data:post.cmtfpIframe\76\n\74script type\75\47text/javascript\47\76\n BLOG_CMT_createIframe(\46#39;\74data:post.appRpcRelayPath\76\74/data:post.appRpcRelayPath\76\46#39;, \46#39;\74data:post.communityId\76\74/data:post.communityId\76\46#39;);\n \74/script\76\n\74/div\076'}, 'backlinks': {'varName': 'post', 'template': '\74a name\75\47links\47\76\74/a\76\74h4\76\74data:post.backlinksLabel\76\74/data:post.backlinksLabel\76\74/h4\76\n\74b:if cond\75\47data:post.numBacklinks !\75 0\47\76\n\74dl class\75\47comments-block\47 id\75\47comments-block\47\76\n\74b:loop values\75\47data:post.backlinks\47 var\75\47backlink\47\76\n\74div class\75\47collapsed-backlink backlink-control\47\76\n\74dt class\75\47comment-title\47\76\n\74span class\75\47backlink-toggle-zippy\47\76\46#160;\74/span\76\n\74a expr:href\75\47data:backlink.url\47 rel\75\47nofollow\47\76\74data:backlink.title\76\74/data:backlink.title\76\74/a\76\n\74b:include data\75\47backlink\47 name\75\47backlinkDeleteIcon\47\76\74/b:include\76\n\74/dt\76\n\74dd class\75\47comment-body collapseable\47\76\n\74data:backlink.snippet\76\74/data:backlink.snippet\76\n\74/dd\76\n\74dd class\75\47comment-footer collapseable\47\76\n\74span class\75\47comment-author\47\76\74data:post.authorLabel\76\74/data:post.authorLabel\76\n\74data:backlink.author\76\74/data:backlink.author\76\74/span\76\n\74span class\75\47comment-timestamp\47\76\74data:post.timestampLabel\76\74/data:post.timestampLabel\76\n\74data:backlink.timestamp\76\74/data:backlink.timestamp\76\74/span\76\n\74/dd\76\n\74/div\76\n\74/b:loop\76\n\74/dl\76\n\74/b:if\76\n\74p class\75\47comment-footer\47\76\n\74a class\75\47comment-link\47 expr:href\75\47data:post.createLinkUrl\47 expr:id\75\47data:widget.instanceId + \46quot;_backlinks-create-link\46quot;\47 target\75\47_blank\47\76\74data:post.createLinkLabel\76\74/data:post.createLinkLabel\76\74/a\76\n\74/p\076'}, 'feedLinks': {'varName': '', 'template': '\74b:if cond\75\47data:blog.pageType !\75 \46quot;item\46quot;\47\76\n\74b:if cond\75\47data:feedLinks\47\76\n\74div class\75\47blog-feeds\47\76\n\74b:include data\75\47feedLinks\47 name\75\47feedLinksBody\47\76\74/b:include\76\n\74/div\76\n\74/b:if\76\n\74b:else\76\74/b:else\76\n\74div class\75\47post-feeds\47\76\n\74b:loop values\75\47data:posts\47 var\75\47post\47\76\n\74b:if cond\75\47data:post.allowComments\47\76\n\74b:if cond\75\47data:post.feedLinks\47\76\n\74b:include data\75\47post.feedLinks\47 name\75\47feedLinksBody\47\76\74/b:include\76\n\74/b:if\76\n\74/b:if\76\n\74/b:loop\76\n\74/div\76\n\74/b:if\076'}, 'feedLinksBody': {'varName': 'links', 'template': '\74div class\75\47feed-links\47\76\n\74data:feedLinksMsg\76\74/data:feedLinksMsg\76\n\74b:loop values\75\47data:links\47 var\75\47f\47\76\n\74a class\75\47feed-link\47 expr:href\75\47data:f.url\47 expr:type\75\47data:f.mimeType\47 target\75\47_blank\47\76\74data:f.name\76\74/data:f.name\76 (\74data:f.feedType\76\74/data:f.feedType\76)\74/a\76\n\74/b:loop\76\n\74/div\076'}, 'status-message': {'varName': '', 'template': '\74b:if cond\75\47data:navMessage\47\76\n\74div class\75\47status-msg-wrap\47\76\n\74div class\75\47status-msg-body\47\76\n\74data:navMessage\76\74/data:navMessage\76\n\74/div\76\n\74div class\75\47status-msg-border\47\76\n\74div class\75\47status-msg-bg\47\76\n\74div class\75\47status-msg-hidden\47\76\74data:navMessage\76\74/data:navMessage\76\74/div\76\n\74/div\76\n\74/div\76\n\74/div\76\n\74div style\75\47clear: both;\47\76\74/div\76\n\74/b:if\076'}}, document.getElementById('Blog1'), {}, 'displayModeFull'));
1360
+ </script>
1361
+ </body>
1362
+ </html>