When brewing beer, we always make a yeast batch, this time we wanted to see how it looked under a microscope.


This year we spend our vacation in Peru and Bolivia with Arja. (20160606-20160704)
We did the Death road in Bolvia, wellll Arja and me. Coline fell ill the day before.
I tried to get a sense of what it was using a action cam mounted on my helmet and speeding it up in afterprocessing.
Shamefully i have to admit, that most of the times my camera was recording my frontwheel ..
To post: script/program to create this effect
See https://en.wikipedia.org/wiki/Yungas_Road for more information.
Starting at 4700 meters and on the good parts going down @70km/h. Then the dangerous parts started. Feeling like ‘offroad’ narrow corners, where you can expect to see a minivan coming around the corner anytime. Steep drops without barriers. Water and land slides.
(Whole story in dutch)
Created a graph for my Nikon lenses. It shows me what lens i can use at what Aperture / Range.

( https://media.henriaanstoot.nl/websites/lenses/ )
It uses canvas to draw lines and text, but thats only interesting for static stuff. ( https://www.w3schools.com/graphics/canvas_drawing.asp )
My example uses a php script to load information from a csv file. And loops though those entries and draw lens info.
Piece of canvas script to draw 17-70mm lens info.
ctx.fillStyle = 'rgba(0, 200, 100, 0.9)';
ctx.lineWidth=2;
ctx.beginPath();
ctx.moveTo(189.98560128675,163.25813588993);
ctx.lineTo(359.81942904592,202.49237972319);
ctx.lineTo(359.81942904592,250);
ctx.lineTo(189.98560128675,250);
ctx.strokeStyle="rgba(0,0,0,0.9)";
ctx.closePath();
ctx.fill();
ctx.stroke();
ctx.fillStyle = 'rgba(0,0,0,0.9';
ctx.save();
ctx.translate( 189.98560128675,153.25813588993);
ctx.rotate(-Math.PI / 4);
ctx.fillText("17-70mm", 0,0);
ctx.restore();
CSV lenses info
80;200;2.8;2.8;FX;80-200mm f/2.8
10;24;3.5;4.5;DX;10-24mm wide
28;100;3.5;5.6;;28-100mm leen
17;70;2.8;4;DX;17-70mm
35;35;1.8;1.8;DX;35mm f/1.8
60;60;2.8;2.8;FX;60mm f/2.8
28;300;3.5;5.6;FX;28-300mm
PHP Code to generate
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Lens</title>
<style type='text/css'>
body{ background-color: ivory; }
#canvas{border:1px solid white;}
</style>
<script type='text/javascript'>//<![CDATA[
window.onload=function(){
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
<?PHP
$log=yes;
print "ctx.strokeStyle = 'rgba(200, 0, 0, 0.1)';";
print "ctx.fillStyle = 'rgba(0, 0, 0, 0.9)';";
$apes=array(1.4,2,2.8,4,5.6);
$count=0;
foreach ($apes as &$value) {
$height=log($value)*110;
$count=$count+1;
$height=$height+50;
print "ctx.font = '20px Arial';";
print "ctx.fillText(\"$value\", 20, $height);";
print "ctx.lineWidth=2;";
print "ctx.moveTo(50, $height);";
print "ctx.lineTo(900, $height);";
}
print "ctx.stroke();";
$count=0;
$apes=array(8,16,32,64,128);
foreach ($apes as &$value) {
$width=log($value)*120;
$count=$count+1;
$width=$width-150;
print "ctx.fillText(\"$value\", $width, 270);";
}
print "ctx.font = '15px Arial';";
?>
ctx.beginPath();
ctx.moveTo(50,250);
ctx.lineTo(900,250);
ctx.moveTo(50,50);
ctx.lineTo(50,250);
ctx.lineWidth=1;
ctx.strokeStyle="rgba(0, 0, 0, 0.9)";
ctx.stroke();
<?PHP
$configfile="lenses.csv";
$config=get2DArrayFromCsv($configfile,";");
foreach ($config as $value) {
$fp1=$value[0];
$fp2=$value[1];
$ap1=$value[2];
$ap2=$value[3];
$x1=(log($fp1)*120)-150;
$x2=(log($fp2)*120)-150;
$y1=(log($ap1)*110)+50;
$y2=(log($ap2)*110)+50;
if ( $x1 == $x2 ) { $color="200,0,0"; } else { $color="0,0,0"; }
if ( $x1 == $x2 ) { $x2 = $x2 + 6; }
$green=200;
$xx1=(log($fp1*2)*120)-150;
$xxx1=(log($fp1*2)*120)-160;
$xx2=(log($fp2*2)*120)-150;
$yy1=$y1-10;
$yyy1=$y1+10;
if ( $xx1 == $xx2 ) { $xx2 = $xx2 + 6; }
if ( $value[4] == "FX" ) { $col="200"; $trans=0.2; } else { $col="0";$trans=0.9; }
?>
ctx.fillStyle = 'rgba(<?PHP print $col; ?>, <?PHP print $green; ?>, 100, <?PHP print $trans; ?>)';
ctx.lineWidth=2;
ctx.beginPath();
ctx.moveTo(<?PHP print "$x1"; ?>,<?PHP print "$y1"; ?>);
ctx.lineTo(<?PHP print "$x2"; ?>,<?PHP print "$y2"; ?>);
ctx.lineTo(<?PHP print "$x2"; ?>,<?PHP print "250"; ?>);
ctx.lineTo(<?PHP print "$x1"; ?>,<?PHP print "250"; ?>);
ctx.strokeStyle="rgba(<?PHP print "$color"; ?>,<?PHP print $trans; ?>)";
ctx.closePath();
ctx.fill();
ctx.stroke();
ctx.fillStyle = 'rgba(<?PHP print "$color"; ?>,<?PHP print $trans; ?>';
ctx.save();
ctx.translate( <?PHP print "$x1"; ?>,<?PHP print "$yy1"; ?>);
ctx.rotate(-Math.PI / 4);
ctx.fillText("<?PHP print "$value[5]"; ?>", 0,0);
ctx.restore();
<?PHP
if ( $value[4] == "FX" ) {
?>
ctx.fillStyle = 'rgba(0, <?PHP print "200"; ?>, 0, 0.9)';
ctx.beginPath();
ctx.moveTo(<?PHP print "$xx1"; ?>,<?PHP print "$y1"; ?>);
ctx.lineTo(<?PHP print "$xx2"; ?>,<?PHP print "$y2"; ?>);
ctx.lineTo(<?PHP print "$xx2"; ?>,<?PHP print "250"; ?>);
ctx.lineTo(<?PHP print "$xx1"; ?>,<?PHP print "250"; ?>);
ctx.strokeStyle="rgba(<?PHP print "$color"; ?>,0.9";
ctx.closePath();
ctx.fill();
ctx.stroke();
ctx.fillStyle = 'rgba(0, 0, 0, 0.9)';
ctx.save();
ctx.translate( <?PHP print "$xx1"; ?>,<?PHP print "$yy1"; ?>);
ctx.rotate(-Math.PI / 4);
ctx.fillText("<?PHP print "$value[5]"; ?> crop", <?PHP print "0"; ?>, <?PHP print "0"; ?>);
ctx.restore();
<?PHP
}
}
?>
ctx.fillStyle = 'rgba(0, 0, 0, 0.5)';
ctx.font = 'bold 10pt Calibri';
}//]]>
</script>
</head>
<body><small>
<canvas id="canvas" width=700 height=300></canvas>
<P>
<?PHP
$configfile="lenses.csv";
function get2DArrayFromCsv($file,$delimiter) {
if (($handle = fopen($file, "r")) !== FALSE) {
$i = 0;
while (($lineArray = fgetcsv($handle, 4000, $delimiter)) !== FALSE) {
for ($j=0; $j<count($lineArray); $j++) {
$data2DArray[$i][$j] = $lineArray[$j];
}
$i++;
}
fclose($handle);
}
return $data2DArray;
}
$config=get2DArrayFromCsv($configfile,";");
foreach ($config as $value) {
print "<B>Lens = $value[5] </B><BR>";
print "Focal min = $value[0] <BR>";
print "Focal max = $value[1] <BR>";
print "Arp min = $value[2] <BR>";
print "Arp max = $value[3] <BR>";
print "Crop (FX/DX) = $value[4] <P>";
}
?>
</body>
</html>
(Migrated from my old website)
No I’m not going to do all vacations!
6 June a traditional Pisco Sour to get things started

7 June Paracas





















8 June Paracas










9 June Huacachina













10 June














11 June – Today we learned the difference between Llama, Alpaca and Vicuna































12 June Condors!



















13 June












14 June Lake Titicaca (Â the highest navigable lake in the world)



15 June





16 June (Death Road, one of the deadliest roads in the world)











17 June











18 June (Salar de Uyuni)






















19 June




















20 June











21 June





22 June – Sacsayhuaman










23 June 75Km Salkantay Trail









24 June


25 June




26 June




27 June – Machu Picchu







28 June






29 June


















30 June





















Coline is publishing a book for her thesis.
So we had to design Covers and graphics for this.
I used Scibus to make a mockup design.
The graphics in the book are made using Inkscape.
The book itself was written using Indesign.
Inkscape is perfect to create vector graphics. These can be resized to any resolution. So always perfect.
https://simple.wikipedia.org/wiki/Vector_graphics
In the past i’ve used a program like sodipodi, there is something like it now integrated in Inkscape.
This is a tool to convert bitmap to vector graphics.
(Using a small jpg, i could convert it to vector graphics and print it in a huge size)
Inkscape work




Some designs





Final design



UPDATE: 2023 It’s still working
I made a webcontroller for viewing images on a big TV.
Using a Acdsee instance with MCE Controller installed and a webserver.
https://tig.github.io/mcec/example_commands.html
Rate the picture 1-5, clear rating, slideshow start, escape, open/close image, zoom-in out and zoom-reset. Previous and next image fullscreen and delete/yes
Some used defined keys (see php file)
if ($cmd=="I"){ $put="chars:+"; };
if ($cmd=="O"){ $put="chars:-"; };
if ($cmd=="R"){ $put="chars:*"; };
if ($cmd=="Y"){ $put="chars:y"; };
if ($cmd=="F"){ $put="chars:f"; };
if ($cmd=="D"){ $put="delete"; };
if ($cmd=="N"){ $put="right"; };
if ($cmd=="P"){ $put="left"; };
if ($cmd=="ENTER"){ $put="enter"; };
if ($cmd=="ESC"){ $put="escape"; };
PHP Script for the buttons and creating the TCP packets for MCE.
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.css" />
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script src="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.js"></script>
<?php
$ip = "remoteserver";
$port = "5150";
if (empty($put)) $put = "";
if (empty($line)) $line = "";
$cmd=$_POST['cmd'];
if ($cmd=="I"){ $put="chars:+"; };
if ($cmd=="O"){ $put="chars:-"; };
if ($cmd=="R"){ $put="chars:*"; };
if ($cmd=="Y"){ $put="chars:y"; };
if ($cmd=="F"){ $put="chars:f"; };
if ($cmd=="D"){ $put="delete"; };
if ($cmd=="N"){ $put="right"; };
if ($cmd=="P"){ $put="left"; };
if ($cmd=="ENTER"){ $put="enter"; };
if ($cmd=="ESC"){ $put="escape"; };
$fp = stream_socket_client("tcp://".$ip.":".$port, $errno, $errstr, 30);
$task = send_cmd("$put", $fp);
if ($cmd=="1" || $cmd=="2" || $cmd=="3" || $cmd=="4" || $cmd=="5" || $cmd=="0"){
$fp = stream_socket_client("tcp://".$ip.":".$port, $errno, $errstr, 30);
send_cmd("shiftdown:ctrl", $fp);
fclose($fp);
$fp = stream_socket_client("tcp://".$ip.":".$port, $errno, $errstr, 30);
send_cmd("$cmd", $fp);
fclose($fp);
$fp = stream_socket_client("tcp://".$ip.":".$port, $errno, $errstr, 30);
send_cmd("shiftup:ctrl", $fp);
fclose($fp);
};
if ($cmd=="S") {
$fp = stream_socket_client("tcp://".$ip.":".$port, $errno, $errstr, 30);
send_cmd("shiftdown:alt", $fp);
fclose($fp);
$fp = stream_socket_client("tcp://".$ip.":".$port, $errno, $errstr, 30);
send_cmd("$cmd", $fp);
fclose($fp);
$fp = stream_socket_client("tcp://".$ip.":".$port, $errno, $errstr, 30);
send_cmd("shiftup:alt", $fp);
fclose($fp);
};
if ($cmd=="fnietF"){
$fp = stream_socket_client("tcp://".$ip.":".$port, $errno, $errstr, 30);
send_cmd("shiftdown:shift", $fp);
fclose($fp);
$fp = stream_socket_client("tcp://".$ip.":".$port, $errno, $errstr, 30);
send_cmd("shiftdown:ctrl", $fp);
fclose($fp);
$fp = stream_socket_client("tcp://".$ip.":".$port, $errno, $errstr, 30);
send_cmd("$cmd", $fp);
fclose($fp);
$fp = stream_socket_client("tcp://".$ip.":".$port, $errno, $errstr, 30);
send_cmd("shiftup:ctrl", $fp);
fclose($fp);
$fp = stream_socket_client("tcp://".$ip.":".$port, $errno, $errstr, 30);
send_cmd("shiftup:shift", $fp);
fclose($fp);
};
//}
echo "<html><head><title></title></head>";
echo "<body><center><H1>";
$callself=$_SERVER['PHP_SELF'];
echo "<div data-role=\"controlgroup\" data-type=\"horizontal\">";
echo "<form data-transition=\"none\" style=\"display:inline;\" name=\"input\" action=\"$callself\" method=\"post\"><input type=\"hidden\" name=\"cmd\" value=\"1\"><input type=\"submit\" value=\"1\" /></form>\n";
echo "<form data-transition=\"none\" style=\"display:inline;\" name=\"input\" action=\"$callself\" method=\"post\"><input type=\"hidden\" name=\"cmd\" value=\"2\"><input type=\"submit\" value=\"2\" /></form>\n";
echo "<form data-transition=\"none\" style=\"display:inline;\" name=\"input\" action=\"$callself\" method=\"post\"><input type=\"hidden\" name=\"cmd\" value=\"3\"><input type=\"submit\" value=\"3\" /></form>\n";
echo "<form data-transition=\"none\" style=\"display:inline;\" name=\"input\" action=\"$callself\" method=\"post\"><input type=\"hidden\" name=\"cmd\" value=\"4\"><input type=\"submit\" value=\"4\" /></form>\n";
echo "<form data-transition=\"none\" style=\"display:inline;\" name=\"input\" action=\"$callself\" method=\"post\"><input type=\"hidden\" name=\"cmd\" value=\"5\"><input type=\"submit\" value=\"5\" /></form>\n";
echo "<form data-transition=\"none\" style=\"display:inline;\" name=\"input\" action=\"$callself\" method=\"post\"><input type=\"hidden\" name=\"cmd\" value=\"0\"><input type=\"submit\" value=\"Rate Clear\" /></form>\n";
echo "</div>";
echo "<div data-role=\"controlgroup\" data-type=\"horizontal\">";
echo "<form data-transition=\"none\" style=\"display:inline;\" name=\"input\" action=\"$callself\" method=\"post\"><input type=\"hidden\" name=\"cmd\" value=\"S\"><input type=\"submit\" value=\"SLIDESHOW\" /></form>\n";
echo "<form data-transition=\"none\" style=\"display:inline;\" name=\"input\" action=\"$callself\" method=\"post\"><input type=\"hidden\" name=\"cmd\" value=\"ESC\"><input type=\"submit\" value=\"ESC\" /></form>\n";
echo "<form data-transition=\"none\" style=\"display:inline;\" name=\"input\" action=\"$callself\" method=\"post\"><input type=\"hidden\" name=\"cmd\" value=\"ENTER\"><input type=\"submit\" value=\"OPEN/CLOSE\" /></form>\n";
fclose($fp);
echo "</div>";
echo "<div data-role=\"controlgroup\" data-type=\"horizontal\">";
echo "<form data-transition=\"none\" style=\"display:inline;\" name=\"input\" action=\"$callself\" method=\"post\"><input type=\"hidden\" name=\"cmd\" value=\"I\"><input type=\"submit\" value=\"ZOOMIN\" /></form>\n";
echo "<form data-transition=\"none\" style=\"display:inline;\" name=\"input\" action=\"$callself\" method=\"post\"><input type=\"hidden\" name=\"cmd\" value=\"R\"><input type=\"submit\" value=\"ZOOMRESET\" /></form>\n";
echo "<form data-transition=\"none\" style=\"display:inline;\" name=\"input\" action=\"$callself\" method=\"post\"><input type=\"hidden\" name=\"cmd\" value=\"O\"><input type=\"submit\" value=\"ZOOMOUT\" /></form>\n";
echo "</div>";
echo "<div data-role=\"controlgroup\" data-type=\"horizontal\">";
echo "<form data-transition=\"none\" style=\"display:inline;\" name=\"input\" action=\"$callself\" method=\"post\"><input type=\"hidden\" name=\"cmd\" value=\"P\"><input type=\"submit\" value=\"PREV\" /></form>\n";
echo "<form data-transition=\"none\" style=\"display:inline;\" name=\"input\" action=\"$callself\" method=\"post\"><input type=\"hidden\" name=\"cmd\" value=\"D\"><input type=\"submit\" value=\"DEL\" /></form>\n";
echo "<form data-transition=\"none\" style=\"display:inline;\" name=\"input\" action=\"$callself\" method=\"post\"><input type=\"hidden\" name=\"cmd\" value=\"Y\"><input type=\"submit\" value=\"Y\" /></form>\n";
echo "<form data-transition=\"none\" style=\"display:inline;\" name=\"input\" action=\"$callself\" method=\"post\"><input type=\"hidden\" name=\"cmd\" value=\"F\"><input type=\"submit\" value=\"FULL\" /></form>\n";
echo "<form data-transition=\"none\" style=\"display:inline;\" name=\"input\" action=\"$callself\" method=\"post\"><input type=\"hidden\" name=\"cmd\" value=\"N\"><input type=\"submit\" value=\"NEXT\" /></form>\n";
echo "</div>";
echo "</body></html>";
function send_cmd($cmd, $fp){
fwrite($fp, $cmd);
fwrite($fp, "\n");
return;
}
?>
Maybe you also have a white area to fill, here is a suggestion.
For years we collected picture frames, weird and ugly.
We wanted to have a collection of images in our staircase, to fill the white area.
The images are all something we like, have interest in or are personal.
It needed to be on 3 walls, so here was my first design.

