<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Strk&#39;s Blog</title>
    <link>https://strk.kbt.io/blog/</link>
    <description>Recent content on Strk&#39;s Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 08 Feb 2020 14:15:18 +0000</lastBuildDate>
    
        <atom:link href="https://strk.kbt.io/blog/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Hello, Burt!</title>
      <link>https://strk.kbt.io/blog/2020/02/08/hello-burt/</link>
      <pubDate>Sat, 08 Feb 2020 14:15:18 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2020/02/08/hello-burt/</guid>
      <description>&lt;p style=&#34;text-align: center;&#34;&gt;
&lt;iframe style=&#34;border: 0; width: 350px; height: 470px;&#34; src=&#34;https://bandcamp.com/EmbeddedPlayer/album=3730441397/size=large/bgcol=ffffff/linkcol=0687f5/tracklist=false/transparent=true/&#34; seamless=&#34;&#34;&gt;&lt;a href=&#34;http://flaviotothemoon.bandcamp.com/album/hello-burt&#34;&gt;Hello, Burt by Flavio To The Moon&lt;/a&gt;&lt;/iframe&gt;
&lt;/p&gt;
&lt;p&gt;Following our &lt;a href=&#34;https://strk.kbt.io/blog/2019/01/04/slivers-of-life/&#34;&gt;first album&lt;/a&gt; togheter, and after moving to Siena for taking &lt;a href=&#34;http://www.sienajazz.it/&#34;&gt;formal music studies&lt;/a&gt;, me and &lt;a href=&#34;https://www.villaggiomusicale.com/artista/bet&#34;&gt;Elisabetta&lt;/a&gt; have started a new project with a local guitarist and a new setup: she plays bass in this combo.&lt;/p&gt;
&lt;p&gt;The bass was sold to her by Fabio, a friend of mine who wasn’t finding the time to play it. That friend was the inspiration for me to play the songs written by &lt;a href=&#34;https://en.wikipedia.org/wiki/Burt_Bacharach&#34;&gt;Burt Bacharach&lt;/a&gt;, who I did not know much about, before Fabio mentioned him to me.&lt;/p&gt;
&lt;p&gt;Bacharach is known for his great melodies, which is why playing his music with a melodic instrument, like the trumpet, is so fun and satisfactory you would never stop. Nonetheless trumpet can be hard on your lips, so I’ve been also singing every now and then to let them rest a little bit 🙂&lt;/p&gt;
&lt;p&gt;So, with the &lt;a href=&#34;https://www.villaggiomusicale.com/band/flaviotothemoon&#34;&gt;band&lt;/a&gt; ready, I’ve been producing lead sheets with &lt;a href=&#34;http://lilypond.org/&#34;&gt;lilypond&lt;/a&gt; and recording some of the pieces with &lt;a href=&#34;http://ardour.org/&#34;&gt;ardour&lt;/a&gt;. Ain’t Free Software &lt;a href=&#34;https://fsfe.org/campaigns/ilovefs/&#34;&gt;lovely&lt;/a&gt; ?&lt;/p&gt;
&lt;p&gt;The result of such work can be heard &lt;a href=&#34;https://www.songkick.com/artists/10114065-flavio-to-the-moon&#34;&gt;live&lt;/a&gt; or on &lt;a href=&#34;https://flaviotothemoon.bandcamp.com/album/hello-burt&#34;&gt;bandcamp&lt;/a&gt;, which also provides the embedded player in this post.&lt;/p&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Slivers of life</title>
      <link>https://strk.kbt.io/blog/2019/01/04/slivers-of-life/</link>
      <pubDate>Fri, 04 Jan 2019 09:18:29 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2019/01/04/slivers-of-life/</guid>
      <description>&lt;p style=&#34;text-align: center;&#34;&gt;
&lt;iframe style=&#34;border: 0; width: 350px; height: 470px; align: center&#34; src=&#34;https://bandcamp.com/EmbeddedPlayer/album=525818509/size=large/bgcol=ffffff/linkcol=0687f5/tracklist=false/transparent=true/&#34; width=&#34;300&#34; height=&#34;150&#34; seamless=&#34;&#34;&gt;&lt;a href=&#34;http://blueleafs.bandcamp.com/album/frammenti&#34;&gt;Frammenti by Blue Leafs&lt;/a&gt;&lt;/iframe&gt;
&lt;/p&gt;
&lt;p&gt;The first album of our &lt;a href=&#34;https://blueleafs.bandcamp.com&#34;&gt;jazz trio&lt;/a&gt; is finally completed. It took a few months to find the time to sit together in the wonderful tiny studio of &lt;a href=&#34;https://www.villaggiomusicale.com/artista/furtillo&#34;&gt;Danilo&lt;/a&gt;, the pianist and producer. It didn’t help that me and &lt;a href=&#34;https://www.villaggiomusicale.com/artista/bet&#34;&gt;Elisabetta&lt;/a&gt;, the singer, moved 3 hours away from the studio to attend a &lt;a href=&#34;http://www.sienajazz.it/&#34;&gt;jazz accademy&lt;/a&gt;, following our hearts.&lt;/p&gt;
&lt;p&gt;I’m playing the trumpet, a small and lovely instrument I’ve had the pleasure to start playing around spring 2017, blowing into it daily ever since. On the &lt;a href=&#34;https://en.wikipedia.org/wiki/Lake_Vico&#34;&gt;lake beach&lt;/a&gt;, in the &lt;a href=&#34;http://www.parchilazio.it/sutri&#34;&gt;archeological park&lt;/a&gt;, in the &lt;a href=&#34;https://visit.viterbo.it/il-risveglio-awakening/&#34;&gt;urban park&lt;/a&gt;, even in the &lt;a href=&#34;https://en.wikipedia.org/wiki/Wellington_Botanic_Garden&#34;&gt;botanical garden&lt;/a&gt; on the other side of the world.&lt;/p&gt;
&lt;p&gt;My trumpet represents my getting back to myself, to my body, in connection to my soul. All computers and no music was making me a &lt;a href=&#34;https://en.wikipedia.org/wiki/All_work_and_no_play_makes_Jack_a_dull_boy&#34;&gt;dull boy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Trumpet is a real thing, a physical instrument, an amplifier of your lips vibration. Not a chip driven speaker with mathematically defined rules, but a physical laws obeying device. It &lt;span class=&#34;ILfuVd&#34;&gt;taught&lt;/span&gt; me about &lt;a href=&#34;https://en.wikipedia.org/wiki/Harmonic_series_(music)&#34;&gt;harmonic series&lt;/a&gt;, about &lt;a href=&#34;https://en.wikipedia.org/wiki/Resonance&#34;&gt;resonance&lt;/a&gt;, about my &lt;a href=&#34;https://en.wikipedia.org/wiki/Thoracic_diaphragm&#34;&gt;diaphragm&lt;/a&gt; and &lt;a href=&#34;https://en.wikipedia.org/wiki/Breathing&#34;&gt;breathing&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Trumpet taught me to remember about myself, and soundly cure me.&lt;/p&gt;
&lt;p&gt;To my experience, playing the trumpet is very similar to &lt;a href=&#34;https://en.wikipedia.org/wiki/Namu_My%C5%8Dh%C5%8D_Renge_Ky%C5%8D&#34;&gt;chanting mantras&lt;/a&gt;, it can have the same effects on the brain and the body.&lt;/p&gt;
&lt;p&gt;Hoping you can enjoy some of it, happy listening !&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Trac from Mutt</title>
      <link>https://strk.kbt.io/blog/2015/11/11/trac-from-mutt/</link>
      <pubDate>Wed, 11 Nov 2015 07:30:32 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2015/11/11/trac-from-mutt/</guid>
      <description>&lt;p&gt;Dedicated to those who do not want to surrender to proprietary services for code and tickets management: integrating &lt;a href=&#34;https://tamentis.com/projects/cartman/&#34;&gt;Cartman&lt;/a&gt; with &lt;a href=&#34;http://www.mutt.org/&#34;&gt;Mutt&lt;/a&gt;.&lt;/p&gt;
&lt;p style=&#34;text-align: center;&#34;&gt;
  &lt;img
    class=&#34;aligncenter size-medium wp-image-456&#34;
    src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2015/11/tracmutt-300x155.png&#34;
    alt=&#34;tracmutt&#34; width=&#34;300&#34; height=&#34;155&#34;
    srcset=&#34;https://strk.kbt.io/blog/wp-content/uploads/2015/11/tracmutt-300x155.png 300w, https://strk.kbt.io/blog/wp-content/uploads/2015/11/tracmutt.png 347w&#34;
    sizes=&#34;(max-width: 300px) 100vw, 300px&#34; /&gt;
&lt;/p&gt;
&lt;p&gt;The scenario is &lt;a href=&#34;http://trac.edgewall.org/&#34;&gt;Trac&lt;/a&gt; instances that send email notifications on ticket activity, as is the case with the &lt;a href=&#34;http://www.osgeo.org/&#34;&gt;OSGeo&lt;/a&gt; ones (there&amp;rsquo;s been some &lt;a href=&#34;https://lists.osgeo.org/pipermail/discuss/2015-September/014912.html&#34;&gt;recent&lt;/a&gt; &lt;a href=&#34;https://lists.osgeo.org/pipermail/discuss/2015-October/014997.html&#34;&gt;discussion&lt;/a&gt; about the role of its infrastructure).&lt;/p&gt;
&lt;p&gt;The &lt;em&gt;Cartman&lt;/em&gt; command to comment on a ticket (say &lt;em&gt;#33&lt;/em&gt;) of a project (say &lt;em&gt;postgis&lt;/em&gt;) would be:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cm -s postgis 33
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As you usually comment on some input received by mail (either a new ticket or another comment), building that command line requires eye-parsing for project name and ticket number, and then typing it on the shell.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Mutt&lt;/em&gt; allows you to define a &lt;em&gt;macro&lt;/em&gt; to do all of that with a single
keystroke. Here&amp;rsquo;s the macro I&amp;rsquo;ve written for me, to map
&lt;em&gt;&lt;CTRL&gt;-t&lt;/em&gt; to trac-reply.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;macro pager \Ct \
 &amp;quot;&amp;lt;pipe-message&amp;gt;~/bin/muttcm --save\n&amp;lt;shell-escape&amp;gt;~/bin/muttcm\n&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;em&gt;~/bin/muttcm&lt;/em&gt; script saves the headers of the piped message when
invoked with &lt;code&gt;--save&lt;/code&gt;; finds the most recently saved headers, parse them
for &lt;em&gt;Trac&lt;/em&gt; coordinates and invokes &lt;em&gt;Cartman&lt;/em&gt; with appropriate arguments.&lt;/p&gt;
&lt;p&gt;The script in its current incarnation follows, but it is very likely
that it will grow in the future to &lt;em&gt;adapt&lt;/em&gt; more to my &lt;em&gt;personal needs&lt;/em&gt;
and &lt;em&gt;preferences&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s what makes &lt;em&gt;Free Software&lt;/em&gt; better than any shining proprietary
service after all, isn&amp;rsquo;t it ?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: I&amp;rsquo;ve given the code a &lt;a href=&#34;https://strk.kbt.io/projects/cartman-mutt/&#34;&gt;dedicated page&lt;/a&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/sh
#
# Script integrating cartman (http://tamentis.com/projects/cartman/)
# with mutt (http://www.mutt.org/)
#
# Written (2015) by Sandro Santilli &amp;lt;strk@keybit.net&amp;gt;
# Released under Creative Commons Public Domain Dedication 1.0
# (https://creativecommons.org/publicdomain/zero/1.0/)
#
# Example macro to have &amp;lt;CTRL&amp;gt;-t trigger commenting on a ticket
# we&amp;#39;re reading a mail notification of:
#
# macro pager \Ct &amp;#34;&amp;lt;pipe-message&amp;gt;~/bin/muttcm --save\n&amp;lt;shell-escape&amp;gt;~/bin/muttcm\n&amp;#34;
#
# The script expects to find a `cartman` configuration section
# matching the lowercased value of the X-Trac-Project header
# in the trac notification area.
#

TMPDIR=/tmp/

if test &amp;#34;$1&amp;#34; = &amp;#34;--save&amp;#34;; then
 TS=`date +&amp;#39;%Y%m%d%H%M%S&amp;#39;`
 FILE=${TMPDIR}/muttcm.in.${TS}
 umask 0077
 sed &amp;#39;/^$/q&amp;#39; &amp;gt; ${FILE}
 echo &amp;#34;Headers saved in ${FILE}&amp;#34;
 exit
fi

# find most recent file in ${TMPDIR}/muttcm.in.*
LASTFILE=`&amp;#39;ls&amp;#39; ${TMPDIR}/muttcm.in.* | tail -1`

PROJ=`grep &amp;#39;^X-Trac-Project:&amp;#39; &amp;#34;${LASTFILE}&amp;#34; | awk &amp;#39;{print $2}&amp;#39; | tr &amp;#39;[A-Z]&amp;#39; &amp;#39;[a-z]&amp;#39;`
TICK=`grep &amp;#39;^X-Trac-Ticket-ID:&amp;#39; &amp;#34;${LASTFILE}&amp;#34; | awk &amp;#39;{print $2}&amp;#39;`
rm ${LASTFILE}

if test -z &amp;#34;${PROJ}&amp;#34;; then
 echo &amp;#34;Cannot find an X-Trac-Project header&amp;#34;
 exit 1
fi
if test -z &amp;#34;${TICK}&amp;#34;; then
 echo &amp;#34;Cannot find an X-Trac-Ticket-ID header&amp;#34;
 exit 1
fi

echo &amp;#39;PROJ: &amp;#39; $PROJ
echo &amp;#39;TICK: &amp;#39; $TICK

cm -s &amp;#34;${PROJ}&amp;#34; comment &amp;#34;${TICK}&amp;#34;
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title>On the fly simplification of topologically defined geometries</title>
      <link>https://strk.kbt.io/blog/2013/03/08/on-the-fly-simplification-of-topologically-defined-geometries/</link>
      <pubDate>Fri, 08 Mar 2013 09:05:44 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2013/03/08/on-the-fly-simplification-of-topologically-defined-geometries/</guid>
      <description>&lt;p&gt;Keeping GIS data in full-resolution and simplifying it on demand is a known challenge: simplification has to be &lt;strong&gt;fast&lt;/strong&gt; and its output has to be &lt;strong&gt;topologically consistent&lt;/strong&gt;.&lt;/p&gt;
&lt;p style=&#34;text-align: center;&#34;&gt;
  &lt;img class=&#34;size-full wp-image-419   alignnone&#34; title=&#34;Tuscany provinces, simplified with a tolerance of 8km&#34; src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2013/03/simp_geom.png&#34; alt=&#34;simplified geometries&#34; width=&#34;160&#34; height=&#34;168&#34; /&gt;&lt;img class=&#34;size-full wp-image-420  alignnone&#34; title=&#34;Tuscany provinces, simplified with a tolerance of 8km (TopoGeometry version)&#34; src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2013/03/simp_topogeom.png&#34; alt=&#34;simplified topogeometries&#34; width=&#34;160&#34; height=&#34;168&#34; /&gt;
&lt;/p&gt;
&lt;p&gt;We saw how to get a topologically consistent &lt;a href=&#34;https://strk.kbt.io/blog/2012/04/13/simplifying-a-map-layer-using-postgis-topology/&#34;&gt;simplified version of a full layer&lt;/a&gt;, but that method isn’t fast enough for on-demand usage. Also, we saw how to perform a &lt;a href=&#34;http://blog.cartodb.com/post/20163722809/speeding-up-tiles-rendering&#34;&gt;fast simplification&lt;/a&gt; by sacrificing the degree or generalization so that the introduced inconsistency would not be visible on a rendering surface.&lt;/p&gt;
&lt;p&gt;An approach balancing speed and quality would take advantage of the topological definition of geometries to constraint the simplification work by ensuring &lt;strong&gt;shared edges&lt;/strong&gt; get an &lt;strong&gt;identical treatment&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This is now possible with the addition in &lt;a href=&#34;https://strk.kbt.io/projects/postgis/&#34;&gt;PostGIS&lt;/a&gt; of a  &lt;a href=&#34;http://postgis.net/docs/manual-dev/TP_ST_Simplify.html&#34;&gt;new version of ST_Simplify&lt;/a&gt; accepting a &lt;em&gt;TopoGeometry&lt;/em&gt; as input.&lt;/p&gt;
&lt;p&gt;In the picture above you can see the difference between using &lt;em&gt;Geometry&lt;/em&gt; or &lt;em&gt;TopoGeometry&lt;/em&gt; objects for simplifying the provinces of Tuscany with a tolerance of 8km. The &lt;em&gt;ST_Simplify&lt;/em&gt; function runs at comparable speed in both cases.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>GEOS 3.3.4 released</title>
      <link>https://strk.kbt.io/blog/2012/05/31/geos-3-3-4-released/</link>
      <pubDate>Thu, 31 May 2012 19:25:57 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2012/05/31/geos-3-3-4-released/</guid>
      <description>&lt;p&gt;New bug fix and improvement release for the 3.3 series of &lt;a href=&#34;https://strk.kbt.io/projects/geos/&#34;&gt;GEOS&lt;/a&gt; is &lt;a href=&#34;http://download.osgeo.org/geos/geos-3.3.4.tar.bz2&#34;&gt;out&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes&lt;/strong&gt; since 3.3.3:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do not abort on NaN overlay input (#530)&lt;/li&gt;
&lt;li&gt;Reduce CommonBitsRemover harmful effects during overlay op (#527)&lt;/li&gt;
&lt;li&gt;Better cross-compiler support (#534)&lt;/li&gt;
&lt;li&gt;Enable overlay ops short-circuits (#542)&lt;/li&gt;
&lt;li&gt;Envelope-based short-circuit for symDifference (#543)&lt;/li&gt;
&lt;li&gt;Fix support for PHP 5.4 (#513)&lt;/li&gt;
&lt;li&gt;Fix TopologyPreservingSimplifier invalid output on closed line (#508)&lt;/li&gt;
&lt;li&gt;Reduce calls to ptNotInList, greatly speeding up Polygonizer (#545)&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Simplifying a map layer using PostGIS topology</title>
      <link>https://strk.kbt.io/blog/2012/04/13/simplifying-a-map-layer-using-postgis-topology/</link>
      <pubDate>Fri, 13 Apr 2012 12:30:42 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2012/04/13/simplifying-a-map-layer-using-postgis-topology/</guid>
      <description>&lt;p style=&#34;text-align: center;&#34;&gt;
  &lt;img class=&#34;size-full wp-image-365 alignnone&#34; title=&#34;47036 vertices&#34; src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2012/04/france_geom_orig.png&#34; alt=&#34;&#34; width=&#34;172&#34; height=&#34;176&#34; /&gt;&lt;img class=&#34;size-full wp-image-366 alignnone&#34; title=&#34;1369 vertices&#34; src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2012/04/france_geom_simp10000.png&#34; alt=&#34;&#34; width=&#34;172&#34; height=&#34;176&#34; /&gt;
&lt;/p&gt;
&lt;p style=&#34;text-align: left;&#34;&gt;
  Following a &lt;a href=&#34;http://trac.osgeo.org/postgis/wiki/UsersWikiSimplifyPreserveTopology&#34;&gt;recent research&lt;/a&gt; about how to simplify a multipolygon layer while keeping topological relationships intact, here&amp;#8217;s my take on that, using the &lt;a
href=&#34;http://postgis.net/documentation/manual-2.0/Topology.html&#34;&gt;PostGIS topological support&lt;/a&gt;.
&lt;/p&gt;
&lt;h3 id=&#34;Thedata&#34;&gt;The data&lt;/h3&gt;
&lt;p&gt;French administrative subdivisions, called “départements”, will be used. Data can be downloaded &lt;a href=&#34;http://professionnels.ign.fr/DISPLAY/000/528/175/5281750/GEOFLADept_FR_Corse_AV_L93.zip&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It is composed by &lt;strong&gt;96&lt;/strong&gt; multipolygons for a total of  &lt;strong&gt;47036&lt;/strong&gt; vertices.&lt;/p&gt;
&lt;h3 id=&#34;principle-of-simplification&#34;&gt;Principle of simplification&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;We convert a layer’s Geometries to TopoGeometries&lt;/li&gt;
&lt;li&gt;We simplify all edges of the built topology&lt;/li&gt;
&lt;li&gt;We convert the (now-simplified) TopoGeometries back to Geometries&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;steps&#34;&gt;Steps&lt;/h3&gt;
&lt;p&gt;The following steps assume you loaded the shapefile into a table named “france_dept”.&lt;/p&gt;
&lt;pre&gt;-- Create a topology
SELECT CreateTopology(&#39;france_dept_topo&#39;, find_srid(&#39;public&#39;, &#39;france_dept&#39;, &#39;geom&#39;));

-- Add a layer
SELECT AddTopoGeometryColumn(&#39;france_dept_topo&#39;, &#39;public&#39;, &#39;france_dept&#39;, &#39;topogeom&#39;, &#39;MULTIPOLYGON&#39;);

-- Populate the layer and the topology
UPDATE france_dept SET topogeom = toTopoGeom(geom, &#39;france_dept_topo&#39;, 1); -- &lt;span style=&#34;color: #ff0000;&#34;&gt;8.75 seconds&lt;/span&gt;

-- Simplify all edges up to 10000 units
SELECT SimplifyEdgeGeom(&#39;france_dept_topo&#39;, edge_id, 10000) FROM france_dept_topo.edge; -- &lt;span style=&#34;color: #ff0000;&#34;&gt;3.86 seconds&lt;/span&gt;

-- Convert the TopoGeometries to Geometries for visualization
ALTER TABLE france_dept ADD geomsimp GEOMETRY;
UPDATE france_dept SET geomsimp = topogeom::geometry; -- &lt;span style=&#34;color: #ff0000;&#34;&gt;0.11 seconds&lt;/span&gt;&lt;/pre&gt;
&lt;h3 id=&#34;the-simplifyedgegeom-function&#34;&gt;The SimplifyEdgeGeom function&lt;/h3&gt;
&lt;p&gt;You may have noticed that the “SimplifyEdgeGeom” is not a core function. It is a function I wrote for the purpose of catching topological problems introduced by simplification.&lt;/p&gt;
&lt;p&gt;The naive call would be:&lt;/p&gt;
&lt;pre&gt;SELECT ST_ChangeEdgeGeom(&#39;france_dept_topo&#39;, edge_id, ST_Simplify(geom, 10000))
FROM france_dept_topo.edge;&lt;/pre&gt;
&lt;p&gt;The problem with the above call is that any simplification introducing a topology error would be rejected by ST_ChangeEdgeGeom by throwing an exception and the exception would rollback the whole transaction leaving you with no edge changed. Possible topology errors introduced are: edges collapsing to points, intersecting self or other edges.&lt;/p&gt;
&lt;p&gt;The SimplifyEdgeGeom function wraps the ST_ChangeEdgeGeom call into a subtransaction and handles exceptions by reducing the simplification factor until it succeeds. The version I used reduces simplification factor in half at each failure, dropping down to zero around 1e-8. You can roll your own with other heuristics or generalize this one to take parameters about stepping and limits.&lt;/p&gt;
&lt;p&gt;Here’s the function:&lt;/p&gt;
&lt;pre&gt;CREATE OR REPLACE FUNCTION SimplifyEdgeGeom(atopo varchar, anedge int, maxtolerance float8)
RETURNS float8 AS $
DECLARE
  tol float8;
  sql varchar;
BEGIN
  tol := maxtolerance;
  LOOP
    sql := &#39;SELECT topology.ST_ChangeEdgeGeom(&#39; || quote_literal(atopo) || &#39;, &#39; || anedge
      || &#39;, ST_Simplify(geom, &#39; || tol || &#39;)) FROM &#39;
      || quote_ident(atopo) || &#39;.edge WHERE edge_id = &#39; || anedge;
    BEGIN
      RAISE DEBUG &#39;Running %&#39;, sql;
      EXECUTE sql;
      RETURN tol;
    EXCEPTION
     WHEN OTHERS THEN
      RAISE WARNING &#39;Simplification of edge % with tolerance % failed: %&#39;, anedge, tol, SQLERRM;
      tol := round( (tol/2.0) * 1e8 ) / 1e8; -- round to get to zero quicker
      IF tol = 0 THEN RAISE EXCEPTION &#39;%&#39;, SQLERRM; END IF;
    END;
  END LOOP;
END
$ LANGUAGE &#39;plpgsql&#39; STABLE STRICT;&lt;/pre&gt;
&lt;h3 id=&#34;Thedata&#34;&gt;Performance&lt;/h3&gt;
&lt;p id=&#34;Thedata&#34;&gt;
  The times shown near the &amp;#8220;expensive&amp;#8221; steps give you an indication of the performance you may expect. It&amp;#8217;s about 13 seconds in total for the 3 steps outlined in the first paragraph.
&lt;/p&gt;
&lt;p&gt;A single run of the simplification step brought vertices down to &lt;strong&gt;1369&lt;/strong&gt; (from &lt;strong&gt;47036&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;Timings are take on this system:&lt;/p&gt;
&lt;p style=&#34;padding-left: 30px;&#34;&gt;
  POSTGIS=&amp;#8221;2.0.1SVN r9637&amp;#8243; GEOS=&amp;#8221;3.4.0dev-CAPI-1.8.0&amp;#8243; PROJ=&amp;#8221;Rel. 4.8.0, 6 March 2012&amp;#8243; GDAL=&amp;#8221;GDAL 1.9.0, released 2011/12/29&amp;#8243; LIBXML=&amp;#8221;2.7.6&amp;#8243; LIBJSON=&amp;#8221;UNKNOWN&amp;#8221; TOPOLOGY RASTER
&lt;/p&gt;
&lt;p style=&#34;padding-left: 30px;&#34;&gt;
  PostgreSQL 8.4.10 on x86_64-pc-linux-gnu, compiled by GCC gcc-4.4.real (Ubuntu 4.4.3-4ubuntu5) 4.4.3, 64-bit
&lt;/p&gt;
&lt;p style=&#34;padding-left: 60px;&#34;&gt;
  CUSTOM OPTIONS:&lt;br /&gt; shared_buffers = 128MB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (default is 24MB)&lt;br /&gt; temp_buffers = 32MB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (default is 8MB)&lt;br /&gt; work_mem = 8MB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (default is 1MB)&lt;br /&gt; maintenance_work_mem = 32MB (default is 16MB)&lt;br /&gt; max_stack_depth = 4MB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (default is 2MB)&lt;br /&gt; checkpoint_segments = 24&amp;nbsp;&amp;nbsp;&amp;nbsp; (default is 3)
&lt;/p&gt;
&lt;p style=&#34;padding-left: 30px;&#34;&gt;
  CPU: Intel(R) Core(TM)2 Duo CPU P9500 @ 2.53GHz (2 x 5054.34 bogomips)
&lt;/p&gt;
&lt;p style=&#34;padding-left: 30px;&#34;&gt;
  RAM: 4GB
&lt;/p&gt;
&lt;h3 id=&#34;considerations&#34;&gt;Considerations&lt;/h3&gt;
&lt;p&gt;The procedure described in this post is also valid for &lt;em&gt;LINESTRING&lt;/em&gt; and &lt;em&gt;MULTILINESTRING&lt;/em&gt; layers, using the exactly same code.&lt;/p&gt;
&lt;p&gt;You could reuse the topology to produce multiple resolution levels w/out incurring again in the construction cost (and with a reduced input complexity at each level).&lt;/p&gt;
&lt;p&gt;The simplification step doesn’t use TopoGeometry objects at all so you could choose to perform  topology construction and  attribute assignment in a different way.&lt;/p&gt;
&lt;p&gt;Running the &lt;em&gt;SimplifyEdgeGeom&lt;/em&gt; function again might give you more simplification because edges which may have intersected to the simplified version of an edge may not be intersecting anymore after their own simplification. The function can be changed to behave differently on exception to improve performance or quality.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PostGIS 2.0.0 released</title>
      <link>https://strk.kbt.io/blog/2012/04/04/postgis-2-0-0-released/</link>
      <pubDate>Wed, 04 Apr 2012 09:46:16 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2012/04/04/postgis-2-0-0-released/</guid>
      <description>&lt;p style=&#34;text-align: center;&#34;&gt;
&lt;img class=&#34;aligncenter size-full wp-image-354&#34; title=&#34;easter_elephant&#34; src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2012/04/elephantegg.jpeg&#34; alt=&#34;&#34; width=&#34;245&#34; height=&#34;205&#34; /&gt;
&lt;/p&gt;
&lt;p&gt;The long-awaited full featured &lt;strong&gt;&lt;a href=&#34;https://strk.kbt.io/projects/postgis&#34;&gt;PostGIS&lt;/a&gt; 2.0.0&lt;/strong&gt; is finally &lt;a href=&#34;http://postgis.refractions.net/download/postgis-2.0.0.tar.gz&#34;&gt;out&lt;/a&gt;. Coupled with &lt;a href=&#34;https://strk.kbt.io/projects/geos&#34;&gt;GEOS&lt;/a&gt; &lt;a href=&#34;http://download.osgeo.org/geos/geos-3.3.3.tar.bz2&#34;&gt;3.3.3&lt;/a&gt; (released a few days before) and &lt;a href=&#34;http://download.osgeo.org/gdal/gdal-1.9.0.tar.gz&#34;&gt;GDAL-1.9.0&lt;/a&gt;, it brings you the best spatial database system in town, complete with raster analysis and topology modeling support.&lt;/p&gt;
&lt;p&gt;Complete announcement, with list of changes,  &lt;a href=&#34;http://postgis.refractions.net/pipermail/postgis-users/2012-April/033467.html&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It’s been an great pleasure to work with the rest of the team on getting this release ready for shipping, drawing a line after over two years of hard work on new features. I’m particularly proud of the &lt;a href=&#34;https://strk.kbt.io/blog/2011/10/14/postgis-topology-iso-sqlmm-complete/&#34;&gt;persistent topology support&lt;/a&gt;, which kept me busy for the most part of 2011, and the raster support of which I wrote &lt;a href=&#34;https://strk.kbt.io/projects/WKTRaster/&#34;&gt;the foundations&lt;/a&gt; two years before.&lt;/p&gt;
&lt;p&gt;I’m also happy to see an healthily growing community around &lt;em&gt;PostGIS&lt;/em&gt;: we’ve had two successful &lt;a href=&#34;http://www.pledgebank.com/search?q=postgis&#34;&gt;pledges&lt;/a&gt;, a growing list of &lt;a href=&#34;http://www.ohloh.net/p/postgis/contributors?query=&amp;amp;sort=newest&#34;&gt;contributors&lt;/a&gt; and more corporate sponsors.&lt;/p&gt;
&lt;p&gt;A special thank goes to &lt;a href=&#34;http://www.vizzuality.com/&#34;&gt;Vizzuality&lt;/a&gt; for investing in a &lt;a href=&#34;http://blog.cartodb.com/post/17318840209/postgis-core-committer-sandro-santilli-joins-cartodb&#34;&gt;full-time PostGIS hacker&lt;/a&gt;. Their PostGIS-in-the-cloud solution (&lt;a href=&#34;http://cartodb.com/&#34;&gt;cartodb.com&lt;/a&gt;) is likely the first one putting &lt;em&gt;PostGIS 2.0.0&lt;/em&gt; in &lt;a href=&#34;http://blog.cartodb.com/post/20403296927/welcome-to-cartodb-1-0&#34;&gt;production&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Gnash 0.8.10 released</title>
      <link>https://strk.kbt.io/blog/2012/02/07/gnash-0-8-10-released/</link>
      <pubDate>Tue, 07 Feb 2012 08:45:41 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2012/02/07/gnash-0-8-10-released/</guid>
      <description>&lt;p&gt;After one year of gestation, &lt;a href=&#34;https://strk.kbt.io/projects/gnash/&#34;&gt;Gnash&lt;/a&gt; &lt;strong&gt;0.8.10&lt;/strong&gt; is finally &lt;a href=&#34;http://lists.gnu.org/archive/html/gnash-dev/2012-02/msg00001.html&#34;&gt;out&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It fixes many compatibility issues (fixing from Google Dict to Camtasia and Captivate outputs, to a while category of &lt;a href=&#34;https://strk.kbt.io/blog/2011/09/07/hack-fever-2-super-mario-sound/&#34;&gt;interactive games&lt;/a&gt;), enhances user experience (popups on limits hit, &lt;a href=&#34;https://savannah.gnu.org/task/index.php?11268&#34;&gt;gnome thumbnailer&lt;/a&gt;, QT4 mousewheel support), implements more of the &lt;strong&gt;SWF8&lt;/strong&gt; specs (BitmapData &lt;a href=&#34;http://benjaminwolsey.de/node/118&#34;&gt;perlin noise&lt;/a&gt;), introduces new accelerated renderer (OpenVG) and better framebuffer GUI (touchscreen aware).&lt;/p&gt;
&lt;p&gt;This is the first Gnash release after Adobe announcement of &lt;a href=&#34;http://www.cnn.com/2011/11/09/tech/mobile/adobe-mobile-flash-wired/index.html?hpt=hp_t3&#34;&gt;giving up Flash for HTML5&lt;/a&gt; in the mobile market. Battery life is king for mobile devices, so being able to enable compile-time optimizations both for general or specific SWF interpretation makes Gnash a solid alternative.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>A walk on the wild side</title>
      <link>https://strk.kbt.io/blog/2012/01/28/a-walk-on-the-wild-side/</link>
      <pubDate>Sat, 28 Jan 2012 00:03:20 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2012/01/28/a-walk-on-the-wild-side/</guid>
      <description>&lt;p align=center&gt;
&lt;img
  class=&#34;alignleft size-full wp-image-333&#34;
  title=&#34;Lou Reed&#34;
  src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2012/01/loureed_topo_small.png&#34;
  alt=&#34;Lou Reed, topological version&#34;
  width=&#34;300&#34; height=&#34;367&#34; /&gt;
&lt;/p&gt;
&lt;p&gt;I’ve been spending the last few days profiling and optimizing the new &lt;a href=&#34;http://www.postgis.net/docs/manual-dev/toTopoGeom.html&#34;&gt;simple-to-topological converter&lt;/a&gt; you will find in &lt;a href=&#34;http://trac.osgeo.org/postgis/milestone/PostGIS%202.0.0&#34;&gt;PostGIS 2.0.0&lt;/a&gt; thanks to a &lt;a href=&#34;http://www.pledgebank.com/postgistopology&#34;&gt;community effort&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The most expensive operation was found to be the &lt;em&gt;ST_AddEdgeModFace&lt;/em&gt; function, which adds an &lt;em&gt;edge&lt;/em&gt; and checks if such &lt;em&gt;edge&lt;/em&gt; creates a new &lt;em&gt;face&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Face-splitting detection was implemented using a brute force approach consisting in invoking the &lt;a href=&#34;https://strk.kbt.io/projects/geos/index.html&#34;&gt;GEOS&lt;/a&gt; polygonizer and then checking if any polygon created contained the newly added &lt;em&gt;edge&lt;/em&gt; in its boundary. It can get pretty wild when you add an &lt;em&gt;edge&lt;/em&gt; in the &lt;em&gt;universe face&lt;/em&gt;, and thus end up feeding the polygonizer with thousands of edges.&lt;/p&gt;
&lt;p&gt;So I started thinking about two fields we make great effort to maintain and were (so far) unused: &lt;em&gt;next_left_edge&lt;/em&gt; and &lt;em&gt;next_right_edge&lt;/em&gt;. Each &lt;em&gt;edge&lt;/em&gt; has these two pointers which may be used to &lt;strong&gt;walk&lt;/strong&gt; clockwise along its &lt;em&gt;left&lt;/em&gt; or &lt;em&gt;right&lt;/em&gt; &lt;em&gt;face&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;By walking on the edge side you can know a lot about the &lt;em&gt;edge&lt;/em&gt; you add !&lt;/p&gt;
&lt;p&gt;First of all if you get to the &lt;em&gt;other side&lt;/em&gt; of the &lt;em&gt;edge&lt;/em&gt; you know for sure you didn’t split any &lt;em&gt;face&lt;/em&gt; (no ring was created). Second, you can easily get the identifiers of all the edges you’ll need to update for setting their new &lt;em&gt;left_face&lt;/em&gt; and &lt;em&gt;right_face&lt;/em&gt; attributes. Finally by computing &lt;em&gt;ring winding&lt;/em&gt; you can know whether each side of the &lt;em&gt;edge&lt;/em&gt; is forming a fill or an hole.&lt;/p&gt;
&lt;p&gt;I was afraid that such approach could have been slower than the brute force one, mainly due to more database querying and &lt;em&gt;IO&lt;/em&gt;. But the dataset I was using for a testcase (Italian municipalities by &lt;em&gt;ISTAT&lt;/em&gt;: 8094 multipolygons with an average of 560 vertices each) showed a &lt;strong&gt;speedup&lt;/strong&gt; of up to &lt;strong&gt;10x&lt;/strong&gt; !&lt;/p&gt;
&lt;p&gt;The testsuite was an invaluable tool for correctness checking. I actually spent a fair amount of time enhancing it further with new corner cases (new algorithm, new corners!).&lt;/p&gt;
&lt;p&gt;I’m still checking correctness of  the resulting topology for the &lt;em&gt;ISTAT&lt;/em&gt; case,  making sure that the improvements didn’t introduce any regression. Hopefully next week the code will be committed upstream for broader delectation. Stay tuned, prepare your input for conversion and start playing and timing the current routines !&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>GEOS 3.3.2 released</title>
      <link>https://strk.kbt.io/blog/2012/01/06/geos-3-3-2-released/</link>
      <pubDate>Fri, 06 Jan 2012 21:12:04 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2012/01/06/geos-3-3-2-released/</guid>
      <description>&lt;p&gt;The second bugfix release in the 3.3 branch of &lt;a href=&#34;https://strk.kbt.io/projects/geos/&#34;&gt;GEOS&lt;/a&gt; was released today.&lt;/p&gt;
&lt;p&gt;This is the version required by the topology support shipped with the upcoming &lt;a href=&#34;https://strk.kbt.io/projects/postgis&#34;&gt;PostGIS&lt;/a&gt; 2.0 release.&lt;/p&gt;
&lt;p&gt;Everyone is recommended to upgrade. Changes can be read &lt;a href=&#34;http://trac.osgeo.org/geos/browser/tags/3.3.2/NEWS&#34;&gt;here&lt;/a&gt;, package can be downloaded &lt;a href=&#34;http://download.osgeo.org/geos/geos-3.3.2.tar.bz2&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Topology cleaning with PostGIS</title>
      <link>https://strk.kbt.io/blog/2011/11/21/topology-cleaning-with-postgis/</link>
      <pubDate>Mon, 21 Nov 2011 17:51:37 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2011/11/21/topology-cleaning-with-postgis/</guid>
      <description>&lt;p&gt;An early tester of the new &lt;a href=&#34;https://strk.kbt.io/blog/2011/10/14/postgis-topology-iso-sqlmm-complete/&#34;&gt;PostGIS Topology&lt;/a&gt; submitted an &lt;a href=&#34;http://trac.osgeo.org/postgis/ticket/1274&#34;&gt;interesting dataset&lt;/a&gt; which kept me busy for a couple of weeks fixing a bunch of bugs related to numerical stability/robustness.&lt;/p&gt;
&lt;p&gt;Finally, the &lt;a href=&#34;http://postgis.refractions.net/documentation/manual-svn/ST_CreateTopoGeo.html&#34;&gt;ST_CreateTopoGeo&lt;/a&gt; function succeeded and imported the dataset as a proper topological schema. Here’s what it looks like:&lt;/p&gt;
&lt;div
  id=&#34;attachment_310&#34;
  class=&#34;wp-caption aligncenter&#34;
  style=&#34;text-align: center;&#34;
&gt;
  &lt;img
    class=&#34;size-full wp-image-310&#34;
    title=&#34;topology case #1274&#34;
    src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2011/11/input_topo.png&#34;
    alt=&#34;&#34;
    width=&#34;319&#34; height=&#34;360&#34;
  /&gt;
  &lt;p class=&#34;wp-caption-text&#34;&gt;
    Edges of the built topology
  &lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;At a first glance it doesn’t seem to be particularly problematic. Here’s the composition summary:&lt;/p&gt;
&lt;pre style=&#34;padding-left: 30px;&#34;&gt;=# select topologysummary(&#39;small_sample_topo&#39;);
                    topologysummary
--------------------------------------------------------
 Topology small_sample_topo (2042), SRID 0, precision 0
 83 nodes, 156 edges, 74 faces, 0 topogeoms in 0 layers&lt;/pre&gt;
&lt;p&gt;But the devil hides at high zoom levels. Where to zoom ? What are we looking for ?&lt;/p&gt;
&lt;p&gt;We are guaranteed none of the constructed edges cross so the only leftover problem we might encounter is very small faces constructed wherever the original input had small overlaps or underlaps (gaps). We can have a visual signal of those faces by creating a view showing faces with an area below a given threshold. Let’s do that:&lt;/p&gt;
&lt;pre style=&#34;padding-left: 30px;&#34;&gt;CREATE VIEW small_sample_topo.small_areas AS
SELECT face_id, st_getfacegeometry(&#39;small_sample_topo&#39;, face_id)
FROM small_sample_topo.face
WHERE face_id &amp;gt; 0
AND st_area(st_getfacegeometry(&#39;small_sample_topo&#39;, face_id)) &amp;lt; 0.1;&lt;/pre&gt;
&lt;p&gt;That query would let us see where to find faces with area &amp;lt; 0.1 units. And here’s &lt;a href=&#34;http://www.qgis.org&#34;&gt;qgis&lt;/a&gt; showing it:&lt;/p&gt;
&lt;div id=&#34;attachment_313&#34; style=&#34;text-align: center&#34; class=&#34;wp-caption aligncenter&#34;&gt;
  &lt;a href=&#34;https://strk.kbt.io/blog/wp-content/uploads/2011/11/areas_smaller_than_0_1.png&#34;&gt;&lt;img class=&#34;size-full wp-image-313 &#34; title=&#34;areas_smaller_than_0_1&#34; src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2011/11/areas_smaller_than_0_1.png&#34; alt=&#34;&#34; width=&#34;319&#34; height=&#34;360&#34; /&gt;&lt;/a&gt;
  &lt;p class=&#34;wp-caption-text&#34;&gt;
    Areas smaller than 0.1 square units
  &lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Now we know where to zoom, and also the ID of the offending faces.&lt;/p&gt;
&lt;p&gt;Let’s zoom in and show some labels:&lt;/p&gt;
&lt;div id=&#34;attachment_314&#34; style=&#34;text-align: center&#34; class=&#34;wp-caption aligncenter&#34;&gt;
  &lt;a href=&#34;https://strk.kbt.io/blog/wp-content/uploads/2011/11/small_area_detail.png&#34;&gt;&lt;img class=&#34;size-full wp-image-314 &#34; title=&#34;small_area_detail&#34; src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2011/11/small_area_detail.png&#34; alt=&#34;&#34; width=&#34;319&#34; height=&#34;360&#34; /&gt;&lt;/a&gt;
  &lt;p class=&#34;wp-caption-text&#34;&gt;
    Detail of small area
  &lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;You can now see that face 59 is bound by (among others) edges 130 and 129. Just get rid of one of them to assign the area to an adjacent face.&lt;/p&gt;
&lt;p&gt;We drop edge 130 using &lt;a href=&#34;http://postgis.refractions.net/documentation/manual-svn/ST_RemEdgeModFace.html&#34;&gt;ST_RemEdgeModFace&lt;/a&gt;, assigning the area to face 52. Here’s the result:&lt;/p&gt;
&lt;div id=&#34;attachment_315&#34; style=&#34;text-align: center&#34; class=&#34;wp-caption aligncenter&#34;&gt;
  &lt;a href=&#34;https://strk.kbt.io/blog/wp-content/uploads/2011/11/small_area_detail_after_clean.png&#34;&gt;&lt;img class=&#34;size-full wp-image-315&#34; title=&#34;small_area_detail_after_clean&#34; src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2011/11/small_area_detail_after_clean.png&#34; alt=&#34;&#34; width=&#34;319&#34; height=&#34;360&#34; /&gt;&lt;/a&gt;
  &lt;p class=&#34;wp-caption-text&#34;&gt;
    Area after cleanup
  &lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Cleaning further would require removing further edges and thus getting rid of all the small faces. There’s a lot of room for automating such processes. The good new is you can now build your own automation around your specific use cases while still using robust and standard foundations.&lt;/p&gt;
&lt;p&gt;It is to be noted that the whole process I described here only involved the geometrical/topological level and didn’t affect at all the semantic/feature level. If we had &lt;a href=&#34;http://trac.osgeo.org/postgis/wiki/UsersWikiTopoGeometry&#34;&gt;TopoGeometry&lt;/a&gt; objects defined by the faces we’d also know which small faces were part of overlaps or underlaps and could then act consequently by adding or removing faces to the definition of the appropriate &lt;em&gt;TopoGeometry&lt;/em&gt; object. Such step would have been required for the overlap situations as the ST__RemEdgeModFace_ function doesn’t let you change the shape of a defined &lt;em&gt;TopoGeometry&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Unfortunately the semantic level is lost when using the ISO functions, as the whole ISO topology model doesn’t deal with features at all. This is why I think PostGIS would benefit from having a function that converts your simple features into topologically-defined features by adding any missing primitive to a topology schema and constructing the feature for you. Such function, is only waiting for sponsorship to become a reality of PostGIS 2.0. If you like what we’re building for your data integrity, please consider supporting the effort!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Ming 0.4.4 released</title>
      <link>https://strk.kbt.io/blog/2011/10/26/ming-0-4-4-released/</link>
      <pubDate>Wed, 26 Oct 2011 09:21:45 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2011/10/26/ming-0-4-4-released/</guid>
      <description>&lt;div style=&#34;text-align: center&#34;&gt;
&lt;img class=&#34;size-full wp-image-294&#34; title=&#34;Ming wants you&#34;
  src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2011/10/ming_wants_you.jpg&#34;
  alt=&#34;&#34;
  width=&#34;240&#34; height=&#34;328&#34;
/&gt;
&lt;/div&gt;
&lt;p&gt;I’m happy to announce that &lt;a href=&#34;http://libming.org/Releases&#34; title=&#34;release 0.4.4&#34;&gt;release 0.4.4&lt;/a&gt; of the &lt;a href=&#34;https://strk.kbt.io/projects/ming/&#34;&gt;Ming&lt;/a&gt; library is out.&lt;/p&gt;
&lt;p&gt;Ming is an &lt;a href=&#34;http://en.wikipedia.org/wiki/SWF&#34;&gt;SWF&lt;/a&gt; output library with binding for C, C++, PHP, Perl, Python and more.&lt;/p&gt;
&lt;p&gt;It’s stable, alive and waiting for you at his new [github][1] location.&lt;/p&gt;
&lt;p&gt;Don’t let &lt;a href=&#34;https://strk.kbt.io/projects/gnash&#34;&gt;Flash&lt;/a&gt; get in your way, do your part for an open web!&lt;/p&gt;
&lt;p&gt;Changes in this release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Generally improve swftoscript and decompiler&lt;/li&gt;
&lt;li&gt;Change makefdb to name output files by font ID, to play nicer with swftoscript.&lt;/li&gt;
&lt;li&gt;Add support for ‘class A extends B’ syntax in actioncompiler&lt;/li&gt;
&lt;li&gt;Fix bug in ‘makeswf’ failing to catch some compile errors (bugzilla #94) and being too silent in swf embedding errors&lt;/li&gt;
&lt;li&gt;Fix bug in action compiler dealing with class methods (bugzilla #94)&lt;/li&gt;
&lt;li&gt;Add support for libpng &amp;gt; 1.4 (bugzilla #96)&lt;/li&gt;
&lt;li&gt;Add font kernings support (bugzilla #95)&lt;/li&gt;
&lt;li&gt;Add button characters export capabilities&lt;/li&gt;
&lt;li&gt;Add support for &amp;lsquo;swfAction &amp;lt;code&amp;gt;&amp;rsquo; syntax in asm blocks&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>PostGIS topology ISO SQL/MM complete</title>
      <link>https://strk.kbt.io/blog/2011/10/14/postgis-topology-iso-sqlmm-complete/</link>
      <pubDate>Fri, 14 Oct 2011 13:39:10 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2011/10/14/postgis-topology-iso-sqlmm-complete/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://strk.kbt.io/projects/postgis/&#34;&gt;PostGIS&lt;/a&gt; implementation of the &lt;em&gt;ISO SQL/MM Topology-Geometry&lt;/em&gt; model is finally &lt;a href=&#34;http://trac.osgeo.org/postgis/changeset/7886&#34;&gt;complete&lt;/a&gt;.&lt;/p&gt;
&lt;div style=&#34;text-align: center&#34;&gt;
&lt;img class=&#34;aligncenter size-full wp-image-287&#34; title=&#34;topoview&#34; src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2011/10/topoview2.png&#34; alt=&#34;&#34; width=&#34;440&#34; height=&#34;261&#34; /&gt;
&lt;/div&gt;
&lt;p&gt;The &lt;a href=&#34;http://pdfqueen.com/h2-topo-geo&#34; title=&#34;Freely available drafts by Paul Scarponcini&#34;&gt;&lt;em&gt;SQL/MM&lt;/em&gt; model&lt;/a&gt; is just a portion of the whole &lt;a href=&#34;http://trac.osgeo.org/postgis/wiki/UsersWikiPostgisTopology&#34;&gt;topology support&lt;/a&gt;, but an important one, including schema definition and functions to create and populate the schema with primitive components (nodes, edges, faces).&lt;/p&gt;
&lt;p&gt;In addition to the base model, &lt;em&gt;PostGIS&lt;/em&gt; adds a &lt;a href=&#34;http://trac.osgeo.org/postgis/wiki/UsersWikiTopoGeometry&#34;&gt;&lt;em&gt;TopoGeometry&lt;/em&gt;&lt;/a&gt; data type for use wherever you would normally use a &lt;em&gt;Geometry&lt;/em&gt; type, except the former will be defined by references to primitive, &lt;span style=&#34;text-decoration: underline;&#34;&gt;shared&lt;/span&gt;, topological components.&lt;/p&gt;
&lt;p&gt;The work on &lt;em&gt;SQL/MM topology&lt;/em&gt; for &lt;em&gt;PostGIS 2.0&lt;/em&gt; was mainly funded by the &lt;a href=&#34;http://www.regione.toscana.it/territorio/cartografia&#34; title=&#34;SITA, former SIGTA&#34;&gt;Land Management department of the Tuscany Region&lt;/a&gt; as part of a larger project aimed at enhancing effectiveness of &lt;a href=&#34;http://www.gnu.org/philosophy/free-sw.html&#34;&gt;free software&lt;/a&gt; tools already in use within the institution for the management of the topographic database (chapeau!).&lt;/p&gt;
&lt;p&gt;But more work is needed to make it easier to convert your layers to topological layers, your &lt;a href=&#34;http://trac.osgeo.org/postgis/ticket/1017&#34; title=&#34;Geometry to TopoGeometry convertion ticket&#34;&gt;&lt;em&gt;Geometries&lt;/em&gt; to &lt;em&gt;TopoGeometries&lt;/em&gt;&lt;/a&gt;. Because I know you want to &lt;a href=&#34;http://postgis.refractions.net/pipermail/postgis-users/2010-February/025842.html&#34;&gt;generalize your vectors in a topologically consistent way&lt;/a&gt;, don’t you ? And you want to edit the boundaries just once. And do you want to waste all that space for your &lt;a href=&#34;http://trac.osgeo.org/postgis/ticket/1215&#34; title=&#34;ST_DelaunayTriangles&#34;&gt;triangles&lt;/a&gt; ?&lt;/p&gt;
&lt;p&gt;Feature freeze for 2.0 will be by the end of November. &lt;a href=&#34;mailto:strk@kbt.io&#34;&gt;Drop a note&lt;/a&gt; ASAP if you’d like to help with getting the enhanced &lt;em&gt;TopoGeometry&lt;/em&gt; constructor shipped with it.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>GEOS 3.3.1 released</title>
      <link>https://strk.kbt.io/blog/2011/09/27/geos-3-3-1-released/</link>
      <pubDate>Tue, 27 Sep 2011 16:44:22 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2011/09/27/geos-3-3-1-released/</guid>
      <description>&lt;p&gt;The first &lt;em&gt;bugfix&lt;/em&gt; release in the 3.3 branch of &lt;a href=&#34;https://strk.kbt.io/projects/geos/&#34;&gt;GEOS&lt;/a&gt; was released today.&lt;/p&gt;
&lt;p&gt;Anyone running 3.3.0 is recommended to upgrade. Changes can be read &lt;a href=&#34;http://trac.osgeo.org/geos/browser/tags/3.3.1/NEWS&#34;&gt;here&lt;/a&gt;, package can be downloaded &lt;a href=&#34;http://download.osgeo.org/geos/geos-3.3.1.tar.bz2&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;By the way… did you try the PHP binding yet ? Configure with &lt;code&gt;--enable-php&lt;/code&gt; to take a look !&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Hack fever 2 : super mario sound</title>
      <link>https://strk.kbt.io/blog/2011/09/07/hack-fever-2-super-mario-sound/</link>
      <pubDate>Wed, 07 Sep 2011 13:52:13 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2011/09/07/hack-fever-2-super-mario-sound/</guid>
      <description>&lt;p&gt;I was supposed to leave for holidays on August 1st, but a summer fever held me back.&lt;/p&gt;
&lt;p&gt;As it became &lt;a href=&#34;https://strk.kbt.io/blog/2010/09/24/hack-fever/&#34;&gt;traditional&lt;/a&gt;, I took the chance to do some &lt;a href=&#34;https://strk.kbt.io/projects/gnash/index.html&#34;&gt;Gnash&lt;/a&gt; hacking, approaching a &lt;a href=&#34;https://savannah.gnu.org/bugs/?33888&#34;&gt;bug&lt;/a&gt; that made playing Super Mario Bros unpleasant. The mario sound didn’t stop on game over thus overlapping with the new sound started for the new game. Annoying.&lt;/p&gt;
&lt;div
  style=&#34;text-align: center&#34;
&gt;
&lt;img
  class=&#34;aligncenter size-full wp-image-205&#34;
  title=&#34;super mario&#34;
  src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2011/09/mario2.png&#34;
  alt=&#34;Super Mario&#34;
  width=&#34;368&#34; height=&#34;288&#34;
/&gt;
&lt;/div&gt;
&lt;p&gt;After some research the help came from &lt;strong&gt;Jan Flanders&lt;/strong&gt;, an usual attender of the &lt;a href=&#34;irc://irc.freenode.net/#gnash&#34;&gt;#gnash&lt;/a&gt; IRC channel. He pointed out that calling &lt;em&gt;.stop()&lt;/em&gt; against an unattached &lt;em&gt;Sound&lt;/em&gt; object should stop &lt;em&gt;all&lt;/em&gt; playing event sounds. It took a couple of days from there to an &lt;a href=&#34;http://git.savannah.gnu.org/cgit/gnash.git/commit/?id=2cba2bac31734e1c33465c0cf929f29d5d226ac3&#34;&gt;automated testcase and a fix&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can now &lt;strong&gt;Enjoy Your Mushrooms&lt;/strong&gt; !&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Getting just the tip of a remote git branch</title>
      <link>https://strk.kbt.io/blog/2011/06/07/getting-just-the-tip-of-a-remote-git-branch/</link>
      <pubDate>Tue, 07 Jun 2011 16:50:11 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2011/06/07/getting-just-the-tip-of-a-remote-git-branch/</guid>
      <description>&lt;p&gt;As projects move their code under &lt;a href=&#34;http://git-scm.com/&#34;&gt;git&lt;/a&gt; control, people get frustrated about being unable to do most basic operations they are used to perform with &lt;em&gt;SVN&lt;/em&gt; or &lt;em&gt;CVS&lt;/em&gt;. That’s a fact, so let’s see if I can relief some pain by sharing what I know or learn as I crawl the learning curve myself.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://strk.kbt.io/blog/2011/05/30/software-libero-tecnologie-partecipative/&#34;&gt;Yesterday&lt;/a&gt; I’ve met with &lt;a href=&#34;http://wiki.osgeo.org/wiki/Markus_Neteler&#34;&gt;Markus Neteler&lt;/a&gt; and he was complaining about being unable to checkout the release branch of &lt;a href=&#34;http://qgis.org/&#34;&gt;QuantumGIS&lt;/a&gt; without filling up his laptop hard drive. He got me curious, so here are some numbers and a recipe.&lt;/p&gt;
&lt;p&gt;An &lt;strong&gt;SVN checkout&lt;/strong&gt; as of April 30  is &lt;strong&gt;281&lt;/strong&gt; Mb in size, &lt;strong&gt;1&lt;/strong&gt; of which being the .svn directory.&lt;/p&gt;
&lt;p&gt;A &lt;strong&gt;full git clone&lt;/strong&gt; at time of writing (June 7) is &lt;strong&gt;330&lt;/strong&gt; Mb  in size, &lt;strong&gt;200&lt;/strong&gt; of which being the .git database and  &lt;strong&gt;130&lt;/strong&gt; being the working copy (the “checkout”).&lt;/p&gt;
&lt;p&gt;A full git clone contains &lt;strong&gt;all the data&lt;/strong&gt; available in the original repository. Once you get the clone, you have &lt;strong&gt;all the branches&lt;/strong&gt; and &lt;strong&gt;all the history&lt;/strong&gt;. ****no need for any more bandwidth.&lt;/p&gt;
&lt;p&gt;But Markus was only interested in &lt;em&gt;a single branch&lt;/em&gt;, not the whole set, and he wanted &lt;em&gt;no history&lt;/em&gt; either. So he could cloned just the objects referenced by the commit known as the &lt;em&gt;release-1_7_0&lt;/em&gt; branch and no further parents (back history). Here’s how you do:&lt;/p&gt;
&lt;pre&gt;&lt;span style=&#34;font-family: Consolas, Monaco, &#39;Courier New&#39;, Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;&#34;&gt; git clone --depth 1 --branch release-1_7_0 \
           git://github.com/qgis/Quantum-GIS.git&lt;/span&gt;&lt;/pre&gt;
&lt;div&gt;
  The resulting &lt;em&gt;shallow&lt;/em&gt; repository (the .git directory) is &lt;strong&gt;110 &lt;/strong&gt;MB in size. Add &lt;strong&gt;133 &lt;/strong&gt;MB of working directory (yes, &lt;em&gt;release-1_7_0&lt;/em&gt; is &lt;strong&gt;3&lt;/strong&gt; MB bigger than&amp;nbsp;&lt;em&gt;master&lt;/em&gt;) for a total of &lt;strong&gt;243&lt;/strong&gt; MB disk space used.
&lt;/div&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
  &lt;strong&gt;NOTES&lt;/strong&gt;:
&lt;/div&gt;
&lt;div&gt;
  &lt;ol&gt;
    &lt;li&gt;
      A &lt;em&gt;shallow&lt;/em&gt; repository (one with short history) cannot be further cloned, but here are no problems &lt;em&gt;pulling&lt;/em&gt; updates from the &lt;em&gt;origin&lt;/em&gt; nor producing &lt;em&gt;patches&lt;/em&gt; or &lt;em&gt;pushing&lt;/em&gt; changes.
    &lt;/li&gt;
    &lt;li&gt;
      If you don&amp;#8217;t know in advance the name of the branch you can query it from the remote repository using &lt;em&gt;git ls-remote&lt;/em&gt;
    &lt;/li&gt;
    &lt;li&gt;
      Every git command has a manual page in the form: git-command (ie: man git-ls-remote)
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;span style=&#34;font-family: Consolas, Monaco, &#39;Courier New&#39;, Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;&#34;&gt; &lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
  Happy learning !
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>GEOS 3.3.0</title>
      <link>https://strk.kbt.io/blog/2011/05/31/geos-3-3-0/</link>
      <pubDate>Tue, 31 May 2011 07:57:22 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2011/05/31/geos-3-3-0/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://strk.kbt.io/projects/geos&#34;&gt;GEOS&lt;/a&gt; 3.3.0 is out: &lt;a href=&#34;http://download.osgeo.org/geos/geos-3.3.0.tar.bz2&#34;&gt;http://download.osgeo.org/geos/geos-3.3.0.tar.bz2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This release introduces a fair amount of new C-API interfaces and a brand new &lt;strong&gt;PHP binding&lt;/strong&gt;. Full details in the NEWS file: &lt;a href=&#34;http://trac.osgeo.org/geos/browser/tags/3.3.0/NEWS&#34;&gt;http://trac.osgeo.org/geos/browser/tags/3.3.0/NEWS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As with any release since 3.0.0 there is &lt;strong&gt;complete binary compatibility&lt;/strong&gt; with clients linked against the C-API. These include, but are not limited to, &lt;a href=&#34;https://strk.kbt.io/projects/postgis&#34;&gt;PostGIS&lt;/a&gt;. For a list of known clients: &lt;a href=&#34;http://trac.osgeo.org/geos/wiki/Applications&#34;&gt;http://trac.osgeo.org/geos/wiki/Applications&lt;/a&gt; (add yours, if not already listed!)&lt;/p&gt;
&lt;p&gt;GEOS is a C++ port of the &lt;a href=&#34;http://tsusiatsoftware.net/jts/main.html&#34;&gt;JTS Topology Suite&lt;/a&gt;. This release targets version 1.12 of the library, but doesn’t reach full feature parity yet. &lt;strong&gt;Missing&lt;/strong&gt; JTS &lt;strong&gt;functionalities&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Densifier class&lt;/li&gt;
&lt;li&gt;Geometric similarity detection package (HausdorffSimilarityMeasure, AreaSimilarityMeasure)&lt;/li&gt;
&lt;li&gt;MinimumDiameter.getMiminumRectangle()&lt;/li&gt;
&lt;li&gt;Triangulation API&lt;/li&gt;
&lt;li&gt;VoronoiDiagramBuilder&lt;/li&gt;
&lt;li&gt;createSquircle and createSuperCircle in GeometricShapeFactory&lt;/li&gt;
&lt;li&gt;MinimumClearance class&lt;/li&gt;
&lt;li&gt;nearestNeighbours method to STRtree&lt;/li&gt;
&lt;li&gt;RandomPointsBuilder / RandomPointsInGridBuilder&lt;/li&gt;
&lt;li&gt;KochSnowflakeBuilder&lt;/li&gt;
&lt;li&gt;SierpinksiCarpetBuilder&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you’d like to &lt;strong&gt;sponsor development&lt;/strong&gt; of any of the above items (or others) for next feature release of GEOS (3.4.0) please drop me a note.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Software libero e tecnologie partecipative</title>
      <link>https://strk.kbt.io/blog/2011/05/30/software-libero-tecnologie-partecipative/</link>
      <pubDate>Mon, 30 May 2011 09:06:08 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2011/05/30/software-libero-tecnologie-partecipative/</guid>
      <description>&lt;p&gt;Lunedi’ &lt;strong&gt;6 Giugno&lt;/strong&gt; 2011 alle &lt;strong&gt;20:30&lt;/strong&gt; presso la sede dell’ associazione &lt;a href=&#34;http://www.cubibi.it&#34;&gt;Cubibi’&lt;/a&gt; di Ispra si terra’ un’ incontro aperto sul &lt;a href=&#34;http://it.wikipedia.org/wiki/Software_Libero&#34;&gt;software libero&lt;/a&gt; e le &lt;strong&gt;tecnologie partecipative&lt;/strong&gt;.&lt;/p&gt;
&lt;p style=&#34;text-align: center;&#34;&gt;
  &lt;a href=&#34;https://strk.kbt.io/blog/wp-content/uploads/2011/05/Volantino6Giugno2011-small.png&#34;&gt;&lt;img class=&#34;size-full wp-image-144 aligncenter&#34; title=&#34;volantino&#34; src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2011/05/Volantino6Giugno2011-small.png&#34; alt=&#34;[ via Madonnina del Grappa, 40-48 - Ispra. 6 Giugno 2011 ore 20:30 ]&#34; width=&#34;421&#34; height=&#34;144&#34; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;L’ incontro e’ rivolto a tutti coloro che coltivano la propria &lt;strong&gt;curiosita’ come una risorsa&lt;/strong&gt; e vogliono scoprire qualcosa in piu’ sugli strumenti elettronici che mediano sempre piu’ le nostre attivita’ personali e sociali estendendone o limitandone le possibilita’, aiutando od ostacolando la nostra &lt;strong&gt;capacita’ di scelta&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: &lt;a href=&#34;https://strk.kbt.io/events/2011/06/06-IncontroSoftwareLiberoIspra/&#34;&gt;qui&lt;/a&gt; il materiale per stampare il volantino.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PostGIS / GEOS / MapServer with git</title>
      <link>https://strk.kbt.io/blog/2011/04/27/postgis-geos-mapserver-with-git/</link>
      <pubDate>Wed, 27 Apr 2011 21:07:53 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2011/04/27/postgis-geos-mapserver-with-git/</guid>
      <description>&lt;p&gt;I’ve setup git mirrors of PostGIS, GEOS and MapServer SVN repositories updated hourly. You can clone the git repositories and re-attach to the SVN ones with this simple script (untested):&lt;/p&gt;
&lt;pre&gt;for repo in postgis geos mapserver; do
  git clone git://github.com/strk/${repo}.git
  cd ${repo}
  git svn init http://svn.osgeo.org/${repo}/trunk
  git update-ref refs/remotes/git-svn refs/heads/master
  git svn fetch
  cd -
done
&lt;/pre&gt;
&lt;p&gt;After that you can run &lt;code&gt;git svn rebase&lt;/code&gt; to get changes from SVN or &lt;code&gt;git pull&lt;/code&gt; to get changes from GIT (may be one hour late)&lt;/p&gt;
&lt;p&gt;Happy hacking !&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Why Political Liberty Depends on Software Freedom More Than Ever</title>
      <link>https://strk.kbt.io/blog/2011/03/11/why-political-liberty-depends-on-software-freedom-more-than-ever/</link>
      <pubDate>Fri, 11 Mar 2011 10:03:10 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2011/03/11/why-political-liberty-depends-on-software-freedom-more-than-ever/</guid>
      <description>&lt;p&gt;I’ve spent a few days adding Italian subtitles to a video recording of the speech given by &lt;a href=&#34;http://en.wikipedia.org/wiki/Eben_Moglen&#34;&gt;Eben Moglen&lt;/a&gt; at &lt;a href=&#34;http://www.fosdem.org/2011/&#34;&gt;FOSDEM 2011&lt;/a&gt; about privacy, freedom and net neutrality.&lt;/p&gt;
&lt;p&gt;I would have liked to embed the video right here, but these advanced friendly systems make everything so… ehm… difficult !&lt;/p&gt;
&lt;p&gt;Well, &lt;a href=&#34;https://strk.kbt.io/video/eben_fosdem2011.html&#34;&gt;take a look&lt;/a&gt; at the simple version of it 🙂&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Hack Fever</title>
      <link>https://strk.kbt.io/blog/2010/09/24/hack-fever/</link>
      <pubDate>Fri, 24 Sep 2010 09:33:42 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2010/09/24/hack-fever/</guid>
      <description>&lt;p style=&#34;text-align: left;&#34;&gt;
  Got seasonal flu this week, forcing me home&amp;#8230; Nothing better for some &lt;a href=&#34;https://strk.kbt.io/projects/gnash/&#34;&gt;Gnash&lt;/a&gt; hacking !
&lt;/p&gt;
&lt;div
  style=&#34;text-align: center&#34;
&gt;
&lt;img
  class=&#34;aligncenter size-full wp-image-107&#34;
  title=&#34;hack fever&#34;
  src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2010/09/hackfever.png&#34;
  alt=&#34;&#34;
  width=&#34;206&#34; height=&#34;151&#34;
/&gt;
&lt;/div&gt;
&lt;p&gt;I had this &lt;a href=&#34;http://en.wikipedia.org/wiki/The_Cathedral_and_the_Bazaar&#34;&gt;itch to scratch&lt;/a&gt; for degradation of experience in playing the wonderful &lt;a href=&#34;http://www.ferryhalim.com/orisinal/g3/bells.htm&#34;&gt;Winterbells&lt;/a&gt; game.&lt;/p&gt;
&lt;p&gt;It started in June when I realized that Gnash-0.8.8 &lt;a href=&#34;https://savannah.gnu.org/bugs/index.php?30179&#34;&gt;could not start the game properly&lt;/a&gt; and was suspiciously slower than 0.8.7. In late July I put playback under &lt;a href=&#34;http://wiki.gnashdev.org/Profiling&#34;&gt;profile&lt;/a&gt; and &lt;a href=&#34;http://lists.gnu.org/archive/html/gnash-dev/2010-07/msg00094.html&#34;&gt;found out&lt;/a&gt; that the performance penalty was introduced by a &lt;a href=&#34;http://lists.gnu.org/archive/html/gnash-dev/2010-07/msg00000.html&#34;&gt;compatibility fix&lt;/a&gt; (property name case in SWF up to 6).&lt;/p&gt;
&lt;p&gt;So, with high temperature and kid at school, I resolved to do something about it: first I &lt;a href=&#34;http://git.savannah.gnu.org/cgit/gnash.git/commit/?id=fd450e3eac18be3b60d27ce81154c249a9771380&#34;&gt;fixed&lt;/a&gt; the startup problem, then I created an &lt;a href=&#34;http://git.savannah.gnu.org/cgit/gnash.git/log/?h=objecturi&#34;&gt;objecturi&lt;/a&gt; git branch to proof-test caching of lowercase property keys as a mechanism to improve lookups.&lt;/p&gt;
&lt;p&gt;Now it’s friday and flu is over, so I need to clean up and put the toys away.&lt;/p&gt;
&lt;p&gt;Luckly, we are talking about free  (as in &lt;strong&gt;freedom&lt;/strong&gt;) software, so it’s easy to find friends caring about the toys and happy to &lt;strong&gt;play togheter&lt;/strong&gt;! So I had a chat with &lt;a href=&#34;http://benjaminwolsey.de/&#34;&gt;Ben&lt;/a&gt; resulting in a &lt;a href=&#34;http://lists.gnu.org/archive/html/gnash-dev/2010-09/msg00031.html&#34;&gt;proper plan&lt;/a&gt;, and he agreed to go on playing some more and cleanup afterwards.&lt;/p&gt;
&lt;p&gt;Ain’t &lt;a href=&#34;http://www.gnu.org/philosophy/philosophy.html&#34;&gt;Free software&lt;/a&gt; wonderful ?&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Feed the bats</title>
      <link>https://strk.kbt.io/blog/2010/04/22/feed-the-bats/</link>
      <pubDate>Thu, 22 Apr 2010 20:28:14 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2010/04/22/feed-the-bats/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://strk.kbt.io/blog/2010/02/14/meet-the-bats/&#34;&gt;My bats&lt;/a&gt; are gone with the spring, leaving behind what looks like delicious food!&lt;/p&gt;
&lt;div style=&#34;text-align: center&#34;&gt;
&lt;img
  class=&#34;aligncenter size-full wp-image-100&#34;
  title=&#34;Tarma&#34;
  src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2010/04/P1040494.jpg&#34;
  alt=&#34;&#34;
  width=&#34;405&#34; height=&#34;433&#34;
/&gt;
&lt;/div&gt;
&lt;p&gt;These insects came out from who knows where and filled up the walls of our house.&lt;/p&gt;
&lt;p&gt;They do look like &lt;a href=&#34;http://en.wikipedia.org/wiki/Clothing_Moth&#34;&gt;Clothing Moths&lt;/a&gt; and probably are, but contrary to what wikipedia says they don’t seem to prefer low light as we often see them around light bulbs.&lt;/p&gt;
&lt;p&gt;This invasion is mining our will to remain in the house, which is a pity as there’s a wonderful garden out here and flowers are popping out on a daily basis :/&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>UNICODE from OSM to PGSQL (part 2)</title>
      <link>https://strk.kbt.io/blog/2010/04/05/unicode-from-osm-to-pgsql-part-2/</link>
      <pubDate>Mon, 05 Apr 2010 11:08:09 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2010/04/05/unicode-from-osm-to-pgsql-part-2/</guid>
      <description>&lt;p&gt;There is &lt;strong&gt;no problem&lt;/strong&gt; importing &lt;a href=&#34;http://www.openstreetmap.org&#34;&gt;OSM&lt;/a&gt; data into &lt;a href=&#34;http://www.postgresql.org&#34;&gt;PostgresSQL&lt;/a&gt; / &lt;a href=&#34;http://www.postgis.net&#34;&gt;PostGIS&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In &lt;a href=&#34;https://strk.kbt.io/blog/2010/04/04/unicode-from-osm-to-pgsql/&#34;&gt;part one&lt;/a&gt; of the article we’ve seen &lt;a href=&#34;http://download.geofabrik.de/osm/&#34;&gt;Geofabrik’s shapefiles&lt;/a&gt; having a text data truncation problem, but using &lt;a href=&#34;http://wiki.openstreetmap.org/wiki/Osm2pgsql&#34;&gt;osm2pgsql&lt;/a&gt; everything gets into an &lt;em&gt;UTF-8&lt;/em&gt; database without a failure.&lt;/p&gt;
&lt;p&gt;It’s as simple as:&lt;/p&gt;
&lt;pre&gt;$ osm2pgsql -l -c -S default.style africa.osm.bz2 -d osm&lt;/pre&gt;
&lt;p&gt;The &lt;em&gt;-l&lt;/em&gt; switch aks for keeping lat/long projection, &lt;em&gt;-c&lt;/em&gt; requests creation of the schema, &lt;em&gt;-d&lt;/em&gt; specifies the database to use. The &lt;em&gt;default.style&lt;/em&gt; file is a configuration specifying what to import and how; I used the default for the sake of this test.&lt;/p&gt;
&lt;p&gt;Resulting ralations:&lt;/p&gt;
&lt;pre&gt;Schema |        Name        |   Type
--------+--------------------+----------
 public | planet_osm_line    | table
 public | planet_osm_point   | table
 public | planet_osm_polygon | table
 public | planet_osm_roads   | table&lt;/pre&gt;
&lt;p&gt;And the way we’ve been using for testing has all characters:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://strk.kbt.io/blog/wp-content/uploads/2010/04/pgsql_planet_osm_way_4005333.png&#34;&gt;&lt;img class=&#34;aligncenter size-full wp-image-77&#34; title=&#34;pgsql_planet_osm_way_4005333&#34; src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2010/04/pgsql_planet_osm_way_4005333.png&#34; alt=&#34;full multibyte name of way 4005333&#34; width=&#34;518&#34; height=&#34;90&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Let’s see it in &lt;a href=&#34;http://www.qgis.org&#34; title=&#34;Quantum GIS&#34;&gt;Quantum GIS&lt;/a&gt;, compared with the one coming from the corrupted shapefile (which I’ve imported into postgis after hacking shp2pgsql to discard incomplete multibytes):&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://strk.kbt.io/blog/wp-content/uploads/2010/04/geofabrik_shapefile_vs_planet_osm.png&#34;&gt;&lt;img class=&#34;aligncenter size-full wp-image-79&#34; title=&#34;geofabrik_shapefile_vs_planet_osm&#34; src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2010/04/geofabrik_shapefile_vs_planet_osm.png&#34; alt=&#34;qgis screenshot&#34; width=&#34;334&#34; height=&#34;62&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The difference you may notice seems to be due to &lt;em&gt;left-to-right&lt;/em&gt; vs. &lt;em&gt;right-to-left&lt;/em&gt; orientation of the text. My terminal seems to ignore orientation, qgis doesn’t.&lt;/p&gt;
&lt;p&gt;Now, time to see if a &lt;em&gt;shapefile&lt;/em&gt; will be able to bear all that UNICODE. Let’s not do anything fancy, just dump the roads table using &lt;a href=&#34;http://postgis.refractions.net/docs/ch04.html#id2794258&#34;&gt;pgsql2shp&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;$ pgsql2shp osm planet_osm_roads&lt;/pre&gt;
&lt;p&gt;Pretty fast (slightly above 1 second system time, 8 secs real time). And here’s the generated shapefile dataset:&lt;/p&gt;
&lt;pre&gt;72979148 planet_osm_roads.shp
69555432 planet_osm_roads.dbf
  516268 planet_osm_roads.shx
     257 planet_osm_roads.prj&lt;/pre&gt;
&lt;p&gt;Do they have the full multibyte strings now ? Sure, &lt;a href=&#34;http://postgis.refractions.net/docs/ch04.html#shp2pgsql_usage&#34;&gt;shp2pgsql&lt;/a&gt; doesn’t complain anymore, and you can safely import into postgis again completing the round-trip. Only you have to specify input encoding &lt;em&gt;UTF-8&lt;/em&gt; as the new default encoding, as I pointed out in previous post, is that &lt;a href=&#34;http://trac.osgeo.org/postgis/browser/tags/1.5.1/loader/shp2pgsql-core.h#L73&#34;&gt;unmentionable one&lt;/a&gt;… So:&lt;/p&gt;
&lt;pre&gt;$ shp2pgsql -W UTF-8 planet_osm_roads planet_osm_roads_roundtrip | psql osm
...
$ psql osm -c &#39;select name from planet_osm_roads_roundtrip where osm_id = 4005333&#39;;
 Avenue des Nations Unies - شارع الأمم المتحدة&lt;/pre&gt;
&lt;p&gt;Also, we can open the shapefile itself with qgis and see how it looks:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://strk.kbt.io/blog/wp-content/uploads/2010/04/qgis_geofabrik_osm2pgsql.png&#34;&gt;&lt;img class=&#34;aligncenter size-full wp-image-85&#34; title=&#34;qgis_geofabrik_osm2pgsql&#34; src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2010/04/qgis_geofabrik_osm2pgsql.png&#34; alt=&#34;&#34; width=&#34;342&#34; height=&#34;82&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Green is the &lt;span style=&#34;color: #00ff00;&#34;&gt;pgsql2shp-exported shapefile&lt;/span&gt;, red is &lt;span style=&#34;color: #ff0000;&#34;&gt;osm2pgsql-imported planet osm&lt;/span&gt;, black is &lt;strong&gt;geofabrik-imported shapefile&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;All &lt;strong&gt;clean&lt;/strong&gt; and &lt;strong&gt;easy&lt;/strong&gt; 🙂&lt;/p&gt;
&lt;p&gt;Further excercises would include tweaking the &lt;em&gt;osm2pgsql&lt;/em&gt; style file and generally the import process to better select data of interest, properly &lt;a href=&#34;http://trac.osgeo.org/postgis/ticket/399&#34;&gt;clean geometry&lt;/a&gt; invalidities and taking care of incremental updates of the data.&lt;/p&gt;
&lt;p&gt;Good luck and &lt;strong&gt;happy hacking !&lt;/strong&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>UNICODE from OSM to PGSQL</title>
      <link>https://strk.kbt.io/blog/2010/04/04/unicode-from-osm-to-pgsql/</link>
      <pubDate>Sun, 04 Apr 2010 22:09:30 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2010/04/04/unicode-from-osm-to-pgsql/</guid>
      <description>&lt;p&gt;This week I’ve been presented with a problem importing &lt;a href=&#34;http://www.openstreetmap.org&#34; title=&#34;OpenStreetMap&#34;&gt;OpenStreetMap&lt;/a&gt; data of Africa  from &lt;a href=&#34;http://download.geofabrik.de/osm/&#34; title=&#34;GeoFabrik&#39;s shapefile export&#34;&gt;GeoFabrik’s shapefile export&lt;/a&gt; into a &lt;a href=&#34;http://www.postgresql.org&#34; title=&#34;PostgreSQL&#34;&gt;PostgreSQL&lt;/a&gt; / &lt;a href=&#34;http://www.postgis.net&#34; title=&#34;PostGIS&#34;&gt;PostGIS&lt;/a&gt; database.&lt;/p&gt;
&lt;p&gt;The problem consisted in a loss of information during the transport, resulting in wrongly encoded strings (road names) ending up in the db. This was during a feasibility study. So, is that feasible ? Let’s take a look.&lt;/p&gt;
&lt;p&gt;I downloaded the &lt;a href=&#34;http://download.geofabrik.de/osm/africa.shp.zip&#34;&gt;shapefiles&lt;/a&gt; and tried to import the &lt;em&gt;roads&lt;/em&gt; one using &lt;em&gt;shp2pgsql&lt;/em&gt; with no options, and here’s the result:&lt;/p&gt;
&lt;pre&gt;Unable to convert field value &#34;Place Othman Ibn Affane ساحة عثمان اِ&#34; to UTF-8:
iconv reports &#34;Invalid or incomplete multibyte or wide character&#34;&lt;/pre&gt;
&lt;p&gt;Why is shp2pgsql trying to convert, and from which encoding? When I left it, the default was to &lt;a href=&#34;http://trac.osgeo.org/postgis/browser/tags/1.1.7/loader/shp2pgsql.c#L85&#34;&gt;perform no conversion&lt;/a&gt; unless -W was given…&lt;/p&gt;
&lt;p&gt;Well, it turns out the default is now to convert from &lt;a href=&#34;http://trac.osgeo.org/postgis/browser/tags/1.5.1/loader/shp2pgsql-core.h#L73&#34;&gt;WINDOWS-1252&lt;/a&gt; encoding (&lt;strong&gt;why?&lt;/strong&gt;) and there no way to request no encoding at all (&lt;strong&gt;why?!&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;So I patched the loader to &lt;a href=&#34;http://trac.osgeo.org/postgis/changeset/5472&#34;&gt;give more informations&lt;/a&gt; about the encoding process and specified &lt;em&gt;UTF-8&lt;/em&gt; as source encoding_. Here’s the result_:&lt;/p&gt;
&lt;pre&gt;Unable to convert field value &#34;Avenue des Nations Unies - شارع الأمم &#34; from UTF-8 to UTF-8:
iconv reports &#34;Invalid argument&#34;&lt;/pre&gt;
&lt;p&gt;So it’s official: the &lt;em&gt;dbf&lt;/em&gt; file contains invalid data. The confusing error message (&lt;em&gt;Invalid argument&lt;/em&gt;) means the multibyte sequence is &lt;em&gt;incomplete&lt;/em&gt; rather than &lt;em&gt;invalid&lt;/em&gt; &lt;strong&gt;(EINVAL&lt;/strong&gt; errno).&lt;/p&gt;
&lt;p&gt;Adding more debugging code I can see that many many rows have values that look truncated, all ending with a single byte being either &amp;lt;&lt;strong&gt;D8&lt;/strong&gt;&amp;gt; or &amp;lt;&lt;strong&gt;D9&lt;/strong&gt;&amp;gt;.&lt;/p&gt;
&lt;p&gt;OpenOffice confirms the malformation (wanted an independent opinion on that just in case it was shapelib doing the truncation):&lt;/p&gt;
&lt;p style=&#34;text-align: center;&#34;&gt;
  &lt;a href=&#34;https://strk.kbt.io/blog/wp-content/uploads/2010/04/openoffice_osm_way_4005333.png&#34;&gt;&lt;img class=&#34;size-full wp-image-47 aligncenter&#34; title=&#34;openoffice_osm_way_4005333&#34; src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2010/04/openoffice_osm_way_4005333.png&#34; alt=&#34;OpenOffice shows the truncated multibyte value&#34; width=&#34;437&#34; height=&#34;54&#34; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Querying openstreetmap for &lt;a href=&#34;http://www.openstreetmap.org/browse/way/4005333&#34;&gt;way 4005333&lt;/a&gt; shows the full string, and the full string is also present in the .osm file &lt;a href=&#34;http://download.geofabrik.de/osm/africa.osm.bz2&#34;&gt;downloaded from geofabrik&lt;/a&gt;:&lt;/p&gt;
&lt;p style=&#34;text-align: center;&#34;&gt;
  &lt;a href=&#34;https://strk.kbt.io/blog/wp-content/uploads/2010/04/planet_osm_way_4005333.png&#34;&gt;&lt;img class=&#34;size-full wp-image-54 aligncenter&#34; title=&#34;planet_osm_way_4005333&#34; src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2010/04/planet_osm_way_4005333.png&#34; alt=&#34;&lt;tag k=&#34;name&#34; v=&#34;Avenue des Nations Unies - شارع الأمم المتحدة&#34;/&gt;&amp;#8221; width=&amp;#8221;549&amp;#8243; height=&amp;#8221;23&amp;#8243;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;So the problem is only with the shapefile, not the OSM data itself, nor with postgis.&lt;/p&gt;
&lt;p&gt;Surely postgis loader could be tweaked to allow for a tolerance, in case anyone wants to import the truncated data anyway. In this specific case discarding the final partial multibyte string might be the best you can do as it’s a case of truncation as any other, only being multibyte it gives more problems than single-byte encoding.&lt;/p&gt;
&lt;p&gt;Timely enough someone submitted a &lt;a href=&#34;http://trac.osgeo.org/postgis/ticket/467&#34;&gt;patch&lt;/a&gt; aimed at exactly this kind of &lt;em&gt;tolerance&lt;/em&gt; handling. I’m going to see how well that’ll cope with this case.&lt;/p&gt;
&lt;p&gt;But bottom line is we do want the good data, so this problem is not solved until the data will be in the database, stepping by shapefiles (if possible) or directly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Next stop&lt;/strong&gt;: &lt;a href=&#34;http://wiki.openstreetmap.org/wiki/Osm2pgsql&#34;&gt;osm2pgsql&lt;/a&gt; -&amp;gt; &lt;a href=&#34;https://strk.kbt.io/blog/2010/04/05/unicode-from-osm-to-pgsql-part-2/&#34;&gt;go there&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Meet the bats</title>
      <link>https://strk.kbt.io/blog/2010/02/14/meet-the-bats/</link>
      <pubDate>Sun, 14 Feb 2010 10:34:31 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/2010/02/14/meet-the-bats/</guid>
      <description>&lt;p style=&#34;text-align:center;&#34;&gt;
  &lt;a href=&#34;https://strk.kbt.io/blog/wp-content/uploads/2010/02/sittingroom.jpg&#34;&gt;&lt;img class=&#34;aligncenter size-full wp-image-12&#34; title=&#34;Bat flying in the sitting room&#34; src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2010/02/sittingroom.jpg&#34; alt=&#34;Batty flying in the sitting room&#34; width=&#34;289&#34; height=&#34;192&#34; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Since I moved in a &lt;strong&gt;new house&lt;/strong&gt; I got to know &lt;strong&gt;bats&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Could be due to the fact the house was inhabitated for some time. Thing is, every now and then a bat or two come out from who-knows-where and start flying around the sitting room.&lt;/p&gt;
&lt;p&gt;First time we met it was at late night. &lt;a href=&#34;http://diarte.wordpress.com&#34; title=&#34;Diana&#34;&gt;Diana&lt;/a&gt; woke me up scared. &lt;em&gt;“What’s that thing flying around?!”&lt;/em&gt; It took a lot of time and cold before we succeeded at sending it out the window. I was surprised how few intentions he had to &lt;em&gt;get out&lt;/em&gt;. Wintertime. &lt;strong&gt;Very&lt;/strong&gt; cold. We surely didn’t keep the windows open during the day. Where did that bat come from ?&lt;/p&gt;
&lt;p&gt;We &lt;strong&gt;left the house&lt;/strong&gt; for christmas/new-year and when we came back &lt;strong&gt;two&lt;/strong&gt; bats were flying in the sitting room. This time we’ve been nicer. Also the kid was happy to see them (she’s always wanted pets). This time, they also sometime stopped flying and took some rest against a wall. Finally they disappeared (again after damn cold entering the house).&lt;/p&gt;
&lt;p&gt;Then it happened again after leaving the house for jusr a few hours. This time I didn’t handle to let the bat out, but he disappeared anyway. God knows where. We tried to find him looking in every place of the house with no luck. &lt;em&gt;“Well, we’ll see tomorrow”&lt;/em&gt;. Gone sleeping. The day after, while I was alone in the house, silently tapping on the computer keyboard, light wings noise I’ve heard, then not much later the bat showed up again flying in circle. This time I took the chance to take some pictures.&lt;/p&gt;
&lt;p style=&#34;text-align:center;&#34;&gt;
  &lt;a href=&#34;https://strk.kbt.io/blog/wp-content/uploads/2010/02/flyingbat.jpg&#34;&gt;&lt;img class=&#34;aligncenter size-full wp-image-6&#34; title=&#34;Bat flying near the window&#34; src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2010/02/flyingbat.jpg&#34; alt=&#34;Flying bat&#34; width=&#34;142&#34; height=&#34;135&#34; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;The bat didn’t fly away when I tried to pick him with my hands (and a blanket) after it took a rest on the window curtain. So I took the chance to take more pictures, then took him out the window and he flied from my hand.&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
  &lt;a href=&#34;https://strk.kbt.io/blog/wp-content/uploads/2010/02/batoncurtain.jpg&#34;&gt;&lt;img title=&#34;Bat on the window curtain&#34; src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2010/02/batoncurtain.jpg&#34; alt=&#34;bat on the curtain&#34; width=&#34;164&#34; height=&#34;179&#34; /&gt;&lt;/a&gt;&lt;a href=&#34;https://strk.kbt.io/blog/wp-content/uploads/2010/02/blanketbat.jpg&#34;&gt;&lt;img title=&#34;Bat in the blanket&#34; src=&#34;https://strk.kbt.io/blog/wp-content/uploads/2010/02/blanketbat.jpg&#34; alt=&#34;bat in the blanket&#34; width=&#34;164&#34; height=&#34;179&#34; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;I start to suspect there’s actually a colony in the house which we’ll need to learn co-habit with. Hopefully animal experts will have some advice for me. Anyone ?&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>About this blog</title>
      <link>https://strk.kbt.io/blog/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://strk.kbt.io/blog/about/</guid>
      <description>&lt;p&gt;This is my personal blog, converted from Wordpress to Hugo around in
May 2020, following a flood of spam and scarcity of RAM on my server.&lt;/p&gt;
&lt;p&gt;Comments might be harder to make now, but you can always send me an
&lt;a href=&#34;mailto:strk@kbt.io&#34;&gt;email&lt;/a&gt; and I&amp;rsquo;ll see how to add them manually.&lt;/p&gt;
&lt;p&gt;Beside this blog, which is managed via Hugo, the rest of my website
is fully done manually. Until I&amp;rsquo;ll migrate it all, you can find it
from the &lt;a href=&#34;https://strk.kbt.io&#34;&gt;root path&lt;/a&gt; on this domain.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>