start with images
authorJoerg Jaspert <>
Fri, 26 Feb 2016 12:48:52 +0000 (13:48 +0100)
committerJoerg Jaspert <>
Sun, 6 Mar 2016 13:29:57 +0000 (14:29 +0100)
65 files changed:
_includes/image.html [new file with mode: 0644]
_posts/2005-07-14-a_nice_license_something_to_la.html [deleted file]
_posts/2005-07-14-a_nice_license_something_to_la.markdown [new file with mode: 0644]
assets/images/fullsize/2007/cssh.png [new file with mode: 0644]
assets/images/fullsize/2007/munin-dsl-attenuation.png [new file with mode: 0644]
assets/images/fullsize/2007/munin-dsl-rate.png [new file with mode: 0644]
assets/images/fullsize/2007/munin-dsl-snr.png [new file with mode: 0644]
assets/images/fullsize/2008/dora.jpg [new file with mode: 0644]
assets/images/fullsize/2008/ftpmeet_board.jpg [new file with mode: 0644]
assets/images/fullsize/2008/hacklab.jpg [new file with mode: 0644]
assets/images/fullsize/2008/mhy_ice.jpg [new file with mode: 0644]
assets/images/fullsize/2008/monday_evening_todo.jpg [new file with mode: 0644]
assets/images/fullsize/2008/shoe.jpg [new file with mode: 0644]
assets/images/fullsize/2009/cebit0903_01.jpg [new file with mode: 0644]
assets/images/fullsize/2009/cebit0903_02.jpg [new file with mode: 0644]
assets/images/fullsize/2009/debconf9-going-to.png [new file with mode: 0644]
assets/images/fullsize/2009/debian_archive_new.jpg [new file with mode: 0644]
assets/images/fullsize/2009/debian_archive_old.jpg [new file with mode: 0644]
assets/images/fullsize/2009/ftpmeet_01.jpg [new file with mode: 0644]
assets/images/fullsize/2009/meeting_minutes.jpg [new file with mode: 0644]
assets/images/fullsize/2009/rip.png [new file with mode: 0644]
assets/images/fullsize/2010/ftpmeet_workout.jpg [new file with mode: 0644]
assets/images/fullsize/2010/img-138.jpg [new file with mode: 0644]
assets/images/fullsize/2010/img-145.jpg [new file with mode: 0644]
assets/images/fullsize/2010/img-147.jpg [new file with mode: 0644]
assets/images/fullsize/2010/img-150.jpg [new file with mode: 0644]
assets/images/fullsize/2010/img-8.jpg [new file with mode: 0644]
assets/images/fullsize/2010/img-90.jpg [new file with mode: 0644]
assets/images/fullsize/2010/img-98.jpg [new file with mode: 0644]
assets/images/fullsize/2011/DSC02384.JPG [new file with mode: 0644]
assets/images/fullsize/2011/DSC02385.JPG [new file with mode: 0644]
assets/images/fullsize/2011/ring.png [new file with mode: 0644]
assets/randomfiles/ [new file with mode: 0755]
assets/randomfiles/printeroff [new file with mode: 0644]
assets/randomfiles/sispm [new file with mode: 0644]

index d4d66a0..b46eacd 100644 (file)
@@ -7,7 +7,10 @@ author:
+  - jekyll-srcset-tag
+  - jekyll-seo-tag
   - jekyll-paginate
+  - jekyll_inline_highlight
   - jekyll-archives
   - jekyll-sitemap
@@ -28,6 +31,12 @@ kramdown:
   smart_quotes:   lsquo,rsquo,ldquo,rdquo
 exclude: ['', 'Gemfile.lock', 'Gemfile', 'Rakefile']
+  - assets/images/resized
+  source: assets/images/fullsize
+  output: assets/images/resized
diff --git a/_includes/image.html b/_includes/image.html
new file mode 100644 (file)
index 0000000..2abd03f
--- /dev/null
@@ -0,0 +1,19 @@
+{% capture width %}{% if include.width %}{{ include.width }}{% else %}320{% endif %}{% endcapture %}
+{% capture prevwidth %}{% if include.prevwidth %}{{ include.prevwidth }}{% else %}400{% endif %}{% endcapture %}
+{% capture class %}{% if include.class %}{{ include.class }}{% else %}left{% endif %}{% endcapture %}
+{% capture alttxt %}{% if include.alt %}{{ include.alt }}{% else %}FIXME: No Alt Text{% endif %}{% endcapture %}
+{% capture caption %}{% if include.caption %}{{ include.caption }}{% else %}Click picture for original size{% endif %}{% endcapture %}
+<figure class='{{ class }}'>
+  <a href="/assets/images/fullsize/{{ include.file }}" title="Original/Fullsize image">
+{% srcset {{ include.file }} ppi:1,2 alt='{{ alttxt }}' class='{{ class }}' width='{{ prevwidth }}' %}
+{% srcset_source media:'(min-width: 400px)' size:'512px' width:512 %}
+{% srcset_source media:'(min-width: 900px)' size:'1024px' width:1024 %}
+{% srcset_source width:{{width}} %}
+{% endsrcset %}
+  {% if caption != 'none' %}
+    <figcaption>
+      {{ caption }}
+    </figcaption>
+  {% endif %}
+  </a>
index 60c1b1f..4aca6d3 100644 (file)
@@ -4,55 +4,46 @@ layout: compress
 <!DOCTYPE html>
 <html lang='en-GB'>
   <meta charset="UTF-8">
-  <title>{{ page.title }}</title>
-  <meta name='description' content="{{description}}">
-  <meta name='author' content="{{}}">
+  <meta name='author' content="{{}}">
   <meta name='viewport' content='width=device-width, height=device-height, initial-scale=1.0, minimum-scale=1.0, user-scalable=yes'>
-  <link type="application/atom+xml" rel="alternate" href="/atom.xml" title="Ganneff's Little Blog" />
-  <link href="/assets/css/style.css" rel="stylesheet" />
-  <link rel='canonical' href="{{site.url}}{{page.url}}">
+  <link type="application/atom+xml" rel="alternate" href="/atom.xml" title="{{}}" />
+  <style>@font-face{font-family:'Yellowtail';font-style:normal;font-weight:400;src:local("Yellowtail"),url(/assets/fonts/yellowtail.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2212,U+2215,U+E0FF,U+EFFD,U+F000}@font-face{font-family:'Droid Sans';font-style:normal;font-weight:400;src:local("Droid Sans"),local("DroidSans"),url(/assets/fonts/droidsans.woff) format("woff")}@font-face{font-family:'Droid Sans Mono';font-style:normal;font-weight:400;src:local("Droid Sans Mono"),local("DroidSansMono"),url(/assets/fonts/droidsansmono.woff) format("woff")}@viewport{width:device-width;height:device-height;zoom:1;min-zoom:1.0;max-zoom:3;user-zoom:zoom}@-ms-viewport{width:device-width;height:device-height;zoom:1;min-zoom:1.0;max-zoom:3;user-zoom:zoom}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,sup,sub,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:disc}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}table{border-collapse:collapse}body{background-color:#002b36;color:#839496;font-size:calc(1rem + 0.15vw + 0.15vh);font-family:"Droid Sans","Lucida Bright",Georgia,"Hoefler Text","Baskerville Old Face",Garamond,"Times New Roman",serif;font-variant-ligatures:common-ligatures;font-kerning:normal;font-weight:normal;font-smoothing:antialiased;text-rendering:optimizeLegibility;line-height:1.7;hyphens:auto;ms-hyphens:auto;webkit-hyphens:auto}h1,h2,h3{color:#b58900}h1{font-size:2.7em;margin:0 0 0.625em 0}h2{font-size:1.8em;margin:0 0 0.625em 0}h3{font-size:1.4em;margin:0 0 0.625em 0}a{text-decoration:none;padding-bottom:0.125em;color:#2aa198;border-color:#073642}a:active,a:visited{border-color:#073642;text-decoration:none;padding-bottom:0.125em}a:hover{background-color:#073642;border-color:#073642}a.year-link{color:#b58900;border-bottom:0.0625em solid #586e75}h1>a{color:#dc2b27}h1>a:visited,h1>a:active{color:#dc2b27}h1>a:hover{background-color:#073642;border-color:#073642;color:#dc2b27}p,pre{margin-bottom:1vh}.mono{font-family:"Droid Sans Mono","Lucida Console","Lucida Sans Typewriter",monaco,"Bitstream Vera Sans Mono",monospace;font-size:.98rem}pre{font-family:"Droid Sans Mono","Lucida Console","Lucida Sans Typewriter",monaco,"Bitstream Vera Sans Mono",monospace;font-size:.98rem;border:0.0313em solid #586e75;padding:1vmax;overflow:auto;margin-right:0.5em}ol,ul{padding:0 0 1.125em 1.875em;padding:0 0 1.5vw 1.7vmax}ol li,ul li{margin-top:0.625em;margin-bottom:0.625em;margin-top:1vw;margin-bottom:1vw}table td.postdate{width:15vw}table td.postlink{width:75vw}table td.categoryposts{width:10vw;text-align:right}table td.yearcell{color:#b58900;text-align:center}table{vertical-align:top}table td.code{float:right}table tr.even{background-color:#26424e}table tr.yearline{font-size:1.8em;margin:0 0 0.625em 0}table thead{text-align:right}em,i{font-style:italic}strong,b{font-weight:bold}small,sup,sub{font-size:calc( .85remem + 0.15vw + 0.15vh)}sup{vertical-align:super}sub{vertical-align:sub}blockquote{margin:1.375em 1.375em;padding:0 1.25em;border-left:0.125em solid #000;font-size:calc(1.2rem + 0.15vw + 0.15vh);font-style:italic;line-height:1.5rem;border-color:#dc2b27}acronym,abbr{cursor:help;letter-spacing:0.0625em;border-bottom:0.0625em dashed}#header{background-color:#002b36;font-family:Yellowtail,"Brush Script MT",cursive;width:100vw;position:fixed;top:0;bottom:auto;text-align:center}#header h1{color:#ff8900;font-size:calc(3.5rem + 0.15vw + 0.15vh);margin-bottom:4px}#header h2{color:#3ae25c;font-size:calc(1.952rem + 0.15vw + 0.15vh)}@media all and (max-height: 500px){#header{position:relative;float:none;margin-left:initial}}@media all and (max-width: 49.991em){#header{position:static;float:none;margin-left:initial}}#footer{width:75vw;margin:3.125em auto 1.25em  auto;text-align:center}@media all and (max-width: 49.991em){#footer{width:100vw}}#license{display:inline-block}#license p{display:inline-block}#content{min-width:45ch;max-width:95ch;margin-top:calc(11rem + 1vw + 1vh);margin-left:11%}@media all and (max-width: 49.991em){#content{margin-top:auto;margin-left:initial;width:98vw}}@media all and (max-height: 500px){#content{position:static;float:none;width:98vw;margin-top:auto}}@media all and (min-width: 87.5101em){#content{margin-left:auto;margin-right:auto}}#sidebar{position:fixed;text-align:right;margin-top:5vmin;width:20%;left:-10%}#sidebar li{list-style:none;margin:2px 0}#sidebar a{border:none;padding:2px 4px}#sidebar a:hover{color:#2aa198;background-color:#073642}#sidebar nav select.mnav{display:none}@media all and (max-width: 49.991em){#sidebar{position:relative;text-align:left;width:100vw;left:0;margin-top:0;float:none;overflow:auto}#sidebar li{float:left;margin:2px 0}#sidebar nav select.mnav{display:block;margin-bottom:15px}}@media all and (min-width: 87.5101em){#sidebar{left:auto}}article{margin-bottom:40px}article h1{color:#2aa198;font-size:calc(1.6rem + 0.15vw + 0.15vh);margin:0 0 10px 0}article h1 a{border:none}article h1 a.anchor{margin-left:8px;color:#2aa198}article .meta{font-size:calc(.7rem + 0.15vw + 0.15vh);font-style:italic}img{max-width:100vw}img.left{float:left;margin:1em 1em 1em 1em}img.right{float:right;margin:1em 1em 1em 1em}{display:block;text-align:center;margin:1em auto 1em auto}figure.left{float:left;display:inline-block}figure.right{float:right;display:inline-block}{margin-left:auto;margin-right:auto}figcaption{text-align:center}.postnavigation{text-align:center}.postnavigation .left{float:left}.postnavigation .right{float:right}.highlight{background-color:#002b36;color:#839496;border:solid 1px;padding:1vmax;overflow:auto;font-family:"Droid Sans Mono","Lucida Console","Lucida Sans Typewriter",monaco,"Bitstream Vera Sans Mono",monospace;font-size:.98rem}.highlight p,.highlight pre{margin-bottom:0}.highlight .lineno{color:#ccc;display:inline-block;padding:0 5px;border-right:1px solid #ccc}.highlight pre code{display:block;white-space:pre;overflow-x:auto;word-wrap:normal}.highlight .c{color:#586e75}.highlight .err{color:#839496}.highlight .g{color:#839496}.highlight .k{color:#3ae25c}.highlight .l{color:#839496}.highlight .n{color:#839496}.highlight .o{color:#3ae25c}.highlight .x{color:#ff8900}.highlight .p{color:#839496}.highlight .cm{color:#586e75}.highlight .cp{color:#3ae25c}.highlight .c1{color:#586e75}.highlight .cs{color:#3ae25c}.highlight .gd{color:#2aa198}.highlight .ge{color:#839496;font-style:italic}.highlight .gr{color:#dc2b27}.highlight .gh{color:#ff8900}.highlight .gi{color:#3ae25c}.highlight .go{color:#839496}.highlight .gp{color:#839496}.highlight .gs{color:#839496;font-weight:bold}.highlight .gu{color:#ff8900}.highlight .gt{color:#839496}.highlight .kc{color:#ff8900}.highlight .kd{color:#268bd2}.highlight .kn{color:#3ae25c}.highlight .kp{color:#3ae25c}.highlight .kr{color:#268bd2}.highlight .kt{color:#dc2b27}.highlight .ld{color:#839496}.highlight .m{color:#2aa198}.highlight .s{color:#2aa198}.highlight .na{color:#839496}.highlight .nb{color:#ff8900}.highlight .nc{color:#268bd2}.highlight .no{color:#ff8900}.highlight .nd{color:#268bd2}.highlight .ni{color:#ff8900}.highlight .ne{color:#ff8900}.highlight .nf{color:#268bd2}.highlight .nl{color:#839496}.highlight .nn{color:#839496}.highlight .nx{color:#839496}.highlight .py{color:#839496}.highlight .nt{color:#268bd2}.highlight .nv{color:#268bd2}.highlight .ow{color:#3ae25c}.highlight .w{color:#839496}.highlight .mf{color:#2aa198}.highlight .mh{color:#2aa198}.highlight .mi{color:#2aa198}.highlight .mo{color:#2aa198}.highlight .sb{color:#586e75}.highlight .sc{color:#2aa198}.highlight .sd{color:#839496}.highlight .s2{color:#2aa198}.highlight .se{color:#ff8900}.highlight .sh{color:#839496}.highlight .si{color:#2aa198}.highlight .sx{color:#2aa198}.highlight .sr{color:#dc2b27}.highlight .s1{color:#2aa198}.highlight .ss{color:#2aa198}.highlight .bp{color:#268bd2}.highlight .vc{color:#268bd2}.highlight .vg{color:#268bd2}.highlight .vi{color:#268bd2}.highlight .il{color:#2aa198}</style>
   <!--[if lt IE 9]>
     <script src="/assets/js/html5shiv.js"></script>
+  {% seo %}
   <header id="header" itemscope itemtype=''>
     <h1 class="site-title">{{ }}</h1>
     <h2 class="site-description">{{ site.description }}</h2>
   <div id="page">
     <div id="sidebar">
-          <li><a href="/">Home</a></li>
-          <li><a href="/category">Categories</a></li>
-          <li><a href="/archives">Archive</a></li>
-          <li><a href="/about">About</a></li>
-          <li><a href="">Git</a></li>
-          <li><a href="">Github</a></li>
-          <li><a href="/atom.xml">Feed</a></li>
+          <li><a href="/" title="Home">Home</a></li>
+          <li><a href="/category" title="Category overview">Categories</a></li>
+          <li><a href="/archives" title="Blog archive">Archive</a></li>
+          <li><a href="/about" title="About the blog">About</a></li>
+          <li><a href="" title="">Git</a></li>
+          <li><a href="" title="Github user page Ganneff">Github</a></li>
+          <li><a href="/atom.xml" title="Atom feed">Feed</a></li>
     <div id="content" role="main" itemscope itemtype=''>
       {{ content }}
   <footer id="footer" itemscope itemtype="">
     <p class="copyright">Copyright &copy; 2004 - {{ site.time | date: '%Y' }} Joerg Jaspert.</p>
     <div id="license">
-      <a href="">
+      <a href="" title="Blog license">
         <img alt="Creative Commons License" src="/assets/images/cc_by-nc-sa_88x31.png" width="88" height="31"/></a>
-        <p>This weblog is licensed under a <a href="">Creative Commons License</a>.</p>
+        <p>This weblog is licensed under a <a href="" title="Blog license">Creative Commons License</a>.</p>
\ No newline at end of file
index 459c47d..6463858 100644 (file)
@@ -3,13 +3,13 @@ layout: default
 title: Archive of posts
 <h1>Archive of posts from {{ | date: "%B" }}
-  <a class="year-link" href="/{{ | date: '%Y' }}">{{ | date: "%Y" }}</a></h1>
+  <a class="year-link" href="/{{ | date: '%Y' }}" title="Archive of {{ | date: "%Y" }}">{{ | date: "%Y" }}</a></h1>
 <ul class="posts">
   {% for post in page.posts %}
     <span class="post-date">{{ | date: "%b %-d, %Y" }}</span>
-    <a class="post-link" href="{{ post.url | prepend: site.baseurl }}">{{ post.title | markdownify }}</a>
+    <a class="post-link" href="{{ post.url | prepend: site.baseurl }}" title="Post: {{ post.title | markdownify  | remove: '<p>' | remove: '</p>' }}">{{ post.title | markdownify  | remove: '<p>' | remove: '</p>'}}</a>
   {% endfor %}
\ No newline at end of file
index f0cea44..db80f5c 100644 (file)
@@ -5,11 +5,11 @@ layout: default
   {% if page.external-url %}
   <h1 itemProp="headline">
-    <a href="{{ page.external-url }}">{{ page.title | markdownify | remove: '<p>' | remove: '</p>' }}</a> 
-    <a class="anchor" href="{{ page.url }}"><i class="icon-anchor"></i></a>
+    <a href="{{ page.external-url }}" title="External post {{ page.title | markdownify | remove: '<p>' | remove: '</p>' }}">{{ page.title | markdownify | remove: '<p>' | remove: '</p>' }}</a> 
+    <a class="anchor" href="{{ page.url }}" title="None"><i class="icon-anchor"></i></a>
   {% else %}
-  <h1 itemProp="headline"><a href="{{ page.url }}">{{ page.title | markdownify | remove: '<p>' | remove: '</p>' }}</a></h1>
+  <h1 itemProp="headline"><a href="{{ page.url }}" title="Post {{ page.title | markdownify | remove: '<p>' | remove: '</p>' }}">{{ page.title | markdownify | remove: '<p>' | remove: '</p>' }}</a></h1>
   {% endif %}
   <p class="meta">Posted on <span class="postdate">{{ | date: "%d %b %Y, %H:%M" }}</span></p>
index 0e554ef..04556f8 100644 (file)
@@ -7,10 +7,10 @@ layout: default
 {% assign currentdate = | date: "%Y" %}
 {% if currentdate != date %}
 {% unless forloop.first %}
-<p>Back to <a href="/category/" title="Category page">the category overview.</a></p>
+<p>Back to <a href="/category/" title="Category page" title="Back to category overview">the category overview.</a></p>
 {% endunless %}
-<h2><a class="year-link" href="/{{ currentdate }}">{{ currentdate }}</a></h2>
+<h2><a class="year-link" href="/{{ currentdate }}" title="Year {{ currentdate }}">{{ currentdate }}</a></h2>
   {% assign date = currentdate %}
@@ -21,11 +21,11 @@ layout: default
     <tr class="even">
     {% endif %}
       <td class="postdate"><time datetime="{{ | date_to_xmlschema}}">{{ | date: "%d. %B" }}</time></td>
-      <td class="postlink"><a href="{{ post.url }}">{{ post.title }}</a></td>
+      <td class="postlink"><a href="{{ post.url }}" title="Post: {{ post.title | markdownify | remove: '<p>' | remove: '</p>' }}">{{ post.title | markdownify  | remove: '<p>' | remove: '</p>'}}</a></td>
 {% if forloop.last %}
 {% endif %}
 {% endfor %}
-<p>Back to <a href="/category/" title="Category page">the category overview.</a></p>
+<p>Back to <a href="/category/" title="Category page" title="Back to category overview">the category overview.</a></p>
index 0caebfe..abfa4c6 100644 (file)
@@ -14,7 +14,7 @@ title: Archive of posts
       <tr class="even">
     {% endif %}
         <td class="postdate"><time datetime="{{ | date_to_xmlschema}}">{{ | date: "%d. %B" }}</time></td>
-        <td class="postlink"><a href="{{ post.url }}">{{ post.title | markdownify }}</a></td>
+        <td class="postlink"><a href="{{ post.url }}" title="Post: {{ post.title | markdownify | remove: '<p>' | remove: '</p>'}}">{{ post.title | markdownify | remove: '<p>' | remove: '</p>' }}</a></td>
   {% endfor %}
diff --git a/_posts/2005-07-14-a_nice_license_something_to_la.html b/_posts/2005-07-14-a_nice_license_something_to_la.html
deleted file mode 100644 (file)
index cbd8530..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-layout: post
-title: A nice license, something to laugh.
-date: '2005-07-14 23:23:00 +0000'
-mt_id: 185
-blog_id: 1
-post_id: 185
-basename: a_nice_license_something_to_la
-- debian
-Have fun with <form mt:asset-id="14" class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="">the D &amp; R (Death
-and Repudiation) License</a></form>.
-Note: The affected software is released under "BSD or D&amp;R", whatever
-you prefer, so feel free to choose this one.
diff --git a/_posts/2005-07-14-a_nice_license_something_to_la.markdown b/_posts/2005-07-14-a_nice_license_something_to_la.markdown
new file mode 100644 (file)
index 0000000..6ba54c1
--- /dev/null
@@ -0,0 +1,49 @@
+layout: post
+title: A nice license, something to laugh.
+date: '2005-07-14 23:23:00 +0000'
+mt_id: 185
+blog_id: 1
+post_id: 185
+basename: a_nice_license_something_to_la
+- debian
+Have fun with the D & R (Death and Repudiation) License.
+Copyright (c) 2003 why the lucky stiff
+D&R (Death and Repudiation) License
+This software may not be used directly by any living being.  ANY use of this
+software (even perfectly legitimate and non-commercial uses) until after death
+is explicitly restricted.  Any living being using (or attempting to use) this software
+will be punished to the fullest extent of the law.
+For your protection, corpses will not be punished.  We respectfully request
+that you submit your uses (revisions, uses, distributions, uses, etc.) to
+your children, who may vicariously perform these uses on your behalf.  If
+you use this software and you are found to be not dead, you will be punished
+to the fullest extent of the law.
+If you are found to be a ghost or angel, you will be punished to the fullest
+extent of the law.
+After your following the terms of this license, the author has vowed to repudiate
+your claim, meaning that the validity of this contract will no longer be recognized.
+This license will be unexpectedly revoked (at a time which is designated to be
+most inconvenient) and involved heirs will be punished to the fullest extent
+of the law.
+Furthermore, if any parties (related or non-related) escape the punishments
+outlined herein, they will be severely punished to the fullest extent of a new
+revised law that (1) expands the statement "fullest extent of the law" to encompass
+an infinite duration of infinite punishments and (2) exacts said punishments
+upon all parties (related or non-related).
+Note: The affected software is released under "BSD or D&R", whatever
+you prefer, so feel free to choose this one.
index d7ab1e4..da7dcd8 100644 (file)
@@ -27,17 +27,20 @@ ratio and attenuation, splitted by up- and downlink.
 Getting nice munin graphs out of this is
-<a href="">plain
-simple</a>. I bet it could be done without the additional perl module
+<a href="/assets/randomfiles/">plain simple</a>.
+I bet it could be done without the additional perl module
 usage, but I didn't care about that, its simple enough the way it is and
 just works:
-<form mt:asset-id="5" class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href=""><img alt="" src="" width="495" height="276" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></form>
+{% include image.html file="2007/munin-dsl-rate.png" alt="dsl rate day"
+   class="center" caption="none" prevwidth="60%" %}
-<form mt:asset-id="4" class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href=""><img alt="" src="" width="495" height="276" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></form>
+{% include image.html file="2007/munin-dsl-attenuation.png" alt="dsl attenuation day"
+class="center" caption="none" prevwidth="60%" %}
-<form mt:asset-id="6" class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href=""><img alt="" src="" width="495" height="276" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></form>
+{% include image.html file="2007/munin-dsl-snr.png" alt="dsl snr day"
+class="center" caption="none" prevwidth="60%" %}
 In case you got one of those "Telekom Speedport 200" AKA "Tecom Tiny
index b802a25..8811714 100644 (file)
@@ -39,7 +39,10 @@ Usage of clusterssh is pretty simple - after you installed it type
 </p><pre>  cssh machine1 machine2 machine3
 and clusterssh will open 3 xterms and one control window. Whatever you
-type into that control window is then send to all 3 machines. <br /><form contenteditable="false" mt:asset-id="1" class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="" onclick="'','popup','width=1304,height=957,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="" alt="cssh.png" class="mt-image-center" style="margin: 0pt auto 20px; text-align: center; display: block;" height="587" width="800" /></a></form><br />
+type into that control window is then send to all 3 machines. <br />
+{% include image.html file="2007/cssh.png" alt="CSSH Screenshot"
+   class="left" caption="CSSH example with 2 hosts" %}
 As you can see in the picture I first executed one command on both
index 072e237..1afc15c 100644 (file)
@@ -15,21 +15,47 @@ Anyways, britney is no longer. And with her testing died too. Ok, not really, bu
 For those not following the "inner" workings of stuff:
- - Testing is the place where our next stable release gets prepared. It is managed by a software called *britney*, which was written by Anthony Towns.
- - Britney was, until today, run by the ftpmasters. The release team had **no** way to change anything, besides their [hint files]( They couldn't change code, couldn't rerun it themselve if needed, nothing. (Somewhere in the past, for some period, some of the release team was able to do extra britney runs, AFAIK, but thats long ago).
-As the above is surely not nice, **especially** as Anthony (and as such the one in ftpmaster who really fully knew britney) left the ftpmaster group, all of the code managing testing now lives with the release team. They now *just* prepare a file in a special format and then tell us (via a [ssh trigger]( to read that in. Which simply sets testing to the new state.
-This new way of doing things has multiple advantages:
- - The release team can run britney whenever they want to. It no longer needs to wait for a cronjob at some externally defined time or ping an ftpmaster to do an extra run. That should be pretty helpful, especially when we are near to a release again.
- - They can do code changes or even replace the current britney with a totally new one. (There seems to be a new one available that does the same as the current one, just way faster. Or even more. Which never seems to have got any comment from our side. Badbad. Well, now they can play with it if they want to.). As long as they output valid data for us to import, it is now completly their decision how it gets generated.
+ - Testing is the place where our next stable release gets prepared.
+   It is managed by a software called *britney*, which was written by
+   Anthony Towns.
+ - Britney was, until today, run by the ftpmasters. The release team
+   had **no** way to change anything, besides their [hint
+   files]( They couldn't
+   change code, couldn't rerun it themselve if needed, nothing.
+   (Somewhere in the past, for some period, some of the release team
+   was able to do extra britney runs, AFAIK, but thats long ago).
+As the above is surely not nice, **especially** as Anthony (and as
+such the one in ftpmaster who really fully knew britney) left the
+ftpmaster group, all of the code managing testing now lives with the
+release team. They now *just* prepare a file in a special format and
+then tell us (via a [ssh trigger]({% post_url 2007-12-29-ssh_triggers %})) to
+read that in. Which simply sets testing to the new state.
+ - The release team can run britney whenever they want to. It no
+   longer needs to wait for a cronjob at some externally defined time
+   or ping an ftpmaster to do an extra run. That should be pretty
+   helpful, especially when we are near to a release again.
+ - They can do code changes or even replace the current britney with a
+   totally new one. (There seems to be a new one available that does
+   the same as the current one, just way faster. Or even more. Which
+   never seems to have got any comment from our side. Badbad. Well,
+   now they can play with it if they want to.). As long as they output
+   valid data for us to import, it is now completly their decision how
+   it gets generated.
 The above action did need surprisingly few code changes in dak. It basically was
  - disable the cronjob for britney as user dak
- - Add a script that the release team now pushes via ssh. This script reads in the above mentioned special file and sets the database.
- - Change process-accepted to write the urgencies to a different directory. And no longer try to mkdir this directory, but warn if it doesn't exist (or is not writeable by dak) and then use a temporary one for the run.
- - Move the transitions.yaml to a different location and add a redirect in apache, so everyone can still access it from outside. (It **has** to live in a ftpmaster controlled directory, thats all).
+ - Add a script that the release team now pushes via ssh. This script
+   reads in the above mentioned special file and sets the database.
+ - Change process-accepted to write the urgencies to a different
+   directory. And no longer try to mkdir this directory, but warn if
+   it doesn't exist (or is not writeable by dak) and then use a
+   temporary one for the run.
+ - Move the transitions.yaml to a different location and add a
+   redirect in apache, so everyone can still access it from outside.
+   (It **has** to live in a ftpmaster controlled directory, thats
+   all).
  - Eliminate a britney call from our daily cronjob.
index 96875bc..b622884 100644 (file)
@@ -8,29 +8,41 @@ post_id: 236
 basename: yet_another_argentina_post
 - debconf
-And here, yet another Argentina post before I have to do some work again (like the Entrance Controller needs some love). This time with pictures! :)
-You can have pretty nice desserts in BA, as this picture with Mark on it proves.
-<form mt:asset-id="21" class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="" onclick="'','popup','width=1944,height=2592,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="" width="495" height="660" alt="mhy_ice.jpg" class="mt-image-none" style="" /></a></form>
+And here, yet another Argentina post before I have to do some work
+again (like the Entrance Controller needs some love). This time with
+pictures! :)
-I think he will really love me for this post. Really. (It wasn't actually his dessert :) ).
+You can have pretty nice desserts in BA, as this picture with Mark on
+it proves.
+{% include image.html file="2008/mhy_ice.jpg" alt="Mhy Ice"
+   class="center" caption="Nice dessert in BA" %}
-Anyways, this morning we took the opportunity walking over to see the Atlantic Ocean. Damn long way, proven by the next picture (the building marked with that arrow is our Hotel, us standing right beside the beach).
+I think he will really love me for this post. Really. (It wasn't
+actually his dessert :) ).
-<form mt:asset-id="23" class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="" onclick="'','popup','width=2592,height=1944,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="" width="495" height="371" alt="dora.jpg" class="mt-image-none" style="" /></a></form>
+Anyways, this morning we took the opportunity walking over to see the
+Atlantic Ocean. Damn long way, proven by the next picture (the
+building marked with that arrow is our Hotel, us standing right beside
+the beach).
+{% include image.html file="2008/dora.jpg" alt="dora"
+   class="center" %}
-Fun thing - Mark was walking outside with a T-Shirt only, while all those Argentinian people use winter clothes. Got him quite a bit of weird looks from all of them. :)
+Fun thing - Mark was walking outside with a T-Shirt only, while all
+those Argentinian people use winter clothes. Got him quite a bit of
+weird looks from all of them. :)
 Right now we are back, sitting in the first prepared hacklab.
-<form mt:asset-id="24" class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="" onclick="'','popup','width=2592,height=1944,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="" width="495" height="371" alt="hacklab.jpg" class="mt-image-none" style="" /></a></form>
+{% include image.html file="2008/hacklab.jpg" alt="Hacklab"
+   class="center" caption="First hacklab" %}
-Yes, those grey things below the tables are for cabling, so there is a lot of power outlets, should be enough for everybody to get power, without doing long daisy chains.
+Yes, those grey things below the tables are for cabling, so there is a
+lot of power outlets, should be enough for everybody to get power,
+without doing long daisy chains.
index fd810e4..32b8d74 100644 (file)
@@ -9,13 +9,62 @@ basename: cebit_2009
 - debian
-I'm back from this years Cebit (well, yesterday already, just didn't write about it). Had a mostly good time that week, with our booth <form mt:asset-id="33" class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="" onclick="'','popup','width=1067,height=800,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="" width="495" height="371" alt="cebit09_booth1.jpg" class="mt-image-right" style="float: right; margin: 0 0 15px 15px;" /></a></form> being small but visible to the visitors. In the first picture you see Rene (not our Rene :) ) setting up our second laptop, which we used whenever we had to show something to our visitors. The upper laptop with the presentation on it is my own. As it has a pretty big display we used it to continually have a presentation about Debian run. If there is no room for a projector this is a good alternative way.
+I'm back from this years Cebit (well, yesterday already, just didn't
+write about it). Had a mostly good time that week, with our booth
-Later on we <form mt:asset-id="36" class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="" onclick="'','popup','width=800,height=1067,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="" width="495" height="660" alt="cebit09_booth2.jpg" class="mt-image-left" style="float: left; margin: 20px 15px 15px 0;" /></a></form> also had bb running, with customized texts for Cebit. As old as <a href="">bb</a> might be, it is still the best eye catcher you can have for a fair like Cebit. Nothing (well, maybe besides sex) works that good.
+{% include image.html file="2009/cebit0903_01.jpg" alt="Cebit booth 2009 #1"
+   class="right" caption="none" %}
+being small but visible to the visitors. In the first picture you see
+Rene (not our Rene :) ) setting up our second laptop,
+which we used whenever we had to show something to our visitors. The
+upper laptop with the presentation on it is my own. As it has a pretty
+big display we used it to continually have a presentation about Debian
+run. If there is no room for a projector this is a good alternative
-We had a good week there, answering all sorts of questions. We had many people that knew nothing about Debian, Linux or even OpenSource and we had many that had heard about "this other system" already as well as people with very specific problems with various packages in Debian. There had been many people asking about the difference between Debian and Ubuntu and what we think about it, many told us they switched to Ubuntu for their Desktop but keep Debian on the Server <cite>because Ubuntu doesn't know what stability means</cite>, lots of others told us they switched back from Ubuntu because Debian is better. We also had those people that can not understand how Debian can exists if it doesn't sell anything and sometimes it turned out to be pretty hard to explain why we do what we do in a way they understand it. So all in all it was Cebit as usual. :)
-As one can read in the news, Cebit was much smaller than last year. 25% less exhibitors and 20% less visitors **is** very visible. Yet, besides a pretty tedious Sunday with the lowest visitor rate, the Debian booth wasn't much affected by it. We did have about all the usual people that visit us every year and for the rest, well, we are generic enough to attract attention from most visitors.
+{% include image.html file="2009/cebit0903_02.jpg" alt="Cebit booth 2009 #2"
+   class="left" caption="none" %}
+Later on we also had bb running, with customized texts for Cebit. As
+old as {% deb_pkg bb %} might be, it is still the best eye catcher you
+can have for a fair like Cebit. Nothing (well, maybe besides sex)
+works that good.
-This years booth was setup in a different way than the past years. As you can see on the pictures, it was a huge booth which had 15 different OpenSource projects on it, all arranged in "isles" of 3 tables each. We had BSD and Mozilla with us and the fsfe was our direct neighbor. Past years had an own booth per Project. Both ways have their advantages and disadvantages, and I think (and hope) next year will see a mixture of it. Large projects, which are known to attract lots of attention, like Debian, KDE or Mozilla, should have their own, seperated, booth. Something like 6 square meters each, placed as far away from each other as possible. Between those one or two larger areas having such tables arranged for smaller projects, like scribus or gosa will also give them a nice demonstration point and good access for visitors. Well, lets see how it will look like next year, it depends on many factors, the biggest being the money available to the OpenSource area.
+We had a good week there, answering all sorts of questions. We had
+many people that knew nothing about Debian, Linux or even OpenSource
+and we had many that had heard about "this other system" already as
+well as people with very specific problems with various packages in
+Debian. There had been many people asking about the difference between
+Debian and Ubuntu and what we think about it, many told us they
+switched to Ubuntu for their Desktop but keep Debian on the Server
+<cite>because Ubuntu doesn't know what stability means</cite>, lots of
+others told us they switched back from Ubuntu because Debian is
+better. We also had those people that can not understand how Debian
+can exists if it doesn't sell anything and sometimes it turned out to
+be pretty hard to explain why we do what we do in a way they
+understand it. So all in all it was Cebit as usual. :)
+As one can read in the news, Cebit was much smaller than last year.
+25% less exhibitors and 20% less visitors **is** very visible. Yet,
+besides a pretty tedious Sunday with the lowest visitor rate, the
+Debian booth wasn't much affected by it. We did have about all the
+usual people that visit us every year and for the rest, well, we are
+generic enough to attract attention from most visitors.
+This years booth was setup in a different way than the past years. As
+you can see on the pictures, it was a huge booth which had 15
+different OpenSource projects on it, all arranged in "isles" of 3
+tables each. We had BSD and Mozilla with us and the fsfe was our
+direct neighbor. Past years had an own booth per Project. Both ways
+have their advantages and disadvantages, and I think (and hope) next
+year will see a mixture of it. Large projects, which are known to
+attract lots of attention, like Debian, KDE or Mozilla, should have
+their own, seperated, booth. Something like 6 square meters each,
+placed as far away from each other as possible. Between those one or
+two larger areas having such tables arranged for smaller projects,
+like scribus or gosa will also give them a nice demonstration point
+and good access for visitors. Well, lets see how it will look like
+next year, it depends on many factors, the biggest being the money
+available to the OpenSource area.
index c188d63..1a18ca0 100644 (file)
@@ -8,7 +8,9 @@ post_id: 282
 basename: rip
 - personal
-<form mt:asset-id="40" class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="" onclick="'','popup','width=545,height=568,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="" width="495" height="515" alt="rip.png" class="mt-image-none" style="" /></a></form>
+{% include image.html file="2009/rip.png" alt="RIP"
+   class="center" caption="none" %}
 Gone today, early afternoon, after ~ 8 years being the most insane and funny little bird I ever had.
index 762ca95..a24f47b 100644 (file)
@@ -11,8 +11,11 @@ categories:
 I finally (yesterday) bought my tickets to actually get to Caceres,
-<a href=""><img alt="debconf9-going-to.png" src="" width="150" height="89" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>
+{% include image.html file="2009/debconf9-going-to.png" alt="going to dc9"
+   class="center" caption="none" %}
-which was later than I expected to do it, but oh well, better late than never. :)
+which was later than I expected to do it, but oh well, better late
+than never. :)
-One more day to go to work and then 4 weeks vacation, parts of them in Caceres. Fun.
+One more day to go to work and then 4 weeks vacation, parts of them in
+Caceres. Fun.
index 34a795b..becd7b2 100644 (file)
@@ -8,31 +8,66 @@ post_id: 289
 basename: printer_power
 - tech
-My printer is a nice Kyocera FS1800 laser thingie, connected via an USB<->parallel port adapter. It works nicely, is fast enough but up to now had one annoying edge: I had to turn it on when I wanted to print something, and later remember to turn it off. As I don't print much, keeping it on all the time would be a pure waste, but I regularly forgot to turn it off.
+My printer is a nice Kyocera FS1800 laser thingie, connected via an
+USB<->parallel port adapter. It works nicely, is fast enough but up to
+now had one annoying edge: I had to turn it on when I wanted to print
+something, and later remember to turn it off. As I don't print much,
+keeping it on all the time would be a pure waste, but I regularly
+forgot to turn it off.
-Now, I do own two ["SISPM"]( devices for some time already, just never got them setup. After all you have to uncable everything to get them in, brrr.  Back when I changed my [desktop hardware](/2009/08/04/new-hardware.html) I used one of the two devices already, so whenever I suspend my desktop it also turns off both monitors and an external usb hub, automagically getting them back on as soon as I resume. Nice little thing.
+Now, I do own two SISPM devices for some time already, just never got
+them setup. After all you have to uncable everything to get them in,
+brrr. Back when I changed my [desktop hardware](/2009/08/04/new-hardware.html) I used one of the two devices
+already, so whenever I suspend my desktop it also turns off both
+monitors and an external usb hub, automagically getting them back on
+as soon as I resume. Nice little thing.
-Today I took the time to install the second SISPM. This time connected to my soekris net5501 box, so the cups on it can turn the printer on whenever I want to print. Getting this integrated into cups was a small challenge, but not that hard to solve. And it should be easily adaptable to similar devices, as long as you have a linux binary to control it...
+Today I took the time to install the second SISPM. This time connected
+to my soekris net5501 box, so the cups on it can turn the printer on
+whenever I want to print. Getting this integrated into cups was a
+small challenge, but not that hard to solve. And it should be easily
+adaptable to similar devices, as long as you have a linux binary to
+control it...
- - First you need a cups backend script. I based mine on some I found via google. That one didn't work at all, but gave me the right hints. The script is <form mt:asset-id="44" class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="">available here.</a></form>
+ - First you need a cups backend script. I based mine on some I found
+   via google. That one didn't work at all, but gave me the right
+   hints. The [sispm script] is available here.
  - Place it into */usr/lib/cups/backend/*
- - Reconfigure your cups to use the new sispm backend for your printer instead of whatever you had before. Make your life easy, note down the old DeviceURI, you need it. The new DeviceURI will simply be the old one, prepended by "sispm:PORT", where you replace port by the number of the power plug you connected your printer to.
+ - Reconfigure your cups to use the new sispm backend for your printer
+   instead of whatever you had before. Make your life easy, note down
+   the old DeviceURI, you need it. The new DeviceURI will simply be
+   the old one, prepended by "sispm:PORT", where you replace port by
+   the number of the power plug you connected your printer to.
+   I use a second [printeroff] script to turn the printer off, which runs every 5
+   minutes from cron. The script checks if the last print attempt was
+   done more than ten minutes in the past and only then turns power
+   off.
- - I use a second script to turn the printer off, which runs every 5 minutes from cron. The script checks if the last print attempt was done more than ten minutes in the past and only then turns power off. You can <form mt:asset-id="45" class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="">get the script here.</a></form>
+   Run this script every 5 minutes from cron. A file with a line like
+   the following should do.
- - Run this script every 5 minutes from cron. A file with a line like the following should do.
+{% highlight crontab %}
 */5 * * * * root if [ -f /var/run/cups/sispm/jobdone ]; then /usr/local/bin/printeroff >/dev/null ; fi
+{% endhighlight %}
- - Enable the user lp to turn power on, by adding a line like below  to your sudoers. Replace 1 by the number of the outlet you want to control. You do not need  the right to turn power off, as that script runs as root.
+ - Enable the user lp to turn power on, by adding a line like below to
+   your sudoers. Replace 1 by the number of the outlet you want to
+   control. You do not need the right to turn power off, as that
+   script runs as root.
+{% highlight sudoers %}
 lp    ALL=(root) NOPASSWD: /usr/bin/sispmctl -o 1
+{% endhighlight %}
  - Create */var/run/cups/sispm/* and make sure the user lp can write to it.
-You are done, cups should now turn on power for your printer whenever you want to print, and it should magically go off 10 minutes later.
+You are done, cups should now turn on power for your printer whenever
+you want to print, and it should magically go off 10 minutes later.
+*[SISPM]: Remote (pc) controlled power plugs, google sispm to find them, no longer directly linkable on producers website.
+[sispm script]: /assets/randomfiles/sispm
+[printeroff]: /assets/randomfiles/printeroff
index d61e2a9..0e0cffa 100644 (file)
@@ -9,15 +9,36 @@ basename: debian_ftpmaster_meeting
 - debian
 - ftpmaster
-I am at the Debian FTPMaster meeting in the LinuxHotel Essen currently. We arrived Sunday evening and will stay until 1st November, giving us a nice week of time to work on outstanding archive issues. Currently we are 4 persons, Mark and me as FTPMasters and Frank and Chris as FTPTeam members. 2 more FTPTeam members join us Wednesday evening, so we only miss 2 members of our team in the end.
+I am at the Debian FTPMaster meeting in the LinuxHotel Essen
+currently. We arrived Sunday evening and will stay until 1st November,
+giving us a nice week of time to work on outstanding archive issues.
+Currently we are 4 persons, Mark and me as FTPMasters and Frank and
+Chris as FTPTeam members. 2 more FTPTeam members join us Wednesday
+evening, so we only miss 2 members of our team in the end.
-<form mt:asset-id="46" class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="" onclick="'','popup','width=1024,height=684,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="" width="495" height="330" alt="ftpmeet_lh_2009_01" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></a></form>
+{% include image.html file="2009/ftpmeet_01.jpg" alt="FTPMaster meeting LinuxHotel 2009 #1"
+   class="right" caption="none" %}
-Monday started out very well, with us merging a 7000 (plus something) lines patch, completly changing our database handling code. While we do have the archive disabled since we started working on it (and haven't reenabled it yet), we had a surprisingly small amount of errors to fix up. Though we do still have to test various codepaths, so it will still be a bit before normal service is back. But yay, we are now with a database layer that actually understands types (and has various other advantages).
+Monday started out very well, with us merging a 7000 (plus something)
+lines patch, completly changing our database handling code. While we
+do have the archive disabled since we started working on it (and
+haven't reenabled it yet), we had a surprisingly small amount of
+errors to fix up. Though we do still have to test various codepaths,
+so it will still be a bit before normal service is back. But yay, we
+are now with a database layer that actually understands types (and has
+various other advantages).
-Today started with us getting to the next intrusive patch set waiting for our attention, the source v3 format. At the time of writing this blog post the patchset is merged (with changes to the way it originally looked) and we are now cleaning up and fixing the introduced bugs.
-Though I just heard live the first rejection of a sample v3 format package, so that looks pretty good too.
-And while that bugfixing is going on we are also working on the [lintian autorejects]( and still have many other points on our agenda.
+Today started with us getting to the next intrusive patch set waiting
+for our attention, the source v3 format. At the time of writing this
+blog post the patchset is merged (with changes to the way it
+originally looked) and we are now cleaning up and fixing the
+introduced bugs. Though I just heard live the first rejection of a
+sample v3 format package, so that looks pretty good too. And while
+that bugfixing is going on we are also working on the [lintian autorejects](
+and still have many other points on our agenda.
-I try to keep you updated, and we sure will send a report after the meeting, but I think it can already be said that every single cent spent here is worth it.
+I try to keep you updated, and we sure will send a report after the
+meeting, but I think it can already be said that every single cent
+spent here is worth it.
index cf3bb67..3986240 100644 (file)
@@ -10,37 +10,106 @@ categories:
 - debian
 - ftpmaster
-So Tuesday was another very productive day seeing lots of things done. And actually today also started (and will end) like this. I am now of the opinion that we need such a kind of meeting of our team every 6 months, if only we could manage to get the time off from our real lifes. Sitting together, discussing, working on the same thing, being able to just call over the table and get a different opinion just gains so much that we are missing otherwise...
-As you already read, Monday was our day to change the database layer while Tuesday left us with adding the v3 source formats. Which was declared finished today, somewhere around noon. The first picture in this blogpost shows our "still to fix up/todo" list from Monday evening.
-<form mt:asset-id="49" class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="" onclick="'','popup','width=1200,height=1321,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="" alt="monday_evening_todo.jpg" class="mt-image-right" style="margin: 0pt 0pt 20px 20px; float: right;" height="418" width="380" /></a></form>
-Besides the v3 format we also worked on other things, like the already mentioned lintian autorejects. This patchset is also fully committed and tested working since today, so we could start on other issues. We had lots of general enhancements of our code committed, from improving our logging to fixing some issues with expiring old files from the pool all the way up to reducing code duplicates all over the place.
+So Tuesday was another very productive day seeing lots of things done.
+And actually today also started (and will end) like this. I am now of
+the opinion that we need such a kind of meeting of our team every 6
+months, if only we could manage to get the time off from our real
+lifes. Sitting together, discussing, working on the same thing, being
+able to just call over the table and get a different opinion just
+gains so much that we are missing otherwise...
+As you already read, Monday was our day to change the database layer
+while Tuesday left us with adding the v3 source formats. Which was
+declared finished today, somewhere around noon. The first picture in
+this blogpost shows our "still to fix up/todo" list from Monday
+{% include image.html file="2008/monday_evening_todo.jpg" alt="Monday Evening Todo"
+class="right" caption="none" prevwidth=340 %}
+Besides the v3 format we also worked on other things, like the already
+mentioned lintian autorejects. This patchset is also fully committed
+and tested working since today, so we could start on other issues. We
+had lots of general enhancements of our code committed, from improving
+our logging to fixing some issues with expiring old files from the
+pool all the way up to reducing code duplicates all over the place.
 I must confess that we did not start right away working on dak today.
-<form mt:asset-id="52" class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="" onclick="'','popup','width=1200,height=801,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="" alt="shoe.jpg" class="mt-image-left" style="margin: 0pt 20px 20px 0pt; float: left;" height="256" width="384" /></a></form>. We had to start by using hightech to fix a broken shoe first. (Some glue and a heavy laptop. NOT MINE). :)
-Back to reality - we are currently 6 persons all working on various parts of the dak code. We still have the archive mostly disabled (basically one large dinstall run in the evening always) and are happy with this, as this allows us immediate testing without the risk of accidently destroying someones package upload. And we do test a lot, haven't seen that many python backtraces before in one place :)
-The third picture shows our "todo" list status from today. We still have a good number of points open, but as we have 6 persons working it does seem manageable to at least get a very good start on each of them. What we currently work on is "ACLs" in the archive, which will soon allow us to fix another issue the old DM code has but even more important will allow automated signing of packages built by buildds soon. We basically are able to limit such keys to only be able to upload for the one architecture they are allowed to, as well as forbid them to upload any kind of source. (Together with various other considerations around the setup of the buildds (like, for example, only buildds administrated by <span class="caps">DSA </span>can have that, but other points too), the handling of the keys, etc, this will lead to much faster uploads of the build binary packages). And will take a tedious work away from buildd admins (who will still have enough to do to deal with the general administration of it, the build failures, such things).
-Another thing we work on is the handling of arch all packages, in a source that produces arch all as well as arch any binaries. Currently, as soon as a new source is uploaded for one architecture, every architecture will see the new arch all deb. Which can lead to uninstallability of other packages. Not very nice.
-And another one of us is also working on our contents generation. Something started long ago, but not yet finished. Recently we did take big steps in this, getting our SQL queries for it down from about 10 minutes to something around 10 seconds. That is for one suite, one architecture, the full contents file contents. While this is SQL only and we still need to write it out to disk, it is a nice improvement.
-And to my right we have someone working on getting the Packges/Sources files data stored within projectb too, so we can also use our own python scripts to write those files. This will finally enable us to completly ditch apt-ftparchive.
-And finally, to my left site sits someone who is working on a dak policy wrapper, with which we can allow other groups then ftpmaster to control suites. The initial usage will be to restore the (oldstable-)proposed-updates handling with their own queues in front, as that is no longer part of our NEW handling script. In the future it will also allow easy handling of other situations, like suites for volatile or Basically everything where the people running the archive software are different to those people actually setting the policy for the suite.
-<form mt:asset-id="55" class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="" onclick="'','popup','width=1200,height=1538,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="" alt="board.jpg" class="mt-image-center" style="margin: 0pt auto 20px; text-align: right; display: block;" height="489" width="382" /></a></form>
-Another nice detail is the ability to throw away uploaded binaries and only ever take buildd built binaries into the archive. We will **not** go to source-only uploads, as that will only lead to lots of untested uploads (sorry people, we are all humans, it **<span class="caps">WILL</span>** happen), but we can have them uploaded, do regular checks (including the lintian ones), then take the files from the buildds.
-(Of course there is a way to get things bootstrapped, the system behind this is flexible to allow for a bootstrap mode for a new architecture).
-(I have multiple pictures, will probably put some more up when I am back home).
+{% include image.html file="2008/shoe.jpg" alt="Fixing a shoe with glue and hightech"
+class="left" caption="none" prevwidth=384 %}
+We had to start by using hightech to fix a broken shoe first. (Some
+glue and a heavy laptop. NOT MINE). :)
+Back to reality - we are currently 6 persons all working on various
+parts of the dak code. We still have the archive mostly disabled
+(basically one large dinstall run in the evening always) and are happy
+with this, as this allows us immediate testing without the risk of
+accidently destroying someones package upload. And we do test a lot,
+haven't seen that many python backtraces before in one place :)
+The third picture shows our "todo" list status from today. We still
+have a good number of points open, but as we have 6 persons working it
+does seem manageable to at least get a very good start on each of
+them. What we currently work on is "ACLs" in the archive, which will
+soon allow us to fix another issue the old DM code has but even more
+important will allow automated signing of packages built by buildds
+soon. We basically are able to limit such keys to only be able to
+upload for the one architecture they are allowed to, as well as forbid
+them to upload any kind of source. (Together with various other
+considerations around the setup of the buildds (like, for example,
+only buildds administrated by <span class="caps">DSA </span>can have
+that, but other points too), the handling of the keys, etc, this will
+lead to much faster uploads of the build binary packages). And will
+take a tedious work away from buildd admins (who will still have
+enough to do to deal with the general administration of it, the build
+failures, such things).
+Another thing we work on is the handling of arch all packages, in a
+source that produces arch all as well as arch any binaries. Currently,
+as soon as a new source is uploaded for one architecture, every
+architecture will see the new arch all deb. Which can lead to
+uninstallability of other packages. Not very nice.
+And another one of us is also working on our contents generation.
+Something started long ago, but not yet finished. Recently we did take
+big steps in this, getting our SQL queries for it down from about 10
+minutes to something around 10 seconds. That is for one suite, one
+architecture, the full contents file contents. While this is SQL only
+and we still need to write it out to disk, it is a nice improvement.
+And to my right we have someone working on getting the Packges/Sources
+files data stored within projectb too, so we can also use our own
+python scripts to write those files. This will finally enable us to
+completly ditch apt-ftparchive.
+And finally, to my left site sits someone who is working on a dak
+policy wrapper, with which we can allow other groups then ftpmaster to
+control suites. The initial usage will be to restore the
+(oldstable-)proposed-updates handling with their own queues in front,
+as that is no longer part of our NEW handling script. In the future it
+will also allow easy handling of other situations, like suites for
+volatile or Basically everything where the people
+running the archive software are different to those people actually
+setting the policy for the suite.
+{% include image.html file="2008/ftpmeet_board.jpg" alt="Todo Board"
+class="center" caption="none" prevwidth=382 %}
+Another nice detail is the ability to throw away uploaded binaries and
+only ever take buildd built binaries into the archive. We will **not**
+go to source-only uploads, as that will only lead to lots of untested
+uploads (sorry people, we are all humans, it **<span
+class="caps">WILL</span>** happen), but we can have them uploaded, do
+regular checks (including the lintian ones), then take the files from
+the buildds.
+(Of course there is a way to get things bootstrapped, the system
+behind this is flexible to allow for a bootstrap mode for a new
+(I have multiple pictures, will probably put some more up when I am
+back home).
index a193ddd..2238ed7 100644 (file)
@@ -17,11 +17,13 @@ Yesterday we enabled the --rsyncable option for all the gzip contents we are cre
 We also started implementing an ACL system in DAK which basically will allow the sane implementation of the already mentioned buildd autosigning, decrufting the code handling DMs and later on easily allowing the "throw away binaries" feature, while still allowing for exceptions, like bootstrapping a new architecture. The majority of it is there and already working, just a few edges still have to be smoothened.
-<a href="" onclick="'','popup','width=1500,height=1833,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="" width="495" height="604" alt="debian_archive_old.jpg" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></a>
+ {% include image.html file="2009/debian_archive_old.jpg" alt="Old Debian Archive Handling"
+ class="right" caption="none" prevwidth="495" %}
 Yesterday evening we started the last major work for this meeting, in terms of coding. We will end up with a completly different way of handling the lifecycle of a package in the archive, before it enters the public viewable pool/ directory. To wrap our heads around the problem we had to write down how the archive works currently, which you can see in the first picture. And then we had to go and define how it should look in the future, for which you can look at the second picture. As all of us here love the simple clarity of this drawing we went and declared it the one and official ftpmaster documentation of our archive queues. :)
-<a href="" onclick="'','popup','width=1500,height=2158,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="" width="495" height="712" alt="debian_archive_new.jpg" class="mt-image-left" style="float: left; margin: 0 20px 20px 0;" /></a>
+ {% include image.html file="2009/debian_archive_new.jpg" alt="New archive ways"
+ class="left" caption="none" prevwidth="495" %}
 As you might miss enough Milk/IceTea/Coffee/Drugs to understand what the fuck we smoked when drawing it, lets try a short explanation, starting with the old red version:
@@ -36,7 +38,8 @@ As you might miss enough Milk/IceTea/Coffee/Drugs to understand what the fuck we
 This is how the archive worked for the last years now, and while it works it has a few drawbacks. For example, files do have to be processed multiple times before they end up in their final location, which is just unneccessary. It also opens us to a kind of race condition between the unchecked and accepted queue, leading to automated unaccepts. And it duplicates some code and also checks we have to run, wasting time and resources. Thats not all of it, but a good start. So the idea is to get rid of the extra queue and switch over to install files directly into the pool when processed from the unchecked queue. And that is what the third picture shows in green, the changed handling. As you see we completly lose the complexity around accepted by moving directly into pool. So, as usual, saying it in two sentences doesn't mean the actual implementation is easy, even if it will make future handling easier for us.
-<a href="" onclick="'','popup','width=2000,height=1429,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="" width="495" height="353" alt="meeting_minutes.jpg" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></a>
+ {% include image.html file="2009/meeting_minutes.jpg" alt="Minutes of the meeting"
+ class="right" caption="none" prevwidth="495" %}
 Of course this hasn't been all we worked on today. We are 6 persons here, there is much more done than I can condense into those few blog posts. Especially as I want to do my own share of work (shut up mhy :) ), and not just blog around. So, to still keep you informed I included our official meeting minutes in this blog post. Picture 3 is your friend. :)
 (Ok ok, just joking, but it contains a good overview of our various discussion about the various projects we work on).
index c4070b8..5d1fff8 100644 (file)
@@ -13,20 +13,20 @@ categories:
 As some people know, I had a vacation in February. Only very few knew
 that I was heading "down" to Taiwan. I was leaving Germany at the 8th
 and back here on the 24th of February. Yes, that neatly fit this years
-<a href="">Chinese New
-Year</a>s parties.
+[Chinese New Year]s parties.
 Was at home for four days (and at work for one), after which I went off
-<a href="">
-to this years Cebit</a>. Until the day I arrived in Taiwan it looked
+to [this years Cebit]. Until the day I arrived in Taiwan it looked
 like we do not have a booth there, but then everything changed while I
 was having a nice vacation. I really have to thank 
-<a href="">Alex</a> here. Cebit was actually my
+[Alex] here. Cebit was actually my
 task, but he jumped in and did all the preparatory work that was needed
 right in the time I started my vacation. Without that either my vacation
 would have been much different and less nice or we wouldn't have had a
 I am back home since some days now, without any travel plans for the next
 few weeks/months to come. Though I wish I had a job (and private life)
 that would allow me to just go off again, ie. something I could do
@@ -43,8 +43,7 @@ people (and to link to from here), but they are basically just
 copies. While some are great in itself, many can need a bit of work here
 and there (cut out unimportant, blurry, colors, the usual stuff). And I
 also prepared multiple shots for
-<a href="">HDR</a>
-processing or to make a panorama view from, but thats something that
+[HDR processing] or to make a panorama view from, but thats something that
 takes time and has to wait. Just for the record, I think that
 <a href="">this,</a>
 <a href="">this</a>
@@ -109,17 +108,12 @@ so I couldn't sleep more. Wellwell, got up at the same time as $TC then,
 we got some breakfast, egg/ham sandwich and tea. From
 there I set off and juggled my way through Taipei MRT over to YuanShan
-<form class="mt-enclosure mt-enclosure-image" style="display: inline;">
-  <a href=""
-     onclick="'',
-     'popup','width=400,height=266,scrollbars=no,resizable=no,toolbar=no,
-     directories=no,location=no,menubar=no,status=no,left=0,top=0');
-     return false">
-       <img src=""
-        width="400" height="266" alt="Confucius Temple"
-        class="mt-image-right" style="float: right; margin: 20px 0 20px 20px"/>
-     </a>
+{% comment %}
+wget -O assets/images/fullsize/2010/img-8.jpg
+{% endcomment %}
+{% include image.html file="2010/img-8.jpg" alt="Confucius Temple"
+class="right" caption="none" prevwidth="400" %}
 It is good for a visit of the Confucius Temple and also the
 <a href="">
 Dalongdong Baoan Temple
@@ -137,17 +131,12 @@ setup in the entry hall,</a> even though it looks nice, and let's not start
 about the rest they show there. Definitely not my thing, "Fine Arts",
 nothing worth to waste money on, at least for me.
-<form class="mt-enclosure mt-enclosure-image" style="display: inline;">
-  <a href=""
-     onclick="'',
-     'popup','width=400,height=266,scrollbars=no,resizable=no,toolbar=no,
-     directories=no,location=no,menubar=no,status=no,left=0,top=0');
-     return false">
-       <img src=""
-        width="400" height="266" alt="Having fun"
-        class="mt-image-left" style="float: left; margin: 20px 20px 20px 0;"/>
-     </a>
+{% comment %}
+wget -O assets/images/fullsize/2010/img-90.jpg
+{% endcomment %}
+{% include image.html file="2010/img-90.jpg" alt="Having fun"
+class="left" caption="none" prevwidth="400" %}
 So I left there after just about an hour and fought the MRT again. This
 time it spit me out at the Taipei Zoo station and I went through
 that. Appearently the nice sunny weather let some animals have fun,
@@ -169,17 +158,12 @@ As I already mentioned, the weather that day was pretty nice. Mostly
 sunny, only few clouds and some 25 til 29 degrees. No rain. Now that's a
 nice winter day.
-<form class="mt-enclosure mt-enclosure-image" style="display: inline;">
-  <a href=""
-     onclick="'',
-     'popup','width=400,height=266,scrollbars=no,resizable=no,toolbar=no,
-     directories=no,location=no,menubar=no,status=no,left=0,top=0');
-     return false">
-       <img src=""
-        width="400" height="266" alt="HotPot"
-        class="mt-image-right" style="float: right; margin: 0 20px 20px 0;"/>
-     </a>
+{% comment %}
+wget -O assets/images/fullsize/2010/img-98.jpg
+{% endcomment %}
+{% include image.html file="2010/img-98.jpg" alt="HotPot"
+class="right" caption="none" prevwidth="400" %}
 Dinner was scheduled for 1800h, a Hot Pot session. 5 people in total.
 Appears you order the meat for the hot pots from the waiter and let them
@@ -211,17 +195,12 @@ around 9AM. Additional fun that my body again insisted in being
 elsewhere, not accustomed to the timezone in Taiwan yet, waking me up a
 few times during the night.
-<form class="mt-enclosure mt-enclosure-image" style="display: inline;">
-  <a href=""
-     onclick="'',
-     'popup','width=400,height=266,scrollbars=no,resizable=no,toolbar=no,
-     directories=no,location=no,menubar=no,status=no,left=0,top=0');
-     return false">
-       <img src=""
-        width="400" height="266" alt="Fishermans Wharf"
-        class="mt-image-right" style="float: right; margin: 20px 0 20px 20px"/>
-     </a>
+{% comment %}
+wget -O assets/images/fullsize/2010/img-138.jpg
+{% endcomment %}
+{% include image.html file="2010/img-138.jpg" alt="Fishermans Wharf"
+class="right" caption="none" prevwidth="400" %}
 Got an easypass for the MRT as that is a little better than buying a chip
 for every single trip and battled with MRT again, finally emerging at
 Danshui station. Sat a bit at the beach eating breakfast before finally
@@ -235,17 +214,12 @@ pretty well, with us pointing around on the menu and then the salesman
 showing me various additions, if I would want them. Like showing a milk
 bottle "Want milk in tea?", showing sugar, ...
-<form class="mt-enclosure mt-enclosure-image" style="display: inline;">
-  <a href=""
-     onclick="'',
-     'popup','width=400,height=266,scrollbars=no,resizable=no,toolbar=no,
-     directories=no,location=no,menubar=no,status=no,left=0,top=0');
-     return false">
-       <img src=""
-        width="400" height="266" alt="Spongebob"
-        class="mt-image-left" style="float: left; margin: 20px 20px 20px 0;"/>
-     </a>
+{% comment %}
+wget -O assets/images/fullsize/2010/img-145.jpg
+{% endcomment %}
+{% include image.html file="2010/img-145.jpg" alt="Spongebob"
+class="left" caption="none" prevwidth="400" %}
 At the bridge in that Wharf I was approached by some Asian people,
 asking me to take a picture of them in front of the bridge. Fine, did
 it, did it again in another setting and then, when done, they asked me
@@ -263,17 +237,12 @@ Now, who here loves Spongebob? This is the country for you!
 The picture only shows one small table, you can find much much
 more. Same goes for Hello Kitty and other such stuff.
-<form class="mt-enclosure mt-enclosure-image" style="display: inline;">
-  <a href=""
-     onclick="'',
-     'popup','width=400,height=266,scrollbars=no,resizable=no,toolbar=no,
-     directories=no,location=no,menubar=no,status=no,left=0,top=0');
-     return false">
-       <img src=""
-        width="400" height="266" alt="Food!"
-        class="mt-image-right" style="float: right; margin: 20px 0 20px 20px"/>
-     </a>
+{% comment %}
+wget -O assets/images/fullsize/2010/img-147.jpg
+{% endcomment %}
+{% include image.html file="2010/img-147.jpg" alt="Food!"
+class="right" caption="none" prevwidth="400" %}
 Dinner this day was initially planned to be at some place called
 Maokong, but then plans changed, as $TC and others that we should meet
 there needed to pack for the next day. So $TC and me "just" went to the
@@ -286,17 +255,12 @@ with chopsticks was something new, but it worked out well
 enough. Later I had a noodle soup, that was something more tricky, but
 in the end you just need to find the right trick.
-<form class="mt-enclosure mt-enclosure-image" style="display: inline;">
-  <a href=""
-     onclick="'',
-     'popup','width=400,height=266,scrollbars=no,resizable=no,toolbar=no,
-     directories=no,location=no,menubar=no,status=no,left=0,top=0');
-     return false">
-       <img src=""
-        width="400" height="266" alt="Little crowded"
-        class="mt-image-left" style="float: left; margin: 20px 20px 20px 0;"/>
-     </a>
+{% comment %}
+wget -O assets/images/fullsize/2010/img-150.jpg
+{% endcomment %}
+{% include image.html file="2010/img-150.jpg" alt="Little crowded"
+class="left" caption="none" prevwidth="400" %}
 After food we went through the night market. Well. Parts of it. It's big.
 And its crowded.
 About the most crowded place I've been to. Heck, half of Taiwan was in
@@ -928,3 +892,9 @@ should be awake. Tssk.
 Conclusion of this trip: I will be back in Taiwan for sure. I don't care
 if you take this as a promise or threat, but I will be back! :)
+*[HDR]: High Dynamic Range Imaging
+[Chinese New Year]: "Chinese New Year is an important Chinese festival celebrated at the turn of the traditional lunisolar Chinese calendar. It is also known as the Spring Festival, the literal translation of the modern Chinese name."
+[this years Cebit]:
+[Alex]: "Alexander Reichle-Schmehl"
+[HDR Processing]: "High-dynamic-range imaging (HDRI or HDR) is a technique used in imaging and photography to reproduce a greater dynamic range of luminosity than is possible with standard digital imaging or photographic techniques. The aim is to present the human eye with a similar range of luminance as that which, through the visual system, is familiar in everyday life."
index 258e1e6..78e5ca9 100644 (file)
@@ -11,12 +11,20 @@ categories:
 I announced it some while ago on [debian-project](, we have a FTPMaster meeting this weekend.
-It started out with a little workout session
-<form mt:asset-id="73" class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="" onclick="'','popup','width=1024,height=575,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false">View image</a></form>
-before we started discussing some things from our agenda.
-In the middle of the discussion we took a little sidestep, looking for a victim to promote to ftpmaster. So we selected someone not attending, he can't run away screaming. And for that: Send your condolences over to Torsten Werner. Or maybe congratulations, your call :)
+It started out with a little workout session before we started
+{% include image.html file="2010/ftpmeet_workout.jpg" alt="FTP Team Workout"
+   class="center" caption="none" %}
+discussing some things from our agenda.
-Right now Mark is fixing up our byhand processing and Alex is doing some other Debian work, while I'm merging patches from Luca.
+In the middle of the discussion we took a little sidestep, looking for
+a victim to promote to ftpmaster. So we selected someone not
+attending, he can't run away screaming. And for that: Send your
+condolences over to Torsten Werner. Or maybe congratulations, your
+call :)
-Thats it for now, sometime soon we are going to eat, after which we put some more discussions on our agenda. Still two more days to go :)
+Right now Mark is fixing up our byhand processing and Alex is doing
+some other Debian work, while I'm merging patches from Luca.
+Thats it for now, sometime soon we are going to eat, after which we
+put some more discussions on our agenda. Still two more days to go :)
index 1d6b019..ab87c47 100644 (file)
@@ -10,4 +10,5 @@ categories:
 - personal
-<a href="" onclick="'','popup','width=1024,height=539,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="" width="495" height="260" alt="ring.png" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>
+{% include image.html file="2011/ring.png" alt="One ring to [...] bind them"
+   class="center" caption="none" %}
index c66549a..3509797 100644 (file)
@@ -11,6 +11,8 @@ categories:
 So lets try this:
-<a href="" onclick="'','popup','width=4592,height=3056,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="" width="495" height="329" alt="DSC02384.JPG" class="mt-image-none" style="" /></a>
+ {% include image.html file="2011/DSC02384.JPG" alt="DSC02384.JPG"
+ class="center" caption="none" prevwidth="600" %}
-<a href="" onclick="'','popup','width=3056,height=4592,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="" width="495" height="743" alt="DSC02385.JPG" class="mt-image-none" style="" /></a>
+ {% include image.html file="2011/DSC02385.JPG" alt="DSC02385.JPG"
+ class="center" caption="none" prevwidth="600" %}
index a07a457..2575ebc 100644 (file)
@@ -9,14 +9,15 @@ basename: tmux_-_like_screen_just_nicer
 - tech
-By now I am a long time happy user of [tmux](
-instead of [screen](
+By now I am a long time happy user of {% deb_pkg tmux %}
+instead of {% deb_pkg screen %}.
 I started using it somewhere in 2011 and by now I only have one usage of
 screen left over (direct ttyS0 access for one serial).
 As usual I have a custom config for it, and if you are interested there
-is a link for you:
+is a link for you: [tmux.conf]
+[tmux.conf]:;a=blob;f=.tmux.conf;h=c37d477ce3fc63bf22511d61cbb6b5f3ed8f68a0;hb=HEAD "tmux in usable, with Screen Hotkey C-a instead of C-b"
 But the more interesting part and why I blog is that I also wrote a
 little helper around tmux. Ingeniously called *tm*.  And a colleague
@@ -63,21 +64,21 @@ actual script has a link somewhere below.
              like mine do at 1, then you can set TMWIN to 1
-It is mainly useful for using tmux as a ssh-multiplexer and replacement
-for [clusterssh](/2007/10/clusterssh.html)
+It is mainly useful for using tmux as a ssh-multiplexer and
+replacement for [clusterssh]({% post_url 2007-10-22-clusterssh %})
 though its happy to do any other tmux session too.
 As the help text may already have told you, you can use it to list
 existing tmux sessions (oh, wow!). Honestly, that one is there because
-`tm ls` is shorter than `tmux ls`...
+`tm ls`{:.mono} is shorter than `tmux ls`{:.mono}...
-More interestingly, `tm s HOSTNAME` opens a tmux session with the first
+More interestingly, `tm s HOSTNAME`{:.mono} opens a tmux session with the first
 window being a ssh shell to HOSTNAME. Should you later type `tm s
-HOSTNAME` again, it will attach to the existing session.
+HOSTNAME`{:.mono} again, it will attach to the existing session.
 But the real kicker for me (and colleagues) actually is the *ms*
 subcommand of it. ms being short for multi-session, it is my way of
-no-longer using clusterssh. Basically you type `tm ms HOST1 user@HOST2`
+no-longer using clusterssh. Basically you type `tm ms HOST1 user@HOST2`{:.mono}
 and it opens a session with one tmux window consisting of two
 panes. Showing you host1 and host2 at the same time. And the input
 to both is synchronized, that is - all your input is send to both of
@@ -94,8 +95,10 @@ wants to run one command on many systems.
 As I'm already said, I'm lazy. And so there is a way to easily define
 multisessions that one uses regulary, by creating files inside the
-directory behind $TMDIR, usually `${HOME}/.tmux.d`. They are simple
+directory behind $TMDIR, usually `${HOME}/.tmux.d`{:.mono}. They are simple
 text files and let you easily define sessions you can then (re)open
-with a simple `tm whateveritsname`.
+with a simple `tm whateveritsname`{:.mono}.
+And if you want the whole script by now: [tm]
-And if you want the whole script by now: <a href="">tm</a>
index 235b843..0da8a1a 100644 (file)
@@ -82,7 +82,7 @@ Comments? Bugfixes? Enhancements?
 *Update*: Got asked for an example how to use my prompt to "fake" another.
 So here is what you need to do to use my prompt setup to imitate the prompt clint, as delivered with zsh:
-{% highlight zsh %}
+{% highlight shell %}
 autoload promptinit && promptinit
 zstyle ':prompt:ganneff' vcs_info true
 # Alternatively you can set whatever you like it to be.
index 96dd422..36111c9 100644 (file)
@@ -1 +1,21 @@
 Redirect /page/index.html /index.html
+Redirect /assets/index.html /index.html
+Redirect /assets/css/index.html /index.html
+Redirect /assets/fonts/index.html /index.html
+Redirect /assets/images/index.html /index.html
+Redirect /assets/images/2004/index.html /index.html
+Redirect /assets/images/2005/index.html /index.html
+Redirect /assets/images/2006/index.html /index.html
+Redirect /assets/images/2007/index.html /index.html
+Redirect /assets/images/2008/index.html /index.html
+Redirect /assets/images/2009/index.html /index.html
+Redirect /assets/images/2010/index.html /index.html
+Redirect /assets/images/2011/index.html /index.html
+Redirect /assets/images/2012/index.html /index.html
+Redirect /assets/images/2013/index.html /index.html
+Redirect /assets/images/2014/index.html /index.html
+Redirect /assets/images/2015/index.html /index.html
+Redirect /assets/images/2016/index.html /index.html
+Redirect /assets/images/2017/index.html /index.html
+Redirect /assets/js/index.html /index.html
+Redirect /assets/randomfiles/index.html /index.html
index 2db9a30..49afbf2 100644 (file)
@@ -5,3 +5,10 @@
 @mixin right() {
         float: right;
+@mixin font-mono() {
+    font:{
+        family: $font-family-mono;
+        size: 0.98 * $base-font-rel;
+    }
index 5a88070..36eddf0 100644 (file)
@@ -20,8 +20,7 @@
 $font-family: 'Droid Sans', 'Lucida Bright', Georgia, 'Hoefler Text', 'Baskerville Old Face', Garamond, 'Times New Roman', serif;
 $font-family-mono: 'Droid Sans Mono', 'Lucida Console', 'Lucida Sans Typewriter', monaco, 'Bitstream Vera Sans Mono', monospace;
 $font-family-header: Yellowtail, 'Brush Script MT', cursive;
-$base-font-pct: 1.45*100%;
-$base-font-rel: 1rem;
+$base-font-rel: 0.8rem;
 $breakpoints: (
     'phone': 22.5001em,
@@ -101,8 +100,7 @@ body {
     background-color: $base03;
     color: $base0;
     font: {
-        size: $base-font-pct;
-        size: $base-font-rel;
+        size: calc(#{$base-font-rel} + 0.15vw + 0.15vh);
         family: $font-family;
         variant-ligatures: common-ligatures;
         kerning: normal;
@@ -111,21 +109,23 @@ body {
     text-rendering: optimizeLegibility;
     line-height: 1.7;
+    hyphens: auto;
+    ms-hyphens: auto;
+    webkit-hyphens: auto;
 h1, h2, h3 {
     color: $yellow;
-@each $hlev, $fspx, $fsrel in (h1, 17, 2.7),
-(h2, 15, 1.8),
-(h3, 15, 1.4) {
+@each $hlev, $fsrel in (h1, 2.7),
+(h2, 1.8),
+(h3, 1.4) {
     #{$hlev} {
         font: {
-            size: #{$fspx}px;
             size: #{$fsrel}em;
-        margin: 0 0 10px 0;
+        margin: 0 0 0.625em 0;
@@ -170,6 +170,18 @@ p, pre {
     margin-bottom: 1vh;
+.mono {
+    @include font-mono;
+pre {
+    @include font-mono;
+    border: 0.0313em solid $base01;
+    padding: 1vmax;
+    overflow: auto;
+    margin-right: 0.5em;
 ol, ul {
     padding: 0 0 1.125em 1.875em;
     padding: 0 0 1.5vw 1.7vmax;
@@ -234,7 +246,7 @@ strong, b {
 small {
     font: {
-        size: (0.85 * $base-font-rel)em;
+        size: calc( #{(0.85 * $base-font-rel)}em + 0.15vw + 0.15vh);
@@ -253,8 +265,7 @@ blockquote {
     padding: 0 1.25em;
     border-left: 0.125em solid $black;
     font: {
-        size: 1.2 * $base-font-rel;
-        size: 1.2vw;
+        size: calc(#{(1.2 * $base-font-rel)} + 0.15vw + 0.15vh);
         style: italic;
     line-height: 1.5 * $base-font-rel;
@@ -287,16 +298,14 @@ acronym, abbr {
     h1 {
         color: $orange;
         font: {
-            size: 32px;
-            size: 4.2vw;
+            size: calc(#{$base-font-rel * 3.5} + 0.15vw + 0.15vh);
         margin-bottom: 4px;
     h2 {
         color: $green;
         font: {
-            size: 16px;
-            size: 2vw;
+            size: calc(#{$base-font-rel * 1.952} + 0.15vw + 0.15vh);
@@ -315,7 +324,7 @@ acronym, abbr {
 #footer {
     width: 75vw;
     margin: 3.125em auto 1.25em  auto;
-    padding-top: 10px;
+    padding-top: 0.625e;
     border: {
         top: 0.062em solid $base02;
         color: $base02;
@@ -333,10 +342,12 @@ acronym, abbr {
 #content {
-    width: 75%;
+    //width: 75%;
+    min-width: 45ch;
+    max-width: 95ch;
     margin: {
-        top: 11vw;
-        left: 11%
+        top: calc(#{$base-font-rel * 11} + 1vw + 1vh);
+        left: 11%;
     @include media('all', '<tablet' ) {
         margin: {
@@ -406,8 +417,7 @@ article {
     h1 {
         color: $cyan;
         font: {
-            size: 1.24 * $base-font-pct;
-            size: 1.8 * $base-font-rel;
+            size: calc(#{$base-font-rel * 1.6} + 0.15vw + 0.15vh);
         margin: 0 0 10px 0;
@@ -421,16 +431,15 @@ article {
-    img {
-        display: block;
-        text-align: center;
-        margin: 0 auto 1em auto;
-    }
+    // img {
+    //     display: block;
+    //     text-align: center;
+    //     margin: 0 auto 1em auto;
+    // }
     .meta {
         font: {
-            size: 0.9 * $base-font-pct;
-            size: 0.9 * $base-font-rel;
+            size: calc(#{$base-font-rel * 0.7} + 0.15vw + 0.15vh);
             style: italic;
@@ -439,22 +448,41 @@ article {
 img {
     &.left {
         @include left;
-        margin: 0 1em 1em 0;
+        margin: 1em 1em 1em 1em;
     &.right {
         @include right;
-        margin: 0 0 1em 1 * $base-font-rel;
+        margin: 1em 1em 1em 1em;
     &.center {
         display: block;
         text-align: center;
-        margin: 0 auto 1em auto;
+        margin: 1em auto 1em auto;
     max-width: 100vw;
+figure {
+    &.left {
+        @include left;
+        display: inline-block;
+    }
+    &.right {
+        @include right;
+        display: inline-block;
+    }
+    &.center {
+        margin-left: auto;
+        margin-right: auto;
+    }
+figcaption {
+    text-align: center;
 /*** Pagination ***/
 .postnavigation {
index 6d27b13..3bd4c8f 100644 (file)
@@ -7,7 +7,6 @@
         family: $font-family-mono;
-        size: 0.75 * $base-font-pct;
         size: 0.98 * $base-font-rel;
index a06d4fc..be63435 100644 (file)
@@ -24,7 +24,7 @@ title: Archives
     {% endif %}
       <td class="postdate"><time datetime="{{ | date_to_xmlschema}}">{{ | date: "%d. %B" }}</time>
-      <td class="postlink"><a href="{{ post.url }}">{{ post.title | markdownify }}</a></td>
+      <td class="postlink"><a href="{{ post.url }}" title="{{ post.title | markdownify | remove: '<p>' | remove: '</p>'}}">{{ post.title | markdownify | remove: '<p>' | remove: '</p>'}}</a></td>
 {% endfor %}
diff --git a/assets/images/fullsize/2007/cssh.png b/assets/images/fullsize/2007/cssh.png
new file mode 100644 (file)
index 0000000..0daed19
Binary files /dev/null and b/assets/images/fullsize/2007/cssh.png differ
diff --git a/assets/images/fullsize/2007/munin-dsl-attenuation.png b/assets/images/fullsize/2007/munin-dsl-attenuation.png
new file mode 100644 (file)
index 0000000..d03fd02
Binary files /dev/null and b/assets/images/fullsize/2007/munin-dsl-attenuation.png differ
diff --git a/assets/images/fullsize/2007/munin-dsl-rate.png b/assets/images/fullsize/2007/munin-dsl-rate.png
new file mode 100644 (file)
index 0000000..a410512
Binary files /dev/null and b/assets/images/fullsize/2007/munin-dsl-rate.png differ
diff --git a/assets/images/fullsize/2007/munin-dsl-snr.png b/assets/images/fullsize/2007/munin-dsl-snr.png
new file mode 100644 (file)
index 0000000..eafce2c
Binary files /dev/null and b/assets/images/fullsize/2007/munin-dsl-snr.png differ
diff --git a/assets/images/fullsize/2008/dora.jpg b/assets/images/fullsize/2008/dora.jpg
new file mode 100644 (file)
index 0000000..42cb55c
Binary files /dev/null and b/assets/images/fullsize/2008/dora.jpg differ
diff --git a/assets/images/fullsize/2008/ftpmeet_board.jpg b/assets/images/fullsize/2008/ftpmeet_board.jpg
new file mode 100644 (file)
index 0000000..0b03041
Binary files /dev/null and b/assets/images/fullsize/2008/ftpmeet_board.jpg differ
diff --git a/assets/images/fullsize/2008/hacklab.jpg b/assets/images/fullsize/2008/hacklab.jpg
new file mode 100644 (file)
index 0000000..6ee5ced
Binary files /dev/null and b/assets/images/fullsize/2008/hacklab.jpg differ
diff --git a/assets/images/fullsize/2008/mhy_ice.jpg b/assets/images/fullsize/2008/mhy_ice.jpg
new file mode 100644 (file)
index 0000000..fdf18ce
Binary files /dev/null and b/assets/images/fullsize/2008/mhy_ice.jpg differ
diff --git a/assets/images/fullsize/2008/monday_evening_todo.jpg b/assets/images/fullsize/2008/monday_evening_todo.jpg
new file mode 100644 (file)
index 0000000..e798f20
Binary files /dev/null and b/assets/images/fullsize/2008/monday_evening_todo.jpg differ
diff --git a/assets/images/fullsize/2008/shoe.jpg b/assets/images/fullsize/2008/shoe.jpg
new file mode 100644 (file)
index 0000000..0fae8b4
Binary files /dev/null and b/assets/images/fullsize/2008/shoe.jpg differ
diff --git a/assets/images/fullsize/2009/cebit0903_01.jpg b/assets/images/fullsize/2009/cebit0903_01.jpg
new file mode 100644 (file)
index 0000000..89c52be
Binary files /dev/null and b/assets/images/fullsize/2009/cebit0903_01.jpg differ
diff --git a/assets/images/fullsize/2009/cebit0903_02.jpg b/assets/images/fullsize/2009/cebit0903_02.jpg
new file mode 100644 (file)
index 0000000..7877707
Binary files /dev/null and b/assets/images/fullsize/2009/cebit0903_02.jpg differ
diff --git a/assets/images/fullsize/2009/debconf9-going-to.png b/assets/images/fullsize/2009/debconf9-going-to.png
new file mode 100644 (file)
index 0000000..7ace9e2
Binary files /dev/null and b/assets/images/fullsize/2009/debconf9-going-to.png differ
diff --git a/assets/images/fullsize/2009/debian_archive_new.jpg b/assets/images/fullsize/2009/debian_archive_new.jpg
new file mode 100644 (file)
index 0000000..df3d43e
Binary files /dev/null and b/assets/images/fullsize/2009/debian_archive_new.jpg differ
diff --git a/assets/images/fullsize/2009/debian_archive_old.jpg b/assets/images/fullsize/2009/debian_archive_old.jpg
new file mode 100644 (file)
index 0000000..163904c
Binary files /dev/null and b/assets/images/fullsize/2009/debian_archive_old.jpg differ
diff --git a/assets/images/fullsize/2009/ftpmeet_01.jpg b/assets/images/fullsize/2009/ftpmeet_01.jpg
new file mode 100644 (file)
index 0000000..e96021f
Binary files /dev/null and b/assets/images/fullsize/2009/ftpmeet_01.jpg differ
diff --git a/assets/images/fullsize/2009/meeting_minutes.jpg b/assets/images/fullsize/2009/meeting_minutes.jpg
new file mode 100644 (file)
index 0000000..9ce81d8
Binary files /dev/null and b/assets/images/fullsize/2009/meeting_minutes.jpg differ
diff --git a/assets/images/fullsize/2009/rip.png b/assets/images/fullsize/2009/rip.png
new file mode 100644 (file)
index 0000000..b5559a6
Binary files /dev/null and b/assets/images/fullsize/2009/rip.png differ
diff --git a/assets/images/fullsize/2010/ftpmeet_workout.jpg b/assets/images/fullsize/2010/ftpmeet_workout.jpg
new file mode 100644 (file)
index 0000000..4f070a9
Binary files /dev/null and b/assets/images/fullsize/2010/ftpmeet_workout.jpg differ
diff --git a/assets/images/fullsize/2010/img-138.jpg b/assets/images/fullsize/2010/img-138.jpg
new file mode 100644 (file)
index 0000000..bfffbcd
Binary files /dev/null and b/assets/images/fullsize/2010/img-138.jpg differ
diff --git a/assets/images/fullsize/2010/img-145.jpg b/assets/images/fullsize/2010/img-145.jpg
new file mode 100644 (file)
index 0000000..3d3a0ad
Binary files /dev/null and b/assets/images/fullsize/2010/img-145.jpg differ
diff --git a/assets/images/fullsize/2010/img-147.jpg b/assets/images/fullsize/2010/img-147.jpg
new file mode 100644 (file)
index 0000000..4a17308
Binary files /dev/null and b/assets/images/fullsize/2010/img-147.jpg differ
diff --git a/assets/images/fullsize/2010/img-150.jpg b/assets/images/fullsize/2010/img-150.jpg
new file mode 100644 (file)
index 0000000..4d12b23
Binary files /dev/null and b/assets/images/fullsize/2010/img-150.jpg differ
diff --git a/assets/images/fullsize/2010/img-8.jpg b/assets/images/fullsize/2010/img-8.jpg
new file mode 100644 (file)
index 0000000..f63d949
Binary files /dev/null and b/assets/images/fullsize/2010/img-8.jpg differ
diff --git a/assets/images/fullsize/2010/img-90.jpg b/assets/images/fullsize/2010/img-90.jpg
new file mode 100644 (file)
index 0000000..e7001e3
Binary files /dev/null and b/assets/images/fullsize/2010/img-90.jpg differ
diff --git a/assets/images/fullsize/2010/img-98.jpg b/assets/images/fullsize/2010/img-98.jpg
new file mode 100644 (file)
index 0000000..656e330
Binary files /dev/null and b/assets/images/fullsize/2010/img-98.jpg differ
diff --git a/assets/images/fullsize/2011/DSC02384.JPG b/assets/images/fullsize/2011/DSC02384.JPG
new file mode 100644 (file)
index 0000000..d74ec7e
Binary files /dev/null and b/assets/images/fullsize/2011/DSC02384.JPG differ
diff --git a/assets/images/fullsize/2011/DSC02385.JPG b/assets/images/fullsize/2011/DSC02385.JPG
new file mode 100644 (file)
index 0000000..5a660d3
Binary files /dev/null and b/assets/images/fullsize/2011/DSC02385.JPG differ
diff --git a/assets/images/fullsize/2011/ring.png b/assets/images/fullsize/2011/ring.png
new file mode 100644 (file)
index 0000000..d72fd38
Binary files /dev/null and b/assets/images/fullsize/2011/ring.png differ
diff --git a/assets/randomfiles/ b/assets/randomfiles/
new file mode 100755 (executable)
index 0000000..a06e18e
--- /dev/null
@@ -0,0 +1,123 @@
+#!/usr/bin/perl -w
+# Pluginn to monitor a "Telekom SpeedModem 200" AKA "Tecom Tiny Bridge DSL Modem"
+# Name it dsl_rate and get information about upload/download speed
+# Name it dsl_snr and get SNR margins displayed
+# Name it dsl_attenuation and get those values
+# (C) 2007 Joerg Jaspert, <>, GPL v2 (not later)
+# see /usr/share/common-licenses/GPL-2
+use strict;
+my $ret = undef;
+if (! eval "require LWP::Simple;")
+        $ret = "LWP::Simple not found¸n";
+if (! eval "require HTML::TableExtract;")
+        $ret .= "HTML::TableExtract not found";
+my $url = "http://admin:admin\@"; #  This thing only has this one page. Login/pass is always admin
+if (defined $ARGV[0] and $ARGV[0] eq "autoconf" )
+        if ($ret)
+        {
+                 print "no ($ret)\n";
+                 exit 1;
+        }
+               unless (defined (LWP::Simple::get($url))) {
+                 print "no (could not open router information page)";
+                 exit 1;
+               } else {
+                 print "yes\n";
+                 exit 0;
+               }
+$0 =~ /dsl_(.+)*$/; 
+my $name = $1;
+exit 2 unless defined $name;
+if ( defined $ARGV[0] and $ARGV[0] eq "config" )
+  if ($name eq "rate") {
+       print "graph_title DSL Link Speed\n";
+       print "graph_args --base 1000 --lower-limit 0\n";
+       print "graph_vlabel Rate (Kbps)\n";
+       print "graph_category DSL\n";
+       print "down$name.label Downstream\n";
+       print "down$name.type GAUGE\n";
+       print "down$name.draw AREA\n";
+       print "down$name.max 100000\n";
+       print "down$name.min 0\n";
+       print "up$name.label Upstream\n";
+       print "up$name.type GAUGE\n";
+       print "up$name.draw LINE2\n";
+       print "up$name.max 100000\n";
+       print "up$name.min 0\n";
+       exit 0;
+  } elsif ($name eq "snr") {
+       print "graph_title DSL Link SNR Margin\n";
+       print "graph_args --base 1000 --lower-limit 0\n";
+       print "graph_vlabel SNR Margin (dB)\n";
+       print "graph_category DSL\n";
+       print "down$name.label Downstream\n";
+       print "down$name.type GAUGE\n";
+       print "down$name.draw AREA\n";
+       print "down$name.max 100\n";
+       print "down$name.min 0\n";
+       print "up$name.label Upstream\n";
+       print "up$name.draw LINE2\n";
+       print "up$name.type GAUGE\n";
+       print "up$name.max 100\n";
+       print "up$name.min 0\n";
+       exit 0;
+  } elsif ($name eq "attenuation") {
+       print "graph_title DSL Link Attenuation\n";
+       print "graph_args --base 1000 --lower-limit 0\n";
+       print "graph_vlabel Attenuation (dB)\n";
+       print "graph_category DSL\n";
+       print "down$name.type GAUGE\n";
+       print "down$name.draw AREA\n";
+       print "down$name.label Downstream\n";
+       print "down$name.max 100\n";
+       print "down$name.min 0\n";
+       print "up$name.label Upstream\n";
+       print "up$name.type GAUGE\n";
+       print "up$name.draw LINE2\n";
+       print "up$name.max 100\n";
+       print "up$name.min 0\n";
+       exit 0;
+  } else {
+       exit 2;
+  }
+my $content = LWP::Simple::get($url);
+my $down=0;
+my $up=0;
+my $te = new HTML::TableExtract( depth => 0, count => 1 );
+foreach my $ts ($te->tables) {
+  foreach my $row ($ts->rows) {
+       if (@$row[0] =~ /$name/i) {
+         (undef, $down, $up) = @$row;
+         last;
+       }
+  }
+$up =~ /([0-9.]+)/;
+$up = $1;
+$down =~ /([0-9.]+)/;
+$down = $1;
+print "down$name.value $down\n";
+print "up$name.value $up\n";
diff --git a/assets/randomfiles/printeroff b/assets/randomfiles/printeroff
new file mode 100644 (file)
index 0000000..9b585c0
--- /dev/null
@@ -0,0 +1,15 @@
+set -u
+stamptime=$(/usr/bin/stat -c %Z "/var/run/cups/sispm/jobdone")
+unixtime=$(date +%s)
+difference=$(( $unixtime - $stamptime ))
+if [ ${difference} -ge 600 ]; then
+    # Last printjob older than 10 minutes, lets assume we did all our work.
+    # Turning off printer.
+    sispmctl -f 1
+    rm /var/run/cups/sispm/jobdone
+exit 0
diff --git a/assets/randomfiles/sispm b/assets/randomfiles/sispm
new file mode 100644 (file)
index 0000000..149ff2b
--- /dev/null
@@ -0,0 +1,89 @@
+# /usr/lib/cups/backend/sispm
+# Copyright (C) 2009 Joerg Jaspert <>
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; version 2.
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# General Public License for more details.
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# This is loosely based on a script from
+# (c) September 2007  Kurt Pfeifle <>
+#                                  <>
+#     Network printing consultant Linux/Unix/Windows/Samba/CUPS
+# and
+# (c) Jan 2008 Dominic Morris <>
+#     Uses sispm to control printers
+# which was GNU GPLv2 or v3.
+# We need a DEVICE_URI that looks like "sispm:port normaldeviceurihere", for example
+# "sispm:1 usb://Kyocera%20Mita/FS-1800"
+# Lets get the needed bits out of it.
+base=`echo ${DEVICE_URI} |  sed "s/sispm://g"`
+port=`echo $base | awk '{print $1}'`
+realuri=`echo $base | awk '{print $2}'`
+realbackend=`echo $realuri | awk -F ':' '{print $1}'`
+# Lets see how we have been called. There are only three ways to call us which are of interest
+# to us, which is the one without parameters and that with 5 and 6. All the rest we don't care.
+case ${#} in
+    0)
+        # No parameter, cups just wants to know what we can do.
+        echo "sispm sispm \"SisPM backend\" \"Backend to control printer power using a sispm\""
+        exit 0
+        ;;
+    5|6)
+       # We have something to print. Either file or stdin, but we don't care, the realbackend cares.
+       # We just turn on the printer, give it a little time to boot itself, then go on.
+        # Renew our stampfile. In case we are printing the second time (ie sispm is already one), we
+        # want to make sure our cronjob to turn it off does not do so right in the middle of our printing.
+       touch /var/run/cups/sispm/jobdone
+        sudo /usr/bin/sispmctl -o $port
+       sleep 15
+       export DEVICE_URI=$realuri
+       /usr/lib/cups/backend/${realbackend} "$@"
+       ;;
+    *)
+       # Anything else we do nothing with.
+        echo " "
+        echo " Usage: sispm job-id user title copies options [file]"
+        echo " "
+        echo " (Install as CUPS backend in /usr/lib/cups/backend/sispm)"
+        echo " (Use as 'device URI' like \"sispm:/port/normaluri\" for printer installation.)"
+        exit 1
+echo  1>&2
+ # we reach this line only if we actually "printed something"
+echo "NOTICE: processed Job ${jobid} to file ${DEVICE_URI#2file:}" 1>&2
+echo "NOTICE: End of \"${0}\" run...."                             1>&2
+echo "NOTICE: ---------------------------------------------------" 1>&2
+echo  "" 1>&2
+# Renew our stampfile
+touch /var/run/cups/sispm/jobdone
+exit 0
index 4355ea1..af87a61 100644 (file)
@@ -17,7 +17,7 @@ layout: default
    {% else %}
    <tr class="even">
    {% endif %}
-     <td><a href="/category/{{ tag }}">{{ tag | capitalize }}</a></td>
+     <td><a href="/category/{{ tag }}.html">{{ tag | capitalize }}</a></td>
      <td class="categoryposts">{{ site.tags[tag].size }}</td>
    {% endfor %}
@@ -29,7 +29,7 @@ layout: default
    {% else %}
    <tr class="even">
    {% endif %}
-     <td><a href="/category/{{ tag[0] }}">{{ tag[0] | capitalize }}</a></td>
+     <td><a href="/category/{{ tag[0] }}.html">{{ tag[0] | capitalize }}</a></td>
      <td class="categoryposts">{{ tag[1].size }}</td>
    {% endfor %}
index 300a549..241ea25 100644 (file)
@@ -8,11 +8,11 @@ title: Ganneff's Little Blog
 <article class="post">
   {% if post.external-url %}
-    <a href="{{ post.external-url }}">{{ post.title | markdownify | remove: '<p>' | remove: '</p>'}}</a>
-    <a class="anchor" href="{{ post.url }}"><i class="icon-anchor"></i></a>
+    <a href="{{ post.external-url }}" title="External post {{ post.title | markdownify | remove: '<p>' | remove: '</p>'}}">{{ post.title | markdownify | remove: '<p>' | remove: '</p>'}}</a>
+    <a class="anchor" href="{{ post.url }}" title="None"><i class="icon-anchor"></i></a>
   {% else %}
-  <h1><a href="{{ post.url }}">{{ post.title  | markdownify | remove: '<p>' | remove: '</p>'}}</a></h1>
+  <h1><a href="{{ post.url }}" title="Post {{ post.title | markdownify | remove: '<p>' | remove: '</p>'}}">{{ post.title  | markdownify | remove: '<p>' | remove: '</p>'}}</a></h1>
   {% endif %}
   <div class="post-content">{{ post.content }}</div>
@@ -27,9 +27,9 @@ title: Ganneff's Little Blog
   {% if paginator.previous_page %}
   {% if == 2 %}
-  <a class="prev left" href="/">&larr; Newer</a>
+  <a class="prev left" href="/" title="Newer Posts">&larr; Newer</a>
   {% else %}
-  <a class="prev left" href="{{paginator.previous_page_path}}">&larr; Newer</a>
+  <a class="prev left" href="{{paginator.previous_page_path}}" title="Newer Posts">&larr; Newer</a>
   {% endif %}
   {% else %}
   <span class="nope left">&larr; Newer</span>
@@ -38,7 +38,7 @@ title: Ganneff's Little Blog
   <span class="pages">Page {{ }} of {{ paginator.total_pages }}</span>
   {% if paginator.next_page %}
-  <a class="next right" href="{{paginator.next_page_path}}">Older &rarr;</a>
+  <a class="next right" href="{{paginator.next_page_path}}" title="Older Posts">Older &rarr;</a>
   {% else %}
   <span class="nope right">Older &rarr;</span>
   {% endif %}