Initial commit
authorJavier Sancho <jsf@jsancho.org>
Sat, 7 Jan 2017 19:28:53 +0000 (20:28 +0100)
committerJavier Sancho <jsf@jsancho.org>
Sat, 7 Jan 2017 19:28:53 +0000 (20:28 +0100)
164 files changed:
css/custom.css [new file with mode: 0644]
css/font-awesome.min.css [new file with mode: 0644]
css/monokai.min.css [new file with mode: 0644]
css/style.min.css [new file with mode: 0644]
fonts/fontawesome-webfont.ttf [new file with mode: 0644]
fonts/fontawesome-webfont.woff [new file with mode: 0644]
fonts/fontawesome-webfont.woff2 [new file with mode: 0644]
haunt.scm [new file with mode: 0644]
images/jsancho2.jpg [new file with mode: 0644]
posts/0.html [new file with mode: 0644]
posts/1.html [new file with mode: 0644]
posts/10.html [new file with mode: 0644]
posts/100.html [new file with mode: 0644]
posts/101.html [new file with mode: 0644]
posts/102.html [new file with mode: 0644]
posts/103.html [new file with mode: 0644]
posts/104.html [new file with mode: 0644]
posts/105.html [new file with mode: 0644]
posts/106.html [new file with mode: 0644]
posts/107.html [new file with mode: 0644]
posts/108.html [new file with mode: 0644]
posts/109.html [new file with mode: 0644]
posts/11.html [new file with mode: 0644]
posts/110.html [new file with mode: 0644]
posts/111.html [new file with mode: 0644]
posts/112.html [new file with mode: 0644]
posts/113.html [new file with mode: 0644]
posts/114.html [new file with mode: 0644]
posts/115.html [new file with mode: 0644]
posts/116.html [new file with mode: 0644]
posts/117.html [new file with mode: 0644]
posts/118.html [new file with mode: 0644]
posts/119.html [new file with mode: 0644]
posts/12.html [new file with mode: 0644]
posts/120.html [new file with mode: 0644]
posts/121.html [new file with mode: 0644]
posts/122.html [new file with mode: 0644]
posts/123.html [new file with mode: 0644]
posts/124.html [new file with mode: 0644]
posts/125.html [new file with mode: 0644]
posts/126.html [new file with mode: 0644]
posts/127.html [new file with mode: 0644]
posts/128.html [new file with mode: 0644]
posts/129.html [new file with mode: 0644]
posts/13.html [new file with mode: 0644]
posts/130.html [new file with mode: 0644]
posts/131.html [new file with mode: 0644]
posts/132.html [new file with mode: 0644]
posts/133.html [new file with mode: 0644]
posts/134.html [new file with mode: 0644]
posts/135.html [new file with mode: 0644]
posts/136.html [new file with mode: 0644]
posts/137.html [new file with mode: 0644]
posts/138.html [new file with mode: 0644]
posts/139.sxml [new file with mode: 0644]
posts/14.html [new file with mode: 0644]
posts/140.html [new file with mode: 0644]
posts/141.html [new file with mode: 0644]
posts/142.html [new file with mode: 0644]
posts/143.html [new file with mode: 0644]
posts/144.html [new file with mode: 0644]
posts/145.html [new file with mode: 0644]
posts/146.html [new file with mode: 0644]
posts/147.html [new file with mode: 0644]
posts/148.html [new file with mode: 0644]
posts/149.html [new file with mode: 0644]
posts/15.html [new file with mode: 0644]
posts/150.html [new file with mode: 0644]
posts/151.html [new file with mode: 0644]
posts/152.html [new file with mode: 0644]
posts/153.html [new file with mode: 0644]
posts/154.html [new file with mode: 0644]
posts/16.html [new file with mode: 0644]
posts/17.html [new file with mode: 0644]
posts/18.html [new file with mode: 0644]
posts/19.html [new file with mode: 0644]
posts/2.html [new file with mode: 0644]
posts/20.html [new file with mode: 0644]
posts/21.html [new file with mode: 0644]
posts/22.html [new file with mode: 0644]
posts/23.html [new file with mode: 0644]
posts/24.html [new file with mode: 0644]
posts/25.html [new file with mode: 0644]
posts/26.html [new file with mode: 0644]
posts/27.html [new file with mode: 0644]
posts/28.html [new file with mode: 0644]
posts/29.html [new file with mode: 0644]
posts/3.html [new file with mode: 0644]
posts/30.html [new file with mode: 0644]
posts/31.html [new file with mode: 0644]
posts/32.html [new file with mode: 0644]
posts/33.html [new file with mode: 0644]
posts/34.html [new file with mode: 0644]
posts/35.html [new file with mode: 0644]
posts/36.html [new file with mode: 0644]
posts/37.html [new file with mode: 0644]
posts/38.html [new file with mode: 0644]
posts/39.html [new file with mode: 0644]
posts/4.html [new file with mode: 0644]
posts/40.html [new file with mode: 0644]
posts/41.html [new file with mode: 0644]
posts/42.html [new file with mode: 0644]
posts/43.html [new file with mode: 0644]
posts/44.html [new file with mode: 0644]
posts/45.html [new file with mode: 0644]
posts/46.html [new file with mode: 0644]
posts/47.html [new file with mode: 0644]
posts/48.html [new file with mode: 0644]
posts/49.html [new file with mode: 0644]
posts/5.html [new file with mode: 0644]
posts/50.html [new file with mode: 0644]
posts/51.html [new file with mode: 0644]
posts/52.html [new file with mode: 0644]
posts/53.html [new file with mode: 0644]
posts/54.html [new file with mode: 0644]
posts/55.html [new file with mode: 0644]
posts/56.html [new file with mode: 0644]
posts/57.html [new file with mode: 0644]
posts/58.html [new file with mode: 0644]
posts/59.html [new file with mode: 0644]
posts/6.html [new file with mode: 0644]
posts/60.html [new file with mode: 0644]
posts/61.html [new file with mode: 0644]
posts/62.html [new file with mode: 0644]
posts/63.html [new file with mode: 0644]
posts/64.html [new file with mode: 0644]
posts/65.html [new file with mode: 0644]
posts/66.html [new file with mode: 0644]
posts/67.html [new file with mode: 0644]
posts/68.html [new file with mode: 0644]
posts/69.html [new file with mode: 0644]
posts/7.html [new file with mode: 0644]
posts/70.html [new file with mode: 0644]
posts/71.html [new file with mode: 0644]
posts/72.html [new file with mode: 0644]
posts/73.html [new file with mode: 0644]
posts/74.html [new file with mode: 0644]
posts/75.html [new file with mode: 0644]
posts/76.html [new file with mode: 0644]
posts/77.html [new file with mode: 0644]
posts/78.html [new file with mode: 0644]
posts/79.html [new file with mode: 0644]
posts/8.html [new file with mode: 0644]
posts/80.html [new file with mode: 0644]
posts/81.html [new file with mode: 0644]
posts/82.html [new file with mode: 0644]
posts/83.html [new file with mode: 0644]
posts/84.html [new file with mode: 0644]
posts/85.html [new file with mode: 0644]
posts/86.html [new file with mode: 0644]
posts/87.html [new file with mode: 0644]
posts/88.html [new file with mode: 0644]
posts/89.html [new file with mode: 0644]
posts/9.html [new file with mode: 0644]
posts/90.html [new file with mode: 0644]
posts/91.html [new file with mode: 0644]
posts/92.html [new file with mode: 0644]
posts/93.html [new file with mode: 0644]
posts/94.html [new file with mode: 0644]
posts/95.html [new file with mode: 0644]
posts/96.html [new file with mode: 0644]
posts/97.html [new file with mode: 0644]
posts/98.html [new file with mode: 0644]
posts/99.html [new file with mode: 0644]

diff --git a/css/custom.css b/css/custom.css
new file mode 100644 (file)
index 0000000..0f2a0c8
--- /dev/null
@@ -0,0 +1,3 @@
+.highlight {
+    color: #f8f8f2;
+}
diff --git a/css/font-awesome.min.css b/css/font-awesome.min.css
new file mode 100644 (file)
index 0000000..9b27f8e
--- /dev/null
@@ -0,0 +1,4 @@
+/*!
+ *  Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.6.3');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.6.3') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.6.3') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.6.3') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.6.3') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
diff --git a/css/monokai.min.css b/css/monokai.min.css
new file mode 100644 (file)
index 0000000..e9eb78b
--- /dev/null
@@ -0,0 +1 @@
+.highlight{background-color:#49483e}.c{color:#75715e}.err{color:#960050;background-color:#1e0010}.k{color:#66d9ef}.l{color:#ae81ff}.n{color:#f8f8f2}.o{color:#f92672}.p{color:#f8f8f2}.c1,.ch,.cm,.cp,.cpf,.cs{color:#75715e}.gd{color:#f92672}.ge{font-style:italic}.gi{color:#a6e22e}.gs{font-weight:700}.gu{color:#75715e}.kc,.kd{color:#66d9ef}.kn{color:#f92672}.kp,.kr,.kt{color:#66d9ef}.ld{color:#e6db74}.m{color:#ae81ff}.s{color:#e6db74}.na{color:#a6e22e}.nb{color:#f8f8f2}.nc{color:#a6e22e}.no{color:#66d9ef}.nd{color:#a6e22e}.ni{color:#f8f8f2}.ne,.nf{color:#a6e22e}.nl,.nn{color:#f8f8f2}.nx{color:#a6e22e}.py{color:#f8f8f2}.nt{color:#f92672}.nv{color:#f8f8f2}.ow{color:#f92672}.w{color:#f8f8f2}.mb,.mf,.mh,.mi,.mo{color:#ae81ff}.s2,.sb,.sc,.sd{color:#e6db74}.se{color:#ae81ff}.s1,.sh,.si,.sr,.ss,.sx{color:#e6db74}.bp,.vc,.vg,.vi{color:#f8f8f2}.il{color:#ae81ff}
\ No newline at end of file
diff --git a/css/style.min.css b/css/style.min.css
new file mode 100644 (file)
index 0000000..4f6ef82
--- /dev/null
@@ -0,0 +1 @@
+body,html{width:100%;height:100%}h1,h2,h3,h4,h5,h6{font-weight:300;line-height:1.1}h1{font-size:2.4em}h2{font-size:2em}h3{font-size:1.6em}h4{font-size:1.36em}h5{font-size:1.2em}h6{font-size:1.1em}body{margin:0;padding:0;background-color:#fff;color:#242121;font-family:Source Sans Pro,Verdana,sans-serif;font-size:1.02em;line-height:1.2em}a{color:#d9411e;text-decoration:none}a:hover{color:#ff5a09}hr{color:#eee;background-color:#eee;height:1px;border:none;margin-top:40px;margin-bottom:40px}img{max-width:100%}aside{background-color:#333;text-align:center}aside,aside a{color:#fff}aside a:hover{color:#eee}aside div{padding:20px;margin:0}aside div img{border-radius:50%;max-width:140px}aside div h1{margin:15px 0 5px}aside div p{margin:0 0 15px;font-size:.92em}aside nav ul li{display:inline;line-height:1.6em;font-size:1.28em;text-transform:lowercase}main nav{text-align:center;text-transform:uppercase;font-size:.72em;padding:14px 0;border-bottom:1px solid #eee}main nav a{padding:0 4px;border-right:1px solid #eee}main nav :first-child{border-left:1px solid #eee}main .pagination{margin:4% 8% 2%;height:20px}main .social-share p{font-size:.8em}main article{margin:0 8% 2%}main article header h1,main article header h2{margin-bottom:0}main article header p{color:#999;font-size:.86em}main article code,main article kbd,main article pre,main article samp{font-family:Source Code Pro,Consolas,monospace}main article blockquote,main article pre{background-color:hsla(0,0%,50%,.05);border-top-right-radius:5px;border-bottom-right-radius:5px;border-left:8px solid hsla(0,0%,50%,.075);border-left-width:10px}main article blockquote{padding:10px 20px;font-weight:300;font-size:1.1em}main article pre{padding:4px;font-size:.9em;overflow-x:auto}main article samp{white-space:pre;display:block;overflow-x:auto}main article kbd{padding:.1em .6em;border:1px solid rgba(63,63,63,.25);box-shadow:0 1px 0 rgba(63,63,63,.25);background-color:#fff;color:#333;border-radius:3px;display:inline-block;margin:0 .1em;white-space:nowrap;font-size:.78em}main article code{font-size:.8em;white-space:nowrap;color:#c25;padding:1px 3px;background-color:#f7f7f9;border:1px solid #e1e1e8;border-radius:3px}main article .comment-count{font-size:.8em}main article table{border-collapse:collapse;border-spacing:0}main article table thead:first-child tr:first-child th{border-top:0}main article table td,main article table th{padding:8px;line-height:20px;vertical-align:top;border-top:1px solid #ddd}main footer{padding-top:4px;border-top:1px solid #eee}main footer p{margin:2px;text-align:center;padding:0 40px;color:#999;font-size:11px}.tag-cloud a{background-color:#d9411e;padding:.2em .6em;font-size:.74em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.tag-cloud a:hover{background-color:#ff5a09}a.btn{background-color:#d9411e;padding:.6em;font-size:.8em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.btn:hover{background-color:#ff5a09}.center,.text-center{text-align:center}.img-center{margin-left:auto;margin-right:auto;display:block}.float-right{float:right}div.related-posts{margin:15px 0;padding-bottom:20px;border-top:1px solid #eee;border-bottom:1px solid #eee}div.related-posts h4{margin:20px 0 25px}div.related-posts ul{font-size:1.1em;padding-left:12px}div.related-posts ul li{padding:4px 0}ul.list,ul.related-posts,ul.social{list-style-type:none;margin:0;padding:0}ul.list{padding:1em 0}ul.list li{padding:4px}ul.social{font-size:1.6em;padding-top:20px}ul.social li{display:inline}ul.social a:hover{z-index:1;-webkit-transform:translateY(-5px);transform:translateY(-5px)}ul.social a{display:inline-block;width:36px;height:36px;border-radius:100%;text-align:center;font-size:.8em;line-height:36px}ul.social a.sc-facebook{background-color:#3e5b98}ul.social a.sc-google{background-color:#d93e2d}ul.social a.sc-pinterest{background-color:#c92619}ul.social a.sc-linkedin{background-color:#3371b7}ul.social a.sc-rss{background-color:#f26109}ul.social a.sc-stack-overflow{background-color:#f90}ul.social a.sc-twitter{background-color:#4da7de}ul.social a.sc-youtube{background-color:#e02a20}ul.social a.sc-github,ul.social a.sc-github-alt{background-color:#111010}ul.social a.sc-envelope-o{background-color:#578ad6}ul.social a.sc-reddit{background-color:#ff4500}ul.social a.sc-soundcloud{background-color:#f50}.ads-aside{display:inline-block;height:90px;width:70%}.ads-responsive{display:inline-block;margin:6px 0;width:90%;height:70px;margin-left:5%}@media screen and (min-width:768px){aside{width:25%;height:100%;position:fixed;top:0;left:0;overflow-y:auto}aside div{padding:36px 18px}aside div nav ul li{padding:0!important;display:block}aside div ul.social{padding-top:32px}main{width:75%;height:100%;position:absolute;top:0;left:25%}main article.single{min-height:80%}main article ul.list li{padding:2px}.ads-aside{height:250px}.ads-responsive{height:90px}}
\ No newline at end of file
diff --git a/fonts/fontawesome-webfont.ttf b/fonts/fontawesome-webfont.ttf
new file mode 100644 (file)
index 0000000..0f0cc84
--- /dev/null
@@ -0,0 +1,564 @@
+
+
+
+
+<!DOCTYPE html>
+<html lang="en" class="">
+  <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# object: http://ogp.me/ns/object# article: http://ogp.me/ns/article# profile: http://ogp.me/ns/profile#">
+    <meta charset='utf-8'>
+    
+
+    <link crossorigin="anonymous" href="https://assets-cdn.github.com/assets/frameworks-1e23a207d51b99415349a8278e4e8425a3d5decf40d0b7250b147aaeefeac337.css" media="all" rel="stylesheet" />
+    <link crossorigin="anonymous" href="https://assets-cdn.github.com/assets/github-a6be22a2877ee0ae350520df78941ecf7599019b31fded938ef98cd11d20ae48.css" media="all" rel="stylesheet" />
+    
+    
+    <link crossorigin="anonymous" href="https://assets-cdn.github.com/assets/site-9e0f35305336555b58884b07a160747fc1f6dbd79e13e18820a598a9abcb2662.css" media="all" rel="stylesheet" />
+    
+
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta http-equiv="Content-Language" content="en">
+    <meta name="viewport" content="width=device-width">
+    
+    <title>Flex/fontawesome-webfont.ttf at master · alexandrevicenzi/Flex · GitHub</title>
+    <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">
+    <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
+    <link rel="apple-touch-icon" href="/apple-touch-icon.png">
+    <link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon-57x57.png">
+    <link rel="apple-touch-icon" sizes="60x60" href="/apple-touch-icon-60x60.png">
+    <link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-72x72.png">
+    <link rel="apple-touch-icon" sizes="76x76" href="/apple-touch-icon-76x76.png">
+    <link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon-114x114.png">
+    <link rel="apple-touch-icon" sizes="120x120" href="/apple-touch-icon-120x120.png">
+    <link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144x144.png">
+    <link rel="apple-touch-icon" sizes="152x152" href="/apple-touch-icon-152x152.png">
+    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon-180x180.png">
+    <meta property="fb:app_id" content="1401488693436528">
+
+      <meta content="https://avatars2.githubusercontent.com/u/2637672?v=3&amp;s=400" name="twitter:image:src" /><meta content="@github" name="twitter:site" /><meta content="summary" name="twitter:card" /><meta content="alexandrevicenzi/Flex" name="twitter:title" /><meta content="Flex - The minimalist Pelican theme." name="twitter:description" />
+      <meta content="https://avatars2.githubusercontent.com/u/2637672?v=3&amp;s=400" property="og:image" /><meta content="GitHub" property="og:site_name" /><meta content="object" property="og:type" /><meta content="alexandrevicenzi/Flex" property="og:title" /><meta content="https://github.com/alexandrevicenzi/Flex" property="og:url" /><meta content="Flex - The minimalist Pelican theme." property="og:description" />
+      <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">
+    <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">
+    <link rel="assets" href="https://assets-cdn.github.com/">
+    
+    <meta name="pjax-timeout" content="1000">
+    
+    <meta name="request-id" content="D42FF8D7:6B57:342FFD0:586A4335" data-pjax-transient>
+
+    <meta name="msapplication-TileImage" content="/windows-tile.png">
+    <meta name="msapplication-TileColor" content="#ffffff">
+    <meta name="selected-link" value="repo_source" data-pjax-transient>
+
+    <meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU">
+<meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA">
+    <meta name="google-analytics" content="UA-3769691-2">
+
+<meta content="collector.githubapp.com" name="octolytics-host" /><meta content="github" name="octolytics-app-id" /><meta content="D42FF8D7:6B57:342FFD0:586A4335" name="octolytics-dimension-request_id" />
+<meta content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-pjax-transient="true" name="analytics-location" />
+
+
+
+  <meta class="js-ga-set" name="dimension1" content="Logged Out">
+
+
+
+        <meta name="hostname" content="github.com">
+    <meta name="user-login" content="">
+
+        <meta name="expected-hostname" content="github.com">
+      <meta name="js-proxy-site-detection-payload" content="ZDk5OWI3YjJmZjQ4YWRkNzEzNzFkMDY1ODM3NDZlM2IwZWUxNjZkZTBmZTk5NDhjY2U0NzE2NjkwZDBlMDg1NHx7InJlbW90ZV9hZGRyZXNzIjoiMjEyLjQ3LjI0OC4yMTUiLCJyZXF1ZXN0X2lkIjoiRDQyRkY4RDc6NkI1NzozNDJGRkQwOjU4NkE0MzM1IiwidGltZXN0YW1wIjoxNDgzMzU5MDI5LCJob3N0IjoiZ2l0aHViLmNvbSJ9">
+
+
+      <link rel="mask-icon" href="https://assets-cdn.github.com/pinned-octocat.svg" color="#000000">
+      <link rel="icon" type="image/x-icon" href="https://assets-cdn.github.com/favicon.ico">
+
+    <meta name="html-safe-nonce" content="2a916c370271a75a7ebe57abc09ecff5e163d9fe">
+
+    <meta http-equiv="x-pjax-version" content="37ce4594845dbaa11557f6b8abfabd1d">
+    
+
+      
+  <meta name="description" content="Flex - The minimalist Pelican theme.">
+  <meta name="go-import" content="github.com/alexandrevicenzi/Flex git https://github.com/alexandrevicenzi/Flex.git">
+
+  <meta content="2637672" name="octolytics-dimension-user_id" /><meta content="alexandrevicenzi" name="octolytics-dimension-user_login" /><meta content="39293337" name="octolytics-dimension-repository_id" /><meta content="alexandrevicenzi/Flex" name="octolytics-dimension-repository_nwo" /><meta content="true" name="octolytics-dimension-repository_public" /><meta content="false" name="octolytics-dimension-repository_is_fork" /><meta content="39293337" name="octolytics-dimension-repository_network_root_id" /><meta content="alexandrevicenzi/Flex" name="octolytics-dimension-repository_network_root_nwo" />
+  <link href="https://github.com/alexandrevicenzi/Flex/commits/master.atom" rel="alternate" title="Recent Commits to Flex:master" type="application/atom+xml">
+
+
+      <link rel="canonical" href="https://github.com/alexandrevicenzi/Flex/blob/master/static/font-awesome/fonts/fontawesome-webfont.ttf" data-pjax-transient>
+  </head>
+
+
+  <body class="logged-out  env-production  vis-public page-blob">
+    <div id="js-pjax-loader-bar" class="pjax-loader-bar"><div class="progress"></div></div>
+    <a href="#start-of-content" tabindex="1" class="accessibility-aid js-skip-to-content">Skip to content</a>
+
+    
+    
+    
+
+
+
+          <header class="site-header js-details-container" role="banner">
+  <div class="container-responsive">
+    <a class="header-logo-invertocat" href="https://github.com/" aria-label="Homepage" data-ga-click="(Logged out) Header, go to homepage, icon:logo-wordmark">
+      <svg aria-hidden="true" class="octicon octicon-mark-github" height="32" version="1.1" viewBox="0 0 16 16" width="32"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
+    </a>
+
+    <button class="btn-link float-right site-header-toggle js-details-target" type="button" aria-label="Toggle navigation">
+      <svg aria-hidden="true" class="octicon octicon-three-bars" height="24" version="1.1" viewBox="0 0 12 16" width="18"><path fill-rule="evenodd" d="M11.41 9H.59C0 9 0 8.59 0 8c0-.59 0-1 .59-1H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zm0-4H.59C0 5 0 4.59 0 4c0-.59 0-1 .59-1H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zM.59 11H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1H.59C0 13 0 12.59 0 12c0-.59 0-1 .59-1z"/></svg>
+    </button>
+
+    <div class="site-header-menu">
+      <nav class="site-header-nav site-header-nav-main">
+        <a href="/personal" class="js-selected-navigation-item nav-item nav-item-personal" data-ga-click="Header, click, Nav menu - item:personal" data-selected-links="/personal /personal">
+          Personal
+</a>        <a href="/open-source" class="js-selected-navigation-item nav-item nav-item-opensource" data-ga-click="Header, click, Nav menu - item:opensource" data-selected-links="/open-source /open-source">
+          Open source
+</a>        <a href="/business" class="js-selected-navigation-item nav-item nav-item-business" data-ga-click="Header, click, Nav menu - item:business" data-selected-links="/business /business/partners /business/features /business/customers /business">
+          Business
+</a>        <a href="/explore" class="js-selected-navigation-item nav-item nav-item-explore" data-ga-click="Header, click, Nav menu - item:explore" data-selected-links="/explore /trending /trending/developers /integrations /integrations/feature/code /integrations/feature/collaborate /integrations/feature/ship /showcases /explore">
+          Explore
+</a>      </nav>
+
+      <div class="site-header-actions">
+            <a class="btn btn-primary site-header-actions-btn" href="/join?source=header-repo" data-ga-click="(Logged out) Header, clicked Sign up, text:sign-up">Sign up</a>
+          <a class="btn site-header-actions-btn mr-1" href="/login?return_to=%2Falexandrevicenzi%2FFlex%2Fblob%2Fmaster%2Fstatic%2Ffont-awesome%2Ffonts%2Ffontawesome-webfont.ttf" data-ga-click="(Logged out) Header, clicked Sign in, text:sign-in">Sign in</a>
+      </div>
+
+        <nav class="site-header-nav site-header-nav-secondary mr-md-3">
+          <a class="nav-item" href="/pricing">Pricing</a>
+          <a class="nav-item" href="/blog">Blog</a>
+          <a class="nav-item" href="https://help.github.com">Support</a>
+          <a class="nav-item header-search-link" href="https://github.com/search">Search GitHub</a>
+              <div class="header-search scoped-search site-scoped-search js-site-search" role="search">
+  <!-- '"` --><!-- </textarea></xmp> --></option></form><form accept-charset="UTF-8" action="/alexandrevicenzi/Flex/search" class="js-site-search-form" data-scoped-search-url="/alexandrevicenzi/Flex/search" data-unscoped-search-url="/search" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
+    <label class="form-control header-search-wrapper js-chromeless-input-container">
+      <div class="header-search-scope">This repository</div>
+      <input type="text"
+        class="form-control header-search-input js-site-search-focus js-site-search-field is-clearable"
+        data-hotkey="s"
+        name="q"
+        placeholder="Search"
+        aria-label="Search this repository"
+        data-unscoped-placeholder="Search GitHub"
+        data-scoped-placeholder="Search"
+        autocapitalize="off">
+    </label>
+</form></div>
+
+        </nav>
+    </div>
+  </div>
+</header>
+
+
+
+    <div id="start-of-content" class="accessibility-aid"></div>
+
+      <div id="js-flash-container">
+</div>
+
+
+    <div role="main">
+        <div itemscope itemtype="http://schema.org/SoftwareSourceCode">
+    <div id="js-repo-pjax-container" data-pjax-container>
+      
+<div class="pagehead repohead instapaper_ignore readability-menu experiment-repo-nav">
+  <div class="container repohead-details-container">
+
+    
+
+<ul class="pagehead-actions">
+
+  <li>
+      <a href="/login?return_to=%2Falexandrevicenzi%2FFlex"
+    class="btn btn-sm btn-with-count tooltipped tooltipped-n"
+    aria-label="You must be signed in to watch a repository" rel="nofollow">
+    <svg aria-hidden="true" class="octicon octicon-eye" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M8.06 2C3 2 0 8 0 8s3 6 8.06 6C13 14 16 8 16 8s-3-6-7.94-6zM8 12c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4zm2-4c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z"/></svg>
+    Watch
+  </a>
+  <a class="social-count" href="/alexandrevicenzi/Flex/watchers"
+     aria-label="19 users are watching this repository">
+    19
+  </a>
+
+  </li>
+
+  <li>
+      <a href="/login?return_to=%2Falexandrevicenzi%2FFlex"
+    class="btn btn-sm btn-with-count tooltipped tooltipped-n"
+    aria-label="You must be signed in to star a repository" rel="nofollow">
+    <svg aria-hidden="true" class="octicon octicon-star" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M14 6l-4.9-.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14 7 11.67 11.33 14l-.93-4.74z"/></svg>
+    Star
+  </a>
+
+    <a class="social-count js-social-count" href="/alexandrevicenzi/Flex/stargazers"
+      aria-label="188 users starred this repository">
+      188
+    </a>
+
+  </li>
+
+  <li>
+      <a href="/login?return_to=%2Falexandrevicenzi%2FFlex"
+        class="btn btn-sm btn-with-count tooltipped tooltipped-n"
+        aria-label="You must be signed in to fork a repository" rel="nofollow">
+        <svg aria-hidden="true" class="octicon octicon-repo-forked" height="16" version="1.1" viewBox="0 0 10 16" width="10"><path fill-rule="evenodd" d="M8 1a1.993 1.993 0 0 0-1 3.72V6L5 8 3 6V4.72A1.993 1.993 0 0 0 2 1a1.993 1.993 0 0 0-1 3.72V6.5l3 3v1.78A1.993 1.993 0 0 0 5 15a1.993 1.993 0 0 0 1-3.72V9.5l3-3V4.72A1.993 1.993 0 0 0 8 1zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3 10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3-10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg>
+        Fork
+      </a>
+
+    <a href="/alexandrevicenzi/Flex/network" class="social-count"
+       aria-label="114 users forked this repository">
+      114
+    </a>
+  </li>
+</ul>
+
+    <h1 class="public ">
+  <svg aria-hidden="true" class="octicon octicon-repo" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg>
+  <span class="author" itemprop="author"><a href="/alexandrevicenzi" class="url fn" rel="author">alexandrevicenzi</a></span><!--
+--><span class="path-divider">/</span><!--
+--><strong itemprop="name"><a href="/alexandrevicenzi/Flex" data-pjax="#js-repo-pjax-container">Flex</a></strong>
+
+</h1>
+
+  </div>
+  <div class="container">
+    
+<nav class="reponav js-repo-nav js-sidenav-container-pjax"
+     itemscope
+     itemtype="http://schema.org/BreadcrumbList"
+     role="navigation"
+     data-pjax="#js-repo-pjax-container">
+
+  <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+    <a href="/alexandrevicenzi/Flex" class="js-selected-navigation-item selected reponav-item" data-hotkey="g c" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches /alexandrevicenzi/Flex" itemprop="url">
+      <svg aria-hidden="true" class="octicon octicon-code" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M9.5 3L8 4.5 11.5 8 8 11.5 9.5 13 14 8 9.5 3zm-5 0L0 8l4.5 5L6 11.5 2.5 8 6 4.5 4.5 3z"/></svg>
+      <span itemprop="name">Code</span>
+      <meta itemprop="position" content="1">
+</a>  </span>
+
+    <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+      <a href="/alexandrevicenzi/Flex/issues" class="js-selected-navigation-item reponav-item" data-hotkey="g i" data-selected-links="repo_issues repo_labels repo_milestones /alexandrevicenzi/Flex/issues" itemprop="url">
+        <svg aria-hidden="true" class="octicon octicon-issue-opened" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"/></svg>
+        <span itemprop="name">Issues</span>
+        <span class="counter">3</span>
+        <meta itemprop="position" content="2">
+</a>    </span>
+
+  <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+    <a href="/alexandrevicenzi/Flex/pulls" class="js-selected-navigation-item reponav-item" data-hotkey="g p" data-selected-links="repo_pulls /alexandrevicenzi/Flex/pulls" itemprop="url">
+      <svg aria-hidden="true" class="octicon octicon-git-pull-request" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M11 11.28V5c-.03-.78-.34-1.47-.94-2.06C9.46 2.35 8.78 2.03 8 2H7V0L4 3l3 3V4h1c.27.02.48.11.69.31.21.2.3.42.31.69v6.28A1.993 1.993 0 0 0 10 15a1.993 1.993 0 0 0 1-3.72zm-1 2.92c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zM4 3c0-1.11-.89-2-2-2a1.993 1.993 0 0 0-1 3.72v6.56A1.993 1.993 0 0 0 2 15a1.993 1.993 0 0 0 1-3.72V4.72c.59-.34 1-.98 1-1.72zm-.8 10c0 .66-.55 1.2-1.2 1.2-.65 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg>
+      <span itemprop="name">Pull requests</span>
+      <span class="counter">2</span>
+      <meta itemprop="position" content="3">
+</a>  </span>
+
+  <a href="/alexandrevicenzi/Flex/projects" class="js-selected-navigation-item reponav-item" data-selected-links="repo_projects new_repo_project repo_project /alexandrevicenzi/Flex/projects">
+    <svg aria-hidden="true" class="octicon octicon-project" height="16" version="1.1" viewBox="0 0 15 16" width="15"><path fill-rule="evenodd" d="M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h13a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1z"/></svg>
+    Projects
+    <span class="counter">1</span>
+</a>
+    <a href="/alexandrevicenzi/Flex/wiki" class="js-selected-navigation-item reponav-item" data-hotkey="g w" data-selected-links="repo_wiki /alexandrevicenzi/Flex/wiki">
+      <svg aria-hidden="true" class="octicon octicon-book" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M3 5h4v1H3V5zm0 3h4V7H3v1zm0 2h4V9H3v1zm11-5h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9zm2-6v9c0 .55-.45 1-1 1H9.5l-1 1-1-1H2c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h5.5l1 1 1-1H15c.55 0 1 .45 1 1zm-8 .5L7.5 3H2v9h6V3.5zm7-.5H9.5l-.5.5V12h6V3z"/></svg>
+      Wiki
+</a>
+
+  <a href="/alexandrevicenzi/Flex/pulse" class="js-selected-navigation-item reponav-item" data-selected-links="pulse /alexandrevicenzi/Flex/pulse">
+    <svg aria-hidden="true" class="octicon octicon-pulse" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M11.5 8L8.8 5.4 6.6 8.5 5.5 1.6 2.38 8H0v2h3.6l.9-1.8.9 5.4L9 8.5l1.6 1.5H14V8z"/></svg>
+    Pulse
+</a>
+  <a href="/alexandrevicenzi/Flex/graphs" class="js-selected-navigation-item reponav-item" data-selected-links="repo_graphs repo_contributors /alexandrevicenzi/Flex/graphs">
+    <svg aria-hidden="true" class="octicon octicon-graph" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M16 14v1H0V0h1v14h15zM5 13H3V8h2v5zm4 0H7V3h2v10zm4 0h-2V6h2v7z"/></svg>
+    Graphs
+</a>
+
+</nav>
+
+  </div>
+</div>
+
+<div class="container new-discussion-timeline experiment-repo-nav">
+  <div class="repository-content">
+
+    
+
+<a href="/alexandrevicenzi/Flex/blob/51e7808bde0cf455934064ceea1284ded99b3b26/static/font-awesome/fonts/fontawesome-webfont.ttf" class="d-none js-permalink-shortcut" data-hotkey="y">Permalink</a>
+
+<!-- blob contrib key: blob_contributors:v21:0750bf7b09c521864d59ca42b191c8d0 -->
+
+<div class="file-navigation js-zeroclipboard-container">
+  
+<div class="select-menu branch-select-menu js-menu-container js-select-menu float-left">
+  <button class="btn btn-sm select-menu-button js-menu-target css-truncate" data-hotkey="w"
+    
+    type="button" aria-label="Switch branches or tags" tabindex="0" aria-haspopup="true">
+    <i>Branch:</i>
+    <span class="js-select-button css-truncate-target">master</span>
+  </button>
+
+  <div class="select-menu-modal-holder js-menu-content js-navigation-container" data-pjax aria-hidden="true">
+
+    <div class="select-menu-modal">
+      <div class="select-menu-header">
+        <svg aria-label="Close" class="octicon octicon-x js-menu-close" height="16" role="img" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48z"/></svg>
+        <span class="select-menu-title">Switch branches/tags</span>
+      </div>
+
+      <div class="select-menu-filters">
+        <div class="select-menu-text-filter">
+          <input type="text" aria-label="Filter branches/tags" id="context-commitish-filter-field" class="form-control js-filterable-field js-navigation-enable" placeholder="Filter branches/tags">
+        </div>
+        <div class="select-menu-tabs">
+          <ul>
+            <li class="select-menu-tab">
+              <a href="#" data-tab-filter="branches" data-filter-placeholder="Filter branches/tags" class="js-select-menu-tab" role="tab">Branches</a>
+            </li>
+            <li class="select-menu-tab">
+              <a href="#" data-tab-filter="tags" data-filter-placeholder="Find a tag…" class="js-select-menu-tab" role="tab">Tags</a>
+            </li>
+          </ul>
+        </div>
+      </div>
+
+      <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="branches" role="menu">
+
+        <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring">
+
+
+            <a class="select-menu-item js-navigation-item js-navigation-open "
+               href="/alexandrevicenzi/Flex/blob/adsense/static/font-awesome/fonts/fontawesome-webfont.ttf"
+               data-name="adsense"
+               data-skip-pjax="true"
+               rel="nofollow">
+              <svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
+              <span class="select-menu-item-text css-truncate-target js-select-menu-filter-text">
+                adsense
+              </span>
+            </a>
+            <a class="select-menu-item js-navigation-item js-navigation-open selected"
+               href="/alexandrevicenzi/Flex/blob/master/static/font-awesome/fonts/fontawesome-webfont.ttf"
+               data-name="master"
+               data-skip-pjax="true"
+               rel="nofollow">
+              <svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
+              <span class="select-menu-item-text css-truncate-target js-select-menu-filter-text">
+                master
+              </span>
+            </a>
+        </div>
+
+          <div class="select-menu-no-results">Nothing to show</div>
+      </div>
+
+      <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="tags">
+        <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring">
+
+
+            <a class="select-menu-item js-navigation-item js-navigation-open "
+              href="/alexandrevicenzi/Flex/tree/v2.1.0/static/font-awesome/fonts/fontawesome-webfont.ttf"
+              data-name="v2.1.0"
+              data-skip-pjax="true"
+              rel="nofollow">
+              <svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
+              <span class="select-menu-item-text css-truncate-target" title="v2.1.0">
+                v2.1.0
+              </span>
+            </a>
+            <a class="select-menu-item js-navigation-item js-navigation-open "
+              href="/alexandrevicenzi/Flex/tree/v2.0/static/font-awesome/fonts/fontawesome-webfont.ttf"
+              data-name="v2.0"
+              data-skip-pjax="true"
+              rel="nofollow">
+              <svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
+              <span class="select-menu-item-text css-truncate-target" title="v2.0">
+                v2.0
+              </span>
+            </a>
+            <a class="select-menu-item js-navigation-item js-navigation-open "
+              href="/alexandrevicenzi/Flex/tree/v1.2/static/font-awesome/fonts/fontawesome-webfont.ttf"
+              data-name="v1.2"
+              data-skip-pjax="true"
+              rel="nofollow">
+              <svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
+              <span class="select-menu-item-text css-truncate-target" title="v1.2">
+                v1.2
+              </span>
+            </a>
+            <a class="select-menu-item js-navigation-item js-navigation-open "
+              href="/alexandrevicenzi/Flex/tree/v1.1.1/static/font-awesome/fonts/fontawesome-webfont.ttf"
+              data-name="v1.1.1"
+              data-skip-pjax="true"
+              rel="nofollow">
+              <svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
+              <span class="select-menu-item-text css-truncate-target" title="v1.1.1">
+                v1.1.1
+              </span>
+            </a>
+            <a class="select-menu-item js-navigation-item js-navigation-open "
+              href="/alexandrevicenzi/Flex/tree/v1.1/static/font-awesome/fonts/fontawesome-webfont.ttf"
+              data-name="v1.1"
+              data-skip-pjax="true"
+              rel="nofollow">
+              <svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
+              <span class="select-menu-item-text css-truncate-target" title="v1.1">
+                v1.1
+              </span>
+            </a>
+            <a class="select-menu-item js-navigation-item js-navigation-open "
+              href="/alexandrevicenzi/Flex/tree/v1.0/static/font-awesome/fonts/fontawesome-webfont.ttf"
+              data-name="v1.0"
+              data-skip-pjax="true"
+              rel="nofollow">
+              <svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
+              <span class="select-menu-item-text css-truncate-target" title="v1.0">
+                v1.0
+              </span>
+            </a>
+        </div>
+
+        <div class="select-menu-no-results">Nothing to show</div>
+      </div>
+
+    </div>
+  </div>
+</div>
+
+  <div class="BtnGroup float-right">
+    <a href="/alexandrevicenzi/Flex/find/master"
+          class="js-pjax-capture-input btn btn-sm BtnGroup-item"
+          data-pjax
+          data-hotkey="t">
+      Find file
+    </a>
+    <button aria-label="Copy file path to clipboard" class="js-zeroclipboard btn btn-sm BtnGroup-item tooltipped tooltipped-s" data-copied-hint="Copied!" type="button">Copy path</button>
+  </div>
+  <div class="breadcrumb js-zeroclipboard-target">
+    <span class="repo-root js-repo-root"><span class="js-path-segment"><a href="/alexandrevicenzi/Flex"><span>Flex</span></a></span></span><span class="separator">/</span><span class="js-path-segment"><a href="/alexandrevicenzi/Flex/tree/master/static"><span>static</span></a></span><span class="separator">/</span><span class="js-path-segment"><a href="/alexandrevicenzi/Flex/tree/master/static/font-awesome"><span>font-awesome</span></a></span><span class="separator">/</span><span class="js-path-segment"><a href="/alexandrevicenzi/Flex/tree/master/static/font-awesome/fonts"><span>fonts</span></a></span><span class="separator">/</span><strong class="final-path">fontawesome-webfont.ttf</strong>
+  </div>
+</div>
+
+<include-fragment class="commit-tease" src="/alexandrevicenzi/Flex/contributors/master/static/font-awesome/fonts/fontawesome-webfont.ttf">
+  <div>
+    Fetching contributors&hellip;
+  </div>
+
+  <div class="commit-tease-contributors">
+    <img alt="" class="loader-loading float-left" height="16" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32-EAF2F5.gif" width="16" />
+    <span class="loader-error">Cannot retrieve contributors at this time</span>
+  </div>
+</include-fragment>
+
+<div class="file">
+  <div class="file-header">
+  <div class="file-actions">
+
+    <div class="BtnGroup">
+      <a href="/alexandrevicenzi/Flex/raw/master/static/font-awesome/fonts/fontawesome-webfont.ttf" class="btn btn-sm BtnGroup-item" id="raw-url">Download</a>
+      <a href="/alexandrevicenzi/Flex/commits/master/static/font-awesome/fonts/fontawesome-webfont.ttf" class="btn btn-sm BtnGroup-item" rel="nofollow">History</a>
+    </div>
+
+
+        <!-- '"` --><!-- </textarea></xmp> --></option></form><form accept-charset="UTF-8" action="/alexandrevicenzi/Flex/delete/master/static/font-awesome/fonts/fontawesome-webfont.ttf" class="inline-form" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="OR7r6iPwKxIsWMR0XaBcn697CCgGmeFWEuECf8/GRfWkJjTt9EtckKTn6VjZSube+gjrHyggQg6Mo8EnUYxuNQ==" /></div>
+          <button class="btn-octicon btn-octicon-danger tooltipped tooltipped-nw" type="submit"
+            aria-label="You must be signed in to make or propose changes" data-disable-with>
+            <svg aria-hidden="true" class="octicon octicon-trashcan" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M11 2H9c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1H2c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1v9c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-1 12H3V5h1v8h1V5h1v8h1V5h1v8h1V5h1v9zm1-10H2V3h9v1z"/></svg>
+          </button>
+</form>  </div>
+
+  <div class="file-info">
+    162 KB
+  </div>
+</div>
+
+  
+
+  <div itemprop="text" class="blob-wrapper data type-text">
+      <div class="image">
+          <a href="/alexandrevicenzi/Flex/blob/master/static/font-awesome/fonts/fontawesome-webfont.ttf?raw=true">View Raw</a>
+      </div>
+  </div>
+
+</div>
+
+<button type="button" data-facebox="#jump-to-line" data-facebox-class="linejump" data-hotkey="l" class="d-none">Jump to Line</button>
+<div id="jump-to-line" style="display:none">
+  <!-- '"` --><!-- </textarea></xmp> --></option></form><form accept-charset="UTF-8" action="" class="js-jump-to-line-form" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
+    <input class="form-control linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line&hellip;" aria-label="Jump to line" autofocus>
+    <button type="submit" class="btn">Go</button>
+</form></div>
+
+  </div>
+  <div class="modal-backdrop js-touch-events"></div>
+</div>
+
+
+    </div>
+  </div>
+
+    </div>
+
+        <div class="container site-footer-container">
+  <div class="site-footer" role="contentinfo">
+    <ul class="site-footer-links float-right">
+        <li><a href="https://github.com/contact" data-ga-click="Footer, go to contact, text:contact">Contact GitHub</a></li>
+      <li><a href="https://developer.github.com" data-ga-click="Footer, go to api, text:api">API</a></li>
+      <li><a href="https://training.github.com" data-ga-click="Footer, go to training, text:training">Training</a></li>
+      <li><a href="https://shop.github.com" data-ga-click="Footer, go to shop, text:shop">Shop</a></li>
+        <li><a href="https://github.com/blog" data-ga-click="Footer, go to blog, text:blog">Blog</a></li>
+        <li><a href="https://github.com/about" data-ga-click="Footer, go to about, text:about">About</a></li>
+
+    </ul>
+
+    <a href="https://github.com" aria-label="Homepage" class="site-footer-mark" title="GitHub">
+      <svg aria-hidden="true" class="octicon octicon-mark-github" height="24" version="1.1" viewBox="0 0 16 16" width="24"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
+</a>
+    <ul class="site-footer-links">
+      <li>&copy; 2017 <span title="0.05758s from github-fe136-cp1-prd.iad.github.net">GitHub</span>, Inc.</li>
+        <li><a href="https://github.com/site/terms" data-ga-click="Footer, go to terms, text:terms">Terms</a></li>
+        <li><a href="https://github.com/site/privacy" data-ga-click="Footer, go to privacy, text:privacy">Privacy</a></li>
+        <li><a href="https://github.com/security" data-ga-click="Footer, go to security, text:security">Security</a></li>
+        <li><a href="https://status.github.com/" data-ga-click="Footer, go to status, text:status">Status</a></li>
+        <li><a href="https://help.github.com" data-ga-click="Footer, go to help, text:help">Help</a></li>
+    </ul>
+  </div>
+</div>
+
+
+
+    
+
+    <div id="ajax-error-message" class="ajax-error-message flash flash-error">
+      <svg aria-hidden="true" class="octicon octicon-alert" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M8.865 1.52c-.18-.31-.51-.5-.87-.5s-.69.19-.87.5L.275 13.5c-.18.31-.18.69 0 1 .19.31.52.5.87.5h13.7c.36 0 .69-.19.86-.5.17-.31.18-.69.01-1L8.865 1.52zM8.995 13h-2v-2h2v2zm0-3h-2V6h2v4z"/></svg>
+      <button type="button" class="flash-close js-flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
+        <svg aria-hidden="true" class="octicon octicon-x" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48z"/></svg>
+      </button>
+      You can't perform that action at this time.
+    </div>
+
+
+      <script crossorigin="anonymous" src="https://assets-cdn.github.com/assets/compat-30ce4c86c27f88c3d1b4eb03efda59b45d8d7c871880dee0b8f73d5ef1b25fdf.js"></script>
+      <script crossorigin="anonymous" src="https://assets-cdn.github.com/assets/frameworks-3b765f1b559374b57faf3815a186f3cfc3af05d277e07c93c6a3e624585b9196.js"></script>
+      <script async="async" crossorigin="anonymous" src="https://assets-cdn.github.com/assets/github-d1901dcdb03cb655cdb29e06038afc729d470152de7d060c1b0c6eb9136f7114.js"></script>
+      
+      
+      
+      
+    <div class="js-stale-session-flash stale-session-flash flash flash-warn flash-banner d-none">
+      <svg aria-hidden="true" class="octicon octicon-alert" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M8.865 1.52c-.18-.31-.51-.5-.87-.5s-.69.19-.87.5L.275 13.5c-.18.31-.18.69 0 1 .19.31.52.5.87.5h13.7c.36 0 .69-.19.86-.5.17-.31.18-.69.01-1L8.865 1.52zM8.995 13h-2v-2h2v2zm0-3h-2V6h2v4z"/></svg>
+      <span class="signed-in-tab-flash">You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span>
+      <span class="signed-out-tab-flash">You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span>
+    </div>
+    <div class="facebox" id="facebox" style="display:none;">
+  <div class="facebox-popup">
+    <div class="facebox-content" role="dialog" aria-labelledby="facebox-header" aria-describedby="facebox-description">
+    </div>
+    <button type="button" class="facebox-close js-facebox-close" aria-label="Close modal">
+      <svg aria-hidden="true" class="octicon octicon-x" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48z"/></svg>
+    </button>
+  </div>
+</div>
+
+  </body>
+</html>
+
diff --git a/fonts/fontawesome-webfont.woff b/fonts/fontawesome-webfont.woff
new file mode 100644 (file)
index 0000000..a4511ea
--- /dev/null
@@ -0,0 +1,564 @@
+
+
+
+
+<!DOCTYPE html>
+<html lang="en" class="">
+  <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# object: http://ogp.me/ns/object# article: http://ogp.me/ns/article# profile: http://ogp.me/ns/profile#">
+    <meta charset='utf-8'>
+    
+
+    <link crossorigin="anonymous" href="https://assets-cdn.github.com/assets/frameworks-1e23a207d51b99415349a8278e4e8425a3d5decf40d0b7250b147aaeefeac337.css" media="all" rel="stylesheet" />
+    <link crossorigin="anonymous" href="https://assets-cdn.github.com/assets/github-a6be22a2877ee0ae350520df78941ecf7599019b31fded938ef98cd11d20ae48.css" media="all" rel="stylesheet" />
+    
+    
+    <link crossorigin="anonymous" href="https://assets-cdn.github.com/assets/site-9e0f35305336555b58884b07a160747fc1f6dbd79e13e18820a598a9abcb2662.css" media="all" rel="stylesheet" />
+    
+
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta http-equiv="Content-Language" content="en">
+    <meta name="viewport" content="width=device-width">
+    
+    <title>Flex/fontawesome-webfont.woff at master · alexandrevicenzi/Flex · GitHub</title>
+    <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">
+    <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
+    <link rel="apple-touch-icon" href="/apple-touch-icon.png">
+    <link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon-57x57.png">
+    <link rel="apple-touch-icon" sizes="60x60" href="/apple-touch-icon-60x60.png">
+    <link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-72x72.png">
+    <link rel="apple-touch-icon" sizes="76x76" href="/apple-touch-icon-76x76.png">
+    <link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon-114x114.png">
+    <link rel="apple-touch-icon" sizes="120x120" href="/apple-touch-icon-120x120.png">
+    <link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144x144.png">
+    <link rel="apple-touch-icon" sizes="152x152" href="/apple-touch-icon-152x152.png">
+    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon-180x180.png">
+    <meta property="fb:app_id" content="1401488693436528">
+
+      <meta content="https://avatars2.githubusercontent.com/u/2637672?v=3&amp;s=400" name="twitter:image:src" /><meta content="@github" name="twitter:site" /><meta content="summary" name="twitter:card" /><meta content="alexandrevicenzi/Flex" name="twitter:title" /><meta content="Flex - The minimalist Pelican theme." name="twitter:description" />
+      <meta content="https://avatars2.githubusercontent.com/u/2637672?v=3&amp;s=400" property="og:image" /><meta content="GitHub" property="og:site_name" /><meta content="object" property="og:type" /><meta content="alexandrevicenzi/Flex" property="og:title" /><meta content="https://github.com/alexandrevicenzi/Flex" property="og:url" /><meta content="Flex - The minimalist Pelican theme." property="og:description" />
+      <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">
+    <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">
+    <link rel="assets" href="https://assets-cdn.github.com/">
+    
+    <meta name="pjax-timeout" content="1000">
+    
+    <meta name="request-id" content="D42FF8D7:6B5A:2B20D0F:586A432A" data-pjax-transient>
+
+    <meta name="msapplication-TileImage" content="/windows-tile.png">
+    <meta name="msapplication-TileColor" content="#ffffff">
+    <meta name="selected-link" value="repo_source" data-pjax-transient>
+
+    <meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU">
+<meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA">
+    <meta name="google-analytics" content="UA-3769691-2">
+
+<meta content="collector.githubapp.com" name="octolytics-host" /><meta content="github" name="octolytics-app-id" /><meta content="D42FF8D7:6B5A:2B20D0F:586A432A" name="octolytics-dimension-request_id" />
+<meta content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-pjax-transient="true" name="analytics-location" />
+
+
+
+  <meta class="js-ga-set" name="dimension1" content="Logged Out">
+
+
+
+        <meta name="hostname" content="github.com">
+    <meta name="user-login" content="">
+
+        <meta name="expected-hostname" content="github.com">
+      <meta name="js-proxy-site-detection-payload" content="NTlhZGI4OWVlNTdhNjJjZWJkZGU0ZWJjZmI0NDVjYjI5MjQyMWRmNjI4M2Q0NzdkNmVhZWRiY2IxMjhhMjcxNHx7InJlbW90ZV9hZGRyZXNzIjoiMjEyLjQ3LjI0OC4yMTUiLCJyZXF1ZXN0X2lkIjoiRDQyRkY4RDc6NkI1QToyQjIwRDBGOjU4NkE0MzJBIiwidGltZXN0YW1wIjoxNDgzMzU5MDE4LCJob3N0IjoiZ2l0aHViLmNvbSJ9">
+
+
+      <link rel="mask-icon" href="https://assets-cdn.github.com/pinned-octocat.svg" color="#000000">
+      <link rel="icon" type="image/x-icon" href="https://assets-cdn.github.com/favicon.ico">
+
+    <meta name="html-safe-nonce" content="cd9c291bab42b31f683cdaed18a15aec60a47815">
+
+    <meta http-equiv="x-pjax-version" content="37ce4594845dbaa11557f6b8abfabd1d">
+    
+
+      
+  <meta name="description" content="Flex - The minimalist Pelican theme.">
+  <meta name="go-import" content="github.com/alexandrevicenzi/Flex git https://github.com/alexandrevicenzi/Flex.git">
+
+  <meta content="2637672" name="octolytics-dimension-user_id" /><meta content="alexandrevicenzi" name="octolytics-dimension-user_login" /><meta content="39293337" name="octolytics-dimension-repository_id" /><meta content="alexandrevicenzi/Flex" name="octolytics-dimension-repository_nwo" /><meta content="true" name="octolytics-dimension-repository_public" /><meta content="false" name="octolytics-dimension-repository_is_fork" /><meta content="39293337" name="octolytics-dimension-repository_network_root_id" /><meta content="alexandrevicenzi/Flex" name="octolytics-dimension-repository_network_root_nwo" />
+  <link href="https://github.com/alexandrevicenzi/Flex/commits/master.atom" rel="alternate" title="Recent Commits to Flex:master" type="application/atom+xml">
+
+
+      <link rel="canonical" href="https://github.com/alexandrevicenzi/Flex/blob/master/static/font-awesome/fonts/fontawesome-webfont.woff" data-pjax-transient>
+  </head>
+
+
+  <body class="logged-out  env-production  vis-public page-blob">
+    <div id="js-pjax-loader-bar" class="pjax-loader-bar"><div class="progress"></div></div>
+    <a href="#start-of-content" tabindex="1" class="accessibility-aid js-skip-to-content">Skip to content</a>
+
+    
+    
+    
+
+
+
+          <header class="site-header js-details-container" role="banner">
+  <div class="container-responsive">
+    <a class="header-logo-invertocat" href="https://github.com/" aria-label="Homepage" data-ga-click="(Logged out) Header, go to homepage, icon:logo-wordmark">
+      <svg aria-hidden="true" class="octicon octicon-mark-github" height="32" version="1.1" viewBox="0 0 16 16" width="32"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
+    </a>
+
+    <button class="btn-link float-right site-header-toggle js-details-target" type="button" aria-label="Toggle navigation">
+      <svg aria-hidden="true" class="octicon octicon-three-bars" height="24" version="1.1" viewBox="0 0 12 16" width="18"><path fill-rule="evenodd" d="M11.41 9H.59C0 9 0 8.59 0 8c0-.59 0-1 .59-1H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zm0-4H.59C0 5 0 4.59 0 4c0-.59 0-1 .59-1H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zM.59 11H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1H.59C0 13 0 12.59 0 12c0-.59 0-1 .59-1z"/></svg>
+    </button>
+
+    <div class="site-header-menu">
+      <nav class="site-header-nav site-header-nav-main">
+        <a href="/personal" class="js-selected-navigation-item nav-item nav-item-personal" data-ga-click="Header, click, Nav menu - item:personal" data-selected-links="/personal /personal">
+          Personal
+</a>        <a href="/open-source" class="js-selected-navigation-item nav-item nav-item-opensource" data-ga-click="Header, click, Nav menu - item:opensource" data-selected-links="/open-source /open-source">
+          Open source
+</a>        <a href="/business" class="js-selected-navigation-item nav-item nav-item-business" data-ga-click="Header, click, Nav menu - item:business" data-selected-links="/business /business/partners /business/features /business/customers /business">
+          Business
+</a>        <a href="/explore" class="js-selected-navigation-item nav-item nav-item-explore" data-ga-click="Header, click, Nav menu - item:explore" data-selected-links="/explore /trending /trending/developers /integrations /integrations/feature/code /integrations/feature/collaborate /integrations/feature/ship /showcases /explore">
+          Explore
+</a>      </nav>
+
+      <div class="site-header-actions">
+            <a class="btn btn-primary site-header-actions-btn" href="/join?source=header-repo" data-ga-click="(Logged out) Header, clicked Sign up, text:sign-up">Sign up</a>
+          <a class="btn site-header-actions-btn mr-1" href="/login?return_to=%2Falexandrevicenzi%2FFlex%2Fblob%2Fmaster%2Fstatic%2Ffont-awesome%2Ffonts%2Ffontawesome-webfont.woff" data-ga-click="(Logged out) Header, clicked Sign in, text:sign-in">Sign in</a>
+      </div>
+
+        <nav class="site-header-nav site-header-nav-secondary mr-md-3">
+          <a class="nav-item" href="/pricing">Pricing</a>
+          <a class="nav-item" href="/blog">Blog</a>
+          <a class="nav-item" href="https://help.github.com">Support</a>
+          <a class="nav-item header-search-link" href="https://github.com/search">Search GitHub</a>
+              <div class="header-search scoped-search site-scoped-search js-site-search" role="search">
+  <!-- '"` --><!-- </textarea></xmp> --></option></form><form accept-charset="UTF-8" action="/alexandrevicenzi/Flex/search" class="js-site-search-form" data-scoped-search-url="/alexandrevicenzi/Flex/search" data-unscoped-search-url="/search" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
+    <label class="form-control header-search-wrapper js-chromeless-input-container">
+      <div class="header-search-scope">This repository</div>
+      <input type="text"
+        class="form-control header-search-input js-site-search-focus js-site-search-field is-clearable"
+        data-hotkey="s"
+        name="q"
+        placeholder="Search"
+        aria-label="Search this repository"
+        data-unscoped-placeholder="Search GitHub"
+        data-scoped-placeholder="Search"
+        autocapitalize="off">
+    </label>
+</form></div>
+
+        </nav>
+    </div>
+  </div>
+</header>
+
+
+
+    <div id="start-of-content" class="accessibility-aid"></div>
+
+      <div id="js-flash-container">
+</div>
+
+
+    <div role="main">
+        <div itemscope itemtype="http://schema.org/SoftwareSourceCode">
+    <div id="js-repo-pjax-container" data-pjax-container>
+      
+<div class="pagehead repohead instapaper_ignore readability-menu experiment-repo-nav">
+  <div class="container repohead-details-container">
+
+    
+
+<ul class="pagehead-actions">
+
+  <li>
+      <a href="/login?return_to=%2Falexandrevicenzi%2FFlex"
+    class="btn btn-sm btn-with-count tooltipped tooltipped-n"
+    aria-label="You must be signed in to watch a repository" rel="nofollow">
+    <svg aria-hidden="true" class="octicon octicon-eye" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M8.06 2C3 2 0 8 0 8s3 6 8.06 6C13 14 16 8 16 8s-3-6-7.94-6zM8 12c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4zm2-4c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z"/></svg>
+    Watch
+  </a>
+  <a class="social-count" href="/alexandrevicenzi/Flex/watchers"
+     aria-label="19 users are watching this repository">
+    19
+  </a>
+
+  </li>
+
+  <li>
+      <a href="/login?return_to=%2Falexandrevicenzi%2FFlex"
+    class="btn btn-sm btn-with-count tooltipped tooltipped-n"
+    aria-label="You must be signed in to star a repository" rel="nofollow">
+    <svg aria-hidden="true" class="octicon octicon-star" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M14 6l-4.9-.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14 7 11.67 11.33 14l-.93-4.74z"/></svg>
+    Star
+  </a>
+
+    <a class="social-count js-social-count" href="/alexandrevicenzi/Flex/stargazers"
+      aria-label="188 users starred this repository">
+      188
+    </a>
+
+  </li>
+
+  <li>
+      <a href="/login?return_to=%2Falexandrevicenzi%2FFlex"
+        class="btn btn-sm btn-with-count tooltipped tooltipped-n"
+        aria-label="You must be signed in to fork a repository" rel="nofollow">
+        <svg aria-hidden="true" class="octicon octicon-repo-forked" height="16" version="1.1" viewBox="0 0 10 16" width="10"><path fill-rule="evenodd" d="M8 1a1.993 1.993 0 0 0-1 3.72V6L5 8 3 6V4.72A1.993 1.993 0 0 0 2 1a1.993 1.993 0 0 0-1 3.72V6.5l3 3v1.78A1.993 1.993 0 0 0 5 15a1.993 1.993 0 0 0 1-3.72V9.5l3-3V4.72A1.993 1.993 0 0 0 8 1zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3 10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3-10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg>
+        Fork
+      </a>
+
+    <a href="/alexandrevicenzi/Flex/network" class="social-count"
+       aria-label="114 users forked this repository">
+      114
+    </a>
+  </li>
+</ul>
+
+    <h1 class="public ">
+  <svg aria-hidden="true" class="octicon octicon-repo" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg>
+  <span class="author" itemprop="author"><a href="/alexandrevicenzi" class="url fn" rel="author">alexandrevicenzi</a></span><!--
+--><span class="path-divider">/</span><!--
+--><strong itemprop="name"><a href="/alexandrevicenzi/Flex" data-pjax="#js-repo-pjax-container">Flex</a></strong>
+
+</h1>
+
+  </div>
+  <div class="container">
+    
+<nav class="reponav js-repo-nav js-sidenav-container-pjax"
+     itemscope
+     itemtype="http://schema.org/BreadcrumbList"
+     role="navigation"
+     data-pjax="#js-repo-pjax-container">
+
+  <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+    <a href="/alexandrevicenzi/Flex" class="js-selected-navigation-item selected reponav-item" data-hotkey="g c" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches /alexandrevicenzi/Flex" itemprop="url">
+      <svg aria-hidden="true" class="octicon octicon-code" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M9.5 3L8 4.5 11.5 8 8 11.5 9.5 13 14 8 9.5 3zm-5 0L0 8l4.5 5L6 11.5 2.5 8 6 4.5 4.5 3z"/></svg>
+      <span itemprop="name">Code</span>
+      <meta itemprop="position" content="1">
+</a>  </span>
+
+    <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+      <a href="/alexandrevicenzi/Flex/issues" class="js-selected-navigation-item reponav-item" data-hotkey="g i" data-selected-links="repo_issues repo_labels repo_milestones /alexandrevicenzi/Flex/issues" itemprop="url">
+        <svg aria-hidden="true" class="octicon octicon-issue-opened" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"/></svg>
+        <span itemprop="name">Issues</span>
+        <span class="counter">3</span>
+        <meta itemprop="position" content="2">
+</a>    </span>
+
+  <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+    <a href="/alexandrevicenzi/Flex/pulls" class="js-selected-navigation-item reponav-item" data-hotkey="g p" data-selected-links="repo_pulls /alexandrevicenzi/Flex/pulls" itemprop="url">
+      <svg aria-hidden="true" class="octicon octicon-git-pull-request" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M11 11.28V5c-.03-.78-.34-1.47-.94-2.06C9.46 2.35 8.78 2.03 8 2H7V0L4 3l3 3V4h1c.27.02.48.11.69.31.21.2.3.42.31.69v6.28A1.993 1.993 0 0 0 10 15a1.993 1.993 0 0 0 1-3.72zm-1 2.92c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zM4 3c0-1.11-.89-2-2-2a1.993 1.993 0 0 0-1 3.72v6.56A1.993 1.993 0 0 0 2 15a1.993 1.993 0 0 0 1-3.72V4.72c.59-.34 1-.98 1-1.72zm-.8 10c0 .66-.55 1.2-1.2 1.2-.65 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg>
+      <span itemprop="name">Pull requests</span>
+      <span class="counter">2</span>
+      <meta itemprop="position" content="3">
+</a>  </span>
+
+  <a href="/alexandrevicenzi/Flex/projects" class="js-selected-navigation-item reponav-item" data-selected-links="repo_projects new_repo_project repo_project /alexandrevicenzi/Flex/projects">
+    <svg aria-hidden="true" class="octicon octicon-project" height="16" version="1.1" viewBox="0 0 15 16" width="15"><path fill-rule="evenodd" d="M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h13a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1z"/></svg>
+    Projects
+    <span class="counter">1</span>
+</a>
+    <a href="/alexandrevicenzi/Flex/wiki" class="js-selected-navigation-item reponav-item" data-hotkey="g w" data-selected-links="repo_wiki /alexandrevicenzi/Flex/wiki">
+      <svg aria-hidden="true" class="octicon octicon-book" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M3 5h4v1H3V5zm0 3h4V7H3v1zm0 2h4V9H3v1zm11-5h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9zm2-6v9c0 .55-.45 1-1 1H9.5l-1 1-1-1H2c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h5.5l1 1 1-1H15c.55 0 1 .45 1 1zm-8 .5L7.5 3H2v9h6V3.5zm7-.5H9.5l-.5.5V12h6V3z"/></svg>
+      Wiki
+</a>
+
+  <a href="/alexandrevicenzi/Flex/pulse" class="js-selected-navigation-item reponav-item" data-selected-links="pulse /alexandrevicenzi/Flex/pulse">
+    <svg aria-hidden="true" class="octicon octicon-pulse" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M11.5 8L8.8 5.4 6.6 8.5 5.5 1.6 2.38 8H0v2h3.6l.9-1.8.9 5.4L9 8.5l1.6 1.5H14V8z"/></svg>
+    Pulse
+</a>
+  <a href="/alexandrevicenzi/Flex/graphs" class="js-selected-navigation-item reponav-item" data-selected-links="repo_graphs repo_contributors /alexandrevicenzi/Flex/graphs">
+    <svg aria-hidden="true" class="octicon octicon-graph" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M16 14v1H0V0h1v14h15zM5 13H3V8h2v5zm4 0H7V3h2v10zm4 0h-2V6h2v7z"/></svg>
+    Graphs
+</a>
+
+</nav>
+
+  </div>
+</div>
+
+<div class="container new-discussion-timeline experiment-repo-nav">
+  <div class="repository-content">
+
+    
+
+<a href="/alexandrevicenzi/Flex/blob/51e7808bde0cf455934064ceea1284ded99b3b26/static/font-awesome/fonts/fontawesome-webfont.woff" class="d-none js-permalink-shortcut" data-hotkey="y">Permalink</a>
+
+<!-- blob contrib key: blob_contributors:v21:9c9a935649e1340642dbebd35d07b02f -->
+
+<div class="file-navigation js-zeroclipboard-container">
+  
+<div class="select-menu branch-select-menu js-menu-container js-select-menu float-left">
+  <button class="btn btn-sm select-menu-button js-menu-target css-truncate" data-hotkey="w"
+    
+    type="button" aria-label="Switch branches or tags" tabindex="0" aria-haspopup="true">
+    <i>Branch:</i>
+    <span class="js-select-button css-truncate-target">master</span>
+  </button>
+
+  <div class="select-menu-modal-holder js-menu-content js-navigation-container" data-pjax aria-hidden="true">
+
+    <div class="select-menu-modal">
+      <div class="select-menu-header">
+        <svg aria-label="Close" class="octicon octicon-x js-menu-close" height="16" role="img" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48z"/></svg>
+        <span class="select-menu-title">Switch branches/tags</span>
+      </div>
+
+      <div class="select-menu-filters">
+        <div class="select-menu-text-filter">
+          <input type="text" aria-label="Filter branches/tags" id="context-commitish-filter-field" class="form-control js-filterable-field js-navigation-enable" placeholder="Filter branches/tags">
+        </div>
+        <div class="select-menu-tabs">
+          <ul>
+            <li class="select-menu-tab">
+              <a href="#" data-tab-filter="branches" data-filter-placeholder="Filter branches/tags" class="js-select-menu-tab" role="tab">Branches</a>
+            </li>
+            <li class="select-menu-tab">
+              <a href="#" data-tab-filter="tags" data-filter-placeholder="Find a tag…" class="js-select-menu-tab" role="tab">Tags</a>
+            </li>
+          </ul>
+        </div>
+      </div>
+
+      <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="branches" role="menu">
+
+        <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring">
+
+
+            <a class="select-menu-item js-navigation-item js-navigation-open "
+               href="/alexandrevicenzi/Flex/blob/adsense/static/font-awesome/fonts/fontawesome-webfont.woff"
+               data-name="adsense"
+               data-skip-pjax="true"
+               rel="nofollow">
+              <svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
+              <span class="select-menu-item-text css-truncate-target js-select-menu-filter-text">
+                adsense
+              </span>
+            </a>
+            <a class="select-menu-item js-navigation-item js-navigation-open selected"
+               href="/alexandrevicenzi/Flex/blob/master/static/font-awesome/fonts/fontawesome-webfont.woff"
+               data-name="master"
+               data-skip-pjax="true"
+               rel="nofollow">
+              <svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
+              <span class="select-menu-item-text css-truncate-target js-select-menu-filter-text">
+                master
+              </span>
+            </a>
+        </div>
+
+          <div class="select-menu-no-results">Nothing to show</div>
+      </div>
+
+      <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="tags">
+        <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring">
+
+
+            <a class="select-menu-item js-navigation-item js-navigation-open "
+              href="/alexandrevicenzi/Flex/tree/v2.1.0/static/font-awesome/fonts/fontawesome-webfont.woff"
+              data-name="v2.1.0"
+              data-skip-pjax="true"
+              rel="nofollow">
+              <svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
+              <span class="select-menu-item-text css-truncate-target" title="v2.1.0">
+                v2.1.0
+              </span>
+            </a>
+            <a class="select-menu-item js-navigation-item js-navigation-open "
+              href="/alexandrevicenzi/Flex/tree/v2.0/static/font-awesome/fonts/fontawesome-webfont.woff"
+              data-name="v2.0"
+              data-skip-pjax="true"
+              rel="nofollow">
+              <svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
+              <span class="select-menu-item-text css-truncate-target" title="v2.0">
+                v2.0
+              </span>
+            </a>
+            <a class="select-menu-item js-navigation-item js-navigation-open "
+              href="/alexandrevicenzi/Flex/tree/v1.2/static/font-awesome/fonts/fontawesome-webfont.woff"
+              data-name="v1.2"
+              data-skip-pjax="true"
+              rel="nofollow">
+              <svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
+              <span class="select-menu-item-text css-truncate-target" title="v1.2">
+                v1.2
+              </span>
+            </a>
+            <a class="select-menu-item js-navigation-item js-navigation-open "
+              href="/alexandrevicenzi/Flex/tree/v1.1.1/static/font-awesome/fonts/fontawesome-webfont.woff"
+              data-name="v1.1.1"
+              data-skip-pjax="true"
+              rel="nofollow">
+              <svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
+              <span class="select-menu-item-text css-truncate-target" title="v1.1.1">
+                v1.1.1
+              </span>
+            </a>
+            <a class="select-menu-item js-navigation-item js-navigation-open "
+              href="/alexandrevicenzi/Flex/tree/v1.1/static/font-awesome/fonts/fontawesome-webfont.woff"
+              data-name="v1.1"
+              data-skip-pjax="true"
+              rel="nofollow">
+              <svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
+              <span class="select-menu-item-text css-truncate-target" title="v1.1">
+                v1.1
+              </span>
+            </a>
+            <a class="select-menu-item js-navigation-item js-navigation-open "
+              href="/alexandrevicenzi/Flex/tree/v1.0/static/font-awesome/fonts/fontawesome-webfont.woff"
+              data-name="v1.0"
+              data-skip-pjax="true"
+              rel="nofollow">
+              <svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
+              <span class="select-menu-item-text css-truncate-target" title="v1.0">
+                v1.0
+              </span>
+            </a>
+        </div>
+
+        <div class="select-menu-no-results">Nothing to show</div>
+      </div>
+
+    </div>
+  </div>
+</div>
+
+  <div class="BtnGroup float-right">
+    <a href="/alexandrevicenzi/Flex/find/master"
+          class="js-pjax-capture-input btn btn-sm BtnGroup-item"
+          data-pjax
+          data-hotkey="t">
+      Find file
+    </a>
+    <button aria-label="Copy file path to clipboard" class="js-zeroclipboard btn btn-sm BtnGroup-item tooltipped tooltipped-s" data-copied-hint="Copied!" type="button">Copy path</button>
+  </div>
+  <div class="breadcrumb js-zeroclipboard-target">
+    <span class="repo-root js-repo-root"><span class="js-path-segment"><a href="/alexandrevicenzi/Flex"><span>Flex</span></a></span></span><span class="separator">/</span><span class="js-path-segment"><a href="/alexandrevicenzi/Flex/tree/master/static"><span>static</span></a></span><span class="separator">/</span><span class="js-path-segment"><a href="/alexandrevicenzi/Flex/tree/master/static/font-awesome"><span>font-awesome</span></a></span><span class="separator">/</span><span class="js-path-segment"><a href="/alexandrevicenzi/Flex/tree/master/static/font-awesome/fonts"><span>fonts</span></a></span><span class="separator">/</span><strong class="final-path">fontawesome-webfont.woff</strong>
+  </div>
+</div>
+
+<include-fragment class="commit-tease" src="/alexandrevicenzi/Flex/contributors/master/static/font-awesome/fonts/fontawesome-webfont.woff">
+  <div>
+    Fetching contributors&hellip;
+  </div>
+
+  <div class="commit-tease-contributors">
+    <img alt="" class="loader-loading float-left" height="16" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32-EAF2F5.gif" width="16" />
+    <span class="loader-error">Cannot retrieve contributors at this time</span>
+  </div>
+</include-fragment>
+
+<div class="file">
+  <div class="file-header">
+  <div class="file-actions">
+
+    <div class="BtnGroup">
+      <a href="/alexandrevicenzi/Flex/raw/master/static/font-awesome/fonts/fontawesome-webfont.woff" class="btn btn-sm BtnGroup-item" id="raw-url">Download</a>
+      <a href="/alexandrevicenzi/Flex/commits/master/static/font-awesome/fonts/fontawesome-webfont.woff" class="btn btn-sm BtnGroup-item" rel="nofollow">History</a>
+    </div>
+
+
+        <!-- '"` --><!-- </textarea></xmp> --></option></form><form accept-charset="UTF-8" action="/alexandrevicenzi/Flex/delete/master/static/font-awesome/fonts/fontawesome-webfont.woff" class="inline-form" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="UXEOAkrYQU6rsV4iZkleRN0cof6/mopi2qxN9MpIX6Qf3qagMH6utFN9u7hMxNKJqToMd3vpsHIRqSvimwqJHg==" /></div>
+          <button class="btn-octicon btn-octicon-danger tooltipped tooltipped-nw" type="submit"
+            aria-label="You must be signed in to make or propose changes" data-disable-with>
+            <svg aria-hidden="true" class="octicon octicon-trashcan" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M11 2H9c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1H2c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1v9c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-1 12H3V5h1v8h1V5h1v8h1V5h1v8h1V5h1v9zm1-10H2V3h9v1z"/></svg>
+          </button>
+</form>  </div>
+
+  <div class="file-info">
+    95.7 KB
+  </div>
+</div>
+
+  
+
+  <div itemprop="text" class="blob-wrapper data type-text">
+      <div class="image">
+          <a href="/alexandrevicenzi/Flex/blob/master/static/font-awesome/fonts/fontawesome-webfont.woff?raw=true">View Raw</a>
+      </div>
+  </div>
+
+</div>
+
+<button type="button" data-facebox="#jump-to-line" data-facebox-class="linejump" data-hotkey="l" class="d-none">Jump to Line</button>
+<div id="jump-to-line" style="display:none">
+  <!-- '"` --><!-- </textarea></xmp> --></option></form><form accept-charset="UTF-8" action="" class="js-jump-to-line-form" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
+    <input class="form-control linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line&hellip;" aria-label="Jump to line" autofocus>
+    <button type="submit" class="btn">Go</button>
+</form></div>
+
+  </div>
+  <div class="modal-backdrop js-touch-events"></div>
+</div>
+
+
+    </div>
+  </div>
+
+    </div>
+
+        <div class="container site-footer-container">
+  <div class="site-footer" role="contentinfo">
+    <ul class="site-footer-links float-right">
+        <li><a href="https://github.com/contact" data-ga-click="Footer, go to contact, text:contact">Contact GitHub</a></li>
+      <li><a href="https://developer.github.com" data-ga-click="Footer, go to api, text:api">API</a></li>
+      <li><a href="https://training.github.com" data-ga-click="Footer, go to training, text:training">Training</a></li>
+      <li><a href="https://shop.github.com" data-ga-click="Footer, go to shop, text:shop">Shop</a></li>
+        <li><a href="https://github.com/blog" data-ga-click="Footer, go to blog, text:blog">Blog</a></li>
+        <li><a href="https://github.com/about" data-ga-click="Footer, go to about, text:about">About</a></li>
+
+    </ul>
+
+    <a href="https://github.com" aria-label="Homepage" class="site-footer-mark" title="GitHub">
+      <svg aria-hidden="true" class="octicon octicon-mark-github" height="24" version="1.1" viewBox="0 0 16 16" width="24"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
+</a>
+    <ul class="site-footer-links">
+      <li>&copy; 2017 <span title="0.05168s from github-fe-caeab30.cp1-iad.github.net">GitHub</span>, Inc.</li>
+        <li><a href="https://github.com/site/terms" data-ga-click="Footer, go to terms, text:terms">Terms</a></li>
+        <li><a href="https://github.com/site/privacy" data-ga-click="Footer, go to privacy, text:privacy">Privacy</a></li>
+        <li><a href="https://github.com/security" data-ga-click="Footer, go to security, text:security">Security</a></li>
+        <li><a href="https://status.github.com/" data-ga-click="Footer, go to status, text:status">Status</a></li>
+        <li><a href="https://help.github.com" data-ga-click="Footer, go to help, text:help">Help</a></li>
+    </ul>
+  </div>
+</div>
+
+
+
+    
+
+    <div id="ajax-error-message" class="ajax-error-message flash flash-error">
+      <svg aria-hidden="true" class="octicon octicon-alert" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M8.865 1.52c-.18-.31-.51-.5-.87-.5s-.69.19-.87.5L.275 13.5c-.18.31-.18.69 0 1 .19.31.52.5.87.5h13.7c.36 0 .69-.19.86-.5.17-.31.18-.69.01-1L8.865 1.52zM8.995 13h-2v-2h2v2zm0-3h-2V6h2v4z"/></svg>
+      <button type="button" class="flash-close js-flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
+        <svg aria-hidden="true" class="octicon octicon-x" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48z"/></svg>
+      </button>
+      You can't perform that action at this time.
+    </div>
+
+
+      <script crossorigin="anonymous" src="https://assets-cdn.github.com/assets/compat-30ce4c86c27f88c3d1b4eb03efda59b45d8d7c871880dee0b8f73d5ef1b25fdf.js"></script>
+      <script crossorigin="anonymous" src="https://assets-cdn.github.com/assets/frameworks-3b765f1b559374b57faf3815a186f3cfc3af05d277e07c93c6a3e624585b9196.js"></script>
+      <script async="async" crossorigin="anonymous" src="https://assets-cdn.github.com/assets/github-d1901dcdb03cb655cdb29e06038afc729d470152de7d060c1b0c6eb9136f7114.js"></script>
+      
+      
+      
+      
+    <div class="js-stale-session-flash stale-session-flash flash flash-warn flash-banner d-none">
+      <svg aria-hidden="true" class="octicon octicon-alert" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M8.865 1.52c-.18-.31-.51-.5-.87-.5s-.69.19-.87.5L.275 13.5c-.18.31-.18.69 0 1 .19.31.52.5.87.5h13.7c.36 0 .69-.19.86-.5.17-.31.18-.69.01-1L8.865 1.52zM8.995 13h-2v-2h2v2zm0-3h-2V6h2v4z"/></svg>
+      <span class="signed-in-tab-flash">You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span>
+      <span class="signed-out-tab-flash">You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span>
+    </div>
+    <div class="facebox" id="facebox" style="display:none;">
+  <div class="facebox-popup">
+    <div class="facebox-content" role="dialog" aria-labelledby="facebox-header" aria-describedby="facebox-description">
+    </div>
+    <button type="button" class="facebox-close js-facebox-close" aria-label="Close modal">
+      <svg aria-hidden="true" class="octicon octicon-x" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48z"/></svg>
+    </button>
+  </div>
+</div>
+
+  </body>
+</html>
+
diff --git a/fonts/fontawesome-webfont.woff2 b/fonts/fontawesome-webfont.woff2
new file mode 100644 (file)
index 0000000..4d13fc6
Binary files /dev/null and b/fonts/fontawesome-webfont.woff2 differ
diff --git a/haunt.scm b/haunt.scm
new file mode 100644 (file)
index 0000000..3346228
--- /dev/null
+++ b/haunt.scm
@@ -0,0 +1,102 @@
+(use-modules (haunt asset)
+             (haunt builder blog)
+             (haunt builder atom)
+             (haunt builder assets)
+             (haunt reader)
+             (haunt reader texinfo)
+             (haunt site)
+             (haunt post)
+             (srfi srfi-1))
+
+(define (stylesheet name)
+  `(link (@ (rel "stylesheet")
+            (href ,(string-append "/css/" name ".css")))))
+
+(define flex-theme
+  (theme #:name "Flex"
+         #:layout
+         (lambda (site title body)
+           `((doctype "html")
+             (head
+              (meta (@ (charset "utf-8")))
+              (title ,(string-append title " - " (site-title site)))
+              (link (@ (rel "stylesheet") (href "//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,400italic")))
+              ,(stylesheet "style.min")
+              ,(stylesheet "monokai.min")
+              ,(stylesheet "font-awesome.min")
+              ,(stylesheet "custom"))
+             (body
+              ,(let ((metadata (site-default-metadata site)))
+                 `(aside
+                   (div
+                    (a (@ (href "/")) (img (@ (src ,(assoc-ref metadata 'picture)))))
+                    (h1 (a (@ (href "/")) ,(assoc-ref metadata 'author)))
+                    (p ,(assoc-ref metadata 'description))
+                    (nav
+                     (ul (@ (class "list"))
+                        ,@(map (lambda (page)
+                                 `(li (a (@ (href ,(cdr page))) ,(car page))))
+                               (assoc-ref metadata 'pages))))
+                    (ul (@ (class "social"))
+                       (li (a (@ (class "sc-linkedin") (target "_blank") (href "")) (i (@ (class "fa fa-linkedin")))))
+                       " "
+                       (li (a (@ (class "sc-github") (target "_blank") (href "")) (i (@ (class "fa fa-github")))))
+                       " "
+                       (li (a (@ (class "sc-twitter") (target "_blank") (href "")) (i (@ (class "fa fa-twitter")))))
+                       " "
+                       (li (a (@ (class "sc-rss") (target "_blank") (href "/feed.xml")) (i (@ (class "fa fa-rss")))))))))
+              (main ,body))))
+        #:post-template
+        (lambda (post)
+          `((article (@ (class "single"))
+                     (header
+                      (h1 ,(post-ref post 'title))
+                      (p ,(date->string* (post-date post))))
+                     ,(post-sxml post)
+                     (div (@ (class "tag-cloud"))
+                          (p (a (@ (href "")) "prueba"))))))
+         #:collection-template
+         (lambda (site title posts prefix)
+           (define (post-uri post)
+             (string-append "/" (or prefix "")
+                            (site-post-slug site post) ".html"))
+           (define (post-summary post)
+             (or (post-ref post 'summary)
+                 (let get-first-par ((sxml (cdr (post-sxml post))))
+                   (cond ((null? sxml) "")
+                         ((and (pair? (car sxml))
+                               (eq? (caar sxml) 'p)) (car sxml))
+                         (else (get-first-par (cdr sxml)))))))
+           `(
+            ,@(map (lambda (post)
+                     `(article
+                       (header
+                        (h2
+                         (a (@ (href ,(post-uri post)))
+                            ,(post-ref post 'title)))
+                        (p ,(date->string* (post-date post))))
+                       (div ,(post-summary post)
+                            (br)
+                            (a (@ (class "btn") (href ,(post-uri post))) " Seguir leyendo "))
+                       (hr)))
+                   (posts/reverse-chronological posts))))))
+
+(define %collections
+  `(("Home" "index.html" ,posts/reverse-chronological)))
+
+(site #:title "Javier Sancho"
+      #:domain "jsancho.org"
+      #:default-metadata
+      '((author . "Javier Sancho")
+        (description . "Free Software Evangelist - Programmer")
+        (email . "jsf@jsancho.org")
+        (picture . "/images/jsancho2.jpg")
+        (pages . (("sobre mi" . "about.html")
+                  ("proyectos" . "http://git.jsancho.org/"))))
+      #:readers (list sxml-reader html-reader)
+      #:builders (list (blog #:theme flex-theme #:collections %collections)
+                       (atom-feed)
+                       (atom-feeds-by-tag)
+                       (static-directory "images")
+                       (static-directory "fonts")
+                       (static-directory "css")))
diff --git a/images/jsancho2.jpg b/images/jsancho2.jpg
new file mode 100644 (file)
index 0000000..84dff92
Binary files /dev/null and b/images/jsancho2.jpg differ
diff --git a/posts/0.html b/posts/0.html
new file mode 100644 (file)
index 0000000..3ae19e6
--- /dev/null
@@ -0,0 +1,8 @@
+title: kkblog empieza a funcionar
+date: 2003-09-06 07:31
+---
+<div>
+<p>He añadido a la web un blog casero realizado por mi para escribir cosillas de vez en cuando. Es muy simple, de ahí su nombre, pero espero añadirle alguna que otra funcionalidad como exportar los artículos a PDF.</p>
+
+<p>kkblog se encuentra bajo la licencia GPL y en breve colgaré el código fuente en la web por si alguien esta interesado en usarlo o en copiar parte para usarlo en su propio blog.</p>
+</div>
diff --git a/posts/1.html b/posts/1.html
new file mode 100644 (file)
index 0000000..a56fec8
--- /dev/null
@@ -0,0 +1,32 @@
+title: Consideraciones sobre las patentes de software
+date: 2003-09-12 17:03
+---
+<div>
+<p>Hoy he podido leer desde un enlace de la lista de correo de Bulma las ideas un tanto desacertadas a mi parecer del coordinador del "informe Soto", D. Juan Soto, en referencia a la implantación de las patentes de software en Europa. Puedes verlo en este <a href="http://www.elmundo.es/encuentros/invitados/2003/09/807/index.html">artículo de El Mundo</a>.</p>
+
+<p>Por algunos comentarios referentes, por ejemplo, a las Active Server Pages (ASP) de Microsoft se deduce que este señor no es precisamente un profesional de la informática y por lo tanto cae en el error en el caen muchos otros externos al sector, que es el de tratar el software como un producto, cuando en realidad es un servicio y una base sobre la cual ofrecer servicios.</p>
+
+<p>Aunque Soto contestó a más preguntas vamos solamente a discutir sobre las referentes a las patentes de software.</p>
+
+<p><b>¿Qué opina sobre el tema de las patentes de software? ¿No le parece que con los derechos de autor y el copyright basta?</b></p>
+
+<p><i>Es un tema cuestionable. Hay que reconocer que los gastos de I+D son normalmente necesarios para el desarrollo de software realmente diferenciado y contribuyente, suelen ser de los mas altos entre todos los sectores intensivos en I+D. De igual forma que en el sector de la farmacia hay patentes, igualmente este sector aspira a tener el mismo tratamiento. Escribir un libro, componer una obra de música no suele requerir el mismo esfuerzo de grandes equipos de investigadores que son necesarios para el desarrollo de paquetes importantes. Igualmente, las inversiones en capital fijo requeridas no son nada despreciables.</i></p>
+
+<p>Como se puede apreciar, se cae en el error que comentaba un poco más arriba. El software no es un producto manufacturado. Por lo tanto la comparación con el sector de la farmacia es del todo inapropiada, es como comparar coches con patatas. En realidad el software sí que es comparable a un libro, y hay libros que se escriben por una sola persona y hay otros escritos por varios autores tras años de investigación, y no por ello patentamos los libros.</p>
+
+<p>Por otro lado, las inversiones en I+D no pueden servir de excusa para defender las patentes. Es mas, esos proyectos de investigación de tan alto coste no necesitan las patentes para protegerse, su alto coste es ya suficiente protección, ya que no podrá darse el caso de que muchos otros intenten realizar el mismo trabajo.</p>
+
+<p><b>En su opinión, ¿puede desarrollo y soporte del software libre constituir una nueva industria en España?</b></p>
+
+<p><i>No veo motivos para que el desarrollo y soporte del software libre nos proporcionen mayores oportunidades que el desarrollo y soporte de software patentado. No basta con tener la buena intención de ser generosos con los demás. Hay que ser capaz de desarrollar lo que a los demás les interesa. En cualquier caso, considero que el desarrollo del software libre en el ámbito educativo de enseñanza secundaria tiene muchas opciones de ser relevante a medio plazo. No olvidemos que antes de la www, Internet permitía que las universidades pudiesen intercambiar software gratuito entre ellas a través de lo que se denominaba el dominio público.</i></p>
+
+<p>Aquí el señor Soto demuestra no saber de qué esta hablando o al menos demuestra que no tiene las ideas muy claras al confundir software propietario con software patentado, que no tiene nada que ver, y software libre con software gratuito, que tampoco tiene nada que ver.</p>
+
+<p>Además, creo que un sistema operativo libre con herramientas libres (aplicaciones ofimáticas, de tratamiento de gráficos, de gestión empresarial, de contabilidad y un largo etc) es lo que a los demás les interesa. Desde luego, pagar caras licencias de uso por programas que después no funcionan como deberían no creo que sea lo que interesa a los demás, como mucho a la empresa que venda las licencias.</p>
+
+<p><b>¿Las patentes de software no nos llevarán a situaciones kafquianas como que alguien patente el 'click-click' del ratón? ¿Cómo se puede permitir que alguien patente sus ideas? Se patentan los desarrollos y/o invenciones, no las ideas. ¿No cree?</b></p>
+
+<p><i>Creo que un paquete de software listo para su uso fiable y seguro es algo más que una idea. Observando las dificultades que en muchas sociedades nacionales tienen para contar con un sector de software de razonable dimensión, tiendo a pensar que no es nada sencillo desarrollar producto de software que realmente puedan competir con éxito en el mercado global.</i></p>
+
+<p>Precisamente por eso. Las patentes existen teoricamente para proteger los desarrollos que son fáciles de llevar a cabo, para dar tiempo al creador a comercializar su idea sin que nadie se adelante. Como es realmente dificil realizar software para competir a nivel mundial no existe ese peligro de que otros se adelanten. Y si es dificil desarrollar buen software, ¿para qué ponerle más trabas incluyendo el problema de las patentes?</p>
+</div>
diff --git a/posts/10.html b/posts/10.html
new file mode 100644 (file)
index 0000000..7b4dfb4
--- /dev/null
@@ -0,0 +1,10 @@
+title: Viajero y la IA de la mano
+date: 2003-12-01 16:33
+---
+<div>
+<p>Llevo un cierto tiempo trabajando en un proyecto de GIS que tiene el nombre de Viajero. Aunque planeo liberarlo algún día de estos, de momento sólo existe en mi ordenador ya que lo hago por hobbie y para llenar mi tiempo libre.</p>
+
+<p>Viajero tiene, o mejor dicho tendrá un módulo para reconocer carreteras, caminos, ciudades, montañas, etc, desde dibujos o desde fotografías aéreas. Despues de estudiar diversos algoritmos y posibilidades el sábado se me ocurrió que podría hacerlo mediante redes neuronales y usar algunas de las librerías que ya tengo creadas de mi proyecto final de carrera, un reconocedor del habla humana que tambien hacía uso de redes neuronales.</p>
+
+<p>Cuando era un chaval con la cabeza llena de pájaros empezó a gustarme la informática porque estaba enamorado de la IA (Inteligencia Artificial). No deja de ser curioso que a lo largo de mi vida acabe volviendo a proyectos relacionados de alguna forma con ella.</p>
+</div>
diff --git a/posts/100.html b/posts/100.html
new file mode 100644 (file)
index 0000000..7c11f47
--- /dev/null
@@ -0,0 +1,12 @@
+title: DOM Viewer
+date: 2006-03-13 16:52
+---
+<div>
+<p>Durante las últimas semanas he estado trasteando con <a href="http://textpattern.com/">Textpattern</a> y con sus plugins. La verdad es que estoy bastante sorprendido con este software para blogs, y eso que ya estuve mirándolo antes de decantarme por <a href="http://wordpress.org/">WordPress</a>, pero el día que lo probé por primera vez no me acabó del todo. Sin embargo ahora estoy sopesando seriamente el cambiar a Textpattern.</p>
+
+<p>El caso es que cuando se programan plugins en Textpattern, como en cualquier otro CMS, una forma fácil de añadir funcionalidades es usando <i>Document Object Model</i> (DOM) (<a href="http://kusor.net/traducciones/brainjar.es/introdom1.es.html">Modelo de Objetos de Documento</a>) para poder acceder y modificar los contenidos de las páginas de administración del sitio y adaptarlas a nuestras necesidades concretas. Esto que puede resultar muy bonito puede acabar siendo una locura cuando trabajas con páginas grandes con una estructura compleja de nodos. Podeis pensar que tampoco será para tanto. Bueno, cuando paseis dos días peleando sin saber por qué sois incapaces de colocar una lista de selección exactamente en el lugar que quereis que aparezca ya me contareis.</p>
+
+<p>Al final, desesperado, empecé a plantearme el hacer algún <i>script</i> que me mostrara el árbol de nodos de la página. No, espera, seguro que alguien ya ha pasado por esto y lo habrá desarrollado. Un poco de búsqueda y ¡¡bingo!!, <a href="http://www.brainjar.com/dhtml/domviewer/">DOM Viewer</a> hace lo que necesito y además es GPL.</p>
+
+<p>Cinco minutos de reloj y la lista ya sale donde yo quería.</p>
+</div>
diff --git a/posts/101.html b/posts/101.html
new file mode 100644 (file)
index 0000000..267536b
--- /dev/null
@@ -0,0 +1,8 @@
+title: Testómetro
+date: 2006-03-17 09:58
+---
+<div>
+<p>No suelo hacer ningún test friki de esos que hay por ahí, pero para uno que hago el resultado me encanta :-D</p>
+
+<p><a href="http://www.emezeta.com/testometro/"><img src="http://www.emezeta.com/testometro/personalidad/indy.png" alt="indy"/></a></p>
+</div>
diff --git a/posts/102.html b/posts/102.html
new file mode 100644 (file)
index 0000000..329326e
--- /dev/null
@@ -0,0 +1,56 @@
+title: GPLv3 párrafo a párrafo (Secciones 12.[7], 13.[8], 14.[9] y 15.[10])
+date: 2006-03-29 15:15
+---
+<div>
+<p>En esta nueva entrega del <a href="http://gplv3.fsf.org/draft">borrador de la GPLv3</a> seguiremos estudiando las últimas secciones que completan la nueva licencia y que velan por asegurar la integridad de la misma.</p>
+
+<p>Como ya es costumbre, recuerdo que estas entregas no reflejan ni traducciones ni explicaciones oficiales de la <a href="http://www.fsf.org/">Free Software Foundation</a> y se trata siempre de mis opiniones personales.</p>
+
+<i>
+<p><b>12.[7] Liberty or Death for the Program.</b></p>
+
+<p>If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute the Program, or other covered work, so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute it at all. For example, if a patent license would not permit royalty-free redistribution by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution.</p>
+</i>
+
+<p><b>12.[7] Libertad o Muerte para el Programa.</b></p>
+
+<p>Si te son impuestas unas condiciones (mediante orden judicial, acuerdo o cualquier otra forma) que contradicen las condiciones de esta Licencia, esas condiciones impuestas no te dispensan del cumplimiento de las condiciones de esta Licencia. Si no puedes distribuir el Programa, u otro trabajo protegido por la Licencia, para satisfacer simultáneamente las obligaciones de esta Licencia y cualquier otra obligación pertinente, entonces como consecuencia no puedes distribuirlo de ninguna manera. Por ejemplo, si una patente no te permite redistribución libre de <i>royalties</i> para todos aquellos que reciban una copia de forma directa o indirecta, entonces la única manera de satisfacer la patente y esta Licencia sería no realizar ninguna distribución.</p>
+
+<p><i>It is not the purpose of this section to induce you to infringe any patents or other exclusive rights or to contest their legal validity. The sole purpose of this section is to protect the integrity of the free software distribution system. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.</i></p>
+
+<p>El propósito de esta sección no es inducirte a infringir ninguna patente o cualquier otro derecho exclusivo o a refutar su validez legal. El único propósito de esta sección es proteger la integridad del sistema de distribución del software libre. Mucha gente a realizado generosas contribuciones a la amplia variedad de software distribuido a través de este sistema en dependencia con la consistencia de aplicación de este sistema; es decisión del autor/donante decidir si desea distribuir software mediante otro sistema y un concesionario no puede imponer esa elección.</p>
+
+<i>
+<p><b>[13.[8] Geographical Limitations.</b></p>
+
+<p>If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.]</p>
+</i>
+
+<p><b>[13.[8] Limitaciones geográficas.</b></p>
+
+<p>Si la distribución y/o el uso del Programa está restringido en ciertos países por patentes o por determinados sistemas de derechos de autor, el poseedor original de los derechos de autor del Programa bajo esta Licencia puede añadir una limitación geográfica de distribución explícita excluyendo a esos países, para que la distribución se permita solamente en países que no apliquen ningún tipo de restricción. En ese caso, esta Licencia incorporaría la limitación en el cuerpo de la misma.]</p>
+
+<i>
+<p><b>14.[9] Revised Versions of this License.</b></p>
+
+<p>The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.</p>
+</i>
+
+<p><b>14.[9] Versiones revisadas de esta Licencia.</b></p>
+
+<p>La Free Software Foundation puede publicar versiones revisadas y/o nuevas de la GNU General Public License de vez en cuando. Estas nuevas versiones serán similares en espíritu a la versión actual, pero pueden diferir en el detalle por la necesidad de resolver nuevos problemas.</p>
+
+<p><i>Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.</i></p>
+
+<p>Cada versión se identificará con un número de versión distinguible. Si el Programa especifica que se encuentra bajo un cierto número de versión de esta Licencia "o cualquier versión posterior", tienes la opciónde seguir los términos y condiciones de esa versión numerada o de cualquier versión posterior publicada por la Free Software Foundation. Si el Programa no especifica un número de versión de esta Licencia, puedes elegir cualquier versión publicada por la Free Software Foundation.</p>
+
+<i>
+<p><b>15.[10] Requesting Exceptions.</b></p>
+
+<p>If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.</p>
+</i>
+
+<p><b>15.[10] Pidiendo excepciones</b></p>
+
+<p>Si deseas incorporar partes del Programa dentro de otros programas libres cuyas condiciones de distribución son diferentes, escribe al autor para pedirle permiso. Para programas cuyos derechos de autor pertenecen a la Free Software Foundation, escribe a la Free Software Foundation; a veces hacemos excepciones al respecto. Nuestra decisión se basará en los dos objetivos de preservar el estatus de libertad de todos los trabajos derivados de nuestros programas libres y de promover el compartir y el reusar todo el software en general.</p>
+</div>
diff --git a/posts/103.html b/posts/103.html
new file mode 100644 (file)
index 0000000..d06fefe
--- /dev/null
@@ -0,0 +1,8 @@
+title: Hablemos de la GPLv3
+date: 2006-03-29 07:49
+---
+<div>
+<p>El sábado 1 de abril, de 13:00 a 14:00, daré una charla sobre la nueva versión de la licencia GPL (del borrador más bien, aunque los posibles cambios no modificarán excesivamente al conjunto) en las <a href="http://linuv.uv.es/2006/portal/aprende/">V Jornadas de Software Libre</a> que organiza <a href="http://linuv.uv.es/">LinUV</a> en Burjassot.</p>
+
+<p>La asistencia está abierta a todo el público.</p>
+</div>
diff --git a/posts/104.html b/posts/104.html
new file mode 100644 (file)
index 0000000..f0e7934
--- /dev/null
@@ -0,0 +1,8 @@
+title: Hablemos de la GPLv3... otra vez
+date: 2006-04-03 10:20
+---
+<div>
+<p>Si alguien no puedo estar en Valencia, esta es su oportunidad ;-)</p>
+
+<p>En esta ocasión nos podemos ver las caras esta misma tarde, de 17:00 a 19:00, en el aula TD1101 de la <a href="http://www.uji.es/">Universidad Jaume I</a> para seguir debatiendo sobre el borrador de la tercera versión de la licencia GPL.</p>
+</div>
diff --git a/posts/105.html b/posts/105.html
new file mode 100644 (file)
index 0000000..5370a54
--- /dev/null
@@ -0,0 +1,26 @@
+title: GPLv3 párrafo a párrafo (Secciones 16.[11], 17.[12] y 18: No Garantía)
+date: 2006-04-13 10:24
+---
+<div>
+<p>Penúltima entrega de la serie <b>GPLv3 párrafo a párrafo</b> sobre el <a href="http://gplv3.fsf.org/draft">borrador de la GPLv3</a>. Estas últimas secciones de la licencia nos hablan de la exención de garantía del programa protegido.</p>
+
+<p>En esta serie de entregas no se reflejan ni traducciones ni explicaciones oficiales de la <a href="http://www.fsf.org/">Free Software Foundation</a> y se trata siempre de mis opiniones personales.</p>
+
+<i>
+<p><b>NO WARRANTY</b></p>
+
+<p>16.[11] There is no warranty for the Program, to the extent permitted by applicable law. Except when otherwise stated in writing the copyright holders and/or other parties provide the Program "as is" without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose. The entire risk as to the quality and performance of the Program is with you. Should the Program prove defective, you assume the cost of all necessary servicing, repair or correction.</p>
+</i>
+
+<p>16.[11] No existe ninguna garantía para el Programa, hasta el punto permitido por la ley. Excepto en cualquier otro caso indicado, los poseedores de los derechos de autor y/o terceros proporcionan el Programa "como es" sin ningún tipo de garantía, ni expresada ni implícita, incluyendo, pero no limitado a, las garantías implícitas de comercio para un propósito particular. Toda la responsabilidad sobre la calidad y el funcionamiento del Programa es tuya. En el caso de que el Programa sea defectuoso, tú asumes el coste del servicio, reparación o corrección necesarios.</p>
+
+<p><i>17.[12] In no event unless required by applicable law or agreed to in writing will any copyright holder, or any other party who may modify and/or redistribute the Program as permitted above, be liable to you for damages, including any general, special, incidental or consequential damages arising out of the use or inability to use the Program (including but not limited to loss of data or data being rendered inaccurate or losses sustained by you or third parties or a failure of the Program to operate with any other programs), even if such holder or other party has been advised of the possibility of such damages.</i></p>
+
+<p>17.[12] En ningún caso, a menos que esté obligado por ley o por un acuerdo escrito, el poseedor de los derechos de autor o un tercero que haya modificado y/o redistribuido el Programa según las formas permitidas, es responsable de daños producidos, incluyendo generales, especiales, incidentales o como consecuencia del uso o incapacidad de usar el Programa (incluyendo pero no limitado a la pérdida de datos o resultados inexactos o pérdidas por tu parte o parte de terceros o fallos del Programa para operar con otros programas), incluso aunque el poseedor o unos terceros tengan conocimiento de la posibilidad de producir esos daños.</p>
+
+<p><i>18. Unless specifically stated, the Program has not been tested for use in safety critical systems.</i></p>
+
+<p>18. A menos que se especifique claramente, el Programa no ha sido probado para su uso en sistemas críticos seguros.</p>
+
+<p>Resumiendo, que no se ofrece ningún tipo de garantía sobre los programas bajo licencia GPL a menos que el propio desarrollador o distribuidor así lo indique. Si, por ejemplo, el distribuidor del programa desea ofrecer una garantía a cambio de una retribución monetaria, es libre de hacerlo.</p>
+</div>
diff --git a/posts/106.html b/posts/106.html
new file mode 100644 (file)
index 0000000..5a2b0c7
--- /dev/null
@@ -0,0 +1,33 @@
+title: GPLv3 párrafo a párrafo
+date: 2006-04-13 11:02
+---
+<div>
+<p>A lo largo de los últimos meses he realizado una traducción y pequeña interpretación del <a href="http://gplv3.fsf.org/draft">borrador de la GPLv3</a>, desgranando el texto de la licencia por párrafos, en un intento de hacer la nueva versión de la licencia GPL más accesible al público hispano.</p>
+
+<p>Hay que tener siempre en cuenta que este análisis es mi interpretación personal y nunca se trata de una traducción o interpretación oficial de la <a href="http://www.fsf.org/">Free Software Foundation</a>, por lo que mis opiniones y conclusiones podrían estar equivocadas.</p>
+
+<p>El resultado final es el que sigue:</p>
+
+<ul>
+<li><a href="http://www.jsancho.org/2006/01/30/86/">Preámbulo</a></li>
+<li><a href="http://www.jsancho.org/2006/01/31/87/">Sección 0: Definiciones</a></li>
+<li><a href="http://www.jsancho.org/2006/02/01/89/">Sección 1: Código fuente</a></li>
+<li><a href="http://www.jsancho.org/2006/02/06/93/">Sección 2: Permisos básicos</a></li>
+<li><a href="http://www.jsancho.org/2006/02/09/97/">Sección 3: Control de restricciones digitales</a></li>
+<li><a href="http://www.jsancho.org/2006/02/11/98/">Sección 4.[1]: Copias idénticas</a></li>
+<li><a href="http://www.jsancho.org/2006/02/13/100/">Sección 5.[2]: Distribución de versiones modificadas del código fuente</a></li>
+<li><a href="http://www.jsancho.org/2006/02/16/102/">Sección 6.[3]: Distribución de versiones modificadas del código objeto</a></li>
+<li><a href="http://www.jsancho.org/2006/02/23/106/">Sección 7: Compatibilidad de Licencia</a></li>
+<li><a href="http://www.jsancho.org/2006/03/07/110/">Sección 8.[4]: Cesación de derechos</a></li>
+<li><a href="http://www.jsancho.org/2006/03/07/110/">Sección 9.[5]: No es un contrato</a></li>
+<li><a href="http://www.jsancho.org/2006/03/07/110/">Sección 10.[6]: Licenciamiento automático de destinatarios</a></li>
+<li><a href="http://www.jsancho.org/2006/03/07/110/">Sección 11: Licencias de Patentes</a></li>
+<li><a href="http://www.jsancho.org/2006/03/29/113/">Sección 12.[7]: Libertad o Muerte para el Programa</a></li>
+<li><a href="http://www.jsancho.org/2006/03/29/113/">Sección 13.[8]: Limitaciones geográficas</a></li>
+<li><a href="http://www.jsancho.org/2006/03/29/113/">Sección 14.[9]: Versiones revisadas de esta Licencia</a></li>
+<li><a href="http://www.jsancho.org/2006/03/29/113/">Sección 15.[10]: Pidiendo excepciones</a></li>
+<li><a href="http://www.jsancho.org/2006/04/13/117/">Secciones 16.[11], 17.[12] y 18: No Garantía</a></li>
+</ul>
+
+<p>Como resumen puedo decir que el objetivo de la tercera versión de la licencia GPL es, como con sus predecesoras, el promover y proteger unos valores éticos (compartir, ayudar, colaborar, ...). La licencia GPL es un código de conducta para distribuidores de programas libres y es el texto de <b>La Constitución del movimiento del software libre</b>.</p>
+</div>
diff --git a/posts/107.html b/posts/107.html
new file mode 100644 (file)
index 0000000..1c60a45
--- /dev/null
@@ -0,0 +1,8 @@
+title: 3rd International GPLv3 Conference en Barcelona
+date: 2006-06-09 06:39
+---
+<div>
+<p>Los dias 22 y 23 de junio tendrá lugar la Tercera Conferencia Internacional sobre la GPLv3 en el <a href="http://www.cccb.org/cat/info/llog.htm">Centre de Cultura Contemporània de Barcelona (CCCB)</a>. En el <a href="http://fsfeurope.org/projects/gplv3/europe-gplv3-conference">programa provisional</a> se incluyen presentaciones de Richard Stallman, Eben Moglen y Georg Greve y se tratarán temas como DRM, patentes de software e internacionalización de la licencia.</p>
+
+<p>Es una buena oportunidad para comentar y debatir las novedades de esta nueva licencia con personas que están directamente involucradas en su redacción.</p>
+</div>
diff --git a/posts/108.html b/posts/108.html
new file mode 100644 (file)
index 0000000..b030e35
--- /dev/null
@@ -0,0 +1,14 @@
+title: Segundo borrador de la GPLv3
+date: 2006-07-28 08:32
+---
+<div>
+<p>Ya se ha hecho público el <a href="http://gplv3.fsf.org/gpl-draft-2006-07-27.html">segundo borrador de la GPLv3</a>.</p>
+
+<p>Se ha vuelto a redactar todo lo referente a DRM, lo que más polémica había levantado, dejando claro que la nueva GPLv3 no prohibirá la implementación de técnicas DRM y que solamente restringirá aquellas implementaciones que no permitan la copia o la modificación de código GPLv3.</p>
+
+<p>También se ha retocado la sección sobre la compatibilidad de la licencia para permitir la distribución en ciertas redes de intercambio como BitTorrent.</p>
+
+<p>Además de este último borrador de la GPLv3 también se ha realizado el primer borrador de la LGPLv3. Los dos textos pueden ser encontrados en la <a href="http://gplv3.fsf.org/">web de la FSF sobre la GPLv3</a>.</p>
+
+<p>Se continuará con las conferencias internacionales de discusión sobre la GPLv3; la próxima está prevista en Bangalore (India) el mes que viene. Ya sólo nos queda un tercer borrador y la versión final de la licencia prevista para marzo de 2007 como mucho :-)</p>
+</div>
diff --git a/posts/109.html b/posts/109.html
new file mode 100644 (file)
index 0000000..859b134
--- /dev/null
@@ -0,0 +1,14 @@
+title: Falta una semana y ahora se despiertan (EPLA)
+date: 2006-09-18 17:20
+---
+<div>
+<p>Quizás sea el verano y las vacaciones, o quizás es que la gente ha perdido el gusto por "navegar", es decir, por recorrer Internet en busca de contenidos interesantes. Sí, creo que es eso. Desde que existen lugares como <i>menéame</i>, desde que cientos de <i>planets</i> pueblan la red, parece que mucha gente se dedica a visitar siempre los mismos sitios y no dedica tiempo a buscar otras fuentes de información.</p>
+
+<p>Todo esto viene a cuento de que dentro de una semana se votará la EPLA en el Parlamento Europeo y <b>ahora, cuando ya estamos encima</b>, es cuando la gente se entera del asunto. Cierto es que también yo soy culpable entre muchos por no difundirlo, pero la verdad es que pensaba que era algo de sobras conocido teniendo en cuenta que ya el 9 de abril Florian Mueller nos hablaba sobre el tema en "<a href="http://www.no-lobbyists-as-such.com/florian-mueller-blog/epla/">The EPLA is the new attempt to make software patents enforceable in Europe</a>".</p>
+
+<p>Además, se realizaron los ya tradicionales envíos de faxes a nuestros diputados europeos y se pidió apoyo por parte de empresas y profesionales del sector para una moción alternativa (que también se presenta a votación el mismo día 25) que básicamente viene a decir lo contrario de la EPLA.</p>
+
+<p>Resumiendo, si la noticia no aparece en los cuatro blogs de turno el activismo español es nulo.</p>
+
+<p>Menos mal que en el resto de Europa se mueven bastante más que nosotros. Eso unido a que la EPLA no está siendo muy popular entre los mismos partidos que la promueven por considerarla altamente antidemocrática me hacen ver el futuro próximo con cierto optimismo.</p>
+</div>
diff --git a/posts/11.html b/posts/11.html
new file mode 100644 (file)
index 0000000..6299df9
--- /dev/null
@@ -0,0 +1,18 @@
+title: atitvout de Lennart Poettering
+date: 2004-01-05 15:03
+---
+<div>
+<p>Aprovechando que hace poco adquirí una ATI Radeon 9000 con salida para TV por S-Video me puse a investigar el tema de ver mi Debian por la tele del comedor. Despues de unas cuantas pruebas, desilusiones y descubrimientos me he propuesto colaborar en la medida de mis posibilidades (que son mas bien pocas) en el proyecto de Lennart Poettering, el más que interesante <a href="http://www.stud.uni-hamburg.de/users/lennart/projects/atitvout/">atitvout</a>.</p>
+
+<p>Como no, mi primer paso a la hora de configurar la Radeon fue usar los drivers de ATI del <a href="http://dri.sourceforge.net/">proyecto DRI</a> para disfrutar de la aceleración hardware de la tarjeta. Sin embargo, a pesar de que me funcionan de maravilla, me encuentro con la pega de que no hay nada para poder ver al pingüino en el comedor.</p>
+
+<p>Mi segundo paso fue buscar información en la <a href="http://www.ati.com/support/faq/linux.html#tvout">propia web de ATI</a>, en la que encuentro dos enlaces, uno al <a href="http://gatos.sourceforge.net/">proyecto GATOS</a> y otro al <a href="http://www.stud.uni-hamburg.de/users/lennart/projects/atitvout/">Linux ATI TV Out Support Program</a>, el atitvout.</p>
+
+<p>En primer lugar empiezo a pelearme con los drivers de GATOS pero, una de dos, o estoy haciendo algo mal o los drivers no funcionan como es debido, al menos en mi equipo.</p>
+
+<p>Pruebo con el atitvout pero tampoco me acaba de funcionar bien. Leyendo la documentación veo que el autor solamente ha trabajado sobre la Rage Mobility P/M de su portátil, y aunque es posible que funcione tambien para Radeon y Rage 128 son tarjetas que no estan testeadas. Lennart Poettering, el autor, dice en la web que el proyecto esta abandonado asi que he decidido retomarlo, al menos hasta que funcione para mi Radeon 9000.</p>
+
+<p>Por si a alguien le interesa, al final descubrí que podía ver mi Debian por la tele usando el driver <i>vesa</i>, pero es un latazo ya que tengo que cambiar el driver y reiniciar las X's cada vez que quiero usar la televisión. Ademas, al usar <i>vesa</i> me quedo sin aceleración, y no mola.</p>
+
+<p>Por eso voy a intentar mejorar un poquito el programa de Lennart, a ver qué es lo que sale.</p>
+</div>
diff --git a/posts/110.html b/posts/110.html
new file mode 100644 (file)
index 0000000..85ec396
--- /dev/null
@@ -0,0 +1,44 @@
+title: La votación de la EPLA se aplaza hasta octubre
+date: 2006-09-21 16:51
+---
+<div>
+<p>Parece ser que la votación de la EPLA se ha postergado hasta mediados de octubre, por lo que tenemos más tiempo para seguir informando a nuestros eurodiputados y especialmente a los del PP y a los dos de CiU y del PNV (consultad la <a href="http://www.europarl.europa.eu/meps/es/search.html?country=ES">lista de eurodiputados españoles</a>). Hay que hacerlo siempre por fax o por correo postal; si usais correo electrónico no lo van a leer.</p>
+
+<p>Hay que dar la máxima difusión a los siguientes mensajes:</p>
+
+<ul>
+<li>El EPLA dañará severamente a las PYME europeas a base de pleitos de patentes incosteables e innecesarios.</li>
+<li>El EPLA legaliza las patentes de software (por vía de jurisprudencia, como hicieron en EEUU).</li>
+<li>El EPLA es la puerta a los parásitos y extorsionadores de patentes ya tristemente famosos en EEUU.</li>
+<li>El EPLA es el golpe de estado de la no democrática ni comunitaria Oficina Europea de Patentes para lograr imponer su dictadura sobre las ideas y el tejido innovador europeo.</li>
+</ul>
+
+<p>A continuación también adjunto un modelo de carta/fax para enviar:</p>
+
+<i>
+<p>Estimados señores:</p>
+
+<p>El lobby pro-patentes de software en Europa está intentando sacar adelante la aprobación de la EPLA, lo que supone una aberración que dejaría al margen de las instituciones elegidas democráticamente las litigaciones referentes a patentes de software.</p>
+
+<p>La acción de la Justicia es el único impedimento efectivo que hoy por hoy está encontrando la aplicación de las más de 50.000 patentes sobre software irregularmente concedidas por la Oficina Europea de Patentes, en contra de la doctrina europea, que las prohibe explícitamente: el Convenio de la Patente Europea en su artículo 52.</p>
+
+<p>Los dos europarlamentarios impulsores de una moción parlamentaria a favor del EPLA que próximamente se votará en Estrasburgo, Klaus Lehne y Sharon Bowles, tienen ambos claros intereses particulares en grandes gestoras de patentes; ¡la clase política no puede quedarse impasible ante esto!</p>
+
+<p>Este diagrama[0] explica la situación antes y después de la EPLA. En él se hace referencia a un documento que la OEP ha retirado de su web, aunque se encuentra disponible aquí[1] para que se pueda leer de primera mano cómo los propios algoritmos son patentables según sus dictámenes oficiales (sección 5.1).</p>
+
+<p>El EPLA entrega a los funcionarios de la OEP el único poder que aún les falta para poder legalizar como en EEUU, por jurisprudencia, las patentes de software, de métodos de negocio y de otras materias intelectuales: el poder judicial. Este poder es arrebatado a los juzgados mercantiles nacionales y al Tribunal Europeo de Justicia, retirándoles la potestad sobre toda materia de patentes, y se la entrega a unos jueces elegidos y reelegidos por la junta de la OEP. La OEP es una institución externa a la Unión Europea y a su cuerpo legislativo, y cuyo control democrático es prácticamente nulo.</p>
+
+<p>El EPLA, junto a su tratado complementario, el Acuerdo de Londres, implica que el 95% de las patentes europeas estarán sólo en inglés, mientras que el restante 5% lo estarán en alemán y en francés. Las empresas y ciudadanos que hablen otros idiomas se encontrarán en una franca desventaja competitiva. Igualmente, los juicios de patentes se desarrollarán siempre a nivel europeo y en uno o varios de los tres idiomas oficiales de la OEP: inglés, francés y alemán. El coste de defenderse ante cualquier patente (ya sea válida o manifiestamente invalidable) se multiplicará automáticamente por tres.</p>
+
+<p>En resumen, esto todo supone un atentado en toda regla contra la libertad de innovación en Europa y una subyugación de todo lo que ha permitido a los Hombres hacer avanzar la Ciencia y la Técnica a lo largo de milenios, además de ser escandaloso, y ética y moralmente inadmisible.</p>
+
+<p>Está en juego el futuro de las PYMEs tecnológicas europeas. No cabe inhibirse sino poner al tanto de la situación con urgencia a todos los europarlamentarios que sea posible.</p>
+
+<p>Reciban un cordial saludo</p>
+
+<p>[0] http://people.ffii.org/~abarrio/epla/The_EPLA_Road_to_SwPats_es.pdf</p>
+<p>[1] http://www.ffii.org/~abarrio/t030424eu1.pdf</p>
+</i>
+
+<p>Toda esta información puede encontrarse en la <a href="http://people.ffii.org/~abarrio/epla/">web de Alberto Barrionuevo sobre la EPLA</a>.</p>
+</div>
diff --git a/posts/111.html b/posts/111.html
new file mode 100644 (file)
index 0000000..1f6a600
--- /dev/null
@@ -0,0 +1,18 @@
+title: Web 2.0, GPLv3 y la difusión del software
+date: 2006-10-03 08:20
+---
+<div>
+<p>El diseño de la nueva versión de la licencia GPL ha levantado ampollas en muchas comunidades, especialmente en la de desarroladores del kernel Linux, por considerar que se anteponen criterios éticos a criterios técnicos (¿dónde está el problema?). También un buen número de desarrolladores de aplicaciones web 2.0 considera que los nuevos términos de la GPLv3 son demasiado restrictivos y que quitan más libertad de la que dan.</p>
+
+<p>Todos ellos olvidan que la GPL gira en torno a la idea de compartir con toda la sociedad y que si hay cosas que podían hacer con la GPLv2 y que no podrán hacer con la GPLv3 es debido a que se aprovechan de agujeros que tiene la GPLv2 (el mundo de la informática actual es muy distinto al de 1991).</p>
+
+<p>Un caso concreto, volviendo al asunto de la web 2.0. Supongamos que uso un Drupal modificado y mejorado por mi para montar un portal en mi servidor web. Drupal es GPL, y aunque he realizado modificaciones también es cierto que no lo distribuyo, solamente lo instalo en un servidor de mi propiedad, por lo que la GPL no me obliga a distribuir las modificaciones. Pero eso no quiere decir que sea ético hacerlo. Si la GPLv2 no nos obliga a comunicar las modificaciones al resto de la comunidad es porque en 1991 un caso como el que nos ocupa era impensable.</p>
+
+<p>La GPLv3 tiene una clausula que permite, de forma optativa, obligar a que se distribuyan estas modificaciones cuando se trate de una aplicación web. En contra de lo que muchos aprovechados o indocumentados arguyen, el hecho de tener una aplicación corriendo en un servidor no implica uso privado de esa aplicación si de forma remota la están usando decenas de personas, o más.</p>
+
+<p>Es el mismo caso que con los discos de música. Distribuir un disco es hacer copias y regalarlas o venderlas. Uso privado es poner el disco de música en la cadena de mi casa y escucharlo. Pero si mi cadena está conectada a una emisora de radio eso no es uso privado, eso es difusión.</p>
+
+<p>Un servidor web es lo mismo para el software que una emisora de radio para la música. No se realiza distribución de software, pero tampoco es uso privado, es difusión, y por esa razón la gente que está diseñando la GPLv3 quiere que, si es deseo del autor original, ese software siga siendo libre en caso de distribución y en caso de difusión.</p>
+
+<p>Todos los demás debates que se producen sobre si no es lo mismo un programa que un servicio, etc, etc, no son más que intentos de desviar la atención de lo realmente importante: si una persona usa un programa libre y lo mejora para su uso no privado, lo más justo y ético es que lo comparta.</p>
+</div>
diff --git a/posts/112.html b/posts/112.html
new file mode 100644 (file)
index 0000000..8e48ad0
--- /dev/null
@@ -0,0 +1,16 @@
+title: Las web 2.0 startups y la GPLv3
+date: 2006-10-04 07:25
+---
+<div>
+<p>Siguiendo con el tema del anterior artículo, se nos puede plantear el siguiente caso hipotético:</p>
+
+<p>Resulta que un buen día me levanto de la cama y mientras me tomo el desayuno se me ocurre una idea genial para forrarme (podría ser yo, podrías ser tú; como prefieras). Se trata de coger un programa GPLv3 que ya existe y modificarlo convenientemente para darle un uso distinto del original, algo en lo que nadie hasta ahora había pensado. Pero hay un problema; la licencia del programa añade una clausula opcional que me obliga a publicar esas modificaciones en el caso de que el programa esté abierto al público a través de un servidor web, y es exactamente lo que pensaba hacer.</p>
+
+<p><b>¿Cómo demonios voy a triunfar con mi idea si la competencia puede copiar mi programa sin coste alguno? Es un proyecto abocado al fracaso desde el principio.</b></p>
+
+<p>Son argumentos que ya se usaron hace muchos años, en los inicios de la GPL. ¿Cómo una empresa de software podía subsistir si la competencia y los clientes podían copiar los programas con gasto nulo de desarrollo? Pues como diría Galileo, <i>"y sin embargo se mueve"</i>. Lo que ocurre es que el planteamiento es erróneo y se trata el software como si fuera algo tangible. Las empresas de software no triunfan por tener programas que nadie más tiene, sino que el éxito está en tener esos programas antes que el resto. Lo mismo ocurre en la web 2.0.</p>
+
+<p>Veamos el caso real de meneame.net. Cualquiere puede realizar un clon de meneame. Basta con descargar el código, instalarlo y avisar a la gente. Pero nadie consigue el éxito que han conseguido sus desarrolladores. ¿Por qué? Porque, entre otras cosas, fueron los primeros en hacerlo.</p>
+
+<p>Para las empresas de software el gasto en I+D va dirigido, o debería ir dirigido, a adelantarse a la competencia. Ser los primeros en conseguir algo es lo más importante y es lo que da dinero. Y si nuestros competidores nos copian, mejor, ya que eso quiere decir que somos la empresa referencia del sector y eso es bueno. <b>Preocupémonos cuando dejen de copiarnos</b>.</p>
+</div>
diff --git a/posts/113.html b/posts/113.html
new file mode 100644 (file)
index 0000000..fe979e1
--- /dev/null
@@ -0,0 +1,22 @@
+title: Sobre el acuerdo entre Microsoft y Novell
+date: 2006-11-23 08:55
+---
+<div>
+<p>Se ha hablado largo y tendido sobre el acuerdo entre Microsoft y Novell y se han dicho sandeces del tipo de que ahora Microsoft puede demandar por infracción de patentes de software a las empresas que ofrecen servicios sobre GNU/Linux o de que las distribuciones de GNU/Linux que no sean Suse pueden ser consideradas "piratas" a partir de ahora.</p>
+
+<p>Pues bien, ese supuesto peligro no es más que humo. Es un FUD y cuanto más se hable de ello más se le sigue la jugada a Microsoft.</p>
+
+<ol>
+<li>Microsoft y Novell tenían patentes antes del acuerdo, las tienen ahora y las tendrán después. Pueden demandar por infracción de patentes cuando les de la gana.</li>
+
+<li>GNU/Linux <b>NO</b> infringe patentes de software. Todos nosotros nos oponemos a las patentes de software y a su uso, sea del tipo que sea, pero no pueden demandar a las empresas que ofrecen servicios sobre GNU/Linux ya que GNU/Linux <b>NO</b> infringe patentes de software.</li>
+
+<li>La GPL y todo el software que se encuentra protegido por la GPL <b>NO</b> está en peligro. Novell y Microsoft solamente pueden actuar directamente sobre el software que han desarrollado (o comprado con todos sus derechos de autor). Ninguno de ellos puede prohibir el uso de GNU/Linux ya que los derechos de GNU/Linux no les pertenecen.</li>
+
+<li>La comunidad está a salvo y los desarrolladores pueden seguir contribuyendo al software libre con total tranquilidad, ya que GNU/Linux <b>NO</b> infringe patentes de software y los derechos de GNU/Linux pertenecen a la comunidad en general. Microsoft podría comprar todas las empresas del mundo y todas las patentes de software del mundo y GNU/Linux seguiría perteneciendo a la comunidad y su uso seguiría siendo legal.
+</li></ol>
+
+<p>Tenemos que informar del FUD, pero siempre dejando claro que ese peligro del que habla antes que nadie Steve Ballmer no es más que humo. Primero fue SCO y ahora Novell; no pueden hacer nada contra el software libre excepto soltar un FUD tras otro y ellos lo saben mejor que nadie.</p>
+
+<p>No les sigamos el juego.</p>
+</div>
diff --git a/posts/114.html b/posts/114.html
new file mode 100644 (file)
index 0000000..2fe501f
--- /dev/null
@@ -0,0 +1,9 @@
+title: GNU/Stallmans - The Free Software Song
+date: 2006-11-23 09:58
+---
+<div>
+<p>Porque no todo es programar en la comunidad del software libre...</p>
+
+<p><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/z5eLn1QMJS0"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/z5eLn1QMJS0" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></p>
+
+</div>
diff --git a/posts/115.html b/posts/115.html
new file mode 100644 (file)
index 0000000..a1ff24a
--- /dev/null
@@ -0,0 +1,26 @@
+title: Lotb, un sistema multiblog GPL
+date: 2007-03-30 16:49
+---
+<div>
+<p><img width="89" height="100" border="0" align="left" alt="Lotb Logo" src="http://www.nongnu.org/lotb/img/logo.png" />Lord of the Blogs (Lotb) es un sistema multiblog en el que llevo trabajando unos meses. En si mismo no es un blog, pero permite centralizar la gestión de distintos blogs desde un único sitio. Su particularidad es que los blogs pueden encontrarse en distintos servidores, usar distintas bases de datos e incluso distinto software. Por ejemplo, con Lotb podríamos usar un blog con Wordpress y otro con Textpattern en un servidor distinto, usando siempre el mismo software de gestión.</p>
+
+<p>Una utilidad bastante evidente para Lotb es usarlo para implementar granjas de blogs, aunque también puede ser usado por una sola persona para mantener sus distintos blogs. Al permitir blogs desde distintos servidores el sistema es fácilmente escalable sin que ello repercuta en el rendimiento global.</p>
+
+<p>El proyecto se encuentra todavía en fase pre-alfa, pero el esqueleto de todo el sistema ya está desarrollado y las pruebas realizadas hasta el momento son suficientemente satisfactorias como para continuar adelante. De momento no existe una versión descargable y solamente se puede acceder al código fuente en PHP usando CVS. La licencia actual es GPLv2 aunque se pasará a la GPLv3 en cuanto sea oficial.</p>
+
+<p>El proyecto se encuentra ubicado en <a href="http://savannah.nongnu.org/">Savannah</a>. Se puede acceder a la <a href="http://www.nongnu.org/lotb/">web oficial de Lotb</a> o a la <a href="http://savannah.nongnu.org/projects/lotb">web de Lotb en Savannah</a> para más información.</p>
+
+<p>Lotb se comunica con todos los blogs que cuelgan de él usando un sistema de mensajes para intercambiar información sobre usuarios, posts, estadísticas e información en general. También son usados para transmitir ordenes básicas. Los mensajes se firman para verificar el remitente, de forma que no se aceptan mensajes provenientes de fuera del sistema formado por Lotb y sus blogs dependientes. Los mensajes no se cifran ya que en ningún momento se transmite información confidencial como podrían ser contraseñas; solamente se transmiten los datos que muestran los blogs como pueden ser nombres, textos o comentarios.</p>
+
+<p><img width="485" height="368" border="0" align="middle" alt="Lotb Scheme" src="http://www.nongnu.org/lotb/img/diagrama.png" /></p>
+
+<p>Los mensajes se agrupan en dos tipos: síncronos y asíncronos.</p>
+
+<p>Cuando usamos mensajes síncronos el origen se queda esperando la respuesta del destino, normalmente un código de resultado o el valor de alguna variable. Estos mensajes se usan para tareas prioritarias del sistema como añadir blogs o comunicar cambios de claves públicas.</p>
+
+<p>Los mensajes asíncronos se controlan mediante una tarea que se encarga de enviarlos, comprobar si han llegado o si hay que reenviarlos y procesar los resultados. Estos mensajes se usan para tareas normales del sistema como añadir usuarios, enviar entradas a uno o varios blogs, gestionar comentarios, etc.</p>
+
+<p>El sistema de mensajes síncronos ya está implementado y ahora trabajo en los mensajes asíncronos además de ir completando el juego de instrucciones a medida que voy añadiendo funcionalidades.</p>
+
+<p>Existen unas <a href="http://www.nongnu.org/lotb/lists.html">listas de correo</a> para preguntar dudas o comentar aspectos del desarrollo y las <a href="http://www.nongnu.org/lotb/faq.html">FAQ</a> se irán completando con el tiempo.</p>
+</div>
diff --git a/posts/116.html b/posts/116.html
new file mode 100644 (file)
index 0000000..74cc4f5
--- /dev/null
@@ -0,0 +1,15 @@
+title: Ya se debate el tercer borrador de la GPLv3
+date: 2007-03-29 17:45
+---
+<div>
+<p>La licencia GPL en su tercera versión está cada vez más cerca de ser oficial. La intención es que esté lista para este año. De momento ya va por su tercer borrador, que incluye las ideas aportadas por la comunidad, por los comités de discusión oficiales y por las conferencias internacionales de India y Japón.</p>
+
+<p>Los cambios más relevantes son:</p>
+<ul>
+       <li>Los que infrinjan la licencia por primera vez podrán recuperar su licencia de forma automática si solucionan el problema en el plazo de 30 días.</li>
+       <li>Se han simplificado los términos de compatibilidad de licencia, por lo que ahora son más fáciles de entender y administrar.</li>
+       <li>Los fabricantes que incluyan software GPLv3 en sus productos deberán proporcionar también manuales de instalación junto con las fuentes de los programas usados.</li>
+       <li>Se han añadido nuevas limitaciones sobre el uso de patentes de software orientadas a prevenir intentos de protección discriminatoria a los distribuidores por parte de titulares de patentes, como en el caso del pacto Microsoft-Novell.</li>
+</ul>
+<p>Estos cambios, al igual que los demás términos de la licencia, están pensados para permitir que los programas del proyecto GNU y todos los programas registrados bajo la GPL sigan siendo libres, es decir, se puedan usar, copiar, modificar y distribuir modificados, a pesar de las nuevas medidas tecnológicas que intentan impedirlo.</p>
+</div>
diff --git a/posts/117.html b/posts/117.html
new file mode 100644 (file)
index 0000000..fa5fdc3
--- /dev/null
@@ -0,0 +1,10 @@
+title: Extremadura a la cabeza de España
+date: 2007-04-14 18:35
+---
+<div>
+<p>Estos días estoy en la <a href="http://iparty9.aditel.org/">iParty9 de Aditel</a>, con tiempo para programar, leer, pensar e intercambiar ideas con gente que sabe un montón. Sin ir más lejos el jueves estuvimos debatiendo sobre la problemática del DRM (por cierto, tengo que buscar los enlaces que me pidió <a href="http://servidora.blogspot.com/">glo</a>) y sobre cómo la gente no es consciente, o no quiere serlo, de que las grandes compañías productoras de obras digitales (música, cine, programas, etc) están vulnerando de forma sistemática sus derechos.</p>
+
+<p>Por otro lado hoy me encuentro con el interesante artículo <a href="http://tuxpepino.wordpress.com/2007/04/14/extremadura-punta-de-flecha/">Extremadura: Punta de flecha</a> que como muchos otros nos explica el gran avance tecnológico que se está llevando a cabo en Extremadura a lomos del software libre. Casos similares se están dando en los países hispanoamericanos y en algunos países asiáticos. O el caso de Baleares, donde muchas empresas están haciéndose un nicho en el mercado del software gracias a los programas libres.</p>
+
+<p>¿Acaso hay que ser pobre o hay que tener recursos limitados para ver con claridad? Si estos casos como el de Extremadura están triunfando de la forma que lo están haciendo, ¿qué podrían hacer países, estados o comunidades con muchos más recursos? Es una pena que el dinero público, es decir, nuestro dinero, se gaste en empresas que atacan los derechos de nuestros ciudadanos cuando invirtiendo en software libre ese dinero se transformaría realmente en algo bueno para la sociedad.</p>
+</div>
diff --git a/posts/118.html b/posts/118.html
new file mode 100644 (file)
index 0000000..82e2ac3
--- /dev/null
@@ -0,0 +1,10 @@
+title: Descubriendo bogofilter
+date: 2007-04-19 14:51
+---
+<div>
+<p>Aunque es un programa que ya lleva años por el mundo no había oído hablar de él, y ahora me pregunto cómo he podido vivir sin él. <a href="http://bogofilter.sourceforge.net/">Bogofilter</a> es un programa para filtrar spam desarrollado en sus inicios por Eric Raymond y que a diferencia del spamassassin no usa reglas bayesianas sino que utiliza una base de datos de palabras para calcular la probabilidad de que un mensaje sea o no sea spam.</p>
+
+<p>Hay un artículo muy bueno sobre el tema en <a href="http://bulma.net/">Bulma</a>, <a href="http://bulma.net/body.phtml?nIdNoticia=1537">Bogofilter mata mejor</a>, en el que aparte de explicar en qué consiste el algoritmo que usa el programa también explica cómo instalarlo y configurarlo.</p>
+
+<p>Mi experiencia es que bogofilter da mejores resultados que spamassassin sin necesidad de un entrenamiento tan concienzudo, además de poder integrarlo fácilmente en cualquier sistema de correo mediante <a href="http://www.procmail.org/">procmail</a>. Si no lo conoces pruébalo y te sorprenderás.</p>
+</div>
\ No newline at end of file
diff --git a/posts/119.html b/posts/119.html
new file mode 100644 (file)
index 0000000..6940390
--- /dev/null
@@ -0,0 +1,16 @@
+title: Jugando con FVWM-Crystal
+date: 2007-07-26 17:38
+---
+<div>
+<p>Siempre me han fascinado los programas que respetan el "medio ambiente virtual", es decir, que no machacan tu ordenador con un excesivo consumo de recursos que en la mayoría de los casos no está justificado.</p>
+
+<p>Por eso cuando todo el mundo se maravillaba con Gnome, KDE, transparencias, etc, yo prefería trabajar con Window Maker y no tener que oír cómo rascaba mi disco duro (no, no quiero ampliar memoria para poder ver más dibujitos).</p>
+
+<p>Hasta que conocí FVWM-Crystal, basado en FVWM y que conjuga un aspecto más que aceptable con una excelente optimización de recursos. Hasta funciona de forma decente en mi portátil Pentium III con 64 MB.</p>
+
+<p>Hoy, para desestresarme un poco ;-) , he estado explorando sus posibilidades algo más a fondo. Es curiosa la forma que tiene de construir los menús, y a la vez elegantemente sencilla, con una estructura de ficheros  y directorios para crear las entradas y las secciones y subsecciones en /usr/share/fvwm-crystal/fvwm/Applications/ y unos scripts que recogen esa estructura y construyen el menú.</p>
+
+<p>Esos scripts pueden ser ejecutados como usuario, con lo que puedes conseguir que tus programas hagan maravillas con el gestor de ventanas :-)</p>
+
+<p>Lo que aún no tengo claro es cómo ejecutar aplicaciones en segundo plano que muestren información en la barra de tareas, pero tiempo al tiempo.</p>
+</div>
\ No newline at end of file
diff --git a/posts/12.html b/posts/12.html
new file mode 100644 (file)
index 0000000..36faa19
--- /dev/null
@@ -0,0 +1,10 @@
+title: Por fin vuelvo a respirar
+date: 2004-01-28 08:50
+---
+<div>
+<p>Y es que este último mes había estado trabajando al 150% debido al cambio de ERP que ha realizado la empresa en la que trabajo. Desde el día 15 del mes pasado he visto de todo y por fin parece que la cosa esta empezando a tranquilizarse. Espero que sea verdad lo de que <i>lo que no te mata te hace fuerte</i>.</p>
+
+<p>En fin, lo importante es que por fin vuelvo a tener algo de tiempo para contestar a los mails y volver a dedicarme un poco a los proyectos que tengo en marcha y los que estan por empezar. El primero de todos, liberar de una vez por todas kkblog, que llevo desde noviembre intentado tener algo de tiempo para comentar el código y dejarlo un poco legible y no hay manera.</p>
+
+<p>Tambien tengo en mente un artículo sobre las empresas y el software libre. A ver si lo puedo tener para el sábado y lo pondré en el weblog de Aditel para darle algo más de vidilla.</p>
+</div>
diff --git a/posts/120.html b/posts/120.html
new file mode 100644 (file)
index 0000000..5684a06
--- /dev/null
@@ -0,0 +1,31 @@
+title: Pequeña guía de la GPLv3
+date: 2007-11-11 07:13
+---
+<div>
+<p>El FSF Compliance Lab ha preparado <a href="http://www.fsf.org/licensing/licenses/quick-guide-gplv3.html">una pequeña guía de la GPLv3</a> para desarrolladores, explicando de forma fácilmente comprensible los cambios más importantes de la nueva licencia.</p>
+
+<p>La GPLv3 es muy similar a su antecesora; el espíritu es el mismo, usar las leyes de copyright para preservar la libertad de los usuarios, al contrario de lo que ocurre con el software privativo.</p>
+
+<p>Haciendo un poco de memoria, decimos que un programa es libre si un usuario puede:</p>
+
+<ul>
+<li>Usar el programa para cualquier propósito.</li>
+<li>Compartir el programa con otras personas.</li>
+<li>Modificar el programa para adaptarlo a sus necesidades.</li>
+<li>Compartir las modificaciones efectuadas en el programa.</li>
+</ul>
+
+<p>Si ese programa se encuentra protegido además por una licencia como la GPL sabemos que ese programa seguirá siendo libre independientemente del soporte en el que se encuentre o de quién sea su distribuidor, lo que se conoce como "copyleft".</p>
+
+<p>La GPLv3, al igual que sus antecesoras, nos proporciona esta seguridad aunque con un texto más claro y fácil de leer, más internacional (se han tenido en cuenta las peculiaridades jurídicas de distintos países) y más adaptada a las nuevas formas tecnológicas de restringir la libertad de los usuarios.</p>
+
+<p>Es en este último punto dónde más ha avanzado la nueva versión de la GPL.</p>
+
+<p>Los programas con GPLv3 están a salvo de la "tivoización", la posibilidad de impedir de forma física (mediante contraseñas, criptografía u otras formas de protección) que los usuarios puedan estudiar y/o modificar los programas, incluso aunque sean GPL. Con la nueva versión no se prohiben estas formas de protección, pero se obliga a que el usuario pueda acceder a los programas (conociendo las contraseñas, con claves criptográficas propias, etc.) de forma que sus libertades no se vean cohartadas.</p>
+
+<p>A estas alturas todo el mundo conoce o a oído hablar del DRM. Existen leyes a nivel europeo que prohiben el desarrollo de programas para saltarse las protecciones DRM (juicio contra <a href="http://es.wikipedia.org/wiki/Jon_Lech_Johansen">DVD Jon</a>). La GPLv3 permite usar código GPL para implementar sistemas DRM pero la sección 3 indica que estos sistemas no serán considerados como medida efectiva de "protección" tecnológica, por lo que es posible escribir programas que rompan el sistema de protección y distribuirlos sin infringir ninguna ley.</p>
+
+<p>Los programas protegidos mediante la GPLv3 también proporcionan a sus usarios la seguridad de que no podrán ser demandados por infracción de patentes de software, ya que tienen la obligación de venir acompañados de las apropiadas licencias de uso de patentes. Este tema no nos preocupa demasiado en Europa, al menos de momento, pero siempre es de agradecer.</p>
+
+<p>La GPLv3 protege de forma más efectiva la libertad de los usuarios y también permite una mayor cooperación entre la comunidad del software libre. Existen otras licencias para software libre, cierto, pero no encontrarás a nadie más preocupado por la libertad y la ética que la gente que ha trabajado para que esta nueva versión de la GPL sea una realidad.</p>
+</div>
\ No newline at end of file
diff --git a/posts/121.html b/posts/121.html
new file mode 100644 (file)
index 0000000..a4977c0
--- /dev/null
@@ -0,0 +1,18 @@
+title: Un canon para promocionar la cultura
+date: 2008-02-03 20:34
+---
+<div>
+<p>Ahora que se ha puesto tan de moda hablar sobre el canon, sociedades de gestión, etc, no quiero ser menos y también voy a contribuir con algo más de morralla blogosférica o blogocósica o como se llame.</p>
+
+<p>Siempre me he posicionado en contra del canon, incluso cuando solamente se aplicaba en fotocopiadoras, cintas de video y otros medios más tradicionales, es decir, cuando nadie sabía qué era eso del canon (cuando era un chaval, vaya). Pero ahora me encuentro en una posición incómoda; desde que hablar en contra del canon se ha convertido en sinónimo de música gratis (olvidando el resto de artes como si no fueran cultura) ya no defiendo mis posiciones con la misma vehemencia. Y como me gusta llevar la contraria y crear polémica, pues alla voy: <b>Sí al canon.</b> Toma ya, con un par.</p>
+
+<p>Tranquilos, no se me escandalicen ustedes. Los que me conocen bien ya se imaginarán que aquí hay trampa. ;-) En efecto, mi apoyo al canon va condicionado a una serie de requisitos que ahora mismo están muy lejos de darse. Veamos. Por un lado tenemos el derecho de copia privada, algo que debe garantizarse y potenciarse, y si me dejan incluso me atrevo a decir que lo mismo debería hacerse con los derechos de difusión y de distribución. No me cabe en la cabeza que un particular no pueda crear sus propios discos recopilatorios y ponerlos a la venta, por poner un ejemplo, siempre y cuando se respete la autoría de las canciones. Y por otro lado tenemos la necesidad de promocionar (pagar) para que la actividad de creación cultural no se vea perjudicada. Pero claro, eso hay que aclararlo y mucho.</p>
+
+<p>Para empezar, el canon que tengo en mente debería ser gestionado de forma pública. Nada de sociedades privadas a las que nadie controla (excepto los que sacan tajada, claro) sino una gestión similar a las que se realizan con el I.R.P.F., la Seguridad Social, el IVA y demás impuestos. Las sociedades de gestión sobran, o como mucho su existencia tendría sentido si se comportaran de forma similar a como lo hacen los colegios oficiales. Pero nada de manejar dinero público, que lo es, no se sabe cómo, ni para qué, ni por quiénes.</p>
+
+<p>Ese dinero se debe usar para promocionar la cultura. Aquí no hace falta ser muy listo para comprender que gente como Bisbal o como Boris o como Luis Cobos no necesitan el dinero del canon para seguir "creando". Todo lo contrario, el canon debería pagar ayudas para esos jóvenes que trabajan de camareros o en la obra y por la noche tocan por cuatro duros en algún pub. O para esa señora que escribe después de acostar a sus hijos tras una jornada de once horas. O para las bibliotecas públicas (¿en qué cabeza cabe que las bibliotecas deban pagar?). O para ese señor que intenta vender sus cuadros en el mercadillo y que nadie conoce porque le falta un buen padrino.</p>
+
+<p>Yo, como todo hijo de vecino, pago a la seguridad social y no lo hago para recibir atención médica, ni para mis familiares, ni para mis amigos. Si lo hago es por esos niños con cáncer que me rompen el corazón, por esos abuelitos con alzheimer, por toda esa gente que sufre y que gracias a ese dinero que pagamos pueden luchar por conseguir una vida normal sin que por ello se tengan que arruinar sus padres o sus hijos.</p>
+
+<p>Y por eso quiero pagar el canon. No para que Ramoncín siga viviendo de la sopa boba (que seguro que sin canon puede hacerlo igual de bien) sino para que el colegio de mi barrio, o del tuyo, o del tuyo, pueda dar clases de piano a esos jóvenes talentos que se desperdician un día sí y otro también porque ni ellos mismos han tenido la oportunidad de darse cuenta.</p>
+</div>
\ No newline at end of file
diff --git a/posts/122.html b/posts/122.html
new file mode 100644 (file)
index 0000000..314773d
--- /dev/null
@@ -0,0 +1,17 @@
+title: El software libre sí crea mercado
+date: 2008-02-21 20:16
+---
+<div>
+<p>Alexey Leonidovich Pazhitnov, creador del juego Tetris, en <a href="http://www.consumer.es/web/es/tecnologia/software/2008/02/21/174286.php">una entrevista publicada en Consumer</a> afirma que <i>"eso [el software libre] nunca debería haber existido y a día de hoy no debería existir. Y le diré por qué: el software libre destruye mercado. Allí donde con el esfuerzo de grupos de personas se construyen posibilidades de mercado, de riqueza y de prosperidad, llega gente irresponsable y crea desarrollos alternativos que hunden a las empresas. Y eso no es bueno para el desarrollo de la tecnología; el software libre no tiene proyección de mercado, no crea riqueza, sólo es una muestra de rebeldía estéril."</i></p>
+
+<p>Como ya he dicho muchas veces no voy a entrar en si desarrollar software libre puede ser fuente de riqueza. Es un hecho. RedHat y Canonical con distribuciones, MySQL (ahora Sun) con bases de datos, Sun con suites ofimáticas, Menéame o Wordpress con aplicaciones web, etc, etc. Nadie puede negar que con el software libre se puede ganar dinero porque mucha gente lo está haciendo ahora mismo.</p>
+
+<p>El problema para las empresas de desarrollo de software privativo no reside en si el código es accesible o no, o en que se puedan copiar los programas. El verdadero problema para ellos es que el software libre cambia las reglas del juego, les quita fuerza a los monopolios e incrementa la competencia. Pero estas empresas están tan acostumbradas a su dominio del mercado que son incapaces de competir.</p>
+
+<p>Pongamos el ejemplo típico. Para Microsoft, Debian o gNewSense representan la competencia, una competencia fiera en el sector de los sistemas operativos. Pero también son competencia para RedHat o para Fedora. Y no digamos para Canonical ya que Ubuntu está basada en Debian. Sin embargo para estas empresas las distribuciones sostenidas por organizaciones no representan un problema tan serio. Claro, estas empresas están preparadas para moverse en un mercado más dinámico y competitivo, saben hacerlo bién y sacar dinero de ello.</p>
+
+<p>Es evidente que el software libre no se pensó como una forma de ganar dinero. Ni tampoco la pintura o la música. Normalmente un pintor empieza a pintar cuadros porque le gusta, y si puede venderlos pues mejor. Si se hace famoso y llega a ganar mucho dinero podremos decir que se ha hecho rico gracias a la pintura. Pero no podremos decir que se hizo pintor pensando en hacerse rico (o por lo menos no lo pensaba en serio).</p>
+
+<p>De la misma forma las características del software libre no se pensaron para hacer negocio, pero sin embargo puede hacerse. Nadie puede decir que no, porque es un hecho.</p>
+
+</div>
\ No newline at end of file
diff --git a/posts/123.html b/posts/123.html
new file mode 100644 (file)
index 0000000..e6ac6f6
--- /dev/null
@@ -0,0 +1,52 @@
+title: Aprovechando la potencia de GNU Common Lisp (GCL)
+date: 2008-09-06 07:16
+---
+<div>
+<p>Quien más quien menos ha oído hablar alguna vez de Lisp y del paradigma de la programación funcional. Lisp es un lenguaje de programación que no suele encontrarse fuera del mundo universitario y normalmente suele estar asociado a la Inteligencia Artificial (IA), aunque en realidad Lisp puede usarse para cualquier cosa e incluso puedo decir que hay problemas de complicada resolución con otros lenguajes de programación que en Lisp pueden ser bastante triviales. Aún así los programadores de Lisp no abundan en el mundo, y aquí en Castellón estoy bastante convencido de que me sobra una mano para contarlos.</p>
+
+<p>No voy a hablar sobre los pros y los contras de programar en Lisp, pero si te gusta Lisp o te ha picado el gusanillo con mi breve introducción o quieres conocer algo más que lenguajes de programación imperativa, te recomiendo que leas alguno de los <a href="http://www.paulgraham.com/lisp.html">ensayos sobre Lisp de Paul Graham</a> o alguna de las entradas de Slava Akhmechet en <a href="http://www.defmacro.org/">defmacro</a>.</p>
+
+<p><b>GNU Common Lisp</b>, de ahora en adelante <b>GCL</b>, es la implementación oficial de Lisp usada en el proyecto GNU. Existen otras implementaciones libres de Lisp que tienen más utilidades que GCL, como librerías de sockets, multithreading, etc, pero el hecho de que GCL fuera la preferida por los de GNU me animó a jugar un poco con ella y he de reconocer que no me siento decepcionado.</p>
+
+<p>Al contrario que con los compiladores de otros lenguajes, que compilan los programas a bytecode para despues ejecutarlos con una máquina virtual o compilarlos a lenguaje máquina, GCL compila a C para realizar una segunda compilación mediante gcc o el compilador de C que tengamos en nuestro sistema. Gracias a esta integración entre Lisp y C es posible programar con GCL usando C para bajo nivel (acceso a registros, memória, punteros, etc) y Lisp para alto nivel (gestión de listas, árboles, operaciones con funciones, macros, etc). Resumiendo, tenemos toda la potencia de C, lo que significa que podemos crear nuestras propias funciones de multithreading por ejemplo, y la potencia de un lenguaje de alto nivel como Lisp.</p>
+
+<p>Para lograrlo necesitamos solamente tres macros de GCL: <b>clines</b>, <b>defentry</b> y <b>defcfun</b>. Eso e instalar GCL, claro.</p>
+
+<p>Probaremos a hacer una prueba sencilla en la que definiremos una función en C que sume dos enteros y devuelva el resultado y usaremos esa función desde Lisp. Primero crearemos el fichero "misuma.lsp" con estas dos lneas:</p>
+
+<code>(clines "int misuma (int x, int y) { return x + y; }")
+(defentry mi-suma (int int) (int "misuma"))</code>
+
+<p>Con <b>clines</b> podemos introducir cadenas de texto directamente en el código C resultado de la compilación del programa. En este caso declaramos la función <b>misuma</b>. Y con <b>defentry</b> declaramos la función <b>mi-suma</b> en Lisp, que recibe dos enteros como parámetros y devuelve otro entero desde la función C <b>misuma</b>.</p>
+
+<p>Ahora ya podemos entrar en el intérprete de Lisp y compilar nuestro pequeño programa. Cuando se programa en Lisp no es necesario compilar ya que es un lenguaje interpretado (se suele compilar cuando el programa ya está acabado para ganar velocidad) pero debemos hacerlo si queremos integrar Lisp y C.</p>
+
+<p>Compilamos con <code>(compile-file "misuma.lsp")</code> y cargamos el código objeto que hemos generado con <code>(load "misuma.o")</code>. Ahora ya tenemos nuestra nueva función C disponible en Lisp. Si ejecutamos <code>(mi-suma 3 2)</code> obtendremos 5. ¿Impresionante, verdad? ¿No? Bueno, puede que no lo parezca pero esto es la punta del iceberg, una punta muy pequeña, ya que lo mismo que hemos hecho con la suma podemos hacerlo con la librería matemática de C, o con las librerías GTK, o con Qt, etc.</p>
+
+<p>Estoy realizando un proyecto en el que he integrado SDL con Lisp consiguiendo resultados bastante espectaculares, pero de eso hablaremos otro día.</p>
+
+<p>Me he dejado lo mejor para el final. ¿Es posible hacer una función en la que se mezclen instrucciones de C con instrucciones de Lisp? Pues podemos hacerlo gracias a <strong>defcfun</strong>. Vamos a verlo.</p>
+
+<p>Volvemos a editar "misuma.lsp" y añadimos las siguientes líneas:</p>
+
+<code>(defcfun "static object otrasuma (int x, int y)" 0
+"object z;"
+"int s = x + y;"
+('+ z)
+((list z (int x) (int y)) z)
+((cons z (int s)) z)
+"return z;")</code>
+
+<code>(defentry otra-suma (int int) (object "otrasuma"))</code>
+
+<p>Si volvemos a compilar y ejecutamos <code>(otra-suma 10 7)</code> obtendremos la lista <code>((+ 10 7) . 17)</code>. Veamos cómo lo hace.</p>
+
+<p>En primer lugar indicamos la cabecera de la función con su nombre y argumentos. El código en C se escribe usando cadenas de texto. Declaramos una variable z que contendrá la lista resultado y un entero s con el resultado de la suma.</p>
+
+<p>La macro <strong>defcfun</strong> usa una sintaxis especial de Lisp que no voy a explicar (que para eso está la documentación) de forma que <code>('+ z)</code> es lo mismo que hacer <code>(setq z '+)</code> desde el intérprete. Ahora ya tenemos que z contiene (+).</p>
+
+<p>Con la siguiente instrucción creamos la lista que representa la operación, con lo que z pasa a contener (+ 10 7). Y finalmente hacemos el cons con el resultado de la suma que teníamos en s, con lo que nos queda la lista que hemos obtenido al ejecutar la función.</p>
+
+<p>¿Y si ejecutamos <code>(= (eval (car (otra-suma 10 7))) (cdr (otra-suma 10 7)))</code>? Por la salud mental de todos espero que nos devuelva T ;-)</p>
+
+</div>
\ No newline at end of file
diff --git a/posts/124.html b/posts/124.html
new file mode 100644 (file)
index 0000000..c24c5e1
--- /dev/null
@@ -0,0 +1,28 @@
+title: Chipmunk Game Dynamics
+date: 2009-03-07 19:34
+---
+<div>
+<p><a href="http://wiki.slembcke.net/main/published/Chipmunk">Chipmunk</a> es una librería en C para simular espacios físicos en dos dimensiones con gravedad, colisiones, rebotes y más cosas. Es muy rápida en sus cálculos y la última versión es bastante estable, con lo que se convierte en una librería a tener en cuenta para el desarrollo de videjuegos. Se encuentra liberada bajo licencia MIT.</p>
+
+<p>En la web de <a href="http://wiki.slembcke.net/main/published/Chipmunk">Chipmunk</a> pueden verse vídeos que muestran lo que se puede hacer con esta librería, aunque el más sorpredente es sin duda el de <a href="http://files.slembcke.net/chipmunk/movies/sketches.mov">Sketches</a>.</p>
+
+<p>Para instalar Chipmunk tenemos que descargar <a href="http://files.slembcke.net/chipmunk/release/ChipmunkLatest.tgz">la última versión</a> y descomprimirla en nuestro sistema. El fichero incluye, además de la última versión de la librería, unas demos que nos sirven como ejemplos para comprender el funcionamiento.</p>
+
+<p>Una vez descargado y descomprimido, vamos al directorio <b>src</b> y ejecutamos</p>
+
+<p><b>cmake .</b></p>
+
+<p>para crear los ficheros Makefile necesarios para compilar e instalar la librería. Como Chipmunk está escrito en <a href="http://es.wikipedia.org/wiki/C_(lenguaje_de_programaci%C3%B3n)#C99">C99</a> tendremos que hacer una pequeña modificación en los ficheros generados por cmake antes de poder compilar. En el fichero <b>CMakeCache.txt</b> buscaremos la línea en la que se declara la variable <b>CMAKE_C_FLAGS:STRING</b>, que es donde se indican las opciones que se le pasarán a <b>gcc</b> y le asignamos <b>-std=c99 -D_GNU_SOURCE</b> para indicarle que compile siguiendo el estándar C99 e incluyendo las extensiones GNU.</p>
+
+<p>Ahora ya podemos compilar con <b>make</b> e instalar con <b>make install</b> de la forma habitual. Veremos que despues de la instalación las librerías se han quedado en /usr/local/lib y los ficheros de cabecera en /usr/local/include, pero si usamos un sistema Debian o basado en Debian es preferible tenerlos en /usr/lib y en /usr/include. En <b>cmake_install.cmake</b>, si sustituimos:</p>
+
+<p>SET(CMAKE_INSTALL_PREFIX "/usr/local")</p>
+
+<p>por</p>
+
+<p>SET(CMAKE_INSTALL_PREFIX "/usr")</p>
+
+<p>tendremos el problema resuelto y podremos empezar a usar esta magnífica librería en nuestros programas.</p>
+
+<p>E incluso podremos usarla en nuestros programas Lisp ;-)</p>
+</div>
\ No newline at end of file
diff --git a/posts/125.html b/posts/125.html
new file mode 100644 (file)
index 0000000..318b443
--- /dev/null
@@ -0,0 +1,16 @@
+title: The Ad Bard Network
+date: 2009-07-09 14:39
+---
+<div>
+<p>¿Pongo publicidad en el blog? Es una pregunta que me he hecho a veces. La idea de ganar algo de dinerillo con algo que haces por diversión, aunque hablemos de unos pocos céntimos al mes, siempre es sugerente, pero siempre me han asaltado las dudas. Si pongo publicidad, ¿me estoy vendiendo de alguna forma? Y lo peor, ¿qué ocurre si los anuncios que aparecen son de software privativo o de empresas que desarrollan o apoyan el software privativo? El riesgo a que aparezcan anuncios que vayan en contra de las normas éticas del software libre es demasiado alto como para arriesgarse.</p>
+
+<p>Por otro lado, las empresas que se dedican al mundo de la publicidad online suelen mantener sus algoritmos cerrados. Como no se puede consultar el código no hay forma de saber de qué forma se reparten los ingresos, cómo se decide qué anuncios son mostrados, qué palabras tienen más peso en esa elección, etc, etc... Es más, trabajar con esas empresas supone insertar trozos de código privativo o llamadas a código privativo desde un blog que defiende el software libre y que está desarrollado con software libre.</p>
+
+<p>Evidentemente, la conclusión final es <b>publicidad no</b>.</p>
+
+<p><img src="http://www.jsancho.org/wp-images/adbard_logo.png" alt="AdBard Logo" width="218" height="86" border="0" align="right" /> Pero hace algunos días me llego un correo sobre <a href="http://adbard.net/">The Ad Bard Network</a>, una red de publicidad online creada por la comunidad para la comunidad. Bajo la atenta mirada de la FSF, que es una muy buena garantía, tenemos la seguridad de que sus anuncios son únicamente de proyectos libres o de empresas involucradas con el movimiento del software libre. También los miembros de esta red, los que muestran los anuncios, tienen que estar involucrados en cierta medida, por lo que no veremos anuncios de Ad Bard en páginas de software privativo, o en contra del libre intercambio de ficheros, etc.</p>
+
+<p>Los algoritmos, por supuesto, son libres y los desarrolladores del proyecto están abiertos a sugerencias y mejoras como en todo buen proyecto libre. Así que es posible saber de qué forma se calculan las ganancias o en qué se basa para mostrar un anuncio en concreto.</p>
+
+<p>En estos momentos el proyecto está buscando beta testers, así que quizás me una. ¿Publicidad si o no? Quién sabe, pero al menos ahora tengo la certeza de que los anuncios no irán en contra de mis ideas.</p>
+</div>
diff --git a/posts/126.html b/posts/126.html
new file mode 100644 (file)
index 0000000..60ec131
--- /dev/null
@@ -0,0 +1,8 @@
+title: Infor&Games Festival
+date: 2009-09-07 16:18
+---
+<div>
+<p>Para los despistados que aún no lo sepan, y es raro porque los organizadores del evento están removiendo cielo y tierra, del 17 al 20 de septiembre se celebra en Castellón el <a href="http://inforgamesfestival.com/">InforGames Festival</a>, una especie de lan party mezclada con conciertos, zonas chill-out, paint-ball, dardos, etc.</p>
+
+<p>Servidor acudirá a predicar en el desierto, me temo, con la típica charla sobre el software libre que la mayoría de mis lectores conocen de sobra. Personalmente, recomiendo acudir a la charla <a href="http://www.inforgamesfestival.com/ninjafever.php">"Cómo montar una empresa de videojuegos y morir en el intento y tener que volver a jugar la fase con una vida menos"</a> o a la charla sobre <a href="http://www.bennugd.org/">Bennu GD</a> o a otras sobre seguridad o sobre montar máquinas recreativas, que parecen bastante más amenas, aunque si eres de esos que usa <a href="http://www.gnewsense.org/">gNewSense</a>, <a href="http://trisquel.info/es/">Trisquel</a> o <a href="http://www.ututo.org/web/">Ututo XS</a> es posible que te interese pasar por allí el sábado 19 a las 17:00 y descubrir que somos muchos más de lo que creías.</p>
+</div>
diff --git a/posts/127.html b/posts/127.html
new file mode 100644 (file)
index 0000000..d64d1a7
--- /dev/null
@@ -0,0 +1,21 @@
+title: Gacela
+date: 2009-09-20 07:38
+---
+<div>
+<p>Gacela es una extensión del lenguaje de programación Lisp para desarrollar juegos de forma rápida y fiable. Llevo trabajando en esto durante un año aproximadamente (no de forma continuada) y aunque aún falta mucho por hacer no tardaré demasiado en publicar las fuentes, por lo que voy a hacer una pequeña introducción.</p>
+
+<p>El nombre Gacela viene de GCL (GNU Common Lisp), que es la implementación oficial Lisp del proyecto GNU que uso para el proyecto. Con esto no quiero decir solamente que Gacela se basa en GCL, sino que el proyecto se encuentra identificado plenamente con las ideas del proyecto GNU. Y al mismo tiempo, intento transmitir la idea de que Gacela puede servir para programar juegos de una forma rápida e intuitiva.</p>
+
+<p>Gacela funciona internamente con SDL y OpenGL. La versión actual sólo permite programación gráfica (sin sonidos) y de una forma algo elemental, pero de momento la gestión de memoria funciona bastante bien. Con Gacela el programador no se preocupa de reservar y liberar memoria; el lenguaje se encarga de reservarla cuando es necesario y de liberarla cuando ya no se necesita. Lisp es muy bueno en eso.</p>
+
+<p>De momento uso el intérprete de Lisp para ejecutar los programas, pero tengo intención de desarrollar una interfaz gráfica que permita programar de forma más efectiva. Al redirigir la entrada y la salida del intérprete a otro programa es posible inyectar código en tiempo de ejecución, y es muy divertido. Lo he hecho de forma artesanal, redirigiendo la entrada y la salida a una terminal y programando un juego en tiempo de ejecución, con lo que no sabes si estas jugando o estas programando (¿hay alguna diferencia?).</p>
+
+<p>También estoy trabajando en un módulo para exportar los juegos de Lisp/Gacela a C, para que puedan ejecutarse sin el intérprete, empaquetarlos, etc... esto aún lo tengo en la cabeza y en papel, pero es algo que tendré que hacer antes o después.</p>
+
+<p>La única pega para muchos supongo que será el hecho de que Gacela es Lisp. Para mi es genial ;-)</p>
+
+<p>Y para los impacientes ahí va el primer tutorial:</p>
+
+<p><b>(run-game "Mi primer juego" (render-text "Hola mundo"))</b></p>
+
+</div>
\ No newline at end of file
diff --git a/posts/128.html b/posts/128.html
new file mode 100644 (file)
index 0000000..7ae48b6
--- /dev/null
@@ -0,0 +1,26 @@
+title: Primera versión de Gacela
+date: 2010-01-24 08:24
+---
+<div>
+<p>Por fin paso a publicar la primera versión de Gacela. Faltan muchas cosas y hay mucho trabajo que hacer, pero mis labores en la organización de la <a href="http://iparty11.aditel.org/">iParty 11</a> están empezando a quitarme demasiado tiempo y no quería esperar más.</p>
+
+<p>En la <a href="http://gacelaproject.org/">web de Gacela</a> he puesto enlaces a dos vídeos de demostración y al código del proyecto. Son dos ficheros: en uno se encuentra el código del intérprete de Gacela y en otro se encuentra el editor (en los vídeos lo vereis un poco mejor).</p>
+
+<p>Las dependencias para compilar el intérprete son las siguientes:</p>
+<ul>
+<li>gcl</li>
+<li>libsdl1.2-dev</li>
+<li>libsdl-image1.2-dev</li>
+<li>libsdl-mixer1.2-dev</li>
+<li>libftgl-dev</li>
+<li>libsm-dev</li>
+<li>libxmu-dev</li>
+<li>libxaw7-dev</li>
+<li>libgmp3-dev</li>
+<li>libreadline5-dev</li>
+</ul>
+
+<p>Y para compilar el editor también necesitareis libgtk2.0-dev</p>
+
+<p>Como la documentación es casi inexistente responderé a cualquier pregunta desde los comentarios.</p>
+</div>
\ No newline at end of file
diff --git a/posts/129.html b/posts/129.html
new file mode 100644 (file)
index 0000000..b2a423e
--- /dev/null
@@ -0,0 +1,8 @@
+title: Gacela en la web con canvas
+date: 2010-02-13 13:13
+---
+<div>
+<p>Estos últimos días estoy trabajando en un compilador sencillo de Gacela a Javascript para poder desarrollar juegos para la web usando <a href="http://es.wikipedia.org/wiki/Canvas">canvas</a>. Aunque ando muy ocupado entre el trabajo y otros proyectos, intentaré tener disponible una primera versión lo más pronto posible. De esta forma la gente podrá porbar Gacela sin necesidad de instalar nada en sus ordenadores.</p>
+
+<p>También estoy rumiando cómo hacer para usar en Gacela modelos desarrollados con <a href="http://www.blender.org/">Blender</a>, pero para eso aún falta un poco.</p>
+</div>
\ No newline at end of file
diff --git a/posts/13.html b/posts/13.html
new file mode 100644 (file)
index 0000000..19373a8
--- /dev/null
@@ -0,0 +1,16 @@
+title: Cambiar permisos de directorios
+date: 2004-01-28 11:18
+---
+<div>
+<p>Ayer preguntaban en la lista de correo de <a href="http://www.hispalinux.org/">Hispalinux</a> cómo cambiar de forma recursiva los permisos de unos directorios, pero respetando los permisos que tuvieran los ficheros. Aunque la respuesta era bastante trivial despues pensé que quizás no era tan trivial para otras personas, así que expongo la solución, que por otra parte viene tambien si miramos el <i>man</i> del comando <i>find</i>.</p>
+
+<p>Evidentemente, si ejecutamos <b>chmod -R 0777 ./*</b> nos encontraremos con que nos cambian los permisos de todo lo que cuelga del directorio ./, ya sean ficheros o directorios.</p>
+
+<p>Una forma de solucionarlo es mediante el comando <b>find</b>. Este comando nos permite hacer búsquedas por nombre de fichero, tamaño, fecha, etc, y de forma adicional nos permite realizar operaciones sobre el resultado de la búsqueda. Para el asunto que tratamos bastaría con hacer:</p>
+
+<p><pre>find . -type d -exec chmod 0777 {} \;</pre></p>
+
+<p>Buscamos a partir del directorio ./, le decimos además que los ficheros tienen que ser de tipo d, es decir directorios, y sobre el resultado ejecutamos el comando <b>chmod</b> con las opciones indicadas. Las llaves son un sinónimo de resultado de la búsqueda del <b>find</b>.</p>
+
+<p>Buena herramienta, el <b>find</b>.</p>
+</div>
diff --git a/posts/130.html b/posts/130.html
new file mode 100644 (file)
index 0000000..94512a5
--- /dev/null
@@ -0,0 +1,12 @@
+title: iParty 11, la fiesta del software libre en Castellón
+date: 2010-04-01 16:22
+---
+<div>
+<p><img src="/wp-content/uploads/2011/03/cartel-iparty11-mini.png" alt="Cartel iParty 11" border="0" align="right" />Este año me encargo de la organización de la <a href="http://iparty.aditel.org/">iParty 11</a>, como muchos ya sabeis, y aunque está resultando una tarea ardua en extremo en algunas ocasiones, he de reconocer que resulta gratificante comprobar como día tras día crece el número de inscritos, incluso con gente que viene desde Zamora o desde Vigo.</p>
+
+<p>Este año el nivel de los conferenciantes es muy bueno, con profesores de la <a href="http://www.uji.es/">UJI</a> de reconocido prestigio, profesionales del software libre que nos demuestran con su ejemplo que es posible ganar dinero sin cercenar libertades y hackers que desean enseñar al mundo sus ocultos poderes ;-)  Muchos de ellos son anteriores organizadores de la iParty, que vuelven a Castellón con una gran experiencia acumulada.</p>
+
+<p>Desde aquí invito a todo el que quiera a <a href="http://iparty.aditel.org/?page_id=154">inscribirse en la iParty 11</a> y disfrutar de la fiesta del software libre.</p>
+
+<p>P.D.: El martes 6 a las 9:00 empezaremos el montaje y todo el que quiera ayudar será bienvenido.</p>
+</div>
\ No newline at end of file
diff --git a/posts/131.html b/posts/131.html
new file mode 100644 (file)
index 0000000..400ccda
--- /dev/null
@@ -0,0 +1,10 @@
+title: Estoy en la iParty 11... ¡y estoy descansando!
+date: 2010-04-10 18:34
+---
+<div>
+<p>Despues de seis meses de trabajo, dos de ellos casi sin descanso, y una última semana de locos, por fin he tenido tiempo de comprobar todo el correo (tenía correos pendientes de contestar desde hacía una semana) y ahora por fin tengo tiempo de volver a pensar en mis frikadas, proyectos, etc.</p>
+
+<p>Aunque ha sido agotador da gusto comprobar que aunque algunas cosas se podrían haber mejorado, en general el resultado es bastante aceptable y creo que la gente lo está pasando bien, que es lo que importa.</p>
+
+<p>¿Y ahora qué? Pues un sábado noche que promete y un domingo de relax por la mañana, con entrega de premios y recogida de cables por la tarde... y despues volver a mi vida tranquila y familiar, y coger la mochila y volver a la montaña, que ya va siendo hora de desconectar un poco... árboles, pajaros, naturaleza, mmmmmmm :-)</p>
+</div>
\ No newline at end of file
diff --git a/posts/132.html b/posts/132.html
new file mode 100644 (file)
index 0000000..0ff5c39
--- /dev/null
@@ -0,0 +1,10 @@
+title: Editar ficheros PDF en GNU/Linux
+date: 2010-06-15 18:27
+---
+<div>
+<p>El otro día necesitaba editar un fichero PDF y me puse a buscar por Internet cómo podría hacerlo. Existe un programa, <a href="http://sourceforge.net/projects/pdfedit/">PDFedit</a>, que permite editar texto, añadir texto, etc, pero no tiene ninguna opción para añadir gráficos, que era lo que yo necesitaba.</p>
+
+<p>Pero descubrí que es posible abrir PDFs usando <a href="http://www.gimp.org/">GIMP</a>. Cada una de las hojas del documento se convierte en una capa del nuevo gráfico creado al importar el fichero PDF, en las que podemos hacer lo que haríamos con cualquier gráfico, es decir, añadir texto, fotos, girar, cambiar de tamaño, etc.</p>
+
+<p>Despues podemos guardar las modificaciones como ficheros PDF, uno por cada hoja, usando la impresión a PDF de <a href="http://www.gimp.org/">GIMP</a>. Despues, volviendo a <a href="http://sourceforge.net/projects/pdfedit/">PDFedit</a>, podemos eliminar las hojas que hemos modificado e insertar las nuevas desde los ficheros que hemos creado desde <a href="http://www.gimp.org/">GIMP</a>... y ya tenemos nuestro PDF modificado.</p>
+</div>
\ No newline at end of file
diff --git a/posts/133.html b/posts/133.html
new file mode 100644 (file)
index 0000000..71acbb9
--- /dev/null
@@ -0,0 +1,8 @@
+title: Between parentheses, improving the world with Lisp
+date: 2010-06-15 18:37
+---
+<div>
+<p>Llevo unos días escribiendo en <a href="http://betweenparentheses.wordpress.com/">Between parentheses</a>, el blog oficial de <a href="http://gacelaproject.org/">Gacela</a>, en el que voy publicando explicaciones del diseño interno, ejemplos de uso, etc.</p>
+
+<p>Está escrito en inglés (sed benévolos).</p>
+</div>
\ No newline at end of file
diff --git a/posts/134.html b/posts/134.html
new file mode 100644 (file)
index 0000000..873bbbd
--- /dev/null
@@ -0,0 +1,8 @@
+title: Segunda estrella a la derecha. Todo recto hacia el mañana.
+date: 2010-08-23 06:55
+---
+<div>
+<p>Aún no salgo de mi asombro. Por casualidad me he encontrado con <a href="http://www.copenhagensuborbitals.com/">Copenhagen Suborbitals</a>, un proyecto sin ánimo de lucro que pretende lanzar una pequeña nave tripulada al espacio a finales de esta semana. Como ellos mismos dicen, estan compartiendo toda la información técnica del proyecto en la medida de lo posible.</p>
+
+<p>Siempre he pensado que dentro de 100 años cualquier persona podrá fabricar un pequeño vehículo espacial para pasearse por las alturas orbitales, de la misma forma que hoy en día cualquiera puede construirse un coche o un ordenador con la suficiente documentación, un mínimo de financiación y mucha constancia. Pues esta gente lo está haciendo realidad, poniendo un pie en el siglo XXII.</p>
+</div>
\ No newline at end of file
diff --git a/posts/135.html b/posts/135.html
new file mode 100644 (file)
index 0000000..bb531eb
--- /dev/null
@@ -0,0 +1,17 @@
+title: Cómo escribir un SO de estar por casa
+date: 2011-01-14 18:21
+---
+<div>
+<p><img src="/wp-content/uploads/2011/03/computer.gif" align="right" />
+<a href="http://mikeos.berlios.de/">MikeOS</a> es un sistema operativo para sistemas x86, escrito en ensamblador. Con un código bien comentado y mucha documentación, es una herramienta de aprendizaje que nos enseña que desarrollar un SO no es en realidad excesivamente dificil.</p>
+
+<p>La <a href="http://mikeos.berlios.de/LICENSE.TXT">licencia de MikeOS</a> es del tipo BSD, por lo que da todas las facilidades para jugar con este interesante proyecto.</p>
+
+<p>Es recomendable leer el artículo de Mike Saunders <a href="http://mikeos.berlios.de/write-your-own-os.html">How to write a simple operating system</a>, que sirve como introducción para que podamos hacernos nuestro propio SO.</p>
+
+<p><b>Actualización:</b><br /> Para los interesados en el tema también he encontrado:</p>
+<ul>
+   <li><a href="http://www.osdever.net/bkerndev/">Bona Fide OS Development Bran's Kernel Development Tutorial</a></li>
+   <li><a href="http://www.jamesmolloy.co.uk/tutorial_html/index.html">Roll your own toy UNIX-clone OS</a></li>
+</ul>
+</div>
\ No newline at end of file
diff --git a/posts/136.html b/posts/136.html
new file mode 100644 (file)
index 0000000..562230c
--- /dev/null
@@ -0,0 +1,15 @@
+title: La FSF apoya el proyecto WebM
+date: 2011-01-23 07:01
+---
+<div>
+<img src="/wp-content/uploads/2011/03/webm-logo.png" align="right" />
+<p>En <a href="http://www.fsf.org/news/supporting-webm">No double standards: supporting Google's push for WebM</a> la Free Software Foundation ha anunciado su apoyo al <a href="http://www.webmproject.org/">proyecto WebM</a> como una alternativa al codec H.264 sujeto a patentes de software, apoyando con ello la decisión de Google de dejar de dar soporte a H.264 en sus navegadores.</p>
+
+<p>Por ahora sigue siendo necesario echar mano de tecnologías privativas para ver vídeos en la web, y aunque es cierto que disponemos de <a href="http://www.gnu.org/software/gnash/">GNU Gnash</a> como alternativa a Flash, también es cierto que aún le queda mucho camino por delante.</p>
+
+<p>Otra posibilidad para evitar el uso de software privativo es usar <a href="http://tinyogg.com/">TinyOgg</a>, que transforma videos sobre Flash a Ogg Theora. Es lo que yo hago habitualmente, aunque dependiendo del formato resulta imposible realizar la conversión.</p>
+
+<p>Sin lugar a dudas el futuro del vídeo en la web es HTML5 y la etiqueta <b>&lt;video&gt;</b>, y es de vital importancia que la implementación de esta funcionalidad se logre mediante formatos libres como WebM y Ogg Theora. El movimiento de Google y de la FSF apunta en esta dirección, y aunque algunos indican que se trata de un paso atrás no debemos olvidar que la adopción de formatos privativos sí que es siempre un paso atrás.</p>
+
+<p>Internet y la web tienen unos cimientos formados por estándares abiertos y programas libres, y es nuestro deber luchar por que siga así.</p>
+</div>
\ No newline at end of file
diff --git a/posts/137.html b/posts/137.html
new file mode 100644 (file)
index 0000000..c65c3a7
--- /dev/null
@@ -0,0 +1,19 @@
+title: El retraso de los juegos libres
+date: 2011-01-30 07:44
+---
+<div>
+<img src="/wp-content/uploads/2011/03/tuxracer.jpg" align="right"/>
+<p>En el boletín de diciembre de 2010 de la <a href="http://www.fsf.org/">Free Software Foundation</a> se encuentra el artículo <b>The Free Game Lag</b>, escrito por <a href="http://www.fsf.org/about/interns/2010/sarvodaya">Sarvodaya</a>, que trata sobre la relación entre el mundo de los videojuegos y el software libre.</p>
+
+<p>En general, estoy de acuerdo en todo lo que se dice, aunque no comparto la poca importancia que se le da al tema. Según el autor:</p>
+
+<p><i>There is a natural tendency for free software to take on more essential aspects of computing first. While subjective, it is clear that gaming is not a top-priority and, as such, has not advanced as rapidly as say, web browsers or word processors.</i></p>
+
+<p>Aunque es cierto que es importante centrar los esfuerzos en programas como los navegadores web, pienso que también es importante mantener una abundante fauna de juegos libres para atraer a las nuevas generaciones de programadores y usuarios. Muchos de nosotros nos hemos iniciado en el mundo de los ordenadores a través de los juegos y muchos nos hemos iniciado en la programación desarrollando algún pequeño juego o modificando alguno ya existente. Y realmente sería muy interesante usar la potencia comunicativa de los juegos para transmitir las ideas de libertad y colaboración del software libre.</p>
+
+<p>Pero, ¿cómo puede una empresa de videojuegos, con el modelo actual, ganar dinero en el mundo del software libre? En palabras de Sarvodaya, <i>It can't, but it can be better</i>. Al igual que el modelo de negocio de las discográficas ha quedado obsoleto frente a Internet y las descargas, también el modelo de negocio de los videojuegos tradicionales se está apagando poco a poco. Resulta evidente que cobrar por copia no da demasiados beneficios, excepto a unas pocas empresas grandes, y que pequeños juegos hechos en Javascript y colgados de una web con acceso gratuito reciben muchos más jugadores. La accesibilidad gana.</p>
+
+<p>Pero entonces, ¿cómo es posible ganar dinero con juegos libres? Francamente, no lo sé. Publicidad, juegos en red con suscripción, ... Hace unos años nadie sabía cómo ganar dinero con las búsquedas, hasta que Google encontró el filón de la publicidad relacionada con los resultados. Aquel que encuentre el nuevo modelo de negocio para los juegos se convertirá, sin duda, en el Google del mundo del entretenimiento digital.</p>
+
+<p><b>P.D.:</b> Se está vendiendo un juego llamado <b>"Transport Simulator"</b> que en realidad es una copia ilegal del juego libre <b>Rigs of Rods</b>. Por lo visto la "empresa", llamada Butterfly Software, lo distribuye sin la correspondiente licencia GPLv3 y sin proporcionar el código fuente. Más información <a href="http://www.rigsofrods.com/wiki/pages/Transport_Sim_Fraud">aquí</a>.</p>
+</div>
diff --git a/posts/138.html b/posts/138.html
new file mode 100644 (file)
index 0000000..438b61b
--- /dev/null
@@ -0,0 +1,13 @@
+title: Debian 6.0 "Squeeze" publicada
+date: 2011-02-06 07:41
+---
+<div>
+<img src="/wp-content/uploads/2011/03/debian.jpg" align="right" />
+<p>Acaba de publicarse la <a href="http://www.debian.org/News/2011/20110205a">nueva versión de Debian, "Squeeze"</a>, con muchas mejoras que harán las delicias de la comunidad, aunque para mi la más importante es que venga de serie con un kernel Linux totalmente libre de drivers privativos.</p>
+
+<p>Esta decisión de Debian de separar claramente lo que es libre de lo que no ha convencido al equipo de <a href="http://www.gnewsense.org/">gNewSense</a> para <a href="http://www.gnewsense.org/FAQ#WillgNewSense3.0bebasedonDebianinsteadofUbuntu.2Candwhy.3F">basar la futura gNewSense 3.0 en "Squeeze" en vez de Ubuntu</a>, lo que les permitirá sacar versiones más rapidamente y disfrutar de la arquitectura MIPS, necesaria para correr gNewSense en los ordenadores <a href="http://www.lemote.com/en/products/Notebook/2010/0310/112.html">Lemote Yeelong</a>, que funcionan con hardware totalmente libre.</p>
+
+<p>El proyecto GNU, aparte de ser un proyecto tecnológico, es una forma de mejorar la sociedad, de hacer comprender la importancia de primar los derechos de las personas sobre los intereses corporativos, y el hecho de que la gente tenga cada vez más clara la necesidad de separar el software libre del que no lo es, es un gran paso en esa dirección.</p>
+
+<p>¡¡Enhorabuena, Debian!!</p>
+</div>
\ No newline at end of file
diff --git a/posts/139.sxml b/posts/139.sxml
new file mode 100644 (file)
index 0000000..27dfe46
--- /dev/null
@@ -0,0 +1,53 @@
+;;; -*- scheme -*-
+
+(use-modules (haunt utils))
+
+`((title . "La recursividad \"infinita\" de Lisp")
+  (date . ,(string->date* "2011-02-11 16:04"))
+  (content
+   ((p (img (@ (src "/wp-content/uploads/2011/03/lisp.jpg") (align "left") (style "margin: 10px;"))))
+    (p "La posibilidad de aprovechar toda la potencia de la recursividad es uno de los puntos fuertes (hay tantos) de los lenguajes funcionales y aunque voy a hablar de Lisp, ya que es el lenguaje funcional que mejor conozco, lo que voy a decir es aplicable a Scheme, Haskell, etc.")
+
+    (p "Para la explicación usaré el típico ejemplo de calcular el factorial de un número. El código en Lisp para realizar el cálculo (que nadie se asuste con los paréntesis) sería:")
+
+    (p (pre "(defun factorial (n)
+   (cond ((= n 1) 1)
+         (t (* n (factorial (- n 1))))))"))
+
+    (p "La misma función escrita en C sería la siguiente:")
+
+    (p (pre "int factorial (int n) {
+    if (n == 1)
+        return 1;
+    else
+        return n * factorial (n - 1);
+}"))
+
+    (p "Sin embargo, esta forma de calcular el factorial de un número suele encontrarse únicamente en libros de programación para explicar el mecanismo de la recursividad. Cualquier programador sabe que cada vez que llamamos a una función el sistema operativo almacena en la pila el estado actual del programa para recuperarlo después cuando vuelva de la llamada a la función, con lo que si queremos calcular el factorial de un número muy grande corremos el riesgo de sufrir un desbordamiento de pila con efectos un tanto desagradables para nuestro programa.")
+
+    (p "Por esa razón los programadores de C calcularían el factorial de la siguiente forma:")
+
+    (p (pre "int factorial (int n) {
+    int r = 1, n2 = n;
+
+    while (n2 > 1) {
+        r = r * n2;
+        n2--;
+    }
+
+    return r;
+}"))
+
+    (p "Ahora evitamos el problema del desbordamiento de pila y el programa, al ser iterativo, es mucho más rápido, aunque el código no resulta tan fácil de leer ni tan lógico como la versión recursiva.")
+
+    (p "Pero, en contra de lo que podría esperarse, el código en Lisp funciona igual de rápido que el código en C y además, podemos calcular factoriales de números inmensos sin que la pila se inmute. ¿Cómo es posible? Es posible gracias al trabajo del intérprete de Lisp y a una técnica conocida como " (a (@ (href "http://en.wikipedia.org/wiki/Tail_recursion")) "Tail Recursion") " (recursividad por cola).")
+
+    (p "Lo que hace el intérprete de Lisp es sustituir nuestra función por esta otra:")
+
+    (p (pre "(defun factorial (n &optional (r 1))
+    (cond ((= n 1) r)
+          (t (factorial (- n 1) (* r n)))))"))
+
+    (p "Si nos fijamos bien veremos que la nueva función no necesita volver sobre sus pasos para calcular el factorial, sino que va calculando el resultado antes de la llamada recursiva. Esto permite que no sea necesario usar la pila, ya que no hace falta regresar a través de todas las llamadas, sino que la última es la que devolverá el resultado directamente.")
+
+    (p "Si bien es cierto que muchos compiladores de lenguajes imperativos como C tienen en cuenta este tipo de funciones y las tratan como funciones iterativas, los intérpretes y compiladores de lenguajes funcionales lo hacen de forma implícita, lo que permite un código mucho más claro y legible."))))
diff --git a/posts/14.html b/posts/14.html
new file mode 100644 (file)
index 0000000..905703f
--- /dev/null
@@ -0,0 +1,26 @@
+title: Hablemos del software libre
+date: 2004-02-03 16:31
+---
+<div>
+<p>En respuesta al artículo <a href="http://www.librodenotas.com/almacen/Archivos/005421.html">GNU o el nuevo comunismo</a> de Francisco Serradilla.</p>
+
+<p>Existen ciertos puntos de vista que no comparto ni de lejos con el autor del artículo y paso a exponer mis razones.</p>
+
+<p>Para empezar, no es cierto que la licencia GPL te obligue a publicar siempre el código fuente de los programas. Si yo descargo la última versión del kernel de GNU/Linux y lo mejoro no estoy obligado a compartir esas mejoras con la comunidad, siempre y cuando lo use de forma privada. Solamente tengo la obligación de publicar esas mejoras si empiezo a distribuir ese kernel mejorado, ya sea de forma gratuita o cobrando por ello.</p>
+
+<p>Por lo tanto podemos enfocar el caso de Cisco desde otro ángulo. Si Cisco hubiera usado sus routers en sus oficinas jamás hubiera estado obligada a publicar el código fuente, ya que estaría en su derecho de usar y modificar el software a su antojo; no olvidemos que es libre. Pero la cosa cambió al poner los routers a la venta, ya que entonces es cuando la licencia GPL obliga a incluir el código fuente en el producto o a hacerlo fácilmente accesible (web por ejemplo) y sobre la misma licencia GPL.</p>
+
+<p>¿Y la licencia LGPL? Según el autor la licencia LGPL no obliga a distribuir el código fuente. Pero entonces, ¿qué nos importa la licencia? Despues de todo el producto final no deja de ser software propietario.</p>
+
+<p>En realidad no existe ningún programa en el mundo que se encuentre en su totalidad bajo la licencia LGPL, o al menos yo no conozco ninguno, sino que lo más normal es encontrar librerías de funciones bajo esta licencia. De esta forma las librerías libres pueden ser usadas por programas propietarios sin obligarles a que todo el conjunto del producto quede bajo los términos de la licencia, como ocurre con la GPL. Sin embargo cada vez son más las librerías que se encuentran bajo la GPL.</p>
+
+<p>¿Y eso por qué? Porque del presupuesto que le damos a un proyecto de software menos del 10% se dedica al desarrollo inicial. El resto del presupuesto se gasta en corregir errores, corregir errores y corregir errores. Y si al final nos ha quedado algo de dinero, se gasta en corregir más errores.</p>
+
+<p>Si una empresa realiza un proyecto de software libre solamente tiene que gastar ese 10% del presupuesto para el desarrollo inicial. Al ser libre, si el proyecto interesa (condición importante) no faltarán voluntarios que corrijan errores y mejoren el programa de una forma que jamás se conseguiría con un desarrollo cerrado. ¡Y gastando sólo el 10%! Si nuestra empresa es incapaz de sacar rentabilidad y beneficios a esa situación no es por culpa del software libre, sino que es culpa de los propios empresarios por no saber hacer su trabajo.</p>
+
+<p>Entonces, ¿puedo vivir del software libre? Bueno, Stallman lo hace. Linus Torvalds dejó su trabajo en Transmeta para dedicarse por completo al software libre. ¿De qué vive su familia? Icaza, Allan Cox, etc, etc. Desarrollando software libre se puede ganar mucho dinero, es un hecho. Pero claro, eso no quiere decir que conseguirlo sea fácil.</p>
+
+<p>Y eso es así porque el software libre es cualquier cosa menos comunismo. En el mercado del software libre todas las empresas cuentan en principio con los mismos productos para distribuir y las novedades que hoy tiene uno mañana las tienen todos. La competencia es altísima y las empresas grandes del mercado nunca tienen asegurada su porción de mercado sino que se la tienen que ganar todos los días. Al mismo tiempo una nueva empresa siempre tendrá la oportunidad de enfrentarse a los grandes, y si es mejor, ocupará su puesto.</p>
+
+<p>Señores, eso no es comunismo sino que es capitalismo en estado puro. Los seguidores de Darwin lo llamarían evolución. En el software libre sólo los mejores sobreviven.</p>
+</div>
diff --git a/posts/140.html b/posts/140.html
new file mode 100644 (file)
index 0000000..95a4a0a
--- /dev/null
@@ -0,0 +1,15 @@
+title: No quieren que copiemos... pues no lo hagamos
+date: 2011-02-20 08:23
+---
+<div>
+<img src="/wp-content/uploads/2011/03/copyleft.png" align="right" />
+<p>No voy a entrar a hablar sobre la "ley Sinde"; mucho se ha hablado ya y gente como <a href="http://gallir.wordpress.com/">Ricardo Galli</a> o <a href="http://www.enriquedans.com/">Enrique Dans</a> lo hacen mucho mejor de cómo lo haría yo. Que esa ley atenta contra derechos constitucionales es algo obvio y si ha salido adelante ha sido por presiones políticas y económicas que poco tienen que ver con los valores éticos que se supone deberían defender los "padres de la patria".</p>
+
+<p>Simplemente quiero hacer una pequeña reflexión al respecto. Todas estas leyes relacionadas con derechos de autor cuyo objetivo es que la gente no pueda ejercer su libre derecho a la copia seguirán surgiendo con el paso de los años, ya que son promovidas por una industria poderosa con el único afán de controlar el mercado, controlar a las personas y convertir cualquier acción de esas personas en dinero, aunque ese control vaya totalmente en contra del bién común y destruya cultura en vez de crearla.</p>
+
+<p>Lo mismo ocurre con los programas, y de hecho las leyes sobre derechos de autor en el software son más restrictivas que en el caso de la cultura. Por eso muchos no usamos programas de Microsoft (no quieres que los copie; pues no los copiaré) ni de Apple (no quieres que los copie; pues no los copiaré) ni de muchas otras empresas. Usamos programas libres de personas o empresas que no nos prohiben usar esos programas libremente.</p>
+
+<p>Y lo mismo ocurre con la música o las películas. No tengo ningún problema en comprar un disco, y el precio no me importa demasiado. Si el disco es caro pero me gusta mucho posiblemente lo compraré. Pero una vez comprado (disco, libro, lo que sea) quiero poder copiarlo, fotocopiarlo, distribuirlo entre mis amigos, etc, etc. Porque si no puedo hacerlo no me interesa ni regalado.</p>
+
+<p>Existen alternativas libres como <a href="http://www.jamendo.com/es/">Jamendo</a> o <a href="http://magnatune.com/">Magnatune</a>, o podemos encontrar cultura libre en abundancia usando el <a href="http://search.creativecommons.org/">catálogo de Creative Commons</a>, con lo cual yo me digo, <b>si no quieren que copiemos sus obras privativas... pues no lo hagamos</b>.</p>
+</div>
\ No newline at end of file
diff --git a/posts/141.html b/posts/141.html
new file mode 100644 (file)
index 0000000..f340821
--- /dev/null
@@ -0,0 +1,62 @@
+title: Ejecución de programas Gacela en el navegador
+date: 2011-02-25 19:27
+---
+<div>
+<img src="/wp-content/uploads/2011/03/lisplogo.png" align="left" />
+<p><b>Actualización: </b> Todo lo explicado en esta entrada puede hacerse mucho mejor usando el objeto XMLHttpRequest, tal como cuento en <a href="http://www.jsancho.org/2011/02/28/410/">Ejecución de programas Gacela en el navegador (rectificación)</a>. Si quieres saber cómo no hacerlo, sigue leyendo :-D</p>
+
+<p>El <a href="http://gacelaproject.org/">proyecto Gacela</a>, en el que llevo trabajando cerca de dos años y medio, está formado a su vez por tres subproyectos:</p>
+
+<ul>
+<li>Gacela, la definición del lenguaje y el compilador / intérprete, que funciona localmente en el ordenador.</li>
+<li><a href="http://gacelaproject.org/lisp2js/">Lisp2js</a>, el compilador de Lisp a Javascript que permite traducir programas Gacela y ejecutarlos en una página web.</li>
+<li>Gacela on Wheels, un entorno web para el desarrollo de juegos con Gacela.</li>
+</ul>
+
+<p>Estos últimos meses estoy más centrado en <a href="http://gacelaproject.org/lisp2js/">Lisp2js</a> y en la posibilidad de ejecutar en el navegador programas escritos con <a href="http://gacelaproject.org/">Gacela</a>. La idea es poder incluir en una página web un código en Javascript del estilo <i><b>file2js('mi_juego.lisp'); iniciar_juego();</b></i> que traduzca el código en Lisp a código en Javascript, lo incruste en la página y lo ejecute. Pero me encontré con una dificultad que no había previsto y que me sorprendió, y es que Javascript por motivos de seguridad no tiene funciones para trabajar con ficheros.</p>
+
+<p>A continuación explicaré de qué forma podemos cargar ficheros con Javascript y de paso explicaré cómo <a href="http://gacelaproject.org/">Gacela</a> consigue añadir código Javascript a una página y ejecutarlo. Para otro día queda el funcionamiento interno de <a href="http://gacelaproject.org/lisp2js/">Lisp2js</a>.</p>
+
+<p>La forma de acceder a un fichero con Javascript (siempre estoy hablando de un fichero que se encuentre en el mismo dominio) es usando el elemento <a href="http://es.wikipedia.org/wiki/Iframe">iframe</a>. Hay otras formas, como usando Ajax, pero eso requiere usar algo de PHP en el servidor y la idea es que el invento pueda funcionar localmente sin necesidad de servidor web.</p>
+
+<p>El código que hará funcionar todo es el siguiente:</p>
+
+<pre>&lt;html&gt;
+    &lt;head&gt;
+        &lt;script type="text/javascript" src="lisp2js.js"&gt;&lt;/script&gt;
+        &lt;script id="head_js" type="text/javascript"&gt;&lt;/script&gt;
+        &lt;script type="text/javascript"&gt;
+            function cargar (fichero, func) {
+                var el = document.getElementById('mi_iframe');
+                if (el == null) {
+                    var el = document.createElement("iframe");
+                    el.setAttribute('id', 'mi_iframe');
+                    el.onload = function() { ejecutar_mi_codigo(func); }
+                    el.style.display='none';
+                    document.body.appendChild(el);
+                }
+                el.setAttribute('src', fichero);
+            }
+
+            function ejecutar_mi_codigo (func) {
+                var el = document.getElementById('mi_iframe');
+                var lisp_code = el.contentWindow.document.body.textContent || el.contentWindow.document.body.innerText;
+                var js_code = string2js(lisp_code);
+                document.getElementById('head_js').text = js_code;
+                func();
+            }
+        &lt;/script&gt;
+    &lt;/head&gt;
+
+    &lt;body onLoad="cargar('programa.lisp', function() { init(); });"&gt;
+    &lt;/body&gt;
+&lt;/html&gt;</pre>
+
+<p>Se usan dos funciones, una para crear el iframe e indicarle el fichero que debe abrir y otra para ejecutar el código que estamos cargando. Se hace así porque iframe funciona de forma asíncrona, por lo que le decimos lo que debe hacer cuando tenga todo el contenido usando la propiedad <b>onload</b>. </p>
+
+<p>La primera función, <b>cargar</b>, se ocupa de crear el iframe, pero si ya existe se limita a indicarle el fichero a cargar. Aunque en este ejemplo no tiene mucho sentido, sí que lo tiene si tuvieramos que cargar varios ficheros.</p>
+
+<p>La segunda función, <b>ejecutar_mi_codigo</b>, se lanza cuando el iframe acaba de cargar el fichero. Usando las propiedas textContent o innerText (esto depende del navegador) recogemos el código Lisp, lo traducimos a Javascript y lo insertamos en su correspondiente sección en la cabecera. Finalmente iniciamos la ejecución del código.</p>
+
+<p>Así, aunque de forma más transparante, <a href="http://gacelaproject.org/">Gacela</a> es capaz de cargar código Lisp en una página web y ejecutarlo. Es decir, que el mismo código se ejecuta de la misma forma localmente en un ordenador o de forma remota a través del navegador, que es lo que se pretende.</p>
+</div>
\ No newline at end of file
diff --git a/posts/142.html b/posts/142.html
new file mode 100644 (file)
index 0000000..7fddacb
--- /dev/null
@@ -0,0 +1,34 @@
+title: Ejecución de programas Gacela en el navegador (rectificación)
+date: 2011-02-28 18:28
+---
+<div>
+<p>Y es que a veces hay que meterse una patata en la boca antes de decir nada. O coger una patata en cada mano antes de bloguear nada.</p>
+
+<p>En el post anterior sobre cargar ficheros con Javascript dije que con Ajax no se podía, que era necesario usar iframes, etc, etc... ¡¡Mentira cochina!! Pues claro que se puede, y resulta mucho más fácil.</p>
+
+<p>El código para cargar un programa Lisp, compilarlo y ejecutarlo sería así:</p>
+
+<pre>&lt;html&gt;
+    &lt;head&gt;
+        &lt;script type="text/javascript" src="lisp2js.js"&gt;&lt;/script&gt;
+        &lt;script id="head_js" type="text/javascript"&gt;&lt;/script&gt;
+        &lt;script type="text/javascript"&gt;
+            function cargar (fichero) {
+                var req = new XMLHttpRequest();
+                req.open('GET', fichero, false);
+                req.send(null);
+                if (req.status == 200) {
+                    var lisp_code = req.responseText;
+                    var js_code = string2js(lisp_code);
+                    document.getElementById('head_js').text = js_code;
+                }
+            }
+        &lt;/script&gt;
+    &lt;/head&gt;
+
+    &lt;body onLoad="cargar('programa.lisp'); init();"&gt;
+    &lt;/body&gt;
+&lt;/html&gt;</pre>
+
+<p>Esta sería la versión síncrona, aunque también se puede hacer de forma asíncrona. Se pueden ver más ejemplos en <a href="https://developer.mozilla.org/en/using_xmlhttprequest">Using XMLHttpRequest</a>.</p>
+</div>
\ No newline at end of file
diff --git a/posts/143.html b/posts/143.html
new file mode 100644 (file)
index 0000000..a6b4975
--- /dev/null
@@ -0,0 +1,11 @@
+title: Libertad y software libre
+date: 2011-03-08 15:46
+---
+<div>
+<img src="/wp-content/uploads/2011/03/facebook-is-watching.jpg" align="right" />
+<p>Tal como explican en el <a href="http://fsfe.org/news/nl/nl-201103.en.html">boletín de noviembre de la FSFE</a>, el 27 de enero Egipto bloqueó Facebook y Twitter. Esta medida paralizó momentaneamente las protestas en el país. Parte de la prensa asumió que esto se debía a la influencia de la nieta de Mubarak, novia de Mark Zuckerberg. Por supuesto, esto no es cierto, pero da que pensar. ¿Qué ocurriría si en vez de Egipto estuvieramos hablando de EEUU o de Europa? ¿Podría resistir una empresa como Facebook o Twitter la presión que ejercerían estos estados sobre ella?</p>
+
+<p>Desde siempre los defensores del software libre se han preocupado por proveer a la sociedad de herramientas descentralizadas, sin un único punto de control que las haga vulnerables, y con algoritmos totalmente abiertos y transparentes. La arquitectura de la misma Internet sigue esta filosofía. Otro ejemplo serían las redes P2P. Aunque es cierto que también se pueden bloquear protocolos e incluso llegar al punto de cerrar redes enteras, son medidas más expeditivas y más complicadas de realizar.</p>
+
+<p>Pero si le damos a una empresa el poder de controlar nuestras conversaciones y de almacenar nuestros contenidos correremos el riesgo de ser censurados, o incluso de ser eliminados totalmente del mundo digital simplemente por el hecho de que nuestras ideas incomoden a aquellos que ostentan el poder. Además, y quizás peor, los poderosos disponen de una herramienta perfecta para catalogar, filtrar, buscar personas por sus ideas, comentarios, relaciones... Ni <a href="http://es.wikipedia.org/wiki/George_Orwell">George Orwell</a> hubiera imaginado un Gran Hermano tan poderoso que las personas le entregarían su libertad a cambio de tan poco.</p>
+</div>
\ No newline at end of file
diff --git a/posts/144.html b/posts/144.html
new file mode 100644 (file)
index 0000000..5933442
--- /dev/null
@@ -0,0 +1,17 @@
+title: De ingenieros informáticos y prestigio
+date: 2011-03-16 20:43
+---
+<div>
+<img src="/wp-content/uploads/2011/03/it-crowd-moss-and-roy.jpg" align="left" style="margin-right: 10px; margin-bottom: 5px;" />
+<p>El otro día, durante una amena charla con compañeros de fátigas, hablamos sobre la eterna polémica de los ingenieros informáticos, los colegios oficiales y tal y tal, y se me quedó grabada la siguiente pregunta: <i>¿Por qué los ingenieros informáticos están mal valorados en España pero en otros países son los reyes del mambo?</i></p>
+
+<p>He trabajado para empresas de España y de USA, y ciertamente la diferencia entre ambos países es como el día y la noche. En USA las personas con un buen perfil tecnológico son las estrellas, con buenos sueldos y muy buena valoración. Y por lo que me han contado esto mismo ocurre en países europeos como Alemania, Suiza o Irlanda. ¿Por qué no en España?</p>
+
+<p>Una de las razones que se suelen dar es el bajo nivel de conocimientos sobre tecnología del empresariado español, lo cual, aunque cierto, no me parece una razón suficiente. Los empresarios de otros países tambien fueron unos incultos sobre estos temas y eso no ha impedido la aparición de un tejido empresarial fuerte alrededor de la informática y el encumbramiento de los ingenieros en general al olimpo de los grandes profesionales.</p>
+
+<p>En mi opinión la gran diferencia entre USA y España radica en que en España no existe una verdadera industria del software sino una industria de servicios. El sueño de cualquier joven ingeniero informático estadounidense al salir de la universidad es crear una empresa o trabajar en una ya existente cuya misión sea revolucionar el mundo con la última gran idea. Puede que lo consiga o puede que no, pero su objetivo es crear algo nuevo e innovador. En cambio, el ingeniero informático español aspira a trabajar en alguna gran empresa parcheando antiguos sistemas de gestión y facturación, y si puede colocarse como funcionario mejor que mejor. En principio, algo así no debería ser malo, pero lo cierto es que esa falta general de ambición desemboca en la poca valoración que tenemos los ingenieros informáticos españoles.</p>
+
+<p>En USA, esas ganas de hacer cosas nuevas y de romper moldes unida a esa habilidad que tienen los inversores norteamericanos para ver las oportunidades, convierten a los ingenieros informáticos en máquinas de hacer dinero y de alcanzar el éxito. Les da un prestigio que ya querríamos aquí.</p>
+
+<p>Por eso siempre digo que hay que sacudirse las pulgas de encima, hay que hacer cosas nuevas, leer y estudiar mucho, estar al día, ser grandes profesionales, ambiciosos, sin miedo a nada... Hace ya tiempo, alguien me dijo que era injusto que perdiera su puesto de trabajo porque otro con un cursillo de Access pudiera hacer lo mismo que él por menos dinero. Bien, querido lector, yo nunca me he sentido amenazado por alguien así, pero si es tu caso, ningún colegio oficial impedirá que acabes en el arroyo, ya que para jugar a este juego lo que se necesita es prestigio del bueno, y eso ningún cursillo de Access te lo dará.</p>
+</div>
\ No newline at end of file
diff --git a/posts/145.html b/posts/145.html
new file mode 100644 (file)
index 0000000..2bd8f48
--- /dev/null
@@ -0,0 +1,14 @@
+title: Nuestros datos son nuestros
+date: 2011-04-05 19:13
+---
+<div>
+<img src="/wp-content/uploads/2011/04/identica.png" alt="" title="identica" width="132" height="100" class="alignright size-full wp-image-523" />
+
+<p>Hoy mismo he estrenado mi cuenta para micro-blogging en <a href="http://identi.ca/">identi.ca</a> para escribir mensajes cortos sobre cosas que me llamen la atención, noticias, etc. En principio es un servicio similar al ofrecido por Twitter u otros, pero si nos fijamos bien veremos que es mucho mejor de lo que nos podemos imaginar.</p>
+
+<p>Y es que <a href="http://identi.ca/">identi.ca</a> funciona completamente con software libre, <a href="http://status.net/">StatusNet</a>, y nos da total acceso a nuestros datos (mensajes, amigos, seguidores, ...). Es decir, que si no nos gusta cómo funciona <a href="http://identi.ca/">identi.ca</a>, podemos hacer la maleta y marcharnos a otro servidor o montarnos nuestro propio servidor, ya que tenemos el software y los datos.</p>
+
+<p>Como he comentado en posts anteriores, resulta preocupante el poder que ejercen empresas como Facebook o Twitter sobre los comentarios, fotos y relaciones de sus usuarios. Los datos son de las personas que introducen esos datos, son sus opiniones, son sus fotos, y ninguna empresa tiene derecho a apropiarse de toda esa información. Por eso, proyectos como <a href="http://identi.ca/">identi.ca</a> o como <a href="https://joindiaspora.com/">Diaspora</a> o como muchos otros son tan importantes, porque anteponen la libertad de sus usuarios a ese ansia de poder, porque nos demuestran que es posible crear empresas éticas que no hacen negocio machacando los derechos y la libertad de las personas.</p>
+
+<p>Así que ya lo sabeis, ahora tambien me podeis seguir en <a href="http://identi.ca/jsancho">mi cuenta de identi.ca</a>.</p>
+</div>
\ No newline at end of file
diff --git a/posts/146.html b/posts/146.html
new file mode 100644 (file)
index 0000000..074640d
--- /dev/null
@@ -0,0 +1,15 @@
+title: No tienen ni idea
+date: 2011-05-04 10:16
+---
+<div>
+<img src="/wp-content/uploads/2011/05/ktorrent.jpeg" alt="" title="ktorrent" width="102" height="102" class="alignright size-full wp-image-523" />
+
+<p>Como cuentan en <a href="http://torrentfreak.com/netflix-is-killing-bittorrent-in-the-us-110427/">Netflix Is Killing BitTorrent in The US</a>, resulta curioso comprobar cómo una alternativa de pago como es Netflix está consiguiendo ganar terreno al "todo gratis", a pesar de que sea algo imposible según SGAE y amigos.</p>
+
+<p>No puedo comprender cómo es posible que no se den cuenta de lo que realmente quiere la gente. Si me pongo a mi mismo como ejemplo, en una tarde lluviosa de domingo no me apatece tener que bajar al videoclub más cercano a buscar una película para ver en casa, sino que lo que quiero es encender el ordenador, acceder a un catálogo y elegir la que más me apetezca. Si tengo que elegir entre una película con buena calidad, extras, etc, a un precio razonable y la misma película gratis pero con calidad discutible, prefiero pagar y tener un buen producto. Pero claro, si la única que tengo a mano es la gratuita de baja calidad, pues me quedo con esa.</p>
+
+<p>Así de simple. Ya no entro en el tema de la cultura libre, de los beneficios de permitir la libre distribución, etc, etc, sino que voy directo a la existencia de un mercado que está completamente desatendido.</p>
+
+<p>Resulta sorprendente comprobar el enorme volumen de negocio que están desperdiciando simplemente porque son incapaces de ver delante de sus narices. Ellos tienen películas, música, tienen dinero, gente, y unos cuantos con cámaras medio escondidas en las salas de cine les están ganando la partida simplemente porque <b>no tienen ni idea</b>.</p>
+
+</div>
\ No newline at end of file
diff --git a/posts/147.html b/posts/147.html
new file mode 100644 (file)
index 0000000..112cb69
--- /dev/null
@@ -0,0 +1,29 @@
+title: Gacela migra su código a Gnu Guile
+date: 2011-05-11 06:11
+---
+<div>
+<img src="/wp-content/uploads/2011/05/guile-banner.small_.png" alt="" title="gnu guile" width="300" height="75" class="alignleft size-full wp-image-523" />
+
+<p>Como dice el título, estoy reescribiendo parte del código fuente de <a href="http://gacelaproject.org/">Gacela</a>, pasando de usar <a href="http://www.gnu.org/software/gcl/">Gnu Common Lisp</a> a usar <a href="http://www.gnu.org/s/guile/">Gnu Guile</a>.</p>
+
+<p>Hay varias razones para ello; el equipo de desarrollo de <a href="http://www.gnu.org/software/gcl/">Gnu Common Lisp</a> está formado por varias personas, pero lo cierto es que el único que parece trabajar en el proyecto es Camm McGuire, su líder. Esta situación provoca que el desarrollo de <a href="http://www.gnu.org/software/gcl/">Gnu Common Lisp</a> no avance todo lo rápido que sería deseable, que la documentación sea bastante pobre y que hayan bugs importantes a la espera de resolución.</p>
+
+<p>Además me encontré con problemas de integración entre <a href="http://www.gnu.org/software/gcl/">Gnu Common Lisp</a> y <a href="http://www.opengl.org/">OpenGL</a> que hacían que <a href="http://gacelaproject.org/">Gacela</a> no funcionara correctamente en algunas plataformas, como por ejemplo los portátiles Asus Eee PC.</p>
+
+<p>Por lo tanto, empecé a buscar un sustituto. Existen muchas implementaciones libres de Lisp y muy buenas, pero una de las razones por las que elegí <a href="http://www.gnu.org/software/gcl/">Gnu Common Lisp</a> fue que era la implementación oficial de Lisp del <a href="http://www.gnu.org/">proyecto GNU</a> y quería continuar con esa idea.</p>
+
+<p>Y de forma accidental me encontré con <a href="http://www.gnu.org/s/guile/">Gnu Guile</a>. Había leído algo hacía tiempo, pero no había profundizado sobre qué era <a href="http://www.gnu.org/s/guile/">Gnu Guile</a>. Guile es el lenguaje de extensión oficial del <a href="http://www.gnu.org/">proyecto GNU</a>, además de ser un compilador y un intérprete de <a href="http://schemers.org/">Scheme</a>, un dialecto de Lisp.</p>
+
+<p>Cosas que tiene Guile y que yo buscaba:</p>
+
+<ul>
+<li>Forma parte del <a href="http://www.gnu.org/">sistema operativo GNU</a> y está soportado por la <a href="http://www.fsf.org/">Free Software Foundation</a>.</li>
+<li>Sigo teniendo todo el poder de Lisp a mi alcance.</li>
+<li>Hay mucha gente detrás del proyecto con lo que ello conlleva: buena documentación, versiones frecuentes, una comunidad grande, etc.</li>
+<li>La facilidad para integrar código en C es impresionante, superando a <a href="http://www.gnu.org/software/gcl/">Gnu Common Lisp</a> y a las <a href="http://docs.python.org/library/ctypes.html">ctypes de Python</a>.</li>
+<li>Soporta multi-threading, que no es algo que necesitara obligatoriamente pero que no me vendrá mal del todo.</li>
+<li>Y funciona perfectamente en mi Eee PC :-)</li>
+</ul>
+
+<p>Ya he migrado todo el código C y ahora estoy pasando el código Lisp a Scheme, por lo que espero poder liberar la versión 0.5 antes de final de mes.</p>
+</div>
\ No newline at end of file
diff --git a/posts/148.html b/posts/148.html
new file mode 100644 (file)
index 0000000..1bedf17
--- /dev/null
@@ -0,0 +1,16 @@
+title: ¿Secure Boot? Más bien "Restricted Boot"
+date: 2011-10-31 08:02
+---
+<div>
+<img src="/wp-content/uploads/2011/10/uefi_logo.png" alt="restricted boot" title="restricted boot" width="92" height="90" class="alignright size-full wp-image-523" />
+
+<p>Microsoft ha anunciado que los fabricantes que quieran llevar el logotipo de Windows 8 en sus equipos deberán implementar una característica conocida como "Secure Boot", que consiste en controlar los programas que el ordenador ejecuta en el arranque. Como muchas otras ideas en el pasado, esto no es algo malo de por sí, pero como siempre las empresas y los intereses privados se encargan de pervertir la idea original en su beneficio.</p>
+
+<p>Lo que en un principio está pensado para evitar la ejecución de malware en nuestros ordenadores, se usará para impedir la ejecución de sistemas operativos que no esten previamente autorizados, incluyendo aquellos que aunque esten autorizados hayan sido modificados a posteriori. En teoría, el usuario debería poder autorizar los programas que quiera que sean lanzados en el arranque, pero todo parece indicar que Microsoft y los fabricantes de hardware lo implementarán de forma que no sea posible ejecutar algo distinto de Windows.</p>
+
+<p>Esa es la razón por la que se prefiere llamar a esta tecnología por el nombre de "Restricted Boot", que refleja de manera más fidedigna las intenciones que guardan estas empresas.</p>
+
+<p>Para los que esteis en contra de la aplicación de estas medidas, es posible firmar una petición pública de rechazo en <a href="http://www.fsf.org/campaigns/secure-boot-vs-restricted-boot/statement">Stand up for your freedom to install free software</a>.</p>
+
+<p>Podeis encontrar más información en <a href="http://www.fsf.org/campaigns/secure-boot-vs-restricted-boot">Will your computer's "Secure Boot" turn out to be "Restricted Boot"?</a></p>
+</div>
\ No newline at end of file
diff --git a/posts/149.html b/posts/149.html
new file mode 100644 (file)
index 0000000..e7efe7b
--- /dev/null
@@ -0,0 +1,16 @@
+title: Demasiado tiempo sin escribir
+date: 2013-08-02 13:11
+---
+<div>
+<p>Ha pasado ya demasiado tiempo, y no es bueno dejar tan abandonado un blog. Y no porque no tuviera cosas que contar y comentar, que las hay, sino porque te las vas dejando en el tintero esperando una buena ocasión para escribir sobre ellas y esa ocasión no llega nunca. Así que allá va un poco de resumen de en qué estoy metido últimamente.</p>
+
+<p>Sigo en el desarrollo de <a href="http://gacelaproject.org/">Gacela</a>, la extensión de <a href="http://www.gnu.org/software/guile/">GNU Guile</a> para desarrollar juegos, que ahora se está convirtiendo en un <a href="http://en.wikipedia.org/wiki/Entity_component_system">sistema de entidades y componentes</a> mucho más modular de lo que era antes.</p>
+
+<p>También he estado trabajando mucho en el desarrollo de <a href="https://www.openerp.com/">OpenERP</a>, tanto de módulos como corrigiendo errores en el core. Es un ERP muy interesante aunque aún tiene que mejorar mucho. Lo mejor, la enorme comunidad que hay detrás.</p>
+
+<p>Especial atención merece la programación asíncrona. He experimentado con <a href="http://www.gevent.org/">gevent</a> y sus pseudo-threads y la verdad es que tiene muy buena pinta. En la misma línea, he probado cosas con continuaciones en Lisp y Scheme. Aún tienen mucho camino que recorrer los programadores de lenguajes imperativos.</p>
+
+<p>Y también estoy probando <a href="http://graphserver.github.io/graphserver/">Graphserver</a> y <a href="http://opentripplanner.com/">Open Trip Planner</a>, pensando en montar un sistema de planificación de viajes en transporte público.</p>
+
+<p>Todo esto cuando mi hijo Roberto, que acaba de cumplir sus nueve meses, me deja, claro. Pero vaya, que veais que sigo en activo y que quiero seguir contando cositas desde aquí de una forma más regular.</p>
+</div>
\ No newline at end of file
diff --git a/posts/15.html b/posts/15.html
new file mode 100644 (file)
index 0000000..fb556a0
--- /dev/null
@@ -0,0 +1,76 @@
+title: Configurar djbdns como caché DNS
+date: 2004-02-11 10:54
+---
+<div>
+<p>El servidor djbdns es más seguro, rápido, ligero y estable que BIND, y además es mucho más fácil de configurar. Su autor es Dan J. Bernstein, el mismo del conocido qmail. Lo configuraremos como caché DNS para mejorar los tiempos de respuesta de nuestras consultas.</p>
+
+<p>djbdns es un paquete de herramientas para gestionar datos DNS. Cabe destacar dnscache (el servidor caché DNS) y tinydns (servidor de nombres autorizado), además de algunas utilidades con funciones similares a las de dig o nslookup.</p>
+
+<p>La licencia es la misma que tiene qmail, se puede distribuir libremente y se puede modificar, pero distribuyendo las modificaciones en forma de parches y siempre como código fuente. Olvidemos los binarios.</p>
+
+<p>Antes de instalar djbdns es necesario instalar las daemontools. En Debian es tan sencillo como hacer:</p>
+
+<p><pre>apt-get install daemontools-installer
+apt-get install djbdns-installer</pre></p>
+
+<p>Tambien se puede instalar descargando los fuentes de <a href="http://cr.yp.to/daemontools/daemontools-0.76.tar.gz">daemontools-0.76</a> y de <a href="http://cr.yp.to/djbdns/djbdns-1.05.tar.gz">djbdns-1.05</a> y compilando directamente. De cualquiera de las dos formas es sumamente sencillo.</p>
+
+<p>Una vez instalado djbdns pasamos a configurarlo como caché DNS. Tenemos un script para ello que realiza una configuración básica del servidor. Lo invocamos de la siguiente manera:</p>
+
+<p><pre>dnscache-conf dnscache dnslog /etc/dnscache xxx.yyy.zzz.www</pre></p>
+
+<p>dnscache y dnslog son usuarios del sistema que han sido creados por la instalación, /etc/dnscache es el directorio de configuración y de log y por último indicamos nuestra IP.</p>
+
+<p>Para arrancar el servidor basta con crear un enlace en el directorio de servicios de las daemontools. Hacemos <b>ln -s /etc/dnscache /service</b> y a los pocos segundos tendremos en marcha nuestra caché DNS.</p>
+
+<p>Ahora mismo el servidor solamente acepta conexiones provenientes desde 127.0.0.1, es decir, locales. Para añadir más usuarios tendremos que crear sus correspondientes entradas en /etc/dnscache/root/ip. Supongamos que queremos que se use la caché desde 192.168.13.1, 192.168.13.2 y desde la red 192.168.12.0. Pues haremos:</p>
+
+<p><pre>touch /etc/dnscache/root/ip/192.168.13.1
+touch /etc/dnscache/root/ip/192.168.13.2
+touch /etc/dnscache/root/ip/192.168.12</pre></p>
+
+<p>En esos equipos indicaremos la IP del nameserver en el /etc/resolv.conf, en 'Mis sitios de red' o donde sea necesario.</p>
+
+<p>Los más curiosos o impacientes ya habrán descubierto la existencia del fichero /etc/dnscache/root/servers/@ que contiene unas cuantas IPs de servidores DNS. Podemos sustituirlas por la dirección del servidor DNS de nuestro proveedor. El servidor djbdns tambien soporta lo que se conoce como 'split horizon' o 'división de horizonte' y que es muy útil cuando usamos un dominio de la forma pepito.com para nuestra red interna. En ese caso simplemente crearemos el fichero /etc/dnscache/root/servers/pepito.com y en su interior pondremos la dirección de nuestro DNS para pepito.com. ¿Y si necesitamos resolución inversa para pepito.com? Pues crearemos /etc/dnscache/root/servers/zzz.yyy.xxx.in-addr.arpa con la IP del DNS y listos. No olvidemos hacer <b>echo 1 > /etc/dnscache/env/FORWARDONLY</b> para que nos funcione correctamente el invento.</p>
+
+<p>Y ahora que hablamos de /etc/dnscache/env/, este directorio guarda los parámetros de funcionamiento de djbdns. FORWARDONLY, por ejemplo, indica que todas las consultas se pasarán a los servidores indicados en /etc/dnscache/root/servers. Otros dos, muy importantes, son CACHESIZE y DATALIMIT. En CACHESIZE indicamos el tamaño que tendrá nuestra caché en memoria (1 MB por defecto) y en DATALIMIT especificamos un máximo de memoria que se puede ocupar (3 MB por defecto). Este máximo se usa para prevenir posibles fallos del programa que le hagan ocupar más memoria de la debida ya que dnscache siempre ocupará la memoria designada en CACHESIZE.</p>
+
+<p>La pregunta del millón es siempre qué cantidad de memoria vamos a necesitar. Normalmente tendremos de sobra con la asignada por defecto, sobretodo si usamos dnscache en el ordenador de casa para acelerar nuestras consultas DNS. Pero si lo vamos a usar en un entorno con unas cuantas máquinas, un proxy y un servidor de correo, por ejemplo, quizás necesitemos algo más. La mejor forma de controlarlo es mirar los ficheros de log de dnscache y controlar la cantidad de caché que estamos usando. Por ejemplo, si hacemos <b>grep stats ../log/main/current</b> obtendremos algo parecido a esto:</p>
+
+<pre>@40000000402a034b21d91b94 stats 2056 69641 1 0
+@40000000402a034b23431b74 stats 2058 69875 1 0
+@40000000402a034b2497169c stats 2059 70113 1 0
+@40000000402a034b25e0e834 stats 2060 70351 1 0
+@40000000402a034b272e7abc stats 2061 70585 1 0
+@40000000402a03682c8890ec stats 2082 70996 1 0
+@40000000402a036834161d34 stats 2083 71390 1 0
+@40000000402a0386036c6d3c stats 2103 71572 1 0
+@40000000402a0386084e59b4 stats 2104 71783 1 0
+@40000000402a03860d51a90c stats 2105 71971 1 0
+@40000000402a0393383e1c04 stats 2117 72022 1 0
+@40000000402a03a4126fd74c stats 2135 72390 1 0
+@40000000402a03cb3973d12c stats 2164 72717 1 0
+@40000000402a03cc19a8b7cc stats 2165 72953 1 0
+@40000000402a03d91e179ef4 stats 2174 73187 1 0
+@40000000402a03d921d14f7c stats 2175 73224 1 0
+@40000000402a03e3098fda64 stats 2185 73757 1 0
+@40000000402a03e32db5705c stats 2190 74120 1 0
+@40000000402a042214ae74dc stats 2234 74524 1 0
+@40000000402a042217eecafc stats 2236 74785 1 0
+@40000000402a042219248fc4 stats 2237 75040 1 0
+@40000000402a04291a697b74 stats 2240 75262 1 0
+@40000000402a0467267c803c stats 2292 75597 1 0
+@40000000402a050309d5d08c stats 2402 75836 1 0
+@40000000402a050315bcd79c stats 2403 76169 1 0</pre>
+
+<p>Bonito, ¿verdad? Las entradas <b>stats</b> nos muestran estadísticas de la caché. Si miramos la última linea podemos saber que desde que arrancó el servidor se han procesado 2403 consultas, ocupando 76169 bytes, se ha dejado una petición UDP sin responder y se han respondido todas las peticiones TCP (o no ha llegado ninguna). Podemos ver que en este caso nos sobra con 1 MB para la caché y que no necesitamos modificar nada.</p>
+
+<p>Si no fuera el caso podemos modificar CACHESIZE y DATALIMIT, siempre teniendo en cuenta que DATALIMIT debe ser más grande que CACHESIZE. Para aplicar los cambios tendremos que reiniciar el servicio haciendo <b>svc -t /service/dnscache</b>.</p>
+
+<p>Poco más queda por decir. Se puede encontrar información de djbdns en:</p>
+
+<p><a href="http://www.djbdns.org/">djbdns home page</a><br/>
+<a href="http://cr.yp.to/djbdns.html">D. J. Bernstein djbdns page</a><br/>
+<a href="http://www.lifewithdjbdns.com/">Life With djbdns</a><br/>
+<a href="http://www.lifewithdjbdns.com/es/">Mi vida con djbdns</a></p>
+</div>
diff --git a/posts/150.html b/posts/150.html
new file mode 100644 (file)
index 0000000..27d8909
--- /dev/null
@@ -0,0 +1,55 @@
+title: Programar macros en Lisp es como reprogramar Matrix
+date: 2013-10-09 18:02
+---
+<div>
+<a href="http://www.jsancho.org/wp-content/uploads/2013/10/pyfry.jpg"><img src="http://www.jsancho.org/wp-content/uploads/2013/10/pyfry-300x225.jpg" alt="pyfry" width="300" height="225" class="alignright size-medium wp-image-581" /></a>
+
+<p>Si algo echo de menos cuando programo con Python, Ruby u otro lenguaje similar son las macros de Lisp. Programar con macros (no tienen nada que ver con las macros del preprocesador de C como piensan algunos) es como ser Neo y cambiar todo lo que quieras en Matrix.</p>
+
+<p>Además, ahora que se ponen de moda otra vez los <a href="http://en.wikipedia.org/wiki/Domain-specific_language">Domain Specific Languages (DSL)</a>, lo cierto es que tener el poder de las macros de tu parte te soluciona muchos problemas.</p>
+
+<p>Vamos a probar con un problema fácil que resulta imposible de resolver en Python: implementar un <b>if-then-else</b> usando <b>if</b> y <b>else</b>. ¿Ein? :-D La respuesta rápida es:</p>
+
+<pre>def if_then_else(cond, if_true, if_false):
+    if cond:
+        return if_true
+    else:
+        return if_false</pre>
+
+<p>¡Vamos a probarlo!</p>
+
+<pre>>>> if_then_else(True, "si", "no")
+'si'
+>>> if_then_else(False, "si", "no")
+'no'
+>>> if_then_else(True, "si", 1/0)
+ZeroDivisionError: integer division or modulo by zero</pre>
+
+<p>Y aquí nos encontramos el principal problema de esta implementación. ¿Por qué se evalua la división por 0 si se encuentra en la parte <b>else</b> y nuestra condición es <b>True</b>? La respuesta es que Python, al no tener macros ni nada parecido, solamente nos proporciona funciones para este tipo de cosas y las funciones evaluan todos sus parámetros.</p>
+
+<p>Por lo tanto, resulta imposible crear estructuras tipo <b>if-then-else</b>. Y lo mismo ocurre con operadores como <b>and</b> (si el primer parámetro es falso no evaluamos el resto), <b>or</b> (si el primer parámetro es cierto no evaluamos el resto), etc.</p>
+
+<p>Algunos me han sugerido soluciones usando los decoradores de Python para capturar los errores de la evaluación, pero el verdadero problema reside en la evaluación en si misma.</p>
+
+<p>La solución en Lisp utiliza macros. Si usaramos funciones obtendríamos el mismo resultado que con Python.</p>
+
+<pre>(defmacro if-then-else (cond if-true if-false)
+  `(if ,cond ,if-true ,if-false))</pre>
+
+<p>Esta expresión es bastante legible incluso para los profanos. Se define una macro de nombre if-then-else que recibe tres parametros. La gran diferencia es que los parámetros no se evaluan cuando se evalua la macro y la evaluación de la macro nos desvuelve lo que especificamos en el cuerpo.</p>
+
+<p>Para que nos entendamos, una macro es un generador de código. Si ahora ejecuto <pre>(if-then-else 'True "si" "no")</pre>, el intérprete evaluará la macro, que devolverá el resultado <pre>(if 'True "si" "no")</pre>, y ese resultado será evaluado a su vez proporcionando el resultado adecuado. Vamos a verlo.</p>
+
+<pre>> (if-then-else 1 "si" "no")
+"si"
+> (if-then-else nil "si" "no")
+"no"
+> (if-then-else 1 "si" (/ 1 0))
+"si"</pre>
+
+<p>Ahora la división por cero ya no da error porque no llega a evaluarse</p>
+
+<p>Las macros nos dan el poder de crear programas que a su vez crean programas, ya que nos permiten jugar en el núcleo mismo del lenguaje, algo que no nos permiten los lenguajes convencionales.</p>
+
+<p>A pesar de su potencia, las macros tienen los llamados "problemas de higiene", algo que se ha solucionado en Scheme y que explicaré en el próximo artículo.</p>
+</div>
diff --git a/posts/151.html b/posts/151.html
new file mode 100644 (file)
index 0000000..54d9ec2
--- /dev/null
@@ -0,0 +1,35 @@
+title: pyrabbit, experimentando con RabbitMQ
+date: 2013-10-31 08:29
+---
+<div>
+<a href="http://www.jsancho.org/wp-content/uploads/2013/10/RabbitMQ.sh-600x600.png"><img src="http://www.jsancho.org/wp-content/uploads/2013/10/RabbitMQ.sh-600x600-300x300.png" alt="RabbitMQ" width="300" height="300" class="alignleft size-medium wp-image-596" /></a>
+
+<p>Llevo ya un tiempo probando <a href="http://www.rabbitmq.com/">RabbitMQ</a>, un sistema de mensajería para aplicaciones basado en colas, muy potente y escalable, desarrollado con <a href="http://es.wikipedia.org/wiki/Erlang">Erlang</a>. Para saber un poco más de este lenguaje de programación recomiendo leer <a href="http://learnyousomeerlang.com/">Learn You Some Erlang for Great Good!</a> Cuando conoces un poco este lenguaje comprendes por qué lo han usado para programar RabbitMQ, ya que da la impresión de que Erlang fue diseñado expresamente para crear este tipo de sistemas.</p>
+
+<p>Hay una cosa que no me ha gustado demasiado de RabbitMQ, y es que es el propio sistema de mensajería el que decide para quién es un determinado mensaje. Me explico. Supongamos que tenemos una cola que recibe mensajes con trabajos a realizar y tenemos dos procesos suscritos a la cola para realizar esos trabajos. Para ello, los procesos se suscriben a la cola y es RabbitMQ el que manda los mensajes al proceso que crea conveniente. Si el proceso que recibe el mensaje no puede atenderlo en ese momento, por las razones que sean, debe cancelar la recepción para que RabbitMQ pueda reencolar el mensaje y otro proceso pueda recibirlo.</p>
+
+<p>Para este tipo de cosas yo prefiero usar peticiones tipo "long polling" con posibilidad de especificar un timeout, de forma que sea el propio proceso el que pida mensajes al servidor. Por supuesto, igual puede ocurrir que el proceso pierda la conexión, no pueda atender al mensaje, etc, con lo que también deberíamos cancelar la recepción para el reencolado del mensaje, pero ya resulta más extraño, y el código de los procesos resulta más legible.</p>
+
+<p>He desarrollado una pequeña librería en Python, <a href="https://gitorious.org/pyrabbit/">pyrabbit</a>, que por debajo usa <a href="https://pypi.python.org/pypi/pika/">Pika</a>, una implementación del protocolo AMPQ que nos sirve para conectar con RabbitMQ y comunicarnos con las colas. Con pyrabbit es posible realizar estas operaciones de forma muy sencilla.</p>
+
+<pre>import pyrabbit
+connection = pyrabbit.Connection('localhost')
+
+# Enviar mensaje a mi_cola y leerlo después con un timeout de diez segundos
+connection.mi_cola.send("hola")
+m = connection.mi_cola.receive(timeout=10)
+print m.body   # Esto imprime 'hola'
+
+# Confirmamos que el mensaje ha sido procesado y no es necesario reencolarlo
+m.ack()
+
+# Tambien es posible enviar mensajes y esperar confirmación con un timeout
+# Supongamos que tenemos un proceso que calcula sumas
+r = connection.cola_de_sumas.send("[2,3]", wait_response=True, timeout=5)
+print r.body   # Si el proceso ficticio que suma números funciona, obtendremos "5"
+
+# Cerramos
+connection.close()</pre>
+
+<p>Con pyrabbit puedo comunicar programas de forma sencilla y el código es muy legible, pero no me gusta la forma en que tengo implementada la recepción de mensajes, ya que estoy solicitando mensajes al servidor hasta que me devuelve alguno o hasta que salta el timeout. Para no penalizar demasiado, incluyo un retardo incremental con el que acabo pidiendo mensajes cada segundo si la espera es demasiado larga, pero aún así no me acaba. Si alguien sabe una forma de pedir mensajes a RabbitMQ de tipo similar a <a href="http://es.wikipedia.org/wiki/Tecnolog%C3%ADa_Push#Long_polling">long polling</a>, le estaría muy agradecido.</p>
+</div>
\ No newline at end of file
diff --git a/posts/152.html b/posts/152.html
new file mode 100644 (file)
index 0000000..994e002
--- /dev/null
@@ -0,0 +1,103 @@
+title: Haciendo un MongoDB con transacciones
+date: 2014-03-26 08:13
+---
+<div>
+<p>Llevo unos cuantos meses trabajando con <a href="http://www.mongodb.org/">MongoDB</a>, una base de datos NoSQL basada en documentos estilo JSON. Es muy potente y muy sencilla de usar.</p>
+
+<p>Lo que más me gusto desde el primer momento fue la no necesidad de definir el esquema de las tablas de antemano. Al estar basada en documentos, es posible ir creando la estructura de la base de datos a medida que crece la aplicación, lo cuál te da mucha agilidad y libertad en el proceso de desarrollo de un proyecto. También implica un riesgo, uno ha de tener las ideas muy claras y no ir implementando a lo loco, pero vaya, que ya somos mayorcitos y se supone que sabemos lo que hacemos. :-)</p>
+
+<a href="http://www.jsancho.org/wp-content/uploads/2014/03/transaction.jpeg"><img src="http://www.jsancho.org/wp-content/uploads/2014/03/transaction.jpeg" alt="transaction" width="256" height="108" class="alignright size-full wp-image-621" style="padding: 10px" /></a>
+
+<p>Pero para una aplicación con cierto nivel de complejidad hay una cosa que echo en falta: las transacciones. MongoDB está pensada principalmente para aplicaciones que necesitan lecturas y escrituras rápidas y proporciona sistemas sencillos para montar replicas y sharding que facilitan la escalabilidad de los sistemas. Vamos, que es ideal para la web. Pero si queremos aplicaciones que ejecuten procesos largos con mucha actividad en la base de datos, tener transacciones te garantiza mantener la integridad.</p>
+
+<p>Existen algunos ejemplos de "transacciones" a pequeño nivel, pero son muy artesanales y no ayudan demasiado si los errores que se producen son a nivel de hardware (cortes de conexión, caída de servidores, etc). Así que se me ocurrió que quizá lo más fácil era diseñar un sistema similar a MongoDB pero que funcionara sobre una base de datos relacional con transacciones como MariaDB o PostgreSQL.</p>
+
+<p>Este nuevo sistema se llama <a href="https://gitorious.org/mojo/">Mojo</a>.</p>
+
+<p><b>Tipo de datos</b></p>
+
+<p>Las bases de datos relacionales usan unos tipos de datos que podríamos definir como estándar (char, integer, float, datetime, blob, etc). Sin embargo, MongoDB permite guardar y realizar búsquedas sobre tipos más complejos, como listas y diccionarios, por lo que para poder dar soporte a estos tipos es necesario usar un serializador. Al principio usé <a href="https://en.wikipedia.org/wiki/Pickle_%28Python%29">Pickle</a>, pero como solamente sirve para Python pasé a usar <a href="http://msgpack.org/">msgpack</a>. Ahora mismo es el serializador por defecto, pero es posible especificar el que uno quiera en el momento de realizar la conexión.</p>
+
+<p><b>Estructura de las tablas</b></p>
+
+<p>Para guardar documentos en una base de datos relacional necesitaremos, como mínimo, tablas con la siguiente estructura: id(varchar), name(varchar) y value(text). De esta forma, si queremos guardar el documento <b>{"a": 1, "b": [1, 2]}</b> en la colección <b>pruebas</b>, en la base de datos quedaría:</p>
+
+<table>
+<tr><td colspan="3">Table "pruebas"</td></tr>
+<tr><td>Id</td><td>Name</td><td>Value</td></tr>
+<tr><td>'abc'</td><td>'a'</td><td>'1'</td></tr>
+<tr><td>'abc'</td><td>'b'</td><td>'[1, 2]'</td></tr>
+</table>
+
+<p>El primer defecto que me encontré con este esquema es que no es posible hacer búsquedas numéricas, ya que los valores se guardan serializados, por lo que es necesario guardar el valor numérico en una nueva columna.</p>
+
+<table>
+<tr><td colspan="4">Table "pruebas"</td></tr>
+<tr><td>Id</td><td>Name</td><td>Value</td><td>Number</td></tr>
+<tr><td>'abc'</td><td>'a'</td><td>'1'</td><td>1</td></tr>
+<tr><td>'abc'</td><td>'b'</td><td>'[1, 2]'</td><td><i>NULL</i></td></tr>
+</table>
+
+<p>El siguiente problema que nos encontramos es la imposibilidad de indexar por campo. Al estar todos los campos del documento en el mismo campo de la base de datos, sean del tipo que sean, se hace imposible crear índices que sean eficaces. Creo que existen algunos motores que permiten índices condicionales pero no es lo normal, por lo que la única solución que se me ocurre es separar los campos del documento entre varias tablas, una por campo. Por lo que el documento de prueba ahora se guardaría así:</p>
+
+<table>
+<tr><td colspan="4">Table "pruebas$_id"</td></tr>
+<tr><td>Id</td><td>Name</td><td>Value</td><td>Number</td></tr>
+<tr><td>'abc'</td><td>'_id'</td><td>'abc'</td><td><i>NULL</i></td></tr>
+</table>
+
+<table>
+<tr><td colspan="4">Table "pruebas$a"</td></tr>
+<tr><td>Id</td><td>Name</td><td>Value</td><td>Number</td></tr>
+<tr><td>'abc'</td><td>'a'</td><td>'1'</td><td>1</td></tr>
+</table>
+
+<table>
+<tr><td colspan="4">Table "pruebas$b"</td></tr>
+<tr><td>Id</td><td>Name</td><td>Value</td><td>Number</td></tr>
+<tr><td>'abc'</td><td>'b'</td><td>'[1, 2]'</td><td><i>NULL</i></td></tr>
+</table>
+
+<p>Con este esquema queda todo bastante atado, pero algunas funcionalidades extra de MongoDB no quedan resueltas, y es que MongoDB permite buscar dentro de listas y diccionarios de forma totalmente transparente. Por ejemplo, si buscamos <b>{"b": 1}</b> la base de datos debería devolvernos el documento, ya que dentro de la lista [1, 2] se encuentra el número 1.</p>
+
+<p>Para poder realizar estas búsquedas será necesario replicar algunos de los datos, de forma que el campo "b" del documento quedaría guardado de la forma:</p>
+
+<table>
+<tr><td colspan="4">Table "pruebas$b"</td></tr>
+<tr><td>Id</td><td>Name</td><td>Value</td><td>Number</td></tr>
+<tr><td>'abc'</td><td>'b'</td><td>'[1, 2]'</td><td><i>NULL</i></td></tr>
+<tr><td>'abc'</td><td>'b..0'</td><td>'1'</td><td>1</td></tr>
+<tr><td>'abc'</td><td>'b..1'</td><td>'2'</td><td>2</td></tr>
+</table>
+
+<p>Con este último esquema, si guardamos un nuevo documento <b>{"b": {"x": 100, "y": 200}}</b>, la base de datos quedaría de la forma:</p>
+
+<table>
+<tr><td colspan="4">Table "pruebas$_id"</td></tr>
+<tr><td>Id</td><td>Name</td><td>Value</td><td>Number</td></tr>
+<tr><td>'abc'</td><td>'_id'</td><td>'abc'</td><td><i>NULL</i></td></tr>
+<tr><td>'def'</td><td>'_id'</td><td>'def'</td><td><i>NULL</i></td></tr>
+</table>
+
+<table>
+<tr><td colspan="4">Table "pruebas$a"</td></tr>
+<tr><td>Id</td><td>Name</td><td>Value</td><td>Number</td></tr>
+<tr><td>'abc'</td><td>'a'</td><td>'1'</td><td>1</td></tr>
+</table>
+
+<table>
+<tr><td colspan="4">Table "pruebas$b"</td></tr>
+<tr><td>Id</td><td>Name</td><td>Value</td><td>Number</td></tr>
+<tr><td>'abc'</td><td>'b'</td><td>'[1, 2]'</td><td><i>NULL</i></td></tr>
+<tr><td>'abc'</td><td>'b..0'</td><td>'1'</td><td>1</td></tr>
+<tr><td>'abc'</td><td>'b..1'</td><td>'2'</td><td>2</td></tr>
+<tr><td>'def'</td><td>'b'</td><td>'{"x": 100, "y": 200"}'</td><td><i>NULL</i></td></tr>
+<tr><td>'def'</td><td>'b.x'</td><td>'100'</td><td>100</td></tr>
+<tr><td>'def'</td><td>'b.y'</td><td>'200'</td><td>200</td></tr>
+</table>
+
+<p><b>Final</b></p>
+
+<p>De momento estoy usando este esquema para la implementación de Mojo. El objetivo es replicar lo máximo posible la funcionalidad de MongoDB pero usando motores de bases de datos "tradicionales".</p>
+<p>El código se encuentra disponible en el <a href="https://gitorious.org/mojo/mojo/">repositorio de Mojo</a> y todas las ideas y aportaciones son bienvenidas.</p>
+</div>
diff --git a/posts/153.html b/posts/153.html
new file mode 100644 (file)
index 0000000..6502197
--- /dev/null
@@ -0,0 +1,28 @@
+title: FirefoxOS no era tan bueno ni tan libre
+date: 2015-12-31 11:11
+---
+<div>
+<p>Fui una de las primeras personas en adquirir un smartphone con FirefoxOS instalado de serie, un Geeksphone Keon, y probablemente la única persona en Castellón.</p>
+
+<p>Mis motivos, los de siempre. Tener un dispositivo lo más libre posible, sin software que me haga sentirme continuamente vigilado y con la posibilidad de tener un control absoluto.</p>
+
+<p>En principio FirefoxOS cumplía con mis exigencias. Me gustaba mucho la idea de aplicaciones Javascript de bajo consumo que podía modificar a mi gusto y en tiempo real, sin compilaciones de ningún tipo y directamente en mi dispositivo.</p>
+
+<p>Además, el tener un market de aplicaciones independiente de Google en el que las barreras de entrada no eran las que marca el Gran Hermano, con la posibilidad de instalarlas o de ejecutarlas desde servidores remotos, era también un aliciente.</p>
+
+<p>Existían contrapartidas de cierto peso. El smartphone no funcionaba todo lo bién que debería. Cierto que el modelo venía con la reseña "Developer Preview", indicando que se trataba de un prototipo, pero aún así es de esperar que cosas como la cámara funcionen desde el principio sin dar demasiados problemas.</p>
+
+<p>Peor fue tras la última actualización, cuando deje de poder apagar o reiniciar el teléfono y tenía que quitar la batería para poder hacerlo. Pero no me asusto fácilmente y el hecho de tener un dispositivo con software libre valía todo eso y más.</p>
+
+<p>La primera sorpresa desagradable fue darme cuenta de que en el market no había forma de separar apps privativas de apps libres. Tenía que ir a la web del desarrollador o preguntar directamente para asegurarme de si ciertas aplicaciones eran libres o no.</p>
+
+<p>Pero lo peor vino cuando me enteré por los foros de que Geeksphone abandonaba sus proyectos sobre FirefoxOS y que partes privativas que ellos habían desarrollado seguirían siendolo indefinidamente. Si usas un sistema operativo libre y eres el fabricante del hardware, qué necesidad hay de tener partes cerradas para la comunidad.</p>
+
+<p>Usar un smartphone totalmente libre pero con bastantes carencias es duro pero soportable; todo sea por los ideales de uno mismo. Pero cuando descubres que tu dispositivo no es todo lo libre que creías te sientes simplemente el más tonto del mundo.</p>
+
+<p>Me paré a pensar y me dije: "¿Qué hago cuando quiero comprar un ordenador? Elijo mi sistema operativo preferido y busco hardware que lo soporte, por lo que tengo que hacer lo mismo con los smartphone." Sistema operativo totalmente libre y con una comunidad comprometida: <a href="http://www.replicant.us/">Replicant</a>. Busco hardware que lo soporte y me hago con un Samsung Galaxy S3 de segunda mano. Para el wifi necesito firmware privativo y lo instalo, tendré que vivir con ello.</p>
+
+<p>Y ahora tengo un sistema casi libre al 100% y las partes privativas las tengo controladas y serán sustituidas lo más pronto posible. No tengo cámara frontal porque necesito firms privativos pero paso de los selfies, no tengo bluetooth por lo mismo, ni aceleración 3D, pero da igual.</p>
+
+<p>Un paso más cerca de la libertad total.</p>
+</div>
diff --git a/posts/154.html b/posts/154.html
new file mode 100644 (file)
index 0000000..356213d
--- /dev/null
@@ -0,0 +1,22 @@
+title: La perversión empesarial no tiene límites
+date: 2016-01-03 21:56
+---
+<div>
+<p>La definición de software libre suele diferir dependiendo de a quién preguntes pero por lo general se coincide en que lo que se intenta es proteger al usuario y darle la oportunidad de que controle sus herramientas informáticas liberándole de la sumisión con su proveedor de software.</p>
+
+<p>Para conseguirlo existen infinidad de licencias, unas más restrictivas que otras, que en resumen permiten al que recibe el software poder usarlo, copiarlo, modificarlo y distribuir esas modificaciones. Entre otras cosas es posible crear negocios con software de terceros, lo que promueve una competencia que resulta beneficiosa para los usuarios finales.</p>
+
+<p>El concepto copyleft aún potencia más esa competencia, obligando a que toda modificación que proceda de un programa libre deba a su vez ser también libre (obligado cuando distribuyes el programa, claro).</p>
+
+<p>Y con los nuevos tiempos y los servicios web aparecieron las licencias tipo Affero que obligan a distribuir el software si ofreces servicios basados en él, siempre con la intención de promover la competencia y de darle libertad al usuario final.</p>
+
+<p>Por eso sorprenden mucho casos como los de OpenERP/Odoo, que consiguen darle la vuelta a una licencia como la AGPLv3 y usarla justamente para lo contrario, para minimizar toda posible competencia y atar a sus usuarios de una forma no demasiado ética.</p>
+
+<p>La estrategia es la siguiente: crear un framework y una serie de librerías junto con una serie de módulos que proporcionan un sistema ERP bastante completo y liberarlo bajo la licencia AGPLv3. Hasta aquí perfecto; aparece una comunidad de usuarios y desarrolladores repartida entre distintos países que extienden el ERP y lo adaptan a una gran diversidad de necesidades.</p>
+
+<p>Pero la empresa creadora del ERP empieza a tomar decisiones cada vez más alejadas de lo que alguien comprometido con la comunidad haría. Se empiezan a realizar modificaciones importantes entre versiones y se deja de dar soporte a las migraciones entre versiones a no ser que se pase por caja. E incluso así el paso de una versión a otra es de todo menos un camino de rosas, lo que provoca que muchos usuarios se vayan quedando en versiones antiguas y desactualizadas.</p>
+
+<p>Por otro lado, la empresa comienza a ofrecer su propio servicio SaaS y usando un doble licenciamiento sobre su propio producto comienzan a ofrecer funcionalidades que ya no son libres sino privativas, aunque el resto de posibles competidores quedan obligados por la licencia a distribuir su código libremente. Es decir, que Odoo puede copiar y usar todos los módulos de la competencia pero estos competidores tienen que desarrollar desde cero las nuevas funcionalidades, lo que les sitúa en una posición claramente desventajosa.</p>
+
+<p>Un flaco favor al software libre, ya que si bien es cierto que en un principio ayudaron y mucho a la creación de un buen sistema ERP libre, sus últimas actuaciones y decisiones están demostrando qué pesa más para esta empresa cuando hay que elegir entre libertad y dinero. La ética a segundo plano una vez más.</p>
+</div>
diff --git a/posts/16.html b/posts/16.html
new file mode 100644 (file)
index 0000000..03cd730
--- /dev/null
@@ -0,0 +1,8 @@
+title: Ya estan las fotos de la riada
+date: 2004-02-23 16:59
+---
+<div>
+<p>Finalmente el Ros ha colgado las fotos de la riada que hubo en Santa Magdalena de Pulpis el 10 de noviembre del año pasado y yo tambien las he puesto en este pequeño rinconcinto personal, en la <a href="http://www.jsancho.org/mgallery/index.php">sección de fotos</a>. Mi enhorabuena por las fotos, son impresionantes.</p>
+
+<p>Por si alguien esta interesado la web no oficial del pueblo esta <a href="http://www.valencians.com/castellon/bm/santamagdalenapulpis/">aquí</a>.</p>
+</div>
diff --git a/posts/17.html b/posts/17.html
new file mode 100644 (file)
index 0000000..a2efac6
--- /dev/null
@@ -0,0 +1,28 @@
+title: El software libre y las licencias: XFree y GPL
+date: 2004-02-24 12:25
+---
+<div>
+<p>Al final saltó la liebre y se anunció la salida de XFree 4.4 con una nueva versión de su licencia que la hacía incompatible con la licencia GPL de la mayor parte de las aplicaciones y programas que usan las <i>xlibs</i>. Como era de esperar las distribuciones más habituales ya estan pensando en no incluir esta <i>release</i> y volver a usar la 4.3, como ya ha hecho Mandrake. Gentoo, Debian y Red Hat van por el mismo camino.</p>
+
+<p>¿Qué tiene la licencia XFree 1.1 que la hace incompatible con la licencia GPL? Muchos han aprovechado para criticar a la GPL por problemas con otras licencias. ¿Es la GPL demasiado estricta?</p>
+
+<p>A veces pienso que tengo que cambiar el disco ya que siempre estoy hablando de lo mismo. Ahora son distintos actores, pero esta película tiene un argumento similar a cuando hablé sobre MySQL y PHP en <a href="http://www.aditel.org/weblog/General-20030811163211/showArticleDetails">¿Es libre el software libre?</a>.</p>
+
+<p>En esta ocasión el protagonista principal es XFree, que con su cambio de licencia ha revolucionado el ya de por sí agitado mar de las licencias. El problema reside en una de las nuevas condiciones de la <a href="http://www.xfree86.org/legal/licenses.html">versión 1.1 de la licencia de XFree</a> que dice así:</p>
+
+<p><i>The end-user documentation included with the redistribution, if any, must include the following acknowledgment: "This product includes software developed by The XFree86 Project, Inc (http://www.xfree86.org/) and its contributors", in the same place and form as other third-party acknowledgments. Alternately, this acknowledgment may appear in the software itself, in the same form and location as other such third-party acknowledgments.</i></p>
+
+<p>En otras palabras, la licencia dice que hay que indicar en la documentación de todos los productos basados en XFree y en sus librerías la coletilla <i>"This product includes software developed by The XFree86 Project, Inc (http://www.xfree86.org/) and its contributors"</i>. En un principio no parece gran cosa. Total, lo único que pasa es que los chicos de XFree quieren un poco de publicidad, lo cual considero totalmente innecesario ya que de todos es sabida la autoría del proyecto y la URL del mismo. El problema surge al enlazar esto con un programa bajo licencia GPL ya que la GPL deja claro que:</p>
+
+<p><i>Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.</i></p>
+
+<p>Lo que viene a decir que no se pueden añadir más condiciones de las ya establecidas por la propia licencia. Y aquí es donde surge la polémica y la incompatibilidad entre las dos licencias, ya que la XFree obliga a incluir la ya famosa coletilla en todos los productos derivados, pero la GPL prohibe incluir nuevas restricciones en los mismos.</p>
+
+<p>¿Y ahora qué pasará? Pues de momento lo que esta ocurriendo. Los programas GPL continuan funcionando sobre XFree 4.3, que aunque no es GPL sí que es compatible GPL, y si los chicos de XFree no cambian de parecer la tendencia será migrar hacia alguna de las alternativas que existen actualmente como puede ser <a href="http://www.xouvert.org/">Xouvert</a> o algún fork realizado desde XFree 4.3 por un nuevo equipo de desarrollo.</p>
+
+<p>En realidad la cuestión no deja de ser una tontería, por lo que muchos de los detractores de la licencia GPL han aprovechado para atacarla en favor de otros tipos de licencia, argumentando que la GPL no debería ser tan restrictiva y que sus condiciones coartan la libertad de desarrolladores y usuarios a la hora de elegir la forma de distribuir su trabajo.</p>
+
+<p>Desde mi punto de vista, sin embargo, la licencia GPL define el software libre en su más pura esencia, de una forma que ninguna otra licencia llega a hacer. En el mismo momento en que una parte de software se establece bajo los términos y condiciones de la GPL automaticamente queda sin dueño, que no es lo mismo que decir que pierde su atoría. El programa seguirá teniendo a su autor, pero los derechos de uso, de modificación y de distribución pasan a ser extensibles a todo el mundo. Por otro lado la licencia se asegura de que eso será así siempre y de que nadie podrá cambiarlo, ni siquiera el autor original. Eso es lo que protege la condición comentada más arriba.</p>
+
+<p>Hay gente que dice que la GPL no es suficientemente libre por que obliga al software a ser eternamente GPL, pero es que debe ser así y por eso se llama software libre y no distribución libre o programadores libres. La libertad no la tenemos los usuarios o los desarrolladores, la tiene el software, y cuando un software se libera se hace para siempre. Es cierto que nos beneficiamos y mucho de esa libertad del software, pero eso no nos da derecho a poder quitar esa libertad en un determinado momento.</p>
+</div>
diff --git a/posts/18.html b/posts/18.html
new file mode 100644 (file)
index 0000000..73deb70
--- /dev/null
@@ -0,0 +1,22 @@
+title: Cuando el terrorismo pasa cerca de ti
+date: 2004-03-11 11:05
+---
+<div>
+<p>Esta mañana, un poco antes de las ocho, se han registrado tres explosiones en las estaciones de trenes madrileñas de Atocha, Santa Eugenia y El Pozo del Tío Raimundo. Aquí, en mi pequeño y tranquilo Castellón, también he notado el retumbar de las detonaciones.</p>
+
+<p><b>07:25</b> Como todas las mañanas salgo de casa y me dirijo en coche hacia la vecina población de Villarreal, donde trabajo. Pongo la radio buscando algo interesante pero como no hay nada que me guste la dejo apagada.</p>
+
+<p><b>07:59</b> Llego a la fábrica y ficho por los pelos. Hoy el tráfico estaba imposible. Desconozco que hacía pocos minutos había ocurrido la desgracia.</p>
+
+<p><b>09:00</b> Me llaman al móvil. Es mi mujer que acaba de enterarse, en el trabajo también. Inmediatamente pienso en mis tíos y primos que viven en Madrid. Por Internet veo que uno de los atentados ha sido en Atocha y empiezo a preocuparme, ya que sé que mis primos pasan por allí para ir a la universidad.</p>
+
+<p><b>09:15</b> Como no tengo el teléfono de mi familia en Madrid llamo a casa de mi madre por si sabe algo. Comunica.</p>
+
+<p><b>09:25</b> Mi madre sigue comunicando. En Internet veo que la cifra de muertos asciende a 62. Me resulta imposible concentrarme en lo que estoy haciendo.</p>
+
+<p><b>09:40</b> Aún comunica. Tiene que haber pasado algo, pienso, esto no es normal. La angustia de no saber nada me consume.</p>
+
+<p><b>09:50</b> El teléfono me da tono de llamada. Por fin. Efectivamente mi madre había estado hablando con mis tíos y todos estaban bien. Menos mal. Por lo visto hoy estaba previsto hacer huelga en la universidad y mis primos habían decidido quedarse en casa, pero muchos de sus compañeros estaban en ese tren y no se sabía nada de ellos. Una compañera de estudios de mi tía estaba en el hospital.</p>
+
+<p><b>10:00</b> Respiro tranquilo y pienso en lo que podría haber sido. Llamo a mi mujer para decirle que estan todos a salvo. De momento. Hasta el próximo. En Internet veo que la cifra ya sube a 125 muertos. <b>¡Qué cabrones!</b></p>
+</div>
diff --git a/posts/19.html b/posts/19.html
new file mode 100644 (file)
index 0000000..7a38edf
--- /dev/null
@@ -0,0 +1,18 @@
+title: Bulmailing ya no permite correos enviados desde MS Outlook
+date: 2004-04-24 07:09
+---
+<div>
+<p>Saboreando la dulce resaca de la <a href="http://iparty.aditel.org/">iparty6</a>, en la que aporté mi pequeño granito de arena dando una charla sobre software libre, y dando las últimas pinceladas a Planeta Aditel (<a href="http://planet.aditel.org/">http://planet.aditel.org/</a>) me encuentro con la noticia de que Ricardo Galli ha decidido filtrar la lista de correo de Bulma para que no acepte correos desde clientes Outlook. Comprendo sus razones, pero no las comparto.</p>
+
+<p>La Bulmailing es la lista pública de correo que Bulma pone a disposición de la comunidad en general y es la que más tráfico genera de todas a las que estoy suscrito. Se rige por unas normas de uso bastante sencillas y en teoría fáciles de cumplir que se encuentran detalladas en lo que se conoce como <a href="http://bulma.net/body.phtml?nIdNoticia=1660">bulmatiqueta</a>. La transgresión continuada de una de ellas ha obligado a tomar la drástica decisión.</p>
+
+<p>La norma 3 de la <a href="http://bulma.net/body.phtml?nIdNoticia=1660">bulmatiqueta</a> dice textualmente que "<i>No respondas con la dirección de correo del original incluido en el mensaje porque estás facilitando esa dirección a los spammers. Hacemos el esfuerzo para que las direcciones de individuos aparezcan lo menos posible en los mensajes. Además ya es una costumbre en Bulmailing, y no nos gusta ver nuestras direcciones en el web de los archivos. La gente nos escribe luego personalmente para hacernos preguntas de un mensaje de hace muchos meses.</i>"</p>
+
+<p>Cumplir esta norma no es muy complicado si usamos clientes de correo como Eudora, KMail, Evolution o tantos otros como hay. El problema lo tenemos al usar cualquiera de las versiones de Outlook, ya que este cliente tiene la mala costumbre de añadir la dirección de correo del destinatario en el cuerpo del mensaje cuando respondemos a un correo, por lo que los usarios deben de borrarlo manualmente para cumplir con la norma 3 (ignoro si se puede configurar el Outlook para que no sea así). Pero muchos de ellos no lo hacen y la infringen de forma reiterada, provocando las iras justificadas de los bulmeros.</p>
+
+<p>Por esta razón es por la que ayer se añadió un filtro en el mailman de Bulma para no aceptar correos provenientes de clientes Outlook, lo que creo que es algo bastante justificado pero al mismo tiempo bastante discriminatorio, ya que tambien es cierto que muchos usuarios de Outlook se esfuerzan por cumplir las normas y me consta que las cumplen y se les ha metido en el mismo saco de los que pasan de todo.</p>
+
+<p>Es sencillo, una de las razones por las que me gusta usar software libre es que nadie me dice qué aplicaciones tengo que usar para desarrollar mi trabajo, tanto puedo usar Lyx como vi para escribir un artículo o Amaya como Mozilla Composer para diseñar una página web. Todo depende de mis gustos como usuario. Y no creo que sea ético que se diga que para participar en una lista de correo tengas que usar unos determinados clientes de correo. Es lo mismo que cuando me encuentro webs que necesitan Internet Explorer para visualizarse correctamente, cuando el HTML es un estádar mundialmente reconocido.</p>
+
+<p>Vuelvo a repetir que comprendo las razones de los bulmeros, pero juzgar a los usuarios en base al cliente de correo y no en base al comportamiento de los mismos en la lista me resulta algo completamente discriminatorio.</p>
+</div>
diff --git a/posts/2.html b/posts/2.html
new file mode 100644 (file)
index 0000000..fd85072
--- /dev/null
@@ -0,0 +1,10 @@
+title: El banner de publicidad pasa a ser un popup
+date: 2003-09-18 08:37
+---
+<div>
+<p>Al crear la web, iespana insertó un banner de publicidad en la parte de abajo, pero ahora han accedido a poner esa publicidad en un popup. Ya sólo nos queda configurar apropiadamente el Mozilla para no volver a ver esa publicidad tan molesta.</p>
+
+<p>Entramos en la ventana de preferencias del Mozilla y vamos a la opción "Privacidad y seguridad" y despues a "Ventanas emergentes". No hay más que seleccionar "Suprimir ventanas emergentes" y no volveremos a ver más popups. También es conveniente asegurarse de que está desmarcada la casilla "Reproducir un sonido" para evitar que cada vez que se bloquee un popup suene un sonido, algo que puede llegar a resultar molesto. Si hay algún sitio web en el que queramos permitir los popups, por ejemplo porque al entrar abra la página principal en una ventana nueva, podemos hacer click en "Excepciones" y añadirlo. Esa misma ventana también se puede abrir haciendo doble click en el icono de la exclamación que aparecerá en la esquina inferior derecha de la ventana de Mozilla cuando se bloquee un popup.</p>
+
+<p>La información ha sido extraída de esta <a href="http://mozilla.metropoliglobal.com/1.3/mozilla_config.html">web sobre Mozilla</a>, donde puedes encontrar muchas más opciones de este estupendo navegador libre.</p>
+</div>
diff --git a/posts/20.html b/posts/20.html
new file mode 100644 (file)
index 0000000..df333f5
--- /dev/null
@@ -0,0 +1,30 @@
+title: Configurando listas de correo distribuidas con Mailman
+date: 2004-05-07 16:42
+---
+<div>
+<p>Cuando empezó toda la movida del FLUG (Federación de LUGs) Bulma montó una lista de correo y un wiki para que todos pudieran expresar sus puntos de vista y presentar propuestas. En la lista participaba gente de un montón de asociaciones, ya fueran locales o virtuales, formando algo que yo considero fue un germén de lo que algún día será el FLUG.</p>
+
+<p>Días después el servidor de Bulma tuvo algún problema, desconozco los detalles, y el wiki quedó temporalmente fuera de servicio. Ignoro si pasó lo mismo con la lista de correo. Fue algo más bien anecdótico, pero me hizo pensar en que los servicios de un futuro FLUG no deberían depender de un sólo servidor, sino de muchos.</p>
+
+<p>Basándome en el espíritu distribuido de Planeta LUG o MetaSlug o como se llame he investigado un poco y paso a describir cómo debería de ser, bajo mi punto de vista, una lista de correo del FLUG.</p>
+
+<p>En Planeta LUG cada asociación se hace responsable de su parte del proyecto. No existe un servidor centralizado, por lo que la caída de un servidor no afecta demasiado al resto del proyecto y la mayor parte de la información seguirá estando accesible. Probablemente la gente ni llegaría a darse cuenta del problema.</p>
+
+<p>La idea es conseguir algo similar con las listas de correo. Por ejemplo, yo estoy suscrito a <i>flug at aditel.org</i> y todo lo que envío llega a los miembros de <i>flug at aditel.org</i>, de <i>flug at badopi.org</i>, etc. En el caso de que caiga el servidor de Aditel solamente los miembros de Aditel se quedarían sin servicio y los demás seguirían teniendo sus listas funcionando.</p>
+
+<p>He usado <a href="http://www.list.org/">Mailman</a> para este experimento por formar parte de GNU y por ser el más usado por las asociaciones que hipoteticamente harían uso de este engendro. Desconozco como se podría montar con un gestor de listas de correo distinto.</p>
+
+<p>Siguiendo con el tema del FLUG, supongamos que Bulma y Aditel se ponen de acuerdo para formar la lista de correo distribuida. Se crean dos listas de correo independientes, <i>flug at aditel.org</i> y <i>flug at bulma.net</i>. Los nombres de las listas no tienen que coincidir necesariamente pero así resulta más homogéneo. En las listas se introducen todos los miembros que sean necesarios o se dejan vacías si las subscripciones se hacen a través de la web.</p>
+
+<p>Para que las listas se comuniquen entre ellas deben estar referenciadas como miembros de las otras. En este caso <i>flug at aditel.org</i> tendría a <i>flug at bulma.net</i> como miembro y viceversa. De esta forma todos los correos enviados a la lista de Aditel serán reenviados a todos los miembros de la lista incluyendo la lista de Bulma. Esto aún no funcionaría del todo pero creo que se va viendo la idea.</p>
+
+<p>Tal como lo tenemos ahora la lista de Aditel intentaría enviar recordatorios de contraseña a Bulma. Para que eso no ocurra tendriamos que desactivarlo para que solamente los reciban los miembros normales y no las listas.</p>
+
+<p>Para que acabe de funcionar el invento tenemos que irnos a los filtros para destinatarios de las opciones de privacidad y poner el <b>require_explicit_destination</b> a verdadero e indicar la dirección de la otra lista en el <b>acceptable_aliases</b>. De esta forma se pueden recibir los correos de la otra lista como si se tratara de la propia.</p>
+
+<p>Finalmente la parte que menos me gusta del invento. Las listas de correo que forman parte de esta macro lista distribuida deben de ser abiertas, es decir, se deben permitir correos de suscritos y de no suscritos, con el consiguiente riesgo de recibir spam a saco, entrada indiscriminada de trolls, etc. Para evitar esto se pueden indicar las direcciones de los suscritos de todas las listas en los filtros de remitente, en concreto en la opción <b>accept_these_nonmembers</b>, pero entonces tenemos el problema de sincronizar todas las listas para que nadie se quede fuera.</p>
+
+<p>Este problema se podría solucionar, por ejemplo, si se pudiera filtrar por alguno de los campos que rellena Mailman pero que yo sepa algo así no es posible.</p>
+
+<p>De todas formas ahí queda la idea, por si algún día alguien esta interesado y consigue hacer una auténtica lista distribuida de correo.</p>
+</div>
diff --git a/posts/21.html b/posts/21.html
new file mode 100644 (file)
index 0000000..d74c2f8
--- /dev/null
@@ -0,0 +1,16 @@
+title: Squid Analysis Report Generator (SARG)
+date: 2004-05-11 07:50
+---
+<div>
+<p>Hoy me ha dado por empezar a desarrollar un analizador de los logs del squid pero despues me he dicho <i>"tranqui colega, seguro que hay algo por ahí que valdrá la pena"</i>. No me ha costado mucho encontrar un proyecto la mar de interesante, el analizador <a href="http://sarg.sourceforge.net/">SARG</a>.</p>
+
+<p>No hay mucho que explicar de SARG. Es sencillo pero potente y eficaz.</p>
+
+<p>La instalación puede hacerse mediante paquetes, aunque no he probado ninguno. Si se hace con el fichero comprimido que hay en la web se instala rapidamente con la secuencia mundialmente conocida de <b>configure</b>, <b>make</b> y <b>make install</b> (de verdad, ultimamente me resulta más entretenido instalar cosas en Windows, en Linux es todo asquerosamente fácil  ;-) ).</p>
+
+<p>Una vez instalado, el comando sarg nos genera listados en HTML basados en los logs del squid que le indiquemos. Por ejemplo, con <b>sarg -l /var/log/squid/access.conf -o /var/www/sarg</b> obtendremos una serie de listados que se ubicarán en el directorio especificado y que podremos consultar con cualquier navegador. Un ejemplo de estos listados lo podemos encontrar <a href="http://sarg.sourceforge.net/squid-reports/index.html">aquí</a>.</p>
+
+<p>La página del man sobre sarg es bastante útil, y para opciones avanzadas podemos modificar el fichero <b>sarg.conf</b> que se ubica por defecto en <b>/usr/local/sarg/</b>. En el fichero de configuración podemos establecer opciones como el idioma (podemos tener listados hasta en catalán), apariencia, ordenación de los resultados, envio de los listados por correo, etc.</p>
+
+<p>Poco más que decir de sarg. Es una aplicación sencilla que hace solamente lo que tiene que hacer, y además lo hace bien.</p>
+</div>
diff --git a/posts/22.html b/posts/22.html
new file mode 100644 (file)
index 0000000..0a21818
--- /dev/null
@@ -0,0 +1,18 @@
+title: VPN a través de iptables
+date: 2004-05-18 08:37
+---
+<div>
+<p>Pequeña receta de cocina para permitir conexión a un servidor Microsoft PPTP VPN pasando por un cortafuegos Debian Woody con iptables.</p>
+
+<p>Al final no era tan complicado. Se usa el puerto tcp 1723 para establecer la conexión pero el envio/recepción de datos se realiza usando el protocolo gre (47) una vez que tenemos el canal IP creado. Por lo que veo es algo parecido al ftp pasivo.</p>
+
+<p>Las reglas para el cortafuegos quedan así:</p>
+
+<pre>iptables -A FORWARD -o ETH_VPN -s IP_SERVIDOR_VPN -p tcp --dport 1723 -m state --state NEW -j ACCEPT
+iptables -A FORWARD -o ETH_VPN -s IP_SERVIDOR_VPN -p gre -m state --state NEW -j ACCEPT
+
+iptables -t nat -A PREROUTING -i ETH_VPN -p tcp --dport 1723 -j DNAT --to IP_SERVIDOR_VPN:1723
+iptables -t nat -A PREROUTING -i ETH_VPN -p gre -j DNAT --to IP_SERVIDOR_VPN</pre>
+
+<p>Ale, nunca te acostarás sin saber una cosa más.</p>
+</div>
diff --git a/posts/23.html b/posts/23.html
new file mode 100644 (file)
index 0000000..8947ca0
--- /dev/null
@@ -0,0 +1,8 @@
+title: El problema de las gallinas
+date: 2004-06-16 09:08
+---
+<div>
+<p>Aunque ya lo conocía ya lo había olvidado y la solución, aunque sencilla, no deja de ser curiosa.</p>
+
+<p>Si una gallina y media pone un huevo y medio en un día y medio, ¿cuántos huevos pondrán nueve gallinas en nueve días? No, no son 81 ;-)</p>
+</div>
diff --git a/posts/24.html b/posts/24.html
new file mode 100644 (file)
index 0000000..6fab52f
--- /dev/null
@@ -0,0 +1,14 @@
+title: Conversando con Richard Stallman
+date: 2004-07-23 16:10
+---
+<div>
+<p>La semana pasada, tras dar unas charlas en Palma, Richard Stallman vino a casa de unos amigos en Castellón. Me enteré de casualidad en la lista de Bulma (gracias Ricardo) y me puse manos a la obra para localizarlo.</p>
+
+<p>Tras un día de búsqueda infructuosa finalmente fue él mismo el que me dió un número de teléfono para poder contactar y con otros dos compañeros de Aditel tuvimos la oportunidad de conocerle en un preciosa villa apartada de la civilización, casi en plena montaña, cerca de Penyeta Roja.</p>
+
+<p>Suele pasar que cuando te presentan a una persona que ya conocías por fotos o por películas te llevas una desilusión ya que te esperabas otra cosa. Esta idea me rondaba por la cabeza mientras nos dirigiamos a casa de Jack, el anfitrión de Stallman, pero no quedé decepcionado. Puedo decir que incluso fue mejor de lo que yo creía, me impresionó sobremanera la ética de este hombre.</p>
+
+<p>En realidad hablamos muy poco de software libre y la conversación giró más en torno a las empresas, los sindicatos y los empleados, pero aún así pasé una media hora estupenda.</p>
+
+<p>La pena fue no llevar una cámara de fotos.</p>
+</div>
diff --git a/posts/25.html b/posts/25.html
new file mode 100644 (file)
index 0000000..2076375
--- /dev/null
@@ -0,0 +1,45 @@
+title: Los chips RFID, un peligro para nuestra intimidad
+date: 2004-09-08 08:19
+---
+<div>
+<p><i>"El código de barras de los productos tiene los días contados y algunos piensan que el derecho a la intimidad de las personas también. Una nueva forma de etiquetar las cosas, pero también a los animales y los seres humanos, se está colando en nuestras vidas. Las empresas de tecnología, las que lo están fabricando, lo llaman RFID, identificación por radiofrecuencia. El resto de sectores, los que las compran y pegan a sus productos, las denominan etiquetas inteligentes. Los defensores de los derechos civiles prefieren llamarlos chip espías. Millones de diminutos Grandes Hermanos adheridos a cada cosa que se compre." - Miguel A. Criado (El Mundo).</i></p>
+
+<p>Desde su aparición se esta intentado vender la tecnología RFID como una evolución de los códigos de barras. La caja de cereales que compramos todas las semanas en el supermercado, por ejemplo, puede llevar un chip minúsculo con información sobre la marca, el precio y la fecha de caducidad. Pero además la caja de cereales queda identificada por el chip de forma única, es decir, que el cajero sabrá exactamente qué caja hemos cogido, no la de la derecha, ni la de la segunda fila, sino exactamente la que tenemos.</p>
+
+<p>Bueno, tampoco es para tanto, pensarán algunos. Hasta aquí no, pero el problema viene cuando salimos del supermercado, ya que el chip sigue emitiendo, incluso desde nuestra casa. Si todo lo que compramos se encontrara identificado por un chip, cualquiera con el lector adecuado podría saber qué ropa tenemos en el armario, qué comemos, la marca de nuestra televisión o de nuestros preservativos (incluso con un examen periódico podría determinar la frecuencia de actividad sexual).</p>
+
+<p>Quizás suene exagerado, pero no lo es tanto. Wal-Mart, primera empresa del sector de las grandes superficies en el mundo, ha anunciado a sus suministradores que en 2005 todo lo que le envíen debe llevar las etiquetas inteligentes. La francesa Carrefour, la alemana Metro y la británica Tesco ya lo están ensayando. Para empresas y consumidores las ventajas son muchas, ya que podremos hacer la compra y pasar por caja sin necesidad de sacar la compra del carrito, evitando la cola de la compra por todos conocida, y no será necesario tener un dependiente en cada caja con el consiguiente ahorro de salarios, aunque seguramente eso no hará bajar los precios de los productos (como en la gasolineras en las que te pones la gasolina tú mismo).</p>
+
+<p>También se esta empezando a usar con las personas. En Dollywood's Splash Country, el parque acuático de Dolly Parton, los niños llevan una pulsera con un chip RFID que permite tenerlos controlados en todo momento mientras los padres descansan tranquilamente. Este mismo año, nada menos que los 40 parques temáticos que hay en Estados Unidos seguirán el ejemplo de Dollywood.</p>
+
+<p>¿Y qué me dicen de noticias como esta? <i>"La discoteca catalana Baja Beach Club celebrará su séptimo aniversario con la presentación del primer sistema de identificación implantado bajo la piel. El chip digital permitirá a su portador evitar presentar el DNI o la tarjeta de crédito para acceder al local. En principio está previsto su implantación a famosos."</i></p>
+
+<p>Otra aplicación de los chips espía podría ser mantener bajo control a los maltratadores de mujeres y delincuentes peligrosos ex-convictos o en libertad condicional.</p>
+
+<p>Echemos un vistazo al ¿mundo feliz? del año 2104. Todos los objetos, animales de compañía y personas están identificados por un chip que les mantiene localizados en todo momento. Si entro en el comedor y me siento en el sofá el Gran Hermano enciende la tele y sintoniza el canal de deportes por mi, pero si entran mis hijos bloqueará temporalmente el canal de pelis porno. Se encarga de conducir los coches y de dirigirlos por los itinerarios más convenientes, ya que tiene todo el parque móvil localizado y puede asegurar siempre un tráfico fluido, evitando de paso casi todos los accidentes de tráfico. Incluso se encarga de tirar de la cadena cuando me alejo un metro del inodoro.</p>
+
+<p>En este mundo artificial el hombre ya no piensa, simplemente vive. No hay preocupaciones, no hay problemas, simplemente disfrutamos de la vida, el Gran Hermano toma las decisiones por nosotros, él vela por nosotros, nos cuida, nos protege. No hay nada que mejorar ni nada nuevo que crear ya que el sistema actual es el mejor sistema que jamás haya existido. Y sin embargo, ¿por qué algunos nos sentimos tan desdichados, tan vacíos?</p>
+
+<p>¿Qué es el Gran Hermano? (¿Qué es Matrix? ;-) ) Control. Un enorme mundo monitorizado por ordenador, construido para mantenernos bajo control y convertir al ser humano en un esclavo atrapado en una prisión que no puede ni oler ni saborear ni tocar. Una prisión para su mente.</p>
+
+<p>Quién controla el sistema es lo de menos. Las máquinas, una sola persona, un gobierno, las grandes corporaciones... no importa. Lo que importa es que solamente vemos lo que se nos enseña y solamente hacemos lo que se nos deja hacer. El Gran Hermano lo sabe todo (la información es poder) y decide qué es lo que existe y lo que no existe.</p>
+
+<p>Volvemos al presente. Evidentemente he descrito un futuro completemante irreal y espero que altamente improbable aunque da para una novela de ciencia ficción, pero la idea principal es que la información es poder y quién controla la información controla el mundo. Los chips espía son un gran avance tecnológico que puede traer grandes beneficios a nuestro estilo de vida, pero el sistema y toda la información que maneja deben de estar completamente regulados para evitar algo parecido a ese futuro de 2104, y que yo sepa de momento no existe esa regularización, ni en EEUU, que es donde más se está implantando, ni en España.</p>
+
+<p>Todos los datos que son manejados por RFID son sensibles de ser protegidos y deberían entrar dentro del ámbito de la LOPD (Ley Orgánica de Protección de Datos). Y cuando digo todos quiero decir todos y no solamente los chips asignados a las personas directamente. Puede que un chip insertado en una caja de antidepresivos de una farmacia no contenga información que necesite ser protegida, pero si esa caja se encuentra dentro de mi bolsillo en ese momento ya se trata de información personal que no debería de estar al alcance de cualquiera y que debería ser protegida de la misma forma que el resto de datos personales.</p>
+
+<p>Cada día que pasa los sistemas de vigilancia se encuentran más y más integrados en nuestra vida cotidiana. Cada día estos sistemas vulneran el derecho de presunción de inocencia de cada persona; para estos sistemas somos todos presuntos culpables. Estos sistemas nos son muy útiles pero siempre y cuando se encuentren fuertemente controlados y regulados, ya que si dejamos que actúen sin ningún tipo de control (me refiero siempre a control público) acabaremos perdiendo algo tan precioso como nuestra intimidad y nuestra libertad.</p>
+
+<p>Para acabar citaré una parte del anuncio de la reposición del programa <b>Presuntos culpables</b> que se ha publicado recientemente en Kriptópolis: <i>"Una de las mayores paradojas de la sociedad en que vivimos, es que a mayor libertad de información y mayor capacidad de comunicación, gracias a las nuevas tecnologías, los ciudadanos están más vulnerables frente a su derecho a la intimidad y más desprovistos de recursos para controlar sus datos más personales ya sean fiscales, genéticos o de la propia imagen y voz."</i></p>
+
+<p>Que no nos quedemos dormidos.</p>
+
+<p>Fuentes:</p>
+
+<ul>
+<li><a href="http://www.kriptopolis.com/">Kriptópolis</a></li>
+<li><a href="http://chipespia.blogspot.com/">Chip Espía</a></li>
+<li><a href="http://www.el-mundo.es/navegante/2004/03/17/esociedad/1079536632.html">Una discoteca catalana implantará un chip bajo la piel a personajes famosos (El Mundo)</a></li>
+<li><a href="http://elmundo.es/cronica/2004/433/1075730635.html">¡Ojo, lleva un espía en la cesta! (El Mundo)</a></li>
+</ul>
+</div>
diff --git a/posts/26.html b/posts/26.html
new file mode 100644 (file)
index 0000000..a7d5079
--- /dev/null
@@ -0,0 +1,27 @@
+title: Bulmailing ya no permite correos enviados desde MS Outlook (II)
+date: 2004-09-10 10:42
+---
+<div>
+<p>Pasa el tiempo y donde dije digo, digo diego. Que nunca es tarde para cambiar de opinión, vaya.</p>
+
+<p>Los que me leen de forma más o menos periódica recordarán mi opinión sobre este tema hace cinco meses (<a href="2004/04/24/bulmailing-ya-no-permite-correos-enviados-desde-ms-outlook/">Bulmailing ya no permite correos enviados desde MS Outlook</a>). Por aquel entonces, y aunque entendía las razones de Bulma para actuar de esa manera, defendí la libertad de cada uno para usar el programa que más le gustara independientemente del tipo de licencia que tuviera.</p>
+
+<p>Sin embargo en ese razonamiento que expuse no tuve en cuenta algo que ya conocía por RMS pero que a veces necesito que me recuerden: el compromiso. Una reciente discusión en Bulma sobre el blog de Ian Murdock me hizo ver mis anteriores comentarios sobre la lista desde otro punto de vista.</p>
+
+<p>Cierto es que la decisión de Bulma de no permitir mails enviados con Outlook o Hotmail vino justificada por la manía que tiene este cliente de correo y la empresa que lo distribuye de saltarse todos los estándares habidos y por haber. Cosas tan molestas como direcciones de correo en los mails, mensajes en HTML y la constante ruptura de los hilos colmaron la paciencia de los bulmeros, pero no es esa la razón principal.</p>
+
+<p>En realidad el acceso a la lista no está restringido. Desconozco si una persona puede suscribirse usando Outlook, recibiendo los mails de la lista sin enviar nada. Aunque así fuera los archivos de la lista están disponibles en tiempo real, con lo que cualquiera puede estar al día de lo que se comenta.</p>
+
+<p>Ahora bien, en el momento en que alguien esta dispuesto a enviar algo a la lista, a contribuir de cualquier forma a lo que se está hablando, se entiende de forma implícita que tiene algún tipo de compromiso con el software libre, aunque sea muy leve, y entiendo que ese tipo de compromiso debe llevar al uso de programas libres.</p>
+
+<p>No tiene que ser un cambio radical y traumático. Se puede usar un sistema operativo privativo pero usar navegadores y clientes de correo libres; no hay que ser un lince en la informática para trabajar así. Es comprensible que a una persona le cueste un poco cambiar de Windows a GNU/Linux, por ejemplo, no es algo que se pueda hacer en media hora. En cambio, no es comprensible que alguien interesado en el software libre hasta el punto de participar en una lista de correo de esa temática siga usando Outlook en vez de estar usando alguna de las alternativas libres que exiten.</p>
+
+<p>El compromiso es la clave. Si te gusta el software libre, usa software libre. Pero si te gusta el software libre pero para tareas comunes usas software privativo, muchacho, eso es de juzgado de guardia.</p>
+
+<p>Por lo tanto ahora ya puedo decir que comprendo y comparto la decisión de Bulma. Se puede permitir que todavía haya gente que use software privativo, despues de todo no son más que víctimas, pero si quieren que se les ayude a quitarse el yugo tienen que dar el primer paso ellos. No creo que sea interesante hablar sobre software libre con una persona que no es capaz ni de dejar de usar el Internet Explorer.</p>
+
+<p>Todo es cuestión de compromiso.</p>
+
+<p><i>JSancho: Apenas tengo tiempo libre para desarrollar SL, trabajo 10 horas al día y también tengo que dedicar tiempo a mi familia.<br/>
+RMS: Tienes que cambiar de trabajo.</i></p>
+</div>
diff --git a/posts/27.html b/posts/27.html
new file mode 100644 (file)
index 0000000..f46ef91
--- /dev/null
@@ -0,0 +1,26 @@
+title: El final de la cuenta atrás
+date: 2004-09-28 17:28
+---
+<div>
+<p>Si hacemos caso de los miles de bulos que corren por la red este próximo 1 de octubre podemos acabar la gran mayoría de los españoles entre rejas simplemente por el hecho de hacer uso de nuestro derecho a la copia privada. Pero si leemos las leyes con detenimiento sin hacer caso de la gran cantidad de absurdos que se vuelcan por Internet comprobaremos que aún podemos dormir tranquilos.</p>
+
+<p>Estos días podemos ver foros y listas de correo inundadas de mensajes advirtiendo de la entrada en vigor de la Reforma del Código Penal el 1 de Octubre y lo que supondrá para todos los que se dedican a copiar contenidos de Internet ya sea de forma legal o ilegal. Pues bien, no se crean nada, todo mentira. Lo mejor que pueden hacer, para empezar, es documentarse un poco y leerse ustedes mismos la dichosa reforma disponible en la <a href="http://www.justicia.es/"> web del Ministerio de Justicia</a>, en concreto en lo que se refiere a la modificación del artículo 270 que paso a redactar a continuación:</p>
+
+<p><i>1. Será castigado con la pena de prisión de seis meses a dos años y multa de 12 a 24 meses quien, con ánimo de lucro y en perjuicio de tercero, reproduzca, plagie, distribuya o comunique públicamente, en todo o en parte, una obra literaria, artística o científica, o su transformación, interpretación o ejecución artística fijada en cualquier tipo de soporte o comunicada a través de cualquier medio, sin la autorización de los titulares de los correspondientes derechos de propiedad intelectual o de sus cesionarios.</i></p>
+
+<p>Hasta aquí nada que nos sorprenda. Antes de la reforma ya erá considerada como ilegal la copia con ánimo de lucro así que en este aspecto nos quedamos como estábamos. Siguiente punto.</p>
+
+<p><i>2. Será castigado con la pena de prisión de seis meses a dos años y multa de 12 a 24 meses quien intencionadamente exporte o almacene ejemplares de las obras, producciones o ejecuciones a que se refiere el apartado anterior sin la referida autorización. Igualmente incurrirán en la misma pena los que importen intencionadamente estos productos sin dicha autorización, tanto si éstos tienen un origen lícito como ilícito en su país de procedencia; no obstante, la importación de los referidos productos de un Estado perteneciente a la Unión Europea no será punible cuando aquellos se hayan adquirido directamente del titular de los derechos en dicho Estado, o con su consentimiento.</i></p>
+
+<p>Nada nuevo tampoco. Habla de la importación y exportación de las obras y contenidos, es decir, compra y venta. Seguimos hablando del ánimo de lucro con todo lo que ello conlleva.</p>
+
+<p><i>3. Será castigado también con la misma pena quien fabrique, importe, ponga en circulación o tenga cualquier medio específicamente destinado a facilitar la supresión no autorizada o la neutralización de cualquier dispositivo técnico que se haya utilizado para proteger programas de ordenador o cualquiera de las otras obras, interpretaciones o ejecuciones en los términos previstos en el apartado 1 de este artículo.</i></p>
+
+<p>Este es el punto que más polémica ha suscitado. Si nos fijamos está hablando en todo momento de programas o técnicas encaminadas a saltarse las posibles protecciones que puedan llevar las obras. Es decir, que en contra de todo lo que se ha vertido en la mayoría de medios, el realizar copias privadas de obras que no se hallen protegidas es completamente legal. Recordemos que la copia privada es aquella que se realiza sin ánimo de lucro y destinada exclusivamente para el uso privado sin necesidad de ser poseedores del original, y que por este derecho ya se paga religiosamente el conocido cánon.</p>
+
+<p>Pero aún hay más. Si nos fijamos en el final del apartado 3 nos dice que la regla se aplica <i>"en los términos previstos en el apartado 1 de este artículo"</i>, es decir, siempre y cuando la supresión de la protección de la obra se lleve a cabo para realizar copias <i>"con ánimo de lucro y en perjuicio de tercero"</i>. Que por otro lado es completamente lógico. No olvidemos que pagamos el cánon en compensación por nuestro derecho a realizar copias privadas, por lo que no solamente podemos eliminar la protección de una obra para ejercer ese derecho sino que podemos exigir al autor o al distribuidor la supresión de la misma. Sirva como ejemplo el caso del último disco de Alejandro Sanz.</p>
+
+<p>Y si a alguien le quedan dudas también podemos recurrir a la <b>causa de justificación</b>, como muy bien explica Javier de la Cueva en su artículo <a href="http://www.badopi.org/node/view/646">No es delito bajarse un emepetrés</a>.</p>
+
+<p>Resumiendo, que nadie se deje intimidar. El 1 de octubre, al igual que el 30 de septiembre, seguiremos siendo libres de ejercer nuestros derechos. Copiad, por favor, copiad.</p>
+</div>
diff --git a/posts/28.html b/posts/28.html
new file mode 100644 (file)
index 0000000..c586f0e
--- /dev/null
@@ -0,0 +1,8 @@
+title: Publicada la versión libre de El Rayo Verde (Recuerdos de cielo y mar)
+date: 2004-09-30 10:09
+---
+<div>
+<p>J.C. Unhomas, un conocido escritor al que tengo el placer de conocer, ha decidido comenzar a publicar sus obras de forma libre usando las licencias de <a href="http://creativecommons.org/">Creative Commons</a>. Ahora mismo está disponible una de sus obras más reconocidas, <a href="http://es.geocities.com/unhomas/">El Rayo Verde (Recuerdos de cielo y mar)</a>, aunque su intención es ir abriendo todas sus obras a la comunidad.</p>
+
+<p>El libro es interesante y recomendable su lectura.</p>
+</div>
diff --git a/posts/29.html b/posts/29.html
new file mode 100644 (file)
index 0000000..72d505b
--- /dev/null
@@ -0,0 +1,10 @@
+title: Charla "¿Qué es el software libre?" en la UJI
+date: 2004-10-13 09:15
+---
+<div>
+<p>El próximo lunes 18 de octubre a las 12:00 doy una charla sobre el software libre en el Salón de Actos Alfonso el Magnánimo, de la Factultad de Ciencias Jurídicas y Económicas de la <a href="http://www.uji.es/">Universitat Jaume I</a>. Podeis consultar el <a href="http://www.uji.es/infoinst/monuji/campus/plano2.pdf">plano de localización</a> en formato PDF.</p>
+
+<p>En la charla enfocaré de forma general qué es el software libre y cómo se puede ganar uno la vida con este modelo de desarrollo, pero sin perder nunca de vista la ética, que a fin de cuentas es la esencia del movimiento.</p>
+
+<p>Por supuesto estais invitados todos los que paseis por Castellón ese día y esteis interesados en el tema.</p>
+</div>
diff --git a/posts/3.html b/posts/3.html
new file mode 100644 (file)
index 0000000..1d1ba58
--- /dev/null
@@ -0,0 +1,28 @@
+title: Drivers libres vistos desde la empresa
+date: 2003-09-23 09:39
+---
+<div>
+<p>El otro día estaba hablando con un amigo que trabaja como administrador en una empresa del sector del mueble sobre los pros y los contras del software libre frente al software propietario. Una de las razones que argumentaba para decantarse por el software propietario era que cuando compras hardware muy nuevo o algo extraño no encuentras drivers libres.</p>
+
+<p>Este punto de vista me hizo darle un poco de vida a mis desgastadas neuronas y llegamos a unas conclusiones algo interesantes que paso a exponer a continuación.</p>
+
+<p>Normalmente hablo del software en general, sin concretar en productos ni marcas, pero esta vez haré una excepción y me referiré a Windows y Linux.</p>
+
+<p>Cuando compramos hardware de cualquier tipo, ya sea tarjeta gráfica, impresora, etc, nos dan un disco con los drivers. Los drivers son unos programas especiales que permiten la comunicación entre el dispositivo físico y el sistema operativo y sin ellos no podremos hacer practicamente nada con nuestra nueva adquisición. Es práctica habitual llenar el disco con drivers para todas las versiones de Windows (W98, WNT, W2000, WMe, WXP) pero nunca encontramos drivers para Linux, como mucho en Internet.</p>
+
+<p>Normalmente nos conformamos con esta situación, pero este es un error en el que no debe caer un usuario de software libre. Hemos comprado un hardware determinado y debemos exigir un driver para nuestro sistema operativo. Estamos en nuestro derecho.</p>
+
+<p>Es algo así como los impresos de la administración. Yo soy de Castellón (Comunidad Valenciana) por lo que los impresos son bilingües, castellano y valenciano. Se hace así porque los impuestos son pagados tanto por castellano-parlantes como por valenciano-parlantes y todos tienen derecho a leer los impresos en su lengua materna.</p>
+
+<p>Con los drivers tenemos el mismo caso. Estamos pagando por la compra de un hardware con su respectivo software, por lo que deberían entregarnos drivers de nuestro sistema operativo o descontarnos del precio el relativo a los drivers de Windows que no nos van a servir para nada. Desgraciadamente esto no es así. ¿Tenemos que aguantarnos con lo que hay? En realidad no, podemos hacer algo. Podemos pedir que se desarrollen drivers para Linux. Probablemente nos dirán que no, pero si todos los que compramos hardware pedimos nuestros drivers libres eso ya es una forma de presión.</p>
+
+<p>Pero cuando hablamos de las empresas ya es algo distinto. Supongamos que una empresa usa software libre en sus sistemas y que necesita un dispositivo específico del que solamente hay disponibles drivers de Windows. Es un caso algo inusual pero podría darse. La empresa puede pedir drivers para Linux al distribuidor de hardware y los conseguirá dependiendo de la fuerza y del peso de la empresa en cuestión. Supongamos que no los consigue.</p>
+
+<p>Tenemos dos opciones. Podemos desestimar el hardware y buscar una solución distinta o podemos desarrollar drivers libres que nos resuelvan el problema, mediante desarrollo propio o de una empresa externa. Sea como sea lo importante es que el producto final sea libre, ya que de esa forma podremos recuperar parte de la inversión realizada. ¿Cómo?</p>
+
+<p>Supongamos que llevamos a cabo el desarrollo y ya tenemos nuestros drivers para usar nuestro hardware. Pues bien, es hora de compartir nuestro software con el resto de la comunidad, si es que no lo habíamos hecho desde el principio. Unos cuantos enlaces, un pequeño especio web y unos cuantos anuncios en portales de software libre bastarán. Por supuesto no tardaremos en aparecer en alguna revista relacionada con el tema. ¿Qué obtenemos con esto? Pues publicidad, y además gratuita. Nuestra empresa pasa a ser conocida, se dedique a lo que se dedique, y eso es tan valioso como el coste de desarrollar los drivers.</p>
+
+<p>Estamos en una de esas situaciones extrañas que se da en ocasiones en el mundo del software libre y en la que todo el mundo gana. Gana la comunidad, ya que dispone de un driver libre nuevo y ahora tiene acceso a un nuevo dispositivo. Gana nuestra empresa, ya que tiene sus drivers y además es muy posible que haya gente que se ponga a trabajar para mantenerlos y mejorarlos de forma altruista, sin contar con que hemos recuperado parte de la inversión gracias a la publicidad lograda. Y en el caso de que el desarrollo se haya realizado por una empresa externa, esa empresa tambien gana por el trabajo realizado.</p>
+
+<p>Hay gente que piensa que la falta de drivers de hardware nuevo es una debilidad de Linux y del software libre en general. Yo creo que se equivocan y que es un punto más en el que el software libre demuestra que es un sistema de desarrollo superior, incluso en circunstancias adversas.</p>
+</div>
diff --git a/posts/30.html b/posts/30.html
new file mode 100644 (file)
index 0000000..b1402f3
--- /dev/null
@@ -0,0 +1,6 @@
+title: Charla "¿Qué es el software libre?" en la UJI (Cambio de lugar)
+date: 2004-10-15 08:25
+---
+<div>
+<p>Finalmente la charla tendrá lugar en el aula B2003 de la Facultad de Ciencias Jurídicas y Económicas, el mismo día y a la misma hora.</p>
+</div>
diff --git a/posts/31.html b/posts/31.html
new file mode 100644 (file)
index 0000000..8ca7165
--- /dev/null
@@ -0,0 +1,16 @@
+title: Ha nacido Sombra
+date: 2004-12-31 15:34
+---
+<div>
+<p>Los últimos problemas de seguridad en el servidor de <a href="http://www.aditel.org/">Aditel</a> y algunas polémicas surgidas en torno al uso que los socios hacen de los recursos de la asociación me han movido a buscar hospedaje para mi bitácora personal. Una oferta muy interesante era la de <a href="http://www.aruba.it/">Aruba</a>, pero finalmente he decidido montar un servidor casero de bajo presupuesto.</p>
+
+<p><b>¡Ha nacido Sombra!</b></p>
+
+<p>Lo primero que necesitaba para el servidor era una conexión a Internet y de momento me basta con mi ADSL 512/128 normalita. Tengo IP fija y los dominios que uso los adquiero por medio de <a href="http://www.dyndns.org/">DynDNS</a>, que ofrece subdominios gratuitos, aunque tampoco resulta un gran derroche adquirir un dominio propio.</p>
+
+<p>El equipo adquirido para las funciones de servidor es un Pentium II a 350, con 64 MB de RAM y 4 GB de disco duro. Lo conseguí en <a href="http://www.borax.es/">Borax Distribución</a> por el módico precio de 30€ más 20€ por gastos de envío. Al abrirlo descubro que el disco es SCSI, una sorpresa agradable. Lleva funcionando ininterrumpidamente desde el 20 de diciembre. A ver hasta cuando aguanta ;-)</p>
+
+<p>El reactor principal es una Debian Sid instalada a través de la red. De momento solamente trabaja como servidor web con Apache, aunque la intención es que tambien sea el servidor de correo, un servidor FTP para poner algunas cosillas y cvs o subversion para proyectos futuros. Ya se verá.</p>
+
+<p>Lo más dificil fue ponerle el nombre, que para estas cosas tengo poca imaginación. Al final le he puesto Sombra (vaya derroche). Y la nueva dirección de mi bitácora, como ya habreis comprobado, es <a href="http://jsancho.homelinux.org/">jsancho.homelinux.org</a>.</p>
+</div>
diff --git a/posts/32.html b/posts/32.html
new file mode 100644 (file)
index 0000000..ffaa65d
--- /dev/null
@@ -0,0 +1,21 @@
+title: Proyectos para el 2005
+date: 2004-12-31 15:55
+---
+<div>
+<p>Todos le pedimos algo al nuevo año y nos proponemos proyectos y objetivos. Ahí van los míos.</p>
+
+<p>Lista de cosas que me gustaría llevar a cabo a lo largo del año:</p>
+
+<ul>
+<li>Liberar la primera versión de Bitácora (antes kkblog).</li>
+<li>Seguir hablando sobre software libre en todos sitios (tengo dos temas favoritos):
+<ul>
+<li>¿Qué es el software libre?</li>
+<li>GPL, el mejor amigo del programador.</li>
+</ul></li>
+<li>Realizar jornadas en los institutos de Castellón (proyecto de Aditel).</li>
+<li>Desarrollar una nueva idea: Valcas (sistema de traducción automática libre, de momento castellano y valenciano).</li>
+</ul>
+
+<p>Buf, buf, y creo que para un año ya hay más que de sobra.</p>
+</div>
diff --git a/posts/33.html b/posts/33.html
new file mode 100644 (file)
index 0000000..bdfa4f1
--- /dev/null
@@ -0,0 +1,14 @@
+title: Razones por las que sigo trabajando con Bitácora (antes kkblog)
+date: 2005-01-04 16:42
+---
+<div>
+<p>En muchas ocasiones me asaltan las dudas sobre si resulta útil para alguien que siga desarrollando mi propio software de bitácora y no es la primera vez que pruebo otras alternativas libres, pero al final siempre acabo reforzado en mis determinaciones de seguir adelante y todo por una sola frase, <i>MySQL required</i>.</p>
+
+<p>Cuando empecé a escribir kkblog lo hice por dos razones, por practicar con PHP y porque todos los programas que existen por Internet medianamente decentes necesitan MySQL para trabajar. No es que le tuviera manía a MySQL, pero mi proveedor me ofrecía un PHP capado y, eso sí, mucho espacio en disco. Si quería base de datos tenía que pagar y en mis tiempos estudiantiles el dinero no me sobraba.</p>
+
+<p>Así nació kkblog, un programa que no dejaba realizar búsquedas, ni insertar comentarios, ni tener estadísticas específicas, etc, etc, al contrario de como hacen otros productos, pero que me permitía escribir mi diario y mostrarlo al mundo sin esforzarme demasiado y con muy pocos requisitos.</p>
+
+<p>Aunque despues ya tuve a mi alcance la posibilidad de usar base de datos, incluso en el momento en que empecé a usar la primera versión de kkblog, me gustaba utilizar mi propia creación y así llegamos casi hasta el momento actual, en el que decidí buscar algo nuevo y más profesional por decirlo de alguna manera, descubriendo con algo de sorpresa que parece ser que tengo una de las pocas bitácoras del mundo que no tira de una base de datos.</p>
+
+<p>Y así el proyecto de estar por casa kkblog se ha convertido en Bitácora, que aspira a ser una plataforma de diarios de bitácora sencilla y con los mínimos requerimientos (un servidor web y PHP). Veremos en qué acaba la cosa.</p>
+</div>
diff --git a/posts/34.html b/posts/34.html
new file mode 100644 (file)
index 0000000..dbdf029
--- /dev/null
@@ -0,0 +1,10 @@
+title: Persiguiendo una Abadía del Crimen libre
+date: 2005-01-10 20:14
+---
+<div>
+<p>La semana pasada llegué por casualidad a una web en la que se encontraba disponible una versión mejorada del juego La Abadía del Crimen. Me entraron ganas de rememorar viejos tiempos pero, aunque seguro que el juego funciona perfectamente con wine, llevo ya mucho tiempo intentando usar software libre para todo y en ningún sitio se indicaba la licencia del programa.</p>
+
+<p>Haré un inciso para decir que mucha gente cree erróneamente que si usas una distribución de GNU/Linux no usas software privativo. Sin embargo hay que estar alerta, ya que mucho software privativo funciona en sistemas libres (programas, drivers, plugins, etc).</p>
+
+<p>Siguiendo, me he puesto en contacto con el desarrollador de esta nueva versión mejorada, que me ha comentado que los derechos del programa pertenecen al desarrollador original, José Antonio Morales, al que voy a intentar localizar y convencer para que libere la Abadía. Espero dar más noticias en los próximos días.</p>
+</div>
diff --git a/posts/35.html b/posts/35.html
new file mode 100644 (file)
index 0000000..16db43e
--- /dev/null
@@ -0,0 +1,8 @@
+title: Las Patentes de nuevo en el Orden del Dia de Pesca
+date: 2005-01-24 07:32
+---
+<div>
+<p>La Directiva de Patentes de Programación ha sido, o será, añadida al orden del dia de la Reunión de Agricultura y Pesca del 24 de Enero como un A-item, un punto que será aprobado sin votación.</p>
+
+<p>Más información en <a href="http://kwiki.ffii.org/Fish0501Es">KWIKI: Cooperative Web Editing System at FFII</a>.</p>
+</div>
diff --git a/posts/36.html b/posts/36.html
new file mode 100644 (file)
index 0000000..0b3aef4
--- /dev/null
@@ -0,0 +1,14 @@
+title: Persiguiendo una Abadía del Crimen libre (II)
+date: 2005-01-23 09:30
+---
+<div>
+<p>Como ya dije en <a href="http://www.jsancho.org/wordpress/2005/01/10/persiguiendo-una-abadia-del-crimen-libre/">Persiguiendo una Abadía del Crimen libre</a> he dedicado esta semana a buscar al creador de la versión en PC de este juego, buceando entre montones de documentos sobre la época dorada de los videojuegos españoles.</p>
+
+<p>Así fue como me enteré de que el autor original de la Abadía del Crimen había sido Paco Menéndez y que se había suicidado a finales del siglo pasado, noticia que ya me había adelantado Glo y que me lleno de pesar. Leí sobre su vida y sobre la historia de Opera Soft, empresa en la que contribuyó notablemente y en la que se realizó y distribuyó la versión para PC. Sin embargo, seguía sin encontrar pistas sobre el paradero de J.A. Morales, por lo que empecé a rastrear al resto de miembros de Opera.</p>
+
+<p>Investigando sobre uno de ellos, Gonzo Suárez, descubrí que había trabajado activamente en Pyro Studios diseñando y dirigiendo todos los títulos de la serie Commandos y que en la actualidad presidía Arvirago, una nueva empresa de producción de videojuegos. Gracias a Gonzo pude obtener por fin la dirección de correo de J.A.</p>
+
+<p>José A. no tiene ningún problema en que la abadía sea liberada bajo GPL, aunque aún lo tenía que comentar con el resto de socios de Opera. Si lo consigo y consigo que Antonio Giner haga lo propio con su remake del juego la comunidad usuaria de software libre podrá disfrutar de una Abadía del Crimen GPL.</p>
+
+<p>¿Y despues? Crear versión del juego para GNU/Linux, nuevos efectos de sonido, de luz, quizás nuevos retos y acertijos... buf, hay mucho trabajo.</p>
+</div>
diff --git a/posts/37.html b/posts/37.html
new file mode 100644 (file)
index 0000000..4914f46
--- /dev/null
@@ -0,0 +1,10 @@
+title: Lo que no dicen por la tele
+date: 2005-01-31 08:54
+---
+<div>
+<p>Resulta increíble que en la publicidad para el referendum de la Constitución Europea salgan unos cuantos famosillos leyendo algunos de los artículos más bonitos y que no se diga absolutamente nada de cómo la gente de a pie puede obtener una copia para poder juzgarla convenientemente.</p>
+
+<p>Pues para el que se preocupe por estas temas y quiera votar con sentido se puede acceder a una versión en PDF en <a href="http://www.constitucioneuropea.es/">http://www.constitucioneuropea.es/</a>, y si quereis un ejemplar completo se puede solicitar llamando al teléfono gratuito <b>900 222 009</b>, mediante un correo electrónico a <a href="mailto:constitucioneuropea@mpr.es">constitucioneuropea@mpr.es</a> o enviando una carta al <b>apartado de correos 288 de Alcobendas (Madrid)</b>.</p>
+
+<p>Hay que indicar el nombre y apellidos del destinatario, dirección postal completa y la lengua en la que se quiere recibir el ejemplar o ejemplares.</p>
+</div>
diff --git a/posts/38.html b/posts/38.html
new file mode 100644 (file)
index 0000000..71a8a1f
--- /dev/null
@@ -0,0 +1,8 @@
+title: Excelente artículo sobre las patentes de software en Libertonia
+date: 2005-02-05 12:41
+---
+<div>
+<p>Hoy he podido leer en <a href="http://libertonia.escomposlinux.org/">Libertonia</a> un excelente artículo titulado <a href="http://libertonia.escomposlinux.org/story/2005/2/3/193716/1117">Por qué no a las patentes de software</a>, que explica de forma detallada pero sin resultar aburrido las razones por las que las patentes de software son perjudiciales para las empresas de software y para la sociedad entera en general.</p>
+
+<p>Lectura recomendada.</p>
+</div>
diff --git a/posts/39.html b/posts/39.html
new file mode 100644 (file)
index 0000000..b2180ed
--- /dev/null
@@ -0,0 +1,8 @@
+title: Carta de agradecimiento al Senado
+date: 2005-02-18 10:37
+---
+<div>
+<p>El dia 8 de febrero el Senado aprobó por unanimidad una iniciativa contra las patentes de software. Más detalles en <a href="http://barrapunto.com//article.pl?sid=05/02/08/1717239">"El Senado español vota contra las patentes de software"</a>.</p>
+
+<p>Yo ya he firmado la <a href="http://graciassenado.hispalinux.es/">Carta de agradecimiento al Senado</a>. ¿A qué esperas tú?</p>
+</div>
diff --git a/posts/4.html b/posts/4.html
new file mode 100644 (file)
index 0000000..c901324
--- /dev/null
@@ -0,0 +1,19 @@
+title: Policía Nacional y Guardia Civil: dos sistemas, una sola fuente
+date: 2003-09-30 08:33
+---
+<div>
+<p>Leo en Terra que Carmen Chacón, portavoz del PSOE, ha propuesto en nombre de su partido la fusión de la Policía Nacional y de la Guardia Civil en un solo cuerpo policial. Esta apuesta viene motivada por la reciente polémica suscitada por los crímenes de Coín y Mijas y la desorganización patente en la colaboración y coordinación de estos dos cuerpos policiales y de seguridad.</p>
+
+<p>Aunque la solución propuesta por el PSOE pueda parecer lo más lógico y razonable no me deja de preocupar el hecho de que un partido en teoría liberal y renovador apueste por algo que sería un "monopolio" al fin y al cabo. ¿Cuál sería el siguiente paso? ¿Integrar también a las policías autonómicas?</p>
+
+<p>Tampoco conozco el tema a fondo, despues de todo me dedico a la informática y al software y no tengo conocimientos suficientes para profundizar en el tema, pero puedo afirmar sin dudarlo que no me sentiría seguro con una sola fuerza policial controlandolo todo. Quizás sea algo paranoico, pero argumentos parecidos ya han sido dichos en un ámbito que conozco mucho mejor y el resultado no fue todo lo bueno que se esperaba.</p>
+
+<p>En un mundo ideal la homogeneidad es la solución a todos los problemas, es la medicina mágica que cura todas las enfermedades. Pero nuestro mundo no es precisamente un mundo ideal, realmente dista bastante de serlo, y las soluciones homogéneas acarrean aún más problemas a largo plazo.</p>
+
+<p>En nuestro caso creo que sería un error crear una única fuerza policial, y crear un órgano superior de mando que gobierne sobre los dos cuerpos sería una tarea harto difídil, dadas las grandes diferencias de estructura y de organización de cada uno de ellos. Sin embargo es necesario que ambos se entiendan, por el bien de todos, y eso sólo se puede conseguir mediante la liberalización de la información.</p>
+
+<p>En el mundo del software libre es el pan nuestro de cada día, pero realmente es una forma de trabajo, de organización y de desarrollo que se puede aplicar en cualquier lugar y tarea. Si miles y miles de programadores son capaces de organizarse a lo largo del mundo y crear el mayor output de software que jamás se haya conocido realmente debe de ser algo digno de ser estudiado y considerado.</p>
+
+<p>La clave, como decía antes, esta en el hecho de que la información no es un bien exclusivo que se debe guardar a todas las miradas, sino que debe ser compartida por todos. De acuerdo que en el caso de la policía hay información que no debe estar al acceso de cualquiera, pero sí es cierto que debería de existir una única base o fuente de datos e información a la que pudieran acceder cada uno de los cuerpos policiales del Estado.</p>
+
+</div>
diff --git a/posts/40.html b/posts/40.html
new file mode 100644 (file)
index 0000000..ead28e2
--- /dev/null
@@ -0,0 +1,10 @@
+title: Juan Pablo II te quiere todo el mundo
+date: 2005-04-03 08:17
+---
+<div>
+<p>Ayer por la noche murió el Santo Padre de la Iglesia Católica, un ejemplo de constancia y fe para toda la humanidad. Un corazón joven en un cuerpo de 84 años. Si todos lucharamos por los derechos y la dignidad del hombre una décima parte de lo que él y otros como él lo hacen y lo han hecho, el mundo sería un lugar mucho mejor.</p>
+
+<p>Defensor de la paz y de la libertad. Nunca te olvidaremos.</p>
+
+<p>¡¡Juan Pablo II te quiere todo el mundo!!</p>
+</div>
diff --git a/posts/41.html b/posts/41.html
new file mode 100644 (file)
index 0000000..752db57
--- /dev/null
@@ -0,0 +1,20 @@
+title: Profesionales sí, pero con ética
+date: 2005-03-16 18:31
+---
+<div>
+<p>¿En qué mundo vivimos que en la mayoría de los casos nos vemos obligados a elegir entre nuestra profesionalidad y nuestro sentido de la ética?</p>
+
+<p>Actualmente para ser un buen profesional, ya sea en el sector del software, de la informática en general o en cualquier otro sector, es necesario estar al dia en cuanto a herramientas informáticas se refiere para poder usar aquellas que nos permitan realizar nuestro trabajo de la forma más eficiente posible. Pero tambien es igual de importante o incluso más saber si el usar determinada herramienta es o no es ético.</p>
+
+<p>Por poner un ejemplo, para una planta química será más barato eliminar los residuos abocándolos al rio que transportándolos a las zonas preparadas para tal. Pero la primera forma implica causar graves daños para el medio ambiente, además de malos olores, etc. No sería ético.</p>
+
+<p>De la misma forma existen profesionales que no consideran su libertad como algo que se deba defender. O no son conscientes, muchos de ellos, o son conscientes pero aún así anteponen los resultados por encima de todo, los peores. Y no está en juego solamente su libertad sino que con su comportamiento provocan un gran daño a la sociedad. Sin embargo ésta misma sociedad es la que premia el éxito sin valorar de qué forma se ha alcanzado.</p>
+
+<p>En cambio muchos otros que se esfuerzan por trabajar de forma que no quede comprometida su libertad, aunque les cueste un poco más, son tratados de extremistas con una vista muy irreal de cómo es el mundo y son poco menos que marginados por sus intentos de hacer las cosas bien.</p>
+
+<p>Supongo que habreis notado que hablo de software libre y de software privativo.</p>
+
+<p>Hay gente que no usa determinados plugins para su explorador, que no tiene drivers para las dispositivos más recientes, que no tiene instalados esos juegos tan molones que nos sacan a menudo por la tele, etc, etc, en un esfuerzo por usar exclusivamente programas libres (hay que decir que gracias a la ayuda de miles de hackers ese esfuerzo es cada vez menor). ¿Vale la pensa ese sacrificio a cambio de preservar los valores éticos?</p>
+
+<p>En una palabra: <b>SI</b>.</p>
+</div>
diff --git a/posts/42.html b/posts/42.html
new file mode 100644 (file)
index 0000000..eceaf5d
--- /dev/null
@@ -0,0 +1,18 @@
+title: Persiguiendo una Abadía del Crimen libre (y III)
+date: 2005-04-04 11:14
+---
+<div>
+<p>Os presento la última parte del culebrón que empezó con <a href="http://www.jsancho.org/wordpress/2005/01/10/persiguiendo-una-abadia-del-crimen-libre/">Persiguiendo una Abadía del Crimen libre</a> y que continuó con <a href="http://www.jsancho.org/wordpress/2005/01/23/persiguiendo-una-abadia-del-crimen-libre-ii/">Persiguiendo una Abadía del Crimen libre (II)</a>. El final no es el que todos hubieramos querido.</p>
+
+<p>En realidad no puedo contar gran cosa. Como explicaba la última vez había contactado con J.A. Morales y estaba a la espera de conocer la opinión del resto de socios de Opera. Y esas son las últimas noticias que he tenido de ellos. He enviado varios correos requiriendo una contestación, ya fuera positiva o negativa, pero no he recibido ninguna respuesta.</p>
+
+<p>Conclusiones finales:</p>
+
+<p>El señor José Antonio Morales desconoce completamente o ignora deliberadamente las normas de conducta, de cortesía y de etiqueta al no responder a ninguno de los correos que le he enviado. De todos es sabido que se considera totalmente descortés no contestar a una persona que intenta contactar de forma correcta, sin faltar nunca al respeto ni violar las mencionadas normas de etiqueta.</p>
+
+<p>Por el silencio de este señor y de los socios de Opera Soft y mientras no se me indique lo contrario por su parte, interpreto que se prefiere que el juego conocido como <b>La abadía del Crimen</b> se pierda en el limbo de los programas antiguos antes que permitir un más que posible relanzamiento a manos de unas personas que anteponen el bien común de la sociedad al bien personal.</p>
+
+<p>Hacía ya tiempo que no asistía a un homenaje tan sentido al Perro del Hortelano.</p>
+
+<p>Y colorín colorado, este cuento se ha acabado (por mucho que nos pese).</p>
+</div>
diff --git a/posts/43.html b/posts/43.html
new file mode 100644 (file)
index 0000000..ad8e511
--- /dev/null
@@ -0,0 +1,6 @@
+title: Atentos al 27-A
+date: 2005-04-05 07:10
+---
+<div>
+Algo importante ocurrirá el 27 de abril (27-A). Más detalles la semana que viene ;-)
+</div>
diff --git a/posts/44.html b/posts/44.html
new file mode 100644 (file)
index 0000000..9b45ad1
--- /dev/null
@@ -0,0 +1,18 @@
+title: Software libre y software privativo
+date: 2005-04-11 06:35
+---
+<div>
+<p>Reflexiones sobre la coexistencia del software libre y el software privativo en respuesta al artículo <a href="http://libertonia.escomposlinux.org/story/2005/4/8/155033/9698">El Software Libre ahora</a> publicado en Libertonia.</p>
+
+<p>Paso a expresar mi postura inflexible e/o irreflexiva sobre la poca importancia del software privativo en el futuro del software libre.</p>
+
+<p>Para empezar no veo malo que existan versiones de programas privativos para Linux como es el caso de Nero o de Acrobat. Sin duda es una buena noticia para los usuarios de sistemas privativos que no se atreven a dar el salto a sistemas libres por falta de aplicaciones conocidas, que no por falta de aplicaciones que realicen las tareas que ellos necesitan realizar.</p>
+
+<p>Pero no hay que olvidar que el uso de esas herramientas privativas debería ser solamente temporal. Si no lo hacemos así, para qué hemos cambiado nuestro sistema operativo privativo por uno libre. Lo único que haces es cambiar un sistema mixto (Windows, OpenOffice, Firefox, etc) por otro mixto tambien (GNU/Linux, Nero, Acrobat, etc).</p>
+
+<p>Sin embargo, a los usuarios de software libre no nos afectan en absoluto este tipo de noticias. ¿Qué nos importa que aparezcan herramientas privativas que realizan tareas que ya podemos realizar con nuestras herramientas libres? O incluso aunque sean herramientas que no tengan equivalente en los programas libres. Hay que tener en cuenta que los que usamos exclusivamente software libre lo hacemos justamente por nuestra libertad, aunque para ello sacrifiquemos parte de nuestra comodidad. Por ejemplo, existen muchos más juegos privativos que libres y algunos son realmente adictivos. ¿Quiere eso decir que debemos sacrificar nuestra libertad por unas cuantas horas de ocio a la semana? Yo al menos puedo decir que no instalaría ningún juego privativo aunque no existiera ni un solo juego libre. Es algo sin lo que puedo sobrevivir. Y así todo lo demás.</p>
+
+<p>Cuando RMS comenzó a desarrollar el sistema GNU usó para ello plataformas UNIX, pero se hizo porque no existía nada libre con que hacerlo. Fue inevitable. Si queriamos un sistema libre era necesario usar software privativo para desarrollarlo. Por eso los primeros programas libres fueron gcc (el compilador de C) y emacs (el editor), que sirvieron para desarrollar programas libres usando ya otros programas libres. El conjunto de programas libres fue creciendo hasta formar una plataforma libre y hoy en día podemos trabajar con nuestros equipos usando exclusivamente programas libres, disfrutando de la tecnología sin sacrificar nuestra libertad.</p>
+
+<p>Resumiendo, los programas privativos, como su nombre indica, privan a los usuarios de sus libertades básicas por lo que los defensores del software libre nunca podremos aceptar la existencia de programas privativos. Sería como luchar contra la esclavitud pero permitir que en algunos casos se siguieran usando esclavos. Iría totalmente en contra de nuestros principios.</p>
+</div>
diff --git a/posts/45.html b/posts/45.html
new file mode 100644 (file)
index 0000000..66859ab
--- /dev/null
@@ -0,0 +1,22 @@
+title: Movilización contra las patentes de software en Europa el 27-A
+date: 2005-04-12 09:55
+---
+<div>
+<p>El día 27 de abril de 2005, entre las 12:00 y las 12:30 aproximadamente, se llevará a cabo una manifestación en contra de las patentes de software en la Unión Europea, en la que están convocados todos los centros universitarios de España, tanto su personal docente y no docente como los estudiantes. <a href="http://proinnova.org/">Proinnova</a> y <a href="http://www.ffii.org/">FFII</a> organizan a nivel estatal y varios grupos locales, como <a href="http://www.aditel.org/">Aditel</a> y <a href="http://www.solido.uji.es/">SoLiDo</a>, lo hacen en cada uno de sus centros respectivos.</p>
+
+<p>Toda la información al respecto la puedes encontrar en <a href="http://lucha.proinnova.org/">http://lucha.proinnova.org/</a>.</p>
+
+<p>¿Qué puedes hacer para ayudar?</p>
+
+<p>Puedes:</p>
+
+<ul>
+<li>Acudir a los organizadores de tu universidad para coordinarte con ellos. Puedes ver la lista de colaboradores en la <a href="http://wiki.ffii.org/lucha">web de coordinación</a>.</li>
+<li>Si no hay colaboradores en tu universidad, tú podrías ser el organizador local. Contacta con <a href="mailto:abarrio(arroba)ffii.org">Alberto Barrionuevo</a>.</li>
+<li>Contárselo a tus amigos, profesores o compañeros para que esten al tanto.</li>
+<li>Poner el <a href="http://lucha.proinnova.org/imagenes/banner_movilizacion.gif">banner de la movilización </a>en tu página web, con un enlace a <a href="http://lucha.proinnova.org/">http://lucha.proinnova.org/</a>.</li>
+<li>Acudir a la manifestación el 27-A y mostrar tu postura respecto a las patentes de software.</li>
+</ul>
+
+<p>Nos estamos jugando mucho. Ayúdanos... ayúdate... ¡¡Únete!!</p>
+</div>
diff --git a/posts/46.html b/posts/46.html
new file mode 100644 (file)
index 0000000..e1f74e7
--- /dev/null
@@ -0,0 +1,10 @@
+title: Qué son las patentes de software
+date: 2005-04-26 06:53
+---
+<div>
+<p><b>Esta animación muestra qué son en realidad las patentes de software y qué suponen para la innovación.</b></p>
+
+<p>Realizado por la FFII, y ahora traducido al español, este vídeo muestra de una forma directa y concisa lo que suponen las patentes para todos.</p>
+
+<p><a href="http://www.jsancho.org/download/patentes.mov">Descargar el vídeo</a>.</p>
+</div>
diff --git a/posts/47.html b/posts/47.html
new file mode 100644 (file)
index 0000000..ae0cd08
--- /dev/null
@@ -0,0 +1,46 @@
+title: El gran engaño de la propuesta de Directiva sobre patentabilidad (por si aún hay dudas)
+date: 2005-04-29 11:37
+---
+<div>
+<p>Por lo que he podido leer en la bitácora del abogado Pedro J. Canut, concretamente en <a href="http://www.blogespierre.com/2005/04/15/quien-dijo-que-ponia-que-donde">Quién dijo que ponía qué dónde?</a> y en <a href="http://www.blogespierre.com/2005/04/18/predicar-en-desierto-sermon-perdido">predicar en desierto, sermón perdido</a>, todavía hay personas que no comprenden de qué forma la propuesta de directiva del Consejo Europeo sobre patentabilidad permitirá la patentabilidad indiscriminada de programas de ordenador.</p>
+
+<p>Voy a intentar despejar todas las posibles dudas de los que creen que el Consejo de la Unión Europea solamente intenta proteger la industria del software de los grandes lobbies de EEUU y Japón.</p>
+
+<p>En primer lugar vamos a leer la <a href="http://www.jsancho.org/download/A.Pol.pos.com.Consejo.pdf">Propuesta de Directiva del Parlamento Europeo y del Consejo sobre la patentabilidad de las invenciones implementadas en ordenador</a>, si es que todavía hay alguien que no la ha leido. Hay mucha paja pero lo que realmente nos interesa se encuentra en las últimas cinco páginas.</p>
+
+<p>Nos podemos fijar concretamente en los artículos 2, 4 y 4 bis, que cito a continuación.</p>
+
+<p><b>Artículo 2 - Definiciones</b></p>
+
+<p>A efectos de la presente Directiva se aplicarán las siguientes definiciones:</p>
+
+<ol type="a">
+<li>se entenderá por "invenciones implementadas en ordenador" toda invención para cuya ejecución se requiera la utilización de un ordenador, una red informática u otro aparato programable, al tener la invención una o más características que se realicen total o parcialmente mediante un programa o programas de ordenador;</li>
+<li>se entenderá por "contribucióon técnica" una contribución al estado de la técnica en un nuevo campo de la tecnología que no sea evidente para un experto en la materia. La contribución técnica deberá evaluarse considerando la diferencia entre el estado de la técnica y el ámbito de la reivindicación de la patente considerada en su conjunto, que debe incluir características técnicas con independencia de que éstas estén acompañadas de características no técnicas.</li>
+</ol>
+
+<p><b>Artículo 4 - Condiciones de patentabilidad</b></p>
+
+<p>Para ser patentable, una invención implementada en ordenador deberá ser susceptible de aplicación industrial, nueva y suponer una actividad inventiva. Para entrañar una actividad inventiva, la invención implementada en ordenador deberá aportar una contribución técnica.</p>
+
+<p><b>Artículo 4 bis - Exclusiones de patentabilidad</b></p>
+
+<ol>
+<li>(nuevo) Un programa de ordenador como tal no podrá constituir una invención patentable.</li>
+<li>No se considerará que una invención implementada en ordenador aporta una contribución técnica meramente porque implique el uso de un ordenador, red u otro aparato programable. En consecuencia, no serán patentables las invenciones que utilizan programas informáticos expresados en código fuente, en código objeto o en cualquier otra forma que aplican métodos comerciales, matemáticos o de otro tipo y no producen efectos técnicos, aparte de la normal interacción física entre un programa y el ordenador, red o aparato programable de otro tipo en que se ejecute.</li>
+</ol>
+
+<hr />
+
+<p>En primer lugar en 4bis.1 se nos dice que los programas de ordenador no se podrán patentar. Pero claro, según 2.a una invención implementada en ordenador puede tener características que se realicen totalmente por un programa por lo que un programa puede ser considerado como una invención implementada en ordenador sensible de ser patentada. Para ello es condición suficiente y necesaria el que la invención produzca efectos técnicos.</p>
+
+<p>Y aquí es donde reside la trampa, el engaño. ¿Qué se considera como efecto técnico o contribución técnica? En 2.b no nos acaba de quedar claro, pero de 4bis.2 podemos deducir que es todo aquello que el programa realice y que no sea la normal interacción física.</p>
+
+<p>La normal interacción física, es decir, los procedimientos mínimos para que el programa funcione (lecturas de memoria, etc). Todo lo demás se considera efecto técnico y el programa/invención, por lo tanto, digno de ser patentado.</p>
+
+<p>Compresores, reproductores de música, vídeo, agendas, etc, etc, realizan un tratamiento de datos y unos procesos que están, evidentemente, fuera de lo que se considera como normal interacción física entre un programa y el ordenador y pueden ser patentados por ello.</p>
+
+<p>Que nadie se deje engañar, por favor. Cuando esta gente habla de invenciones implementadas en ordenador hablan básicamente de programas y hablar de programas patentados o lo que es lo mismo, de ideas patentadas, es algo <b>aberrante</b>.</p>
+
+<p><b>Patentes de software NO.</b></p>
+</div>
diff --git a/posts/48.html b/posts/48.html
new file mode 100644 (file)
index 0000000..5c4fc26
--- /dev/null
@@ -0,0 +1,219 @@
+title: ¿Qué es el software libre?
+date: 2005-05-16 16:35
+---
+<div>
+<p>Recopilación de ideas comentadas por Richard Stallman, Jesús Barahona, Ricardo Galli y tantos otros defensores de la libertad para intentar dar una idea clara sobre qué es el software libre.</p>
+
+<p>En este documento hablaré de informática, programación, educación, empleo, negocios, etc, pero todo gira en torno a dos ideas fundamentales en el movimiento del software libre, la ética y la libertad.</p>
+
+<h2>¿Qué es el software libre?</h2>
+
+<p>Podemos decir que un programa es libre cuando respeta los derechos de los usuarios de ese programa. Evidentemente es una deficinición demasiado abstracta y que puede llevar a malentendidos, por lo que concretando más diremos que un programa es libre si cumple cuatro libertades básicas:</p>
+
+<ul>
+      <li><b>Libertad 0:</b> libertad de usar el programa sin ningún tipo de limitación, ni espacial ni temporal. Puedes usarlo donde quieras, como quieras y cuando quieras.</li>
+      <li><b>Libertad 1:</b> libertad para ayudarte a ti mismo, es decir, libertad para estudiar el programa y modificarlo en función de tus necesidades. Para ello es requisito indispensable tener acceso al código fuente del programa.</li>
+      <li><b>Libertad 2:</b> libertad para ayudar a tu amigo, a tu vecino, a tu compañero de trabajo, a tu prójimo, es decir, libertad de copiar y de distribuir copias del programa a cualquier persona.</li>
+      <li><b>Libertad 3:</b> libertad para ayudar a la sociedad entera, es decir, libertad para distribuir los cambios y mejoras que hayas hecho del programa para que todo el mundo pueda beneficiarse.</li>
+</ul>
+
+<p>Si un programa no cumple estas libertades decimos que es un programa propietario o privativo, término que pienso que es más correcto. Decimos que es privativo porque el programa priva a los usuarios de sus derechos y libertades.</p>
+
+<h2>Libertad 0: Usar</h2>
+
+<p>El por qué de la libertad 0 es evidente. Si un pograma no puede usarse en cualquier tipo de circunstancia no técnica no estamos hablando de un programa libre. Si un programa solamente puede usarse durante 30 días no es libre. Si un programa no puede usarse en determinados países no es libre. Si tienes que pagar dinero en función del número de veces que usas un pograma, ese programa no es libre.</p>
+
+<p>Los programas libres pueden usarse sin ningún tipo de restricciones.</p>
+
+<h2>Libertad 1: Modificar</h2>
+
+<p>Los programas suelen contener errores y no funcionar como uno espera que lo hagan. Muchos programas contienen funcionalidades indeseadas, puertas traseras, procedimientos de registro de actividad, problemas para trabajar con determinados formatos de ficheros y errores varios. Y esto ocurre con cualquier tipo de programa, ya sea libre o privativo.</p>
+
+<p>Esta libertad permite que los programas sean estudiados y modificados para que se adapten a nuestras necesidades específicas. No necesariamente debemos ser nosotros los que lo hagamos, si no podemos o no queremos hacerlo podemos pagar para que otros lo hagan por nosotros, lo que se conoce como <b>servicios</b>.</p>
+
+<p>En los programas privativos no existe esta libertad. En el mundo del software privativo la empresa que desarrolla un programa es la empresa que vende ese programa y es la empresa que ofrece servicios sobre ese programa, formando lo que conocemos como monopolio. Y así el mercado se llena de monopolios, de forma que si tenemos un programa y queremos modificarlo debemos dirigirnos a la empresa que controla el monopolio en concreto, y si esa empresa no quiere o no puede ofrecer ese servicio no podremos modificar el programa nunca. Y si accede tendremos que someternos a sus condiciones, económicas o del tipo que sean, sin posibilidad de escuchar otras ofertas ya que estamos tratando con un monopolio.</p>
+
+<p>En el software libre existen lo que se conoce como monopolios de producto que tienen poco que ver con los monopolios de empresa típicos del software privativo. Esta situación permite que cualquier empresa o particular pueda ofrecer servicios, ya sea a él mismo o a terceros.</p>
+
+<p>Sin embargo, sólo con esta libertad no basta. Es necesaria la libertad 3.</p>
+
+<h2>Libertad 2: Copiar</h2>
+
+<p>Uno de los efectos nocivos del software privativo es la división de la sociedad en base a los programas que tienen. Son habituales los casos en los que un grupo de personas disponen de programas que no están al alcance del resto de personas por las razones que sean, consecuencia de la existencia de los monopolios una vez más.</p>
+
+<p>El movimiento del software libre se basa en la creencia de que todas las personas son iguales y que, por lo tanto, todos tienen derecho a disponer de los programas que les sean necesarios. Por esa razón se permite copiar y distribuir las copias de los programas, para que estén al alcance de todo el mundo. El que distribuye las copias puede hacerlo de forma altruista o cobrando por ello, eso ya es cosa suya, pero lo importante es que cualquiera puede convertirse en distribuidor de software libre.</p>
+
+<p>En estos tiempos que corren se ha intentado demonizar la copia, ya sea de software o de cultura y conocimiento en general, sin tener en cuenta que nuestra sociedad es copista por naturaleza. Desde que el ser humano nace se dedica a copiar todo lo que le rodea, copia la forma de andar y de actuar de sus padres, la forma de hablar y de pensar. Vamos al colegio y seguimos copiando toneladas de información, al igual que en los institutos y en las universidades. Sólo un muy pequeño porcentaje de la humanidad crea algo nuevo, y automáticamente eso que es nuevo es copiado por todos los demás haciendo que la sociedad crezca y avance.</p>
+
+<p>No creo que copiar sea malo, copiar también es contribuir.</p>
+
+<p>En el mundo del software privativo los que copian son conocidos como "piratas". En el software libre se les conoce como "distribuidores" y, sinceramente, prefiero que me llamen de la segunda forma.</p>
+
+<h2>Libertad 3: Distribuir modificaciones</h2>
+
+<p>Como comentaba anteriormente, la libertad 1 que nos permite modificar los programas sería insuficiente si no existiera la libertad de distribuirlas. Es algo mucho más importante de lo que pueda parecer ya que esta última libertad es la que cierra el círculo y la que permite que un programa libre sea un pograma <b>potencialmente</b> de gran calidad.</p>
+
+<p>Un ejemplo. Supongamos que realizo el típico programa "Hola mundo" para consola y lo cuelgo de la web como programa libre. El hecho de que el programa sea libre no implica que el programa deba de ser bueno. En realidad es un programa que no sirve para nada.</p>
+
+<p>Pero quizás alguien se interesa por el programa y decide modificarlo para que detecte si se ejecuta en consola, KDE o GNOME y en función de ello usar unas u otras librerías. Y otra persona le añade soporte para múltiples idiomas. Y otro lo sobreescribe por completo para transformarlo en una librería para el multi-idioma de su propio programa. Las posibilidades son infinitas.</p>
+
+<p>Lo que intento decir es que un programa libre puede no ser un gran programa en sus inicios pero su tendencia natural es mejorar a lo largo del tiempo, sobretodo cuando se trata de algo especialmente interesante, y esto ocurre porque es bueno para la sociedad. Un programa privativo también puede mejorar con el tiempo pero estas mejoras se basarán en estrategias comerciales que a veces pueden no estar de acuerdo con las necesidades de la sociedad.</p>
+
+<h2>Orígenes del software libre</h2>
+
+<p>Contrariamente a la creencia popular el software libre está ahí desde el principio. Antes que nada, existió el software libre, y posteriormente, se empezó a patentar y crear el software privativo.</p>
+
+<p>En los años 70, la era de los auténticos hackers, los programadores intercambiaban sus programas, publicaban sus investigaciones y mostraban abiertamente como habían implementado sus ideas y algoritmos. Por aquel entonces la informática aun no se había introducido en el ámbito empresarial, quedando prácticamente confinada a la investigación universitaria.</p>
+
+<p>En 1975 los Laboratorios Bell establecieron una licencia de pago a las universidades por el uso de su sistema Unix, siendo éste el origen del software privativo e impidiendo así su libre distribución. En 1984 miles de patentes regían un férreo sistema de control sobre los programas, la investigación era cerrada y nadie compartía los códigos pues las empresas lo evitaban con clausulas contractuales y demandas judiciales por incumplimiento de patentes. Ese año, R.M. Stallman creó la Free Software Foundation (FSF) cuyo objetivo era diseñar un sistema operativo completamente libre con sus correspondientes herramientas y aplicaciones también libres, de forma que una persona puediera usar un ordenador sin tener que someterse a las draconianas condiciones de uso de los programas privativos. A ese sistema se le llamó GNU (curioso acrónimo que significa GNU is Not Unix).</p>
+
+<p>Sin embargo es en 1991 cuando el software libre da un paso de gigantes. Un estudiante de la Universidad de Helsinki llamado Linus Torvalds creó Linux, un núcleo de sistema operativo que unido a todo el sistema GNU que ya se había creado formó el sistema GNU/Linux, un sistema completo y listo para funcionar, un sistema completamente libre.</p>
+
+<h2>Razones por las que usar programas libres</h2>
+
+<p>Hay muchas razones para preferir usar programas libres en lugar de programas privativos. Esas razones difieren en función del entorno de uso de los programas.</p>
+
+<h2>Uso doméstico</h2>
+
+<p>Si estamos hablando de un usuario doméstico la principal razón para usar programas libres sería la de evitar problemas morales.</p>
+
+<p>Supongamos que usamos programas privativos en nuestro ordenador y que un amigo nos pide una copia de un determinado programa. Si le damos una copia del programa estamos infringiendo la licencia del programa que nos impide distribuir copias del mismo, vamos en contra de los deseos del propietario de los derechos del programa y hacemos algo ilegal; no está bien. Pero si nos negamos a copiar el programa nos negamos a ayudar a nuestro amigo, y eso tampoco está bien.</p>
+
+<p>Para evitar esos problemas morales lo mejor es usar programas libres. Los autores de los programas libres dan su consentimiento a que se copien sus programas y además nos animan a que lo hagamos, ya que para ellos es una forma de distribuir su trabajo por todo el mundo. Por lo tanto al copiar un programa a un amigo estamos ayudando a nuestro amigo y al mismo tiempo estamos ayudando al autor del programa.</p>
+
+<p>Es una de esas situaciones que se dan habitualmente en el mundo del software libre en las que todo el mundo sale ganando. Iremos viendo más situaciones similares a lo largo del documento.</p>
+
+<p>El precio de los programas no es una razón de peso para usar programas libres en vez de privativos. Hay programas conocidos como <b>shareware</b> que se pueden usar gratuitamente durante un cierto tiempo. También hay otros conocidos como <b>freeware</b> que son gratuitos independientemente del tiempo que los uses. Pero ninguno de esos programas es libre, ya que normalmente no los puedes ni copiar ni modificar.</p>
+
+<h2>Uso en la enseñanza</h2>
+
+<p>Las razones por las que usar programas libres en la educación aún son más importantes e imperiosas que en el caso del uso doméstico, ya que los centros educativos y sus recursos deben centrarse en un único objetivo, educar.</p>
+
+<p>¿Qué aprenden los alumnos en las aulas informáticas que usan software privativo? Y desgraciadamente todavía es el caso más habitual en España.</p>
+
+<p>Aprenden a usar unas herramientas de unas pocas empresas, adquieren un conocimiento que en el futuro les encadenará a esos programas y a las decisiones que esas empresas tomen sobre los programas. No reciben formación, por ejemplo, para usar un procesador de textos general, una formación que podrían usar para aplicar en cualquier otra herramienta similar. Reciben formación específica del procesador de textos X, una formación que les imposibilita en muchas ocasiones cambiar de producto en el futuro.</p>
+
+<p>Aprenden que no pueden duplicar su entorno de aprendizaje en su ordenador doméstico a menos que realicen un importante desembolso económico o a menos que adquieran copias ilegales de los programas, que es la opción más usada. Aprenden que en muchas ocasiones lo mejor es saltarse la ley y las licencias de los programas, sin enseñarles que hay otras opciones.</p>
+
+<p>Además, los programas privativos ponen límite a lo que pueden aprender los alumnos de los programas. Sólo podremos ver y aprender lo que las empresas que tienen los derechos de esos programas quieren que veamos y aprendamos. Y si algún alumno se siente interesado por cómo funciona un programa tendrá que hacerlo de forma que vuelva a ir contra las leyes establecidas.</p>
+
+<p>¿Es realmente buena una enseñanza que permite que se pongan límites a lo que los alumnos pueden aprender y que les incita en cierta manera a ir contra la legalidad y contra la sociedad basada en esa legalidad?</p>
+
+<p>Peor aún, ¿es ético que la enseñanza pública dé ventajas competitivas a determinadas empresas del software proveyendoles de miles de nuevos usuarios y usando para ello el dinero público, el dinero de todos?</p>
+
+<p>Sinceramente, creo que es mejor dejar de lado el hecho de que un programa sea más económico, sea más popular o sea más conocido por el profesorado. Incluso hay que dejar de lado el hecho de que determinado programa sea el demandado por los alumnos. Los centros educativos tienen que usar los programas más adecuados para la enseñanza.</p>
+
+<p>Programas que no conviertan a los alumnos en futuros esclavos de grandes compañías. Respetemos el derecho de libertad de elección que tendrán los alumnos en los siguientes años.</p>
+
+<p>Programas que los alumnos puedan llevarse a sus casas para seguir aprendiendo y experimentado en sus ratos libres. Y por supuesto, sin que suponga para ellos y para sus familias un importante desembolso (los ordenadores por sí solos ya son suficientemente caros). Y por supuesto, sin que el alumno deba incumplir las leyes establecidas.</p>
+
+<p>Programas que no limiten la capacidad de aprendizaje de las personas. Programas de los que podamos aprender todo lo que queramos o podamos. El objetivo de la enseñanza es que los alumnos aprendan, nunca será el decir lo que se puede y lo que no se puede aprender.</p>
+
+<p>Es evidente que a la hora de dar las clases hay que decantarse por una herramienta en concreto, pero si esa herramienta es libre no estamos apoyando a una empresa en concreto sino que apoyamos a la sociedad entera. Por ejemplo, Sun es la empresa que mantiene y distribuye el paquete ofimático OpenOffice, pero usarlo en la enseñanza no implica el dar ventaja a Sun sobre sus competidores ya que al ser un conjunto de programas libres cualquier otra empresa puede dar servicio sobre ese paquete en cualquier momento. Estamos hablando de dinero público invertido en la sociedad, no en una sola empresa.</p>
+
+<p>Y finalmente, usar programas libres en la educación es enseñar el valor de la solidaridad. Es enseñar a compartir, enseñar a ayudar, enseñar a colaborar... es dar unos valores éticos para personas que formarán parte de una sociedad mejor.</p>
+
+<h2>Uso en las empresas</h2>
+
+<p>Las razones para que las empresas usen programas libres no son éticas. Sería lo deseable, es cierto, pero las empresas existen principalmente para ganar dinero y pensar otra cosa sería engañarnos. Aún así, las empresas tienen derechos al igual que las personas, derechos y libertades que son vulnerados continuamente por los programas privativos.</p>
+
+<p>Cuando una empresa cualquiera adquiere un programa privativo esa empresa queda atrapada en el monopolio que rodea a ese programa y no podrá escapar a menos que cambie de programa con todo lo que ello supondría.</p>
+
+<p>Que la empresa queda atrapada en el monopolio quiere decir que solamente podrá adaptar ese pograma a sus necesidades en la medida en que la empresa distribuidora quiera, aceptando en ese caso los precios que se le impongan. No es posible buscar alternativas, ya que al tratarse de un monopolio solamente la empresa que regenta el monopolio puede ofrecer ese servicio.</p>
+
+<p>Por otro lado la empresa queda sujeta a las actualizaciones que se vayan realizando del programa. Al tratarse de programas privativos las actualizaciones se realizan siguiendo criterios más económicos que técnicos, buscando siempre lo mejor para el monopolio y para sus intereses. Puede que nos interese actualizar en unos momentos y en otros no, pero con los programas privativos las actualizaciones se realizarán cuando se nos diga.</p>
+
+<p>Y lo que es peor. Si la empresa que domina el monopolio decide dejar de dar servicio solamente podemos esperar dos cosas. La primera, la "mejor", que otra empresa compre los derechos del programa y que el monopolio cambie de manos. Las cosas seguirán igual. La segunda, nos quedamos sin soporte para el programa, con lo cual nos vemos obligados a usar un programa que no se modificará nunca o a realizar un cambio de programa, algo traumático para la empresa dependiendo del grado de importancia de ese programa.</p>
+
+<p>No hablemos ya del peligro del código secreto. Al no tener acceso al código del programa no podemos saber exactamente lo que hace el programa, circunstancia del todo indeseable en según que sectores. Recordemos las sospechas que tuvieron varios gobiernos sobre los programas de Microsoft, acusada de extraer información sensible de las empresas europeas para suministrarla a las grandes compañías estadounidenses, que se vió obligada a mostrar partes del código de su sistema operativo Windows.</p>
+
+<p>Los programas libres se encuentran a salvo de estos problemas. Una empresa que usa un determinado programa libre no queda atada a ningún monopolio. Al contrario, tendrá libertad de elegir al proveedor que quiera. El hecho de que puedan existir varios proveedores para un mismo producto promueve la competencia de proveedores y beneficia a los clientes con precios más bajos, ofertas añadidas, etc.</p>
+
+<p>Además, si con el tiempo se quiere cambiar de proveedor no habrá ningún problema, ya que como los programas son libres todos pueden tener acceso a ellos. Incluso la propia empresa podría contratar personal cualificado y realizar su propio mantenimiento del programa si así lo quisiera. Personal que tampoco sería muy difícil de encontrar, ya que al ser programas libres estamos hablando de un conocimiento que está abierto a todo el mundo.</p>
+
+<p>Evidentemente, el ser independientes del proveedor y el poder controlar todas las herramientas que se usan pueden dar una ventaja a la empresa sobre sus competidores.</p>
+
+<h2>Cómo ganar dinero desarrollando programas libres</h2>
+
+<p>En general existe la creencia de que no se puede ganar dinero desarrollando programas libres y que los que trabajan creando programas libres lo hacen por amor al arte. Existen casos en los que ésto es cierto, hay mucha gente que trabaja en sus ratos libres programando, testeando, remitiendo bugs o escribiendo documentación y lo hacen sin ver un duro, simplemente porque les gusta hacerlo. Son casos dignos de elogio.</p>
+
+<p>Pero también se dan casos de gente que trabaja en el sector del software libre y que gana dinero. Tenemos ejemplos ilustres como pueden ser Red Hat, Suse o MySQL entre muchos otros. Vamos a ver cómo es posible ganar dinero trabajando en el desarrollo y soporte de programas libres y además comprobaremos que en muchas ocasiones tendremos más probabilidades de triunfar basando nuestro negocio en el software libre que basándolo en el software privativo.</p>
+
+<p>Una de las formas más sencillas de ganar dinero desarrollando software libre es trabajar por cuenta ajena. Es evidente que recibiremos nuestra nómina al llegar a final de mes independientemente del tipo de proyectos en los que estemos trabajando.</p>
+
+<p>Un caso similar se da si nos dedicamos a realizar programas a medida. Supongamos que un cliente nos pide un desarrollo a medida de una determinada aplicación y quiere que esa aplicación sea libre. Nosotros igual cobraremos por el trabajo, ya que lo que el cliente haga despues con sus programas no nos afecta en nada.</p>
+
+<p>Las diferencias más notables entre negocios basados en software libre y en software privativo las encontraremos en las empresas que realizan o mantienen programas y después los distribuyen para las grandes superficies comerciales, es decir, las empresas que desarrollan paquetes ofimáticos, programas de gestión, de contabilidad, juegos, etc., dirigidos al gran público. Esas grandes diferencias vienen originadas por la forma de ver el software que tienen unos y otros.</p>
+
+<p>Las empresas cuyo modelo de negocio es el del software privativo basan su fuente de ingresos en la venta de programas o mejor dicho, en la venta de licencias o de derechos de uso de esos programas. Entre esos derechos de uso no suelen estar los derechos de copia, distribución o modificación, algo lógico ya que es su fuente de ingresos como ya hemos dicho.</p>
+
+<p>Para este tipo de empresas el software es un <b>producto</b>, por lo que un programa recibe el mismo tratamiento que puede recibir un lápiz, un libro o un microondas. Se fabrica el prototipo inicial y si es aceptado por los responsables respectivos se inicia su fabricación masiva para distribuirlo después por las tiendas. Este modelo de negocio se basa en la creencia de que una gran masa de usuarios va a tener las mismas necesidades y no las cambiará demasiado con el paso del tiempo, por lo que se puede crear un programa/producto que cubra esas necesidades y vender millones de copias del mismo. Cada cierto tiempo se distribuye una nueva versión con mejoras y modificaciones.</p>
+
+<p>Sin embargo todos sabemos que es bastante habitual que los usuarios de los programas demanden modificaciones de los mismos para adaptarlos mejor a sus necesidades particulares. Es más, suele ocurrir que los usuarios que más interesados están en realizar cambios y adaptaciones de los programas son los que están dispuestos a pagar más dinero. Teniendo en cuenta que para modificar y adaptar los programas no es necesaria una gran infraestructura se nos está presentando una forma de negocio bastante interesante. Estamos hablando de ofrecer un <b>servicio</b> al cliente.</p>
+
+<p>El término <b>servicio</b> es muy amplio y abarca desde adaptaciones y modificaciones de los programas hasta instalaciones, formación y documentación de los mismos. Por supuesto se puede cobrar dinero por ofrecer estos servicios y en la mayoría de las ocasiones resultará más rentable y más gratificante que dedicarse a vender licencias de programas.</p>
+
+<p>A la hora de ofrecer servicios a los clientes es cuando las empresas de software libre superan ampliamente a las empresas de software privativo, principalmente debido a la rígida estructura de monopolios existente en el sector privativo.</p>
+
+<p>Para que una empresa de software privativo pueda ofrecer servicios sobre un determinado programa debe de poseer en primer lugar los derechos del mismo. Además, para ofrecer servicios es necesario que exista una masa crítica de usuarios que demanden esos servicios para que el negocio resulte rentable, y conseguir esa masa de usuarios requiere una laboriosa tarea de distribución y promoción incluso aunque estemos hablando de un programa muy bueno.</p>
+
+<p>En el caso del software libre los programas están accesibles para todo el mundo y pueden ser probados sin ningún tipo de compromiso previo. Esto implica que si el programa es bueno nos encontraremos rapidamente con un elevado número de usuarios, o sea, de potenciales clientes. La empresa puede elegir sobre qué programas ofrecer servicio y elegir los que más posibilidades de triunfo le pueden dar. O puede crear sus propios programas. Si son buenos no tardará en formarse una comunidad de usuarios que demandará cambios, modificaciones, formación, etc, y lo más lógico es que la empresa que ha desarrollado el programa sea la que mejores servicios ofrezca y la que más clientes tendrá.</p>
+
+<p>Otro punto a favor de las empresas de software libre es la facilidad para encontrar personal cualificado para realizar servicios sobre un determinado programa en el caso de que su personal actual no pudiera realizarlos. O formar a su propio personal a un precio nada desproporcionado. Esto ocurre gracias a que los programas, al ser libres, están accesibles para todo el mundo, lo que permite a las empresas tener costos menores y bajar los precios manteniendo su nivel de beneficios.</p>
+
+<p>En el sector del software privativo, debido una vez más a su estructura de monopolios, resulta muy complicado que una empresa pueda encontrar profesionales cualificados que puedan realizar determinados servicios sobre sus programas, ya que los únicos que pueden dar formación sobre esos programas son ellos mismos, los distribuidores del programa, los que controlan el monopolio del programa.</p>
+
+<p>Finalmente, podemos decir que para una empresa entrar y prosperar en el mercado del software privativo puede convertirse en una misión imposible, ya sea ofreciendo nuevos productos u ofreciendo servicios sobre productos existentes. La propia estructura de este mercado tiene la culpa ya que a las empresas que controlan los monopolios les resulta muy fácil evitar que un posible competidor entre en el mercado haciendo uso de su posición privilegiada, como ocurrió con Netscape o con Stacker por poner unos ejemplos.</p>
+
+<p>Sin embargo, es realmente fácil entrar en el mercado del software libre. Eso no quiere decir que el triunfo esté asegurado. Hay que pensar que en este tipo de mercado, debido a que los programas son libres y todas las empresas tienen acceso a todas las modificaciones que se hacen, la competencia es terrible, lo que quiere decir que las empresas líderes del mercado lo son porque se lo están ganando día a día. Eso no quiere decir que no se les pueda desbancar; si la nueva empresa que acaba de entrar sabe moverse mejor que sus rivales no tardará mucho tiempo en ocupar las primeras posiciones.</p>
+
+<p>En el mercado del software libre es muy difícil triunfar ya que te enfrentas a los mejores, pero al menos tienes la oportunidad de enfrentarte a ellos y si resulta que tú eres el mejor, entonces tú serás el ganador.</p>
+
+<p>En el mercado del software privativo se te elimina rapidamente antes de que puedas llegar a convertirte en una amenaza real. Nunca sabrás si eres mejor que ellos o no, ya que ni siquiera te dan la oportunidad de probarlo.</p>
+
+<h2>Retos de futuro para el software libre</h2>
+
+<p>Se ha demostrado que es posible construir un sistema operativo libre completamente funcional con gran cantidad de aplicaciones también libres. También se ha demostrado que el software libre no acabará con las empresas de software sino más bien al contrario, abriendoles nuevas formas de aplicar su negocio.</p>
+
+<p>A pesar de ello el futuro del software libre es incierto debido principalmente a cuatro amenazas que paso a explicar a continuación:</p>
+
+<h2>Hardware secreto</h2>
+
+<p>Entre las empresas de hardware crece cada vez más la tendencia a mantener las especificaciones de sus productos en secreto, proporcionando drivers privativos para su uso. Esto dificulta enormemente el uso de sistemas libres en nuestros equipos. ¿Seremos capaces de usar nuestros sistemas libres en los ordenadores del futuro?</p>
+
+<p>La respuesta es sí, siempre y cuando las personas valoren suficientemente su libertad. Lo suficiente como para desarrollar drivers libres mediante ingeniería inversa. Lo suficiente como para no usar hardware no soportado por nuestros sistemas libres. Si sigue aumentando el número de usuarios de software libre las empresas de hardware deberán replantearse sus políticas.</p>
+
+<h2>Librerías no libres</h2>
+
+<p>Las librerías no libres que pueden ser usadas en sistemas libres no son más que una trampa para los programadores, ya que los programas libres que hagan uso de esas librerías nunca podrán ser completamente libres.  Y cuanto más popular se vuelve una librería no libre más peligrosa se vuelve ya que atrae a más programadores desprevenidos.</p>
+
+<p>Un ejemplo conocido es el de la librería Qt, utilizada por el sistema de escritorio KDE. Afortunadamente, hoy en día esta librería también es libre y forma parte plena de nuestros sistemas libres.</p>
+
+<p>No hay que dejarse deslumbrar por las posibles ventajas técnicas que nos pueda ofrecer una librería determinada, ya que lo primero debe ser nuestra libertad y la libertad de los usuarios de nuestros programas.</p>
+
+<h2>Patentes de software</h2>
+
+<p>Las patentes de software representan el mayor peligro para el software libre, ya que pueden dejar algoritmos y funciones fuera del alcance de los programadores durante veinte años.</p>
+
+<p>¿Cómo se puede luchar contra una patente de software? Se pueden buscar pruebas de su invalidez o se pueden buscar alternativas para desarrollar los programas. Pero si ninguno de estos métodos funciona, si no se puede invalidar la patente ni se puede encontrar una alternativa, deberemos ser capaces de seguir con nuestro trabajo sin usar las funciones patentadas.</p>
+
+<p>Esto no será muy difícil para los que realmente valoren su libertad, pero puede hacer que los que usen sistemas libres por considerarlos técnicamente superiores se replanteen el volver a usar sistemas privativos. ¡No dejemos que ocurra! Debemos seguir hablando de libertad y de principios.</p>
+
+<h2>Documentación libre</h2>
+
+<p>Igual de importante que disponer de programas libres es el disponer de manuales libres. Igual que un programa se puede usar, copiar y modificar libremente, un manual del programa debe también poderse usar, copiar y modificar libremente. ¿Qué sentido tendría que un programador modificara un programa si despues no pudiera modificar la documentación para explicar qué ha mejorado del programa?</p>
+
+<p>Otra razón para desear documentación libre es la posibilidad de mantener versiones traducidas a varios idiomas. Quizás el programador que modifica un programa solamente conoce un idioma, pero habrá gente dispuesta a ayudar a la comunidad y a traducir esos manuales a sus lenguas respectivas.</p>
+
+<p>Es necesario que los programas libres mantengan su documentación libre.</p>
+
+<hr />
+
+<i><p>"La filosofía de Yoda - «No podemos sólo intentarlo» - suena bien, pero no me sirve. He realizado mi trabajo siempre ansioso ante la perspectiva de que no tuviera suficiente capacidad para ello, sin saber si mi labor bastaría para alcanzar el objetivo deseado. Pero lo intenté de todas formas, porque entre el enemigo y mi ciudad sólo estaba yo. Para mi sorpresa, a veces del éxito obtenido."</p>
+
+<p>"En otras ocasiones fracasé. Algunas de mis ciudades han caído. Más tarde descubrí otra ciudad amenazada y me preparé para otra batalla. Con el tiempo, he aprendido a detectar las amenazas y a interponerme entre ellas y mi ciudad, haciendo un llamamiento a otros hackers para unirse a mí."</p>
+
+<p>"Hoy en día, a menudo me encuentro que no estoy solo. La visión de un regimiento de hackers manos a la obra constituye una fuente de alivio y de alegría, y pienso que la ciudad sobrevivirá por el momento. Pero con el transcurso de los años los peligros son cada vez mayores, y ahora Microsoft nos tiene en su punto de mira. No podemos pensar que el futuro de la libertad está asegurado. ¡No os engañéis! Si quieres conservar tu libertad, tienes que estar preparado para defenderla."</p>
+
+<p><b>Software libre para una sociedad libre (Richard M. Stallman)</b></p></i>
+</div>
diff --git a/posts/49.html b/posts/49.html
new file mode 100644 (file)
index 0000000..0723b01
--- /dev/null
@@ -0,0 +1,18 @@
+title: Hablando de software libre en el IES Bovalar
+date: 2005-05-24 16:28
+---
+<div>
+<p>El pasado 17 de mayo estuvimos Andrés Martinez, Rubén Porcar, Alejandro Martinavarro y yo en el IES Bovalar (en el antiguo cuartel Tetuán) explicando a los chavales de primero y segundo de bachiller en qué consiste el movimiento del software libre. Rubén y Alejandro se encargaron de proporcionarnos soporte técnico.</p>
+
+<p>El profesor de informática Andrés Más ha sido de gran ayuda. Gracias a él hemos podido estar allí, y además nuestro público ya estaba preparado ya que Andrés ya lleva buena parte del curso hablándoles sobre el software libre y GNU/Linux.</p>
+
+<p>Empecé presentando a Aditel y seguí hablando sobre razones éticas por las que usar programas libres. La cosa fue derivando en una charla en la que todos hablabamos y que es lo que a mi más me gusta ya que así puedo centrarme en lo que más interesa a la gente. Pude responder dudas sobre la comunidad que soporta el software libre, sobre futuro profesional basado en software libre, ... pero lo que más parecía gustarles era la idea de que podían copiar todo lo que quisieran y que al hacerlo contribuían al crecimiento del software libre.</p>
+
+<p>Después siguió Andrés entrando más en detalle sobre las distribuciones GNU/Linux y algunas aplicaciones libres como OpenOffice.</p>
+
+<p>En general me gustó comprobar que tanto el profesorado con el que tratamos allí como parte del alumnado estaba realmente interesado en todo lo que veníamos a contarles, y me gustó porque esta gente son los que vienen detrás de nosotros y los que antes o despues tendrán que recoger nuestras armas para continuar adelante. Fue una buena experiencia.</p>
+
+<p>Además pude conocer personalmente a Andrés, socio de Aditel que a pesar de llevar pocos meses con nosotros ya se ha involucrado mucho más que algunos en dos años. Un 10 para él.</p>
+
+<p>Como punto final indicar que se llevaron todos los cd's de Winslow, e incluso alguno me preguntó si podría hacer copias para sus amigos.</p>
+</div>
diff --git a/posts/5.html b/posts/5.html
new file mode 100644 (file)
index 0000000..8361a93
--- /dev/null
@@ -0,0 +1,97 @@
+title: Sistema de fax con herramientas libres
+date: 2003-10-07 15:03
+---
+<div>
+<p>Para una empresa y para cualquiera tener un servidor de fax que permita enviar los documentos directamente desde el ordenador, sin pasar por papel, es un ahorro de tiempo y de dinero. Existen soluciones comerciales que nos permiten tener nuestro propio servidor de fax, pero las alternativas libres, teniendo la misma potencia nos dan una versatibilidad a la que dificilmente llegarán las aplicaciones propietarias.</p>
+
+<p>En el siguiente documento explico cómo he instalado el servidor de fax de la empresa en la que trabajo, usando basicamente Hylafax y Samba. Aunque tengo que omitir algunos desarrollos extra que he realizado creo que la idea seguida quedará suficientemente clara.</p>
+
+<p><h3>Índice</h3>
+<a href="#software">Software utilizado</a><br/>
+<a href="#idea">¿Qué vamos a hacer?</a><br/>
+<a href="#hylafax">Instalando Hylafax</a><br/>
+<a href="#samba">Samba y la impresora virtual</a><br/>
+<a href="#final">Final</a><br/>
+<a href="#enlaces">Enlaces</a></p>
+
+<h3><a name="software">Software utilizado</a></h3>
+
+<p>Todo el sistema se ha montado sobre una Debian Woody, aunque seguramente funcionaría igual de bien en cualquier versión de Linux. Aunque hay mucha gente que piensa lo contrario puedo decir que instalar una Woody es un juego de niños (o de abuelitas).</p>
+
+<p>Con respecto al fax, todo esta basado principalmente en el software <a href="http://www.hylafax.org/">Hylafax</a>, para enviar y recibir faxes, y en el gran conocido <a href="http://www.samba.org/">Samba</a>. El por qué de Samba se explica un poco más tarde.</p>
+
+<h3><a name="idea">¿Qué vamos a hacer?</a></h3>
+
+<p>En primer lugar debemos de tener claro en qué escenario nos vamos a mover. En mi caso me encuentro con una red dividida en dos zonas, servidores (principalmente Linux) y clientes/usuarios con una amplia variedad de Windows. Nuestra idea es montar un nuevo servidor Linux con el Hylafax instalado, pero tenemos el problema de la conexión de los usuarios al servidor de fax.</p>
+
+<p>Existen clientes de Hylafax para Windows de apariencia y funcionalidad parecidas al Outlook, pero son propietarios y queremos usar software libre dentro de lo posible. Además, lo que realmente interesa es poder acceder al fax como si se tratara de una impresora para poder enviar faxes desde el Office, Outlook, etc.</p>
+
+<p>Gracias a Samba esto es posible. La idea es crear una impresora virtual que estará accesible desde todos los clientes pero que en realidad será un acceso al Hylafax para enviar el documento por fax en vez de imprimirlo.</p>
+
+<p><i>Anem per feina!</i></p>
+
+<h3><a name="hylafax">Instalando Hylafax</a></h3>
+
+<p>El software Hylafax es la pieza central de todo este puzzle. Podemos instalarlo mediante sus versiones empaquetadas o directamente compilando el código fuente. Aunque instalar las cosas mediante paquetes es muy cómodo, es una sana costumbre compilar de vez en cuando, así que nos descargamos el correspondiente fichero .tar.gz y lo descomprimimos mediante <b>tar zxf hylafax.tar.gz</b>. Estas cosas las suelo hacer en el directorio /usr/local/src/, aunque cada uno puede hacerlo donde más le guste.</p>
+
+<p>Dentro del directorio creado tenemos todo lo necesario para instalar Hylafax. En el fichero INSTALL nos explica cómo hacerlo, que basicamente es el típico ./configure, make y make install, esto último como root. Despues sólo nos queda ejecutar el comando faxsetup para configurar el modem. No voy a extenderme en estos detalles, ya que todo esta bien explicado en los ficheros de texto que acompañan al código fuente y en la web de Hylafax.</p>
+
+<p>Hylafax se comunica con el modem mediante el demonio faxgetty, pero curiosamente Hylafax no arranca este demonio por defecto, así que tenemos que hacerlo manualmente, añadiendo <b>/usr/local/sbin/faxgetty -D /dev/ttyS0</b> en /etc/init.d/hylafax o en /etc/inittab, dependiendo de si queremos que el demonio arranque al arrancar Hylafax o por el proceso init. Por supuesto, suponemos que el modem esta en el COM1.</p>
+
+<p>Y ya tenemos nuestro servidor de fax instalado. Tampoco era tan difícil, ¿no? Ahora ya podemos enviar faxes desde el servidor mediante <b>sendfax -d número fichero1 fichero2 ...</b>, pero aún vamos a hacer más.</p>
+
+<h3><a name="samba">Samba y la impresora virtual</a></h3>
+
+<p>Al igual que con Hylafax no voy a entrar en los detalles de la instalación de Samba ya que hay documentación de sobra en la correspondiente web. Solamente comentaré algunos detalles interesantes.</p>
+
+<p>Resulta que en mi caso tengo la red dividida en dos zonas (en realidad son mas, pero tampoco importa mucho). En un lado tendremos el servidor de fax con Samba y en el otro lado estan todos los equipos de usuarios. Un cortafuegos comunica las dos zonas.</p>
+
+<p>Samba, al igual que los sistemas Windows, usa el protocolo SMB que permite, entre otras cosas, compartir dispositivos, recursos, etc. Cuando un equipo entra en una red SMB envia un mensaje broadcast presentandose al resto de equipos presentes en la red. El problema reside en que los cortafuegos por defecto no dejan pasar paquetes cuya dirección destino sea del tipo x.x.x.255 (suponiendo una máscara 255.255.255.0). En pocas palabras, con una configuración básica de Samba nuestro servidor no es visible para los equipos Windows al otro lado del cortafuegos.</p>
+
+<p>Debido a esta limitación del protocolo SMB, las redes que lo usan estan obligadas a tener un maestro local de dominio en cada una de las zonas en las que se divide la red. Uno de esos maestros locales será además el maestro de dominio y sincronizará a todos los demás maestros locales.</p>
+
+<p>Si no conoces nada del protocolo SMB y su forma de trabajar probablemente no te estes enterando de nada, así que iré al grano. Convertiremos a nuestro servidor Samba en maestro local y, suponiendo que el maestro global se encuentra al otro lado de la red, pondremos las siguientes lineas en el fichero /etc/samba/smb.conf:</p>
+
+<pre>local master = yes
+preferred master = yes
+os level = 33
+remote announce = x.x.x.x/NOMBRE_DOMINIO</pre>
+
+<p>Con la última linea le indicamos al maestro de dominio con IP x.x.x.x nuestra existencia, de forma que los clientes ya podrán vernos desde su Entorno de Red.</p>
+
+<p>Ahora ya podemos crear nuestra impresora virtual para enviar faxes. Para ello vamos a añadir más lineas en la configuración de Samba, en concreto:</p>
+
+<pre>[lpfax]
+comment = Impresora Fax
+printable = yes
+postscript = no
+print command = (echo -e '1in%!n.nwnq' |ed %s; /usr/bin/printfax.pl %I %s %U %m) &amp;
+path = /var/spool/lpfax</pre>
+
+<p>De esta forma, cuando mandamos imprimir algún documento por esta impresora en realidad estamos guardando el fichero en el directorio /var/spool/lpfax y ejecutamos el script de Perl printfax.pl, pasándole la dirección IP del cliente.</p>
+
+<p>La idea es la siguiente: el script de Perl se conecta a la IP especificada, en un puerto en concreto, y le pide al usuario los datos propios de la cabecera del fax, como número de fax destino, nombre, etc, y después usa el comando sendfax para enviar el documento con los datos indicados. Aunque no puedo publicar el código del script y de la aplicación que se encuentra escuchando en el cliente, existe algo muy parecido en <a href="http://www.boerde.de/~horstf/">Horst F's Titelseite</a> con código fuente en Delphi y todo.</p>
+
+<p>Para configurar la impresora en los clientes podemos usar el driver de la HP Laserjet 4/4M Postscript. A mi al menos me funciona sin ningún problema.</p>
+
+<h3><a name="final">Final</a></h3>
+
+<p>Finalmente nuestros usuarios tienen una impresora fax en su lista de impresoras. Al enviar un documento un formulario pide el número de fax y al introducirlo el fax se envía. Podemos añadir una agenda de direcciones, elegir portada del fax, etc. Hylafax permite enviar notificaciones por mail y muchas cosas más. Todo esto ya es cosa de ponerse para dejarlo todo bonito.</p>
+
+<p>No estoy seguro de que haya quedado muy clara la explicación de cómo he montado el servidor de fax. He intentado que el artículo no quedara a un nivel excesivamente alto aunque no se si lo he conseguido.</p>
+
+<p>De todas formas, si alguien necesita aclarar algunos puntos estoy accesible desde mi cuenta de correo supersanko en terra.es y también en la lista de correo de Bulma.</p>
+
+<h3><a name="enlaces">Enlaces</a></h3>
+
+<ul>
+<li><a href="http://www.hylafax.org/">Hylafax</a></li>
+<li><a href="http://www.boerde.de/~horstf/">Horst F's Titelseite</a></li>
+<br/>
+<li><a href="http://www.samba.org/">Samba</a></li>
+<li><a href="http://es.tldp.org/Manuales-LuCAS/USANDO-SAMBA/usando-samba-html/">Usando Samba</a></li>
+<li><a href="http://freebooks.by.ru/view/SambaIn24h/">Sams Teach Yourself Samba in 24 Hours</a></li>
+<br/>
+<li><a href="http://qref.sourceforge.net/Debian/reference/reference.es.html#contents">Guía de referencia Debian</a></li>
+</ul>
+</div>
diff --git a/posts/50.html b/posts/50.html
new file mode 100644 (file)
index 0000000..6706bf9
--- /dev/null
@@ -0,0 +1,12 @@
+title: Entrevista sobre patentes de software en Cadena SER Castellón
+date: 2005-05-24 16:45
+---
+<div>
+<p>Este pasado domingo estuve junto a Miguel Pérez y Joan Peris en una entrevista centrada en las patentes de software que tuvo lugar en directo en los estudios de Cadena SER Castellón. Gracias a Joan y a sus contactos en la emisora tuvimos la oportunidad de hablar sobre el peligro de las patentes a mucha gente que desconoce el tema y a la que no podemos llegar por los métodos habituales para nosotros.</p>
+
+<p>Por otro lado pude conocer a Miguel. Tenía ganas despues de haber estado involucrado en la manifestación del 27-A y haber causado baja en el último momento. Además siempre es gratificante hablar con personas cuyas ideas se mueven fuera de los márgenes que se intentan establecer desde las grandes corporaciones.</p>
+
+<p>También me gustó asistir a la realización de un programa de radio. Desde mis años mozos, cuando fui a dedicar una canción en el Bikini Club, que no había vuelto a poner los pies en una emisora.</p>
+
+<p>Bonita experiencia.</p>
+</div>
diff --git a/posts/51.html b/posts/51.html
new file mode 100644 (file)
index 0000000..ec45424
--- /dev/null
@@ -0,0 +1,14 @@
+title: Seguimos hablando de software libre, ahora en el IES Politécnico
+date: 2005-06-06 09:37
+---
+<div>
+<p>Siguiendo con las charlas que Aditel da en los institutos de Castellón, el jueves 2 de junio estuvimos Ignacio Gil, Rubén Porcar y un servidor en el IES Politécnico para acercar a los estudiantes al mundo del software libre y hacerles ver que no es necesario ser un friki para dar el paso y de que se trata más de un problema ético que de un problema técnico.</p>
+
+<p>En esta ocasión nuestro contacto fue Vicente Ros, al que quiero agradecer desde aquí la oportunidad que nos ha dado. El resto de profesores que conocimos también se mostraron muy colaborativos, no recuerdo sus nombres, y expresaron abiertamente su deseo de que volvamos por allí el curso que viene.</p>
+
+<p>Como siempre la cosa empezó hablando sobre Aditel y su papel en la universidad y en la ciudad de Castellón. En el futuro, cuando estos jovenes lleguen a la UJI no podrán decir que no saben quienes somos, y espero que algunos de ellos, los que más interés demostraban, contribuyan al crecimiento de la asociación.</p>
+
+<p>Durante la charla posterior se hablo sobre las cuatro libertades, se tocó ligeramente la GPL y se comentó cómo se ganan la vida los informáticos cuando desarrollan programas libres. De esto último no suelo hablar en los institutos, sí cuando hablo a profesionales del mundillo, pero Rubén se encargó de dejar las cosas claras y de poner los puntos sobre las íes. Dirá que hablar en público no se le da bien, pero yo creo que lo hace de maravilla. ¿Lo veremos algún día sobre el entarimado? ;-)</p>
+
+<p>Nada más que decir. Una experiencia enriquecedora que constituye el segundo ladrillo de un proyecto de Aditel mucho más que interesante. Espero que podamos ampliar la lista de centros de cara al curso que viene.</p>
+</div>
diff --git a/posts/52.html b/posts/52.html
new file mode 100644 (file)
index 0000000..58e02c2
--- /dev/null
@@ -0,0 +1,16 @@
+title: El día de mañana (ya vienen las patentes de software)
+date: 2005-06-26 07:27
+---
+<div>
+<p>Hace dos años, durante la celebración de la Netweekwend 2003 en Benicarló, se me preguntó si se llegarían a aprobar las patentes de software teniendo en cuenta la cantidad de gente que se oponía a ellas. Respondí sin dudar que estaba seguro de que se aprobarían y que lo único que quedaba por saber era el cuándo. Aunque espero equivocarme todo parece indicar que no tardaremos mucho en conocer ese último detalle.</p>
+
+<p>A pesar de ello no podemos, no debemos, bajar la cabeza. Ahora que las cosas cada vez pintan peor es cuando más debemos luchar por lo que creemos y defendemos, que nadie pueda decir en el futuro que no hicimos todo lo posible e imposible. Si las patentes de software salen adelante que no sea por nuestra culpa. Concretando, lo que podemos hacer y estamos haciendo es:</p>
+
+<ul>
+      <p><li>Enviar cartas físicas o faxes a los eurodiputados explicando personalmente por qué estamos en contra de las patetes de software y en qué nos perjudican. Hay que hablarles de nuestros trabajos, de lo que hacemos y de lo preocupados que estamos por todo lo que está pasando. Cuanto más personal sea mejor, escapad de las plantillas y explicad las cosas con vuestras palabras. Solamente dos requisitos, que sea una carta respetuosa (nada de insultos y lenguaje soez) y que se deje claro que les pedís <b>que apoyen la postura de la FFII y que voten a favor de las enmiendas de Michel Rocard</b>, para que sepan exactamente qué deben hacer. La información de contacto de los eurodiputados españoles está en <a href="http://wwwdb.europarl.eu.int/ep6/owa/p_meps.short_list?ilg=ES&#38;ictry=ES&#38;ipolgrp=&#38;iorig=">EuroParl</a>. <b>Hay que evitar el correo electrónico en la medida de lo posible ya que está demostrado que casi no lo leen. Si no podeis enviar un fax recurrid al correo tradicional</b>.</li></p>
+
+      <p><li>Ya hay 103 empresas españolas inscritas en el <a href="http://www.economic-majority.com/supporter.en.php?country=es">Economic Majority</a>. Dos de ellas son de la provincia de Castellón, <b>Cárabos</b> e <b>Intelligent Information Systems</b>, pero deberían haber más. Si vuestra empresa vive del software y quiere seguir haciendolo ya debería de estar inscrita junto a las demás. Las patentes de software no atacan solamente al software libre, como algunos piensan erroneamente. El peligro alcanza a todas las empresas que desarrollan programas, librerías, etc, a todas por igual.</li></p>
+</ul>
+
+<p>¿Te gusta programar? ¿Te ganas la vida con ello? ¿Eres usuario de programas de ordenador (recuerda que hasta los móviles llevan programas dentro)? Pues entonces no esperes a que sea demasiado tarde y defiendete <b>¡¡YA!!</b></p>
+</div>
diff --git a/posts/53.html b/posts/53.html
new file mode 100644 (file)
index 0000000..83855a8
--- /dev/null
@@ -0,0 +1,8 @@
+title: Disfrutando de los últimos minutos (que sea que no, que sea que no)
+date: 2005-07-06 09:58
+---
+<div>
+<p>Los dados ya están echados. Faxes, cartas, conversaciones..., todo lo que se pudo hacer se hizo y ahora nuestro futuro está en manos de los políticos. ¿Vencerán los lobbies pro-patentes? ¿O seguiremos siendo libres? Pronto lo sabremos.</p>
+
+<p>Por si acaso aquí estoy, programando todo el día, disfrutando mientras esta adicción sea legal ;-)</p>
+</div>
diff --git a/posts/54.html b/posts/54.html
new file mode 100644 (file)
index 0000000..a6fa518
--- /dev/null
@@ -0,0 +1,14 @@
+title: Hay que seguir moviendose contra las patentes
+date: 2005-07-07 14:08
+---
+<div>
+<p>La cosa estaba dificil pero al final salimos vivos de la votación de Estrasburgo, aunque no de la forma que esperabamos. Los grupos pro-patentes no quisieron arriesgarse a que la directiva se aprobara junto a las 21 enmiendas, lo que hubiera supuesto un golpe demoledor para las patentes de software, y promovieron que se rechazara. De esta forma consiguen que de momento se quede todo tal como está, es decir, con las patentes de software en un marco jurídico indefinido que permite que la Oficina de Patentes Europea siga concediendolas a pesar de su evidente ilegalidad y que haya paises en la UE que permitan patentar los programas de ordenador.</p>
+
+<p>La Comisión Europea aseguró en un principio que no volvería a proponer otra ley de patentes (<a href="http://www.20minutos.es/noticia/36763/0/patentes/europa/parlamento/">noticia en 20minutos.com</a>) pero según declaraciones en <a href="http://www.elpais.es/articulo.html?xref=20050706elpepunet_6&#38;type=Tes&#38;anchor=elpportec">la noticia en El País</a> la cosa no está tan clara. Hace dos años el Parlamento Europeo ya rechazó la directiva de patentes y al final consiguieron que se volviera a votar con el desenlace que todos conocemos, así que tampoco me extrañaría tanto que se volviera a repetir la historia.</p>
+
+<p>Tambien podemos esperar una posible ofensiva a nivel nacional en cada uno de los paises de la UE por conseguir la legalidad de las patentes de software de forma separada, tal como indica Ricardo Galli en <a href="http://mnm.uib.es/gallir/posts/2005/07/06/360/"> su blog</a>.</p>
+
+<p>Desde la lista de correo de la <a href="http://www.ffii.org/">FFII</a> Jesús Barahona ha animado a la gente a aprovechar el empuje que hemos adquirido y a ocupar una posición más proactiva, y Pablo Machón nos comunica que <a href="http://mail.fsfeurope.org/pipermail/press-release/2005q3/000109.html">la FSFE se está moviendo</a> para crear un órgano de supervisión de la EPO para evitar que sigan haciendo lo que les de la gana.</p>
+
+<p>Estos <i>lobbies</i> pro-patentes se van a arrepentir de habernos buscado las cosquillas.  :-)</p>
+</div>
diff --git a/posts/55.html b/posts/55.html
new file mode 100644 (file)
index 0000000..fc5d944
--- /dev/null
@@ -0,0 +1,8 @@
+title: Charla sobre software libre en Segorbe
+date: 2005-07-15 15:18
+---
+<div>
+<p>Mañana a las 12:30 doy una charla en la <a href="http://ciberia.hacklet.org/">Ciberia LAN Party</a> de Segorbe. Con el título "Aspectos éticos y económicos del software libre" se trata de una continuación de lo hablado en los institutos, profundizando en la filosofía del software libre y tratando temas como la conveniencia de usar programas libres en la educación o de cómo los programas libres benefician tanto a clientes como a proveedores del mercado del software.</p>
+
+<p>Las charlas son abiertas al público, como siempre que realizo alguna, por lo que si alguien aún tiene dudas sobre este mundo y se encuentra cerca de Segorbe está invitado.</p>
+</div>
diff --git a/posts/56.html b/posts/56.html
new file mode 100644 (file)
index 0000000..8179ec4
--- /dev/null
@@ -0,0 +1,56 @@
+title: La vuelta a España (o al menos a un cuarto)
+date: 2005-09-02 11:31
+---
+<div>
+<p>Mes y medio despues aquí estoy. Todo este tiempo ha dado para mucho, aunque haya tenido la bitácora algo olvidada. He actualizado los dos equipos fijos y he rebautizado al principal (Thangorodrim ahora se llama Aquiles, me ha dado por el rollo griego ;-D), aparte de recorrer unos 2.700 Km y de comprobar que mi coche es todo un campeón a pesar de sus diez años largos y de los 250.000 Km recorridos.</p>
+
+<p>El destino del viaje era Santiago de Compostela y de paso visitar todos los lugares interesantes que encontraramos por el camino siempre y cuando el cuerpo aguantara, claro.</p>
+
+<p><b>Primer día</b></p>
+
+<p>Salimos de Castellón hasta Mejorada del Campo (Madrid) para ver la catedral de Don Justo (la del anuncio de Aquarius). Ya la conocía de antes del anuncio y tenía ganas de verla. Impresionante lo que una sola persona es capaz de hacer a base de empeño. Seguimos hasta Villalbilla para visitar a la familia y desde allí hasta San Lorenzo del Escorial, que estaba en fiestas esa semana.</p>
+
+<p>Anécdota del día, en Madrid no saben qué es un café del tiempo. Hay que pedirlo con hielo.</p>
+
+<p><b>Segundo día</b></p>
+
+<p>Como era San Lorenzo el Monasterio y el Valle de los Caídos estaban cerrados, así que nos quedamos con las ganas y lo dejamos para el regreso. Tuvimos tiempo para sentarnos en la silla de Felipe II y contemplar toda la obra. Pasamos a Ávila y paseamos por su centro histórico y por las murallas en un día húmedo y gris. Me comí un lomo de cerdo que estaba de muerte. Ignoro si era la carne, la salsa o el plato, pero cada bocado sabía a gloria. He de reconocer que en Castilla se come de miedo.</p>
+
+<p><b>Tercer día</b></p>
+
+<p>Llegamos a Salamanca, otra ciudad medieval y monumental, aunque hay que reconocer que ninguna se acerca a la Ciudad Imperial de Toledo. Pasamos por la Casa de las Conchas, la Plaza Mayor y la Universidad sin dejarnos el Archivo de la Guerra Civil (algo decepcionante el hecho de que dos tercios de la exposición estuvieran centrados exclusivamente en la masonería).</p>
+
+<p>Y seguimos para pasar la noche en Zamora.</p>
+
+<p><b>Cuarto día</b></p>
+
+<p>Zamora sencillamente me encantó. Sus iglesias románicas, sus calles empedradas vacías de coches, la catedral y el Duero, sin dejarnos la casa en la que vivió el Cid. Tambien estuvimos en la puerta en la que Bellido Dolfos traicionó a Sancho II, hecho que desencadenaría despues, tras el juramento de Santa Gadea, el destierro del Cid.</p>
+
+<p>Y desde allí directos hasta Galicia. Por el camino pudimos contemplar la zona quemada de El Bierzo, un desastre. Pasamos la noche en Arteixo, a pocos kilometros de La Coruña. Para cenar, pulpito.</p>
+
+<p><b>Quinto día</b></p>
+
+<p>Por fin llegamos a Santiago, una pequeña ciudad anclada en el tiempo. Desde la plaza del Obradoiro se accede a la catedral por el Pórtico de la Gloria. En la columna del arco central, el <i>porteluz</i>, es costumbre introducir los dedos en el hueco que millones de manos han ido dejando en ella a lo largo de los años, para después, también como marca la tradición, dar un cabezazo en la supuesta figura del <i>Maestro Mateo</i>, constructor del pórtico, para que nos transmita su sabiduría. En el interior, bajo el Altar Mayor, se encuentra la cripta con los restos del Apóstol Santiago, objeto de culto y peregrinaje.</p>
+
+<p>En Santiago es complicado comer y beber. Comer por la cantidad de gente que hay, todos los sitios están llenos. Beber porque no hay fuentes para ello y las botellas te salen por un ojo de la cara. ¡Vaya negociete!</p>
+
+<p>Más tarde me voy con mi mujercita hasta el fin del mundo :-)  Siguiendo la Costa da Morte hasta el cabo de Finisterre. Cosa curiosa, en Galicia tarda más en hacerse de noche ya que las montañas no tapan la luz del sol.</p>
+
+<p><b>Sexto día</b></p>
+
+<p>Pasamos por la Torre de Hércules para sacar algunas fotillos y de allí sin parar hasta León. Impresionantes las vidrieras de la catedral. También me gustó mucho la Casa de Botines, de Gaudí. Era como estar en Barcelona. Nos faltó encontrarnos con los Café Quijano, aunque un tío que vestía con la misma pinta que Manuel en los conciertos (hasta llevaba el sombrero y el bastón) debía de ser coleguilla.</p>
+
+<p><b>Séptimo día</b></p>
+
+<p>Día intenso. Pasamos por Valladolid (allí la gente va a la playa del Pisuerga, con arena y tías haciendo <i>top less</i>) y Segovia. ¡Vaya <i>peaso</i> acueducto! Subiendo los 152 escalones de la Torre de Juan II se puede apreciar una vista estupenda de toda la ciudad, aunque para disfrutarla primero tienes que recuperar el aliento ;-D</p>
+
+<p>Y volvemos a San Lorenzo a dormir, no sin antes ver los fuegos artificiales del final de las fiestas. Otra anécdota, esta gente no sabe lo que es un castillo de fuegos, lo llaman fuegos artificiales y ya está.</p>
+
+<p><b>Octavo día</b></p>
+
+<p>Por fin, visitamos el Monasterio del Escorial (que grande que es, y eso que solamente dejan visitar una parte), sus salas, sus cuadros, el Sepulcro de los Reyes y la Basílica. También estuvimos en el Valle de los Caídos y en la Basílica que hay bajo la montaña. No me extraña que los guiris vengan a verlo, se te quita el hipo de golpe.</p>
+
+<p>Volviendo por la M-40 (velocidad limitada a 80 Km/h) compruebo que a 140 por hora me pasan hasta las camionetas traperas. Están locos estos madriles.</p>
+
+<p>Comida con la familia y vuelta a Castellón, a casita. Nada más llegar me recibe lo único que no echaba de menos, nuestra pegajosa humedad. ¿Por qué se vendrán aquí en cuanto tienen dos días de vacaciones? Están locos estos madriles.</p>
+</div>
diff --git a/posts/57.html b/posts/57.html
new file mode 100644 (file)
index 0000000..31caeb7
--- /dev/null
@@ -0,0 +1,6 @@
+title: Nuevas fotos en la Galería
+date: 2005-09-08 15:19
+---
+<div>
+Tenía un montón de fotos nuevas por subir. Ahora ya están disponibles <a href="http://www.jsancho.org/mgallery/index.php?app=mgallery&#38;folder=./fotos/Ciberia LAN Party 2005 y Segorbe/">las fotos de la Ciberia LAN Party y de Segorbe</a>, <a href="http://www.jsancho.org/mgallery/index.php?app=mgallery&#38;folder=./fotos/Cuadrangular de baloncesto/">las fotos del cuadrangular de baloncesto</a> sacadas de la <a href="http://shishigami.dlsi.uji.es/~palazon/basket_castellon/">web del Wichente</a> y un par de fotillos de la Netweekend 2003 (ya ha llovido).
+</div>
diff --git a/posts/58.html b/posts/58.html
new file mode 100644 (file)
index 0000000..d077e1c
--- /dev/null
@@ -0,0 +1,8 @@
+title: Recorrido por Villafames
+date: 2005-10-12 18:22
+---
+<div>
+<p>Este año por unos motivos o por otros al final no se realizó la tradicional torrá que hacemos un grupo de insurrectos en el ermitorio de Les Santes de Cabanes todos los 9 de octubre y la cosa quedó en una ruta por el término de Villafames. Fuimos pocos pero valientes y cuelgo las <a href="http://www.jsancho.org/mgallery/index.php?app=mgallery&#38;folder=./fotos/Villafames 2005/">fotos de la gesta</a> para que quede