From c1c59536eb431a37e96685f67d9fd622dc7a454c Mon Sep 17 00:00:00 2001 From: Javier Sancho Date: Sat, 7 Jan 2017 20:28:53 +0100 Subject: [PATCH 1/1] Initial commit --- css/custom.css | 3 + css/font-awesome.min.css | 4 + css/monokai.min.css | 1 + css/style.min.css | 1 + fonts/fontawesome-webfont.ttf | 564 ++++++++++++++++++++++++++++++++ fonts/fontawesome-webfont.woff | 564 ++++++++++++++++++++++++++++++++ fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes haunt.scm | 102 ++++++ images/jsancho2.jpg | Bin 0 -> 15949 bytes posts/0.html | 8 + posts/1.html | 32 ++ posts/10.html | 10 + posts/100.html | 12 + posts/101.html | 8 + posts/102.html | 56 ++++ posts/103.html | 8 + posts/104.html | 8 + posts/105.html | 26 ++ posts/106.html | 33 ++ posts/107.html | 8 + posts/108.html | 14 + posts/109.html | 14 + posts/11.html | 18 + posts/110.html | 44 +++ posts/111.html | 18 + posts/112.html | 16 + posts/113.html | 22 ++ posts/114.html | 9 + posts/115.html | 26 ++ posts/116.html | 15 + posts/117.html | 10 + posts/118.html | 10 + posts/119.html | 16 + posts/12.html | 10 + posts/120.html | 31 ++ posts/121.html | 18 + posts/122.html | 17 + posts/123.html | 52 +++ posts/124.html | 28 ++ posts/125.html | 16 + posts/126.html | 8 + posts/127.html | 21 ++ posts/128.html | 26 ++ posts/129.html | 8 + posts/13.html | 16 + posts/130.html | 12 + posts/131.html | 10 + posts/132.html | 10 + posts/133.html | 8 + posts/134.html | 8 + posts/135.html | 17 + posts/136.html | 15 + posts/137.html | 19 ++ posts/138.html | 13 + posts/139.sxml | 53 +++ posts/14.html | 26 ++ posts/140.html | 15 + posts/141.html | 62 ++++ posts/142.html | 34 ++ posts/143.html | 11 + posts/144.html | 17 + posts/145.html | 14 + posts/146.html | 15 + posts/147.html | 29 ++ posts/148.html | 16 + posts/149.html | 16 + posts/15.html | 76 +++++ posts/150.html | 55 ++++ posts/151.html | 35 ++ posts/152.html | 103 ++++++ posts/153.html | 28 ++ posts/154.html | 22 ++ posts/16.html | 8 + posts/17.html | 28 ++ posts/18.html | 22 ++ posts/19.html | 18 + posts/2.html | 10 + posts/20.html | 30 ++ posts/21.html | 16 + posts/22.html | 18 + posts/23.html | 8 + posts/24.html | 14 + posts/25.html | 45 +++ posts/26.html | 27 ++ posts/27.html | 26 ++ posts/28.html | 8 + posts/29.html | 10 + posts/3.html | 28 ++ posts/30.html | 6 + posts/31.html | 16 + posts/32.html | 21 ++ posts/33.html | 14 + posts/34.html | 10 + posts/35.html | 8 + posts/36.html | 14 + posts/37.html | 10 + posts/38.html | 8 + posts/39.html | 8 + posts/4.html | 19 ++ posts/40.html | 10 + posts/41.html | 20 ++ posts/42.html | 18 + posts/43.html | 6 + posts/44.html | 18 + posts/45.html | 22 ++ posts/46.html | 10 + posts/47.html | 46 +++ posts/48.html | 219 +++++++++++++ posts/49.html | 18 + posts/5.html | 97 ++++++ posts/50.html | 12 + posts/51.html | 14 + posts/52.html | 16 + posts/53.html | 8 + posts/54.html | 14 + posts/55.html | 8 + posts/56.html | 56 ++++ posts/57.html | 6 + posts/58.html | 8 + posts/59.html | 12 + posts/6.html | 10 + posts/60.html | 10 + posts/61.html | 24 ++ posts/62.html | 22 ++ posts/63.html | 10 + posts/64.html | 8 + posts/65.html | 24 ++ posts/66.html | 34 ++ posts/67.html | 32 ++ posts/68.html | 10 + posts/69.html | 18 + posts/7.html | 8 + posts/70.html | 10 + posts/71.html | 22 ++ posts/72.html | 6 + posts/73.html | 55 ++++ posts/74.html | 25 ++ posts/75.html | 20 ++ posts/76.html | 58 ++++ posts/77.html | 26 ++ posts/78.html | 38 +++ posts/79.html | 24 ++ posts/8.html | 10 + posts/80.html | 10 + posts/81.html | 37 +++ posts/82.html | 34 ++ posts/83.html | 12 + posts/84.html | 38 +++ posts/85.html | 55 ++++ posts/86.html | 26 ++ posts/87.html | 22 ++ posts/88.html | 8 + posts/89.html | 48 +++ posts/9.html | 24 ++ posts/90.html | 10 + posts/91.html | 48 +++ posts/92.html | 18 + posts/93.html | 14 + posts/94.html | 10 + posts/95.html | 60 ++++ posts/96.html | 14 + posts/97.html | 9 + posts/98.html | 12 + posts/99.html | 56 ++++ 164 files changed, 4827 insertions(+) create mode 100644 css/custom.css create mode 100644 css/font-awesome.min.css create mode 100644 css/monokai.min.css create mode 100644 css/style.min.css create mode 100644 fonts/fontawesome-webfont.ttf create mode 100644 fonts/fontawesome-webfont.woff create mode 100644 fonts/fontawesome-webfont.woff2 create mode 100644 haunt.scm create mode 100644 images/jsancho2.jpg create mode 100644 posts/0.html create mode 100644 posts/1.html create mode 100644 posts/10.html create mode 100644 posts/100.html create mode 100644 posts/101.html create mode 100644 posts/102.html create mode 100644 posts/103.html create mode 100644 posts/104.html create mode 100644 posts/105.html create mode 100644 posts/106.html create mode 100644 posts/107.html create mode 100644 posts/108.html create mode 100644 posts/109.html create mode 100644 posts/11.html create mode 100644 posts/110.html create mode 100644 posts/111.html create mode 100644 posts/112.html create mode 100644 posts/113.html create mode 100644 posts/114.html create mode 100644 posts/115.html create mode 100644 posts/116.html create mode 100644 posts/117.html create mode 100644 posts/118.html create mode 100644 posts/119.html create mode 100644 posts/12.html create mode 100644 posts/120.html create mode 100644 posts/121.html create mode 100644 posts/122.html create mode 100644 posts/123.html create mode 100644 posts/124.html create mode 100644 posts/125.html create mode 100644 posts/126.html create mode 100644 posts/127.html create mode 100644 posts/128.html create mode 100644 posts/129.html create mode 100644 posts/13.html create mode 100644 posts/130.html create mode 100644 posts/131.html create mode 100644 posts/132.html create mode 100644 posts/133.html create mode 100644 posts/134.html create mode 100644 posts/135.html create mode 100644 posts/136.html create mode 100644 posts/137.html create mode 100644 posts/138.html create mode 100644 posts/139.sxml create mode 100644 posts/14.html create mode 100644 posts/140.html create mode 100644 posts/141.html create mode 100644 posts/142.html create mode 100644 posts/143.html create mode 100644 posts/144.html create mode 100644 posts/145.html create mode 100644 posts/146.html create mode 100644 posts/147.html create mode 100644 posts/148.html create mode 100644 posts/149.html create mode 100644 posts/15.html create mode 100644 posts/150.html create mode 100644 posts/151.html create mode 100644 posts/152.html create mode 100644 posts/153.html create mode 100644 posts/154.html create mode 100644 posts/16.html create mode 100644 posts/17.html create mode 100644 posts/18.html create mode 100644 posts/19.html create mode 100644 posts/2.html create mode 100644 posts/20.html create mode 100644 posts/21.html create mode 100644 posts/22.html create mode 100644 posts/23.html create mode 100644 posts/24.html create mode 100644 posts/25.html create mode 100644 posts/26.html create mode 100644 posts/27.html create mode 100644 posts/28.html create mode 100644 posts/29.html create mode 100644 posts/3.html create mode 100644 posts/30.html create mode 100644 posts/31.html create mode 100644 posts/32.html create mode 100644 posts/33.html create mode 100644 posts/34.html create mode 100644 posts/35.html create mode 100644 posts/36.html create mode 100644 posts/37.html create mode 100644 posts/38.html create mode 100644 posts/39.html create mode 100644 posts/4.html create mode 100644 posts/40.html create mode 100644 posts/41.html create mode 100644 posts/42.html create mode 100644 posts/43.html create mode 100644 posts/44.html create mode 100644 posts/45.html create mode 100644 posts/46.html create mode 100644 posts/47.html create mode 100644 posts/48.html create mode 100644 posts/49.html create mode 100644 posts/5.html create mode 100644 posts/50.html create mode 100644 posts/51.html create mode 100644 posts/52.html create mode 100644 posts/53.html create mode 100644 posts/54.html create mode 100644 posts/55.html create mode 100644 posts/56.html create mode 100644 posts/57.html create mode 100644 posts/58.html create mode 100644 posts/59.html create mode 100644 posts/6.html create mode 100644 posts/60.html create mode 100644 posts/61.html create mode 100644 posts/62.html create mode 100644 posts/63.html create mode 100644 posts/64.html create mode 100644 posts/65.html create mode 100644 posts/66.html create mode 100644 posts/67.html create mode 100644 posts/68.html create mode 100644 posts/69.html create mode 100644 posts/7.html create mode 100644 posts/70.html create mode 100644 posts/71.html create mode 100644 posts/72.html create mode 100644 posts/73.html create mode 100644 posts/74.html create mode 100644 posts/75.html create mode 100644 posts/76.html create mode 100644 posts/77.html create mode 100644 posts/78.html create mode 100644 posts/79.html create mode 100644 posts/8.html create mode 100644 posts/80.html create mode 100644 posts/81.html create mode 100644 posts/82.html create mode 100644 posts/83.html create mode 100644 posts/84.html create mode 100644 posts/85.html create mode 100644 posts/86.html create mode 100644 posts/87.html create mode 100644 posts/88.html create mode 100644 posts/89.html create mode 100644 posts/9.html create mode 100644 posts/90.html create mode 100644 posts/91.html create mode 100644 posts/92.html create mode 100644 posts/93.html create mode 100644 posts/94.html create mode 100644 posts/95.html create mode 100644 posts/96.html create mode 100644 posts/97.html create mode 100644 posts/98.html create mode 100644 posts/99.html diff --git a/css/custom.css b/css/custom.css new file mode 100644 index 0000000..0f2a0c8 --- /dev/null +++ b/css/custom.css @@ -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 index 0000000..9b27f8e --- /dev/null +++ b/css/font-awesome.min.css @@ -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 index 0000000..e9eb78b --- /dev/null +++ b/css/monokai.min.css @@ -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 index 0000000..4f6ef82 --- /dev/null +++ b/css/style.min.css @@ -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 index 0000000..0f0cc84 --- /dev/null +++ b/fonts/fontawesome-webfont.ttf @@ -0,0 +1,564 @@ + + + + + + + + + + + + + + + + + + + + + + Flex/fontawesome-webfont.ttf at master · alexandrevicenzi/Flex · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to content + + + + + + + + + + + +
+ +
+
+ + +
+
+
+ + + +
+
+ + + +Permalink + + + +
+ +
+ + + +
+ +
+ + Find file + + +
+ +
+ + +
+ Fetching contributors… +
+ +
+ + Cannot retrieve contributors at this time +
+
+ +
+
+
+ + + + +
+ +
+ +
+ 162 KB +
+
+ + + +
+
+ View Raw +
+
+ +
+ + + + +
+ +
+ + +
+
+ +
+ + + + + + + +
+ + + You can't perform that action at this time. +
+ + + + + + + + + +
+ + You signed in with another tab or window. Reload to refresh your session. + You signed out in another tab or window. Reload to refresh your session. +
+ + + + + diff --git a/fonts/fontawesome-webfont.woff b/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..a4511ea --- /dev/null +++ b/fonts/fontawesome-webfont.woff @@ -0,0 +1,564 @@ + + + + + + + + + + + + + + + + + + + + + + Flex/fontawesome-webfont.woff at master · alexandrevicenzi/Flex · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to content + + + + + + + + + + + +
+ +
+
+ + +
+
+
+ + + +
+
+ + + +Permalink + + + +
+ +
+ + + +
+ +
+ + Find file + + +
+ +
+ + +
+ Fetching contributors… +
+ +
+ + Cannot retrieve contributors at this time +
+
+ +
+
+
+ + + + +
+ +
+ +
+ 95.7 KB +
+
+ + + +
+
+ View Raw +
+
+ +
+ + + + +
+ +
+ + +
+
+ +
+ + + + + + + +
+ + + You can't perform that action at this time. +
+ + + + + + + + + +
+ + You signed in with another tab or window. Reload to refresh your session. + You signed out in another tab or window. Reload to refresh your session. +
+ + + + + diff --git a/fonts/fontawesome-webfont.woff2 b/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4d13fc60404b91e398a37200c4a77b645cfd9586 GIT binary patch literal 77160 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 literal 0 HcmV?d00001 diff --git a/haunt.scm b/haunt.scm new file mode 100644 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 index 0000000000000000000000000000000000000000..84dff92238c58687385d29f53e7ba4c81ea2c647 GIT binary patch literal 15949 zcmeHtbzGIt_vdpj-60)vX{1ZKkp@W-5tX`hUO-w!6a)!LY3UM40WnY%Bm@!ZP^3kW zkQRlVOUWmGyWibEc3-dEo$K(N=gj+@=ggTiXXbI9-GSXN5UHlBhAISu!Jx(+dz%Ctx`zW{f{UQA zupq|0earL!2J?Wn1~e>Y9|Hr{!ejPz`k?u-_`sb_xj!!ZQDO4SqoT00_o0 z8Y^?(o7}*Y#M%3{kpr6KfTja9Y4*Mz@FHGw8Z&oa zKMT-_eTJT+(BrvZ(4%;~ zz#v&*018?;VE#Pb_%~WZM@{OlIRT-mr=kX_+M}GkEl@~=F%sor@9KgO;s=@Fe^flc zb5sA?dB_;t4+A$2>>ls$z9vt=#{~7sv9_&aG#G@x6tvgTE~*DIhZU_K7q}qrnA~C8 zq43_wfH?*Iy{-bA{$9~SfOp)ELp}f1^&Ywb9hRWl0Xq`@=7ZyMhoj*DaPh}*PTygW z9jJ#z5a?O~{gMS&?fuY#9Dz(MfH0szfRBxy9q6zGG+GiL;L-j-_kSB)(LUJ$^%ZDC zuLde;(6Q13a0jZ7arbqh8KTER>lL^^)KLgx6Riq8K0y6$3(#|TZ3T4a!F|WU_2~&{ zZQ9{3^flW-9DKcH^d-+#Q&-+z2N5WpS(+r5ka?LUwYLjMqZ zH~-f2|H!QW>p+OT(S(C+gZ}-qgzvRu?(JXx+4{eelerhcq`(r8QK1{~FUKMp7rJrm z?tiCM|NmKs9so<|UcuhW2ltZBF0)MU|2=iPIYBJCpym7PL+t>hu&K_`DO({_g;We67=8wVQ;7Y7Fi4-Xfgkb;Pi zfPj#e`~(RFBOTL8Mmh!t1RFmmf`ylrfq_f>6tAF=sHi9tr=+ZeunfP5s4!Xy3=a>F zkbsbeh=@j*nSojOf4YDLjtm#_fqXDvED)RwhCv3~ZG@PBomk*a4E-{8P{4}^CKfgh zE*?Gs092Dga2N[{Zz3lqJB2BKd~Fv+mUnS~UwPv~3Vu((qQ2gPLJvMN8o#GZfEha7@DW!ZyMO95*L(|acobh>+3#L}qNE=%_dj}6s zudCiZzJ9^CZij^42@8*ni%&?rpOl=Eos*lFUr<<7Tv_$Fx~BF?-P6}^8k^oWx3so> z?C$C9>mL{#8XKROoSL5bI{R(;$I9y3`o`wgPjtV)27SLgm^kQu z!QkGYVvu2CF$-anE9&D|xSwDV4#K5Sipi>Iz+)9LSfaEUO7iH@-^qr0}(v;VAP zH~*Jgfey6rvkwVH%{V0OE{OE^ltx8U=yhwK4?xdFLbzt+CE z@0^~RM)6Tt>{Kfquh1kZQuOQsh@pX`Z64iFLVsw9=lWLb{ zR^p{sQG$N`ozs#m(Nk>X{+_>HzUixe98Ga$)}ZXZ2+gZjRkpI1jI#Frat-aBZdAj~ zgpgc8p2^M6qHdr4)f-V#u+>+k{_6dFr?qfxG=i>1UKqbzsQzBoQBU^-*6$_#oo@3U ziTGScU%{Bix0}sUctk}V`@WiAB~sDl+KSA>ht74LEcj)|_c$WDEwbqePC;fK24l)o zZKqo!{v_|K7M*j_#Y(V*M}2X01B|2Iqx{zA?Zt##h;hpEd1zd-IyZ8js!inZix>^P zU&m%K(c+iN>hO|y)rp<5oD(56A@}0c1+2lhqa%;fZ*7pPznjWJ<*vPwxt1{D&?(a) zlUb$SG!W~{nX)z-w$fxfmRDX{(>G&HmWXAx!0ENt&X;#A?-y^xV{0 zc;j$%_RqeSrSw%Yk)(~{DA?)hFIr-EH%cE?;hda)rWHoYF~ZMnD=p&Sxlrnp*OB>I zAu@<5kO4)qwNriH-R?Z6J#<}aZSI}4nx!cl+qSXwQ_6^#^1&N{r?~IbDyC6~dRgQ< zbhU4{ane)I&dy7enF+I1@RW5vfj|F3>e#;aiG`lv-GxW-D;#}{9wX;-E@%jq2m6ri ze7~kW!*H&kz0^YDhqSOBrCK|-KP1dmq@7kc{6N9Cc}hi^%;Ql5E3~qj%V|I9F}I_` zEcs<(RMahais=Rpr4nOx)LGWo?>OYA%$q4>5dK@71uCy@64bNo@Fb$YZWXJT-1dHurY}UR%tK&ztfe z&ZpWvWf%&{WaSb&^;WUWIKKJeJI5kR&#DA1UcMjY78xdl6CWQ~| zw`3`PZuh5Lu{+BilN@nt;vH^~!deHr%^G8F{fTa*4?Cin<(>nc)sWx|U0KJBkD}WT z15f8-g(eC&q)L=t+h{bcZhG^m^09lNO!?%*&yS6JT&{oILdAZY{aCC-AFqTH-8G5C^E0(eI@jgp?Fv0oY zZT82ql;(@o={rUju;&?m6$Jk@$dm3lFPb2&IE<3V*^F`=7kv@N{kEj5uCq;QVx{!k zd*vT3Bi0^kC7%S;%DWa_`Mx{HibpA3)BnXQ{4%R~#-LL?j#fdJq0dW>Bhq}78#!EL zHRN3<_e91RzjMYxzX?;}ru)aDPaST2lyArvCavlwcOlJaT^qZZEsn?u^U_PY1`?9A zEgMDWZNB+AdEMtOw~xB5;5|XvVmdh7dg{m9J{(NXg3h9EWFg@i2{9s}9xXp-e)jTQ ztg-*p8+@NZ*dwmHnxjp}OIF}DDX*V(37OjB9VUKV$an`22XkVyV6#`2qjO%$jOqtD z<9UHtp(j6l7yC*V^n`Iad*Hnv6B44OoHcbKd7?B!e|o4$x3euj$rzm2h00XUi-=6A z1T3@+ssFUv>f@*y$Eq|Ws_#ZH)JYQTLj5_7DP;o|Cai24h*rt>SZ*Tk`)%x$-J5<&x~E7eQ3lZv2qoS~3<=kF|2%bXnW3&x@NqdkGty6 z)A*#kx`$Ytrs;XX2-E%L_i7Utp5|u3YlJCQqBXO|{PSY?MK>%BR9eZCIg8ImuL}R;Q<~LlEC!dd3J}}hc$rUVDJ5QWT z@+>MOwPcRW)RZzZUULh#zMy}p12xOqo)^Z4n0%nGbB0s;YqZ4&nE+%0qUVfLLA0#l zG|mVy$yjt&=^DF6&iTmpJ8!t#R7obTh!2j$$DDQSsb|^@DqZ0CIO!DmY`k?rDk4zw z7m+>nqbOe$)2|BxrE*PHr{8?1rzmgz=8u1>zourRuguZ2xJ#lzPhCDlGQ0Y2_{i)V z@$oLi{V6x~ zcfgJ7uhjA`_6X2AMLt%520u^4e*XOW>8wSs#OI62MkSN;HIkjw4o_|JkdBm9>MqWC ztn6-L8T6x)1ViPIKE*%82w|M96?{-*MlQ*Jab@Ob&pi$!46|ysDW1wNC6^$L`wAGu z7u2r18?W+N>d;@Rd8zp1%vkdE=TDeJ$A#tT-Z!_XAu^;sQX;K8m87P#r~*YOUw2@l zvQ(l}2n%}1Qck5M+pTImavxMh=+VtXFka-cK=#7w#lH6 z_~Pq9T^M7^kP_WTVwEtt4x|GRXy_OWG$x!uLzII_GM&J;tXZHuIL*!^9^$` z`L2;|{MPT}%f3jJo2Bo^Ja(>gKO`V2H;o9c5pAB*ewix$bn?r!gl~^ZQL^)vpAe4u zvdN11N~sqqo$oP5_@za^1L;M3xHe^__@PctFWiy5nMIEWh8COrJaJ(*b>Tu8$-F|pzLC?*g>_s05KZM`Gqz_9A`5l84Q=Zi z-$@Q7qT9iG`8vGnM8g_9YV_ru1qN&bHOf>rs?ME9b*omvTU{z1P3b5u9Xea9w3rX# zn1MtF5>b<-DEIys6z7sF5_M`W#FYp1-IODuFtohWq|0w}Wy~f1UWAMCK$i-0mF3W- zz8Kp|f!U_>&l1{rC?#4Yv%}Y{O30e{THf5e18c>2gxRIyc7BIdswjZ#rodXn?{B%( zW%h-9lSE+__cZAJgwuk5;&YYsP53iu&fa%-Fn0UILKS7#cgCva4dFz_E${4bo-Edw z7rMKHyJG~+cAlPYQUU@l9{d*8u9irCD_3U$9}71D@L$gYkc_;Kn}wAl(i35cw6%AU zmTw>Q7H2)`@JRzOHnQc^%rSU^~q z4ZhTHi8_xse@unlZ zi2>5X)yZoQFC-y&06oqpI>f6`qlK5niaUZ{PS2?+=b3L-p^R{RI1|E2ZFcGa_9&X!1&oQ;48 z|LFtdA@2yJVW?~9hD2H$fDm%A^+3nzew-U3-S=+x@0{%A(7}S9M1b4_?cE%p4z&M^ zvi+b}0g-=j$RvlRk4~I~`Gt@A@CR~a-C+oTPzL$H!s$PVmLuptl$-%NJnj9E*8hQ) zKiDHR==gAT0RiWs?CN4;Z|jBHpLKiAKs)9i9=m{0wnQkS5Pbhb$NhJ7?>q1?IFZ&$ z_MRSkNR*zv56BY;kpu7j7wt#J8`^n!f|;^6)W#N0UPw7{elanGiZOx<9Zf=e(RAuS z*+0QYdKBG|C{GZF`#MDU#f0~C?1k8&_+K$cqK84MWN+cIFD?j<8-e&y0PKhOpY|hB z9SfhoD*g8d{{!|%0TOf`#J3Jeo^pB?Xjix#JXYs;(~*FxlZA&J0zIm37AOy-k*^z4 zmJ^-Jyiiui{cOIUz4w5Bvb(CQm4%Zw(#6)(PEL|v0^#g@@R;KbM^8bo1*o&Go*)Yf ziHadCeLayL2rn1#--`AwNNa?(g{Q@#l}E@U;d35H6c~1A5RnLhV-}z-2hnjj-S!Lw z_eWC>th9$V{SA7gTG`df6~u~#6;jT_KuzfYevEsB+zUgKGa!+>?B!PB(~^f1`tMDD zmAUXoMo3ar^xzSDGRK;ZWcJ*r=Val6{7Xg_5fKyQmk>V6ZfNiS1NARTjxS0;y+a`kI2`>C6io0B3m1L7f`yNRgN;jwPe@3BPe4FKOioHfOh!yV zKuSeQc7lSEl9G^wnudykhMaL^XsPm+n@=X4tFh1jy>12UIX0%10dYv94>eqm6xvj&vBMIlfoRjq*xZHP768mn$eS%>AMFookA; zep~H>4&t^X$*G>s^slykM2IX^w$hL1(xc;VxneX$3Qn!wIyaEdj(bBDiyfEw^W(S3 zm86n%7<{0%xW}h8hdc1|OwZg>jl>70N}<8$Bg51R7*u@LE}@=^)^i`sLpa}j8gdk{ zn5gnCG?tym7V^J5i^Z12`PDb;$@qfH)4KytMs_ZfMEf+97$8eyd+G?}72CBW=~IOi zx9Lx>>_T9KxJbcxfKxk6Fi!i!1O^C>iA6?^eS(6NnMH_In39T31dJCh7)KZu{NC?v zWZaX86wdA!cghgosE{?4r8aZjI=wv!0c-T!0<^WZv7}bi-x~&+eBb?0X|tjGq3~>Z z)W`J{75~<+RqXda*q)J_u}Mr+)d;OLBQgAHuM#JZwK)~d*G}l5qm%Kc7Pfme_ZL3N~%MLTWf20 znZ%U)heE&Z)V`V7wQoDE4;+h6$r;y+P)a8{V)_&>ebW?cl_a){`S?Wgblk-_h!S1C{-`_G1y8EyNy`I+3sdTL5B|$mmaYUFidv5BF>~!?M!29f+BbCiL$J9pKfi1;eN3zq7ljEsBMBCa$7{9BY z&oLQ@DxHz&2%}eBcAQ?^EI(z|`duQvWt;XiM?71(ntcWF@6j!3>yVDPR@Eo0;;hEv zw4T>4&6Bs_*hxC-TCa#SUAQ)X#^vkySfr&09^3H7_2|uUd8( zHZqWHiBSIjlwwJ-E-rqTRi;DYO*mfN+lkp|#w7Rdm!Cd*q;p*@q9HD5K{1=3qYWtT zbQ6^h?q?Qp4%vmKYtAeW_1zyVQk=J`cPVwyWyV*(XT1xN_XTPSf3#al`h8EM+=TTR zYTb)uz!-VCm!9k?35Zk{^eHSlO#kE)^eHSkGpP_JLRe9sbuUIivplRi@_tOJi13rU z;RUO$A_A}H(%r4H#}MY`F$;3Lz%gw(3IVH z#arOLSa1v;l0wZ+y(BJGC_ssNn4=8)P5{T<)^9BFIRl?QZQeo!bX}iu9n+aF3O5du z8235J5O7DbCI8V$GPQG@&VPo9pg8*VX~3B`=98*DNu+k%dApgRik{LzdA84`{`3VOQN(GwOdBKkpl zorR-2dod|2n{cx$M~2S5rJd=-s(q~JHu-(3$u~7l-S1yd#=T0~4oqOLE6OGj>U3gH zn|xakhnx4zUMnH@6U0WJ8X!K*UbZ<({{e7rjHSoCOZkgJKX$mZ*w`rDY1`u7f;;Ef23kO_vnV{w(t$o-0Y{T0SYy z`og5Ha+d5WIw^UOc$0c!>ZE0kHhGV-N~H1uK~SDBCQ1I{f1n)1_rGBKVa4(2Ja_-eD9ScVrDew~!-k5!T(=?wqvSPtLH+ zEluN{F~Evs=+((CT-Kt$9V#Hc`ebPO+0#Vnxpm}1aE@wmRdo7e2OpieP=Vg-VX(2x z#AmU@+|!08Z#7w%->VUY`v%QSbze29wSMx6@$}^uHIt|8o%g+r9O$9BX7|x@t*I(RmyTmfOZw2qX5?E2F9!Nnk z8x>mJ(xe!kMkQCiUO-eOriHtig+Hv4cxQH^$Y`ae$ zsLSY0mZegZ4k^5*4^w(ZC>zz--D90>B4)B4D!Oq6%pP`9Fk8?I_tE|e29bg9Y{0w$ zU)WT1jV(1SAFkT+%xto%0|}8BxfKeVs#f1z4DXLej}&2s>I7<6$Ca&+fA3d5fjh7Z z#kySmOsE$00$y+7M{RuDOyFT5_M~kzmiDU!!HZ(AH`^Ij7Z&SZ4my68QW3(MuzR}F zW^vNgZD+yl#snti>&@Prmpy~22<$w%yv5F36#L23-%lk`Wp7yNp`_LAi5NC%AB%pu zL42~T-I@Plbn^3%jAuQYy65R=(jO*5NGZCY>^JN$QPY_6KT}h(B3zDCS@EOQCSEn&+()S@8+# zs-|X@;8T6WBkS#rL#zfg<6Mz*)hbH&du+~|g&6geoUP%Ob?5L?-h=V$@-#(Oj5vw=V zdgH!l8nWg>?vO-{*$Ov*)4WO|@A&d|8f}KW@RD_#)9(pQwYU5>xmh3l6_qd_&l1*+ zOj9geGgh!Psk($9D4&mz`sKu4XF?lX&%z8(ClWfH*y}^Tx^-8tRw+5iQRSHrd!17C zvuyYKOzjtD%Sms3o_)S*<-3|gQz?}m;Cl;yv~{%K{e7)})Re+9In3g>XXM+oG6U`f z1F!O#(Cx2paz#^_G*j4b5VI?>2_AvtSPR4b4a|?(xwDvR_r8CGj1o8z$)m%_1ClZtFw zi^^`-fwc(ZS+OhCrfB7Oa=Z1~2!dtAE%%=SmM(FP=s=b)-$Xl`WBT$TaBSP}AQH%SX8(w4<#mbKgwU6v&cQR5( z;`yI(qPO9DUv)v~1(S44LHCI+DrWu*8qUuYxD`u|b z4<;GhMY&>NF1J>p@<+xai3x<_N-hY341yp-XAtmSdGvm^mqADs^`m${Xk*F9 z_OyT5^zEBbcUTpEgz1vzBtQS)iYrF-jgg1csiB5?ECt zd9%f}K^u=*q{Ntd|C%mMX+C#WobdEEXQ7TsP`2r2h_0t!LT3iG_7&*|?zWA+8iC4Q z5Nw<~C|6D9GkYCwKKr=D-Q=>KudfNN+V>AL;}LQRE6ip}(80P(Y>9_WDNHz5 z%Cb*d#2dSc%Z67+`^t!@1o@9nbUHn71`OlyGxq&-YC)N<5#0m!wZ;P=H*|>GFLiI3r2Zhz8cBCPwquR zJjSnU{SwzfFnf#!-{@fqQTeIJ$T+BrDXHiQ0d8J$BC=nPb-~mAmpu8+yi*aG*%#iy zCrVU`y07c5wLcvf%Xq{8rSY@dJ5Tf9<_maRA<3h+6<^$|5{YMN;&iaV7@>->dM?Oi z6-}gjh6&^QY3(L!j*kmGIsI!~F-?K_A1I6dtTV?p-Y_y|=xCj3Sn3-4v(AuK;l{HO zKU}0FbiC+TLu@f@M;-Y5%Zci4=^%|*Vq5#QXAEJloHEJ#@Bb&FfV-5_-!V%9uy(#Wi-l<(IpD~{YsG@V*cVtC~qLqT}yjGDI3d(_+WeOnE8 z&SWLHMsM(QYFQ6sp1Hbsqa@feE^y6nIwJT!%)UaP^;VuyT6y}%1o724oZ?^RqLlf~)3$UpC-Q%{G0~oaYPB6qm{picI!ygwcqq z26n8%tJ9e?rEpSzPW+O!%m-(=xQW1GMMJ`7zmt~USL@iPSd3C=u41XU69@5=o5Zf( ztb8U3)eW8)wGnw)!2Hs2ps50%!W#=OD3{AuqBqbcRiB@8BO;ca;*~me@&=ydKy5r_ zBx>s5uCM5fD7=+*RTba;7Evnelh+D^P>!(OoVUZvQ1K7rTU#scBLmtp{=^^5` z8@e3c^-DDJy$w-ixbFgUc*J_~8pAE$T;e&AISI|VvV`X{`2O;$7-ZEc*G8DGBvO7M zSY)Z^PXDIkpO&1~d1thwNI(=nUncD`Q^N+Q-CUY9!jNg9;-(K&Bj{odTM3S<8VKW7 zBE$*hXqcC1mOi(LyLxks6h@zN=WUuWuJ*?#+>F6wK@7!m0+M<< zehI@|dnZ~EbN&9*$XlYMFzwvimDz4e5-Rr^CX*Txa4-JMl*%QfGZA<)z^T_W`9^_C zrL{L$+|u>@^6Tfzj7z6qL?P#Qp)1mNY_XmV|6IQJBJSGBX@T1XakkUCCNP=|W}~Zm zly|z@er&2Pu_zC4)^OY9nd-E*lEyVX?wZr3zPf9&C_lK+$-Hv(Z{%RX-{? zC#LQX5alobsMd^TbDZHPNXrOv!!0Cnv|z_?^b)y#ZLs?8w3f?2h_5ZP&svz^2;EI` zp0|R{>NJ}zIK`yIp(o{pk||U~W+rF84jorSw3cC>F|)rt~3{V^JP=dCWWwS}>8SJtUaHD0)+?54qo&~E&+ zd^2BN%5tu>MX%JXKyU zQ82QSv%P$eT_vSJx5XgMVu7dd6G6Z;ajR z)RHkGEqivRD>Ti* vxEc=R>1o4Raf{59=ED>4>;@_iU +

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.

+ +

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.

+ diff --git a/posts/1.html b/posts/1.html new file mode 100644 index 0000000..a56fec8 --- /dev/null +++ b/posts/1.html @@ -0,0 +1,32 @@ +title: Consideraciones sobre las patentes de software +date: 2003-09-12 17:03 +--- +
+

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 artículo de El Mundo.

+ +

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.

+ +

Aunque Soto contestó a más preguntas vamos solamente a discutir sobre las referentes a las patentes de software.

+ +

¿Qué opina sobre el tema de las patentes de software? ¿No le parece que con los derechos de autor y el copyright basta?

+ +

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.

+ +

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.

+ +

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.

+ +

En su opinión, ¿puede desarrollo y soporte del software libre constituir una nueva industria en España?

+ +

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.

+ +

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.

+ +

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.

+ +

¿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?

+ +

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.

+ +

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?

+
diff --git a/posts/10.html b/posts/10.html new file mode 100644 index 0000000..7b4dfb4 --- /dev/null +++ b/posts/10.html @@ -0,0 +1,10 @@ +title: Viajero y la IA de la mano +date: 2003-12-01 16:33 +--- +
+

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.

+ +

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.

+ +

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.

+
diff --git a/posts/100.html b/posts/100.html new file mode 100644 index 0000000..7c11f47 --- /dev/null +++ b/posts/100.html @@ -0,0 +1,12 @@ +title: DOM Viewer +date: 2006-03-13 16:52 +--- +
+

Durante las últimas semanas he estado trasteando con Textpattern 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 WordPress, 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.

+ +

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 Document Object Model (DOM) (Modelo de Objetos de Documento) 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.

+ +

Al final, desesperado, empecé a plantearme el hacer algún script 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!!, DOM Viewer hace lo que necesito y además es GPL.

+ +

Cinco minutos de reloj y la lista ya sale donde yo quería.

+
diff --git a/posts/101.html b/posts/101.html new file mode 100644 index 0000000..267536b --- /dev/null +++ b/posts/101.html @@ -0,0 +1,8 @@ +title: Testómetro +date: 2006-03-17 09:58 +--- +
+

No suelo hacer ningún test friki de esos que hay por ahí, pero para uno que hago el resultado me encanta :-D

+ +

indy

+
diff --git a/posts/102.html b/posts/102.html new file mode 100644 index 0000000..329326e --- /dev/null +++ b/posts/102.html @@ -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 +--- +
+

En esta nueva entrega del borrador de la GPLv3 seguiremos estudiando las últimas secciones que completan la nueva licencia y que velan por asegurar la integridad de la misma.

+ +

Como ya es costumbre, recuerdo que estas entregas no reflejan ni traducciones ni explicaciones oficiales de la Free Software Foundation y se trata siempre de mis opiniones personales.

+ + +

12.[7] Liberty or Death for the Program.

+ +

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.

+
+ +

12.[7] Libertad o Muerte para el Programa.

+ +

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 royalties 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.

+ +

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.

+ +

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.

+ + +

[13.[8] Geographical Limitations.

+ +

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.]

+
+ +

[13.[8] Limitaciones geográficas.

+ +

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.]

+ + +

14.[9] Revised Versions of this License.

+ +

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.

+
+ +

14.[9] Versiones revisadas de esta Licencia.

+ +

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.

+ +

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.

+ +

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.

+ + +

15.[10] Requesting Exceptions.

+ +

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.

+
+ +

15.[10] Pidiendo excepciones

+ +

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.

+
diff --git a/posts/103.html b/posts/103.html new file mode 100644 index 0000000..d06fefe --- /dev/null +++ b/posts/103.html @@ -0,0 +1,8 @@ +title: Hablemos de la GPLv3 +date: 2006-03-29 07:49 +--- +
+

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 V Jornadas de Software Libre que organiza LinUV en Burjassot.

+ +

La asistencia está abierta a todo el público.

+
diff --git a/posts/104.html b/posts/104.html new file mode 100644 index 0000000..f0e7934 --- /dev/null +++ b/posts/104.html @@ -0,0 +1,8 @@ +title: Hablemos de la GPLv3... otra vez +date: 2006-04-03 10:20 +--- +
+

Si alguien no puedo estar en Valencia, esta es su oportunidad ;-)

+ +

En esta ocasión nos podemos ver las caras esta misma tarde, de 17:00 a 19:00, en el aula TD1101 de la Universidad Jaume I para seguir debatiendo sobre el borrador de la tercera versión de la licencia GPL.

+
diff --git a/posts/105.html b/posts/105.html new file mode 100644 index 0000000..5370a54 --- /dev/null +++ b/posts/105.html @@ -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 +--- +
+

Penúltima entrega de la serie GPLv3 párrafo a párrafo sobre el borrador de la GPLv3. Estas últimas secciones de la licencia nos hablan de la exención de garantía del programa protegido.

+ +

En esta serie de entregas no se reflejan ni traducciones ni explicaciones oficiales de la Free Software Foundation y se trata siempre de mis opiniones personales.

+ + +

NO WARRANTY

+ +

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.

+
+ +

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.

+ +

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.

+ +

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.

+ +

18. Unless specifically stated, the Program has not been tested for use in safety critical systems.

+ +

18. A menos que se especifique claramente, el Programa no ha sido probado para su uso en sistemas críticos seguros.

+ +

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.

+
diff --git a/posts/106.html b/posts/106.html new file mode 100644 index 0000000..5a2b0c7 --- /dev/null +++ b/posts/106.html @@ -0,0 +1,33 @@ +title: GPLv3 párrafo a párrafo +date: 2006-04-13 11:02 +--- +
+

A lo largo de los últimos meses he realizado una traducción y pequeña interpretación del borrador de la GPLv3, 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.

+ +

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 Free Software Foundation, por lo que mis opiniones y conclusiones podrían estar equivocadas.

+ +

El resultado final es el que sigue:

+ + + +

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 La Constitución del movimiento del software libre.

+
diff --git a/posts/107.html b/posts/107.html new file mode 100644 index 0000000..1c60a45 --- /dev/null +++ b/posts/107.html @@ -0,0 +1,8 @@ +title: 3rd International GPLv3 Conference en Barcelona +date: 2006-06-09 06:39 +--- +
+

Los dias 22 y 23 de junio tendrá lugar la Tercera Conferencia Internacional sobre la GPLv3 en el Centre de Cultura Contemporània de Barcelona (CCCB). En el programa provisional 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.

+ +

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.

+
diff --git a/posts/108.html b/posts/108.html new file mode 100644 index 0000000..b030e35 --- /dev/null +++ b/posts/108.html @@ -0,0 +1,14 @@ +title: Segundo borrador de la GPLv3 +date: 2006-07-28 08:32 +--- +
+

Ya se ha hecho público el segundo borrador de la GPLv3.

+ +

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.

+ +

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.

+ +

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 web de la FSF sobre la GPLv3.

+ +

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 :-)

+
diff --git a/posts/109.html b/posts/109.html new file mode 100644 index 0000000..859b134 --- /dev/null +++ b/posts/109.html @@ -0,0 +1,14 @@ +title: Falta una semana y ahora se despiertan (EPLA) +date: 2006-09-18 17:20 +--- +
+

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 menéame, desde que cientos de planets 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.

+ +

Todo esto viene a cuento de que dentro de una semana se votará la EPLA en el Parlamento Europeo y ahora, cuando ya estamos encima, 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 "The EPLA is the new attempt to make software patents enforceable in Europe".

+ +

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.

+ +

Resumiendo, si la noticia no aparece en los cuatro blogs de turno el activismo español es nulo.

+ +

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.

+
diff --git a/posts/11.html b/posts/11.html new file mode 100644 index 0000000..6299df9 --- /dev/null +++ b/posts/11.html @@ -0,0 +1,18 @@ +title: atitvout de Lennart Poettering +date: 2004-01-05 15:03 +--- +
+

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 atitvout.

+ +

Como no, mi primer paso a la hora de configurar la Radeon fue usar los drivers de ATI del proyecto DRI 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.

+ +

Mi segundo paso fue buscar información en la propia web de ATI, en la que encuentro dos enlaces, uno al proyecto GATOS y otro al Linux ATI TV Out Support Program, el atitvout.

+ +

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.

+ +

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.

+ +

Por si a alguien le interesa, al final descubrí que podía ver mi Debian por la tele usando el driver vesa, 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 vesa me quedo sin aceleración, y no mola.

+ +

Por eso voy a intentar mejorar un poquito el programa de Lennart, a ver qué es lo que sale.

+
diff --git a/posts/110.html b/posts/110.html new file mode 100644 index 0000000..85ec396 --- /dev/null +++ b/posts/110.html @@ -0,0 +1,44 @@ +title: La votación de la EPLA se aplaza hasta octubre +date: 2006-09-21 16:51 +--- +
+

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 lista de eurodiputados españoles). Hay que hacerlo siempre por fax o por correo postal; si usais correo electrónico no lo van a leer.

+ +

Hay que dar la máxima difusión a los siguientes mensajes:

+ +
    +
  • El EPLA dañará severamente a las PYME europeas a base de pleitos de patentes incosteables e innecesarios.
  • +
  • El EPLA legaliza las patentes de software (por vía de jurisprudencia, como hicieron en EEUU).
  • +
  • El EPLA es la puerta a los parásitos y extorsionadores de patentes ya tristemente famosos en EEUU.
  • +
  • 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.
  • +
+ +

A continuación también adjunto un modelo de carta/fax para enviar:

+ + +

Estimados señores:

+ +

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.

+ +

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.

+ +

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!

+ +

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).

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

Reciban un cordial saludo

+ +

[0] http://people.ffii.org/~abarrio/epla/The_EPLA_Road_to_SwPats_es.pdf

+

[1] http://www.ffii.org/~abarrio/t030424eu1.pdf

+
+ +

Toda esta información puede encontrarse en la web de Alberto Barrionuevo sobre la EPLA.

+
diff --git a/posts/111.html b/posts/111.html new file mode 100644 index 0000000..1f6a600 --- /dev/null +++ b/posts/111.html @@ -0,0 +1,18 @@ +title: Web 2.0, GPLv3 y la difusión del software +date: 2006-10-03 08:20 +--- +
+

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.

+ +

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).

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+
diff --git a/posts/112.html b/posts/112.html new file mode 100644 index 0000000..8e48ad0 --- /dev/null +++ b/posts/112.html @@ -0,0 +1,16 @@ +title: Las web 2.0 startups y la GPLv3 +date: 2006-10-04 07:25 +--- +
+

Siguiendo con el tema del anterior artículo, se nos puede plantear el siguiente caso hipotético:

+ +

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.

+ +

¿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.

+ +

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, "y sin embargo se mueve". 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.

+ +

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.

+ +

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. Preocupémonos cuando dejen de copiarnos.

+
diff --git a/posts/113.html b/posts/113.html new file mode 100644 index 0000000..fe979e1 --- /dev/null +++ b/posts/113.html @@ -0,0 +1,22 @@ +title: Sobre el acuerdo entre Microsoft y Novell +date: 2006-11-23 08:55 +--- +
+

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.

+ +

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.

+ +
    +
  1. 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.
  2. + +
  3. GNU/Linux NO 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 NO infringe patentes de software.
  4. + +
  5. La GPL y todo el software que se encuentra protegido por la GPL NO 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.
  6. + +
  7. La comunidad está a salvo y los desarrolladores pueden seguir contribuyendo al software libre con total tranquilidad, ya que GNU/Linux NO 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. +
+ +

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.

+ +

No les sigamos el juego.

+
diff --git a/posts/114.html b/posts/114.html new file mode 100644 index 0000000..2fe501f --- /dev/null +++ b/posts/114.html @@ -0,0 +1,9 @@ +title: GNU/Stallmans - The Free Software Song +date: 2006-11-23 09:58 +--- +
+

Porque no todo es programar en la comunidad del software libre...

+ +

+ +
diff --git a/posts/115.html b/posts/115.html new file mode 100644 index 0000000..a1ff24a --- /dev/null +++ b/posts/115.html @@ -0,0 +1,26 @@ +title: Lotb, un sistema multiblog GPL +date: 2007-03-30 16:49 +--- +
+

Lotb LogoLord 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.

+ +

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.

+ +

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.

+ +

El proyecto se encuentra ubicado en Savannah. Se puede acceder a la web oficial de Lotb o a la web de Lotb en Savannah para más información.

+ +

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.

+ +

Lotb Scheme

+ +

Los mensajes se agrupan en dos tipos: síncronos y asíncronos.

+ +

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.

+ +

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.

+ +

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.

+ +

Existen unas listas de correo para preguntar dudas o comentar aspectos del desarrollo y las FAQ se irán completando con el tiempo.

+
diff --git a/posts/116.html b/posts/116.html new file mode 100644 index 0000000..74cc4f5 --- /dev/null +++ b/posts/116.html @@ -0,0 +1,15 @@ +title: Ya se debate el tercer borrador de la GPLv3 +date: 2007-03-29 17:45 +--- +
+

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.

+ +

Los cambios más relevantes son:

+
    +
  • 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.
  • +
  • Se han simplificado los términos de compatibilidad de licencia, por lo que ahora son más fáciles de entender y administrar.
  • +
  • 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.
  • +
  • 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.
  • +
+

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.

+
diff --git a/posts/117.html b/posts/117.html new file mode 100644 index 0000000..fa5fdc3 --- /dev/null +++ b/posts/117.html @@ -0,0 +1,10 @@ +title: Extremadura a la cabeza de España +date: 2007-04-14 18:35 +--- +
+

Estos días estoy en la iParty9 de Aditel, 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ó glo) 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.

+ +

Por otro lado hoy me encuentro con el interesante artículo Extremadura: Punta de flecha 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.

+ +

¿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.

+
diff --git a/posts/118.html b/posts/118.html new file mode 100644 index 0000000..82e2ac3 --- /dev/null +++ b/posts/118.html @@ -0,0 +1,10 @@ +title: Descubriendo bogofilter +date: 2007-04-19 14:51 +--- +
+

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. Bogofilter 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.

+ +

Hay un artículo muy bueno sobre el tema en Bulma, Bogofilter mata mejor, en el que aparte de explicar en qué consiste el algoritmo que usa el programa también explica cómo instalarlo y configurarlo.

+ +

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 procmail. Si no lo conoces pruébalo y te sorprenderás.

+
\ No newline at end of file diff --git a/posts/119.html b/posts/119.html new file mode 100644 index 0000000..6940390 --- /dev/null +++ b/posts/119.html @@ -0,0 +1,16 @@ +title: Jugando con FVWM-Crystal +date: 2007-07-26 17:38 +--- +
+

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.

+ +

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).

+ +

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.

+ +

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ú.

+ +

Esos scripts pueden ser ejecutados como usuario, con lo que puedes conseguir que tus programas hagan maravillas con el gestor de ventanas :-)

+ +

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.

+
\ No newline at end of file diff --git a/posts/12.html b/posts/12.html new file mode 100644 index 0000000..36faa19 --- /dev/null +++ b/posts/12.html @@ -0,0 +1,10 @@ +title: Por fin vuelvo a respirar +date: 2004-01-28 08:50 +--- +
+

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 lo que no te mata te hace fuerte.

+ +

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.

+ +

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.

+
diff --git a/posts/120.html b/posts/120.html new file mode 100644 index 0000000..5684a06 --- /dev/null +++ b/posts/120.html @@ -0,0 +1,31 @@ +title: Pequeña guía de la GPLv3 +date: 2007-11-11 07:13 +--- +
+

El FSF Compliance Lab ha preparado una pequeña guía de la GPLv3 para desarrolladores, explicando de forma fácilmente comprensible los cambios más importantes de la nueva licencia.

+ +

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.

+ +

Haciendo un poco de memoria, decimos que un programa es libre si un usuario puede:

+ +
    +
  • Usar el programa para cualquier propósito.
  • +
  • Compartir el programa con otras personas.
  • +
  • Modificar el programa para adaptarlo a sus necesidades.
  • +
  • Compartir las modificaciones efectuadas en el programa.
  • +
+ +

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".

+ +

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.

+ +

Es en este último punto dónde más ha avanzado la nueva versión de la GPL.

+ +

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.

+ +

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 DVD Jon). 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.

+ +

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.

+ +

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.

+
\ No newline at end of file diff --git a/posts/121.html b/posts/121.html new file mode 100644 index 0000000..a4977c0 --- /dev/null +++ b/posts/121.html @@ -0,0 +1,18 @@ +title: Un canon para promocionar la cultura +date: 2008-02-03 20:34 +--- +
+

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.

+ +

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: Sí al canon. Toma ya, con un par.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+
\ No newline at end of file diff --git a/posts/122.html b/posts/122.html new file mode 100644 index 0000000..314773d --- /dev/null +++ b/posts/122.html @@ -0,0 +1,17 @@ +title: El software libre sí crea mercado +date: 2008-02-21 20:16 +--- +
+

Alexey Leonidovich Pazhitnov, creador del juego Tetris, en una entrevista publicada en Consumer afirma que "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."

+ +

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.

+ +

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.

+ +

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.

+ +

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).

+ +

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.

+ +
\ No newline at end of file diff --git a/posts/123.html b/posts/123.html new file mode 100644 index 0000000..e6ac6f6 --- /dev/null +++ b/posts/123.html @@ -0,0 +1,52 @@ +title: Aprovechando la potencia de GNU Common Lisp (GCL) +date: 2008-09-06 07:16 +--- +
+

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.

+ +

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 ensayos sobre Lisp de Paul Graham o alguna de las entradas de Slava Akhmechet en defmacro.

+ +

GNU Common Lisp, de ahora en adelante GCL, 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.

+ +

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.

+ +

Para lograrlo necesitamos solamente tres macros de GCL: clines, defentry y defcfun. Eso e instalar GCL, claro.

+ +

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:

+ +(clines "int misuma (int x, int y) { return x + y; }") +(defentry mi-suma (int int) (int "misuma")) + +

Con clines 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 misuma. Y con defentry declaramos la función mi-suma en Lisp, que recibe dos enteros como parámetros y devuelve otro entero desde la función C misuma.

+ +

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.

+ +

Compilamos con (compile-file "misuma.lsp") y cargamos el código objeto que hemos generado con (load "misuma.o"). Ahora ya tenemos nuestra nueva función C disponible en Lisp. Si ejecutamos (mi-suma 3 2) 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.

+ +

Estoy realizando un proyecto en el que he integrado SDL con Lisp consiguiendo resultados bastante espectaculares, pero de eso hablaremos otro día.

+ +

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 defcfun. Vamos a verlo.

+ +

Volvemos a editar "misuma.lsp" y añadimos las siguientes líneas:

+ +(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;") + +(defentry otra-suma (int int) (object "otrasuma")) + +

Si volvemos a compilar y ejecutamos (otra-suma 10 7) obtendremos la lista ((+ 10 7) . 17). Veamos cómo lo hace.

+ +

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.

+ +

La macro defcfun usa una sintaxis especial de Lisp que no voy a explicar (que para eso está la documentación) de forma que ('+ z) es lo mismo que hacer (setq z '+) desde el intérprete. Ahora ya tenemos que z contiene (+).

+ +

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.

+ +

¿Y si ejecutamos (= (eval (car (otra-suma 10 7))) (cdr (otra-suma 10 7)))? Por la salud mental de todos espero que nos devuelva T ;-)

+ +
\ No newline at end of file diff --git a/posts/124.html b/posts/124.html new file mode 100644 index 0000000..c24c5e1 --- /dev/null +++ b/posts/124.html @@ -0,0 +1,28 @@ +title: Chipmunk Game Dynamics +date: 2009-03-07 19:34 +--- +
+

Chipmunk 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.

+ +

En la web de Chipmunk 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 Sketches.

+ +

Para instalar Chipmunk tenemos que descargar la última versión 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.

+ +

Una vez descargado y descomprimido, vamos al directorio src y ejecutamos

+ +

cmake .

+ +

para crear los ficheros Makefile necesarios para compilar e instalar la librería. Como Chipmunk está escrito en C99 tendremos que hacer una pequeña modificación en los ficheros generados por cmake antes de poder compilar. En el fichero CMakeCache.txt buscaremos la línea en la que se declara la variable CMAKE_C_FLAGS:STRING, que es donde se indican las opciones que se le pasarán a gcc y le asignamos -std=c99 -D_GNU_SOURCE para indicarle que compile siguiendo el estándar C99 e incluyendo las extensiones GNU.

+ +

Ahora ya podemos compilar con make e instalar con make install 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 cmake_install.cmake, si sustituimos:

+ +

SET(CMAKE_INSTALL_PREFIX "/usr/local")

+ +

por

+ +

SET(CMAKE_INSTALL_PREFIX "/usr")

+ +

tendremos el problema resuelto y podremos empezar a usar esta magnífica librería en nuestros programas.

+ +

E incluso podremos usarla en nuestros programas Lisp ;-)

+
\ No newline at end of file diff --git a/posts/125.html b/posts/125.html new file mode 100644 index 0000000..318b443 --- /dev/null +++ b/posts/125.html @@ -0,0 +1,16 @@ +title: The Ad Bard Network +date: 2009-07-09 14:39 +--- +
+

¿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.

+ +

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.

+ +

Evidentemente, la conclusión final es publicidad no.

+ +

AdBard Logo Pero hace algunos días me llego un correo sobre The Ad Bard Network, 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.

+ +

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.

+ +

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.

+
diff --git a/posts/126.html b/posts/126.html new file mode 100644 index 0000000..60ec131 --- /dev/null +++ b/posts/126.html @@ -0,0 +1,8 @@ +title: Infor&Games Festival +date: 2009-09-07 16:18 +--- +
+

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 InforGames Festival, una especie de lan party mezclada con conciertos, zonas chill-out, paint-ball, dardos, etc.

+ +

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 "Cómo montar una empresa de videojuegos y morir en el intento y tener que volver a jugar la fase con una vida menos" o a la charla sobre Bennu GD o a otras sobre seguridad o sobre montar máquinas recreativas, que parecen bastante más amenas, aunque si eres de esos que usa gNewSense, Trisquel o Ututo XS 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.

+
diff --git a/posts/127.html b/posts/127.html new file mode 100644 index 0000000..d64d1a7 --- /dev/null +++ b/posts/127.html @@ -0,0 +1,21 @@ +title: Gacela +date: 2009-09-20 07:38 +--- +
+

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.

+ +

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.

+ +

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.

+ +

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?).

+ +

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.

+ +

La única pega para muchos supongo que será el hecho de que Gacela es Lisp. Para mi es genial ;-)

+ +

Y para los impacientes ahí va el primer tutorial:

+ +

(run-game "Mi primer juego" (render-text "Hola mundo"))

+ +
\ No newline at end of file diff --git a/posts/128.html b/posts/128.html new file mode 100644 index 0000000..7ae48b6 --- /dev/null +++ b/posts/128.html @@ -0,0 +1,26 @@ +title: Primera versión de Gacela +date: 2010-01-24 08:24 +--- +
+

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 iParty 11 están empezando a quitarme demasiado tiempo y no quería esperar más.

+ +

En la web de Gacela 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).

+ +

Las dependencias para compilar el intérprete son las siguientes:

+
    +
  • gcl
  • +
  • libsdl1.2-dev
  • +
  • libsdl-image1.2-dev
  • +
  • libsdl-mixer1.2-dev
  • +
  • libftgl-dev
  • +
  • libsm-dev
  • +
  • libxmu-dev
  • +
  • libxaw7-dev
  • +
  • libgmp3-dev
  • +
  • libreadline5-dev
  • +
+ +

Y para compilar el editor también necesitareis libgtk2.0-dev

+ +

Como la documentación es casi inexistente responderé a cualquier pregunta desde los comentarios.

+
\ No newline at end of file diff --git a/posts/129.html b/posts/129.html new file mode 100644 index 0000000..b2a423e --- /dev/null +++ b/posts/129.html @@ -0,0 +1,8 @@ +title: Gacela en la web con canvas +date: 2010-02-13 13:13 +--- +
+

Estos últimos días estoy trabajando en un compilador sencillo de Gacela a Javascript para poder desarrollar juegos para la web usando canvas. 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.

+ +

También estoy rumiando cómo hacer para usar en Gacela modelos desarrollados con Blender, pero para eso aún falta un poco.

+
\ No newline at end of file diff --git a/posts/13.html b/posts/13.html new file mode 100644 index 0000000..19373a8 --- /dev/null +++ b/posts/13.html @@ -0,0 +1,16 @@ +title: Cambiar permisos de directorios +date: 2004-01-28 11:18 +--- +
+

Ayer preguntaban en la lista de correo de Hispalinux 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 man del comando find.

+ +

Evidentemente, si ejecutamos chmod -R 0777 ./* nos encontraremos con que nos cambian los permisos de todo lo que cuelga del directorio ./, ya sean ficheros o directorios.

+ +

Una forma de solucionarlo es mediante el comando find. 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:

+ +

find . -type d -exec chmod 0777 {} \;

+ +

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 chmod con las opciones indicadas. Las llaves son un sinónimo de resultado de la búsqueda del find.

+ +

Buena herramienta, el find.

+
diff --git a/posts/130.html b/posts/130.html new file mode 100644 index 0000000..94512a5 --- /dev/null +++ b/posts/130.html @@ -0,0 +1,12 @@ +title: iParty 11, la fiesta del software libre en Castellón +date: 2010-04-01 16:22 +--- +
+

Cartel iParty 11Este año me encargo de la organización de la iParty 11, 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.

+ +

Este año el nivel de los conferenciantes es muy bueno, con profesores de la UJI 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.

+ +

Desde aquí invito a todo el que quiera a inscribirse en la iParty 11 y disfrutar de la fiesta del software libre.

+ +

P.D.: El martes 6 a las 9:00 empezaremos el montaje y todo el que quiera ayudar será bienvenido.

+
\ No newline at end of file diff --git a/posts/131.html b/posts/131.html new file mode 100644 index 0000000..400ccda --- /dev/null +++ b/posts/131.html @@ -0,0 +1,10 @@ +title: Estoy en la iParty 11... ¡y estoy descansando! +date: 2010-04-10 18:34 +--- +
+

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.

+ +

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.

+ +

¿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 :-)

+
\ No newline at end of file diff --git a/posts/132.html b/posts/132.html new file mode 100644 index 0000000..0ff5c39 --- /dev/null +++ b/posts/132.html @@ -0,0 +1,10 @@ +title: Editar ficheros PDF en GNU/Linux +date: 2010-06-15 18:27 +--- +
+

El otro día necesitaba editar un fichero PDF y me puse a buscar por Internet cómo podría hacerlo. Existe un programa, PDFedit, 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.

+ +

Pero descubrí que es posible abrir PDFs usando GIMP. 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.

+ +

Despues podemos guardar las modificaciones como ficheros PDF, uno por cada hoja, usando la impresión a PDF de GIMP. Despues, volviendo a PDFedit, podemos eliminar las hojas que hemos modificado e insertar las nuevas desde los ficheros que hemos creado desde GIMP... y ya tenemos nuestro PDF modificado.

+
\ No newline at end of file diff --git a/posts/133.html b/posts/133.html new file mode 100644 index 0000000..71acbb9 --- /dev/null +++ b/posts/133.html @@ -0,0 +1,8 @@ +title: Between parentheses, improving the world with Lisp +date: 2010-06-15 18:37 +--- +
+

Llevo unos días escribiendo en Between parentheses, el blog oficial de Gacela, en el que voy publicando explicaciones del diseño interno, ejemplos de uso, etc.

+ +

Está escrito en inglés (sed benévolos).

+
\ No newline at end of file diff --git a/posts/134.html b/posts/134.html new file mode 100644 index 0000000..873bbbd --- /dev/null +++ b/posts/134.html @@ -0,0 +1,8 @@ +title: Segunda estrella a la derecha. Todo recto hacia el mañana. +date: 2010-08-23 06:55 +--- +
+

Aún no salgo de mi asombro. Por casualidad me he encontrado con Copenhagen Suborbitals, 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.

+ +

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.

+
\ No newline at end of file diff --git a/posts/135.html b/posts/135.html new file mode 100644 index 0000000..bb531eb --- /dev/null +++ b/posts/135.html @@ -0,0 +1,17 @@ +title: Cómo escribir un SO de estar por casa +date: 2011-01-14 18:21 +--- +
+

+MikeOS 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.

+ +

La licencia de MikeOS es del tipo BSD, por lo que da todas las facilidades para jugar con este interesante proyecto.

+ +

Es recomendable leer el artículo de Mike Saunders How to write a simple operating system, que sirve como introducción para que podamos hacernos nuestro propio SO.

+ +

Actualización:
Para los interesados en el tema también he encontrado:

+ +
\ No newline at end of file diff --git a/posts/136.html b/posts/136.html new file mode 100644 index 0000000..562230c --- /dev/null +++ b/posts/136.html @@ -0,0 +1,15 @@ +title: La FSF apoya el proyecto WebM +date: 2011-01-23 07:01 +--- +
+ +

En No double standards: supporting Google's push for WebM la Free Software Foundation ha anunciado su apoyo al proyecto WebM 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.

+ +

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 GNU Gnash como alternativa a Flash, también es cierto que aún le queda mucho camino por delante.

+ +

Otra posibilidad para evitar el uso de software privativo es usar TinyOgg, que transforma videos sobre Flash a Ogg Theora. Es lo que yo hago habitualmente, aunque dependiendo del formato resulta imposible realizar la conversión.

+ +

Sin lugar a dudas el futuro del vídeo en la web es HTML5 y la etiqueta <video>, 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.

+ +

Internet y la web tienen unos cimientos formados por estándares abiertos y programas libres, y es nuestro deber luchar por que siga así.

+
\ No newline at end of file diff --git a/posts/137.html b/posts/137.html new file mode 100644 index 0000000..c65c3a7 --- /dev/null +++ b/posts/137.html @@ -0,0 +1,19 @@ +title: El retraso de los juegos libres +date: 2011-01-30 07:44 +--- +
+ +

En el boletín de diciembre de 2010 de la Free Software Foundation se encuentra el artículo The Free Game Lag, escrito por Sarvodaya, que trata sobre la relación entre el mundo de los videojuegos y el software libre.

+ +

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:

+ +

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.

+ +

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.

+ +

Pero, ¿cómo puede una empresa de videojuegos, con el modelo actual, ganar dinero en el mundo del software libre? En palabras de Sarvodaya, It can't, but it can be better. 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.

+ +

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.D.: Se está vendiendo un juego llamado "Transport Simulator" que en realidad es una copia ilegal del juego libre Rigs of Rods. 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 aquí.

+
diff --git a/posts/138.html b/posts/138.html new file mode 100644 index 0000000..438b61b --- /dev/null +++ b/posts/138.html @@ -0,0 +1,13 @@ +title: Debian 6.0 "Squeeze" publicada +date: 2011-02-06 07:41 +--- +
+ +

Acaba de publicarse la nueva versión de Debian, "Squeeze", 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.

+ +

Esta decisión de Debian de separar claramente lo que es libre de lo que no ha convencido al equipo de gNewSense para basar la futura gNewSense 3.0 en "Squeeze" en vez de Ubuntu, lo que les permitirá sacar versiones más rapidamente y disfrutar de la arquitectura MIPS, necesaria para correr gNewSense en los ordenadores Lemote Yeelong, que funcionan con hardware totalmente libre.

+ +

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.

+ +

¡¡Enhorabuena, Debian!!

+
\ No newline at end of file diff --git a/posts/139.sxml b/posts/139.sxml new file mode 100644 index 0000000..27dfe46 --- /dev/null +++ b/posts/139.sxml @@ -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 index 0000000..905703f --- /dev/null +++ b/posts/14.html @@ -0,0 +1,26 @@ +title: Hablemos del software libre +date: 2004-02-03 16:31 +--- +
+

En respuesta al artículo GNU o el nuevo comunismo de Francisco Serradilla.

+ +

Existen ciertos puntos de vista que no comparto ni de lejos con el autor del artículo y paso a exponer mis razones.

+ +

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.

+ +

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.

+ +

¿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.

+ +

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.

+ +

¿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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+
diff --git a/posts/140.html b/posts/140.html new file mode 100644 index 0000000..95a4a0a --- /dev/null +++ b/posts/140.html @@ -0,0 +1,15 @@ +title: No quieren que copiemos... pues no lo hagamos +date: 2011-02-20 08:23 +--- +
+ +

No voy a entrar a hablar sobre la "ley Sinde"; mucho se ha hablado ya y gente como Ricardo Galli o Enrique Dans 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".

+ +

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.

+ +

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.

+ +

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.

+ +

Existen alternativas libres como Jamendo o Magnatune, o podemos encontrar cultura libre en abundancia usando el catálogo de Creative Commons, con lo cual yo me digo, si no quieren que copiemos sus obras privativas... pues no lo hagamos.

+
\ No newline at end of file diff --git a/posts/141.html b/posts/141.html new file mode 100644 index 0000000..f340821 --- /dev/null +++ b/posts/141.html @@ -0,0 +1,62 @@ +title: Ejecución de programas Gacela en el navegador +date: 2011-02-25 19:27 +--- +
+ +

Actualización: Todo lo explicado en esta entrada puede hacerse mucho mejor usando el objeto XMLHttpRequest, tal como cuento en Ejecución de programas Gacela en el navegador (rectificación). Si quieres saber cómo no hacerlo, sigue leyendo :-D

+ +

El proyecto Gacela, en el que llevo trabajando cerca de dos años y medio, está formado a su vez por tres subproyectos:

+ +
    +
  • Gacela, la definición del lenguaje y el compilador / intérprete, que funciona localmente en el ordenador.
  • +
  • Lisp2js, el compilador de Lisp a Javascript que permite traducir programas Gacela y ejecutarlos en una página web.
  • +
  • Gacela on Wheels, un entorno web para el desarrollo de juegos con Gacela.
  • +
+ +

Estos últimos meses estoy más centrado en Lisp2js y en la posibilidad de ejecutar en el navegador programas escritos con Gacela. La idea es poder incluir en una página web un código en Javascript del estilo file2js('mi_juego.lisp'); iniciar_juego(); 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.

+ +

A continuación explicaré de qué forma podemos cargar ficheros con Javascript y de paso explicaré cómo Gacela consigue añadir código Javascript a una página y ejecutarlo. Para otro día queda el funcionamiento interno de Lisp2js.

+ +

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 iframe. 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.

+ +

El código que hará funcionar todo es el siguiente:

+ +
<html>
+    <head>
+        <script type="text/javascript" src="lisp2js.js"></script>
+        <script id="head_js" type="text/javascript"></script>
+        <script type="text/javascript">
+            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();
+            }
+        </script>
+    </head>
+
+    <body onLoad="cargar('programa.lisp', function() { init(); });">
+    </body>
+</html>
+ +

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 onload.

+ +

La primera función, cargar, 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.

+ +

La segunda función, ejecutar_mi_codigo, 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.

+ +

Así, aunque de forma más transparante, Gacela 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.

+
\ No newline at end of file diff --git a/posts/142.html b/posts/142.html new file mode 100644 index 0000000..7fddacb --- /dev/null +++ b/posts/142.html @@ -0,0 +1,34 @@ +title: Ejecución de programas Gacela en el navegador (rectificación) +date: 2011-02-28 18:28 +--- +
+

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.

+ +

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.

+ +

El código para cargar un programa Lisp, compilarlo y ejecutarlo sería así:

+ +
<html>
+    <head>
+        <script type="text/javascript" src="lisp2js.js"></script>
+        <script id="head_js" type="text/javascript"></script>
+        <script type="text/javascript">
+            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;
+                }
+            }
+        </script>
+    </head>
+
+    <body onLoad="cargar('programa.lisp'); init();">
+    </body>
+</html>
+ +

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 Using XMLHttpRequest.

+
\ No newline at end of file diff --git a/posts/143.html b/posts/143.html new file mode 100644 index 0000000..a6b4975 --- /dev/null +++ b/posts/143.html @@ -0,0 +1,11 @@ +title: Libertad y software libre +date: 2011-03-08 15:46 +--- +
+ +

Tal como explican en el boletín de noviembre de la FSFE, 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?

+ +

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.

+ +

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 George Orwell hubiera imaginado un Gran Hermano tan poderoso que las personas le entregarían su libertad a cambio de tan poco.

+
\ No newline at end of file diff --git a/posts/144.html b/posts/144.html new file mode 100644 index 0000000..5933442 --- /dev/null +++ b/posts/144.html @@ -0,0 +1,17 @@ +title: De ingenieros informáticos y prestigio +date: 2011-03-16 20:43 +--- +
+ +

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: ¿Por qué los ingenieros informáticos están mal valorados en España pero en otros países son los reyes del mambo?

+ +

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?

+ +

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.

+ +

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.

+ +

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í.

+ +

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á.

+
\ No newline at end of file diff --git a/posts/145.html b/posts/145.html new file mode 100644 index 0000000..2bd8f48 --- /dev/null +++ b/posts/145.html @@ -0,0 +1,14 @@ +title: Nuestros datos son nuestros +date: 2011-04-05 19:13 +--- +
+ + +

Hoy mismo he estrenado mi cuenta para micro-blogging en identi.ca 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.

+ +

Y es que identi.ca funciona completamente con software libre, StatusNet, y nos da total acceso a nuestros datos (mensajes, amigos, seguidores, ...). Es decir, que si no nos gusta cómo funciona identi.ca, podemos hacer la maleta y marcharnos a otro servidor o montarnos nuestro propio servidor, ya que tenemos el software y los datos.

+ +

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 identi.ca o como Diaspora 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.

+ +

Así que ya lo sabeis, ahora tambien me podeis seguir en mi cuenta de identi.ca.

+
\ No newline at end of file diff --git a/posts/146.html b/posts/146.html new file mode 100644 index 0000000..074640d --- /dev/null +++ b/posts/146.html @@ -0,0 +1,15 @@ +title: No tienen ni idea +date: 2011-05-04 10:16 +--- +
+ + +

Como cuentan en Netflix Is Killing BitTorrent in The US, 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.

+ +

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.

+ +

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.

+ +

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 no tienen ni idea.

+ +
\ No newline at end of file diff --git a/posts/147.html b/posts/147.html new file mode 100644 index 0000000..112cb69 --- /dev/null +++ b/posts/147.html @@ -0,0 +1,29 @@ +title: Gacela migra su código a Gnu Guile +date: 2011-05-11 06:11 +--- +
+ + +

Como dice el título, estoy reescribiendo parte del código fuente de Gacela, pasando de usar Gnu Common Lisp a usar Gnu Guile.

+ +

Hay varias razones para ello; el equipo de desarrollo de Gnu Common Lisp 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 Gnu Common Lisp 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.

+ +

Además me encontré con problemas de integración entre Gnu Common Lisp y OpenGL que hacían que Gacela no funcionara correctamente en algunas plataformas, como por ejemplo los portátiles Asus Eee PC.

+ +

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í Gnu Common Lisp fue que era la implementación oficial de Lisp del proyecto GNU y quería continuar con esa idea.

+ +

Y de forma accidental me encontré con Gnu Guile. Había leído algo hacía tiempo, pero no había profundizado sobre qué era Gnu Guile. Guile es el lenguaje de extensión oficial del proyecto GNU, además de ser un compilador y un intérprete de Scheme, un dialecto de Lisp.

+ +

Cosas que tiene Guile y que yo buscaba:

+ +
    +
  • Forma parte del sistema operativo GNU y está soportado por la Free Software Foundation.
  • +
  • Sigo teniendo todo el poder de Lisp a mi alcance.
  • +
  • Hay mucha gente detrás del proyecto con lo que ello conlleva: buena documentación, versiones frecuentes, una comunidad grande, etc.
  • +
  • La facilidad para integrar código en C es impresionante, superando a Gnu Common Lisp y a las ctypes de Python.
  • +
  • Soporta multi-threading, que no es algo que necesitara obligatoriamente pero que no me vendrá mal del todo.
  • +
  • Y funciona perfectamente en mi Eee PC :-)
  • +
+ +

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.

+
\ No newline at end of file diff --git a/posts/148.html b/posts/148.html new file mode 100644 index 0000000..1bedf17 --- /dev/null +++ b/posts/148.html @@ -0,0 +1,16 @@ +title: ¿Secure Boot? Más bien "Restricted Boot" +date: 2011-10-31 08:02 +--- +
+restricted boot + +

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.

+ +

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.

+ +

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.

+ +

Para los que esteis en contra de la aplicación de estas medidas, es posible firmar una petición pública de rechazo en Stand up for your freedom to install free software.

+ +

Podeis encontrar más información en Will your computer's "Secure Boot" turn out to be "Restricted Boot"?

+
\ No newline at end of file diff --git a/posts/149.html b/posts/149.html new file mode 100644 index 0000000..e7efe7b --- /dev/null +++ b/posts/149.html @@ -0,0 +1,16 @@ +title: Demasiado tiempo sin escribir +date: 2013-08-02 13:11 +--- +
+

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.

+ +

Sigo en el desarrollo de Gacela, la extensión de GNU Guile para desarrollar juegos, que ahora se está convirtiendo en un sistema de entidades y componentes mucho más modular de lo que era antes.

+ +

También he estado trabajando mucho en el desarrollo de OpenERP, 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.

+ +

Especial atención merece la programación asíncrona. He experimentado con gevent 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.

+ +

Y también estoy probando Graphserver y Open Trip Planner, pensando en montar un sistema de planificación de viajes en transporte público.

+ +

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.

+
\ No newline at end of file diff --git a/posts/15.html b/posts/15.html new file mode 100644 index 0000000..fb556a0 --- /dev/null +++ b/posts/15.html @@ -0,0 +1,76 @@ +title: Configurar djbdns como caché DNS +date: 2004-02-11 10:54 +--- +
+

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.

+ +

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.

+ +

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.

+ +

Antes de instalar djbdns es necesario instalar las daemontools. En Debian es tan sencillo como hacer:

+ +

apt-get install daemontools-installer
+apt-get install djbdns-installer

+ +

Tambien se puede instalar descargando los fuentes de daemontools-0.76 y de djbdns-1.05 y compilando directamente. De cualquiera de las dos formas es sumamente sencillo.

+ +

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:

+ +

dnscache-conf dnscache dnslog /etc/dnscache xxx.yyy.zzz.www

+ +

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.

+ +

Para arrancar el servidor basta con crear un enlace en el directorio de servicios de las daemontools. Hacemos ln -s /etc/dnscache /service y a los pocos segundos tendremos en marcha nuestra caché DNS.

+ +

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:

+ +

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

+ +

En esos equipos indicaremos la IP del nameserver en el /etc/resolv.conf, en 'Mis sitios de red' o donde sea necesario.

+ +

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 echo 1 > /etc/dnscache/env/FORWARDONLY para que nos funcione correctamente el invento.

+ +

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.

+ +

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 grep stats ../log/main/current obtendremos algo parecido a esto:

+ +
@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
+ +

Bonito, ¿verdad? Las entradas stats 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.

+ +

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 svc -t /service/dnscache.

+ +

Poco más queda por decir. Se puede encontrar información de djbdns en:

+ +

djbdns home page
+D. J. Bernstein djbdns page
+Life With djbdns
+Mi vida con djbdns

+
diff --git a/posts/150.html b/posts/150.html new file mode 100644 index 0000000..27d8909 --- /dev/null +++ b/posts/150.html @@ -0,0 +1,55 @@ +title: Programar macros en Lisp es como reprogramar Matrix +date: 2013-10-09 18:02 +--- +
+pyfry + +

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.

+ +

Además, ahora que se ponen de moda otra vez los Domain Specific Languages (DSL), lo cierto es que tener el poder de las macros de tu parte te soluciona muchos problemas.

+ +

Vamos a probar con un problema fácil que resulta imposible de resolver en Python: implementar un if-then-else usando if y else. ¿Ein? :-D La respuesta rápida es:

+ +
def if_then_else(cond, if_true, if_false):
+    if cond:
+        return if_true
+    else:
+        return if_false
+ +

¡Vamos a probarlo!

+ +
>>> 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
+ +

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 else y nuestra condición es True? 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.

+ +

Por lo tanto, resulta imposible crear estructuras tipo if-then-else. Y lo mismo ocurre con operadores como and (si el primer parámetro es falso no evaluamos el resto), or (si el primer parámetro es cierto no evaluamos el resto), etc.

+ +

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.

+ +

La solución en Lisp utiliza macros. Si usaramos funciones obtendríamos el mismo resultado que con Python.

+ +
(defmacro if-then-else (cond if-true if-false)
+  `(if ,cond ,if-true ,if-false))
+ +

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.

+ +

Para que nos entendamos, una macro es un generador de código. Si ahora ejecuto

(if-then-else 'True "si" "no")
, el intérprete evaluará la macro, que devolverá el resultado
(if 'True "si" "no")
, y ese resultado será evaluado a su vez proporcionando el resultado adecuado. Vamos a verlo.

+ +
> (if-then-else 1 "si" "no")
+"si"
+> (if-then-else nil "si" "no")
+"no"
+> (if-then-else 1 "si" (/ 1 0))
+"si"
+ +

Ahora la división por cero ya no da error porque no llega a evaluarse

+ +

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.

+ +

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.

+
diff --git a/posts/151.html b/posts/151.html new file mode 100644 index 0000000..54d9ec2 --- /dev/null +++ b/posts/151.html @@ -0,0 +1,35 @@ +title: pyrabbit, experimentando con RabbitMQ +date: 2013-10-31 08:29 +--- +
+RabbitMQ + +

Llevo ya un tiempo probando RabbitMQ, un sistema de mensajería para aplicaciones basado en colas, muy potente y escalable, desarrollado con Erlang. Para saber un poco más de este lenguaje de programación recomiendo leer Learn You Some Erlang for Great Good! 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.

+ +

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.

+ +

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.

+ +

He desarrollado una pequeña librería en Python, pyrabbit, que por debajo usa Pika, 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.

+ +
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()
+ +

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 long polling, le estaría muy agradecido.

+
\ No newline at end of file diff --git a/posts/152.html b/posts/152.html new file mode 100644 index 0000000..994e002 --- /dev/null +++ b/posts/152.html @@ -0,0 +1,103 @@ +title: Haciendo un MongoDB con transacciones +date: 2014-03-26 08:13 +--- +
+

Llevo unos cuantos meses trabajando con MongoDB, una base de datos NoSQL basada en documentos estilo JSON. Es muy potente y muy sencilla de usar.

+ +

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. :-)

+ +transaction + +

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.

+ +

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.

+ +

Este nuevo sistema se llama Mojo.

+ +

Tipo de datos

+ +

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é Pickle, pero como solamente sirve para Python pasé a usar msgpack. Ahora mismo es el serializador por defecto, pero es posible especificar el que uno quiera en el momento de realizar la conexión.

+ +

Estructura de las tablas

+ +

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 {"a": 1, "b": [1, 2]} en la colección pruebas, en la base de datos quedaría:

+ + + + + + +
Table "pruebas"
IdNameValue
'abc''a''1'
'abc''b''[1, 2]'
+ +

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.

+ + + + + + +
Table "pruebas"
IdNameValueNumber
'abc''a''1'1
'abc''b''[1, 2]'NULL
+ +

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í:

+ + + + + +
Table "pruebas$_id"
IdNameValueNumber
'abc''_id''abc'NULL
+ + + + + +
Table "pruebas$a"
IdNameValueNumber
'abc''a''1'1
+ + + + + +
Table "pruebas$b"
IdNameValueNumber
'abc''b''[1, 2]'NULL
+ +

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": 1} la base de datos debería devolvernos el documento, ya que dentro de la lista [1, 2] se encuentra el número 1.

+ +

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:

+ + + + + + + +
Table "pruebas$b"
IdNameValueNumber
'abc''b''[1, 2]'NULL
'abc''b..0''1'1
'abc''b..1''2'2
+ +

Con este último esquema, si guardamos un nuevo documento {"b": {"x": 100, "y": 200}}, la base de datos quedaría de la forma:

+ + + + + + +
Table "pruebas$_id"
IdNameValueNumber
'abc''_id''abc'NULL
'def''_id''def'NULL
+ + + + + +
Table "pruebas$a"
IdNameValueNumber
'abc''a''1'1
+ + + + + + + + + + +
Table "pruebas$b"
IdNameValueNumber
'abc''b''[1, 2]'NULL
'abc''b..0''1'1
'abc''b..1''2'2
'def''b''{"x": 100, "y": 200"}'NULL
'def''b.x''100'100
'def''b.y''200'200
+ +

Final

+ +

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".

+

El código se encuentra disponible en el repositorio de Mojo y todas las ideas y aportaciones son bienvenidas.

+
diff --git a/posts/153.html b/posts/153.html new file mode 100644 index 0000000..6502197 --- /dev/null +++ b/posts/153.html @@ -0,0 +1,28 @@ +title: FirefoxOS no era tan bueno ni tan libre +date: 2015-12-31 11:11 +--- +
+

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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: Replicant. 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.

+ +

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.

+ +

Un paso más cerca de la libertad total.

+
diff --git a/posts/154.html b/posts/154.html new file mode 100644 index 0000000..356213d --- /dev/null +++ b/posts/154.html @@ -0,0 +1,22 @@ +title: La perversión empesarial no tiene límites +date: 2016-01-03 21:56 +--- +
+

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.

+ +

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.

+ +

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).

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+
diff --git a/posts/16.html b/posts/16.html new file mode 100644 index 0000000..03cd730 --- /dev/null +++ b/posts/16.html @@ -0,0 +1,8 @@ +title: Ya estan las fotos de la riada +date: 2004-02-23 16:59 +--- +
+

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 sección de fotos. Mi enhorabuena por las fotos, son impresionantes.

+ +

Por si alguien esta interesado la web no oficial del pueblo esta aquí.

+
diff --git a/posts/17.html b/posts/17.html new file mode 100644 index 0000000..a2efac6 --- /dev/null +++ b/posts/17.html @@ -0,0 +1,28 @@ +title: El software libre y las licencias: XFree y GPL +date: 2004-02-24 12:25 +--- +
+

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 xlibs. Como era de esperar las distribuciones más habituales ya estan pensando en no incluir esta release y volver a usar la 4.3, como ya ha hecho Mandrake. Gentoo, Debian y Red Hat van por el mismo camino.

+ +

¿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?

+ +

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 ¿Es libre el software libre?.

+ +

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 versión 1.1 de la licencia de XFree que dice así:

+ +

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.

+ +

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 "This product includes software developed by The XFree86 Project, Inc (http://www.xfree86.org/) and its contributors". 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:

+ +

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.

+ +

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.

+ +

¿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 Xouvert o algún fork realizado desde XFree 4.3 por un nuevo equipo de desarrollo.

+ +

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.

+ +

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.

+ +

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.

+
diff --git a/posts/18.html b/posts/18.html new file mode 100644 index 0000000..73deb70 --- /dev/null +++ b/posts/18.html @@ -0,0 +1,22 @@ +title: Cuando el terrorismo pasa cerca de ti +date: 2004-03-11 11:05 +--- +
+

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.

+ +

07:25 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.

+ +

07:59 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.

+ +

09:00 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.

+ +

09:15 Como no tengo el teléfono de mi familia en Madrid llamo a casa de mi madre por si sabe algo. Comunica.

+ +

09:25 Mi madre sigue comunicando. En Internet veo que la cifra de muertos asciende a 62. Me resulta imposible concentrarme en lo que estoy haciendo.

+ +

09:40 Aún comunica. Tiene que haber pasado algo, pienso, esto no es normal. La angustia de no saber nada me consume.

+ +

09:50 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.

+ +

10:00 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. ¡Qué cabrones!

+
diff --git a/posts/19.html b/posts/19.html new file mode 100644 index 0000000..7a38edf --- /dev/null +++ b/posts/19.html @@ -0,0 +1,18 @@ +title: Bulmailing ya no permite correos enviados desde MS Outlook +date: 2004-04-24 07:09 +--- +
+

Saboreando la dulce resaca de la iparty6, en la que aporté mi pequeño granito de arena dando una charla sobre software libre, y dando las últimas pinceladas a Planeta Aditel (http://planet.aditel.org/) 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.

+ +

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 bulmatiqueta. La transgresión continuada de una de ellas ha obligado a tomar la drástica decisión.

+ +

La norma 3 de la bulmatiqueta dice textualmente que "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."

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+
diff --git a/posts/2.html b/posts/2.html new file mode 100644 index 0000000..fd85072 --- /dev/null +++ b/posts/2.html @@ -0,0 +1,10 @@ +title: El banner de publicidad pasa a ser un popup +date: 2003-09-18 08:37 +--- +
+

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.

+ +

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.

+ +

La información ha sido extraída de esta web sobre Mozilla, donde puedes encontrar muchas más opciones de este estupendo navegador libre.

+
diff --git a/posts/20.html b/posts/20.html new file mode 100644 index 0000000..df333f5 --- /dev/null +++ b/posts/20.html @@ -0,0 +1,30 @@ +title: Configurando listas de correo distribuidas con Mailman +date: 2004-05-07 16:42 +--- +
+

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.

+ +

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.

+ +

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.

+ +

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.

+ +

La idea es conseguir algo similar con las listas de correo. Por ejemplo, yo estoy suscrito a flug at aditel.org y todo lo que envío llega a los miembros de flug at aditel.org, de flug at badopi.org, 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.

+ +

He usado Mailman 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.

+ +

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, flug at aditel.org y flug at bulma.net. 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.

+ +

Para que las listas se comuniquen entre ellas deben estar referenciadas como miembros de las otras. En este caso flug at aditel.org tendría a flug at bulma.net 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.

+ +

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.

+ +

Para que acabe de funcionar el invento tenemos que irnos a los filtros para destinatarios de las opciones de privacidad y poner el require_explicit_destination a verdadero e indicar la dirección de la otra lista en el acceptable_aliases. De esta forma se pueden recibir los correos de la otra lista como si se tratara de la propia.

+ +

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 accept_these_nonmembers, pero entonces tenemos el problema de sincronizar todas las listas para que nadie se quede fuera.

+ +

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.

+ +

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.

+
diff --git a/posts/21.html b/posts/21.html new file mode 100644 index 0000000..d74c2f8 --- /dev/null +++ b/posts/21.html @@ -0,0 +1,16 @@ +title: Squid Analysis Report Generator (SARG) +date: 2004-05-11 07:50 +--- +
+

Hoy me ha dado por empezar a desarrollar un analizador de los logs del squid pero despues me he dicho "tranqui colega, seguro que hay algo por ahí que valdrá la pena". No me ha costado mucho encontrar un proyecto la mar de interesante, el analizador SARG.

+ +

No hay mucho que explicar de SARG. Es sencillo pero potente y eficaz.

+ +

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 configure, make y make install (de verdad, ultimamente me resulta más entretenido instalar cosas en Windows, en Linux es todo asquerosamente fácil ;-) ).

+ +

Una vez instalado, el comando sarg nos genera listados en HTML basados en los logs del squid que le indiquemos. Por ejemplo, con sarg -l /var/log/squid/access.conf -o /var/www/sarg 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 aquí.

+ +

La página del man sobre sarg es bastante útil, y para opciones avanzadas podemos modificar el fichero sarg.conf que se ubica por defecto en /usr/local/sarg/. 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.

+ +

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.

+
diff --git a/posts/22.html b/posts/22.html new file mode 100644 index 0000000..0a21818 --- /dev/null +++ b/posts/22.html @@ -0,0 +1,18 @@ +title: VPN a través de iptables +date: 2004-05-18 08:37 +--- +
+

Pequeña receta de cocina para permitir conexión a un servidor Microsoft PPTP VPN pasando por un cortafuegos Debian Woody con iptables.

+ +

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.

+ +

Las reglas para el cortafuegos quedan así:

+ +
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
+ +

Ale, nunca te acostarás sin saber una cosa más.

+
diff --git a/posts/23.html b/posts/23.html new file mode 100644 index 0000000..8947ca0 --- /dev/null +++ b/posts/23.html @@ -0,0 +1,8 @@ +title: El problema de las gallinas +date: 2004-06-16 09:08 +--- +
+

Aunque ya lo conocía ya lo había olvidado y la solución, aunque sencilla, no deja de ser curiosa.

+ +

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 ;-)

+
diff --git a/posts/24.html b/posts/24.html new file mode 100644 index 0000000..6fab52f --- /dev/null +++ b/posts/24.html @@ -0,0 +1,14 @@ +title: Conversando con Richard Stallman +date: 2004-07-23 16:10 +--- +
+

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.

+ +

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.

+ +

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.

+ +

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.

+ +

La pena fue no llevar una cámara de fotos.

+
diff --git a/posts/25.html b/posts/25.html new file mode 100644 index 0000000..2076375 --- /dev/null +++ b/posts/25.html @@ -0,0 +1,45 @@ +title: Los chips RFID, un peligro para nuestra intimidad +date: 2004-09-08 08:19 +--- +
+

"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).

+ +

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.

+ +

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).

+ +

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).

+ +

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.

+ +

¿Y qué me dicen de noticias como esta? "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."

+ +

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.

+ +

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.

+ +

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?

+ +

¿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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

Para acabar citaré una parte del anuncio de la reposición del programa Presuntos culpables que se ha publicado recientemente en Kriptópolis: "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."

+ +

Que no nos quedemos dormidos.

+ +

Fuentes:

+ + +
diff --git a/posts/26.html b/posts/26.html new file mode 100644 index 0000000..a7d5079 --- /dev/null +++ b/posts/26.html @@ -0,0 +1,27 @@ +title: Bulmailing ya no permite correos enviados desde MS Outlook (II) +date: 2004-09-10 10:42 +--- +
+

Pasa el tiempo y donde dije digo, digo diego. Que nunca es tarde para cambiar de opinión, vaya.

+ +

Los que me leen de forma más o menos periódica recordarán mi opinión sobre este tema hace cinco meses (Bulmailing ya no permite correos enviados desde MS Outlook). 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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

Todo es cuestión de compromiso.

+ +

JSancho: Apenas tengo tiempo libre para desarrollar SL, trabajo 10 horas al día y también tengo que dedicar tiempo a mi familia.
+RMS: Tienes que cambiar de trabajo.

+
diff --git a/posts/27.html b/posts/27.html new file mode 100644 index 0000000..f46ef91 --- /dev/null +++ b/posts/27.html @@ -0,0 +1,26 @@ +title: El final de la cuenta atrás +date: 2004-09-28 17:28 +--- +
+

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.

+ +

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 web del Ministerio de Justicia, en concreto en lo que se refiere a la modificación del artículo 270 que paso a redactar a continuación:

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

Pero aún hay más. Si nos fijamos en el final del apartado 3 nos dice que la regla se aplica "en los términos previstos en el apartado 1 de este artículo", es decir, siempre y cuando la supresión de la protección de la obra se lleve a cabo para realizar copias "con ánimo de lucro y en perjuicio de tercero". 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.

+ +

Y si a alguien le quedan dudas también podemos recurrir a la causa de justificación, como muy bien explica Javier de la Cueva en su artículo No es delito bajarse un emepetrés.

+ +

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.

+
diff --git a/posts/28.html b/posts/28.html new file mode 100644 index 0000000..c586f0e --- /dev/null +++ b/posts/28.html @@ -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 +--- +
+

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 Creative Commons. Ahora mismo está disponible una de sus obras más reconocidas, El Rayo Verde (Recuerdos de cielo y mar), aunque su intención es ir abriendo todas sus obras a la comunidad.

+ +

El libro es interesante y recomendable su lectura.

+
diff --git a/posts/29.html b/posts/29.html new file mode 100644 index 0000000..72d505b --- /dev/null +++ b/posts/29.html @@ -0,0 +1,10 @@ +title: Charla "¿Qué es el software libre?" en la UJI +date: 2004-10-13 09:15 +--- +
+

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 Universitat Jaume I. Podeis consultar el plano de localización en formato PDF.

+ +

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.

+ +

Por supuesto estais invitados todos los que paseis por Castellón ese día y esteis interesados en el tema.

+
diff --git a/posts/3.html b/posts/3.html new file mode 100644 index 0000000..1d1ba58 --- /dev/null +++ b/posts/3.html @@ -0,0 +1,28 @@ +title: Drivers libres vistos desde la empresa +date: 2003-09-23 09:39 +--- +
+

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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?

+ +

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.

+ +

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.

+ +

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.

+
diff --git a/posts/30.html b/posts/30.html new file mode 100644 index 0000000..b1402f3 --- /dev/null +++ b/posts/30.html @@ -0,0 +1,6 @@ +title: Charla "¿Qué es el software libre?" en la UJI (Cambio de lugar) +date: 2004-10-15 08:25 +--- +
+

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.

+
diff --git a/posts/31.html b/posts/31.html new file mode 100644 index 0000000..8ca7165 --- /dev/null +++ b/posts/31.html @@ -0,0 +1,16 @@ +title: Ha nacido Sombra +date: 2004-12-31 15:34 +--- +
+

Los últimos problemas de seguridad en el servidor de Aditel 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 Aruba, pero finalmente he decidido montar un servidor casero de bajo presupuesto.

+ +

¡Ha nacido Sombra!

+ +

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 DynDNS, que ofrece subdominios gratuitos, aunque tampoco resulta un gran derroche adquirir un dominio propio.

+ +

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 Borax Distribución 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 ;-)

+ +

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á.

+ +

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 jsancho.homelinux.org.

+
diff --git a/posts/32.html b/posts/32.html new file mode 100644 index 0000000..ffaa65d --- /dev/null +++ b/posts/32.html @@ -0,0 +1,21 @@ +title: Proyectos para el 2005 +date: 2004-12-31 15:55 +--- +
+

Todos le pedimos algo al nuevo año y nos proponemos proyectos y objetivos. Ahí van los míos.

+ +

Lista de cosas que me gustaría llevar a cabo a lo largo del año:

+ +
    +
  • Liberar la primera versión de Bitácora (antes kkblog).
  • +
  • Seguir hablando sobre software libre en todos sitios (tengo dos temas favoritos): +
      +
    • ¿Qué es el software libre?
    • +
    • GPL, el mejor amigo del programador.
    • +
  • +
  • Realizar jornadas en los institutos de Castellón (proyecto de Aditel).
  • +
  • Desarrollar una nueva idea: Valcas (sistema de traducción automática libre, de momento castellano y valenciano).
  • +
+ +

Buf, buf, y creo que para un año ya hay más que de sobra.

+
diff --git a/posts/33.html b/posts/33.html new file mode 100644 index 0000000..bdfa4f1 --- /dev/null +++ b/posts/33.html @@ -0,0 +1,14 @@ +title: Razones por las que sigo trabajando con Bitácora (antes kkblog) +date: 2005-01-04 16:42 +--- +
+

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, MySQL required.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+
diff --git a/posts/34.html b/posts/34.html new file mode 100644 index 0000000..dbdf029 --- /dev/null +++ b/posts/34.html @@ -0,0 +1,10 @@ +title: Persiguiendo una Abadía del Crimen libre +date: 2005-01-10 20:14 +--- +
+

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.

+ +

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).

+ +

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.

+
diff --git a/posts/35.html b/posts/35.html new file mode 100644 index 0000000..16db43e --- /dev/null +++ b/posts/35.html @@ -0,0 +1,8 @@ +title: Las Patentes de nuevo en el Orden del Dia de Pesca +date: 2005-01-24 07:32 +--- +
+

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.

+ +

Más información en KWIKI: Cooperative Web Editing System at FFII.

+
diff --git a/posts/36.html b/posts/36.html new file mode 100644 index 0000000..0b3aef4 --- /dev/null +++ b/posts/36.html @@ -0,0 +1,14 @@ +title: Persiguiendo una Abadía del Crimen libre (II) +date: 2005-01-23 09:30 +--- +
+

Como ya dije en Persiguiendo una Abadía del Crimen libre 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.

+ +

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.

+ +

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.

+ +

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.

+ +

¿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.

+
diff --git a/posts/37.html b/posts/37.html new file mode 100644 index 0000000..4914f46 --- /dev/null +++ b/posts/37.html @@ -0,0 +1,10 @@ +title: Lo que no dicen por la tele +date: 2005-01-31 08:54 +--- +
+

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.

+ +

Pues para el que se preocupe por estas temas y quiera votar con sentido se puede acceder a una versión en PDF en http://www.constitucioneuropea.es/, y si quereis un ejemplar completo se puede solicitar llamando al teléfono gratuito 900 222 009, mediante un correo electrónico a constitucioneuropea@mpr.es o enviando una carta al apartado de correos 288 de Alcobendas (Madrid).

+ +

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.

+
diff --git a/posts/38.html b/posts/38.html new file mode 100644 index 0000000..71a8a1f --- /dev/null +++ b/posts/38.html @@ -0,0 +1,8 @@ +title: Excelente artículo sobre las patentes de software en Libertonia +date: 2005-02-05 12:41 +--- +
+

Hoy he podido leer en Libertonia un excelente artículo titulado Por qué no a las patentes de software, 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.

+ +

Lectura recomendada.

+
diff --git a/posts/39.html b/posts/39.html new file mode 100644 index 0000000..b2180ed --- /dev/null +++ b/posts/39.html @@ -0,0 +1,8 @@ +title: Carta de agradecimiento al Senado +date: 2005-02-18 10:37 +--- +
+

El dia 8 de febrero el Senado aprobó por unanimidad una iniciativa contra las patentes de software. Más detalles en "El Senado español vota contra las patentes de software".

+ +

Yo ya he firmado la Carta de agradecimiento al Senado. ¿A qué esperas tú?

+
diff --git a/posts/4.html b/posts/4.html new file mode 100644 index 0000000..c901324 --- /dev/null +++ b/posts/4.html @@ -0,0 +1,19 @@ +title: Policía Nacional y Guardia Civil: dos sistemas, una sola fuente +date: 2003-09-30 08:33 +--- +
+

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.

+ +

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?

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +
diff --git a/posts/40.html b/posts/40.html new file mode 100644 index 0000000..ead28e2 --- /dev/null +++ b/posts/40.html @@ -0,0 +1,10 @@ +title: Juan Pablo II te quiere todo el mundo +date: 2005-04-03 08:17 +--- +
+

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.

+ +

Defensor de la paz y de la libertad. Nunca te olvidaremos.

+ +

¡¡Juan Pablo II te quiere todo el mundo!!

+
diff --git a/posts/41.html b/posts/41.html new file mode 100644 index 0000000..752db57 --- /dev/null +++ b/posts/41.html @@ -0,0 +1,20 @@ +title: Profesionales sí, pero con ética +date: 2005-03-16 18:31 +--- +
+

¿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?

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

Supongo que habreis notado que hablo de software libre y de software privativo.

+ +

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?

+ +

En una palabra: SI.

+
diff --git a/posts/42.html b/posts/42.html new file mode 100644 index 0000000..eceaf5d --- /dev/null +++ b/posts/42.html @@ -0,0 +1,18 @@ +title: Persiguiendo una Abadía del Crimen libre (y III) +date: 2005-04-04 11:14 +--- +
+

Os presento la última parte del culebrón que empezó con Persiguiendo una Abadía del Crimen libre y que continuó con Persiguiendo una Abadía del Crimen libre (II). El final no es el que todos hubieramos querido.

+ +

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.

+ +

Conclusiones finales:

+ +

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.

+ +

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 La abadía del Crimen 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.

+ +

Hacía ya tiempo que no asistía a un homenaje tan sentido al Perro del Hortelano.

+ +

Y colorín colorado, este cuento se ha acabado (por mucho que nos pese).

+
diff --git a/posts/43.html b/posts/43.html new file mode 100644 index 0000000..ad8e511 --- /dev/null +++ b/posts/43.html @@ -0,0 +1,6 @@ +title: Atentos al 27-A +date: 2005-04-05 07:10 +--- +
+Algo importante ocurrirá el 27 de abril (27-A). Más detalles la semana que viene ;-) +
diff --git a/posts/44.html b/posts/44.html new file mode 100644 index 0000000..9b45ad1 --- /dev/null +++ b/posts/44.html @@ -0,0 +1,18 @@ +title: Software libre y software privativo +date: 2005-04-11 06:35 +--- +
+

Reflexiones sobre la coexistencia del software libre y el software privativo en respuesta al artículo El Software Libre ahora publicado en Libertonia.

+ +

Paso a expresar mi postura inflexible e/o irreflexiva sobre la poca importancia del software privativo en el futuro del software libre.

+ +

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.

+ +

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).

+ +

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.

+ +

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.

+ +

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.

+
diff --git a/posts/45.html b/posts/45.html new file mode 100644 index 0000000..66859ab --- /dev/null +++ b/posts/45.html @@ -0,0 +1,22 @@ +title: Movilización contra las patentes de software en Europa el 27-A +date: 2005-04-12 09:55 +--- +
+

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. Proinnova y FFII organizan a nivel estatal y varios grupos locales, como Aditel y SoLiDo, lo hacen en cada uno de sus centros respectivos.

+ +

Toda la información al respecto la puedes encontrar en http://lucha.proinnova.org/.

+ +

¿Qué puedes hacer para ayudar?

+ +

Puedes:

+ +
    +
  • Acudir a los organizadores de tu universidad para coordinarte con ellos. Puedes ver la lista de colaboradores en la web de coordinación.
  • +
  • Si no hay colaboradores en tu universidad, tú podrías ser el organizador local. Contacta con Alberto Barrionuevo.
  • +
  • Contárselo a tus amigos, profesores o compañeros para que esten al tanto.
  • +
  • Poner el banner de la movilización en tu página web, con un enlace a http://lucha.proinnova.org/.
  • +
  • Acudir a la manifestación el 27-A y mostrar tu postura respecto a las patentes de software.
  • +
+ +

Nos estamos jugando mucho. Ayúdanos... ayúdate... ¡¡Únete!!

+
diff --git a/posts/46.html b/posts/46.html new file mode 100644 index 0000000..e1f74e7 --- /dev/null +++ b/posts/46.html @@ -0,0 +1,10 @@ +title: Qué son las patentes de software +date: 2005-04-26 06:53 +--- +
+

Esta animación muestra qué son en realidad las patentes de software y qué suponen para la innovación.

+ +

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.

+ +

Descargar el vídeo.

+
diff --git a/posts/47.html b/posts/47.html new file mode 100644 index 0000000..ae0cd08 --- /dev/null +++ b/posts/47.html @@ -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 +--- +
+

Por lo que he podido leer en la bitácora del abogado Pedro J. Canut, concretamente en Quién dijo que ponía qué dónde? y en predicar en desierto, sermón perdido, 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.

+ +

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.

+ +

En primer lugar vamos a leer la Propuesta de Directiva del Parlamento Europeo y del Consejo sobre la patentabilidad de las invenciones implementadas en ordenador, 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.

+ +

Nos podemos fijar concretamente en los artículos 2, 4 y 4 bis, que cito a continuación.

+ +

Artículo 2 - Definiciones

+ +

A efectos de la presente Directiva se aplicarán las siguientes definiciones:

+ +
    +
  1. 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;
  2. +
  3. 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.
  4. +
+ +

Artículo 4 - Condiciones de patentabilidad

+ +

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.

+ +

Artículo 4 bis - Exclusiones de patentabilidad

+ +
    +
  1. (nuevo) Un programa de ordenador como tal no podrá constituir una invención patentable.
  2. +
  3. 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.
  4. +
+ +
+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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 aberrante.

+ +

Patentes de software NO.

+
diff --git a/posts/48.html b/posts/48.html new file mode 100644 index 0000000..5c4fc26 --- /dev/null +++ b/posts/48.html @@ -0,0 +1,219 @@ +title: ¿Qué es el software libre? +date: 2005-05-16 16:35 +--- +
+

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.

+ +

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.

+ +

¿Qué es el software libre?

+ +

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:

+ +
    +
  • Libertad 0: 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.
  • +
  • Libertad 1: 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.
  • +
  • Libertad 2: 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.
  • +
  • Libertad 3: 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.
  • +
+ +

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.

+ +

Libertad 0: Usar

+ +

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.

+ +

Los programas libres pueden usarse sin ningún tipo de restricciones.

+ +

Libertad 1: Modificar

+ +

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.

+ +

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 servicios.

+ +

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.

+ +

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.

+ +

Sin embargo, sólo con esta libertad no basta. Es necesaria la libertad 3.

+ +

Libertad 2: Copiar

+ +

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.

+ +

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.

+ +

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.

+ +

No creo que copiar sea malo, copiar también es contribuir.

+ +

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.

+ +

Libertad 3: Distribuir modificaciones

+ +

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 potencialmente de gran calidad.

+ +

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.

+ +

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.

+ +

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.

+ +

Orígenes del software libre

+ +

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.

+ +

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.

+ +

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).

+ +

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.

+ +

Razones por las que usar programas libres

+ +

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.

+ +

Uso doméstico

+ +

Si estamos hablando de un usuario doméstico la principal razón para usar programas libres sería la de evitar problemas morales.

+ +

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.

+ +

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.

+ +

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.

+ +

El precio de los programas no es una razón de peso para usar programas libres en vez de privativos. Hay programas conocidos como shareware que se pueden usar gratuitamente durante un cierto tiempo. También hay otros conocidos como freeware 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.

+ +

Uso en la enseñanza

+ +

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.

+ +

¿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.

+ +

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.

+ +

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.

+ +

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.

+ +

¿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?

+ +

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?

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

Uso en las empresas

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

Cómo ganar dinero desarrollando programas libres

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

Para este tipo de empresas el software es un producto, 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.

+ +

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 servicio al cliente.

+ +

El término servicio 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.

+ +

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.

+ +

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.

+ +

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á.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

Retos de futuro para el software libre

+ +

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.

+ +

A pesar de ello el futuro del software libre es incierto debido principalmente a cuatro amenazas que paso a explicar a continuación:

+ +

Hardware secreto

+ +

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?

+ +

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.

+ +

Librerías no libres

+ +

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.

+ +

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.

+ +

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.

+ +

Patentes de software

+ +

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.

+ +

¿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.

+ +

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.

+ +

Documentación libre

+ +

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?

+ +

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.

+ +

Es necesario que los programas libres mantengan su documentación libre.

+ +
+ +

"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."

+ +

"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í."

+ +

"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."

+ +

Software libre para una sociedad libre (Richard M. Stallman)

+
diff --git a/posts/49.html b/posts/49.html new file mode 100644 index 0000000..0723b01 --- /dev/null +++ b/posts/49.html @@ -0,0 +1,18 @@ +title: Hablando de software libre en el IES Bovalar +date: 2005-05-24 16:28 +--- +
+

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.

+ +

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.

+ +

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.

+ +

Después siguió Andrés entrando más en detalle sobre las distribuciones GNU/Linux y algunas aplicaciones libres como OpenOffice.

+ +

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.

+ +

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.

+ +

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.

+
diff --git a/posts/5.html b/posts/5.html new file mode 100644 index 0000000..8361a93 --- /dev/null +++ b/posts/5.html @@ -0,0 +1,97 @@ +title: Sistema de fax con herramientas libres +date: 2003-10-07 15:03 +--- +
+

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.

+ +

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.

+ +

Índice

+Software utilizado
+¿Qué vamos a hacer?
+Instalando Hylafax
+Samba y la impresora virtual
+Final
+Enlaces

+ +

Software utilizado

+ +

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).

+ +

Con respecto al fax, todo esta basado principalmente en el software Hylafax, para enviar y recibir faxes, y en el gran conocido Samba. El por qué de Samba se explica un poco más tarde.

+ +

¿Qué vamos a hacer?

+ +

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.

+ +

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.

+ +

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.

+ +

Anem per feina!

+ +

Instalando Hylafax

+ +

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 tar zxf hylafax.tar.gz. Estas cosas las suelo hacer en el directorio /usr/local/src/, aunque cada uno puede hacerlo donde más le guste.

+ +

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.

+ +

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 /usr/local/sbin/faxgetty -D /dev/ttyS0 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.

+ +

Y ya tenemos nuestro servidor de fax instalado. Tampoco era tan difícil, ¿no? Ahora ya podemos enviar faxes desde el servidor mediante sendfax -d número fichero1 fichero2 ..., pero aún vamos a hacer más.

+ +

Samba y la impresora virtual

+ +

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.

+ +

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.

+ +

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.

+ +

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.

+ +

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:

+ +
local master = yes
+preferred master = yes
+os level = 33
+remote announce = x.x.x.x/NOMBRE_DOMINIO
+ +

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.

+ +

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:

+ +
[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) &
+path = /var/spool/lpfax
+ +

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.

+ +

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 Horst F's Titelseite con código fuente en Delphi y todo.

+ +

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.

+ +

Final

+ +

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.

+ +

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.

+ +

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.

+ +

Enlaces

+ + +
diff --git a/posts/50.html b/posts/50.html new file mode 100644 index 0000000..6706bf9 --- /dev/null +++ b/posts/50.html @@ -0,0 +1,12 @@ +title: Entrevista sobre patentes de software en Cadena SER Castellón +date: 2005-05-24 16:45 +--- +
+

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.

+ +

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.

+ +

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.

+ +

Bonita experiencia.

+
diff --git a/posts/51.html b/posts/51.html new file mode 100644 index 0000000..ec45424 --- /dev/null +++ b/posts/51.html @@ -0,0 +1,14 @@ +title: Seguimos hablando de software libre, ahora en el IES Politécnico +date: 2005-06-06 09:37 +--- +
+

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.

+ +

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.

+ +

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.

+ +

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? ;-)

+ +

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.

+
diff --git a/posts/52.html b/posts/52.html new file mode 100644 index 0000000..58e02c2 --- /dev/null +++ b/posts/52.html @@ -0,0 +1,16 @@ +title: El día de mañana (ya vienen las patentes de software) +date: 2005-06-26 07:27 +--- +
+

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.

+ +

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:

+ +
    +

  • 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 que apoyen la postura de la FFII y que voten a favor de las enmiendas de Michel Rocard, para que sepan exactamente qué deben hacer. La información de contacto de los eurodiputados españoles está en EuroParl. 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.
  • + +

  • Ya hay 103 empresas españolas inscritas en el Economic Majority. Dos de ellas son de la provincia de Castellón, Cárabos e Intelligent Information Systems, 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.
  • +
+ +

¿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 ¡¡YA!!

+
diff --git a/posts/53.html b/posts/53.html new file mode 100644 index 0000000..83855a8 --- /dev/null +++ b/posts/53.html @@ -0,0 +1,8 @@ +title: Disfrutando de los últimos minutos (que sea que no, que sea que no) +date: 2005-07-06 09:58 +--- +
+

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.

+ +

Por si acaso aquí estoy, programando todo el día, disfrutando mientras esta adicción sea legal ;-)

+
diff --git a/posts/54.html b/posts/54.html new file mode 100644 index 0000000..a6fa518 --- /dev/null +++ b/posts/54.html @@ -0,0 +1,14 @@ +title: Hay que seguir moviendose contra las patentes +date: 2005-07-07 14:08 +--- +
+

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.

+ +

La Comisión Europea aseguró en un principio que no volvería a proponer otra ley de patentes (noticia en 20minutos.com) pero según declaraciones en la noticia en El País 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.

+ +

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 su blog.

+ +

Desde la lista de correo de la FFII 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 la FSFE se está moviendo para crear un órgano de supervisión de la EPO para evitar que sigan haciendo lo que les de la gana.

+ +

Estos lobbies pro-patentes se van a arrepentir de habernos buscado las cosquillas. :-)

+
diff --git a/posts/55.html b/posts/55.html new file mode 100644 index 0000000..fc5d944 --- /dev/null +++ b/posts/55.html @@ -0,0 +1,8 @@ +title: Charla sobre software libre en Segorbe +date: 2005-07-15 15:18 +--- +
+

Mañana a las 12:30 doy una charla en la Ciberia LAN Party 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.

+ +

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.

+
diff --git a/posts/56.html b/posts/56.html new file mode 100644 index 0000000..8179ec4 --- /dev/null +++ b/posts/56.html @@ -0,0 +1,56 @@ +title: La vuelta a España (o al menos a un cuarto) +date: 2005-09-02 11:31 +--- +
+

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.

+ +

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.

+ +

Primer día

+ +

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.

+ +

Anécdota del día, en Madrid no saben qué es un café del tiempo. Hay que pedirlo con hielo.

+ +

Segundo día

+ +

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.

+ +

Tercer día

+ +

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).

+ +

Y seguimos para pasar la noche en Zamora.

+ +

Cuarto día

+ +

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.

+ +

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.

+ +

Quinto día

+ +

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 porteluz, 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 Maestro Mateo, 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.

+ +

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!

+ +

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.

+ +

Sexto día

+ +

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.

+ +

Séptimo día

+ +

Día intenso. Pasamos por Valladolid (allí la gente va a la playa del Pisuerga, con arena y tías haciendo top less) y Segovia. ¡Vaya peaso 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

+ +

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á.

+ +

Octavo día

+ +

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.

+ +

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.

+ +

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.

+
diff --git a/posts/57.html b/posts/57.html new file mode 100644 index 0000000..31caeb7 --- /dev/null +++ b/posts/57.html @@ -0,0 +1,6 @@ +title: Nuevas fotos en la Galería +date: 2005-09-08 15:19 +--- +
+Tenía un montón de fotos nuevas por subir. Ahora ya están disponibles las fotos de la Ciberia LAN Party y de Segorbe, las fotos del cuadrangular de baloncesto sacadas de la web del Wichente y un par de fotillos de la Netweekend 2003 (ya ha llovido). +
diff --git a/posts/58.html b/posts/58.html new file mode 100644 index 0000000..d077e1c --- /dev/null +++ b/posts/58.html @@ -0,0 +1,8 @@ +title: Recorrido por Villafames +date: 2005-10-12 18:22 +--- +
+

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 fotos de la gesta para que quede constancia.

+ +

Mención especial merece esta instantánea de una mantis merendándose un saltamontes. Para la National Geographic.

+
diff --git a/posts/59.html b/posts/59.html new file mode 100644 index 0000000..cea66a5 --- /dev/null +++ b/posts/59.html @@ -0,0 +1,12 @@ +title: Diario de... la SGAE +date: 2005-10-19 10:55 +--- +
+

Veo poco la tele pero ayer cuando estaba a punto de acostarme hice un zapping rápido y pillé el principio del programa Diario de... de Tele 5 con un programa de investigación sobre la falsificación y venta ilegal de productos (llamada por algunos piratería). Aunque sé que no dicen más que tonterías al respecto me picó un poco el gusanillo y me quedé a verlo.

+ +

Para empezar meten en un mismo saco la falsificación de vestimenta, de medicamentos y de discos y películas, cuando son leyes totalmente distintas las que abarcan cada caso. Pero lo mejor viene cuando relacionan una tienda que vende ropa falsificada con los terroristas del 11-S y 11-M, que no digo yo que no sea pero en el programa tampoco mostraron ninguna prueba y solamente hablaron de conjeturas, y concluyen que por lo tanto falsificación de marcas, medicamentos y copias ilegales de música y películas financian el terrorismo nacional e internacional.

+ +

El punto gracioso lo puso Bustamante comprando un disco suyo en el mercadillo y enfrentándose al vendedor. Por lo visto los conciertos ya no le dan suficiente y tiene que salir haciendo el numerito para sus amigos de la SGAE. Por cierto, también salió el conocido Farré diciendo que los que realmente se enriquecían eran los que estaban en lo alto de la pirámide (los capitanes pirata, vamos) y que era a esos a los que había que perseguir. Mira por dónde le doy la razón aunque con un sentido distinto; para mi son ellos los que se enriquecen de forma fraudulenta y además inducen la paranoia en el público con anuncios y programas como el de ayer. Individuos como ellos sobran en nuestra sociedad.

+ +

Por último decir que Mercedes Milá ha caído muy bajo. La tenía por más profesional pero ahora, además de seguir con el circo de Gran Hermano, se dedica a ser pregonera de las mentiras de las entidades de gestión con un programa que deja mucho que desear y que tuvo de todo menos de investigación.

+
diff --git a/posts/6.html b/posts/6.html new file mode 100644 index 0000000..c140b43 --- /dev/null +++ b/posts/6.html @@ -0,0 +1,10 @@ +title: Por fin he pasado de Woody a Sarge +date: 2003-10-10 14:07 +--- +
+

Creía que nunca llegaría el día, pero estaba equivocado. Encontré un hueco en mi super ocupadísima agenda para dedicarle algo de tiempo a mi ordenador casero y pasar por fin de Woody a Sarge. Quitando algunos pequeños problemas de configuración ha ido todo perfecto. No he podido hacer muchas pruebas pero de momento ya he podido comprobar que las fuentes de las X estan más logradas.

+ +

La Sid tendrá que esperar mucho más, que de momento no tengo ni tiempo ni ganas de romperme la cabeza con la distribución inestable, aunque tengo entendido que tampoco da tantos y tantos problemas.

+ +

¿Siguiente reto? Tengo ganas de probar el kernel 2.6, que estoy oyendo maravillas de él y parece que ya lo tienen en proceso de congelación.

+
diff --git a/posts/60.html b/posts/60.html new file mode 100644 index 0000000..7e0151e --- /dev/null +++ b/posts/60.html @@ -0,0 +1,10 @@ +title: Naboria empieza su andadura +date: 2005-10-19 17:15 +--- +
+

Estos últimos días he estado involucrado en un nuevo proyecto. Naboria es un weblog de noticias sobre el software libre en el que esperamos hablar sobre noticias varias, eventos, seguridad, etc.

+ +

Aún quedan muchas cosas por hacer, pero hemos dejado de marear la perdiz y hemos dado el salto. Ya iremos arreglando las cosas poco a poco.

+ +

De paso he aprendido algo de Drupal. Parece mentira pero aún no había mirado nada y he quedado gratamente sorprendido. Sobretodo estoy encantado con la arquitectura modular que tiene y con que puedo seguir haciendo cosillas en PHP. Si alguien no lo conoce le aconsejo que le eche un vistazo, aunque sólo sea por curiosidad.

+
diff --git a/posts/61.html b/posts/61.html new file mode 100644 index 0000000..26cc58d --- /dev/null +++ b/posts/61.html @@ -0,0 +1,24 @@ +title: ¿Cuándo Debian no es Debian? +date: 2005-10-21 16:14 +--- +
+

¡Cómo nos gusta tirarnos los trastos a la cabeza! Uno podría pensar que este tipo de cosas sólo podrían pasar en el seno de Aditel ;-), que también somos aficionados a este tipo de reyertas, pero cuando se habla de profesionales de reconocido prestigio en el mundo del software libre uno se lleva las manos a la cabeza.

+ +

Esta es la historia de cuándo Debian es Debian y cuándo Debian no es Debian.

+ +

Por un lado tenemos a los miembros de la DCC Alliance: Credativ GmbH, Knoppix, LinEx, Linspire, MEPIS LLC, Progeny Linux Systems Inc., Sun Wah Linux Ltd., UserLinux y Xandros Inc. Todos ellos desarrollan distribuciones de GNU/Linux basadas en Debian. Y para más inri el presidente de la DCC Alliance es Ian Murdock, el fundador de Debian.

+ +

El objetivo de la DCC Alliance es crear una LSB (Linux Standard Base) 3.0-compliant, basada en Debian 3.1 (Sarge), diseñada para servir como base a las distribuciones de los miembros de la DCCA. El código, por supuesto, ha sido devuelto a la comunidad Debian para su integración en el proyecto.

+ +

¿El problema? Algunos desarrolladores de Debian están muy disgustados porque la gente confunde la DCC Alliance con Debian y viceversa. Están preocupados por la pérdida de la marca comercial tanto los que están a favor de la DCCA como los que están en contra. Resumiendo, se trata de una lucha interna por ver quién controla el logo y la marca de Debian.

+ +

De momento la DCC Alliance ha decidido hacer las paces y suprimir la palabra "Debian" de su nombre original, Debian Common Core Alliance (DCCA).

+ +

En cuanto al logo de Debian la DCCA está usandolo porque pueden hacerlo. Según la licencia del logo "este logo o una versión modificada puede ser usado por cualquiera para referirse al proyecto Debian, pero no indica la pertenencia al proyecto."

+ +

Aunque con esto el tema ya podría haber quedado zanjado, se ha continuado con una serie de discusiones en NewsForge de la que cabe destacar el siguiente comentario anónimo: "Si los desarrolladores de Debian pasaran tanto tiempo preocupandose por los detalles de las versiones como el que pasan con este sinsentido con la DCCA, tendríamos mejores y más frecuentes versiones de Debian."

+ +

Y estoy completamente de acuerdo. Estas peleas internas que se dan desgraciadamente tan a menudo en las organizaciones que se dedican al software libre no hacen más que desperdiciar recursos que podrían dedicarse en otras tareas mucho más útiles y lo que es peor, dan una imagen penosa de los profesionales del software libre y nos hacen perder posiciones en la eterna batalla con el software privativo.

+ +

A veces parecemos olvidar que cuando desarrollamos programas libres es como si los donaramos a la sociedad, conservando únicamente el derecho de autoría. ¿Qué es más Debian? ¿La versión descargable desde la web del proyecto o una modificada en la que se puede escuchar la fanfarria de Star Wars mientras arranca y cuyo código he enviado a Debian para que estudien incluirlo en la próxima versión (esto último es ficción)? Por favor, un poco de sentido común.

+
diff --git a/posts/62.html b/posts/62.html new file mode 100644 index 0000000..d8e4a6c --- /dev/null +++ b/posts/62.html @@ -0,0 +1,22 @@ +title: Agregador de noticias +date: 2005-10-29 10:48 +--- +
+

Basándome en la idea de Pedro Reina he desarrollado un pequeño agregador de noticias casero para poder estar al día de una forma sencilla. Dejo disponible el código fuente para quien quiera usarlo, copiarlo o mejorarlo. Está bajo licencia GPL y es una mezcla de HTML y PHP.

+ +

El funcionamiento es sencillo. Un fichero de configuración contiene los canales de noticias que me interesan con el formato siguiente:

+ +
<canal>
+<nombre>Web personal de Javier Sancho</nombre>
+<url>http://www.jsancho.org/</url>
+<origen>http://www.jsancho.org/bitacora/rss20.php</origen>
+<cache>jsancho.rss</cache>
+<tiempo>30</tiempo>
+</canal>
+ +

El nombre y la URL se usan por motivos estéticos e informativos de la web. El origen es la ruta del fichero de sindicación, la caché es el nombre que le damos al fichero en nuestra caché y tiempo nos indica los minutos de validez que tiene el fichero en la caché.

+ +

El sistema recoge los canales de noticias de nuestro fichero de configuración y busca los correspondientes archivos de sindicación en la caché. Si no los encuentra o si han superado su tiempo de validez se descargan desde la ruta indicada en origen. De esta forma consigo estar al tanto de las noticias sin necesidad de usar ninguna tarea cron y al mismo tiempo puedo especificar tiempos de refresco distintos según la frecuencia de actualización de los distintos canales de noticias.

+ +

La actualización de la caché se realiza por medio de la conexión del servidor web así que dependerá de su ancho de banda lo que nos cueste cargar la página si debe actualizar los ficheros de algunos o de todos los canales.

+
diff --git a/posts/63.html b/posts/63.html new file mode 100644 index 0000000..547bd5c --- /dev/null +++ b/posts/63.html @@ -0,0 +1,10 @@ +title: Cambio de aspecto +date: 2005-11-22 15:59 +--- +
+

Como podeis observar he cambiado el software de la bitácora y he pasado a usar WordPress. Hasta ahora mi diario web era completamente artesanal, pero como de vez en cuando me daba algún que otro problemilla y cada vez tenía menos ganas y menos tiempo para solucionarlos me he decidido a dar el salto.

+ +

Si alguien está interesado en cómo funcionaba la antigua versión de la bitácora sólo tiene que pedirme el código fuente, aunque no tiene nada de interesante y funciona de forma parecida al agregador de noticias.

+ +

He importado todas las entradas de la antigua bitácora y en breve espero tener las fotos.

+
diff --git a/posts/64.html b/posts/64.html new file mode 100644 index 0000000..ceb03b6 --- /dev/null +++ b/posts/64.html @@ -0,0 +1,8 @@ +title: Menuda alegría me llevo +date: 2005-11-30 09:12 +--- +
+

Hace poco mi hermano adquirió su primer ordenador y después de una semana usando Windows me ha pedido que le instale GNU Linux, que ya está harto. La elección de distribución me la dejaba a mi.

+ +

Dirán que son tonterías y casualidades, pero no hay duda de que la misma sangre corre por nuestras venas. Y eso que él, de informática, nada de nada.

+
diff --git a/posts/65.html b/posts/65.html new file mode 100644 index 0000000..1a584d9 --- /dev/null +++ b/posts/65.html @@ -0,0 +1,24 @@ +title: Yo no soy anti-Microsoft +date: 2005-12-17 09:20 +--- +
+

Aunque en ocasiones no nos guste, a lo largo de nuestra vida recibimos apodos y etiquetas que nos designan por algo que somos, pensamos o hacemos de forma sensiblemente distinta a los demás. A veces nos resulta divertido y lo aceptamos de buena gana. Otras, nos resulta especialmente irritante.

+ +

Es lo que a mí personalmente me ocurre cada vez que se me pregunta por algo relacionado con programas privativos y otra persona salta con algo del estilo "déjalo estar que este es anti-Microsoft". Y me irrita justamente porque no lo soy ni le deseo ningún mal a la empresa de Redmond. Es más, me sentiría muy feliz si Microsoft comenzara a desarrollar programas libres y duplicara sus beneficios gracias a ello.

+ +

Si yo realmente fuera una persona anti-Microsoft actuaría de una una o más de las siguientes formas:

+ +
    +
  • Distribuiría copias ilegales de programas de Microsoft (Windows, Office, etc).
  • +
  • Escribiría tutoriales de cómo instalar copias ilegales de programas de Microsoft usando cracks, números de serie falsos, etc.
  • +
  • Desarrollaría cracks para saltar las protecciones de los programas de Microsoft y los distribuiría como freeware en todas las webs que pudiera.
  • +
  • Escribiría virus para los programas de Microsoft, cuanto más destructivos mejor.
  • +
  • Realizaría ataques DoS contra la web de Microsoft.
  • +
  • Intentaría entrar en los servidores de Microsoft para robar código, introducir puertas traseras en sus productos, etc.
  • +
  • ... y más cosas que no se me ocurren.
  • +
+ +

Pero yo no hago nada de eso. Solamente soy un usuario de GNU/Linux que mantiene su sistema libre de programas privativos, que de vez en cuando escribe algún programilla o script y lo libera a la comunidad, que en alguna ocasión colabora con algunas líneas de código en algún programa libre y que escribe y habla siempre a favor del software libre.

+ +

Los que defendemos y promovemos el uso de software libre no tenemos necesidad de atacar a los programas privativos y a sus empresas. Es un mundo que simplemente está derrumbándose por sí mismo, por sus conceptos erróneos y anticuados, por sus constantes mentiras... porque la libertad, al final, siempre es la mejor opción.

+
diff --git a/posts/66.html b/posts/66.html new file mode 100644 index 0000000..793fbef --- /dev/null +++ b/posts/66.html @@ -0,0 +1,34 @@ +title: La revolución viene desde abajo +date: 2005-12-19 10:15 +--- +
+

Quien más, quien menos, todos hemos podido leer algo sobre la Proposición de Ley referente a la implantación de software libre en la Administración. Como mínimo todo el mundo sabrá que se rechazó con la casi totalidad de los votos del Congreso, lo cual tampoco es que me sorprenda en exceso. Creo en el sistema democrático como la mejor forma de gobernar una nación, pero mi fé en los políticos es inversamente proporcional a la importancia del cargo que ocupan.

+ +

Algunas de las razones en contra que se argumentaron:

+ +

"En cualquier caso, el criterio que ha de tener la Administración como el que aplica el ciudadano es elegir en función de la eficacia, y esto no es malo. [...] Esto es un poco el criterio que tiene el Grupo Parlamentario Catalán de Convergència i Unió, es decir libertad de elegir por parte del usuario." - Vilajoana Rovira (CIU)

+ +

"Los gobiernos y los parlamentos no están para coartar la libertad y hacer dirigismo tecnológico; los gobiernos y los parlamentos deben fomentar la competencia de todos los tipos de software estimulando la innovación y evitando intervenir con requisitos de adquisición que discriminen y que limiten la libertad." - Echániz Salgado (PP)

+ +

"Debemos ser libres y nuestra postura es la llamada neutralidad tecnológica y la eficacia. Debemos elegir el mejor programa, y evidentemente sería positivo valorar programas de software libre, pero no decidir a priori que utilizaremos un programa de software libre si no es la mejor solución técnica en ese momento para la Administración." - Muñoz Santamaría (PSOE)

+ +

Estos señores parecen olvidar algo que debería ser evidente, que la libertad de una persona acaba exactamente donde empieza la libertad de otra persona. En otras palabras, hablo del bien común.

+ +

Por ejemplo, un fumador debería ser libre de fumar lo que quisiera, cuando quisiera y donde quisiera. En teoría, él es libre de hacer con su cuerpo lo que quiera. Entonces, ¿por qué no es así? ¿Por qué se ha llegado incluso a redactar y aprobar una ley antitabaco que limita y recorta su libertad? La respuesta es sencilla, por el bien común.

+ +

¿Por qué hay gente que pierde sus casas, en las que vivieron sus padres y sus abuelos, para que pueda construirse una nueva autopista? Por el bien común. Puede que la expropiación se haga de forma injusta, que se especule con el terreno, etc, no entraré en ese tema, pero lo cierto es que miles de personas salen beneficiadas de esa actuación.

+ +

Pero cuando se trata de los programas de ordenador entonces ya no importa el bien común. No importa que toda la administración de un estado dependa de los caprichos y decisiones de una multinacional extranjera. No importa que parte de los impuestos de todos los ciudadanos contribuyan a enriquecer a esa multinacional (si al menos fuera española). No importa que esa multinacional o el gobierno de su país pueda evitar fácilmente la seguridad de los sistemas de un estado, desde Administración hasta Defensa.

+ +

Si una persona usa programas privativos en su casa incurre en problemas éticos añadidos y daña a la sociedad a la que pertenece, aunque en este caso es un daño mínimo. Si se trata de un centro educativo el daño es mayor, ya que se convierte en una factoría de futuros clientes de los monopolios privativos. Si es una empresa, el daño repercute principalmente en sus empleados y socios, además de en sí misma.

+ +

Pero cuando es el propio gobierno, el daño recae en todos, en toda la sociedad a la que se supone que tiene que servir y proteger.

+ +

Volviendo a mi tono "pesimista" de la situación, no espero que el cambio venga desde arriba. Los grandes monopolios privativos mueven enormes cantidades de dinero que pueden hacer servir para untar morros, hacer ofertas a las que las administraciones les resultaría muy duro negarse (como por ejemplo "regalar" 5.000 ordenadores con sus programas privativos instalados), etc. Usar el precio de los programas como razonamiento es un arma de doble filo que al final acaba volviendose en contra, ya que las multinacionales son lo suficientemente grandes y fuertes como para ofrecer sus programas y servicios por 0 euros. Temporalmente, claro, pero la jugada ya está hecha.

+ +

No, el cambio no vendrá desde arriba sino desde abajo. El movimiento del software libre empezó con una sola persona, una persona normal y corriente con una gran voluntad de hacer las cosas bien y que poco despues empezó a ser ayudada por otras personas con las mismas motivaciones. Sin gobiernos, sin empresas, sin organizaciones.

+ +

Es un proceso lento pero seguro que va cambiando poco a poco a la sociedad entera, que irá ascendiendo desde las personas de a pie, por las pequeñas organizaciones y empresas hasta las grandes compañías para acabar en los gobiernos de las naciones. Las leyes que nos protejan de los programas privativos vendrán como punto final, como rúbrica, del éxitoso camino de la sociedad a algo mejor. No como medio para conseguirlo sino como sentencia definitiva.

+ +

La propia Free Software Foundation nos indica el camino. Cuando se le indica a alguno de sus miembros que el software libre debería centrarse un poco más en las necesidades de las empresas la contestación es siempre la misma: "No nos interesan las empresas, nos interesan las personas". La revolución viene desde abajo.

+
diff --git a/posts/67.html b/posts/67.html new file mode 100644 index 0000000..f77eafa --- /dev/null +++ b/posts/67.html @@ -0,0 +1,32 @@ +title: Espíritu navideño +date: 2005-12-25 10:05 +--- +
+

Esta mañana me encuentro con que la sociedad actual es una de las más agresivas de la historia. Disputas, enfrentamientos, guerra, muerte, destrucción. Son palabras que nos encontramos continuamente en periódicos y telediarios.

+ +

¡Hoy es Navidad! ¡Quiero cambiar el mundo! Pero, ¿cómo?

+ +

No es tan complicado. En realidad basta con que cumplamos con nuestro deber como personas humanas que somos, realizando buenas acciones y dando ejemplo a los demás. Mejorando nuestros pequeños mundos particulares podemos mejorar todo el mundo. Vicente Ferrer, en su libro El encuentro con la realidad nos lo explica así:

+ +

¿Qué deber tengo en este mundo?

+ +

«Transformar la sociedad en Humanidad.»

+ +

[...]

+ +

El hombre tiene el deber de hacerlo todo más humano. Esta transformación tiene que empezar en el individuo, y llegar a abrazar a la sociedad entera: la familia, las relaciones personales y laborales, las escuelas, los institutos y las universidades, los hospitales, las empresas, los científicos, los gobiernos y las naciones.

+ +

[...]

+ +

Los hechos nos demuestran que todavía no somos completamente humanos. Día a día, al leer el el periódico comprobamos que aún estamos lejos de la perfección humana que podemos alcanzar en este mundo.

+ +

Pero ¿hay algún retrato donde podamos ver cómo es un ser humano de verdad? Si cierras los ojos y escuchas lo que tu corazón te dice, la luz de tu alma, verás un ser humano como tú debes tratar de ser.

+ +

A gran escala, la inhumanidad de nuestra sociedad se pone de manifiesto en las guerras, las injusticias, los crímenes, los maltratos y la explotación laboral adulta e infantil. Y, sin duda, en la pobreza y miseria, la peor de las enfermedades de esta sociedad, representada por millones y millones de personas condenadas a una vida «infrahumana», llena de dificultades y sufrimientos.

+ +

El mundo reclama nuestra intervención, la acción por los que padecen. Hay multitud de causas que piden a gritos nuestra ayuda. Es indispensable que, en la medida en que nos sea posible, nos impliquemos en esta historia. Tenemos que ser miembros activos de esta sociedad, empujarla para que progrese humanamente. Con esto no estoy diciendo que el mundo entero tenga que dejarlo todo para convertirse en misionero o cooperante. Es más sencillo que todo eso: en tu propia ciudad, en tu mismo barrio seguro que hay una asociación o colectivo social que necesita ayuda en forma de trabajo o recursos. La acción buena por los demás debe ser compañera de nuestra vida ordinaria.

+ +

Todos tenemos que aportar nuestro esfuerzo en este largo camino de borrar de nuestra sociedad todos los restos de inhumanidad que aún quedan en todos los niveles y dimensiones humanas.

+ +

Por un mundo mejor. Feliz Navidad a todos.

+
diff --git a/posts/68.html b/posts/68.html new file mode 100644 index 0000000..0f401f1 --- /dev/null +++ b/posts/68.html @@ -0,0 +1,10 @@ +title: GNU/Linux en el espacio +date: 2006-01-12 12:25 +--- +
+

Linux sends NASA rovers to Mars, among other things, o al menos eso nos cuenta Jack Loftus.

+ +

Parece ser que en el Laboratorio de Propulsión Jet de la NASA en Pasadena prefieren usar distintos sabores de GNU/Linux antes que Windows, noticia que me alegra, pero lo que más me gusta es la siguiente frase de Gary Brack, director del grupo de sistemas en tiempo real. Según él "this is how things should be", o sea, así es como tiene que ser.

+ +

Parece que los que defendemos el software libre y queríamos ser astronautas de pequeños ya tenemos un lugar al que enviar nuestros curriculums ;-)

+
diff --git a/posts/69.html b/posts/69.html new file mode 100644 index 0000000..33bc204 --- /dev/null +++ b/posts/69.html @@ -0,0 +1,18 @@ +title: La larga sombra de las patentes de software +date: 2006-01-12 16:29 +--- +
+

La noticia corre como la polvora. Finalmente Microsoft ha conseguido la patente sobre el sistema de ficheros FAT. A simple vista puede parecer algo sin importancia; el sistema FAT es bastante obsoleto y la propia Microsoft apuesta como sistema de ficheros por el más nuevo NTFS. Pero como todo suceso en el que esten implicadas las patentes de software el asunto es bastante más grave.

+ +

Para empezar el kernel de Linux ya no podrá soportar FAT de forma nativa como hasta ahora. ¿Y quién usa FAT en un sistema GNU/Linux? Pues toda la gente que utiliza dispositivos usb para transferir información de un ordenador a otro, ya que el FAT es el único que los ordenadores con Windows pueden manejar correctamente. Las cámaras digitales también suelen funcionar con FAT.

+ +

En general se trata de todos los que tenemos que lidiar desgraciadamente con sistemas privativos.

+ +

Pero eso no es lo peor. No olvidemos que al patentar el sistema de ficheros FAT no solamente se patenta el sistema en si; también quedan bajo la patente todos los algoritmos que usa el sistema patentado. Es decir, si en ext2 o en cualquier otro sistema de ficheros o pedazo de código se usaran algunos de los algoritmos relacionados con la patente, estos sistemas o programas o código en general quedarían comprometidos, independiente de que fueran libres o privativos.

+ +

Aquí es donde queda reflejado el gran peligro de las patentes de software. Nuestros sistemas libres pueden verse en serio peligro si los algoritmos usados llegan a caer dentro de una patente. ¿Cómo evitarlo? La mejor forma de hacerlo es rechazando las patentes de software.

+ +

De momento en Europa estamos a salvo del peligro (mis sinceras condolencias a nuestros colegas estadounidenses) pero no olvidemos que la Oficina Europea de Patentes prosigue con el registro de patentes de software, aunque no sean válidas, y que cualquier día volverán a intentar colarlas en la Comunidad Europea. Es demasiado dinero y demasiado poder en juego como para dejarlo correr.

+ +

Solamente si defendemos nuestros derechos y libertades con ahínco, como hemos hecho a lo largo de este último año, podremos volver a pararles los pies.

+
diff --git a/posts/7.html b/posts/7.html new file mode 100644 index 0000000..965c988 --- /dev/null +++ b/posts/7.html @@ -0,0 +1,8 @@ +title: La web se traslada al servidor de Aditel +date: 2003-10-22 16:09 +--- +
+

No hace mucho he sido admitido como socio en Aditel y como me proporcionan un espacio para tener páginas web he decidido trasladar mi sitio desde iespana.

+ +

En un principio no tenía la intención de realizar este traslado, pero despues de continuos problemas con el PHP de iespana y con problemas de conexión tanto para FTP como para WWW he tomado la decisión.

+
diff --git a/posts/70.html b/posts/70.html new file mode 100644 index 0000000..6de08c2 --- /dev/null +++ b/posts/70.html @@ -0,0 +1,10 @@ +title: Curso de informática de Pedro Reina +date: 2006-01-13 15:33 +--- +
+

La noticia no es nueva pero nunca está de más recordarla. Pedro Reina, profesor de secundaria, distribuye libremente para todo el mundo su curso de informática bajo la licencia GNU Free Documentation License.

+ +

Este curso es ideal para usar en la docencia en institutos de secundaria, primeros cursos de carreras no tecnológicas y academias de informática y aunque puede seguirse usando cualquier sistema operativo, libre o privativo, el autor se inclina por los programas libres por encontrarse disponibles para todo el mundo y por las ventajas que ofrecen (ya hablé sobre ello en el apartado "Uso en la enseñanza" de mi artículo ¿Qué es el software libre?).

+ +

Además se puede descargar también un CD-ROM con todos los programas usados en el curso. Si el curso se realiza sobre GNU/Linux basta con añadir otro CD con la distribución preferida para poder proveer a los alumnos de todas las herramientas necesarias para que puedan practicar también en sus casas.

+
diff --git a/posts/71.html b/posts/71.html new file mode 100644 index 0000000..cae7e02 --- /dev/null +++ b/posts/71.html @@ -0,0 +1,22 @@ +title: Planeta Aditel +date: 2006-01-15 08:38 +--- +
+

Planeta Aditel es simplemente un planet que recoge las noticias de distintos LUGs (Grupos de Usuarios de Linux, de GNU/Linux o de software libre sería más correcto) españoles y está encuadrado en un proyecto más grande que en su día se llamó, si no recuerdo mal, Planeta LUG o MetaSLUG o algo parecido.

+ +

Es un proyecto ahora casi olvidado, o eso creo, pero cuando empezó causó mucha agitación. Voy a hacer como los viejos abuelos de las películas: me sentaré en mi mecedora (virtual), encenderé mi pipa (virtual) y contaré la batallita de cuando los LUGs estuvieron a punto de hacer algo muy grande.

+ +

Todo empezó allá por el 2004 (no hace tanto pero los años pasan volando). Trukulo, de Badopi, tuvo la idea de montar un planet que recogiera las noticias de los distintos LUGs españoles. Pero aún fue más allá y pensó en que fuera un proyecto compartido por todos los grupos de manera que cada uno tuviera su propia versión de planet. La cosa empezó a cuajar de forma que pronto empezaron a funcionar los planet.badopi.org, planet.bulma.net, planet.aditel.org, etc.

+ +

Pero la cosa no quedaba aquí. El objetivo final era formar una FLUG (Federación de LUGs). Esta federación tendría representantres de todos los grupos locales que la formaran elegidos democraticamente, y estos representantes elegirían un presidente, secretario, vocales, etc, es decir, un equipo de gobierno que representaría a la FLUG ante organos estatales como el Congreso de los Diputados para alcanzar objetivos como una Ley de Software Libre, acuerdos con colegios públicos a nivel nacional y más cosas. Cada LUG conservava su total independencia a nivel local y seguía realizando sus acciones sin interferir con la FLUG, que abarcaba los asuntos a escala nacional.

+ +

Como no podía ser de otra manera los problemas surgieron antes incluso de empezar. Muchos grupos desconfiaban de ser reprensentados por un presidente que no formara parte del propio grupo. El hecho de que la lista de correo usada estuviera alojada en el servidor de Bulma (lo que llevo a pensar en la idea de una lista de correo distribuida), que Bulma fuera el LUG que más empeño estaba poniendo y que Ricardo Galli sonara como futurible presidente de la FLUG hizo aumentar todas esas desconfianzas.

+ +

Para remate Hispalinux se vió amenazada. Eran tiempos difíciles para ellos; Juan Tomás García había perdido muchos apoyos, se acercaban elecciones y las acusaciones entre los candidatos eran continuas. Según ellos, si los LUGs querían organizarse ya existía una infraestructura regional en Hispalinux que lo permitía y que la idea de una "federación" sonaba demasiado a "separatismo" y a "republicanismo".

+ +

Y ese fue el final. En el momento en que la política entró dentro de algo que en un principio no tenía nada que ver hizo que las discusiones llegaran a niveles insospechados en un principio. Discusiones sobre si estabamos hablando de una república española virtual o no (mucha gente creía que sí y lo defendía de forma virulenta), discusiones sobre las lenguas oficiales (algo que nunca nos había preocupado), etc, etc, llevaron a que Bulma diera carpetazo y abandonara el germen de FLUG mientras Trukulo intentaba poner paz sin conseguirlo.

+ +

Finalmente todo quedó en "caldo de borrajas" como se suele decir y quedaron los distintos planets como prueba de lo que un día estuvo a punto de hacerse.

+ +

Quién sabe... quizás dentro de otros dos años...

+
diff --git a/posts/72.html b/posts/72.html new file mode 100644 index 0000000..da4c626 --- /dev/null +++ b/posts/72.html @@ -0,0 +1,6 @@ +title: Breve análisis de la GPLv3 +date: 2006-01-17 07:42 +--- +
+Despues de leer el primer borrador de la nueva versión de la GPL estaba preparando un pequeño análisis para explicar las diferencias fundamentales pero me conformaré con enlazar a Sorprendido con la GPL3. Podemos estar tranquilos; la FSF sigue apostando por la libertad contra viento y marea. +
\ No newline at end of file diff --git a/posts/73.html b/posts/73.html new file mode 100644 index 0000000..0e769c9 --- /dev/null +++ b/posts/73.html @@ -0,0 +1,55 @@ +title: Microsoft y SAP vuelven sin tapujos a por las Patentes de Software en Europa +date: 2006-01-21 17:33 +--- +
+

Por medio de una de las listas de correo de la FFII me ha llegado el siguiente correo de Alberto Barrionuevo. Como los archivos de la lista solamente están disponibles para los suscriptores y creo que el contenido de este correo es de interés general para todos, paso a copiarlo a continuación.

+ +

Hola,

+ +

para información de todos y siguiendo con el aviso reciente de que el Comisario de Mercado Interno, el Sr. McCreevy, pretendía volver a colar las patentes de software mediante el relanzamiento que hizo esta semana de la Directiva de Patente Europea, aquí está la confirmación de intenciones hacia la misma por parte de los principales actores del lobby pro-patentes: Microsoft y SAP (su departamento de abogacía, principalmente).

+ +

Industry Readies For Round Two Of EU Patent Directive

+ +

El método para legalizar las patentes de software sería a grandes rasgos algo así como esto:

+ +
    +
  1. Sacar adelante la Directiva de Patente Comunitaria o Europea que acaba de relanzar la Comisión Europea (aún está por ver si se tramitará mediante el procedimiento de co-decisión del Parlamento y el Consejo, o mediante unanimidad del Consejo).
  2. + +
  3. Que en dicha directiva, tal y como se incluye en esta propuesta de McCreevy, se haga de alguna forma ley europea la actual práctica administrativa de la Oficina europea de Patentes. Recuerdo que esta práctica es la que ha concedido por ahora unas 50.000 patentes de software en Europa. Esto sería una aberración democrática equivalente a que los funcionarios de la OTAN escribieran las leyes sobre defensa españolas y europeas.
  4. + +
  5. Que en dicha directiva se le de el control del Tribunal Superior de Patentes Europeo (de nueva constitución) o nacionales a los miembros de la Oficina Europea de Patentes. Esto sería una aberración democrática equivalente a que los funcionarios de la OTAN compusieran el Tribunal Internacional de La Haya y los tribunales supremos nacionales para temas de defensa, genocidio, etc.
  6. + +
  7. Que se lleven juicios sobre patentes de software hasta dicha última instancia y, una vez allí, con el tribunal superior a favor totalmente de las patentes de software, que se cree jurisprudencia que las legalice en toda la Unión Europea y para siempre, y por ende, en el resto del mundo, pues ya estarían legalizadas en mayor o menor medida en EEUU, Japón, Australia, Nueva Zelanda y la Unión Europea.
  8. +
+ +

El método puede sonar algo retorcido (lo es), pero no olvidemos que esa misma ha sido la forma en que se legalizaron las patentes de software en EEUU: por jurisprudencia, no por ley, y que allí el Tribunal Supremo ha dictado que es patentable "todo lo que haga el ser humano bajo el sol" (no sabemos si incluye los días nublados y las noches... ;)

+ +

Por suerte esta vez tendremos de nuestra parte que habrá jueces que se opongan a esa imparcialidad y falta de independencia de un tribunal superior europeo (ya lo ha hecho el juez Sir Jacob del Reino Unido).

+ +

Por contra, al no tratarse esta vez la directiva de patentes de software, sino de patentes en general, contaremos con la contrapartida de que podremos ser objeto de negociación y contrapartida. Por ejemplo: "España, tú me votas a favor del texto legalizando las patentes de software y yo a cambio te concedo que las patentes se puedan escribir en español en vez de sólo en inglés."

+ +

Como vemos, el juego es mucho más complicado en esta ocasión.

+ +

En resumen, en la última directiva pretendían aprobar las patentes de software por ley europea (directiva), ahora pretenden hacerlo por jurisprudencia y gracias a una ley europea que deja abierto el hueco de crear esa jurisprudencia fácilmente.

+ +

¿Propuestas ante este feo panorama?

+ +

Saludos,
+ Alberto.

+ +

PD: que me disculpen los trabajadores de la OTAN por ponerlos como ejemplo: era un mero ejemplo y en absoluto quiere decir que yo tenga nada contra ellos.

+ +

PD2: recuerdo que la Oficina Europea de Patentes es:

+ +
    +
  1. una oficina compuesta por funcionarios públicos.
  2. +
  3. externa a la Unión Europea.
  4. +
  5. no sujeta a ninguna ley europea ni nacional (si siquiera a las leyes laborales de ningún país)
  6. +
  7. que no tiene ningún tribunal por encima.
  8. +
  9. sólo sujeta a su carta constitucional, el Convenio de la Patente Europea, que lo interpretan como les apetece sin que nadie se lo pueda corregir.
  10. +
  11. dirigida por funcionarios de patentes de las oficinas nacionales de 35 países europeos.
  12. +
  13. que las patentes que aprueban son válidas en todos esos países adheridos al CPE, aunque esto no quiere decir que sean ejecutables judicialmente, pues por ahora, y por ahí nos salvamos, las leyes nacionales y lo que dicten los tribunales están por encima de lo que diga esa oficina (hasta que lo cambien con una directiva como la de Patente Comunitaria o cualquier otra).
  14. +
  15. que funciona internamente como una empresa cuyo negocio es conceder patentes y no perder tiempo y dinero denegándolas.
  16. +
+
+
diff --git a/posts/74.html b/posts/74.html new file mode 100644 index 0000000..ca33fe8 --- /dev/null +++ b/posts/74.html @@ -0,0 +1,25 @@ +title: winmail.dat (y qué pasa con mis derechos) +date: 2006-01-26 09:30 +--- +
+

En mi lugar de trabajo soy la única persona que utiliza un cliente de correo libre (en este caso Mozilla Thunderbird) y el resto de compañeros usan MS Outlook. Ayer recibo un correo con información importante que estaba esperando y resulta que los archivos adjuntos me llegan dentro de un fichero con el nombre winmail.dat.

+ +

Esto ocurre porque envían el correo desde Outlook con formato RTF (de todos es sabido que en el diccionario de Microsoft la palabra estándar no viene) por lo que no me queda más remedio que llamar para que me vuelvan a enviar el correo pero sin formato, con el consiguiente cachondeo del personal.

+ +

¡Cómo si el problema fuera de mi cliente de correo que no funciona como debería funcionar!

+ +

Un supuesto. Imaginemos que Movistar (empresa de telefonía móvil con más número de clientes en España, creo) modifica la forma en que se transmiten las llamadas de voz. Entre teléfonos Movistar no se aprecia cambio alguno pero los clientes de Vodafone y de Amena no pueden oir correctamente a los que hablan desde teléfonos Movistar, oyen las palabras entrecortadas. En cambio, desde los teléfonos Movistar se oye perfectamente a los que hablan desde las otras compañías.

+ +

La argumentación de Movistar en este caso es que las demás compañías no hacen nada por innovar y que la solución es que Amena y Vodafone adopten su nuevo sistema (pagando, claro) o que sus clientes pasen a Movistar para acabar con sus problemas.

+ +

En un caso así:

+ +
    +
  1. Los gritos de clientes y de oficinas de consumidores se oirían desde Marte acusando de prácticas monopolísticas y reclamando el retorno a la situación anterior.
  2. +
  3. Amena y Vodafone demandarían a Movistar exigiendo lo mismo que los otros y pidiendo indemnizaciones por daños y perjuicios.
  4. +
  5. La oposición (la que fuera) pediría la dimisión del Ministro involucrado y explicaciones del Presidente del Gobierno en el Congreso de los Diputados.
  6. +
  7. ... seguro que más cosas que ahora no se me ocurren.
  8. +
+ +

Pero, volviendo al caso que nos ocupa, la culpa es mía por no usar un cliente de correo que corta de raíz mis derechos como usuario y que a cambio me deja trabajar con el "maravilloso formato RTF". Lo que me faltaba por oir.

+
diff --git a/posts/75.html b/posts/75.html new file mode 100644 index 0000000..88df3e8 --- /dev/null +++ b/posts/75.html @@ -0,0 +1,20 @@ +title: GPLv3 y la polémica con las claves privadas +date: 2006-01-29 08:13 +--- +
+

Durante los últimos días se ha generado una gran polémica alrededor de algunas de las condiciones establecidas en el borrador de la GPLv3 y sobretodo en lo que respecta en el siguiente párrafo que paso a transcribir:

+ +

Complete Corresponding Source Code also includes any encryption or authorization codes necessary to install and/or execute the source code of the work, perhaps modified by you, in the recommended or principal context of use, such that its functioning in all circumstances is identical to that of the work, except as altered by your modifications. It also includes any decryption codes necessary to access or unseal the work's output. Notwithstanding this, a code need not be included in cases where use of the work normally implies the user already has it.

+ +

Diccionario en mano, como todos los que no somos muy duchos en la lengua de Shakespeare, podemos comprender que se nos está diciendo que ningún dispositivo "trusted computing" podrá ejecutar programas licenciados bajo GPLv3 a menos que proporcionen las claves para acceder, estudiar y modificar esos programas, lo cuál está totalmente en contra de la definición de "trusted computing" que nos impide decidir qué se ejecuta en nuestras máquinas (podemos encontrar más información sobre el tema en Preguntas frecuentes sobre Informática Fiable y en ¿Puede confiar en su computadora?).

+ +

Bueno, hasta aquí lo tenía todo claro hasta que empecé a leer opiniones como la de Linus Torvalds cuando dice que "I think it's insane to require people to make their private signing keys available, for example. I wouldn't do it. So I don't think the GPL v3 conversion is going to happen for the kernel, since I personally don't want to convert any of my code", lo que me lleva a pensar que una de dos, o este señor se equivoca o el que se equivoca soy yo.

+ +

Vuelvo a repasar el borrador y sigo pensando que en ningún sitio se dice que las personas tengan que publicar sus claves privadas sino que se refiere a los dispositivos de informática traicionera. Supongo que Torvalds está malinterpretando el texto.

+ +

O quizás no. Despues de todo ya hace unos dos años Linus ya afirmó hace tiempo que le gustaría que Linux pudiera servir para todo, incluso para cosas que personalmente pudieran no gustarle. De todos es sabido que la ética de Torvalds dista mucho de la de Stallman y de la de la Free Software Foundation así que a lo mejor lo que Linus Torvalds desea es que esos dispositivos que acaban con los derechos de sus usuarios puedan funcionar con un kernel Linux o basado en el kernel Linux (licenciado con GPLv2) y a pesar de ello seguir limitando esos derechos y libertades, justamente lo que intenta evitar la GPLv3.

+ +

Torvalds y otros pueden decir que eso es libertad, pero a mi no me lo parece. Libertad para reducir la libertad de otros no es libertad, ni nunca lo será, ya que la libertad de uno acaba exactamente donde empieza la libertad de los demás y usar software GPL para fabricar aparatos que limitan la libertad de usar, copiar, modificar y distribuir es algo completamente opuesto al espíritu de la propia GPL.

+ +

Que nadie se deje engañar por todos estos flames que ultimamente aparecen por la red sobre la publicación de las claves privadas ya que o bien son de personas poco informadas o bien se trata de mentiras intencionadas, ya que del primer borrador de la GPLv3 podemos decir sin riesgo a equivocarnos que defiende a ultranza los intereses, los derechos y las libertades de todos nosotros, de las personas.

+
diff --git a/posts/76.html b/posts/76.html new file mode 100644 index 0000000..7806d9f --- /dev/null +++ b/posts/76.html @@ -0,0 +1,58 @@ +title: GPLv3 párrafo a párrafo (Preámbulo) +date: 2006-01-30 12:45 +--- +
+

Ante el desconocimiento que muestra mucha gente ante el contenido del borrador de la GPLv3 he pensado que sería bueno ir desgranándolo punto por punto y párrafo por párrafo, por lo que he decidido realizar una serie de entregas traduciendo y explicando dónde crea necesario la futura versión 3 de la GPL. 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 Free Software Foundation, por lo que mis opiniones y conclusiones podrían estar equivocadas.

+ +

La primera sección del borrador es el preámbulo, en el que se explica de forma general el objetivo de la licencia y sus características.

+ +

"Preamble

+ +

The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other program whose authors commit to using it. (Some Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too."

+ +

Las licencias de una buena parte de los programas están diseñadas para eliminar tu libertad de compatir y cambiar esos programas. Por contra, la GNU General Public License está pensada para garantizar tu libertad de compartir y cambiar programas libres -- para estar seguros de que los programas son libres para todos sus usuarios. Nosotros, la Free Software Foundation, usamos la GNU General Public License para la mayor parte de nuestros programas; se aplica también en cualquier otro programa cuyos autores quieran usarla. (Algunos programas de la Free Software Foundation están cubiertos por la GNU Lesser General Public License.) Puedes usarla para tus programas también.

+ +

"When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things."

+ +

Cuando hablamos de programas libres nos estamos refiriendo a la libertad, no al precio. Nuestras General Public Licenses están diseñadas para estar seguros de que tienes la libertad de distribuir copias de programas libres (y cobrar por el servicio si quieres), de que recibes el código fuente o de que puedes obtenerlo si quieres, de que puedes cambiar el programa o usar partes del programa en nuevos programas libres; y de que tú sabes que puedes hacer esas cosas.

+ +

La confusión entre software libre (free software) y software gratis (free software) es algo habitual en los países de habla inglesa, aunque nosotros no deberíamos tener problemas. Aún así suele ocurrir que muchas personas confunden libre y gratis cuando no tiene nada que ver.

+ +

"To protect your rights, we need to make requirements that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it."

+ +

Para proteger tus derechos necesitamos crear requerimientos que prohíban que cualquiera te los deniegue o te pida que renuncies a ellos. Estas restricciones se traducen en ciertas responsabilidades para ti si distribuyes copias del programa, o si lo modificas.

+ +

Estas condiciones son las que garantizan que el programa seguirá siendo libre.

+ +

"For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights."

+ +

Por ejemplo, si distribuyes copias de un programa, ya sea de forma gratuita o cobrando por ello, debes proporcionar a los receptores todos los derechos que tienes. Debes asegurarte de que reciben o pueden obtener el código fuente. Y debes mostrarles estos términos para que ellos también conozcan sus derechos.

+ +

"Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software."

+ +

Los desarrolladores que usan la GNU GPL protegen sus derechos mediante dos pasos: (1) afirman que tienen los derechos de autor sobre el programa, y (2) ofrecen esta Licencia que te proporciona permiso legal para copiar, distribuir y/o modificar el programa.

+ +

Este párrafo nos dice algo muy importante. Los derechos de autor pertenecen al creador del programa, que nos cede voluntariamente los derechos de copiar, distribuir y modificar. La autoría del programa sigue siendo suya, por lo que nadie puede apropiarse de su trabajo, en contra de muchos FUDs que han circulado por Internet.

+ +

"For the developers' and author's protection, the GPL clearly explains that there is no warranty for this free software. If the software is modified by someone else and passed on, the GPL ensures that recipients are told that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations."

+ +

Para la protección de desarrolladores y autores, la GPL explica claramente que no hay garantía para los programas libres. Si el programa es modificado por cualquier otra persona y distribuido, la GPL asegura que los receptores del programa saben que no tienen el original, por lo que cualquier problema debido a modificaciones de terceros no quedará reflejado en la reputación del autor original.

+ +

De esta forma los desarrolladores quedan protegidos por posibles demandas por daños y perjuicios en caso de que el programa no funcione como se espera, bien sea por manipulaciones malintencionadas o por errores en la programación. Es responsabilidad del usuario obtener el programa de fuentes fiables y comprobar que funciona correctamente.

+ +

"Some countries have adopted laws prohibiting software that enables users to escape from Digital Restrictions Management. DRM is fundamentally incompatible with the purpose of the GPL, which is to protect users' freedom; therefore, the GPL ensures that the software it covers will neither be subject to, nor subject other works to, digital restrictions from which escape is forbidden."

+ +

Algunos países han adoptado leyes prohibiendo programas que permitan a sus usuarios escapar del Digital Restrictions Management. DRM es totalmente incompatible con el propósito de la GPL, que es proteger la libertad de los usuarios; por lo que la GPL garantiza que ni los programas cubiertos por ella ni otros trabajos estarán sujetos a restricciones digitales de las que esté prohibido escapar.

+ +

Esta parte es la que ha levantado más polvareda y la trataré de forma más precisa en la entrega correspondiente.

+ +

"Finally, every program is threatened constantly by software patents. We wish to avoid the special danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, the GPL makes it clear that any patent must be licensed for everyone's free use or not licensed at all."

+ +

Finalmente, cada uno de los programas está amenazado constantemente por las patentes de software. Deseamos evitar el peligro de que redistribuidores de programas libres obtengan licencias de patentes de forma individual, convirtiendolos en programas privativos. Para prevenir esto, la GPL deja claro que cualquier patente debe registrarse de forma que todos puedan usarla libremente.

+ +

"The precise terms and conditions for copying, distribution and modification follow."

+ +

A continuación los términos y condiciones de forma precisa para copiar, distribuir y modificar.

+ +

En próximas entregas... ;-)

+
diff --git a/posts/77.html b/posts/77.html new file mode 100644 index 0000000..1853638 --- /dev/null +++ b/posts/77.html @@ -0,0 +1,26 @@ +title: GPLv3 párrafo a párrafo (Sección 0: Definiciones) +date: 2006-01-31 09:52 +--- +
+

Siguiendo con la serie de entregas de GPLv3 párrafo a párrafo pasamos ya a las secciones específicas del borrador de la GPLv3 y en esta entrega en concreto trataré la sección 0 sobre las definiciones de los términos que se tratan en el resto del borrador.

+ +

Recuerdo que en estas entregas no se plasman ni traducciones ni explicaciones oficiales de la Free Software Foundation tratándose siempre de opiniones personales.

+ +

0. Definitions.

+ +

A "licensed program" means any program or other work distributed under this License. The "Program" refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either modified or unmodified. Throughout this License, the term "modification" includes, without limitation, translation and extension. A "covered work" means either the Program or any work based on the Program. Each licensee is addressed as "you".

+ +

Un "programa registrado" será cualquier programa u otro trabajo distribuido bajo esta Licencia. El término "Programa" se refiere a cualquier programa o trabajo, y un "trabajo basado en el Programa" se refiere tanto al Programa como a cualquier trabajo derivado según las leyes de copyright o derechos de autor, es decir, un trabajo conteniendo el Programa o una parte de él, modificada o sin modificar. Según esta Licencia el término "modificación" incluye, sin limitaciones, traducciones y extensiones. Un "trabajo protegido" se refiere al Programa o a cualquier trabajo basado en el Programa. A cada beneficiario o usuario de la Licencia se le denomina como "tú".

+ +

Esto puede parecer algo complicado y retorcido pero no lo es. En este párrafo se nos explica detalladamente lo que se considera como programa y, más importante, lo que se considera como trabajo derivado. El trabajo derivado de un programa puede ser una copia del programa, un trozo del código, una traducción, una ampliación (nuevas funcionalidades), sin ningún tipo de limitaciones.

+ +

La última frase nos está diciendo que cuando habla de los destinatarios de la licencia, los que reciben los derechos y los deberes de la licencia, lo hace en segunda persona. Por ejemplo, tú puedes copiar..., tú puedes modificar..., tú debes respetar..., etc.

+ +

To "propagate" a work means doing anything with it that requires permission under applicable copyright law, other than executing it on a computer or making private modifications. This includes copying, distribution (with or without modification), sublicensing, and in some countries other activities as well.

+ +

El término "propagar" un trabajo quiere decir hacer cualquiera de las acciones que requieren permiso según las leyes de copyright o derechos de autor, a parte de las de ejecutarlo en un ordenador o realizar modificaciones para uso propio. Se incluyen las acciones de copiar, distribuir (con o sin modificaciones), sublicenciar, y otras actividades dependiendo del país.

+ +

Aquí también se nos dice algo muy importante y que también ha levantado muchas polémicas con la GPLv2. La licencia no tiene vigor cuando se ejecuta un programa o se modifica para uso propio y privado, es decir, que podemos hacer modificaciones de un programa bajo licencia GPL y no estamos obligados a distribuir las modificaciones siempre y cuando no distribuyamos ese programa modificado.

+ +

En caso de distribución sí que se aplican las condiciones de la licencia.

+
diff --git a/posts/78.html b/posts/78.html new file mode 100644 index 0000000..d72e73f --- /dev/null +++ b/posts/78.html @@ -0,0 +1,38 @@ +title: GPLv3 párrafo a párrafo (Sección 1: Código fuente) +date: 2006-02-01 09:53 +--- +
+

Nueva entrega de la serie GPLv3 párrafo a párrafo sobre el borrador de la GPLv3 en la que trataré la sección 1 que puede ser considerada una extensión de las definiciones de la sección 0 pero centrada sobre el código fuente.

+ +

Como ya va siendo habitual, advierto que en estas entregas no se plasman ni traducciones ni explicaciones oficiales de la Free Software Foundation tratándose siempre de opiniones personales.

+ +

1. Source Code.

+ +

The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source version of a work.

+ +

"Código fuente" de un trabajo hace referencia a la forma preferida para realizar modificaciones en ese trabajo. "Código objeto" es cualquier versión del trabajo que no es código fuente.

+ +

The "Complete Corresponding Source Code" for a work in object code form means all the source code needed to understand, adapt, modify, compile, link, install, and run the work, excluding general-purpose tools used in performing those activities but which are not part of the work. For example, this includes any scripts used to control those activities, and any shared libraries and dynamically linked subprograms that the work is designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work, and interface definition files associated with the program source files.

+ +

El "código fuente completo correspondiente" de un trabajo en código objeto es todo el código fuente necesario para comprender, adaptar, modificar, compilar, enlazar, instalar y ejecutar el trabajo, excluyendo herramientas de propósito general para realizar dichas actividades pero que no forman parte del trabajo en si. Por ejemplo, cualquier script para controlar esas actividades, cualquier librería compartida o cualquier subprograma enlazado dinamicamente que el trabajo pueda requerir, como comunicaciones de datos privados o control de flujo entre esos subprogramas y otras partes del trabajo, y los ficheros de definición asociados con los fuentes del programa.

+ +

Complete Corresponding Source Code also includes any encryption or authorization codes necessary to install and/or execute the source code of the work, perhaps modified by you, in the recommended or principal context of use, such that its functioning in all circumstances is identical to that of the work, except as altered by your modifications. It also includes any decryption codes necessary to access or unseal the work's output. Notwithstanding this, a code need not be included in cases where use of the work normally implies the user already has it.

+ +

El código fuente completo correspondiente también incluye cualquier cifrado o códigos de autorización necesarios para instalar y/o ejecutar el código fuente del trabajo, quizás modificado por ti, en el contexto de uso recomendado o principal, para que su funcionamiento en cualquier circunstancia sea idéntico al del trabajo, exceptuando las alteraciones producidas por tus modificaciones. También incluye cualquier código de descifrado necesario para acceder o descodificar la salida realizada por el trabajo. A pesar de esto, no será necesario incluir los códigos en los casos en los que el uso del trabajo implique que los usuarios ya disponen de ellos.

+ +

En pocas palabras, que el acceso al código fuente completo correspondiente no pueda ser limitado de ninguna manera, lo que choca de frente con las especificaciones de los sistemas DRM. Bajo mi punto de vista, malo para las empresas que desarrollan sistemas DRM, bueno para los usuarios.

+ +

Complete Corresponding Source Code need not include anything that users can regenerate automatically from other parts of the Complete Corresponding Source Code.

+ +

El código fuente completo correspondiente no necesita incluir nada que los usuarios puedan regenerar automaticamente desde otras partes del código fuente completo correspondiente.

+ +

Para ser sinceros he de decir que no comprendo a qué se refiere con esta frase, así que comentarios aclaratorios serían muy bien recibidos.

+ +

As a special exception, the Complete Corresponding Source Code need not include a particular subunit if (a) the identical subunit is normally included as an adjunct in the distribution of either a major essential component (kernel, window system, and so on) of the operating system on which the executable runs or a compiler used to produce the executable or an object code interpreter used to run it, and (b) the subunit (aside from possible incidental extensions) serves only to enable use of the work with that system component or compiler or interpreter, or to implement a widely used or standard interface, the implementation of which requires no patent license not already generally available for software under this License.

+ +

Como excepción especial, el código fuente completo correspondiente no necesita incluir una subunidad en particular si (a) la subunidad idéntica es incluída normalmente en la distribución de un componente esencial mayor (kernel, gestor de ventanas, y otros) del sistema operativo en el que se ejecuta o es un compilador usado para producir el ejecutable o es un intérprete de código objeto usado para ejecutarlo, y (b) la subunidad (aparte de posibles extensiones casuales) solamente sirva para permitir el uso del trabajo con ese componente del sistema o con ese compilador o con ese intérprete, o para implementar una interfaz estándar o de uso general y que esa implementación requiera otra licencia, lo que normalmente no es posible para los programas bajo esta Licencia.

+ +

De esta forma se ayuda a la modularidad de los programas libres, haciendo innecesaria la duplicación de código para cada programa que use unas determinadas funcionalidades generales disponibles para todo el conjunto de programas libres.

+ +

Dudo mucho que la traducción de la última linea sea la correcta, por lo que si alguien se anima estaría agradecido también.

+
diff --git a/posts/79.html b/posts/79.html new file mode 100644 index 0000000..8dfdc9a --- /dev/null +++ b/posts/79.html @@ -0,0 +1,24 @@ +title: Microsoft ofrece un regalo envenenado +date: 2006-02-02 15:08 +--- +
+

Transcribo la siguiente noticia de Joachim Jakobs traducida por Pablo Machón y Xavier Reina al español, obtenida desde el original en la web de la FSFEuropa.

+ +

FSFE: «Microsoft ofrece un regalo envenenado» - «Las alabanzas, analizadas retrospectivamente, eran prematuras»

+ +

La Free Software Foundation Europa (FSFE) analiza críticamente la oferta de Microsoft para publicar el código fuente en lugar de los protocolos de comunicación.

+ +

El presidente de la FSFE, Georg Greve, explica: «La Comisión Europea solicitó a Microsoft que publicara sus protocolos de comunicaciones para permitir a terceros escribir software interoperable que restableciera la libre competencia. Parece ser que esto no ha sucedido; como mínimo las condiciones bajo las cuales los protocolos están supuestamente disponibles no son claras. Lo que han hecho en su lugar es publicar el código fuente, cuando no se les pidió que lo hiciesen».

+ +

En una nota de prensa, Microsoft anunció que «pubicaría bajo licencia todo el código fuente de Windows Server». Esto subrayaría el «compromiso de satisfacer los requerimientos legales» de Microsoft.

+ +

Según la FSFE esto no será de ninguna ayuda; al contrario, causará problemas adicionales. Carlo Piana, el asesor legal de la FSFE, comenta: «Este "compromiso" está envenenado; lo han hecho de una forma que perjudica la situación del Software Libre: dado que Microsoft tiene los derechos de autor del código fuente, los programadores que hayan visto el código no lo podrán implementarlo de nuevo como Software Libre por miedo a una violación de los derechos de autor».

+ +

Incluso puede ser peor: «Microsoft podría intentar frenar a la competencia denunciando infracciones de los derechos de autor, argumentando que los programadores "podrían" haber visto su código fuente», concluye Piana.

+ +

Georg Greve añade: «Cierto; ¿Cómo podrían los programadores exactamente escribir software que sea interoperable sin mirar el código fuente, si las especificaciones de los protocolos no están disponibles? Si abres este regalo, te encontrarás envenenado por los derechos de autor de Microsoft».

+ +

Después de dar la bienvenida a las nuevas licencias «Shared Source» («Código compartido») de Microsoft, que son substancialmente mejores respecto a sus previas propuestas de licencias, la FSFE otorgó a Microsoft el beneficio de la duda.

+ +

«Ahora parece claro que únicamente era otra técnica de marketing: Ayer Microsoft actuó como un ladrón que, cuando se le pide que deje la pistola, te lanza una granada. Nuestras felicitaciones a Microsoft parecían prematuras analizándolo retrospectivamente» concluye Greve.

+
diff --git a/posts/8.html b/posts/8.html new file mode 100644 index 0000000..57f7a02 --- /dev/null +++ b/posts/8.html @@ -0,0 +1,10 @@ +title: La sección de fotos ya funciona +date: 2003-10-25 07:29 +--- +
+

Al igual que ocurriera con kkblog, mi pequeño software para cuadernos de bitácora, he creado unos cuantos scripts en php que forman el paquete MGallery para gestionar colecciones de fotos. Un día de estos colgaré los fuentes de MGallery en la web. Aprovecho para decir que ya he congelado la que será la primera versión de kkblog, que muy pronto estará disponible.

+ +

De momento he puesto unas fotos de cuando estuve dando una charla sobre el software libre en la Netweekend 2003 y tambien, tras continuadas peticiones de los fans, he colgado la foto de familia de la boda, para disfrute del personal.

+ +

Au! A pasar-ho be!

+
diff --git a/posts/80.html b/posts/80.html new file mode 100644 index 0000000..f7b6d39 --- /dev/null +++ b/posts/80.html @@ -0,0 +1,10 @@ +title: ¿Dónde está la sección de software libre? +date: 2006-02-02 15:17 +--- +
+

Hablando sobre el diseño de mi blog me han preguntado la razón por la que no tengo una sección de software libre. Tengo secciones de artículos, curiosidades, ideas, noticias, etc... ¿y la de software libre?

+ +

La respuesta es sencilla y evidente. Yo siempre que hablo de programas lo hago de programas libres ya que son los únicos de los que merece la pena hablar, por lo que no necesito una sección específica. Quizás la necesitaría si ofreciera contenidos más diversos pero, para desgracia y tortura de mis lectores, soy bastante monotemático.

+ +

Pues ya lo sabeis, por si alguien se lo preguntaba.

+
diff --git a/posts/81.html b/posts/81.html new file mode 100644 index 0000000..9664b9f --- /dev/null +++ b/posts/81.html @@ -0,0 +1,37 @@ +title: Sobre el cierre de Frikipedia +date: 2006-02-04 11:49 +--- +
+

A estas horas todo el mundo ha oído algo sobre el cierre de la Frikipedia. En mi caso la noticia me ha llegado a través de Menéame y Barrapunto aunque con muy poca información ya que los afectados apenas comunican nada.

+ +

Por lo visto todo se ha debido a una denuncia de la SGAE por una definición que tenía la Frikipedia: Sus letras (SGAE) significan "Siempre Ganamos Algunos Euros".

+ +

No soy ningún abogado y además desconozco con exactitud los detalles de la denuncia de la SGAE y los procedimientos jurídicos que se están llevando a cabo, pero aprovecharé para intentar dar algunos consejillos a los que puedan encontrarse en situaciones parecidas ahora o en el futuro, sobretodo en los casos de portales colaborativos de contenidos.

+ +

Cuando hablamos de un portal colaborativo, es decir, que los contenidos suelen introducirse por terceras personas, estamos hablando en la mayoría de los casos de prestadores de servicios de almacenamiento de datos (Barrapunto o Libertonia por ejemplo) o de prestadores de servicios que facilitan enlaces a contenidos (Menéame se aproxima más a este otro aunque estaría a caballo entre los dos) según las definiciones de la LSSICE. Para estos casos son de aplicación los artículos 16 y 17 de la mencionada ley.

+ +

Artículo 16. Responsabilidad de los prestadores de servicios de alojamiento o almacenamiento de datos.

+ +

1. Los prestadores de un servicio de intermediación consistente en albergar datos proporcionados por el destinatario de este servicio no serán responsables por la información almacenada a petición del destinatario, siempre que:

+ +

a) No tengan conocimiento efectivo de que la actividad o la información almacenada es ilícita o de que lesiona bienes o derechos de un tercero susceptibles de indemnización, o

+ +

b) Si lo tienen, actúen con diligencia para retirar los datos o hacer imposible el acceso a ellos.

+ +

Se entenderá que el prestador de servicios tiene el conocimiento efectivo a que se refiere el párrafo a) cuando un órgano competente haya declarado la ilicitud de los datos, ordenado su retirada o que se imposibilite el acceso a los mismos, o se hubiera declarado la existencia de la lesión, y el prestador conociera la correspondiente resolución, sin perjuicio de los procedimientos de detección y retirada de contenidos que los prestadores apliquen en virtud de acuerdos voluntarios y de otros medios de conocimiento efectivo que pudieran establecerse.

+ +

2. La exención de responsabilidad establecida en el apartado 1 no operará en el supuesto de que el destinatario del servicio actúe bajo la dirección, autoridad o control de su prestador.

+
+ +

El artículo 17 es idéntico pero aplicable a los prestadores de servicios que facilitan enlaces a contenidos.

+ +

Resumiendo, con la ley en la mano solamente nos pueden obligar a retirar los contenidos denunciados ya que si los contenidos son de terceras personas el prestador de servicios está exento de responsabilidad. Más importante aún, esta obligación solamente podrá ser impuesta por un órgano competente, aunque no tengo muy claro qué se entiende por órgano competente.

+ +

La cosa se complica si el contenido es obra directa del prestador de servicios o se ha realizado bajo su dirección, ya que entonces sí que existe responsabilidad y se pueden aplicar las medidas de carácter provisional detalladas en el artículo 41, entre las que se incluye la suspensión temporal de la actividad del prestador de servicios. Pero ojo, solamente en este caso, nunca por los contenidos de terceros que han sido realizados libremente y sin intromisión del prestador.

+ +

Por ejemplo, yo no soy responsable de los comentarios que mis lectores puedan escribir en mi página ni estoy obligado a saber si esos comentarios son ilícitos en cualquiera de las formas descritas por la ley. Solamente puedo verme obligado a retirarlos en el momento que se me notifique vía resolución judicial, nunca por amenazas de terceros implicados.

+ +

Si alguien se ve algún día en una situación similar que sepa que en la mayoría de los casos la ley está de su parte, sobretodo cuando hablamos de portales colaborativos, foros, listas de correo, blogs, ... en los que participan otras personas aparte de la que ejerce como prestador. No dudeis en buscar un abogado y no os preocupeis por el dinero, cuanto más grande e importante sea el demandante más fácil será encontrar un abogado que esté dispuesto a ayudaros sin cobrar. En estos casos, la buena prensa que reciben es lo que más se valora; lo de David y Goliath vende mucho.

+ +

Como despedida quiero recordar que es importante conocer, aunque sea de pasada, las leyes que nos afectan a los que nos movemos por estos derroteros y que no son tantas. Principalmente la Ley Orgánica de Protección de Datos (LOPD), la Ley de Servicios de la Sociedad de Información y Comercio Electrónico (LSSICE) y la Ley de la Propiedad Intelectual (LPI). Aunque estemos incluso en contra de algunas no estamos eximidos de su cumplimiento... y conocer nuestros derechos siempre nos hace más fuertes.

+
diff --git a/posts/82.html b/posts/82.html new file mode 100644 index 0000000..ca388e7 --- /dev/null +++ b/posts/82.html @@ -0,0 +1,34 @@ +title: GPLv3 párrafo a párrafo (Sección 2: Permisos básicos) +date: 2006-02-06 16:54 +--- +
+

Hola de nuevo. En esta entrega de la serie GPLv3 párrafo a párrafo sobre el borrador de la GPLv3 empezaremos a profundizar en las condiciones que hacen de la licencia GPL una de las más revolucionarias del mundo de la programación.

+ +

No olvideis que en estas entregas no se plasman ni traducciones ni explicaciones oficiales de la Free Software Foundation y se trata siempre de mis opiniones personales.

+ +

2. Basic Permissions.

+ +

All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the Program. The output from running it is covered by this License only if the output, given its content, constitutes a work based on the Program. This License acknowledges your rights of "fair use" or other equivalent, as provided by copyright law.

+ +

Todos los derechos garantizados por esta Licencia lo están como derechos de autor del Programa, y son cedidos de forma irrevocable con las condiciones indicadas. Esta Licencia afirma de forma explícita tu permiso ilimitado para ejecutar el Programa. Los resultados de la ejecución se encontrarán cubiertos por esta Licencia solamente si dado su contenido constituyen un trabajo derivado del Programa. Esta Licencia reconoce tu derecho al "uso limpio" u otro equivalente, tal como indican las leyes de derechos de autor.

+ +

Nos viene a decir que el autor del Programa protegido por esta Licencia cede todos sus derechos sobre el programa al destinatario, pero siempre bajo unas determinadas condiciones que se irán explicando a lo largo del texto. No hay que olvidar que el autor nunca pierde la autoría del Programa, solamente hace una cesión de los derechos del mismo.

+ +

Como primera consecuencia de esta cesión nos encontramos con que no existe ninguna limitación al uso del Programa. Por lo tanto, no se puede establecer un período de prueba ni se pueden limitar las funciones del Programa como ocurre en el caso del shareware.

+ +

This License gives unlimited permission to privately modify and run the Program, provided you do not bring suit for patent infringement against anyone for making, using or distributing their own works based on the Program.

+ +

Esta Licencia te concede permiso ilimitado para modificar y ejecutar el programa, siempre y cuando no realices demandas por violación de patentes contra un tercero por desarrollar, usar o distribuir sus propios trabajos derivados del Programa.

+ +

Estamos ante uno de los cambios más significativos de la GPL. El permiso para usar y modificar un programa bajo GPL quedará revocado en el caso de que se inicien demandas de patentes contra otra persona por usar, desarrolar o distribuir programas derivados. De esta forma se pretende "castigar" a todos aquellos que intentan limitar la libertad de los programas GPL mediante las patentes.

+ +

No hace falta decir que esta condición ha levantado mucha polémica y seguirá levantando. En mi opinión, todo aquel que se dedica a registrar patentes de software con vistas a restringir la libertad de usuarios y desarrolladores no merece ni debe tener permiso para hacer uso de ese programa libre que deja de serlo por culpa de la patente. Si yo hago un programa y lo libero bajo GPL lo hago para que todo el mundo pueda disponer de mi trabajo siempre, no para que otro se enriquezca usando las odiosas patentes.

+ +

Propagation of covered works is permitted without limitation provided it does not enable parties other than you to make or receive copies. Propagation which does enable them to do so is permitted, as "distribution", under the conditions of sections 4-6 below.

+ +

La propagación de trabajos bajo esta Licencia está permitida sin ningún tipo de limitación mientras solamente tú realices o recibas las copias. La propagación que no cumpla este requisito también esta permitida como "distribución", bajo las condiciones de las secciones 4-6 de más abajo.

+ +

Hablando en cristiano, si realizas copias de un programa bajo GPL para uso totalmente privado no estás sujeto a ningún tipo de condiciones por parte de la Licencia. Veamos un ejemplo típico de listas de correo y foros. Si modificas un programa GPL para uso exclusivamente privado, es decir, para tí solamente, no estás obligado a publicar esos cambios.

+ +

Cuando la propagación se realiza a otras personas a parte de tí, o a otros grupos de personas (empresas, organizaciones, etc), entonces pasa a llamarse distribución y está sujeta a unas condiciones que se verán en posteriores entregas.

+
diff --git a/posts/83.html b/posts/83.html new file mode 100644 index 0000000..d72d9fc --- /dev/null +++ b/posts/83.html @@ -0,0 +1,12 @@ +title: Los pro-patentes actuando en España +date: 2006-02-06 17:30 +--- +
+

Bajo el título Jornada Internacional: La protección de la creación y la innovación en la economía digital se están preparando una serie de conferencias para el próximo miercoles en Madrid en las que se hablará sobre cómo usar las patentes de software para acabar con la innovación, destruir a las pequeñas empresas del sector y atenazar el mercado de forma que proporcione los máximos beneficios para las grandes corporaciones extranjeras a costa de los derechos de los usuarios y de los desarrolladores. Se puede consultar el programa, aunque viene detallado desde un punto de vista distinto del mío.

+ +

Acudirán algunos pesos pesados de los lobbies pro-patentes, pero nadie que pueda abrir una ventana que aporte algo de aire fresco y que sin duda emborronaría sus inmaculadas exposiciones.

+ +

Si alguien se encuentra estos días por Madrid y quiere defender los derechos de muchos otros, tengo constancia de que Alberto Barrionuevo está buscando voluntarios para asistir y realizar un "grupo de oposición" serio.

+ +

Es una oportunidad, además de para defender los derechos de muchos otros, para defender tus derechos, esos mismos que te están intentando quitar.

+
diff --git a/posts/84.html b/posts/84.html new file mode 100644 index 0000000..8e7ccec --- /dev/null +++ b/posts/84.html @@ -0,0 +1,38 @@ +title: Las empresas y el software libre (desbarradas mentales de un lunes por la noche) +date: 2006-02-07 10:36 +--- +
+

Antes que nada, dos obviedades.

+ +

Primera obviedad: es posible ganarse la vida desarrollando programas, desde desarrollos a medida hasta programas de propósito general u orientados a un público concreto, sin olvidar el trabajar por cuenta ajena. Es algo obvio por los numerosos casos de empresas y profesionales que viven del mercado del software, no es necesario demostrar nada.

+ +

Segunda obviedad: es posible ganarse la vida desarrollando programas libres, desde desarrollos a medida libres hasta programas libres de propósito general u orientados a un público concreto, sin olvidar el trabajar por cuenta ajena. Es algo obvio por los numerosos casos de empresas y profesionales que viven del mercado del software libre, no es necesario demostrar nada.

+ +

Y ahora, las preguntas.

+ +

Primera pregunta: si tengo una empresa de software, o quiero crear una, ¿qué modelo de negocio me reportará más beneficios, el modelo privativo o el modelo libre?

+ +

Sin duda alguna el modelo de mercado del software libre. Te permite minimizar muchos de tus gastos. No necesitas gastar dinero en la distribución de tu producto ya que los propios destinatarios, tus clientes, trabajarán como distribuidores tuyos y sin que te cueste dinero. Tampoco necesitarás gastar tanto dinero en promocionar tu producto, el boca a boca de tus nuevos distribuidores es en muchas ocasiones tan efectivo como una buena campaña publicitaria.

+ +

Segunda pregunta: pero ¿cómo gano dinero si se pueden copiar mis programas sin que yo vea un duro?

+ +

Cuando hacemos esta pregunta solemos olvidar la segunda obviedad. Bien, no somos los únicos ni los primeros en entrar en este mercado. Ya hay empresas que ganan dinero con este modelo. Entonces, ¿cómo lo hacen ellos? Sabemos que es posible pero falta conocer el cómo.

+ +

Hay que ser conscientes de que los usuarios domésticos no van a levantar nuestro negocio, ya esté basado en el modelo privativo o en el libre, ya que buscarán copias ilegales privativas o copias legales libres, según sea el caso, al mejor precio y si puede ser gratis, mejor que mejor. Las empresas que consumen/necesitan programas son los que pagarán su precio.

+ +

Cuando una empresa compra una licencia de un programa privativo no solamente compra el derecho a usar el programa, también compra una serie de servicios como actualizaciones periódicas, asistencia técnica, etc, etc. Al igual que cuando se compra un programa libre. No se compra el derecho a usarlo, copiarlo y modificarlo; eso ya se tiene porque el programa es libre. Se están comprando servicios como actualizaciones personalizadas y asistencia técnica.

+ +

El mercado del software vive principalmente de la venta de servicios, no de la venta de programas. Las empresas clientes pagan por los servicios, pagan por recibir una ayuda, pagan por no sentirse solos.

+ +

Tercera pregunta: vale, si es tan maravilloso, ¿por qué no se pasan todas las empresas al modelo de software libre? Concretando en una empresa conocida, ¿por qué Microsoft, con su visión de negocio, no se pasa al software libre?

+ +

Es muy sencillo, no todas las empresas están preparadas para algo así. Es necesario que la empresa sea competitiva.

+ +

Microsoft es una empresa/monopolio. Su estructura está pensada para controlar el monopolio. Todo el sistema funciona buscando maximizar los beneficios sin tener en cuenta factores como la competencia, ya que no existe. Se realizan actualizaciones cuando más beneficios se van a obtener y no cuando más se necesitan esas actualizaciones. Se lanzan programas nuevos siguiendo el mismo criterio. El mercado está totalmente controlado y no hay rivales a los que temer.

+ +

Supongamos que Microsoft libera todos sus programas. En principio no habría mucha diferencia, la gente dejaría de tener copias ilegales ya que pasarían a ser copias legales y las empresas clientes de Microsoft seguirían pagando a cambio de sus servicios.

+ +

Pero existe un gran riesgo para Microsoft en un mercado así. ¿Qué pasaría si otra empresa empieza a desarrollar a partir de un determinado programa, el sistema operativo por ejemplo, y realiza un producto similar pero mejor? ¿Qué pasa si aparece competencia y son mejores que Microsoft? Microsoft no está preparada para un mercado así, es un gigante que se mueve lentamente y que está acostumbrado a jugar con sus propias reglas de forma que siempre gana, pero si las reglas pasan a ser las mismas para todos entonces se vería incapaz, con su actual estructura, de enfrentarse a una competencia dinámica.

+ +

Por eso Microsoft no puede situarse del lado del software libre por muy bueno que sea y por eso muchas otras empresas rivales lo están haciendo. No por las cuestiones éticas sino porque es una forma de romper el tablero de juego y de decir: "ahora vamos a jugar con las mismas reglas para todos".

+
diff --git a/posts/85.html b/posts/85.html new file mode 100644 index 0000000..ba658cf --- /dev/null +++ b/posts/85.html @@ -0,0 +1,55 @@ +title: Primera reunión de la FSFE-España +date: 2006-02-08 17:38 +--- +
+

El próximo sábado 11 de febrero de 2006 a las 17:00 se celebrará, gracias a la colaboración del GUL y Crisol, la primera reunión de la FSFE-España (grupo de trabajo en España de la Free Software Foundation Europe) en la Universidad Carlos III de Madrid.

+ +

Se trata de una reunión abierta a la que estais todos invitados. Para estar al tanto de posibles cambios de planificación, podeis apuntaros a la lista de correo de FSFE-Spain.

+ +

Orden del día

+ +
    + +
  1. Modelo (técnico y jurídico) del Grupo Español de la FSFE. Cometidos, objetivos y tareas. +
      +
    1. Exposición del procedimiento de trabajo de la FSFE de cara a gestar un Chapter Español ("delegación oficial de la FSFE en España"). Relaciones con otras organizaciones.
    2. +
    3. Reparto de trabajo y coordinación.
    4. +
  2. + +
  3. Modelo de gestión de proyectos / financiación.
  4. + +
  5. Proyectos concretos. +
      +
    1. Plan de acción en municipios pequeños.
    2. +
    3. GPLv3
    4. +
    5. Comunicación y notas de prensa.
    6. +
    7. ¿Merchandising?
    8. +
    9. Otros.
    10. +
  6. + +
  7. Organización de las listas de distribución / wiki / páginas. Asistencia a ferias, congresos, etc.
  8. + +
  9. Presentación y promoción de la Fellowship de la FSFE.
  10. + +
  11. Sugerencias y preguntas.
  12. + +
+ +

¿Cómo llegar?

+ +

Aquí teneis un plano del campus de la UC3M. La reunión será en el sótano del edificio 3.

+ +

Podeis llegar usando los siguientes medios de transporte:

+ +
    +
  • Metrosur: Leganés central
  • +
  • Cercanías: Leganés
  • +
  • Autobuses interurbanos: +
      +
    • Desde metro Oporto: 484, 485, 486
    • +
    • Desde intercambiador de Aluche: 482,483,491,492,493 (preferibles 484, 482,491,492,493. De estos 484 y 482 pasan por la +misma puerta de la universidad, los demás hay que bajarse justo después de pasar esta glorieta y la universidad está a unos 100 metros, desde la gasolinera se ve.)
    • +
    +
  • +
+
diff --git a/posts/86.html b/posts/86.html new file mode 100644 index 0000000..e6641cd --- /dev/null +++ b/posts/86.html @@ -0,0 +1,26 @@ +title: GPLv3 párrafo a párrafo (Sección 3: Control de restricciones digitales) +date: 2006-02-09 09:55 +--- +
+

Siguiendo con la serie GPLv3 párrafo a párrafo sobre el borrador de la GPLv3, la entrega de hoy nos permitirá conocer la posición que tendrá la nueva licencia con respecto a las tecnologías DRM.

+ +

Llamo la atención sobre el cambio de terminología, más apropiado creo yo, que se hace. El original y que induce de forma interesada al error es el de Digital Rights Management (Control de derechos digitales) y el que se usa en la licencia y que se acerca mucho más a la realidad es el de Digital Restrictions Management (Control de restricciones digitales).

+ +

No olvidemos la coletilla de rigor. En estas entregas no se plasman ni traducciones ni explicaciones oficiales de la Free Software Foundation y se trata siempre de mis opiniones personales.

+ +

3. Digital Restrictions Management.

+ +

As a free software license, this License intrinsically disfavors technical attempts to restrict users' freedom to copy, modify, and share copyrighted works. Each of its provisions shall be interpreted in light of this specific declaration of the licensor's intent. Regardless of any other provision of this License, no permission is given to distribute covered works that illegally invade users' privacy, nor for modes of distribution that deny users that run covered works the full exercise of the legal rights granted by this License.

+ +

Como licencia para programas libres que es, esta Licencia desfavorecede de manera intrínseca todo intento tecnológico de restringir la libertad de los usuarios de copiar, modificar, y compartir los trabajos con derechos de autor. Cada una de sus provisiones debería ser interpretada a la luz de este intento de declaración específica del licenciador. A pesar de cualquier otra provisión de esta Licencia, no se concede permiso para distribuir trabajos protegidos por esta Licencia que invadan ilegalmente la privacidad de los usuarios, ni para modos de distribución que no permitan a los usuarios que ejecutan trabajos protegidos por esta Licencia el completo ejercicio de los derechos legales garantizados por esta Licencia.

+ +

En otras palabras, si se instala un programa en una máquina cerrada que no permite acceder a ese programa para estudiarlo, copiarlo y modificarlo, ese programa no podrá registrarse bajo GPLv3. O, visto de otra forma, los programas bajo GPLv3 no podrán utilizarse en este tipo de máquinas o dispositivos cerrados.

+ +

No covered work constitutes part of an effective technological protection measure: that is to say, distribution of a covered work as part of a system to generate or access certain data constitutes general permission at least for development, distribution and use, under this License, of other software capable of accessing the same data.

+ +

Un trabajo no protegido forma parte de una medida de protección tecnológica efectiva: es decir, la distribución de un trabajo protegido como parte de un sistema para generar o acceder a ciertos datos implica permiso general para, por lo menos, el desarrollo, la distribución y el uso, bajo esta Licencia, de otros programas capaces de acceder a esos mismos datos.

+ +

Es una garantía de acceso a nuestros datos, una explicación sobre los riesgos de usar programas no libres. Un programa no libre puede guardar nuestros datos de forma que sea imposible acceder a ellos con otro programa distinto. Con programas libres eso no ocurrirá, nuestros datos siempre estarán disponibles incluso cuando usemos otros programas libres.

+ +

Y ya está. De esta forma tan simple, solamente dos párrafos, se asegura que un programa libre no podrá formar parte de un dispositivo que limite o anule las libertades de sus usuarios. Si el programa se encuentra bajo la GPL tendremos la seguridad de que el dispositivo nos permite ejercer nuestros derechos básicos de uso, modificación y distribución.

+
diff --git a/posts/87.html b/posts/87.html new file mode 100644 index 0000000..7775427 --- /dev/null +++ b/posts/87.html @@ -0,0 +1,22 @@ +title: GPLv3 párrafo a párrafo (Sección 4.[1]: Copias idénticas) +date: 2006-02-11 07:30 +--- +
+

Os presento otra entrega, y ya van seis, de la serie GPLv3 párrafo a párrafo sobre el borrador de la GPLv3, en la que se nos explicará bajo qué condiciones podemos realizar copias idénticas y distribuirlas. En estas entregas no se plasman ni traducciones ni explicaciones oficiales de la Free Software Foundation y se trata siempre de mis opiniones personales.

+ + +

4.[1] Verbatim Copying.

+ +

You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all license notices and notices of the absence of any warranty; give all recipients of the Program a copy of this License along with the Program; and obey any additional terms present on parts of the Program in accord with section 7.

+
+ +

Puedes copiar y distribuir copias idénticas del código fuente del Programa tal como tú lo recibes, en cualquier medio, a condición de que publiques en cada copia, de forma visible y apropiada, una apropiada nota con los derechos de autor; conserva intactas todas las notas de licencia y notas sobre la ausencia de cualquier garantía; proporciona a todos los recipientes del Programa una copia de esta Licencia junto con el Programa; y cumple cualquier término adicional presente en las partes del Programa conforme a la sección 7.

+ +

De esta forma se asegura que si un programa es GPL en sus inicios, todas sus copias idénticas seguirán sieńdolo. Se respeta la voluntad del autor del programa, que quiere que su programa sea libre independientemente del número de copias, de los medios empleados y de los soportes utilizados.

+ +

You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection for a fee.

+ +

Puedes cobrar una tarifa por el acto físico de transferir una copia, y opcionalmente puedes ofrecer una garantía de protección por un precio.

+ +

Una prueba más de que software libre no implica software gratis. Brevemente se nos está hablando de uno de los servicios que pueden realizar las empresas que basan su negocio en el software libre; se nos comenta que se puede cobrar por la distribución y que podemos ofrecer un servicio de soporte al cliente, y el programa no deja de ser libre por ello.

+
diff --git a/posts/88.html b/posts/88.html new file mode 100644 index 0000000..c0021f4 --- /dev/null +++ b/posts/88.html @@ -0,0 +1,8 @@ +title: Vídeo de la presentación de la GPLv3 +date: 2006-02-13 11:18 +--- +
+

El pasado 16 de enero, Richard Stallman y Eben Moglen, de la Free Software Foundation, recibieron a cerca de 300 personas en el auditorio del Massachusetts Institute of Technology en la primera de una serie de conferencias internacionales dedicadas a producir la próxima versión de la GNU General Public License.

+ +

El vídeo de esta primera conferencia está disponible para descargar con BitTorrent.

+
diff --git a/posts/89.html b/posts/89.html new file mode 100644 index 0000000..16bfcc0 --- /dev/null +++ b/posts/89.html @@ -0,0 +1,48 @@ +title: GPLv3 párrafo a párrafo (Sección 5.[2]: Distribución de versiones modificadas del código fuente) +date: 2006-02-13 15:23 +--- +
+

En esta entrega de la serie GPLv3 párrafo a párrafo sobre el borrador de la GPLv3 estudiaremos una de las características más interesantes de los programas libres, la distribución de modificaciones en código fuente, desde el punto de vista de la futura nueva versión de la GPL.

+ +

No olvideis que en estas entregas no se plasman ni traducciones ni explicaciones oficiales de la Free Software Foundation y se trata siempre de mis opiniones personales.

+ + +

5.[2] Distributing Modified Source Versions.

+ +

Having modified a copy of the Program under the conditions of section 2, thus forming a work based on the Program, you may copy and distribute such modifications or work in the form of source code under the terms of Section 4 above, provided that you also meet all of these conditions:

+
+ +

Habiendo modificado una copia del Programa bajo las condiciones de la sección 2, constituyendo un trabajo basado en el Programa, puedes copiar y distribuir tales modificaciones o trabajos en la forma de código fuente bajo los términos indicados en la sección 4, a condición de cumplir también las siguientes condiciones:

+ +

a) The modified work must carry prominent notices stating that you changed the work and the date of any change.

+ +

a) El trabajo modificado debe incluir notas prominentes indicando que has cambiado el trabajo y la fecha de cualquier cambio.

+ +

b) You must license the entire modified work, as a whole, under this License to anyone who comes into possession of a copy. This License must apply, unmodified except as permitted by section 7 below, to the whole of the work. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.

+ +

b) Debes proteger el trabajo modificado entero, como un todo, bajo esta Licencia para cualquiera que llegue a tener posesión de una copia. Esta Licencia debe ser aplicable, sin modificarla excepto lo permitido en la sección 7, en todo el trabajo. Esta Licencia no permite proteger el trabajo con otra licencia distinta, pero no invalida cualquier permiso que hayas recibido por otra vía.

+ +

c) If the modified work has interactive user interfaces, each must include a convenient feature that displays an appropriate copyright notice, and tells the user that there is no warranty for the program (or that you provide a warranty), that users may redistribute the modified work under these conditions, and how to view a copy of this License together with the central list (if any) of other terms in accord with section 7. If the interface presents a list of user commands or options, such as a menu, a command to display this information must be prominent in the list. Otherwise, the modified work must display this information at startup--except in the case that the Program has such interactive modes and does not display this information at startup.

+ +

c) Si el trabajo modificado tiene interfaces interactivas para el usuario, cada una debe incluir una forma conveniente de mostrar una nota de derechos de autor apropiada, que le diga al usuario que no hay garantía para el programa (o que tú provees esa garantía), que los usuarios puedes redistribuir el trabajo modificado bajo estas condiciones, y cómo acceder a una copia de esta Licencia con la lista central (si la hubiera) de otros términos conforme a la sección 7. Si el interfaz presenta una lista de comandos u opciones, como un menú, debe existir un comando para mostrar esta información en uno de los primeros lugares de la lista. En cualquier otro caso, el trabajo modificado debe mostrar esta información al arrancar -- excepto en el caso de que el Programa tenga algún modo interactivo y no muestre esta información al arrancar.

+ +

En pocas palabras, que tenemos el deber de informar a nuestros futuros usuarios de que el programa modificado está protegido por esta Licencia y que se deben respetar los permisos y obligaciones de la misma.

+ +

These requirements apply to the modified work as a whole. If identifiable sections of that work, added by you, are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works for use not in combination with the Program. But when you distribute the same sections for use in combination with covered works, no matter in what form such combination occurs, the whole of the combination must be licensed under this License, whose permissions for other licensees extend to the entire whole, and thus to every part of the whole. Your sections may carry other terms as part of this combination in limited ways, described in section 7.

+ +

Estos requerimientos se aplican al trabajo modificado como un todo. En el caso de que existan secciones identificables de ese trabajo, añadidas por tí, que no sean derivadas del Programa, y que puedan considerarse razonablemente independientes y como trabajos separados por si mismos, entonces esta Licencia, y sus términos, no se aplicarán a esas secciones cuando las distribuyas como trabajos separados para usar no en combinación con el Programa. Pero cuando distribuyas las mismas secciones para usar en combinación con trabajos protegidos, independientemente de la forma en que se produce tal combinación, la combinación entera deberá ser registrada bajo esta Licencia, cuyos permisos para otras licencias se extienden al total entero, y así a cada parte del total. Tus secciones pueden llevar otros términos como parte de esta combinación de forma limitada, tal como se describe en la sección 7.

+ +

De esta forma se intenta evitar que un programa libre pueda llegar a convertirse en privativo al añadirle pequeñas secciones privativas. El programa en su conjunto deberá estar protegido siempre por la Licencia con lo que continuará siendo libre.

+ +

Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.

+ +

Así, no es intención de esta sección reclamar o refutar tus derechos sobre un trabajo escrito completamente por tí; al contrario, la intención es ejercitar el derecho de controlar la distribución de trabajos derivados o de trabajos colectivos del Programa.

+ +

Se recuerda que los derechos del programa, todos, continúan siendo del autor del programa. El autor siempre conservará todos los derechos de su obra y será libre de cambiar de licencia siempre que quiera y siempre que el trabajo sea completamente suyo.

+ +

A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. Mere inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.

+ +

La compilación de un trabajo protegido con otros trabajos separados e independientes, que no son extensiones naturales del trabajo protegido, en una unidad de almacenamiento o un medio de distribución, es denominado como "agregado" si los derechos de autor resultantes de la compilación no son usados para limitar los derechos legales de los usuarios de la compilación mas allá de lo que los trabajos individuales permiten. La mera inclusión de un trabajo protegido en un agregado no implica que esta Licencia se aplique a las otras partes del agregado.

+ +

De esta forma podemos compilar nuestros programas GPL con otros programas o partes de código no GPL, siempre que esten complentamente separados de nuestro programa GPL y el resultado de la compilación no vulnere los derechos establecidos por la Licencia.

+
diff --git a/posts/9.html b/posts/9.html new file mode 100644 index 0000000..4319884 --- /dev/null +++ b/posts/9.html @@ -0,0 +1,24 @@ +title: La pastilla roja no es tan roja +date: 2003-11-18 11:40 +--- +
+

Pastilla azul, fin de la historia. Despertarás en tu cama y creerás lo que quieras creer.

+ +

Pastilla roja, seguirás en el País de las Maravillas y yo te enseñaré cómo de profunda es la madriguera del conejo... Recuerda, tan sólo te ofrezco la verdad... Por supuesto, ni se te ocurra copiar esta pastilla y ni pienses en modificarla.

+ +

A estas alturas casi todo el mundo estará ya al tanto del lanzamiento de La Pastilla Roja de Juantomás García (Presidente de Hispalinux) y de Alfredo Romeo (Director General de Open:Service) y de su presentación en varios lugares del país.

+ +

Citando de la web del libro: En el año 2003, la implantación de la Sociedad del Conocimiento en España puede considerarse un fracaso. Con unos ratios de penetración tecnológica ínfimos, nuestra sociedad está desaprovechando las posibilidades que el estado de la tecnología permite. Frente a esta situación, el Software Libre emerge como solución catalizadora para abrazar la Sociedad del Conocimiento en su conjunto. La Pastilla Roja pretende mostrar la tecnología existente y las oportunidades que ofrece al conjunto de la sociedad.

+ +

Por supuesto y como defensor acérrimo del software libre y de todo lo que ello implica estoy completamente de acuerdo con las ideas que en principio se exponen en el libro y aunque no lo he leído todavía espero hacerlo en breve.

+ +

Sin embargo, el hecho de que esté a favor del contenido del libro no quiere decir que me guste el continente usado. Y es que La Pastilla Roja tiene la misma licencia que cualquier otro libro, Copyright Todos los derechos reservados..., etc, etc.

+ +

El porque de esta decisión de los autores se escapa a mi entendimiento, máxime teniendo en cuenta que ambos llevan trabajando en el mundo del software libre (o por qué no, el mundo libre en general) desde hace ya muchos años. La verdad es que podrían haber aplicado en su publicación las mismas ideas que ellos mismo exponen.

+ +

Además, como de momento el único medio de distribución es el papel, si realizamos alguna copia de una parte del libro o del libro entero, por supuesto con el consabido permiso de los titulares de los derechos del libro, deberíamos pagar el también consabido canon de las fotocopiadoras y volver a agachar la cabeza ante aquello contra lo que tanto luchamos.

+ +

Si realmente los señores autores de La Pastilla Roja son coherentes con las ideas que profesan y estoy seguro de que lo son, les invito a que modifiquen lo más pronto posible los derechos de su obra, adaptándolos a la Creative Commons Attribution-NonCommercial-ShareAlike 1.0, por poner un ejemplo, que como muy bien explica D. Jorge Cortell-Albert permite copiar, reproducir, mostrar públicamente y modificar las obras siempre y cuando se cite al autor, no se use para fines comerciales sin el consentimiento del mismo y las obras derivadas se mantengan bajo la misma licencia.

+ +

De momento, y por mucho que me pese, tengo que admitir que aunque esta pastilla es de color rojo el papel del envoltorio sigue siendo azul. Espero fervientemente que sea temporal.

+
diff --git a/posts/90.html b/posts/90.html new file mode 100644 index 0000000..15ceeac --- /dev/null +++ b/posts/90.html @@ -0,0 +1,10 @@ +title: Soy un "hombre ñu" +date: 2006-02-14 10:17 +--- +
+

Debido a que no me escondo y a que siempre que puedo ando hablando de las maravillas del software libre, en mi puesto de trabajo se me empezó a conocer con el apodo de "hombre linux".

+ +

Por supuesto, en seguida maticé que pasa ser correctos debería ser "hombre gnu/linux" (con lo que aumenté mi leyenda de tío raro) y como era muy largo, el sobrenombre ha ido reduciendose, pasando a "hombre gnu" y finalmente a "hombre ñu".

+ +

Si alguien no está al tanto del proyecto GNU pensará que soy una especie de mutante o de atracción de circo. ;-D

+
diff --git a/posts/91.html b/posts/91.html new file mode 100644 index 0000000..78ebd8e --- /dev/null +++ b/posts/91.html @@ -0,0 +1,48 @@ +title: GPLv3 párrafo a párrafo (Sección 6.[3]: Distribución de versiones modificadas del código objeto) +date: 2006-02-16 10:46 +--- +
+

En la anterior entrega de la serie GPLv3 párrafo a párrafo sobre el borrador de la GPLv3 pudimos ver la distribución del código fuente de programas modificados. En esta entrega veremos cómo se trata la distribución de programas en código objeto, como por ejemplo los paquetes precompilados de las distribuciones.

+ +

Como siempre recuerdo que en estas entregas no se plasman ni traducciones ni explicaciones oficiales de la Free Software Foundation y se trata siempre de mis opiniones personales.

+ + +

6.[3] Non-Source Distribution.

+ +

You may copy and distribute a covered work in Object Code form under the terms of Sections 4 and 5, provided that you also distribute the machine-readable Complete Corresponding Source Code (herein the "Corresponding Source") under the terms of this License, in one of these ways:

+
+ +

Puedes copiar y distribuir un trabajo protegido por la Licencia en Código Objeto bajo los términos de las secciones 4 y 5, a condición de que también distribuyas el Código Fuente Completo Correspondiente (a partir de ahora "Fuente Correspondiente"), accesible por ordenador, bajo los términos de esta Licencia, de una de las siguientes formas:

+ +

Lo de accesible por ordenador (machine-readable) es una traducción un poco sui generis. Quiere decir que no basta con que el código fuente este disponible en un libro, o en un listado impreso, por ejemplo. Debe estar en un formato desde el que se pueda facilmente realizar búsquedas, modificaciones, copias, compilaciones, etc, es decir, de forma que se facilite la aplicación de las libertades de copia, modificación y distribución.

+ +

a) Distribute the Object Code in a physical product (including a physical distribution medium), accompanied by the Corresponding Source distributed on a durable physical medium customarily used for software interchange; or,

+ +

a) Distribuir el Código Objeto en un producto físico (incluyendo un medio de distribución físico), acompañado por el Fuente Correspondiente distribuido en un medio físico duradero usadio para el intercambio de programas; o,

+ +

b) Distribute the Object Code in a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give any third party, for a price no more than ten times your cost of physically performing source distribution, a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange; or,

+ +

b) Distribuir el Código Objeto en un producto físico (incluyendo un medio de distribución físico), acompañado por una oferta escrita, válida durante tres años por lo menos y válida tanto tiempo como ofrezcas servicio al cliente sobre ese modelo de producto, para conceder a un tercero, por un precio no superior a diez veces el coste de realizar la distribución física del código, una copia del Fuente Correspondiente para todos los programas del producto que se encuentren protegidos por esta Licencia, o en un medio físico duradero usado para intercambio de programas; o,

+ +

c) Privately distribute the Object Code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only for occasional noncommercial distribution, and only if you received the Object Code with such an offer, in accord with Subsection b above. Or,

+ +

c) Distribuir el Código Fuente de forma privada con una copia de la oferta escrita para conceder el Fuente Correspondiente. Esta alternativa está permitida solamente para distribuciones no comerciales de forma ocasional, y solamente si recibes el Código Objeto con la mencionada oferta, de acuerdo con la subsección b anterior. O,

+ +

d) Distribute the Object Code by offering access to copy it from a designated place, and offer equivalent access to copy the Corresponding Source in the same way through the same place. You need not require recipients to copy the Corresponding Source along with the Object Code.

+ +

d) Distribuir el Código Objeto ofreciendo acceso para copiarlo de un sitio designado, y una oferta equivalente para acceder a copias del Fuente Correspondiente de la misma forma y en el mismo sitio. No es necesario que los recipientes de las copias del Fuente Correspondiente vayan junto con el Código Objeto.

+ +

[If the place to copy the Object Code is a network server, the Corresponding Source may be on a different server that supports equivalent copying facilities, provided you have explicitly arranged with the operator of that server to keep the Corresponding Source available for as long as needed to satisfy these requirements, and provided you maintain clear directions next to the Object Code saying where to find the Corresponding Source.]

+ +

[Si el sitio para copiar el Código Objeto es un servidor en red, el Fuente Correspondiente puede estar en un servidor diferente que soporte utilidades de copiado equivalentes, en el que hayas acordado explícitamente con el operador de ese servidor que el Fuente Correspondiente estará disponible tanto tiempo como sea necesario para satisfacer estos requisitos, y en el que mantengas direcciones claras para acceder al Fuente Correspondiente desde el Código Objeto.]

+ +

Distribution of the Corresponding Source in accord with this section must be in a format that is publicly documented, unencumbered by patents, and must require no special password or key for unpacking, reading or copying.

+ +

La distribución del Fuente Correspondiente de acuerdo con esta sección debe estar en un formato que este documentado de forma pública, libre de patentes, y que no requiera ninguna contraseña ni clave especial para desempaquetar, leer o copiar.

+ +

The Corresponding Source may include portions which do not formally state this License as their license, but qualify under section 7 for inclusion in a work under this License.

+ +

El Fuente Correspondiente puede incluir partes en su licencia que no esten indicadas formalmente por esta Licencia, pero calificadas según la sección 7 para la inclusión de este trabajo bajo esta Licencia.

+ +

Resumiendo, que se trata de facilitar el acceso al código fuente de los programas para poder ejercer las libertades de todo programa libre.

+
diff --git a/posts/92.html b/posts/92.html new file mode 100644 index 0000000..1a095ed --- /dev/null +++ b/posts/92.html @@ -0,0 +1,18 @@ +title: ¿Dónde encontrar a la Free Software Foundation? +date: 2006-02-16 11:35 +--- +
+

Existe una red mundial de fundaciones de software libre que se ocupan de promocionar el software libre y el proyecto GNU, de ofrecer apoyo legal, de promover iniciativas para informar a las personas de peligros como el de las patentes de software, etc.

+ +

Como pieza central del esquema tenemos la conocida Free Software Foundation con sede en Boston (EEUU), fundada por Richard M. Stallman, de ámbito internacional aunque se centra principalmente en territorio estadounidense.

+ +

Existe también la Free Software Foundation Europe, de ámbito europo y que permite la creación de chapters nacionales como el todavía en formación Chapter Español, que colaboran entre ellos y con la FSFE. No se trata de fundaciones independientes propiamente dichas sino de secciones dentro de la propia FSFE, con los mismos estatutos y con la mismas inquietudes.

+ +

Ya en Asia, tenemos la Free Software Foundation of India.

+ +

Y la última en aparecer ha sido la Fundación Software Libre América Latina, fundada el 23 de noviembre de 2005.

+ +

Para formar parte de alguna de las fundaciones de software libre, o para colaborar o apoyar sus actividades, no es necesario ser un gran programador como algunos creen. Aunque siempre se necesita gente que trabaje desarrollando o mejorando programas para el sistema libre GNU, también son necesarios traductores, diseñadores web, abogados, políticos, conferenciantes, gente para ayudar en los stands de las ferias, publicitarios, etc.

+ +

Y como yo siempre digo, aunque no puedas o no quieras colaborar con alguna de las fundaciones, otra buena forma de ayudar y promover el software libre es usar programas libres. Usa y copia para tí o para los demás; simplemente con eso te ayudas a tí mismo, ayudas a la gente que recibe copias tuyas de programas libres, ayudas a los desarrolladores y ayudas a toda la sociedad de la que formas parte. Nunca con tan poco se había conseguido tanto.

+
diff --git a/posts/93.html b/posts/93.html new file mode 100644 index 0000000..633f051 --- /dev/null +++ b/posts/93.html @@ -0,0 +1,14 @@ +title: La ignorancia pasa factura +date: 2006-02-21 00:03 +--- +
+

Llevo todo el santo día pegándole vueltas a la noticia El implante de chips en humanos, lo último para controlar a los empleados que he leído esta misma mañana y preguntándome cómo es posible que pasen estas cosas. Solamente puedo llegar a una conclusión: la culpa de todo la tiene la ignorancia.

+ +

En una gran cantidad de países practicar la eutanasia es ilegal. Las argumentaciones, aunque variadas, se centran en respetar el derecho a la vida. Por otro lado, los que la defienden lo hacen por el derecho a tener una muerte digna. Sin entrar en polémicas, en los dos casos se trata de salvaguardar los derechos de las personas.

+ +

Pero qué ocurre cuando hablamos del derecho a la privacidad. El derecho a la privacidad es un derecho humano tan importante como los demás y sin embargo es vulnerado de forma sistemática sin que le importe a demasiada gente. Y lo peor es que se permite usar este derecho como moneda de cambio. No me cabe la menor duda de que los empleados a los que la noticia de arriba hace mención habrán recibido algún tipo de compensanción a cambio de dejarse implantar los chips. Han vendido sus derechos al mejor postor, y lo peor y sorprendente es que al hacerlo de forma voluntaria, se considera totalmente válido y legal.

+ +

El derecho a la vida, el derecho a la libertad de expresión... ¿y el derecho a la privacidad? Constituciones y leyes se encargan de proteger los derechos humanos de forma que nadie, aunque sea de forma voluntaria, puede vender esos derechos a un tercero. No puedes ser esclavo de nadie a cambio de un plato de alubias, por mucha hambre que pases. Entonces, ¿por qué puedo cambiar mi derecho a la privacidad por un coche de la empresa, por ejemplo? El derecho a la privacidad cae en un vacío legal.

+ +

Es la ignorancia. Ignorancia de los que desprecian sus derechos y les ponen precio. Ignorancia de los que gobiernan y legislan y no tienen dos dedos de frente para comprender que el derecho a la privacidad es un derecho inseparable de la dignidad humana. Ignorancia de los que intuyen el peligro pero miran hacia otro lado. Y lo peor de todo es que la ignorancia, cuando pasa factura, lo hace para todos.

+
diff --git a/posts/94.html b/posts/94.html new file mode 100644 index 0000000..1b77288 --- /dev/null +++ b/posts/94.html @@ -0,0 +1,10 @@ +title: Segunda Conferencia Internacional sobre GPLv3 +date: 2006-02-21 18:00 +--- +
+

Ya tiene fecha la Segunda Conferencia Internacional sobre la GPLv3. Tendrá lugar en el International Free Software Forum 7.0 en Porto Alegra/RS, Brasil, los días 21 y 22 de abril. El Forum empezará el 19 de abril.

+ +

En Europa también podremos escuchar a Richard Stallman hablando sobre la GPLv3; el 16 de marzo en la FOSS Means Business en Belfast, Irlanda del Norte, y el 18 de marzo en una conferencia organizada por la FSF Europe en Turín, Italia.

+ +

Aprovecho para indicar que es posible realizar comentarios y sugerir modificaciones en el borrador de la GPLv3, poniendo nuestro granito de arena en el diseño de la nueva licencia que usará una buena parte de los programas libres del mundo.

+
diff --git a/posts/95.html b/posts/95.html new file mode 100644 index 0000000..708f77d --- /dev/null +++ b/posts/95.html @@ -0,0 +1,60 @@ +title: GPLv3 párrafo a párrafo (Sección 7: Compatibilidad de Licencia) +date: 2006-02-23 17:56 +--- +
+

En anteriores secciones del borrador de la GPLv3 se hacía mención a la posibilidad de añadir clausulas adicionales a la Licencia. En esta nueva de la serie GPLv3 párrafo a párrafo podremos estudiar cómo hacerlo.

+ +

Estas entregas no reflejan ni traducciones ni explicaciones oficiales de la Free Software Foundation y se trata siempre de mis opiniones personales.

+ + +

7. License Compatibility.

+ +

When you release a work based on the Program, you may include your own terms covering added parts for which you have, or can give, appropriate copyright permission, as long as those terms clearly permit all the activities that this License permits, or permit usage or relicensing under this License. Your terms may be written separately or may be this License plus additional written permission. If you so license your own added parts, those parts may be used separately under your terms, but the entire work remains under this License. Those who copy the work, or works based on it, must preserve your terms just as they must preserve this License, as long as any substantial portion of the parts they apply to are present.

+
+ +

En el momento de liberar un trabajo basado en el Programa, puedes incluir tus propios términos cubriendo las partes añadidas de las que tienes, o puedes dar, los apropiados permisos de los derechos de autor, siempre y cuando esos términos permitan claramente todas las actividades que esta Licencia permite, o permitan usar o relicenciar bajo esta Licencia. Tus términos pueden presentarse de forma separada o pueden añadirse de forma adicional a esta Licencia. Si registras bajo licencia tus propias partes añadidas, estas partes añadidas pueden usarse de forma separada bajo tus términos, pero el trabajo completo permanece bajo esta Licencia. Aquellos que copien el trabajo, o trabajos derivados de este, deben respetar tus términos de la misma forma que deben respetar esta Licencia, tanto tiempo como este presente una porción substancial de las partes añadidas.

+ +

Aside from additional permissions, your terms may add limited kinds of additional requirements on your added parts, as follows:

+ +

Aparte de permisos adicionales, tus términos pueden incluir clases limitadas de requisitos adicionales en tus partes añadidas, de la forma siguiente:

+ +

a) They may require the preservation of certain copyright notices, other legal notices, and/or author attributions, and may require that the origin of the parts they cover not be misrepresented, and/or that altered versions of them be marked in the source code, or marked there in specific reasonable ways, as different from the original version.

+ +

a) Pueden requerir la preservación de ciertas notas de derechos de autor, o otras notas legales, y/o atribuciones de autoría, y pueden requerir que el origen de las partes que cubren no sea modificado, y/o esas versiones modificadas se indiquen en el código fuente, o se indiquen de forma razonable especificada como diferentes de la versión original.

+ +

Esto quiere decir que el autor de un programa libre puede forzar a que su programa se mantenga inalterado y que las posibles modificaciones seas indicadas como versiones modificadas del programa original.

+ +

b) They may state a disclaimer of warranty and liability in terms different from those used in this License.

+ +

b) Pueden indicar una declaración de garantía y responsabilidad n términos diferentes a los usados en esta Licencia.

+ +

c) They may prohibit or limit the use for publicity purposes of specified names of contributors, and they may require that certain specified trademarks be used for publicity purposes only in the ways that are fair use under trademark law except with express permission.

+ +

c) Pueden prohibir o limitar el uso de nombres especiales de contribuidores para propósitos publicitarios, y pueden requerir que ciertas marcas registradas específicas sean usadas con propósitos publicitarios solamente en las formas permitidas por las leyes de marcas registradas sin su expreso consentimiento.

+ +

De esta forma las marcas registradas quedan protegidas de cualquier posible uso fraudulento.

+ +

d) They may require that the work contain functioning facilities that allow users to immediately obtain copies of its Complete Corresponding Source Code.

+ +

d) Pueden requerir que el trabajo contenga funcionalidades que permitan a los usuarios obtener, de forma inmediata, copias de su Código Fuente Completo Correspondiente.

+ +

e) They may impose software patent retaliation, which means permission for use of your added parts terminates or may be terminated, wholly or partially, under stated conditions, for users closely related to any party that has filed a software patent lawsuit (i.e., a lawsuit alleging that some software infringes a patent). The conditions must limit retaliation to a subset of these two cases: 1. Lawsuits that lack the justification of retaliating against other software patent lawsuits that lack such justification. 2. Lawsuits that target part of this work, or other code that was elsewhere released together with the parts you added, the whole being under the terms used here for those parts.

+ +

e) Pueden imponer una venganza contra las patentes de software, es decir, retirar el permiso de uso de tus partes añadidas, total o parcialmente, bajo ciertas condiciones, para los usuarios estrechamente relacionados con cualquiera que haya realizado una demanda por patente de software (i.e., una demanda alegando que algún programa infrige una patente). Las condiciones deben limitar la venganza a un subconjunto de dos casos: 1. Demandas que carecen de justificación de venganza contra otras demandas por patentes de software que carecen de tal justificación. 2. Demandas contra partes de este trabajo, u otro código liberado junto a tus partes añadidas, que en su conjunto se encuentran bajo los términos usados aquí por esas partes.

+ +

Como podemos ver, la nueva versión de la licencia GPL quiere castigar a todos aquellos que realicen demandas por patentes de software con la retirada del permiso de uso. Esta modificación es una de las más señaladas de la nueva versión, junto con las restricciones a sistemas DRM.

+ +

No other additional conditions are permitted in your terms; therefore, no other conditions can be present on any work that uses this License. This License does not attempt to enforce your terms, or assert that they are valid or enforceable by you; it simply does not prohibit you from employing them.

+ +

No se permiten otras condiciones adicionales en tus términos; por lo tanto, no se pueden presentar otras condiciones en trabajos que usen esta Licencia. Esta Licencia no intenta imponerte los términos, ni afirmar que son válidos u obligatorios para tí; simplemente no le prohibe emplearlos.

+ +

Es decir, que los términos adicionales añadidos que se han ido explicando no son obligatorios. Podemos, o no, usarlos.

+ +

When others modify the work, if they modify your parts of it, they may release such parts of their versions under this License without additional permissions, by including notice to that effect, or by deleting the notice that gives specific permissions in addition to this License. Then any broader permissions granted by your terms which are not granted by this License will not apply to their modifications, or to the modified versions of your parts resulting from their modifications. However, the specific requirements of your terms will still apply to whatever was derived from your added parts.

+ +

Cuando otros modifican el trabajo, si con ello modifican tus partes, pueden liberar esas partes de sus versiones bajo esta Licencia sin permisos adicionales, incluyendo una nota indicándolo, o borrando la nota que concede esos permisos específicos adicionales a esta Licencia. Entonces, cualquier permiso garantizado por tus términos que no esté garantizado por esta Licencia no se aplicará a sus modificaciones, o a las versiones modificadas de tus partes resultantes de sus modificaciones. Sin embargo, los requisitos específicos de tus términos serán aplicables a cualquiera que realice trabajos derivados de tus partes añadidas.

+ +

Unless the work also permits distribution under a previous version of this License, all the other terms included in the work under this section must be listed, together, in a central list in the work.

+ +

A menos que el trabajo permita la distribución bajo una versión anterior de esta Licencia, todos los otros términos incluidos en el trabajo bajo esta sección deben listarse, juntos, en una lista central en el trabajo.

+
diff --git a/posts/96.html b/posts/96.html new file mode 100644 index 0000000..4dc794e --- /dev/null +++ b/posts/96.html @@ -0,0 +1,14 @@ +title: Software privativo en Lliurex +date: 2006-03-05 07:28 +--- +
+

A través de Menéame y de Cheli Software Libre me entero de que Lliurex incluirá software privativo de Sun en sus próximas versiones.

+ +

Es increible que unos señores que lanzan un proyecto para llevar software libre a los centros educativos no esten mucho mejor informados y no sepan diferenciar entre acceso libre y acceso gratuito a un programa, entre otras muchas meteduras de pata. Tras dos años, creo, desde que empezó el proyecto, ya va siendo hora de que se pongan al día sobre los conceptos básicos del software libre.

+ +

Y lo peor es que existiendo alternativas libres apuesten por las privativas. ¿Quién quiere usar StarOffice cuando puedes usar el libre OpenOffice?

+ +

¿Le puedo decir a un alumno que sustituya su XP con OpenOffice de casa por un Lliurex con StarOffice? Mi respuesta es no; porque tendrá que realizar un esfuerzo significativo de adaptación al nuevo sistema y lo único que conseguirá será cambiar un sistema mixto de software libre y software privativo, por otro sistema mixto.

+ +

Lliurex se está llevando a cabo de espaldas a la comunidad internacional de desarrolladores de software libre, de espaldas a los colegios e institutos, de espaldas a los alumnos... desarrollar un proyecto de software libre, es decir, de programas pensados para dar libertad a nuestra sociedad humana, sin tener en cuenta para nada a esa misma sociedad, es en mi opinión una auténtica necedad.

+
diff --git a/posts/97.html b/posts/97.html new file mode 100644 index 0000000..189f36a --- /dev/null +++ b/posts/97.html @@ -0,0 +1,9 @@ +title: Nuevo portal dedicado al kernel Linux +date: 2006-03-06 08:02 +--- +
+

A través de la lista de correo de Gulcas me ha llegado la noticia de la creación de un portal hispano que tratará sobre el kernel Linux (estructura del kernel, programación de drivers, noticias, etc) y que deja sus contenidos bajo una licencia que permite copiar, distribuir y modificar (que también es muy importante).

+ +

Se echan en falta estos sitios técnicos de nivel avanzado y en la lengua de Cervantes, así que espero que tengan suerte en su recien iniciada andadura y que aguanten muchos años.

+ +
diff --git a/posts/98.html b/posts/98.html new file mode 100644 index 0000000..119ee3d --- /dev/null +++ b/posts/98.html @@ -0,0 +1,12 @@ +title: Los movimientos de Oracle no son tan preocupantes +date: 2006-03-06 11:15 +--- +
+

Ultimamente he podido leer en algunos medios afines al software libre sobre la preocupación que se tiene sobre los movimientos de Oracle y sus intentos de compra de MySQL, de momento infructuosos.

+ +

Desde aquí quiero tranquilizar a la comunidad. El sistema de gestión de bases de datos MySQL, que no la empresa, es un programa libre que está protegido por la licencia GPL. Por lo tanto, en el caso de que Oracle comprara la empresa MySQL su producto seguiría estando disponible a la sociedad.

+ +

En el peor de los casos Oracle podría relicenciar MySQL como software privativo, al haber comprado los derechos de autor a la empresa, para integrarlo en su propio software o para desarrollar nuevas versiones privativas. Pero aún así siempre tendríamos la versión libre a partir de la cual poder seguir desarrollando, y siempre podrían aparecer empresas que quisieran hacer negocio con la versión libre y que recogieran el testigo.

+ +

Cuando un programa se libera su código pasa a estar disponible para todos. El dueño de los derechos de autor puede crear nuevas versiones privativas, puede dejar de desarrollar nuevas versiones, puede abandonar el proyecto, etc, etc, pero lo que se ha liberado ahí queda. Como se dice popularmente, "Santa Rita, Rita, Rita, lo que se da ya no se quita".

+
diff --git a/posts/99.html b/posts/99.html new file mode 100644 index 0000000..8739a49 --- /dev/null +++ b/posts/99.html @@ -0,0 +1,56 @@ +title: GPLv3 párrafo a párrafo (Secciones 8.[4], 9.[5], 10.[6] y 11) +date: 2006-03-07 09:18 +--- +
+

Las próximas secciones del borrador de la GPLv3 son de tamaño reducido y sirven para acabar de pulir el conjunto de la nueva licencia, por lo que pasaremos a estudiarlas de forma agrupada en la últimas entregas de la serie GPLv3 párrafo a párrafo.

+ +

Estas entregas no reflejan ni traducciones ni explicaciones oficiales de la Free Software Foundation y se trata siempre de mis opiniones personales.

+ + +

8.[4] Termination.

+ +

You may not propagate, modify or sublicense the Program except as expressly provided under this License. Any attempt otherwise to propagate, modify or sublicense the Program is void, and any copyright holder may terminate your rights under this License at any time after having notified you of the violation by any reasonable means within 60 days of any occurrence. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as they remain in full compliance.

+
+ +

8.[4] Cesación de derechos.

+ +

No puedes propagar, modificar o sublicenciar el Programa a menos que sea de las forma expresamente indicadas en esta Licencia. Cualquier otro intento de propagar, modificar o sublicenciar el Programa está prohibido, y el dueño de los derechos de autor podrá cesar tus derechos según esta Licencia en cualquier momento, habiendote notificado la violación con un tiempo razonable de 60 días de antelación. Sin embargo, no se podrán cesar los derechos de aquellos que hayan recibido copias, o derechos, de tí bajo esta Licencia, mientras cumplan todos sus términos.

+ +

Es decir, mientras cumplamos los términos de la Licencia nadie, ni siquiera el dueño de los derechos de autor, puede prohibirnos usar, copiar, modificar, etc, el programa. Pero si incumplimos la licencia, sí que podemos perder esos derechos.

+ + +

9.[5] Not a Contract.

+ +

You are not required to accept this License in order to receive a copy of the Program. However, nothing else grants you permission to propagate or modify the Program or any covered works. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating the Program (or any covered work), you indicate your acceptance of this License to do so, and all its terms and conditions.

+
+ +

9.[5] No es un contrato.

+ +

No estás obligado a aceptar esta Licencia para recibir una copia del Programa. Sin embargo, nada más te concede permiso para propagar o modificar el Programa o cualquier trabajo protegido. Estas acciones infringen los derechos de autor si no aceptas esta Licencia. Por lo tanto, modificando o propagando el Programa (o cualquier trabajo protegido), indicas tu aceptación de estra Licencia y de todos sus términos y condiciones.

+ + +

10.[6] Automatic Licensing of Downstream Users.

+ +

Each time you redistribute a covered work, the recipient automatically receives a license from the original licensors, to propagate and modify that work, subject to this License, including any additional terms introduced through section 7. You may not impose any further restrictions on the recipients' exercise of the rights thus granted or affirmed, except (when modifying the work) in the limited ways permitted by section 7. You are not responsible for enforcing compliance by third parties to this License.

+
+ +

10.[6] Licenciamiento automático de destinatarios.

+ +

Cada vez que redistribuyas un trabajo protegido, el recipiente recibe automaticamente una licencia por parte de los licenciadores originales, para propagar y modificar ese trabajo, sujeto a esta Licencia, incluyendo cualquier término adicional introducido tal como indica la sección 7. No puedes imponer más restricciones para los recipientes que las concedidas y afirmadas por los derechos otorgados por esta Licencia, excepto (cuando se modifique el trabajo) en los límites permitidos por la sección 7. Tú no eres responsable del cumplimiento de esta Licencia por parte de terceros.

+ + +

11. Licensing of Patents.

+ +

When you distribute a covered work, you grant a patent license to the recipient, and to anyone that receives any version of the work, permitting, for any and all versions of the covered work, all activities allowed or contemplated by this License, such as installing, running and distributing versions of the work, and using their output. This patent license is nonexclusive, royalty-free and worldwide, and covers all patent claims you control or have the right to sublicense, at the time you distribute the covered work or in the future, that would be infringed or violated by the covered work or any reasonably contemplated use of the covered work.

+
+ +

11. Licencias de Patentes.

+ +

Cuando distribuyes un trabajo protegido, concedes una licencia de patente al recipiente, y para cualquiera que reciba cualquier versión del trabajo, permitiendo, para cualquiera de las versiones del trabajo protegido, todas las actividades permitidas o contempladas por esta Licencia, como instalar, ejecutar y distribuir versiones del trabajo, y usar sus resultados. Esta licencia de patente no es exclusiva, está libre de tasas y es internacional, y protege de todas las patentes que tú controlas o tienes derecho a sublicenciar, durante el tiempo que distribuyas el trabajo protegido o en el futuro, que podrían estar siendo infringidas o violadas por el trabajo protegido o por cualquier uso razonablemente contemplado por el trabajo protegido.

+ +

Es decir, aunque el creador del programa posea patentes del mismo (no olvidemos que desgraciadamente hay países en los que las patentes de software son legales, incluso en Europa), si el programa se libera bajo esta Licencia no podrá realizar demandas por violar esas patentes ya que al distribur el programa bajo la Licencia nos está dando permiso para usar, copiar y modificar según los términos y condiciones indicados.

+ +

If you distribute a covered work knowingly relying on a patent license, you must act to shield downstream users against the possible patent infringement claims from which your license protects you.

+ +

Si distribuyes un trabajo protegido sabiendo que depende de una licencia de patente, debes actuar como escudo para los usuarios destinatarios contra una posible demanda por infringimiento de patente de la que tu licencia te protege.

+
-- 2.39.5