This is a valid RSS feed.
This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.
<rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:planet="http://planetrdf.com ...
line 324, column 0: (30 occurrences) [help]
<p><a href=
line 324, column 0: (30 occurrences) [help]
<p><a href=
line 324, column 0: (30 occurrences) [help]
<p><a href=
line 324, column 0: (30 occurrences) [help]
<p><a href=
line 324, column 0: (30 occurrences) [help]
<p><a href=
line 324, column 0: (30 occurrences) [help]
<p><a href=
line 324, column 0: (30 occurrences) [help]
<p><a href=
line 324, column 0: (30 occurrences) [help]
<p><a href=
line 324, column 0: (30 occurrences) [help]
<p><a href=
line 324, column 0: (30 occurrences) [help]
<p><a href=
line 324, column 0: (30 occurrences) [help]
<p><a href=
line 324, column 0: (28 occurrences) [help]
<p><a href=
<p style="text-align:left;"></p>
"width: 460px" class="wp-caption aligncenter"><a href=
line 1978, column 0: (30 occurrences) [help]
<p><strong>Hakia</strong></p>
reboot fixed it. No idea).</p>
line 3766, column 0: (2 occurrences) [help]
<div class="tiled-gallery__col" style="flex-basis:50%;">
line 3766, column 0: (2 occurrences) [help]
<div class="tiled-gallery__col" style="flex-basis:50%;">
line 3766, column 0: (2 occurrences) [help]
<div class="tiled-gallery__col" style="flex-basis:50%;">
line 3766, column 0: (2 occurrences) [help]
<div class="tiled-gallery__col" style="flex-basis:50%;">
line 3766, column 0: (2 occurrences) [help]
<div class="tiled-gallery__col" style="flex-basis:50%;">
line 3766, column 0: (2 occurrences) [help]
<div class="tiled-gallery__col" style="flex-basis:50%;">
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:planet="http://planetrdf.com/ns/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel rdf:about="http://planetrdf.com/">
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:21:53.000000Z</dc:date>
<title>Planet RDF</title>
<link>http://planetrdf.com/</link>
<admin:generatorAgent rdf:resource="http://www.mnot.net/python/RSS.py?version=0.44"></admin:generatorAgent>
<description>It's triples all the way down</description>
<items><rdf:Seq>
<rdf:li rdf:resource="https://trueg.wordpress.com/2014/09/03/protecting-and-sharing-linked-data-with-virtuoso/"></rdf:li>
<rdf:li rdf:resource="https://trueg.wordpress.com/2014/09/02/sharing-files-with-whomever-is-simple/"></rdf:li>
<rdf:li rdf:resource="https://trueg.wordpress.com/2012/09/28/digitally-sign-emails-with-your-x-509-certificate-in-evolution/"></rdf:li>
<rdf:li rdf:resource="https://davidepalmisano.wordpress.com/2010/07/05/sameas4j-little-drops-of-water-make-the-mighty-ocean/"></rdf:li>
<rdf:li rdf:resource="https://davidepalmisano.wordpress.com/2010/02/20/fbk-any23-and-my-involvement-in-sindice-com/"></rdf:li>
<rdf:li rdf:resource="https://davidepalmisano.wordpress.com/2009/12/26/cheap-linked-data-identifiers/"></rdf:li>
<rdf:li rdf:resource="https://davidepalmisano.wordpress.com/2009/12/13/rww-2009-top-10-semantic-web-products-one-year-later/"></rdf:li>
<rdf:li rdf:resource="https://davidepalmisano.wordpress.com/2009/09/20/the-italian-political-activism-and-the-semantic-web/"></rdf:li>
<rdf:li rdf:resource="https://planb.nicecupoftea.org/2023/12/24/til-gifski/"></rdf:li>
<rdf:li rdf:resource="https://planb.nicecupoftea.org/2023/05/04/mayke-day-4-ttn-and-lorawan-til/"></rdf:li>
<rdf:li rdf:resource="https://planb.nicecupoftea.org/2022/05/19/time-squish/"></rdf:li>
<rdf:li rdf:resource="https://planb.nicecupoftea.org/2021/05/08/sparkfun-edge-macos-x-ftdi/"></rdf:li>
<rdf:li rdf:resource="https://planb.nicecupoftea.org/2020/12/03/esp32-m5stickc-https-websockets-and-slack/"></rdf:li>
<rdf:li rdf:resource="https://planb.nicecupoftea.org/2020/11/14/improved-simpler-presence-robot/"></rdf:li>
<rdf:li rdf:resource="https://planb.nicecupoftea.org/2020/10/24/libbybot-a-posable-remote-presence-bot-made-from-a-raspberry-pi-3-updates/"></rdf:li>
<rdf:li rdf:resource="https://industrial-inference.com/2019/09/12/knowledge-graphs-101/"></rdf:li>
<rdf:li rdf:resource="https://industrial-inference.com/2011/05/14/preparing-a-project-gutenberg-book-for-use-on-a-6-ereader/"></rdf:li>
<rdf:li rdf:resource="https://industrial-inference.com/2011/04/11/some-pictures-of-carlton-gardens/"></rdf:li>
<rdf:li rdf:resource="https://industrial-inference.com/2010/08/31/note-to-self-convert-utf-8-w-bom-to-ascii-wix-db-using-gnu-uconv/"></rdf:li>
<rdf:li rdf:resource="https://industrial-inference.com/2010/03/10/programming-with-petri-nets/"></rdf:li>
<rdf:li rdf:resource="https://industrial-inference.com/2009/12/08/quantum-reasoners-hold-key-to-future-web/"></rdf:li>
<rdf:li rdf:resource="https://industrial-inference.com/2009/11/13/semantic-overflow-highlights-i/"></rdf:li>
<rdf:li rdf:resource="https://industrial-inference.com/2009/10/27/www-semanticoverflow-com-the-web-2-0-qa-site-for-all-things-web-3-0/"></rdf:li>
<rdf:li rdf:resource="https://industrial-inference.com/2009/03/20/quote-of-the-day-chris-sells-on-cocktail-parties/"></rdf:li>
<rdf:li rdf:resource="https://industrial-inference.com/2009/02/27/australian-port-a-new-wmd/"></rdf:li>
<rdf:li rdf:resource="https://industrial-inference.com/2008/11/18/relational-modeling-not-as-we-know-it/"></rdf:li>
<rdf:li rdf:resource="https://industrial-inference.com/2008/11/14/patternmatching/"></rdf:li>
<rdf:li rdf:resource="https://industrial-inference.com/2008/09/23/object-orientation-not-as-we-know-it/"></rdf:li>
<rdf:li rdf:resource="https://industrial-inference.com/2008/09/15/new-resources-for-linqtordf/"></rdf:li>
<rdf:li rdf:resource="https://industrial-inference.com/2008/08/27/not-another-mapping-markup-language/"></rdf:li>
</rdf:Seq></items>
</channel>
<item rdf:about="https://trueg.wordpress.com/2014/09/03/protecting-and-sharing-linked-data-with-virtuoso/">
<dc:creator>Sebastian Trueg</dc:creator>
<dc:source>Semantic Desktop by Sebastian Trueg</dc:source>
<dc:relation>http://trueg.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>
<p><em><strong>Disclaimer</strong>: Many of the features presented
here are rather new and can not be found in  the
open-source version of Virtuoso.</em></p>
<p>Last time we saw <a title=
"Sharing Files With Whomever Is Simple" href=
"https://trueg.wordpress.com/2014/09/02/sharing-files-with-whomever-is-simple/">
how to share files and folders stored in the Virtuoso DAV
system</a>. Today we will protect and share data stored in
Virtuoso’s Triple Store – we will share RDF data.</p>
<p>Virtuoso is actually a quadruple-store which means each triple
lives in a named graph. In Virtuoso named graphs can be public or
private (in reality it is a bit more complex than that but this
view on things is sufficient for our purposes), public graphs being
readable and writable by anyone who has permission to read or write
in general, private graphs only being readable and writable by
administrators and those to which named graph permissions have been
granted. The latter case is what interests us today.</p>
<p>We will start by inserting some triples into a named
graph as <em>dba</em> – the master of the Virtuoso
universe:</p>
<p><a href=
"https://trueg.files.wordpress.com/2014/09/sparql1.png"><img data-attachment-id="914"
data-permalink=
"https://trueg.wordpress.com/2014/09/03/protecting-and-sharing-linked-data-with-virtuoso/sparql1/"
data-orig-file=
"https://trueg.files.wordpress.com/2014/09/sparql1.png"
data-orig-size="1256,826" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="Virtuoso Sparql Endpoint" data-image-description=
"" data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/sparql1.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/sparql1.png?w=676"
class="aligncenter size-medium wp-image-914" src=
"https://trueg.files.wordpress.com/2014/09/sparql1.png?w=300&h=197"
alt="Virtuoso Sparql Endpoint" width="300" height="197" srcset=
"https://trueg.files.wordpress.com/2014/09/sparql1.png?w=300 300w, https://trueg.files.wordpress.com/2014/09/sparql1.png?w=600 600w, https://trueg.files.wordpress.com/2014/09/sparql1.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p><a href=
"https://trueg.files.wordpress.com/2014/09/sparql2.png"><img data-attachment-id="915"
data-permalink=
"https://trueg.wordpress.com/2014/09/03/protecting-and-sharing-linked-data-with-virtuoso/sparql2/"
data-orig-file=
"https://trueg.files.wordpress.com/2014/09/sparql2.png"
data-orig-size="454,129" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="Sparql Result" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/sparql2.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/sparql2.png?w=454"
class="aligncenter size-medium wp-image-915" src=
"https://trueg.files.wordpress.com/2014/09/sparql2.png?w=300&h=85"
alt="Sparql Result" width="300" height="85" srcset=
"https://trueg.files.wordpress.com/2014/09/sparql2.png?w=300 300w, https://trueg.files.wordpress.com/2014/09/sparql2.png?w=150 150w, https://trueg.files.wordpress.com/2014/09/sparql2.png 454w"
sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>This graph is now public and can be queried by anyone. Since we
want to make it private we quickly need to change into a SQL
session since this part is typically performed by an application
rather than manually:</p>
<pre>$ isql-v localhost:1112 dba dba
Connected to OpenLink Virtuoso
Driver: 07.10.3211 OpenLink Virtuoso ODBC Driver
OpenLink Interactive SQL (Virtuoso), version 0.9849b.
Type HELP; for help and EXIT; to exit.
SQL> DB.DBA.RDF_GRAPH_GROUP_INS ('http://www.openlinksw.com/schemas/virtrdf#PrivateGraphs', 'urn:trueg:demo');
Done. -- 2 msec.</pre>
<p>Now our new named graph <code>urn:trueg:demo</code> is private
and its contents cannot be seen by anyone. We can easily test
this by logging out and trying to query the graph:</p>
<p><a href=
"https://trueg.files.wordpress.com/2014/09/sparql3.png"><img data-attachment-id="917"
data-permalink=
"https://trueg.wordpress.com/2014/09/03/protecting-and-sharing-linked-data-with-virtuoso/sparql3/"
data-orig-file=
"https://trueg.files.wordpress.com/2014/09/sparql3.png"
data-orig-size="1256,826" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="Sparql Query" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/sparql3.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/sparql3.png?w=676"
class="aligncenter size-medium wp-image-917" src=
"https://trueg.files.wordpress.com/2014/09/sparql3.png?w=300&h=197"
alt="Sparql Query" width="300" height="197" srcset=
"https://trueg.files.wordpress.com/2014/09/sparql3.png?w=300 300w, https://trueg.files.wordpress.com/2014/09/sparql3.png?w=600 600w, https://trueg.files.wordpress.com/2014/09/sparql3.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a><br />
<a href=
"https://trueg.files.wordpress.com/2014/09/sparql4.png"><img data-attachment-id="916"
data-permalink=
"https://trueg.wordpress.com/2014/09/03/protecting-and-sharing-linked-data-with-virtuoso/sparql4/"
data-orig-file=
"https://trueg.files.wordpress.com/2014/09/sparql4.png"
data-orig-size="1256,76" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="Sparql Query Result" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/sparql4.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/sparql4.png?w=676"
class="aligncenter size-medium wp-image-916" src=
"https://trueg.files.wordpress.com/2014/09/sparql4.png?w=300&h=18"
alt="Sparql Query Result" width="300" height="18" srcset=
"https://trueg.files.wordpress.com/2014/09/sparql4.png?w=300 300w, https://trueg.files.wordpress.com/2014/09/sparql4.png?w=600 600w, https://trueg.files.wordpress.com/2014/09/sparql4.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>But now we want to share the contents of this named graph with
someone. Like before we will use my LinkedIn account. This time,
however, we will not use a UI but Virtuoso’s RESTful ACL API to
create the necessary rules for sharing the named graph. The API
uses Turtle as its main input format. Thus, we will describe the
ACL rule used to share the contents of the named graph as
follows.</p>
<pre>@prefix acl: <http://www.w3.org/ns/auth/acl#> .
@prefix oplacl: <http://www.openlinksw.com/ontology/acl#> .
<#rule> a acl:Authorization ;
rdfs:label "Share Demo Graph with trueg's LinkedIn account" ;
acl:agent <http://www.linkedin.com/in/trueg> ;
acl:accessTo <urn:trueg:demo> ;
oplacl:hasAccessMode oplacl:Read ;
oplacl:hasScope oplacl:PrivateGraphs .</pre>
<p>Virtuoso makes use of the <a href=
"http://www.w3.org/ns/auth/acl#">ACL ontology proposed by the
W3C</a> and extends on it with several custom classes and
properties in the <a href=
"http://www.openlinksw.com/ontology/acl#">OpenLink ACL
Ontology</a>. Most of this little Turtle snippet should be obvious:
we create an Authorization resource which grants Read access to
<code>urn:trueg:demo</code> for agent <em><a href=
"http://www.linkedin.com/in/trueg" rel=
"nofollow">http://www.linkedin.com/in/trueg</a></em>. The only
tricky part is the scope. Virtuoso has the concept of ACL scopes
which group rules by their resource type. In this case the scope is
private graphs, another typical scope would be DAV resources.</p>
<p>Given that file <em>rule.ttl</em> contains the above
resource we can post the rule via the RESTful ACL API:</p>
<pre>
$ curl -X POST --data-binary @rule.ttl -H"Content-Type: text/turtle" -u dba:dba http://localhost:8890/acl/rules</pre>
<p>As a result we get the full rule resource including additional
properties added by the API.</p>
<p>Finally we will login using my LinkedIn identity and are granted
read access to the graph:</p>
<p><a href=
"https://trueg.files.wordpress.com/2014/09/sparql5.png"><img data-attachment-id="921"
data-permalink=
"https://trueg.wordpress.com/2014/09/03/protecting-and-sharing-linked-data-with-virtuoso/sparql5/"
data-orig-file=
"https://trueg.files.wordpress.com/2014/09/sparql5.png"
data-orig-size="590,361" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="SPARQL Endpoint Login" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/sparql5.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/sparql5.png?w=590"
class="aligncenter size-medium wp-image-921" src=
"https://trueg.files.wordpress.com/2014/09/sparql5.png?w=300&h=183"
alt="SPARQL Endpoint Login" width="300" height="183" srcset=
"https://trueg.files.wordpress.com/2014/09/sparql5.png?w=300 300w, https://trueg.files.wordpress.com/2014/09/sparql5.png?w=150 150w, https://trueg.files.wordpress.com/2014/09/sparql5.png 590w"
sizes="(max-width: 300px) 100vw, 300px" /></a><br />
<a href=
"https://trueg.files.wordpress.com/2014/09/sparql6.png"><img data-attachment-id="920"
data-permalink=
"https://trueg.wordpress.com/2014/09/03/protecting-and-sharing-linked-data-with-virtuoso/sparql6/"
data-orig-file=
"https://trueg.files.wordpress.com/2014/09/sparql6.png"
data-orig-size="459,532" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="sparql6" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/sparql6.png?w=259"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/sparql6.png?w=459"
class="aligncenter size-medium wp-image-920" src=
"https://trueg.files.wordpress.com/2014/09/sparql6.png?w=258&h=300"
alt="sparql6" width="258" height="300" srcset=
"https://trueg.files.wordpress.com/2014/09/sparql6.png?w=258 258w, https://trueg.files.wordpress.com/2014/09/sparql6.png?w=129 129w, https://trueg.files.wordpress.com/2014/09/sparql6.png 459w"
sizes="(max-width: 258px) 100vw, 258px" /></a><br />
<a href=
"https://trueg.files.wordpress.com/2014/09/sparql7.png"><img data-attachment-id="919"
data-permalink=
"https://trueg.wordpress.com/2014/09/03/protecting-and-sharing-linked-data-with-virtuoso/sparql7/"
data-orig-file=
"https://trueg.files.wordpress.com/2014/09/sparql7.png"
data-orig-size="1266,831" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="sparql7" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/sparql7.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/sparql7.png?w=676"
class="aligncenter size-medium wp-image-919" src=
"https://trueg.files.wordpress.com/2014/09/sparql7.png?w=300&h=196"
alt="sparql7" width="300" height="196" srcset=
"https://trueg.files.wordpress.com/2014/09/sparql7.png?w=300 300w, https://trueg.files.wordpress.com/2014/09/sparql7.png?w=597 597w, https://trueg.files.wordpress.com/2014/09/sparql7.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a><br />
<a href=
"https://trueg.files.wordpress.com/2014/09/sparql8.png"><img data-attachment-id="918"
data-permalink=
"https://trueg.wordpress.com/2014/09/03/protecting-and-sharing-linked-data-with-virtuoso/sparql8/"
data-orig-file=
"https://trueg.files.wordpress.com/2014/09/sparql8.png"
data-orig-size="1266,231" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="sparql8" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/sparql8.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/sparql8.png?w=676"
class="aligncenter size-medium wp-image-918" src=
"https://trueg.files.wordpress.com/2014/09/sparql8.png?w=300&h=54"
alt="sparql8" width="300" height="54" srcset=
"https://trueg.files.wordpress.com/2014/09/sparql8.png?w=300 300w, https://trueg.files.wordpress.com/2014/09/sparql8.png?w=296 296w, https://trueg.files.wordpress.com/2014/09/sparql8.png?w=592 592w, https://trueg.files.wordpress.com/2014/09/sparql8.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>We see all the original triples in the private graph. And as
before with DAV resources no local account is necessary to get
access to named graphs. Of course we can also grant write access,
use groups, etc.. But those are topics for another day.</p>
<h2>Technical Footnote</h2>
<p>Using ACLs with named graphs as described in this article
requires some basic configuration. The ACL system is disabled by
default. In order to enable it for the default application realm
(another topic for another day) the following SPARQL statement
needs to be executed as administrator:</p>
<pre>sparql
prefix oplacl: <http://www.openlinksw.com/ontology/acl#>
with <urn:virtuoso:val:config>
delete {
oplacl:DefaultRealm oplacl:hasDisabledAclScope oplacl:Query , oplacl:PrivateGraphs .
}
insert {
oplacl:DefaultRealm oplacl:hasEnabledAclScope oplacl:Query , oplacl:PrivateGraphs .
};</pre>
<p>This will enable ACLs for named graphs and SPARQL in general.
Finally the LinkedIn account from the example requires generic
SPARQL read permissions. The simplest approach is to just allow
anyone to SPARQL read:</p>
<pre>@prefix acl: <http://www.w3.org/ns/auth/acl#> .
@prefix oplacl: <http://www.openlinksw.com/ontology/acl#> .
<#rule> a acl:Authorization ;
rdfs:label "Allow Anyone to SPARQL Read" ;
acl:agentClass foaf:Agent ;
acl:accessTo <urn:virtuoso:access:sparql> ;
oplacl:hasAccessMode oplacl:Read ;
oplacl:hasScope oplacl:Query .</pre>
<p>I will explain these technical concepts in more detail in
another article.</p>
</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:21:48.000000Z</dc:date>
<title>Protecting And Sharing Linked Data With Virtuoso</title>
<link>https://trueg.wordpress.com/2014/09/03/protecting-and-sharing-linked-data-with-virtuoso/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>
<p><em><strong>Disclaimer</strong>: Many of the features presented
here are rather new and can not be found in  the
open-source version of Virtuoso.</em></p>
<p>Last time we saw <a title=
"Sharing Files With Whomever Is Simple" href=
"https://trueg.wordpress.com/2014/09/02/sharing-files-with-whomever-is-simple/">
how to share files and folders stored in the Virtuoso DAV
system</a>. Today we will protect and share data stored in
Virtuoso’s Triple Store – we will share RDF data.</p>
<p>Virtuoso is actually a quadruple-store which means each triple
lives in a named graph. In Virtuoso named graphs can be public or
private (in reality it is a bit more complex than that but this
view on things is sufficient for our purposes), public graphs being
readable and writable by anyone who has permission to read or write
in general, private graphs only being readable and writable by
administrators and those to which named graph permissions have been
granted. The latter case is what interests us today.</p>
<p>We will start by inserting some triples into a named
graph as <em>dba</em> – the master of the Virtuoso
universe:</p>
<p><a href=
"https://trueg.files.wordpress.com/2014/09/sparql1.png"><img data-attachment-id="914"
data-permalink=
"https://trueg.wordpress.com/2014/09/03/protecting-and-sharing-linked-data-with-virtuoso/sparql1/"
data-orig-file=
"https://trueg.files.wordpress.com/2014/09/sparql1.png"
data-orig-size="1256,826" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="Virtuoso Sparql Endpoint" data-image-description=
"" data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/sparql1.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/sparql1.png?w=676"
class="aligncenter size-medium wp-image-914" src=
"https://trueg.files.wordpress.com/2014/09/sparql1.png?w=300&h=197"
alt="Virtuoso Sparql Endpoint" width="300" height="197" srcset=
"https://trueg.files.wordpress.com/2014/09/sparql1.png?w=300 300w, https://trueg.files.wordpress.com/2014/09/sparql1.png?w=600 600w, https://trueg.files.wordpress.com/2014/09/sparql1.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p><a href=
"https://trueg.files.wordpress.com/2014/09/sparql2.png"><img data-attachment-id="915"
data-permalink=
"https://trueg.wordpress.com/2014/09/03/protecting-and-sharing-linked-data-with-virtuoso/sparql2/"
data-orig-file=
"https://trueg.files.wordpress.com/2014/09/sparql2.png"
data-orig-size="454,129" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="Sparql Result" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/sparql2.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/sparql2.png?w=454"
class="aligncenter size-medium wp-image-915" src=
"https://trueg.files.wordpress.com/2014/09/sparql2.png?w=300&h=85"
alt="Sparql Result" width="300" height="85" srcset=
"https://trueg.files.wordpress.com/2014/09/sparql2.png?w=300 300w, https://trueg.files.wordpress.com/2014/09/sparql2.png?w=150 150w, https://trueg.files.wordpress.com/2014/09/sparql2.png 454w"
sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>This graph is now public and can be queried by anyone. Since we
want to make it private we quickly need to change into a SQL
session since this part is typically performed by an application
rather than manually:</p>
<pre>$ isql-v localhost:1112 dba dba
Connected to OpenLink Virtuoso
Driver: 07.10.3211 OpenLink Virtuoso ODBC Driver
OpenLink Interactive SQL (Virtuoso), version 0.9849b.
Type HELP; for help and EXIT; to exit.
SQL> DB.DBA.RDF_GRAPH_GROUP_INS ('http://www.openlinksw.com/schemas/virtrdf#PrivateGraphs', 'urn:trueg:demo');
Done. -- 2 msec.</pre>
<p>Now our new named graph <code>urn:trueg:demo</code> is private
and its contents cannot be seen by anyone. We can easily test
this by logging out and trying to query the graph:</p>
<p><a href=
"https://trueg.files.wordpress.com/2014/09/sparql3.png"><img data-attachment-id="917"
data-permalink=
"https://trueg.wordpress.com/2014/09/03/protecting-and-sharing-linked-data-with-virtuoso/sparql3/"
data-orig-file=
"https://trueg.files.wordpress.com/2014/09/sparql3.png"
data-orig-size="1256,826" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="Sparql Query" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/sparql3.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/sparql3.png?w=676"
class="aligncenter size-medium wp-image-917" src=
"https://trueg.files.wordpress.com/2014/09/sparql3.png?w=300&h=197"
alt="Sparql Query" width="300" height="197" srcset=
"https://trueg.files.wordpress.com/2014/09/sparql3.png?w=300 300w, https://trueg.files.wordpress.com/2014/09/sparql3.png?w=600 600w, https://trueg.files.wordpress.com/2014/09/sparql3.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a><br />
<a href=
"https://trueg.files.wordpress.com/2014/09/sparql4.png"><img data-attachment-id="916"
data-permalink=
"https://trueg.wordpress.com/2014/09/03/protecting-and-sharing-linked-data-with-virtuoso/sparql4/"
data-orig-file=
"https://trueg.files.wordpress.com/2014/09/sparql4.png"
data-orig-size="1256,76" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="Sparql Query Result" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/sparql4.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/sparql4.png?w=676"
class="aligncenter size-medium wp-image-916" src=
"https://trueg.files.wordpress.com/2014/09/sparql4.png?w=300&h=18"
alt="Sparql Query Result" width="300" height="18" srcset=
"https://trueg.files.wordpress.com/2014/09/sparql4.png?w=300 300w, https://trueg.files.wordpress.com/2014/09/sparql4.png?w=600 600w, https://trueg.files.wordpress.com/2014/09/sparql4.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>But now we want to share the contents of this named graph with
someone. Like before we will use my LinkedIn account. This time,
however, we will not use a UI but Virtuoso’s RESTful ACL API to
create the necessary rules for sharing the named graph. The API
uses Turtle as its main input format. Thus, we will describe the
ACL rule used to share the contents of the named graph as
follows.</p>
<pre>@prefix acl: <http://www.w3.org/ns/auth/acl#> .
@prefix oplacl: <http://www.openlinksw.com/ontology/acl#> .
<#rule> a acl:Authorization ;
rdfs:label "Share Demo Graph with trueg's LinkedIn account" ;
acl:agent <http://www.linkedin.com/in/trueg> ;
acl:accessTo <urn:trueg:demo> ;
oplacl:hasAccessMode oplacl:Read ;
oplacl:hasScope oplacl:PrivateGraphs .</pre>
<p>Virtuoso makes use of the <a href=
"http://www.w3.org/ns/auth/acl#">ACL ontology proposed by the
W3C</a> and extends on it with several custom classes and
properties in the <a href=
"http://www.openlinksw.com/ontology/acl#">OpenLink ACL
Ontology</a>. Most of this little Turtle snippet should be obvious:
we create an Authorization resource which grants Read access to
<code>urn:trueg:demo</code> for agent <em><a href=
"http://www.linkedin.com/in/trueg" rel=
"nofollow">http://www.linkedin.com/in/trueg</a></em>. The only
tricky part is the scope. Virtuoso has the concept of ACL scopes
which group rules by their resource type. In this case the scope is
private graphs, another typical scope would be DAV resources.</p>
<p>Given that file <em>rule.ttl</em> contains the above
resource we can post the rule via the RESTful ACL API:</p>
<pre>
$ curl -X POST --data-binary @rule.ttl -H"Content-Type: text/turtle" -u dba:dba http://localhost:8890/acl/rules</pre>
<p>As a result we get the full rule resource including additional
properties added by the API.</p>
<p>Finally we will login using my LinkedIn identity and are granted
read access to the graph:</p>
<p><a href=
"https://trueg.files.wordpress.com/2014/09/sparql5.png"><img data-attachment-id="921"
data-permalink=
"https://trueg.wordpress.com/2014/09/03/protecting-and-sharing-linked-data-with-virtuoso/sparql5/"
data-orig-file=
"https://trueg.files.wordpress.com/2014/09/sparql5.png"
data-orig-size="590,361" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="SPARQL Endpoint Login" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/sparql5.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/sparql5.png?w=590"
class="aligncenter size-medium wp-image-921" src=
"https://trueg.files.wordpress.com/2014/09/sparql5.png?w=300&h=183"
alt="SPARQL Endpoint Login" width="300" height="183" srcset=
"https://trueg.files.wordpress.com/2014/09/sparql5.png?w=300 300w, https://trueg.files.wordpress.com/2014/09/sparql5.png?w=150 150w, https://trueg.files.wordpress.com/2014/09/sparql5.png 590w"
sizes="(max-width: 300px) 100vw, 300px" /></a><br />
<a href=
"https://trueg.files.wordpress.com/2014/09/sparql6.png"><img data-attachment-id="920"
data-permalink=
"https://trueg.wordpress.com/2014/09/03/protecting-and-sharing-linked-data-with-virtuoso/sparql6/"
data-orig-file=
"https://trueg.files.wordpress.com/2014/09/sparql6.png"
data-orig-size="459,532" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="sparql6" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/sparql6.png?w=259"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/sparql6.png?w=459"
class="aligncenter size-medium wp-image-920" src=
"https://trueg.files.wordpress.com/2014/09/sparql6.png?w=258&h=300"
alt="sparql6" width="258" height="300" srcset=
"https://trueg.files.wordpress.com/2014/09/sparql6.png?w=258 258w, https://trueg.files.wordpress.com/2014/09/sparql6.png?w=129 129w, https://trueg.files.wordpress.com/2014/09/sparql6.png 459w"
sizes="(max-width: 258px) 100vw, 258px" /></a><br />
<a href=
"https://trueg.files.wordpress.com/2014/09/sparql7.png"><img data-attachment-id="919"
data-permalink=
"https://trueg.wordpress.com/2014/09/03/protecting-and-sharing-linked-data-with-virtuoso/sparql7/"
data-orig-file=
"https://trueg.files.wordpress.com/2014/09/sparql7.png"
data-orig-size="1266,831" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="sparql7" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/sparql7.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/sparql7.png?w=676"
class="aligncenter size-medium wp-image-919" src=
"https://trueg.files.wordpress.com/2014/09/sparql7.png?w=300&h=196"
alt="sparql7" width="300" height="196" srcset=
"https://trueg.files.wordpress.com/2014/09/sparql7.png?w=300 300w, https://trueg.files.wordpress.com/2014/09/sparql7.png?w=597 597w, https://trueg.files.wordpress.com/2014/09/sparql7.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a><br />
<a href=
"https://trueg.files.wordpress.com/2014/09/sparql8.png"><img data-attachment-id="918"
data-permalink=
"https://trueg.wordpress.com/2014/09/03/protecting-and-sharing-linked-data-with-virtuoso/sparql8/"
data-orig-file=
"https://trueg.files.wordpress.com/2014/09/sparql8.png"
data-orig-size="1266,231" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="sparql8" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/sparql8.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/sparql8.png?w=676"
class="aligncenter size-medium wp-image-918" src=
"https://trueg.files.wordpress.com/2014/09/sparql8.png?w=300&h=54"
alt="sparql8" width="300" height="54" srcset=
"https://trueg.files.wordpress.com/2014/09/sparql8.png?w=300 300w, https://trueg.files.wordpress.com/2014/09/sparql8.png?w=296 296w, https://trueg.files.wordpress.com/2014/09/sparql8.png?w=592 592w, https://trueg.files.wordpress.com/2014/09/sparql8.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>We see all the original triples in the private graph. And as
before with DAV resources no local account is necessary to get
access to named graphs. Of course we can also grant write access,
use groups, etc.. But those are topics for another day.</p>
<h2>Technical Footnote</h2>
<p>Using ACLs with named graphs as described in this article
requires some basic configuration. The ACL system is disabled by
default. In order to enable it for the default application realm
(another topic for another day) the following SPARQL statement
needs to be executed as administrator:</p>
<pre>sparql
prefix oplacl: <http://www.openlinksw.com/ontology/acl#>
with <urn:virtuoso:val:config>
delete {
oplacl:DefaultRealm oplacl:hasDisabledAclScope oplacl:Query , oplacl:PrivateGraphs .
}
insert {
oplacl:DefaultRealm oplacl:hasEnabledAclScope oplacl:Query , oplacl:PrivateGraphs .
};</pre>
<p>This will enable ACLs for named graphs and SPARQL in general.
Finally the LinkedIn account from the example requires generic
SPARQL read permissions. The simplest approach is to just allow
anyone to SPARQL read:</p>
<pre>@prefix acl: <http://www.w3.org/ns/auth/acl#> .
@prefix oplacl: <http://www.openlinksw.com/ontology/acl#> .
<#rule> a acl:Authorization ;
rdfs:label "Allow Anyone to SPARQL Read" ;
acl:agentClass foaf:Agent ;
acl:accessTo <urn:virtuoso:access:sparql> ;
oplacl:hasAccessMode oplacl:Read ;
oplacl:hasScope oplacl:Query .</pre>
<p>I will explain these technical concepts in more detail in
another article.</p>
</div>
</div>]]></content:encoded>
<description>Disclaimer : Many of the features presented here are rather new and can not be found&#160;in&#160; the open-source version of Virtuoso. Last time we saw how to share files and folders stored in the Virtuoso DAV system . Today we will protect and share data stored in Virtuoso’s Triple Store – we will share RDF data. Virtuoso is actually a quadruple-store which means each triple lives in a named graph. In Virtuoso named graphs can be public or private (in reality it is a bit more complex than that but this view on things is sufficient for our purposes), public ...</description>
</item>
<item rdf:about="https://trueg.wordpress.com/2014/09/02/sharing-files-with-whomever-is-simple/">
<dc:creator>Sebastian Trueg</dc:creator>
<dc:source>Semantic Desktop by Sebastian Trueg</dc:source>
<dc:relation>http://trueg.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>
<p>Dropbox, Google Drive, OneDrive, Box.com – they all allow you to
share files with others. But they all do it via the strange concept
of public links. Anyone who has this link has access to the file.
On first glance this might be easy enough but what if you want to
revoke read access for just one of those people? What if you want
to share a set of files with a whole group?</p>
<p>I will not answer these questions per se. I will show an
alternative based on <a href=
"http://virtuoso.openlinksw.com">OpenLink Virtuoso</a>.</p>
<p>Virtuoso has its own WebDAV file storage system built in. Thus,
any instance of Virtuoso can store files and serve these files via
the WebDAV API (and an <a title="Linked Data Platform" href=
"http://www.w3.org/TR/ldp/">LDP</a> API for those interested) and
an HTML UI. See below for a basic example:</p>
<p><a href=
"https://trueg.files.wordpress.com/2014/09/dav1.png"><img data-attachment-id="897"
data-permalink=
"https://trueg.wordpress.com/2014/09/02/sharing-files-with-whomever-is-simple/dav1/"
data-orig-file="https://trueg.files.wordpress.com/2014/09/dav1.png"
data-orig-size="1021,574" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="Virtuoso DAV Browser" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/dav1.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/dav1.png?w=676" class=
"aligncenter size-medium wp-image-897" src=
"https://trueg.files.wordpress.com/2014/09/dav1.png?w=300&h=168"
alt="Virtuoso DAV Browser" width="300" height="168" srcset=
"https://trueg.files.wordpress.com/2014/09/dav1.png?w=300 300w, https://trueg.files.wordpress.com/2014/09/dav1.png?w=598 598w, https://trueg.files.wordpress.com/2014/09/dav1.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>This is just your typical file browser listing – nothing fancy.
The fancy part lives under the hood in what we call VAL – the
Virtuoso Authentication and Authorization Layer.</p>
<p>We can edit the permissions of one file or folder and share it
with anyone we like. And this is where it gets interesting: instead
of sharing with an email address or a user account on the Virtuoso
instance we can share with people using their identifiers from any
of the supported services. This includes Facebook, Twitter,
LinkedIn, WordPress, Yahoo, Mozilla Persona, and the list goes
on.</p>
<p>For this small demo I will share a file with my LinkedIn
identity <em><a href="http://www.linkedin.com/in/trueg" rel=
"nofollow">http://www.linkedin.com/in/trueg</a></em>. (Virtuoso/VAL
identifier people via URIs, thus, it has schemes for all supported
services. For a complete list see the <a href=
"http://web.ods.openlinksw.com/odsdox/group__ods__module__user.html#ga74edeb21c990ffa4d8e554fd8dd13eff">
Service ID Examples in the ODS API documentation</a>.)</p>
<p><a href=
"https://trueg.files.wordpress.com/2014/09/dav2.png"><img data-attachment-id="898"
data-permalink=
"https://trueg.wordpress.com/2014/09/02/sharing-files-with-whomever-is-simple/dav2/"
data-orig-file="https://trueg.files.wordpress.com/2014/09/dav2.png"
data-orig-size="1021,432" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="Virtuoso Share File" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/dav2.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/dav2.png?w=676" class=
"aligncenter size-medium wp-image-898" src=
"https://trueg.files.wordpress.com/2014/09/dav2.png?w=300&h=126"
alt="Virtuoso Share File" width="300" height="126" srcset=
"https://trueg.files.wordpress.com/2014/09/dav2.png?w=298 298w, https://trueg.files.wordpress.com/2014/09/dav2.png?w=596 596w, https://trueg.files.wordpress.com/2014/09/dav2.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Now when I logout and try to access the file in question I am
presented with the authentication dialog from VAL:</p>
<p><a href=
"https://trueg.files.wordpress.com/2014/09/dav3.png"><img data-attachment-id="899"
data-permalink=
"https://trueg.wordpress.com/2014/09/02/sharing-files-with-whomever-is-simple/dav3/"
data-orig-file="https://trueg.files.wordpress.com/2014/09/dav3.png"
data-orig-size="1021,432" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="VAL Authentication Dialog"
data-image-description="" data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/dav3.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/dav3.png?w=676" class=
"aligncenter size-medium wp-image-899" src=
"https://trueg.files.wordpress.com/2014/09/dav3.png?w=300&h=126"
alt="VAL Authentication Dialog" width="300" height="126" srcset=
"https://trueg.files.wordpress.com/2014/09/dav3.png?w=298 298w, https://trueg.files.wordpress.com/2014/09/dav3.png?w=596 596w, https://trueg.files.wordpress.com/2014/09/dav3.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>This dialog allows me to authenticate using any of the supported
authentication methods. In this case I will choose to authenticate
via LinkedIn which will result in an OAuth handshake followed by
the granted read access to the file:</p>
<p><a href=
"https://trueg.files.wordpress.com/2014/09/dav4.png"><img data-attachment-id="900"
data-permalink=
"https://trueg.wordpress.com/2014/09/02/sharing-files-with-whomever-is-simple/dav4/"
data-orig-file="https://trueg.files.wordpress.com/2014/09/dav4.png"
data-orig-size="1021,578" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="LinkedIn OAuth Handshake" data-image-description=
"" data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/dav4.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/dav4.png?w=676" class=
"aligncenter size-medium wp-image-900" src=
"https://trueg.files.wordpress.com/2014/09/dav4.png?w=300&h=169"
alt="LinkedIn OAuth Handshake" width="300" height="169" srcset=
"https://trueg.files.wordpress.com/2014/09/dav4.png?w=300 300w, https://trueg.files.wordpress.com/2014/09/dav4.png?w=597 597w, https://trueg.files.wordpress.com/2014/09/dav4.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p> </p>
<p><a href=
"https://trueg.files.wordpress.com/2014/09/dav5.png"><img data-attachment-id="901"
data-permalink=
"https://trueg.wordpress.com/2014/09/02/sharing-files-with-whomever-is-simple/dav5/"
data-orig-file="https://trueg.files.wordpress.com/2014/09/dav5.png"
data-orig-size="1021,245" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="Access to file granted" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/dav5.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/dav5.png?w=676" class=
"aligncenter size-medium wp-image-901" src=
"https://trueg.files.wordpress.com/2014/09/dav5.png?w=300&h=71"
alt="Access to file granted" width="300" height="71" srcset=
"https://trueg.files.wordpress.com/2014/09/dav5.png?w=300 300w, https://trueg.files.wordpress.com/2014/09/dav5.png?w=296 296w, https://trueg.files.wordpress.com/2014/09/dav5.png?w=592 592w, https://trueg.files.wordpress.com/2014/09/dav5.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>It is that simple. Of course these identifiers can also be used
in groups, allowing to share files and folders with a set of people
instead of just one individual.</p>
<p>Next up: Sharing Named Graphs via VAL.</p>
</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:21:48.000000Z</dc:date>
<title>Sharing Files With Whomever Is Simple</title>
<link>https://trueg.wordpress.com/2014/09/02/sharing-files-with-whomever-is-simple/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>
<p>Dropbox, Google Drive, OneDrive, Box.com – they all allow you to
share files with others. But they all do it via the strange concept
of public links. Anyone who has this link has access to the file.
On first glance this might be easy enough but what if you want to
revoke read access for just one of those people? What if you want
to share a set of files with a whole group?</p>
<p>I will not answer these questions per se. I will show an
alternative based on <a href=
"http://virtuoso.openlinksw.com">OpenLink Virtuoso</a>.</p>
<p>Virtuoso has its own WebDAV file storage system built in. Thus,
any instance of Virtuoso can store files and serve these files via
the WebDAV API (and an <a title="Linked Data Platform" href=
"http://www.w3.org/TR/ldp/">LDP</a> API for those interested) and
an HTML UI. See below for a basic example:</p>
<p><a href=
"https://trueg.files.wordpress.com/2014/09/dav1.png"><img data-attachment-id="897"
data-permalink=
"https://trueg.wordpress.com/2014/09/02/sharing-files-with-whomever-is-simple/dav1/"
data-orig-file="https://trueg.files.wordpress.com/2014/09/dav1.png"
data-orig-size="1021,574" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="Virtuoso DAV Browser" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/dav1.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/dav1.png?w=676" class=
"aligncenter size-medium wp-image-897" src=
"https://trueg.files.wordpress.com/2014/09/dav1.png?w=300&h=168"
alt="Virtuoso DAV Browser" width="300" height="168" srcset=
"https://trueg.files.wordpress.com/2014/09/dav1.png?w=300 300w, https://trueg.files.wordpress.com/2014/09/dav1.png?w=598 598w, https://trueg.files.wordpress.com/2014/09/dav1.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>This is just your typical file browser listing – nothing fancy.
The fancy part lives under the hood in what we call VAL – the
Virtuoso Authentication and Authorization Layer.</p>
<p>We can edit the permissions of one file or folder and share it
with anyone we like. And this is where it gets interesting: instead
of sharing with an email address or a user account on the Virtuoso
instance we can share with people using their identifiers from any
of the supported services. This includes Facebook, Twitter,
LinkedIn, WordPress, Yahoo, Mozilla Persona, and the list goes
on.</p>
<p>For this small demo I will share a file with my LinkedIn
identity <em><a href="http://www.linkedin.com/in/trueg" rel=
"nofollow">http://www.linkedin.com/in/trueg</a></em>. (Virtuoso/VAL
identifier people via URIs, thus, it has schemes for all supported
services. For a complete list see the <a href=
"http://web.ods.openlinksw.com/odsdox/group__ods__module__user.html#ga74edeb21c990ffa4d8e554fd8dd13eff">
Service ID Examples in the ODS API documentation</a>.)</p>
<p><a href=
"https://trueg.files.wordpress.com/2014/09/dav2.png"><img data-attachment-id="898"
data-permalink=
"https://trueg.wordpress.com/2014/09/02/sharing-files-with-whomever-is-simple/dav2/"
data-orig-file="https://trueg.files.wordpress.com/2014/09/dav2.png"
data-orig-size="1021,432" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="Virtuoso Share File" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/dav2.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/dav2.png?w=676" class=
"aligncenter size-medium wp-image-898" src=
"https://trueg.files.wordpress.com/2014/09/dav2.png?w=300&h=126"
alt="Virtuoso Share File" width="300" height="126" srcset=
"https://trueg.files.wordpress.com/2014/09/dav2.png?w=298 298w, https://trueg.files.wordpress.com/2014/09/dav2.png?w=596 596w, https://trueg.files.wordpress.com/2014/09/dav2.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Now when I logout and try to access the file in question I am
presented with the authentication dialog from VAL:</p>
<p><a href=
"https://trueg.files.wordpress.com/2014/09/dav3.png"><img data-attachment-id="899"
data-permalink=
"https://trueg.wordpress.com/2014/09/02/sharing-files-with-whomever-is-simple/dav3/"
data-orig-file="https://trueg.files.wordpress.com/2014/09/dav3.png"
data-orig-size="1021,432" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="VAL Authentication Dialog"
data-image-description="" data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/dav3.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/dav3.png?w=676" class=
"aligncenter size-medium wp-image-899" src=
"https://trueg.files.wordpress.com/2014/09/dav3.png?w=300&h=126"
alt="VAL Authentication Dialog" width="300" height="126" srcset=
"https://trueg.files.wordpress.com/2014/09/dav3.png?w=298 298w, https://trueg.files.wordpress.com/2014/09/dav3.png?w=596 596w, https://trueg.files.wordpress.com/2014/09/dav3.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>This dialog allows me to authenticate using any of the supported
authentication methods. In this case I will choose to authenticate
via LinkedIn which will result in an OAuth handshake followed by
the granted read access to the file:</p>
<p><a href=
"https://trueg.files.wordpress.com/2014/09/dav4.png"><img data-attachment-id="900"
data-permalink=
"https://trueg.wordpress.com/2014/09/02/sharing-files-with-whomever-is-simple/dav4/"
data-orig-file="https://trueg.files.wordpress.com/2014/09/dav4.png"
data-orig-size="1021,578" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="LinkedIn OAuth Handshake" data-image-description=
"" data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/dav4.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/dav4.png?w=676" class=
"aligncenter size-medium wp-image-900" src=
"https://trueg.files.wordpress.com/2014/09/dav4.png?w=300&h=169"
alt="LinkedIn OAuth Handshake" width="300" height="169" srcset=
"https://trueg.files.wordpress.com/2014/09/dav4.png?w=300 300w, https://trueg.files.wordpress.com/2014/09/dav4.png?w=597 597w, https://trueg.files.wordpress.com/2014/09/dav4.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p> </p>
<p><a href=
"https://trueg.files.wordpress.com/2014/09/dav5.png"><img data-attachment-id="901"
data-permalink=
"https://trueg.wordpress.com/2014/09/02/sharing-files-with-whomever-is-simple/dav5/"
data-orig-file="https://trueg.files.wordpress.com/2014/09/dav5.png"
data-orig-size="1021,245" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="Access to file granted" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2014/09/dav5.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2014/09/dav5.png?w=676" class=
"aligncenter size-medium wp-image-901" src=
"https://trueg.files.wordpress.com/2014/09/dav5.png?w=300&h=71"
alt="Access to file granted" width="300" height="71" srcset=
"https://trueg.files.wordpress.com/2014/09/dav5.png?w=300 300w, https://trueg.files.wordpress.com/2014/09/dav5.png?w=296 296w, https://trueg.files.wordpress.com/2014/09/dav5.png?w=592 592w, https://trueg.files.wordpress.com/2014/09/dav5.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>It is that simple. Of course these identifiers can also be used
in groups, allowing to share files and folders with a set of people
instead of just one individual.</p>
<p>Next up: Sharing Named Graphs via VAL.</p>
</div>
</div>]]></content:encoded>
<description>Dropbox, Google Drive, OneDrive, Box.com – they all allow you to share files with others. But they all do it via the strange concept of public links. Anyone who has this link has access to the file. On first glance this might be easy enough but what if you want to revoke read access for just one of those people? What if you want to share a set of files with a whole group? I will not answer these questions per se. I will show an alternative based on OpenLink Virtuoso . Virtuoso has its own WebDAV file storage system ...</description>
</item>
<item rdf:about="https://trueg.wordpress.com/2012/09/28/digitally-sign-emails-with-your-x-509-certificate-in-evolution/">
<dc:creator>Sebastian Trueg</dc:creator>
<dc:source>Semantic Desktop by Sebastian Trueg</dc:source>
<dc:relation>http://trueg.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>
<p>Digitally signing Emails is always a good idea. People can
verify that you actually sent the mail and they can encrypt emails
in return. A while ago <a href=
"https://plus.google.com/112399767740508618350/posts/7UFzrLZpxnm">Kingsley
showed how to sign emails in Thunderbird</a>.I will now follow up
with a short post on how to do the same in Evolution.</p>
<p>The process begins with actually getting an X.509 certificate
including an embedded <a href="http://webid.info/">WebID</a>. There
are a few services out there that can help with this, most notably
OpenLink’s own <a href=
"http://id.myopenlink.net/certgen/">YouID</a> and <a href=
"http://id.myopenlink.net/ods/">ODS.</a> The former allows you to
create a new certificate based on existing social service accounts.
The latter requires you to create an ODS account and then create a
new certificate via <em>Profile edit</em> -> <em>Security</em>
-> <em>Certificate Generator</em>. In any case make sure to use
the same email address for the certificate that you will be using
for email sending.</p>
<p>The certificate will actually be created by the web browser,
making sure that the private key is safe.</p>
<p>If you are a Google Chrome user you can skip the next step since
Evolution shares its key storage with Chrome (and several other
applications). If you are a user of Firefox you need to perform one
extra step: go to the Firefox preferences, into the advanced
section, click the “Certificates” button, choose the previously
created certificate, and export it to a .p12 file.</p>
<p>Back in Evolution’s settings you can now import this file:</p>
<p><a href=
"https://trueg.files.wordpress.com/2012/09/evolution-import-cert.png">
<img data-attachment-id="871" data-permalink=
"https://trueg.wordpress.com/2012/09/28/digitally-sign-emails-with-your-x-509-certificate-in-evolution/evolution-import-cert/"
data-orig-file=
"https://trueg.files.wordpress.com/2012/09/evolution-import-cert.png"
data-orig-size="856,741" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":""}"
data-image-title="evolution-import-cert" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2012/09/evolution-import-cert.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2012/09/evolution-import-cert.png?w=676"
class="aligncenter size-medium wp-image-871" title=
"evolution-import-cert" src=
"https://trueg.files.wordpress.com/2012/09/evolution-import-cert.png?w=300&h=259"
alt="" width="300" height="259" srcset=
"https://trueg.files.wordpress.com/2012/09/evolution-import-cert.png?w=300 300w, https://trueg.files.wordpress.com/2012/09/evolution-import-cert.png?w=598 598w, https://trueg.files.wordpress.com/2012/09/evolution-import-cert.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a>To actually sign
emails with your shiny new certificate stay in the Evolution
settings, choose to edit the <em>Mail Account</em> in question,
select the certificate in the <em>Secure MIME (S/MIME)</em> section
and check “<em>Digitally sign outgoing messages (by
default)</em>“:</p>
<p><a href=
"https://trueg.files.wordpress.com/2012/09/evolution-sign.png"><img data-attachment-id="872"
data-permalink=
"https://trueg.wordpress.com/2012/09/28/digitally-sign-emails-with-your-x-509-certificate-in-evolution/evolution-sign/"
data-orig-file=
"https://trueg.files.wordpress.com/2012/09/evolution-sign.png"
data-orig-size="646,641" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":""}"
data-image-title="evolution-sign" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2012/09/evolution-sign.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2012/09/evolution-sign.png?w=646"
class="aligncenter size-medium wp-image-872" title="evolution-sign"
src=
"https://trueg.files.wordpress.com/2012/09/evolution-sign.png?w=300&h=297"
alt="" width="300" height="297" srcset=
"https://trueg.files.wordpress.com/2012/09/evolution-sign.png?w=300 300w, https://trueg.files.wordpress.com/2012/09/evolution-sign.png?w=600 600w, https://trueg.files.wordpress.com/2012/09/evolution-sign.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a>The nice thing about
Evolution here is that in contrast to Thunderbird there is no need
to manually import the root certificate which was used to sign your
certificate (in our case the one from OpenLink). Evolution will
simply ask you to trust that certificate the first time you try to
send a signed email:</p>
<p><a href=
"https://trueg.files.wordpress.com/2012/09/evolution-confirm-ssl-exception.png">
<img data-attachment-id="873" data-permalink=
"https://trueg.wordpress.com/2012/09/28/digitally-sign-emails-with-your-x-509-certificate-in-evolution/evolution-confirm-ssl-exception/"
data-orig-file=
"https://trueg.files.wordpress.com/2012/09/evolution-confirm-ssl-exception.png"
data-orig-size="394,297" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":""}"
data-image-title="evolution-confirm-ssl-exception"
data-image-description="" data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2012/09/evolution-confirm-ssl-exception.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2012/09/evolution-confirm-ssl-exception.png?w=394"
class="aligncenter size-medium wp-image-873" title=
"evolution-confirm-ssl-exception" src=
"https://trueg.files.wordpress.com/2012/09/evolution-confirm-ssl-exception.png?w=300&h=226"
alt="" width="300" height="226" srcset=
"https://trueg.files.wordpress.com/2012/09/evolution-confirm-ssl-exception.png?w=300 300w, https://trueg.files.wordpress.com/2012/09/evolution-confirm-ssl-exception.png?w=150 150w, https://trueg.files.wordpress.com/2012/09/evolution-confirm-ssl-exception.png 394w"
sizes="(max-width: 300px) 100vw, 300px" /></a>That’s it. Email
signing in Evolution is easy.</p>
</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:21:48.000000Z</dc:date>
<title>Digitally Sign Emails With Your X.509 Certificate in
Evolution</title>
<link>https://trueg.wordpress.com/2012/09/28/digitally-sign-emails-with-your-x-509-certificate-in-evolution/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>
<p>Digitally signing Emails is always a good idea. People can
verify that you actually sent the mail and they can encrypt emails
in return. A while ago <a href=
"https://plus.google.com/112399767740508618350/posts/7UFzrLZpxnm">Kingsley
showed how to sign emails in Thunderbird</a>.I will now follow up
with a short post on how to do the same in Evolution.</p>
<p>The process begins with actually getting an X.509 certificate
including an embedded <a href="http://webid.info/">WebID</a>. There
are a few services out there that can help with this, most notably
OpenLink’s own <a href=
"http://id.myopenlink.net/certgen/">YouID</a> and <a href=
"http://id.myopenlink.net/ods/">ODS.</a> The former allows you to
create a new certificate based on existing social service accounts.
The latter requires you to create an ODS account and then create a
new certificate via <em>Profile edit</em> -> <em>Security</em>
-> <em>Certificate Generator</em>. In any case make sure to use
the same email address for the certificate that you will be using
for email sending.</p>
<p>The certificate will actually be created by the web browser,
making sure that the private key is safe.</p>
<p>If you are a Google Chrome user you can skip the next step since
Evolution shares its key storage with Chrome (and several other
applications). If you are a user of Firefox you need to perform one
extra step: go to the Firefox preferences, into the advanced
section, click the “Certificates” button, choose the previously
created certificate, and export it to a .p12 file.</p>
<p>Back in Evolution’s settings you can now import this file:</p>
<p><a href=
"https://trueg.files.wordpress.com/2012/09/evolution-import-cert.png">
<img data-attachment-id="871" data-permalink=
"https://trueg.wordpress.com/2012/09/28/digitally-sign-emails-with-your-x-509-certificate-in-evolution/evolution-import-cert/"
data-orig-file=
"https://trueg.files.wordpress.com/2012/09/evolution-import-cert.png"
data-orig-size="856,741" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":""}"
data-image-title="evolution-import-cert" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2012/09/evolution-import-cert.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2012/09/evolution-import-cert.png?w=676"
class="aligncenter size-medium wp-image-871" title=
"evolution-import-cert" src=
"https://trueg.files.wordpress.com/2012/09/evolution-import-cert.png?w=300&h=259"
alt="" width="300" height="259" srcset=
"https://trueg.files.wordpress.com/2012/09/evolution-import-cert.png?w=300 300w, https://trueg.files.wordpress.com/2012/09/evolution-import-cert.png?w=598 598w, https://trueg.files.wordpress.com/2012/09/evolution-import-cert.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a>To actually sign
emails with your shiny new certificate stay in the Evolution
settings, choose to edit the <em>Mail Account</em> in question,
select the certificate in the <em>Secure MIME (S/MIME)</em> section
and check “<em>Digitally sign outgoing messages (by
default)</em>“:</p>
<p><a href=
"https://trueg.files.wordpress.com/2012/09/evolution-sign.png"><img data-attachment-id="872"
data-permalink=
"https://trueg.wordpress.com/2012/09/28/digitally-sign-emails-with-your-x-509-certificate-in-evolution/evolution-sign/"
data-orig-file=
"https://trueg.files.wordpress.com/2012/09/evolution-sign.png"
data-orig-size="646,641" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":""}"
data-image-title="evolution-sign" data-image-description=""
data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2012/09/evolution-sign.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2012/09/evolution-sign.png?w=646"
class="aligncenter size-medium wp-image-872" title="evolution-sign"
src=
"https://trueg.files.wordpress.com/2012/09/evolution-sign.png?w=300&h=297"
alt="" width="300" height="297" srcset=
"https://trueg.files.wordpress.com/2012/09/evolution-sign.png?w=300 300w, https://trueg.files.wordpress.com/2012/09/evolution-sign.png?w=600 600w, https://trueg.files.wordpress.com/2012/09/evolution-sign.png?w=150 150w"
sizes="(max-width: 300px) 100vw, 300px" /></a>The nice thing about
Evolution here is that in contrast to Thunderbird there is no need
to manually import the root certificate which was used to sign your
certificate (in our case the one from OpenLink). Evolution will
simply ask you to trust that certificate the first time you try to
send a signed email:</p>
<p><a href=
"https://trueg.files.wordpress.com/2012/09/evolution-confirm-ssl-exception.png">
<img data-attachment-id="873" data-permalink=
"https://trueg.wordpress.com/2012/09/28/digitally-sign-emails-with-your-x-509-certificate-in-evolution/evolution-confirm-ssl-exception/"
data-orig-file=
"https://trueg.files.wordpress.com/2012/09/evolution-confirm-ssl-exception.png"
data-orig-size="394,297" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":""}"
data-image-title="evolution-confirm-ssl-exception"
data-image-description="" data-image-caption="" data-medium-file=
"https://trueg.files.wordpress.com/2012/09/evolution-confirm-ssl-exception.png?w=300"
data-large-file=
"https://trueg.files.wordpress.com/2012/09/evolution-confirm-ssl-exception.png?w=394"
class="aligncenter size-medium wp-image-873" title=
"evolution-confirm-ssl-exception" src=
"https://trueg.files.wordpress.com/2012/09/evolution-confirm-ssl-exception.png?w=300&h=226"
alt="" width="300" height="226" srcset=
"https://trueg.files.wordpress.com/2012/09/evolution-confirm-ssl-exception.png?w=300 300w, https://trueg.files.wordpress.com/2012/09/evolution-confirm-ssl-exception.png?w=150 150w, https://trueg.files.wordpress.com/2012/09/evolution-confirm-ssl-exception.png 394w"
sizes="(max-width: 300px) 100vw, 300px" /></a>That’s it. Email
signing in Evolution is easy.</p>
</div>
</div>]]></content:encoded>
<description>Digitally signing Emails is always a good idea. People can verify that you actually sent the mail and they can encrypt emails in return. A while ago Kingsley showed how to sign emails in Thunderbird .I will now follow up with a short post on how to do the same in Evolution. The process begins with actually getting an X.509 certificate including an embedded WebID . There are a few services out there that can help with this, most notably OpenLink’s own YouID and ODS. The former allows you to create a new certificate based on existing social service accounts. ...</description>
</item>
<item rdf:about="https://davidepalmisano.wordpress.com/2010/07/05/sameas4j-little-drops-of-water-make-the-mighty-ocean/">
<dc:creator>Davide Palmisano</dc:creator>
<dc:source>turn off the lights, please by Davide Palmisano</dc:source>
<dc:relation>http://davidepalmisano.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>
<div><a href=
"https://davidepalmisano.files.wordpress.com/2010/07/waterdrops2.jpg">
<img data-attachment-id="108" data-permalink=
"https://davidepalmisano.wordpress.com/2010/07/05/sameas4j-little-drops-of-water-make-the-mighty-ocean/waterdrops-3/"
data-orig-file=
"https://davidepalmisano.files.wordpress.com/2010/07/waterdrops2.jpg"
data-orig-size="1024,681" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"Colon of water, droplets and ripples, impact of a single droplet falling onto water surface","created_timestamp":"0","copyright":"Tomas Sobek - http:\/\/tomassobekphotography.co.nz\/","focal_length":"0","iso":"0","shutter_speed":"0","title":""}"
data-image-title="waterdrops" data-image-description=
"<p>Colon of water, droplets and ripples, impact of a single droplet falling onto water surface</p>"
data-image-caption="" data-medium-file=
"https://davidepalmisano.files.wordpress.com/2010/07/waterdrops2.jpg?w=300"
data-large-file=
"https://davidepalmisano.files.wordpress.com/2010/07/waterdrops2.jpg?w=450"
class="alignleft size-medium wp-image-108" title="waterdrops" src=
"https://davidepalmisano.files.wordpress.com/2010/07/waterdrops2.jpg?w=300&h=199"
alt="" srcset=
"https://davidepalmisano.files.wordpress.com/2010/07/waterdrops2.jpg?w=300 300w, https://davidepalmisano.files.wordpress.com/2010/07/waterdrops2.jpg?w=240 240w, https://davidepalmisano.files.wordpress.com/2010/07/waterdrops2.jpg?w=478 478w, https://davidepalmisano.files.wordpress.com/2010/07/waterdrops2.jpg?w=150 150w"
sizes="(max-width: 240px) 100vw, 240px" /></a>Few days ago <a href=
"http://twitter.com/milstan" target="_blank">Milan Stankovich</a>
contacted the <a href="http://sindice.com" target=
"_blank">Sindice</a> crew informing us that he wrote a simply Java
library to interact with the public Sindice HTTP APIs. We always
<a href="http://twitter.com/mhausenblas/status/17403270299" target=
"_blank">appreciate</a> such kind of community efforts lead to
collaboratively make Sindice a better place on the Web. Agreeing
with Milan, we decided to put some efforts on his initial work to
make such library the official open source tool for Java
programmers.<span id="more-104"></span></div>
<div id="_mcePaste">That reminded me that, few months ago, I did
for <a href="http://sameas.org" target="_blank">sameas.org</a> the
same thing Milan did for us. But (ashamed) I never informed those
guys about what I did.</div>
<div id="_mcePaste"><a href="http://sameas.org" target=
"_blank">Sameas.org</a> is a great and extremely useful tool on the
Web that makes concretely possible to interlink different Linked
data clouds. Simple to use (both for humans via HTML and for
machines with a simple HTTP/JSON API) and extremely reactive, it
allows to get all the <a href=
"http://www.w3.org/2002/07/owl#sameAs" target=
"_blank">owl:sameAs</a> object for a given URI. And, moreover, it’s
based on Sindice.com.</div>
<div><!--more--></div>
<div id="_mcePaste" style="text-align:center;"><em>Do you want to
know the identifier of <a href="http://dbpedia.org/resource/Rome"
target="_blank">http://dbpedia.org/resource/Rome</a> in <a href=
"//www.freebase.com/" target="_blank">Freebase</a> or <a href=
"http://en.wikipedia.org/wiki/YAGO_(database)" target=
"_blank">Yago</a>? Just ask it to Sameas.org.</em></div>
<div style="text-align:center;"><em><br /></em></div>
<div id="_mcePaste">So, after some months I just refined a couple
of things, added some javadocs, set up a Maven repository and made
<a href="http://code.google.com/p/asmx-sameas4j/" target=
"_blank">SameAs4j</a> publicly available (MIT licensed) to everyone
on Google Code.</div>
<div><!--more--></div>
<div id="_mcePaste" style="text-align:center;"><em>It’s a simple
but reliable tiny set of Java classes that allows you to interact
with sameas.org programatically in your Java Semantic Web
applications.</em></div>
<div style="text-align:center;"><em><br /></em></div>
<div id="_mcePaste">Back to the beginning: every pieces of open
source software is like a little drop of water which makes the
mighty ocean, so please submit any issue or patch if
interested.</div>
</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:10:06.000000Z</dc:date>
<title>SameAs4J: little drops of water make the mighty
ocean</title>
<link>https://davidepalmisano.wordpress.com/2010/07/05/sameas4j-little-drops-of-water-make-the-mighty-ocean/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>
<div><a href=
"https://davidepalmisano.files.wordpress.com/2010/07/waterdrops2.jpg">
<img data-attachment-id="108" data-permalink=
"https://davidepalmisano.wordpress.com/2010/07/05/sameas4j-little-drops-of-water-make-the-mighty-ocean/waterdrops-3/"
data-orig-file=
"https://davidepalmisano.files.wordpress.com/2010/07/waterdrops2.jpg"
data-orig-size="1024,681" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"Colon of water, droplets and ripples, impact of a single droplet falling onto water surface","created_timestamp":"0","copyright":"Tomas Sobek - http:\/\/tomassobekphotography.co.nz\/","focal_length":"0","iso":"0","shutter_speed":"0","title":""}"
data-image-title="waterdrops" data-image-description=
"<p>Colon of water, droplets and ripples, impact of a single droplet falling onto water surface</p>"
data-image-caption="" data-medium-file=
"https://davidepalmisano.files.wordpress.com/2010/07/waterdrops2.jpg?w=300"
data-large-file=
"https://davidepalmisano.files.wordpress.com/2010/07/waterdrops2.jpg?w=450"
class="alignleft size-medium wp-image-108" title="waterdrops" src=
"https://davidepalmisano.files.wordpress.com/2010/07/waterdrops2.jpg?w=300&h=199"
alt="" srcset=
"https://davidepalmisano.files.wordpress.com/2010/07/waterdrops2.jpg?w=300 300w, https://davidepalmisano.files.wordpress.com/2010/07/waterdrops2.jpg?w=240 240w, https://davidepalmisano.files.wordpress.com/2010/07/waterdrops2.jpg?w=478 478w, https://davidepalmisano.files.wordpress.com/2010/07/waterdrops2.jpg?w=150 150w"
sizes="(max-width: 240px) 100vw, 240px" /></a>Few days ago <a href=
"http://twitter.com/milstan" target="_blank">Milan Stankovich</a>
contacted the <a href="http://sindice.com" target=
"_blank">Sindice</a> crew informing us that he wrote a simply Java
library to interact with the public Sindice HTTP APIs. We always
<a href="http://twitter.com/mhausenblas/status/17403270299" target=
"_blank">appreciate</a> such kind of community efforts lead to
collaboratively make Sindice a better place on the Web. Agreeing
with Milan, we decided to put some efforts on his initial work to
make such library the official open source tool for Java
programmers.<span id="more-104"></span></div>
<div id="_mcePaste">That reminded me that, few months ago, I did
for <a href="http://sameas.org" target="_blank">sameas.org</a> the
same thing Milan did for us. But (ashamed) I never informed those
guys about what I did.</div>
<div id="_mcePaste"><a href="http://sameas.org" target=
"_blank">Sameas.org</a> is a great and extremely useful tool on the
Web that makes concretely possible to interlink different Linked
data clouds. Simple to use (both for humans via HTML and for
machines with a simple HTTP/JSON API) and extremely reactive, it
allows to get all the <a href=
"http://www.w3.org/2002/07/owl#sameAs" target=
"_blank">owl:sameAs</a> object for a given URI. And, moreover, it’s
based on Sindice.com.</div>
<div><!--more--></div>
<div id="_mcePaste" style="text-align:center;"><em>Do you want to
know the identifier of <a href="http://dbpedia.org/resource/Rome"
target="_blank">http://dbpedia.org/resource/Rome</a> in <a href=
"//www.freebase.com/" target="_blank">Freebase</a> or <a href=
"http://en.wikipedia.org/wiki/YAGO_(database)" target=
"_blank">Yago</a>? Just ask it to Sameas.org.</em></div>
<div style="text-align:center;"><em><br /></em></div>
<div id="_mcePaste">So, after some months I just refined a couple
of things, added some javadocs, set up a Maven repository and made
<a href="http://code.google.com/p/asmx-sameas4j/" target=
"_blank">SameAs4j</a> publicly available (MIT licensed) to everyone
on Google Code.</div>
<div><!--more--></div>
<div id="_mcePaste" style="text-align:center;"><em>It’s a simple
but reliable tiny set of Java classes that allows you to interact
with sameas.org programatically in your Java Semantic Web
applications.</em></div>
<div style="text-align:center;"><em><br /></em></div>
<div id="_mcePaste">Back to the beginning: every pieces of open
source software is like a little drop of water which makes the
mighty ocean, so please submit any issue or patch if
interested.</div>
</div>
</div>]]></content:encoded>
<description>Few days ago Milan Stankovich contacted the Sindice crew informing us that he wrote a simply Java library to interact with the public Sindice HTTP APIs. We always appreciate such kind of community efforts lead to collaboratively make Sindice a better place on the Web. Agreeing with Milan, we decided to put some efforts on his initial work to make such library the official open source tool for Java programmers. That reminded me that, few months ago, I did for sameas.org the same thing Milan did for us. But (ashamed) I never informed those guys about what I did. Sameas.org ...</description>
</item>
<item rdf:about="https://davidepalmisano.wordpress.com/2010/02/20/fbk-any23-and-my-involvement-in-sindice-com/">
<dc:creator>Davide Palmisano</dc:creator>
<dc:source>turn off the lights, please by Davide Palmisano</dc:source>
<dc:relation>http://davidepalmisano.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>
<p><a href=
"https://davidepalmisano.files.wordpress.com/2010/02/fbk_reassembled_logo.png">
<img data-attachment-id="96" data-permalink=
"https://davidepalmisano.wordpress.com/2010/02/20/fbk-any23-and-my-involvement-in-sindice-com/fbk_reassembled_logo/"
data-orig-file=
"https://davidepalmisano.files.wordpress.com/2010/02/fbk_reassembled_logo.png"
data-orig-size="670,822" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":""}"
data-image-title="FBK – Research in your heart"
data-image-description="" data-image-caption="" data-medium-file=
"https://davidepalmisano.files.wordpress.com/2010/02/fbk_reassembled_logo.png?w=245"
data-large-file=
"https://davidepalmisano.files.wordpress.com/2010/02/fbk_reassembled_logo.png?w=450"
class="alignleft size-medium wp-image-96" title=
"FBK - Research in your heart" src=
"https://davidepalmisano.files.wordpress.com/2010/02/fbk_reassembled_logo.png?w=245&h=300"
alt="" srcset=
"https://davidepalmisano.files.wordpress.com/2010/02/fbk_reassembled_logo.png?w=244 244w, https://davidepalmisano.files.wordpress.com/2010/02/fbk_reassembled_logo.png?w=488 488w, https://davidepalmisano.files.wordpress.com/2010/02/fbk_reassembled_logo.png?w=122 122w"
sizes="(max-width: 244px) 100vw, 244px" /></a>After almost two
years spent working at Asemantics, I left it to join the <a href=
"http://fbk.eu" target="_blank">Fondazione Bruno Kessler (FBK)</a>,
a quite large research institute based in <a href=
"http://maps.google.com/maps?client=safari&rls=en&q=Trento&oe=UTF-8&um=1&ie=UTF-8&hq=&hnear=Trento,+Italy&ei=GxWAS7izOpDz_AaJv53zBg&sa=X&oi=geocode_result&ct=image&resnum=1&ved=0CA0Q8gEwAA">
Trento</a>.</p>
<p>These last two years have been amazing: I met very skilled and
enthusiastic people working with them on a broad set of different
technologies. Every day spent there has been an opportunity for me
to learn something new from them, and at the very end they are now
very good friends more than colleagues. Now Asemantics is part of
the bigger <a href=
"http://www.pro-netics.com/site/display/site/Home" target=
"_blank">Pro-netics Group</a>.</p>
<p>Moved from Rome, I decided to follow <a href="http://g1o.net/"
target="_blank">Giovanni Tummarello</a> and <a href=
"http://twitter.com/micmos" target="_blank">Michele Mostarda</a> to
<strong>la</strong><strong>unch from scratch a new research unit at
FBK called</strong> <a href="http://wed.fbk.eu/en/home" target=
"_blank"><strong>“Web of Data”</strong></a>. FBK is a
well-established organization with several units acting on a
plethora of different research fields. Every day there is the
opportunity to join workshops and other kind of events.</p>
<p>Just to give you an idea of how the things work here, in the
April 2009 <a href="http://www.davidorban.com/en/" target=
"_blank">David Orban</a> gave a talk here on <a href=
"http://www.oskarnrk.net/2009/04/david-orban-alla-fondazione-bruno-kessler-the-open-internet-of-things/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+oskarnrk+%28Oskar+NRK%29"
target="_blank">“The Open Internet of Things”</a> attended by a
large number of researchers and students. Aside FBK, <strong>in
Trento there is a quite active community hanging out around the
Semantic Web.</strong></p>
<p><em>“<a href="http://www.expertsystem.net/news.asp?idd=1475"
target="_blank">The Semantic Valley”</a>, that’s how they call this
euphoric movement around these technologies.</em></p>
<p>Back to me, the new “Web of Data” unit has joined the <a href=
"http://sindice.com" target="_blank">Sindice.com</a> army and
<strong>the last minute release of</strong> <a href=
"http://developers.any23.org" target=
"_blank"><strong>Any23</strong></a> <strong>0.2 is only the first
outcome of this joint effort on the Semantic Web Index
between</strong> <a href="http://deri.ie" target=
"_blank"><strong>DERI</strong></a> <strong>and FBK</strong>.</p>
<p>In particularly, the <strong>Any23</strong> 0.2 release has been
my first task here. <strong>It’s library, a service, an RDF
distiller</strong>. It’s used on board the Sindice ingestion
pipeline, it’s publicly available here and yesterday I spent a
couple of minutes to write this simple bookmarklet:</p>
<blockquote>
<p style="text-align:center;">javascript:window.open(‘<a href=
"http://any23.org/best/%E2%80%99%20+%20window.location" rel=
"nofollow">http://any23.org/best/’%20+%20window.location</a>);</p>
</blockquote>
<p>Once on your browser, it returns a bunch of distilled RDF
triples using the <a href="http://any23.org" target="_blank">Any23
servlet</a> if pressed on a Web page.</p>
<p style="text-align:center;"><em>So, what’s next?</em></p>
<p>The Web of Data unit has just started. <strong>More things, from
the next release of Sindice.com to other projects currently in
inception, will see the light.</strong> I really hope to keep on
contributing on the concrete consolidation of the Semantic Web, the
Web of Data or Web3.0 or whatever we’d like to call it.</p>
</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:10:06.000000Z</dc:date>
<title>FBK, Any23 and my involvement in Sindice.com</title>
<link>https://davidepalmisano.wordpress.com/2010/02/20/fbk-any23-and-my-involvement-in-sindice-com/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>
<p><a href=
"https://davidepalmisano.files.wordpress.com/2010/02/fbk_reassembled_logo.png">
<img data-attachment-id="96" data-permalink=
"https://davidepalmisano.wordpress.com/2010/02/20/fbk-any23-and-my-involvement-in-sindice-com/fbk_reassembled_logo/"
data-orig-file=
"https://davidepalmisano.files.wordpress.com/2010/02/fbk_reassembled_logo.png"
data-orig-size="670,822" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":""}"
data-image-title="FBK – Research in your heart"
data-image-description="" data-image-caption="" data-medium-file=
"https://davidepalmisano.files.wordpress.com/2010/02/fbk_reassembled_logo.png?w=245"
data-large-file=
"https://davidepalmisano.files.wordpress.com/2010/02/fbk_reassembled_logo.png?w=450"
class="alignleft size-medium wp-image-96" title=
"FBK - Research in your heart" src=
"https://davidepalmisano.files.wordpress.com/2010/02/fbk_reassembled_logo.png?w=245&h=300"
alt="" srcset=
"https://davidepalmisano.files.wordpress.com/2010/02/fbk_reassembled_logo.png?w=244 244w, https://davidepalmisano.files.wordpress.com/2010/02/fbk_reassembled_logo.png?w=488 488w, https://davidepalmisano.files.wordpress.com/2010/02/fbk_reassembled_logo.png?w=122 122w"
sizes="(max-width: 244px) 100vw, 244px" /></a>After almost two
years spent working at Asemantics, I left it to join the <a href=
"http://fbk.eu" target="_blank">Fondazione Bruno Kessler (FBK)</a>,
a quite large research institute based in <a href=
"http://maps.google.com/maps?client=safari&rls=en&q=Trento&oe=UTF-8&um=1&ie=UTF-8&hq=&hnear=Trento,+Italy&ei=GxWAS7izOpDz_AaJv53zBg&sa=X&oi=geocode_result&ct=image&resnum=1&ved=0CA0Q8gEwAA">
Trento</a>.</p>
<p>These last two years have been amazing: I met very skilled and
enthusiastic people working with them on a broad set of different
technologies. Every day spent there has been an opportunity for me
to learn something new from them, and at the very end they are now
very good friends more than colleagues. Now Asemantics is part of
the bigger <a href=
"http://www.pro-netics.com/site/display/site/Home" target=
"_blank">Pro-netics Group</a>.</p>
<p>Moved from Rome, I decided to follow <a href="http://g1o.net/"
target="_blank">Giovanni Tummarello</a> and <a href=
"http://twitter.com/micmos" target="_blank">Michele Mostarda</a> to
<strong>la</strong><strong>unch from scratch a new research unit at
FBK called</strong> <a href="http://wed.fbk.eu/en/home" target=
"_blank"><strong>“Web of Data”</strong></a>. FBK is a
well-established organization with several units acting on a
plethora of different research fields. Every day there is the
opportunity to join workshops and other kind of events.</p>
<p>Just to give you an idea of how the things work here, in the
April 2009 <a href="http://www.davidorban.com/en/" target=
"_blank">David Orban</a> gave a talk here on <a href=
"http://www.oskarnrk.net/2009/04/david-orban-alla-fondazione-bruno-kessler-the-open-internet-of-things/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+oskarnrk+%28Oskar+NRK%29"
target="_blank">“The Open Internet of Things”</a> attended by a
large number of researchers and students. Aside FBK, <strong>in
Trento there is a quite active community hanging out around the
Semantic Web.</strong></p>
<p><em>“<a href="http://www.expertsystem.net/news.asp?idd=1475"
target="_blank">The Semantic Valley”</a>, that’s how they call this
euphoric movement around these technologies.</em></p>
<p>Back to me, the new “Web of Data” unit has joined the <a href=
"http://sindice.com" target="_blank">Sindice.com</a> army and
<strong>the last minute release of</strong> <a href=
"http://developers.any23.org" target=
"_blank"><strong>Any23</strong></a> <strong>0.2 is only the first
outcome of this joint effort on the Semantic Web Index
between</strong> <a href="http://deri.ie" target=
"_blank"><strong>DERI</strong></a> <strong>and FBK</strong>.</p>
<p>In particularly, the <strong>Any23</strong> 0.2 release has been
my first task here. <strong>It’s library, a service, an RDF
distiller</strong>. It’s used on board the Sindice ingestion
pipeline, it’s publicly available here and yesterday I spent a
couple of minutes to write this simple bookmarklet:</p>
<blockquote>
<p style="text-align:center;">javascript:window.open(‘<a href=
"http://any23.org/best/%E2%80%99%20+%20window.location" rel=
"nofollow">http://any23.org/best/’%20+%20window.location</a>);</p>
</blockquote>
<p>Once on your browser, it returns a bunch of distilled RDF
triples using the <a href="http://any23.org" target="_blank">Any23
servlet</a> if pressed on a Web page.</p>
<p style="text-align:center;"><em>So, what’s next?</em></p>
<p>The Web of Data unit has just started. <strong>More things, from
the next release of Sindice.com to other projects currently in
inception, will see the light.</strong> I really hope to keep on
contributing on the concrete consolidation of the Semantic Web, the
Web of Data or Web3.0 or whatever we’d like to call it.</p>
</div>
</div>]]></content:encoded>
<description>After almost two years spent working at Asemantics, I left it to join the Fondazione Bruno Kessler (FBK) , a quite large research institute based in Trento . These last two years have been amazing: I met very skilled and enthusiastic people working with them on a broad set of different technologies. Every day spent there has been an opportunity for me to learn something new from them, and at the very end they are now very good friends more than colleagues. Now Asemantics is part of the bigger Pro-netics Group . Moved from Rome, I decided to follow Giovanni ...</description>
</item>
<item rdf:about="https://davidepalmisano.wordpress.com/2009/12/26/cheap-linked-data-identifiers/">
<dc:creator>Davide Palmisano</dc:creator>
<dc:source>turn off the lights, please by Davide Palmisano</dc:source>
<dc:relation>http://davidepalmisano.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>
<p style="text-align:center;"><em>This is a (short) technical
post.</em></p>
<p>Everyday, <strong>I face the problem of getting some Linked Data
URIs that uniquely identify a “thing” starting from an ambiguous,
poor and flat keyword or description</strong>. One of the first
step dealing with the development of application that consumes
Linked Data is to provide a mechanism that allows to link our own
data sets to one (or more) LoD bubble. To gain a clear idea on why
identifiers matters I suggest you to read <a title="this" href=
"http://danbri.org/words/2009/10/09/452" target="_blank">this</a>
note from Dan Brickley: starting from some needs we encountered
within the <a title="NoTube" href="http://notube.tv" target=
"_blank">NoTube</a> project he clearly underlined the importance of
LoD identifiers. Even if the problem of uniquely identifying words
and terms falls in the biggest category usually known as <a title=
"term disambiguation" href=
"http://en.wikipedia.org/wiki/Word_sense_disambiguation" target=
"_blank">term disambiguation</a>, I’d like to clarify here, that
what I’m going to explain is a narrow restriction of the whole
problem.</p>
<p style="text-align:center;"><em>What I really need is a simple
mechanism that allows me to convert one specific type of
identifiers to a set of Linked Data URIs.</em></p>
<p style="text-align:left;">For example, I need something that
<strong>given a book ISBN number it returns me a set of URIs that
are referring to that book</strong>. Or, given the title of a movie
I expect back some URIs (from DBpedia or LinkedMDB or whatever)
identifying and describing it in a unique way.</p>
<p style="text-align:center;"><em>Isn’t SPARQL enough for you to do
that?</em></p>
<p style="text-align:left;">Yes, obviously the following SPARQL
query may be sufficient:</p>
<p style="text-align:left;">but what I need is something quicker
that I may invoke as an HTTP GET like:</p>
<p style="text-align:center;">
<code>http://localhost:8080/resolver?value=978-0-374-16527-7&category=isbn</code></p>
<p style="text-align:left;">returning back to me a simple JSON:</p>
<p style="text-align:left;"><code>{ "mappings": [<br />
"http://dbpedia.org/resource/Gomorrah_%28book%29"],<br />
"status": "ok"<br />
}</code></p>
<p style="text-align:left;">But <strong>the real issue here is the
code overhead necessary if you want to add other kind of
identifiers resolution</strong>. Let’s imagine, for instance, that
I already implemented this kind of service and I want to add
another resolution category. What I should do is to hard code
another SPARQL query, modify the code allowing to invoke it as a
service and redeploy it.</p>
<p style="text-align:center;"><em>I’m sure we could do
better</em>.</p>
<p style="text-align:left;">If we give a closer look at the above
SPARQL query, we easily figure out that the problem could be highly
generalized. In fact, often <strong>resolving such kind of
resolution means perform a SPARQL query asking for URIs that have a
certain value for a certain property</strong>. As dbprop:isbn for
the ISBN case.</p>
<p style="text-align:center;"><em>And this is what I did the last
two days: The NoTube Identity Resolver</em>.</p>
<p style="text-align:left;">A simple Web service (described in the
figure below) fully customizable by simply editing an XML
configuration file.</p>
<p style="text-align:left;"></p>
<div data-shortcode="caption" id="attachment_63" style=
"width: 460px" class="wp-caption aligncenter"><a href=
"https://davidepalmisano.files.wordpress.com/2009/12/arch1.png"><img aria-describedby="caption-attachment-63"
data-attachment-id="63" data-permalink=
"https://davidepalmisano.wordpress.com/2009/12/26/cheap-linked-data-identifiers/arch-2/"
data-orig-file=
"https://davidepalmisano.files.wordpress.com/2009/12/arch1.png"
data-orig-size="3856,2131" data-comments-opened="1"
data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":""}"
data-image-title="NoTube Identity Resolver architecture"
data-image-description=
"<p>NoTube Identity Resolver architecture</p>"
data-image-caption=
"<p>NoTube Identity Resolver architecture</p>"
data-medium-file=
"https://davidepalmisano.files.wordpress.com/2009/12/arch1.png?w=300"
data-large-file=
"https://davidepalmisano.files.wordpress.com/2009/12/arch1.png?w=450"
class="size-large wp-image-63" title=
"NoTube Identity Resolver architecture" src=
"https://davidepalmisano.files.wordpress.com/2009/12/arch1.png?w=450&h=249"
alt="" srcset=
"https://davidepalmisano.files.wordpress.com/2009/12/arch1.png?w=430 430w, https://davidepalmisano.files.wordpress.com/2009/12/arch1.png?w=860 860w, https://davidepalmisano.files.wordpress.com/2009/12/arch1.png?w=150 150w, https://davidepalmisano.files.wordpress.com/2009/12/arch1.png?w=300 300w, https://davidepalmisano.files.wordpress.com/2009/12/arch1.png?w=768 768w"
sizes="(max-width: 430px) 100vw, 430px" /></a>
<p id="caption-attachment-63" class="wp-caption-text">NoTube
Identity Resolver architecture</p>
</div>
<p style="text-align:left;">The <em>resolvers.xml</em> file allows
you to provide a simple description of the resolution policy that
will be accessible with a simple HTTP GET call.</p>
<p style="text-align:left;">Back to the ISBN example, the following
piece of XML is enough to describe the resolver:</p>
<p style="text-align:left;"><code><resolver id=”2″
type=”normal”><br />
<category>isbn</category><br />
<endpoint>http://dbpedia.org/sparql</endpoint><br />
<lookup>dbpedia-owl:isbn</lookup><br />
<sameas>true</sameas><br />
<matching>LITERAL</matching><br />
</resolver></code></p>
<p style="text-align:left;">Where:</p>
<ul>
<li><strong>category</strong> is the value that have to be passed
as parameter in the HTTP GET call to invoke this resolver</li>
<li><strong>endpoint</strong> is the address of a SPARQL Endpoint
where make the resolution</li>
<li><strong>lookup</strong> is the name of the property intended to
be</li>
<li><strong>type</strong> (optional) the rdf:type of the resources
to be resolved</li>
<li><strong>sameas</strong> boolean value enabling or not the
calling of the SameAs.org service to gain equivalent URIs</li>
<li><strong>matching</strong> (allowing only <strong>URI</strong>
and <strong>LITERAL</strong> as value) this element describes the
type of the value to be resolved.</li>
</ul>
<p style="text-align:left;">Moreover, the NoTube Identity Resolver
gives you also the possibility to specify more complex resolution
policies through a SPARQL query as shown below:</p>
<p style="text-align:left;"><code><resolver id="3"
type="custom"><br />
<category>movie</category><br />
<endpoint>http://dbpedia.org/sparql</endpoint><br />
<sparql><![CDATA[SELECT DISTINCT ?subject<br />
WHERE { ?subject a <http://dbpedia.org/ontology/Film>.<br />
?subject <http://dbpedia.org/property/title> ?title.<br />
FILTER (regex(?title, "#VALUE#")) }]]><br />
</sparql><br />
<sameas>true</sameas><br />
</resolver></code></p>
<p style="text-align:left;">In other words, every resolver
described in the <em>resolvers.xml</em> file allows you to enable
one kind of resolution mechanism without writing a line af Java
code.</p>
<p style="text-align:center;"><em>Do you want to try?</em></p>
<p style="text-align:left;">Just <a title="download" href=
"http://code.google.com/p/notube-collector/source/browse/trunk/prototypes/notube-identity-resolver/target/notube-identity-resolver.war"
target="_blank">download</a> the war package, get this <a href=
"http://code.google.com/p/notube-collector/source/browse/trunk/prototypes/notube-identity-resolver/src/test/resources/resolvers.xml"
target="_self">resolvers.xml</a> (or write your own), export the
<strong>RESOLVERS_XML_LOCATION</strong> environment variable
pointing to the folder where the <em>resolvers.xml</em> is located,
deploy the war on your Apache Tomcat application server, start the
application and try it out heading your browser to:</p>
<p style="text-align:center;">
<code>http://localhost:8080/notube-identity-resolver/resolver?value=978-0-374-16527-7&category=isbn</code></p>
<p style="text-align:center;"><em>That’s all folks</em></p>
</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:10:06.000000Z</dc:date>
<title>Cheap Linked Data identifiers</title>
<link>https://davidepalmisano.wordpress.com/2009/12/26/cheap-linked-data-identifiers/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>
<p style="text-align:center;"><em>This is a (short) technical
post.</em></p>
<p>Everyday, <strong>I face the problem of getting some Linked Data
URIs that uniquely identify a “thing” starting from an ambiguous,
poor and flat keyword or description</strong>. One of the first
step dealing with the development of application that consumes
Linked Data is to provide a mechanism that allows to link our own
data sets to one (or more) LoD bubble. To gain a clear idea on why
identifiers matters I suggest you to read <a title="this" href=
"http://danbri.org/words/2009/10/09/452" target="_blank">this</a>
note from Dan Brickley: starting from some needs we encountered
within the <a title="NoTube" href="http://notube.tv" target=
"_blank">NoTube</a> project he clearly underlined the importance of
LoD identifiers. Even if the problem of uniquely identifying words
and terms falls in the biggest category usually known as <a title=
"term disambiguation" href=
"http://en.wikipedia.org/wiki/Word_sense_disambiguation" target=
"_blank">term disambiguation</a>, I’d like to clarify here, that
what I’m going to explain is a narrow restriction of the whole
problem.</p>
<p style="text-align:center;"><em>What I really need is a simple
mechanism that allows me to convert one specific type of
identifiers to a set of Linked Data URIs.</em></p>
<p style="text-align:left;">For example, I need something that
<strong>given a book ISBN number it returns me a set of URIs that
are referring to that book</strong>. Or, given the title of a movie
I expect back some URIs (from DBpedia or LinkedMDB or whatever)
identifying and describing it in a unique way.</p>
<p style="text-align:center;"><em>Isn’t SPARQL enough for you to do
that?</em></p>
<p style="text-align:left;">Yes, obviously the following SPARQL
query may be sufficient:</p>
<p style="text-align:left;">but what I need is something quicker
that I may invoke as an HTTP GET like:</p>
<p style="text-align:center;">
<code>http://localhost:8080/resolver?value=978-0-374-16527-7&category=isbn</code></p>
<p style="text-align:left;">returning back to me a simple JSON:</p>
<p style="text-align:left;"><code>{ "mappings": [<br />
"http://dbpedia.org/resource/Gomorrah_%28book%29"],<br />
"status": "ok"<br />
}</code></p>
<p style="text-align:left;">But <strong>the real issue here is the
code overhead necessary if you want to add other kind of
identifiers resolution</strong>. Let’s imagine, for instance, that
I already implemented this kind of service and I want to add
another resolution category. What I should do is to hard code
another SPARQL query, modify the code allowing to invoke it as a
service and redeploy it.</p>
<p style="text-align:center;"><em>I’m sure we could do
better</em>.</p>
<p style="text-align:left;">If we give a closer look at the above
SPARQL query, we easily figure out that the problem could be highly
generalized. In fact, often <strong>resolving such kind of
resolution means perform a SPARQL query asking for URIs that have a
certain value for a certain property</strong>. As dbprop:isbn for
the ISBN case.</p>
<p style="text-align:center;"><em>And this is what I did the last
two days: The NoTube Identity Resolver</em>.</p>
<p style="text-align:left;">A simple Web service (described in the
figure below) fully customizable by simply editing an XML
configuration file.</p>
<p style="text-align:left;"></p>
<div data-shortcode="caption" id="attachment_63" style=
"width: 460px" class="wp-caption aligncenter"><a href=
"https://davidepalmisano.files.wordpress.com/2009/12/arch1.png"><img aria-describedby="caption-attachment-63"
data-attachment-id="63" data-permalink=
"https://davidepalmisano.wordpress.com/2009/12/26/cheap-linked-data-identifiers/arch-2/"
data-orig-file=
"https://davidepalmisano.files.wordpress.com/2009/12/arch1.png"
data-orig-size="3856,2131" data-comments-opened="1"
data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":""}"
data-image-title="NoTube Identity Resolver architecture"
data-image-description=
"<p>NoTube Identity Resolver architecture</p>"
data-image-caption=
"<p>NoTube Identity Resolver architecture</p>"
data-medium-file=
"https://davidepalmisano.files.wordpress.com/2009/12/arch1.png?w=300"
data-large-file=
"https://davidepalmisano.files.wordpress.com/2009/12/arch1.png?w=450"
class="size-large wp-image-63" title=
"NoTube Identity Resolver architecture" src=
"https://davidepalmisano.files.wordpress.com/2009/12/arch1.png?w=450&h=249"
alt="" srcset=
"https://davidepalmisano.files.wordpress.com/2009/12/arch1.png?w=430 430w, https://davidepalmisano.files.wordpress.com/2009/12/arch1.png?w=860 860w, https://davidepalmisano.files.wordpress.com/2009/12/arch1.png?w=150 150w, https://davidepalmisano.files.wordpress.com/2009/12/arch1.png?w=300 300w, https://davidepalmisano.files.wordpress.com/2009/12/arch1.png?w=768 768w"
sizes="(max-width: 430px) 100vw, 430px" /></a>
<p id="caption-attachment-63" class="wp-caption-text">NoTube
Identity Resolver architecture</p>
</div>
<p style="text-align:left;">The <em>resolvers.xml</em> file allows
you to provide a simple description of the resolution policy that
will be accessible with a simple HTTP GET call.</p>
<p style="text-align:left;">Back to the ISBN example, the following
piece of XML is enough to describe the resolver:</p>
<p style="text-align:left;"><code><resolver id=”2″
type=”normal”><br />
<category>isbn</category><br />
<endpoint>http://dbpedia.org/sparql</endpoint><br />
<lookup>dbpedia-owl:isbn</lookup><br />
<sameas>true</sameas><br />
<matching>LITERAL</matching><br />
</resolver></code></p>
<p style="text-align:left;">Where:</p>
<ul>
<li><strong>category</strong> is the value that have to be passed
as parameter in the HTTP GET call to invoke this resolver</li>
<li><strong>endpoint</strong> is the address of a SPARQL Endpoint
where make the resolution</li>
<li><strong>lookup</strong> is the name of the property intended to
be</li>
<li><strong>type</strong> (optional) the rdf:type of the resources
to be resolved</li>
<li><strong>sameas</strong> boolean value enabling or not the
calling of the SameAs.org service to gain equivalent URIs</li>
<li><strong>matching</strong> (allowing only <strong>URI</strong>
and <strong>LITERAL</strong> as value) this element describes the
type of the value to be resolved.</li>
</ul>
<p style="text-align:left;">Moreover, the NoTube Identity Resolver
gives you also the possibility to specify more complex resolution
policies through a SPARQL query as shown below:</p>
<p style="text-align:left;"><code><resolver id="3"
type="custom"><br />
<category>movie</category><br />
<endpoint>http://dbpedia.org/sparql</endpoint><br />
<sparql><![CDATA[SELECT DISTINCT ?subject<br />
WHERE { ?subject a <http://dbpedia.org/ontology/Film>.<br />
?subject <http://dbpedia.org/property/title> ?title.<br />
FILTER (regex(?title, "#VALUE#")) }]]><br />
</sparql><br />
<sameas>true</sameas><br />
</resolver></code></p>
<p style="text-align:left;">In other words, every resolver
described in the <em>resolvers.xml</em> file allows you to enable
one kind of resolution mechanism without writing a line af Java
code.</p>
<p style="text-align:center;"><em>Do you want to try?</em></p>
<p style="text-align:left;">Just <a title="download" href=
"http://code.google.com/p/notube-collector/source/browse/trunk/prototypes/notube-identity-resolver/target/notube-identity-resolver.war"
target="_blank">download</a> the war package, get this <a href=
"http://code.google.com/p/notube-collector/source/browse/trunk/prototypes/notube-identity-resolver/src/test/resources/resolvers.xml"
target="_self">resolvers.xml</a> (or write your own), export the
<strong>RESOLVERS_XML_LOCATION</strong> environment variable
pointing to the folder where the <em>resolvers.xml</em> is located,
deploy the war on your Apache Tomcat application server, start the
application and try it out heading your browser to:</p>
<p style="text-align:center;">
<code>http://localhost:8080/notube-identity-resolver/resolver?value=978-0-374-16527-7&category=isbn</code></p>
<p style="text-align:center;"><em>That’s all folks</em></p>
</div>
</div>]]></content:encoded>
<description>This is a (short) technical post. Everyday, I face the problem of getting some Linked Data URIs that uniquely identify a “thing” starting from an ambiguous, poor and flat keyword or description . One of the first step dealing with the development of application that consumes Linked Data is to provide a mechanism that allows to link our own data sets to one (or more) LoD bubble. To gain a clear idea on why identifiers matters I suggest you to read this note from Dan Brickley: starting from some needs we encountered within the NoTube project he clearly underlined the ...</description>
</item>
<item rdf:about="https://davidepalmisano.wordpress.com/2009/12/13/rww-2009-top-10-semantic-web-products-one-year-later/">
<dc:creator>Davide Palmisano</dc:creator>
<dc:source>turn off the lights, please by Davide Palmisano</dc:source>
<dc:relation>http://davidepalmisano.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>
<p><a href=
"https://davidepalmisano.files.wordpress.com/2009/12/logos.png"><img data-attachment-id="36"
data-permalink=
"https://davidepalmisano.wordpress.com/2009/12/13/rww-2009-top-10-semantic-web-products-one-year-later/logos/"
data-orig-file=
"https://davidepalmisano.files.wordpress.com/2009/12/logos.png"
data-orig-size="660,494" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":""}"
data-image-title="logos" data-image-description=""
data-image-caption="" data-medium-file=
"https://davidepalmisano.files.wordpress.com/2009/12/logos.png?w=300"
data-large-file=
"https://davidepalmisano.files.wordpress.com/2009/12/logos.png?w=450"
class="alignleft size-medium wp-image-36" title="logos" src=
"https://davidepalmisano.files.wordpress.com/2009/12/logos.png?w=300&h=224"
alt="" srcset=
"https://davidepalmisano.files.wordpress.com/2009/12/logos.png?w=300 300w, https://davidepalmisano.files.wordpress.com/2009/12/logos.png?w=270 270w, https://davidepalmisano.files.wordpress.com/2009/12/logos.png?w=540 540w, https://davidepalmisano.files.wordpress.com/2009/12/logos.png?w=150 150w"
sizes="(max-width: 270px) 100vw, 270px" /></a><br />
Just few days ago the popular ReadWriteWeb published a list of the
<a href=
"http://www.readwriteweb.com/archives/top_10_semantic_web_products_of_2009.php">
2009 Top Ten Semantic Web products</a> as they did one year ago
with the <a href=
"http://www.readwriteweb.com/archives/top_10_semantic_web_products_2008.php">
2008 Top Ten</a>.</p>
<p><strong>This two milestones are a good opportunity to make
something similar to a balance.</strong> Or just to do a quick
overview on what’s changed in the <em>“Web of Data”</em>, only one
year later.</p>
<p>The 2008 Top Ten foreseen the following applications, listed in
the same ReadWriteWeb order and enriched with some personal
opinions.</p>
<p><strong>Yahoo Search Monkey</strong></p>
<p>It’s great. <a href=
"http://developer.yahoo.com/searchmonkey/">Search Monkey</a>
represents the first kind of next-generation search engines due its
capability to be fully customized by third party developers.
Recently, a <a href=
"http://www.mail-archive.com/public-lod@w3.org/msg03691.html">breaking
news</a> woke up the <em>“sem webbers”</em> of the whole planet:
Yahoo started to show structured data exposed with RDFa in the
search results page. That news bounced all over the Web and those
interested in SEO started to appreciate Semantic Web technologies
for their business. <strong>But, unfortunately, at the moment I’m
writing, RDFa is not showed anymore on search results due to an
layout update that broke this functionality.</strong> Even if there
are rumors on a imminent fixing of this, the main problem is the
robustness and the reliability of that kind of services: investors
need to be properly guaranteed on the effectiveness of their
investments.</p>
<p><strong>Powerset</strong></p>
<p>Probably, this neat application has became really popular when
it has been acquired by Microsoft. It allows to make simple natural
language queries like “<em>film where Kevin Spacey acted”</em> and,
a first glance, the results seems really much better than other
traditional search engines. Honestly I don’t really know what are
the technologies they are using to do this magic. <strong>But, it
would be nice to compare their results with an hypothetical service
that translates such human text queries in a set of SPARQL queries
over DBpedia.</strong> Anyone interested in do that? I’ll be more
than happy to be engaged in a project like that.</p>
<p><strong>Open Calais</strong></p>
<p>With a large and massive branding operation these guys built the
image of this service as it be the only one fitting everyone’s need
when dealing with semantic enrichment of unstructured free-texts.
Even this is partly true (why don’t mentioning the <a href=
"http://incubator.apache.org/uima/annotators.html#opencalais.annotator">
Apache UIMA Open Calais annotator</a>?), there are a lot of other
interesting services that are, for certain aspects, more intriguing
than the Reuters one. Don’t believe me? Let’s give a try to
<a href="http://www.alchemyapi.com/">AlchemyAPI</a>.</p>
<p><strong>Dapper</strong></p>
<p>I have to admit my ignorance here. I never heard about it, but
it looks very very interesting. Certainly this service that offers,
mainly, some sort of semantic advertisement is more than promising.
I’ll keep an eye on it.</p>
<p><strong>Hakia</strong></p>
<p>Down at the moment I’m writing. <img src=
"https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f626.png"
alt="😦" class="wp-smiley" style=
"height: 1em; max-height: 1em;" /></p>
<p><strong>Tripit</strong></p>
<p>Many friends of mine are using it and this could be enough to
give it popularity. Again, I don’t know if they are using some of
the W3C Semantic Web technologies to models their data. RDF or not,
this is a neat example of semantic web application with a good
potential: is this enough to you?</p>
<p><strong>BooRah</strong></p>
<p>Another case of personal ignorance. This magic is, mainly, a
restaurant review site. BooRah uses semantic analysis and natural
language processing to aggregate reviews from food blogs. Because
of this, BooRah can recognize praise and criticism in these reviews
and then rates restaurants accordingly to them. One criticism? The
underlying data are perhaps not so much rich. Sounds impossible to
me that searching for <em>“Pizza in Italy”</em> returns
nothing.</p>
<p><strong>Blue Organizer (or GetGlue?)</strong></p>
<p>It’s not a secret that <strong>I consider Glue one of the most
innovative and intriguing stuff on the Web</strong>. And when it
appeared on the ReadWriteWeb 10 Top Semantic Web applications was
far away from what is now. Just one year later, GetGlue (Blue
Organizer seems to be the former name) appears as a growing and
live community of people that realized how is important to wave the
Web with the aim of a tool that act as a content cross-recommender.
Moreover GetGlue provides a neat set of Web APIs that I’m widely
using within the <a href="http://notube.tv">NoTube project</a>.</p>
<p><strong>Zemanta</strong></p>
<p>A clear idea, a powerful branding and a well designed set of
services accessible with Web APIs make Zemanta one of the most
successful product on the stage. Do I have to say anything more? If
you like Zemanta I suggest you to keep an eye also on <a href=
"http://twitter.com/dpalmisano/status/6266367726">Loomp</a>, a nice
stuff presented at the European Semantic Technology Conference
2009.</p>
<p><strong>UpTake.com</strong></p>
<p>Mainly, a semantic search engine over a huge database containing
more than 400,000 hotels in the US. Where’s the semantic there?
Uptake.com crawls and semantically extracts the information
implicitly hidden in those records. <strong>A good example of how
innovative technologies could be applied to well-know application
domains as the hotels searching one.</strong></p>
<p style="text-align:center;"><em>On year later…</em></p>
<p>Indubitably, 2009 has been ruled by the Linked Data Initiative,
as I love to call it. Officially Linked Data is about <em>“using
the Web to connect related data that wasn’t previously linked, or
using the Web to lower the barriers to linking data currently
linked using other methods”</em> and, if we look to its <a href=
"http://richard.cyganiak.de/2007/10/lod">growing rate</a>, could be
simple to bet on it success.</p>
<p>Here is the the 2009 top-ten where I omitted GetGlue, Zemanta
and OpenCalais since they already appeared also in the 2008
edition:</p>
<p><strong>Google Search Options and Rich Snippets</strong></p>
<p>When this new feature of Google has been announced the whole
Semantic Web community realized that something very powerful
started to move along. Google Rich Snippet makes use of the RDFa
contained in the HTML Web pages to power rich snippets feature.</p>
<p><strong>Feedly</strong></p>
<p>It’s a very very nice feeds aggregator built upon Google Reader,
Twitter and FriendFeed. It’s easy to use, nice and really useful
(well, at least it seems so to me) but, unfortunately, I cannot see
where is the Semantic aspects here.</p>
<p><strong>Apture</strong></p>
<p>This JavaScript cool stuff allows publishers to add contextual
information to links via pop-ups which display when users hover
over or click on them. Watching HTML pages built with the aid of
this tool, Apture closely remembers me the <a href=
"http://www.snap.com/snapshots.php">WordPress Snap-Shot plugin</a>.
But Apture seems richer than Snap-Shot since it allows the
publishers to directly add links and other stuff they want to
display when the pages are rendered.</p>
<p><strong>BBC Semantic Music Project</strong></p>
<p>Built upon Musicbrainz.org (one of the most representative
Linked Data cloud) it’s a very remarkable initiative. Personally,
I’m using it within the NoTube project to disambiguate Last.fm
bands. Concretely, given a certain Last.fm band identifier, I make
a query to the BBC /music that returns me a URI. With this URI I
ask the <a href="http://sameas.org/">sameas.org</a> service to give
me other URIs referring to the same band. In this way I can
associate to every Last.fm bands a set of Linked Data URIs where
obtain a full flavor of coherent data about them.</p>
<p><strong>Freebase</strong></p>
<p>It’s an open, semantically marked up shared database powered by
<a href="http://www.metaweb.com/">Metaweb.com</a> a great company
based in San Francisco. Its popularity is growing fast, as <a href=
"http://www.readwriteweb.com/archives/metawebs_freebase_now_60_large.php">
ReadWriteWeb already noticed</a>. Somehow similar to Wikipedia,
<strong>Freebase provides all the mechanisms necessary to syndicate
its data in a machine-readable form. Mainly, with RDF.</strong>
Moreover, other Linked Data clouds started to add owl:sameAs links
to Freebase: do I have to add something else?</p>
<p><strong>Dbpedia</strong></p>
<p>DBpedia is the nucleus of the <a href=
"http://www.citeulike.org/user/mdreid/article/2901818">Web of
Data</a>. The only thing I’d like to add is: it deserves to be on
the ReadWriteWeb 2009 top-ten more than the others.</p>
<p><strong>Data.gov</strong></p>
<p>It’s a remarkable US government initiative to <em>“increase
public access to high value, machine readable datasets generated by
the Executive Branch of the Federal Government.”</em>. It’s a start
and I dream to see something like this even here in Italy.</p>
<p style="text-align:center;"><em>So what’s up in the end?</em></p>
<p><strong>It’s my opinion that the 2009 has been the year of
Linked Data. New clouds born every month, new links between the
already existent ones are established and a new breed of developers
are being aware of the potential and the threats of Linked Data
consuming applications.</strong> It seems that the Web of Data is
finally taking shape even if something strange is still in the air.
First of all, if we give a closer look to the ReadWriteWeb 2009 Top
Ten I have to underline that 3 products on 10 already were also in
the 2008 chart. Maybe the popular blog liked to stress on the
progresses that these products made but it sound a bit strange to
me that they forgot nice products such as the <a href=
"http://freemix.it">FreeMix</a>, <a href=
"http://www.alchemyapi.com/">Alchemy API</a>, <a href=
"http://sindice.com">Sindice</a>, <a href=
"http://virtuoso.openlinksw.com/">OpenLink Virtuoso</a> and the
BestBuy.com usage of <a href=
"http://ebusiness-unibw.org/pipermail/goodrelations/2009-August/000103.html">
GoodRelations ontology</a>. Secondly, 3 products listed in the 2009
chart are public-funded initiatives that, even if is reasonable due
to the nature of the products, it leave me with the impression that
private investors are not in the loop yet.</p>
<p style="text-align:center;"><em>What I expect from the 2010,
then?</em></p>
<p>A large and massive rush to using RDFa for SEO porpoises, a
sustained grow of Linked Data clouds and, I really hope,
<strong>the rise of a new application paradigm grounded to the
consumption of such interlinked data.</strong></p>
</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:10:06.000000Z</dc:date>
<title>RWW 2009 Top 10 Semantic Web products: one year
later…</title>
<link>https://davidepalmisano.wordpress.com/2009/12/13/rww-2009-top-10-semantic-web-products-one-year-later/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>
<p><a href=
"https://davidepalmisano.files.wordpress.com/2009/12/logos.png"><img data-attachment-id="36"
data-permalink=
"https://davidepalmisano.wordpress.com/2009/12/13/rww-2009-top-10-semantic-web-products-one-year-later/logos/"
data-orig-file=
"https://davidepalmisano.files.wordpress.com/2009/12/logos.png"
data-orig-size="660,494" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":""}"
data-image-title="logos" data-image-description=""
data-image-caption="" data-medium-file=
"https://davidepalmisano.files.wordpress.com/2009/12/logos.png?w=300"
data-large-file=
"https://davidepalmisano.files.wordpress.com/2009/12/logos.png?w=450"
class="alignleft size-medium wp-image-36" title="logos" src=
"https://davidepalmisano.files.wordpress.com/2009/12/logos.png?w=300&h=224"
alt="" srcset=
"https://davidepalmisano.files.wordpress.com/2009/12/logos.png?w=300 300w, https://davidepalmisano.files.wordpress.com/2009/12/logos.png?w=270 270w, https://davidepalmisano.files.wordpress.com/2009/12/logos.png?w=540 540w, https://davidepalmisano.files.wordpress.com/2009/12/logos.png?w=150 150w"
sizes="(max-width: 270px) 100vw, 270px" /></a><br />
Just few days ago the popular ReadWriteWeb published a list of the
<a href=
"http://www.readwriteweb.com/archives/top_10_semantic_web_products_of_2009.php">
2009 Top Ten Semantic Web products</a> as they did one year ago
with the <a href=
"http://www.readwriteweb.com/archives/top_10_semantic_web_products_2008.php">
2008 Top Ten</a>.</p>
<p><strong>This two milestones are a good opportunity to make
something similar to a balance.</strong> Or just to do a quick
overview on what’s changed in the <em>“Web of Data”</em>, only one
year later.</p>
<p>The 2008 Top Ten foreseen the following applications, listed in
the same ReadWriteWeb order and enriched with some personal
opinions.</p>
<p><strong>Yahoo Search Monkey</strong></p>
<p>It’s great. <a href=
"http://developer.yahoo.com/searchmonkey/">Search Monkey</a>
represents the first kind of next-generation search engines due its
capability to be fully customized by third party developers.
Recently, a <a href=
"http://www.mail-archive.com/public-lod@w3.org/msg03691.html">breaking
news</a> woke up the <em>“sem webbers”</em> of the whole planet:
Yahoo started to show structured data exposed with RDFa in the
search results page. That news bounced all over the Web and those
interested in SEO started to appreciate Semantic Web technologies
for their business. <strong>But, unfortunately, at the moment I’m
writing, RDFa is not showed anymore on search results due to an
layout update that broke this functionality.</strong> Even if there
are rumors on a imminent fixing of this, the main problem is the
robustness and the reliability of that kind of services: investors
need to be properly guaranteed on the effectiveness of their
investments.</p>
<p><strong>Powerset</strong></p>
<p>Probably, this neat application has became really popular when
it has been acquired by Microsoft. It allows to make simple natural
language queries like “<em>film where Kevin Spacey acted”</em> and,
a first glance, the results seems really much better than other
traditional search engines. Honestly I don’t really know what are
the technologies they are using to do this magic. <strong>But, it
would be nice to compare their results with an hypothetical service
that translates such human text queries in a set of SPARQL queries
over DBpedia.</strong> Anyone interested in do that? I’ll be more
than happy to be engaged in a project like that.</p>
<p><strong>Open Calais</strong></p>
<p>With a large and massive branding operation these guys built the
image of this service as it be the only one fitting everyone’s need
when dealing with semantic enrichment of unstructured free-texts.
Even this is partly true (why don’t mentioning the <a href=
"http://incubator.apache.org/uima/annotators.html#opencalais.annotator">
Apache UIMA Open Calais annotator</a>?), there are a lot of other
interesting services that are, for certain aspects, more intriguing
than the Reuters one. Don’t believe me? Let’s give a try to
<a href="http://www.alchemyapi.com/">AlchemyAPI</a>.</p>
<p><strong>Dapper</strong></p>
<p>I have to admit my ignorance here. I never heard about it, but
it looks very very interesting. Certainly this service that offers,
mainly, some sort of semantic advertisement is more than promising.
I’ll keep an eye on it.</p>
<p><strong>Hakia</strong></p>
<p>Down at the moment I’m writing. <img src=
"https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f626.png"
alt="😦" class="wp-smiley" style=
"height: 1em; max-height: 1em;" /></p>
<p><strong>Tripit</strong></p>
<p>Many friends of mine are using it and this could be enough to
give it popularity. Again, I don’t know if they are using some of
the W3C Semantic Web technologies to models their data. RDF or not,
this is a neat example of semantic web application with a good
potential: is this enough to you?</p>
<p><strong>BooRah</strong></p>
<p>Another case of personal ignorance. This magic is, mainly, a
restaurant review site. BooRah uses semantic analysis and natural
language processing to aggregate reviews from food blogs. Because
of this, BooRah can recognize praise and criticism in these reviews
and then rates restaurants accordingly to them. One criticism? The
underlying data are perhaps not so much rich. Sounds impossible to
me that searching for <em>“Pizza in Italy”</em> returns
nothing.</p>
<p><strong>Blue Organizer (or GetGlue?)</strong></p>
<p>It’s not a secret that <strong>I consider Glue one of the most
innovative and intriguing stuff on the Web</strong>. And when it
appeared on the ReadWriteWeb 10 Top Semantic Web applications was
far away from what is now. Just one year later, GetGlue (Blue
Organizer seems to be the former name) appears as a growing and
live community of people that realized how is important to wave the
Web with the aim of a tool that act as a content cross-recommender.
Moreover GetGlue provides a neat set of Web APIs that I’m widely
using within the <a href="http://notube.tv">NoTube project</a>.</p>
<p><strong>Zemanta</strong></p>
<p>A clear idea, a powerful branding and a well designed set of
services accessible with Web APIs make Zemanta one of the most
successful product on the stage. Do I have to say anything more? If
you like Zemanta I suggest you to keep an eye also on <a href=
"http://twitter.com/dpalmisano/status/6266367726">Loomp</a>, a nice
stuff presented at the European Semantic Technology Conference
2009.</p>
<p><strong>UpTake.com</strong></p>
<p>Mainly, a semantic search engine over a huge database containing
more than 400,000 hotels in the US. Where’s the semantic there?
Uptake.com crawls and semantically extracts the information
implicitly hidden in those records. <strong>A good example of how
innovative technologies could be applied to well-know application
domains as the hotels searching one.</strong></p>
<p style="text-align:center;"><em>On year later…</em></p>
<p>Indubitably, 2009 has been ruled by the Linked Data Initiative,
as I love to call it. Officially Linked Data is about <em>“using
the Web to connect related data that wasn’t previously linked, or
using the Web to lower the barriers to linking data currently
linked using other methods”</em> and, if we look to its <a href=
"http://richard.cyganiak.de/2007/10/lod">growing rate</a>, could be
simple to bet on it success.</p>
<p>Here is the the 2009 top-ten where I omitted GetGlue, Zemanta
and OpenCalais since they already appeared also in the 2008
edition:</p>
<p><strong>Google Search Options and Rich Snippets</strong></p>
<p>When this new feature of Google has been announced the whole
Semantic Web community realized that something very powerful
started to move along. Google Rich Snippet makes use of the RDFa
contained in the HTML Web pages to power rich snippets feature.</p>
<p><strong>Feedly</strong></p>
<p>It’s a very very nice feeds aggregator built upon Google Reader,
Twitter and FriendFeed. It’s easy to use, nice and really useful
(well, at least it seems so to me) but, unfortunately, I cannot see
where is the Semantic aspects here.</p>
<p><strong>Apture</strong></p>
<p>This JavaScript cool stuff allows publishers to add contextual
information to links via pop-ups which display when users hover
over or click on them. Watching HTML pages built with the aid of
this tool, Apture closely remembers me the <a href=
"http://www.snap.com/snapshots.php">WordPress Snap-Shot plugin</a>.
But Apture seems richer than Snap-Shot since it allows the
publishers to directly add links and other stuff they want to
display when the pages are rendered.</p>
<p><strong>BBC Semantic Music Project</strong></p>
<p>Built upon Musicbrainz.org (one of the most representative
Linked Data cloud) it’s a very remarkable initiative. Personally,
I’m using it within the NoTube project to disambiguate Last.fm
bands. Concretely, given a certain Last.fm band identifier, I make
a query to the BBC /music that returns me a URI. With this URI I
ask the <a href="http://sameas.org/">sameas.org</a> service to give
me other URIs referring to the same band. In this way I can
associate to every Last.fm bands a set of Linked Data URIs where
obtain a full flavor of coherent data about them.</p>
<p><strong>Freebase</strong></p>
<p>It’s an open, semantically marked up shared database powered by
<a href="http://www.metaweb.com/">Metaweb.com</a> a great company
based in San Francisco. Its popularity is growing fast, as <a href=
"http://www.readwriteweb.com/archives/metawebs_freebase_now_60_large.php">
ReadWriteWeb already noticed</a>. Somehow similar to Wikipedia,
<strong>Freebase provides all the mechanisms necessary to syndicate
its data in a machine-readable form. Mainly, with RDF.</strong>
Moreover, other Linked Data clouds started to add owl:sameAs links
to Freebase: do I have to add something else?</p>
<p><strong>Dbpedia</strong></p>
<p>DBpedia is the nucleus of the <a href=
"http://www.citeulike.org/user/mdreid/article/2901818">Web of
Data</a>. The only thing I’d like to add is: it deserves to be on
the ReadWriteWeb 2009 top-ten more than the others.</p>
<p><strong>Data.gov</strong></p>
<p>It’s a remarkable US government initiative to <em>“increase
public access to high value, machine readable datasets generated by
the Executive Branch of the Federal Government.”</em>. It’s a start
and I dream to see something like this even here in Italy.</p>
<p style="text-align:center;"><em>So what’s up in the end?</em></p>
<p><strong>It’s my opinion that the 2009 has been the year of
Linked Data. New clouds born every month, new links between the
already existent ones are established and a new breed of developers
are being aware of the potential and the threats of Linked Data
consuming applications.</strong> It seems that the Web of Data is
finally taking shape even if something strange is still in the air.
First of all, if we give a closer look to the ReadWriteWeb 2009 Top
Ten I have to underline that 3 products on 10 already were also in
the 2008 chart. Maybe the popular blog liked to stress on the
progresses that these products made but it sound a bit strange to
me that they forgot nice products such as the <a href=
"http://freemix.it">FreeMix</a>, <a href=
"http://www.alchemyapi.com/">Alchemy API</a>, <a href=
"http://sindice.com">Sindice</a>, <a href=
"http://virtuoso.openlinksw.com/">OpenLink Virtuoso</a> and the
BestBuy.com usage of <a href=
"http://ebusiness-unibw.org/pipermail/goodrelations/2009-August/000103.html">
GoodRelations ontology</a>. Secondly, 3 products listed in the 2009
chart are public-funded initiatives that, even if is reasonable due
to the nature of the products, it leave me with the impression that
private investors are not in the loop yet.</p>
<p style="text-align:center;"><em>What I expect from the 2010,
then?</em></p>
<p>A large and massive rush to using RDFa for SEO porpoises, a
sustained grow of Linked Data clouds and, I really hope,
<strong>the rise of a new application paradigm grounded to the
consumption of such interlinked data.</strong></p>
</div>
</div>]]></content:encoded>
<description>Just few days ago the popular ReadWriteWeb published a list of the 2009 Top Ten Semantic Web products as they did one year ago with the 2008 Top Ten . This two milestones are a good opportunity to make something similar to a balance. Or just to do a quick overview on what’s changed in the “Web of Data” , only one year later. The 2008 Top Ten foreseen the following applications, listed in the same ReadWriteWeb order and enriched with some personal opinions. Yahoo Search Monkey It’s great. Search Monkey represents the first kind of next-generation search engines due ...</description>
</item>
<item rdf:about="https://davidepalmisano.wordpress.com/2009/09/20/the-italian-political-activism-and-the-semantic-web/">
<dc:creator>Davide Palmisano</dc:creator>
<dc:source>turn off the lights, please by Davide Palmisano</dc:source>
<dc:relation>http://davidepalmisano.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>
<p><img data-attachment-id="12" data-permalink=
"https://davidepalmisano.wordpress.com/2009/09/20/the-italian-political-activism-and-the-semantic-web/grillo05g/"
data-orig-file=
"https://davidepalmisano.files.wordpress.com/2009/09/grillo05g.jpg"
data-orig-size="300,230" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":""}"
data-image-title="Beppe Grillo" data-image-description=""
data-image-caption="" data-medium-file=
"https://davidepalmisano.files.wordpress.com/2009/09/grillo05g.jpg?w=300"
data-large-file=
"https://davidepalmisano.files.wordpress.com/2009/09/grillo05g.jpg?w=300"
class="alignleft size-full wp-image-12" title="Beppe Grillo" src=
"https://davidepalmisano.files.wordpress.com/2009/09/grillo05g.jpg?w=450"
alt="Beppe Grillo" srcset=
"https://davidepalmisano.files.wordpress.com/2009/09/grillo05g.jpg?w=240&h=184 240w, https://davidepalmisano.files.wordpress.com/2009/09/grillo05g.jpg?w=150&h=115 150w, https://davidepalmisano.files.wordpress.com/2009/09/grillo05g.jpg 300w"
sizes="(max-width: 240px) 100vw, 240px" /></p>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">A
couple of years ago, during his live show, the popular italian
blogger and activist Beppe Grillo provided a quick demonstration
about how the Web concretely realizes the “six degrees of
separation”. The italian blogger, today a Web enthusiast, shown
that it was possible to him to get in contact with someone very
famous using a couple of different websites: imdb, Wikipedia and
few others. Starting from a movie where he acted, he could reach
the movie producer and the producer could be in contact with
another actor due to previous work with this latter and so
on. </div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">This
demonstration consisted in a series of links that were opened
leading to some Web pages containing information where extract the
relationships that the showman wants to achieve.</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">This
gig came back to my mind while I was thinking on how, what I call
the “Linked Data Philosophy”, is impacting on the traditional Web
and I imagined what Beppe Grillo could show nowadays.</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">Just
the following, simple, trivial and short SPARQL query:</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
<insert here the SPARQL query></div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
Although Beppe is a great comedian it may be hard also for him
making people laugh with this. But, the point here is not about
laughs but about data: in this sense, the Web of Data is providing
an outstanding and an extremely powerful way to access to
incredible twine of machine readable interlinked data.</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
Recently, another nice and remarkable italian initiative appeared
on the Web: OpenParlamento.it. It’s, mainly, a service where the
Italian congressmen are displayed and they are positioned on a
chart basing on the similarity of their votes on law
proposals.</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">Ok.
Cool. But how the Semantic Web could improve this stuff?</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">First
of all, it would be very straightforward to provide a SPARQL
endpoint providing some good RDF for this data. Like the following
example:</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
<rdf:RDF></div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
<rdf:Description rdf:about:”<a href=
"http://openparlamento.it/senate/Mario_Rossi%E2%80%9D&gt" rel=
"nofollow">http://openparlamento.it/senate/Mario_Rossi”&gt</a>;</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
<rdf:type rdf:resource=”<a href=
"http://openparlamento.it/ontology/Congressman%E2%80%9D/&gt"
rel=
"nofollow">http://openparlamento.it/ontology/Congressman”/&gt</a>;</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
<foaf:name>Mario Rossi</foaf:name></div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
<foaf:gender>male</foaf:gender></div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
<openp:politicalGroup rdf:resource=”<a href=
"http://openparlamento.it/groups/Democratic_Party%E2%80%9D/&gt"
rel=
"nofollow">http://openparlamento.it/groups/Democratic_Party”/&gt</a>;</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
<owl:sameas rdf:resource=”<a href=
"http://dbpedia.org/resource/Mario_Rossi%E2%80%9D/&gt" rel=
"nofollow">http://dbpedia.org/resource/Mario_Rossi”/&gt</a>;</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
</rdf:Description></div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
</rdf:RDF></div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">where
names, descriptions, political belonging and more are provided.
Moreover a property called openp:similarity could be used to map
closer congressmen, using the same information of the already cited
chart. </div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
Secondly, all the information about congressmen are published on
the official Italian chambers web site. Wrapping this data,
OpenParlamento.it could provide an extremely exhaustive set of
official information and, more important, links to DBpedia will be
the key to get a full set of machine processable data also from
other Linked Data clouds.</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">How
to benefits from all of this? Apart the fact of employing a
cutting-edge technology to syndicate data, everyone who wants link
the data provided by OpenParlamento.it on his web pages can easily
do it using RDFa. Like the follow example, where a fragment of an
HTML page representing a news on the above congressman:</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
<div></div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
…</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
</div></div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
contains some RDFa linking that page to the OpenParlamento.it
cloud.</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">With
these technologies as a basis, a new breed of applications (like
web crawlers, for those interested in SEO) will access and process
these data in a new, fashionable and extremely powerful way.</div>
<p>A couple of years ago, during his live show, the popular italian
blogger and activist <a href="http://www.beppegrillo.it" target=
"_blank">Beppe Grillo</a> provided a quick demonstration about how
the Web concretely realizes the “six degrees of separation”. The
italian blogger, today a Web enthusiast, shown that it was possible
to him to get in contact with someone very famous using a couple of
different websites: <a href="http://www.imdb.com" target=
"_blank">imdb</a>, <a href="http://www.wikipedia.org" target=
"_blank">Wikipedia</a> and few others. Starting from a movie where
he acted, he could reach the movie producer and the producer could
be in contact with another actor due to previous work with this
latter and so on. </p>
<p>This demonstration consisted in a series of links that were
opened leading to some Web pages containing information where
extract the relationships that the showman wants to achieve.</p>
<p>This gig came back to my mind while I was thinking on how, what
I call <strong>the</strong> <a href="http://linkeddata.org/"
target="_blank"><strong>“Linked Data
Philosophy”</strong></a><strong>, is impacting on the traditional
Web and I imagined what Beppe Grillo could show
nowadays</strong>.</p>
<p style="text-align:center;"><em>Just the following, simple,
trivial and short SPARQL query:</em></p>
<p>construct {<br />
    ?actor1 foaf:knows ?actor2<br />
}<br />
    where {<br />
    ?movie dbpprop:starring ?actor1.<br />
    ?movie dbpprop:starring ?actor2.<br />
    ?movie a dbpedia-owl:Film.<br />
    FILTER(?actor1 = <<a href=
"http://dbpedia.org/resource/Beppe_Grillo&gt" rel=
"nofollow">http://dbpedia.org/resource/Beppe_Grillo&gt</a>;)<br />
}</p>
<p>Although Beppe is a great comedian it may be hard also for him
making people laugh with this. But, the point here is not about
laughs but about data: in this sense, <strong>the Web of Data is
providing an outstanding and an extremely powerful way to access to
incredible twine of machine readable interlinked data</strong>.</p>
<p>Recently, another nice and remarkable italian initiative
appeared on the Web: <a href="http://parlamento.openpolis.it/"
target="_blank">OpenParlamento.it</a>. It’s, mainly, a service
where the Italian congressmen are displayed and they are positioned
on a chart basing on the similarity of their votes on law
proposals.</p>
<p style="text-align:center;"><em>Ok. Cool. But how the Semantic
Web could improve this stuff?</em></p>
<p>First of all, it would be very straightforward to provide a
SPARQL endpoint providing some good RDF for this data. Like the
following example:</p>
<p><rdf:RDF><br />
    <rdf:Description rdf:about=”<a href=
"http://openparlamento.it/senate/Mario_Rossi%E2%80%9D&gt" rel=
"nofollow">http://openparlamento.it/senate/Mario_Rossi”&gt</a>;<br />
        <rdf:type
rdf:resource=”<a href="http://openparlamento.it/ontology/Congressman%E2%80%9D/&gt"
rel=
"nofollow">http://openparlamento.it/ontology/Congressman”/&gt</a>;<br />
        <foaf:name>Mario
Rossi</foaf:name><br />
      
 <foaf:gender>male</foaf:gender><br />
        <openp:politicalGroup<br />
          
 rdf:resource=”<a href=
"http://openparlamento.it/groups/Democratic_Party%E2%80%9D/&gt"
rel=
"nofollow">http://openparlamento.it/groups/Democratic_Party”/&gt</a>;<br />
        <owl:sameas
rdf:resource=”<a href=
"http://dbpedia.org/resource/Mario_Rossi%E2%80%9D/&gt" rel=
"nofollow">http://dbpedia.org/resource/Mario_Rossi”/&gt</a>;<br />
    </rdf:Description><br />
</rdf:RDF></p>
<p>where names, descriptions, political belonging and more are
provided. Moreover a property called <em>openp:similarity</em>
could be used to map closer congressmen, using the same information
of the already cited chart. </p>
<p>Secondly, all the information about congressmen are published on
the official Italian chambers web site. Wrapping this data,
OpenParlamento.it could provide an extremely exhaustive set of
official information and, more important, links to <a href=
"http://dbpedia.org" target="_blank">DBpedia</a> will be the key to
get a full set of machine processable data also from other Linked
Data clouds.</p>
<p>How to benefits from all of this? <strong>Apart the fact of
employing a cutting-edge technology to syndicate data, everyone who
wants link the data provided by OpenParlamento.it on his web pages
can easily do it using RDFa.</strong></p>
<p>With these technologies as a basis, a new breed of applications
(like web crawlers, for those interested in SEO) will access and
process these data in a new, fashionable and extremely powerful
way.</p>
<p style="text-align:center;"><em>Is the time for those
guys to embrace the Semantic Web , isn’t it?</em></p>
</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:10:06.000000Z</dc:date>
<title>the italian political activism and the semantic web</title>
<link>https://davidepalmisano.wordpress.com/2009/09/20/the-italian-political-activism-and-the-semantic-web/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>
<p><img data-attachment-id="12" data-permalink=
"https://davidepalmisano.wordpress.com/2009/09/20/the-italian-political-activism-and-the-semantic-web/grillo05g/"
data-orig-file=
"https://davidepalmisano.files.wordpress.com/2009/09/grillo05g.jpg"
data-orig-size="300,230" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":""}"
data-image-title="Beppe Grillo" data-image-description=""
data-image-caption="" data-medium-file=
"https://davidepalmisano.files.wordpress.com/2009/09/grillo05g.jpg?w=300"
data-large-file=
"https://davidepalmisano.files.wordpress.com/2009/09/grillo05g.jpg?w=300"
class="alignleft size-full wp-image-12" title="Beppe Grillo" src=
"https://davidepalmisano.files.wordpress.com/2009/09/grillo05g.jpg?w=450"
alt="Beppe Grillo" srcset=
"https://davidepalmisano.files.wordpress.com/2009/09/grillo05g.jpg?w=240&h=184 240w, https://davidepalmisano.files.wordpress.com/2009/09/grillo05g.jpg?w=150&h=115 150w, https://davidepalmisano.files.wordpress.com/2009/09/grillo05g.jpg 300w"
sizes="(max-width: 240px) 100vw, 240px" /></p>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">A
couple of years ago, during his live show, the popular italian
blogger and activist Beppe Grillo provided a quick demonstration
about how the Web concretely realizes the “six degrees of
separation”. The italian blogger, today a Web enthusiast, shown
that it was possible to him to get in contact with someone very
famous using a couple of different websites: imdb, Wikipedia and
few others. Starting from a movie where he acted, he could reach
the movie producer and the producer could be in contact with
another actor due to previous work with this latter and so
on. </div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">This
demonstration consisted in a series of links that were opened
leading to some Web pages containing information where extract the
relationships that the showman wants to achieve.</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">This
gig came back to my mind while I was thinking on how, what I call
the “Linked Data Philosophy”, is impacting on the traditional Web
and I imagined what Beppe Grillo could show nowadays.</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">Just
the following, simple, trivial and short SPARQL query:</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
<insert here the SPARQL query></div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
Although Beppe is a great comedian it may be hard also for him
making people laugh with this. But, the point here is not about
laughs but about data: in this sense, the Web of Data is providing
an outstanding and an extremely powerful way to access to
incredible twine of machine readable interlinked data.</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
Recently, another nice and remarkable italian initiative appeared
on the Web: OpenParlamento.it. It’s, mainly, a service where the
Italian congressmen are displayed and they are positioned on a
chart basing on the similarity of their votes on law
proposals.</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">Ok.
Cool. But how the Semantic Web could improve this stuff?</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">First
of all, it would be very straightforward to provide a SPARQL
endpoint providing some good RDF for this data. Like the following
example:</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
<rdf:RDF></div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
<rdf:Description rdf:about:”<a href=
"http://openparlamento.it/senate/Mario_Rossi%E2%80%9D&gt" rel=
"nofollow">http://openparlamento.it/senate/Mario_Rossi”&gt</a>;</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
<rdf:type rdf:resource=”<a href=
"http://openparlamento.it/ontology/Congressman%E2%80%9D/&gt"
rel=
"nofollow">http://openparlamento.it/ontology/Congressman”/&gt</a>;</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
<foaf:name>Mario Rossi</foaf:name></div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
<foaf:gender>male</foaf:gender></div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
<openp:politicalGroup rdf:resource=”<a href=
"http://openparlamento.it/groups/Democratic_Party%E2%80%9D/&gt"
rel=
"nofollow">http://openparlamento.it/groups/Democratic_Party”/&gt</a>;</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
<owl:sameas rdf:resource=”<a href=
"http://dbpedia.org/resource/Mario_Rossi%E2%80%9D/&gt" rel=
"nofollow">http://dbpedia.org/resource/Mario_Rossi”/&gt</a>;</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
</rdf:Description></div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
</rdf:RDF></div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">where
names, descriptions, political belonging and more are provided.
Moreover a property called openp:similarity could be used to map
closer congressmen, using the same information of the already cited
chart. </div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
Secondly, all the information about congressmen are published on
the official Italian chambers web site. Wrapping this data,
OpenParlamento.it could provide an extremely exhaustive set of
official information and, more important, links to DBpedia will be
the key to get a full set of machine processable data also from
other Linked Data clouds.</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">How
to benefits from all of this? Apart the fact of employing a
cutting-edge technology to syndicate data, everyone who wants link
the data provided by OpenParlamento.it on his web pages can easily
do it using RDFa. Like the follow example, where a fragment of an
HTML page representing a news on the above congressman:</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
<div></div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
…</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
</div></div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">
contains some RDFa linking that page to the OpenParlamento.it
cloud.</div>
<div id="_mcePaste" style=
"position:absolute;left:-10000px;top:0;width:1px;height:1px;">With
these technologies as a basis, a new breed of applications (like
web crawlers, for those interested in SEO) will access and process
these data in a new, fashionable and extremely powerful way.</div>
<p>A couple of years ago, during his live show, the popular italian
blogger and activist <a href="http://www.beppegrillo.it" target=
"_blank">Beppe Grillo</a> provided a quick demonstration about how
the Web concretely realizes the “six degrees of separation”. The
italian blogger, today a Web enthusiast, shown that it was possible
to him to get in contact with someone very famous using a couple of
different websites: <a href="http://www.imdb.com" target=
"_blank">imdb</a>, <a href="http://www.wikipedia.org" target=
"_blank">Wikipedia</a> and few others. Starting from a movie where
he acted, he could reach the movie producer and the producer could
be in contact with another actor due to previous work with this
latter and so on. </p>
<p>This demonstration consisted in a series of links that were
opened leading to some Web pages containing information where
extract the relationships that the showman wants to achieve.</p>
<p>This gig came back to my mind while I was thinking on how, what
I call <strong>the</strong> <a href="http://linkeddata.org/"
target="_blank"><strong>“Linked Data
Philosophy”</strong></a><strong>, is impacting on the traditional
Web and I imagined what Beppe Grillo could show
nowadays</strong>.</p>
<p style="text-align:center;"><em>Just the following, simple,
trivial and short SPARQL query:</em></p>
<p>construct {<br />
    ?actor1 foaf:knows ?actor2<br />
}<br />
    where {<br />
    ?movie dbpprop:starring ?actor1.<br />
    ?movie dbpprop:starring ?actor2.<br />
    ?movie a dbpedia-owl:Film.<br />
    FILTER(?actor1 = <<a href=
"http://dbpedia.org/resource/Beppe_Grillo&gt" rel=
"nofollow">http://dbpedia.org/resource/Beppe_Grillo&gt</a>;)<br />
}</p>
<p>Although Beppe is a great comedian it may be hard also for him
making people laugh with this. But, the point here is not about
laughs but about data: in this sense, <strong>the Web of Data is
providing an outstanding and an extremely powerful way to access to
incredible twine of machine readable interlinked data</strong>.</p>
<p>Recently, another nice and remarkable italian initiative
appeared on the Web: <a href="http://parlamento.openpolis.it/"
target="_blank">OpenParlamento.it</a>. It’s, mainly, a service
where the Italian congressmen are displayed and they are positioned
on a chart basing on the similarity of their votes on law
proposals.</p>
<p style="text-align:center;"><em>Ok. Cool. But how the Semantic
Web could improve this stuff?</em></p>
<p>First of all, it would be very straightforward to provide a
SPARQL endpoint providing some good RDF for this data. Like the
following example:</p>
<p><rdf:RDF><br />
    <rdf:Description rdf:about=”<a href=
"http://openparlamento.it/senate/Mario_Rossi%E2%80%9D&gt" rel=
"nofollow">http://openparlamento.it/senate/Mario_Rossi”&gt</a>;<br />
        <rdf:type
rdf:resource=”<a href="http://openparlamento.it/ontology/Congressman%E2%80%9D/&gt"
rel=
"nofollow">http://openparlamento.it/ontology/Congressman”/&gt</a>;<br />
        <foaf:name>Mario
Rossi</foaf:name><br />
      
 <foaf:gender>male</foaf:gender><br />
        <openp:politicalGroup<br />
          
 rdf:resource=”<a href=
"http://openparlamento.it/groups/Democratic_Party%E2%80%9D/&gt"
rel=
"nofollow">http://openparlamento.it/groups/Democratic_Party”/&gt</a>;<br />
        <owl:sameas
rdf:resource=”<a href=
"http://dbpedia.org/resource/Mario_Rossi%E2%80%9D/&gt" rel=
"nofollow">http://dbpedia.org/resource/Mario_Rossi”/&gt</a>;<br />
    </rdf:Description><br />
</rdf:RDF></p>
<p>where names, descriptions, political belonging and more are
provided. Moreover a property called <em>openp:similarity</em>
could be used to map closer congressmen, using the same information
of the already cited chart. </p>
<p>Secondly, all the information about congressmen are published on
the official Italian chambers web site. Wrapping this data,
OpenParlamento.it could provide an extremely exhaustive set of
official information and, more important, links to <a href=
"http://dbpedia.org" target="_blank">DBpedia</a> will be the key to
get a full set of machine processable data also from other Linked
Data clouds.</p>
<p>How to benefits from all of this? <strong>Apart the fact of
employing a cutting-edge technology to syndicate data, everyone who
wants link the data provided by OpenParlamento.it on his web pages
can easily do it using RDFa.</strong></p>
<p>With these technologies as a basis, a new breed of applications
(like web crawlers, for those interested in SEO) will access and
process these data in a new, fashionable and extremely powerful
way.</p>
<p style="text-align:center;"><em>Is the time for those
guys to embrace the Semantic Web , isn’t it?</em></p>
</div>
</div>]]></content:encoded>
<description>A couple of years ago, during his live show, the popular italian blogger and activist Beppe Grillo provided a quick demonstration about how the Web concretely realizes the “six degrees of separation”. The italian blogger, today a Web enthusiast, shown that it was possible to him to get in contact with someone very famous using a couple of different websites: imdb, Wikipedia and few others. Starting from a movie where he acted, he could reach the movie producer and the producer could be in contact with another actor due to previous work with this latter and so on.&#160; This demonstration ...</description>
</item>
<item rdf:about="https://planb.nicecupoftea.org/2023/12/24/til-gifski/">
<dc:creator>Libby Miller</dc:creator>
<dc:source>Plan B by Libby Miller</dc:source>
<dc:relation>http://planb.nicecupoftea.org/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>
<p>For a presentation at work where it’s tricky to add video but an
image is ok, <a href=
"https://github.com/ImageOptim/gifski/">gifski</a> worked
brilliantly for converting a video to a gif. Even with the defaults
it was fine. I needed to tweak it a bit as I needed it a bit
smaller, -W worked great for that for me, but there are a bunch of
other ways too.</p>
<figure class="wp-block-image size-large"><a href=
"https://libbymiller.files.wordpress.com/2023/12/example.gif"><img width="500"
height="281" data-attachment-id="3484" data-permalink=
"https://planb.nicecupoftea.org/2023/12/24/til-gifski/example/"
data-orig-file=
"https://libbymiller.files.wordpress.com/2023/12/example.gif"
data-orig-size="500,281" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="example" data-image-description=""
data-image-caption="" data-medium-file=
"https://libbymiller.files.wordpress.com/2023/12/example.gif?w=300"
data-large-file=
"https://libbymiller.files.wordpress.com/2023/12/example.gif?w=500"
src=
"https://libbymiller.files.wordpress.com/2023/12/example.gif?w=500"
alt="" class="wp-image-3484" srcset=
"https://libbymiller.files.wordpress.com/2023/12/example.gif 500w, https://libbymiller.files.wordpress.com/2023/12/example.gif?w=150 150w, https://libbymiller.files.wordpress.com/2023/12/example.gif?w=300 300w"
sizes="(max-width: 500px) 100vw, 500px" /></a></figure>
<p>Here’s one of the Montpelier partridge from January last
year.</p>
</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:56.000000Z</dc:date>
<title>TIL: Gifski</title>
<link>https://planb.nicecupoftea.org/2023/12/24/til-gifski/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>
<p>For a presentation at work where it’s tricky to add video but an
image is ok, <a href=
"https://github.com/ImageOptim/gifski/">gifski</a> worked
brilliantly for converting a video to a gif. Even with the defaults
it was fine. I needed to tweak it a bit as I needed it a bit
smaller, -W worked great for that for me, but there are a bunch of
other ways too.</p>
<figure class="wp-block-image size-large"><a href=
"https://libbymiller.files.wordpress.com/2023/12/example.gif"><img width="500"
height="281" data-attachment-id="3484" data-permalink=
"https://planb.nicecupoftea.org/2023/12/24/til-gifski/example/"
data-orig-file=
"https://libbymiller.files.wordpress.com/2023/12/example.gif"
data-orig-size="500,281" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="example" data-image-description=""
data-image-caption="" data-medium-file=
"https://libbymiller.files.wordpress.com/2023/12/example.gif?w=300"
data-large-file=
"https://libbymiller.files.wordpress.com/2023/12/example.gif?w=500"
src=
"https://libbymiller.files.wordpress.com/2023/12/example.gif?w=500"
alt="" class="wp-image-3484" srcset=
"https://libbymiller.files.wordpress.com/2023/12/example.gif 500w, https://libbymiller.files.wordpress.com/2023/12/example.gif?w=150 150w, https://libbymiller.files.wordpress.com/2023/12/example.gif?w=300 300w"
sizes="(max-width: 500px) 100vw, 500px" /></a></figure>
<p>Here’s one of the Montpelier partridge from January last
year.</p>
</div>
</div>]]></content:encoded>
<description>
For a presentation at work where it’s tricky to add video but an
image is ok, gifski worked
brilliantly for converting a video to a gif. Even with the defaults
it was fine. I needed to tweak it a bit as I needed it a bit
smaller, -W worked great for that for me, but there are a bunch of
other ways too.
Here’s one of the Montpelier partridge from January last
year.
</description>
</item>
<item rdf:about="https://planb.nicecupoftea.org/2023/05/04/mayke-day-4-ttn-and-lorawan-til/">
<dc:creator>Libby Miller</dc:creator>
<dc:source>Plan B by Libby Miller</dc:source>
<dc:relation>http://planb.nicecupoftea.org/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>
<p><a href=
"https://www.watershed.co.uk/studio/residents/tarim/">Tarim</a> and
I have been trying to get a LoRaWAN network up and running in
Bristol using some of the old <a href=
"https://www.bristolwireless.net">Bristol Wireless</a> antenna
locations. First step for me was in January when we got together
and tried to get a Raspberry Pi Gateway working, with so much
#fayle – a subtly broken Pi, a dodgy PSU connector, and I did not
know that the <a href=
"https://www.raspberrypi.com/software/">Raspberry Pi imager</a>
process had changed for Bullseye (you have to set a user in
settings, and enable ssh there – you can also put the wifi details
in, so it’s handy if you know about it).</p>
<p>Aaanyway for #<a href=
"https://mastodon.me.uk/@libbymiller/110293403268784344">mayke</a>
(now on Mastodon) I’ve been trying for a couple of days to get a
TTGO LoRa32 OLED v1.3(?) I bought ages ago to work with the Pi
gateway. In summary: argh. there’s so many partial examples around
and different naming things and allsorts. But are some notes on
what works.</p>
<p>On the <strong>Raspberry Pi</strong>: 3B+ and a <a href=
"https://lora-alliance.org/lora_products/ic880a-lora-concentrator/">
IC880A</a> board that Tarim had – then install Bullseye (with ssh
access and wifi and a pi user) and then install using <a href=
"https://www.thethingsnetwork.org/">The Things Network</a> (TTN)’s
example gateway <a href=
"https://www.thethingsindustries.com/docs/gateways/models/raspberry-pi/">
instructions</a>. All fine. My only daftness here was finding this
command: <code>/opt/ttn-station/bin/station -p</code> and assuming
(why?) that I was tailing the logs instead of running another
instance on top of the systemctl one. Which led to all sorts of
weird errors, including ones related to not resetting the device
e.g.</p>
<p><code>[lgw_receive:1143] CONCENTRATOR IS NOT RUNNING, START IT
BEFORE RECEIVING</code></p>
<p>…</p>
<p> <code>[HAL:INFO] [lgw_spi_close:159] Note: SPI port
closed</code></p>
<p>…</p>
<p><code>[lgw_start:764] Failed to setup sx125x radio for RF chain
0</code></p>
<p>etc.</p>
<p>D’oh.</p>
<p>The <strong>TTGO</strong> was more tricky. There seem to be
multiple libraries at multiple levels of abstraction and I wanted
one that was Arduino-IDE compatible. It’s really hard to find out
what pin mapping you need for these slightly obscure (and
superceded) TTGO boards. Then there’s the difference between
LoRaWAN Specification 1.0.3 and LoRaWAN Specification 1.1.1. After
a while I realised that the <a href=
"https://github.com/mcci-catena/arduino-lorawan/">MCCI_LoRaWAN_LMIC_library</a>
(0.9.2) I was using in the code I had found on the internet was
made for <strong>1.0.3</strong> – and then configuring a TTN device
was muuch easier with fewer baffling options.</p>
<p>One final self-own by my frenetic searching of forums looking
for a bit of code with the right pin mapping for the TTGO</p>
<p>I somehow found some old code (I think it was <a href=
"https://github.com/fcgdam/TTGO_LoRa32/blob/master/TTN_TTGOLora32_OTAA/src/main.cpp">
this</a> – don’t use it, 5 years’ old! – which I think is based on
an old version of <a href=
"https://github.com/gonzalocasas/arduino-uno-dragino-lorawan/blob/master/send-sensor-data/send-sensor-data.ino">
this</a>, but adapted for the TTGO) which didn’t recognise all the
event types from TTN. Updated below, basically adding this in
<code>setup()</code><br />
<code>LMIC_setAdrMode(1);<br />
LMIC_setLinkCheckMode(1);</code><br />
in <code>setup()</code><br />
and <code>LMIC_setLinkCheckMode(1)</code> again in <code>case
EV_JOINED</code>.<code><br /></code>Thank you <a href=
"https://www.thethingsnetwork.org/forum/t/lmic-unknown-event-20/42647/11">
TTN forum users</a>, and <a href=
"https://www.thethingsnetwork.org/forum/t/heltec-wifi-lora-v2-compilation-error-due-to-missing-constant-declaration/39382/4">
again</a>.</p>
<p>A couple more things – though there are probably more I’ve
forgotten.</p>
<ol>
<li>The gateway was ok to set up on the <a href=
"https://console.cloud.thethings.network">TTN console</a>, but
setting up devices was not – all the names for the different device
ids were completely baffling and seem to have changed over time.
You also need to set up an application before you can add a device.
Two key learnings (a) you can get the little / big endian -ness and
the right format for the ids by clicking on the ids themselves in
the console, see image below and (b) the Gateway has the JoinEUI
you need to set up a device (check the Gateway’s messages for this,
see image below).</li>
<li>You HAVE TO hand edit
<code>./project_config/lmic_project_config.h</code> in <a href=
"https://github.com/mcci-catena/arduino-lorawan/">MCCI_LoRaWAN_LMIC_library</a>
on your machine to pick the right region (on a mac, mine was in
<code>/Users/[me]/Documents/Arduino/libraries/MCCI_LoRaWAN_LMIC_library/project_config/lmic_project_config.h</code>)</li>
</ol>
<h4 class="wp-block-heading"><strong>Formatting endianness</strong>
and chars</h4>
<p>LSB is little- MSB is big- and <> switches between chars
with the preceding 0x business and without. DEVEUI and APPEUI are
little and APPKEY is big.</p>
<figure class="wp-block-image size-large"><a href=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png">
<img width="1024" height="145" data-attachment-id="3473"
data-permalink=
"https://planb.nicecupoftea.org/2023/05/04/mayke-day-4-ttn-and-lorawan-til/screenshot-2023-05-04-at-21-51-10-1/"
data-orig-file=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png"
data-orig-size="1104,157" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="screenshot-2023-05-04-at-21.51.10-1"
data-image-description="" data-image-caption="" data-medium-file=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png?w=300"
data-large-file=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png?w=1024"
src=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png?w=1024"
alt="" class="wp-image-3473" srcset=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png?w=1024 1024w, https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png?w=1020 1020w, https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png?w=150 150w, https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png?w=300 300w, https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png?w=768 768w, https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png 1104w"
sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
<h4 class="wp-block-heading">JoinEUI for devices is in the gateway
messages like this:</h4>
<figure class="wp-block-image size-large"><a href=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png">
<img width="1024" height="134" data-attachment-id="3475"
data-permalink=
"https://planb.nicecupoftea.org/2023/05/04/mayke-day-4-ttn-and-lorawan-til/screenshot-2023-05-04-at-21-54-44/"
data-orig-file=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png"
data-orig-size="1947,256" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="screenshot-2023-05-04-at-21.54.44"
data-image-description="" data-image-caption="" data-medium-file=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png?w=300"
data-large-file=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png?w=1024"
src=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png?w=1024"
alt="" class="wp-image-3475" srcset=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png?w=1024 1024w, https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png?w=1019 1019w, https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png?w=150 150w, https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png?w=300 300w, https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png?w=768 768w, https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png 1947w"
sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
<p>I somewhat enjoyed the detective work and even read some of
<a href=
"https://www.thethingsindustries.com/docs/getting-started/">TFM</a>.
So a happy #mayke for me.</p>
<p>The final code I used:</p>
<pre class="wp-block-code"><code>// MIT License
// https://github.com/gonzalocasas/arduino-uno-dragino-lorawan/blob/master/LICENSE
// Based on examples from https://github.com/matthijskooijman/arduino-lmic
// Copyright (c) 2015 Thomas Telkamp and Matthijs Kooijman
#include <Arduino.h>
#include "lmic.h"
#include <hal/hal.h>
#include <SPI.h>
#define LEDPIN 2
unsigned int counter = 0;
char TTN_response[30];
// This EUI must be in little-endian format, so least-significant-byte
// first. When copying an EUI from ttnctl output, this means to reverse
// the bytes.
// Copy the value from Device EUI from the TTN console in LSB mode.
static const u1_t PROGMEM DEVEUI[8]= { 0x.., 0x.., .. };
void os_getDevEui (u1_t* buf) { memcpy_P(buf, DEVEUI, 8);}
// Copy the value from Application EUI from the TTN console in LSB mode
static const u1_t PROGMEM APPEUI[8]= { 0x.., 0x.., .. };
void os_getArtEui (u1_t* buf) { memcpy_P(buf, APPEUI, 8);}
// This key should be in big endian format (or, since it is not really a
// number but a block of memory, endianness does not really apply). In
// practice, a key taken from ttnctl can be copied as-is. Anyway its in MSB mode.
static const u1_t PROGMEM APPKEY[16] = { 0x.., .. };
void os_getDevKey (u1_t* buf) { memcpy_P(buf, APPKEY, 16);}
static osjob_t sendjob;
// Schedule TX every this many seconds (might become longer due to duty
// cycle limitations).
const unsigned TX_INTERVAL = 120;
// Pin mapping
const lmic_pinmap lmic_pins = {
.nss = 18,
.rxtx = LMIC_UNUSED_PIN,
.rst = 14,
.dio = {26, 33, 32} // Pins for the Heltec ESP32 Lora board/ TTGO Lora32 with 3D metal antenna
};
void do_send(osjob_t* j){
// Payload to send (uplink)
static uint8_t message[] = "Hello OTAA!";
// Check if there is not a current TX/RX job running
if (LMIC.opmode & OP_TXRXPEND) {
Serial.println(F("OP_TXRXPEND, not sending"));
} else {
// Prepare upstream data transmission at the next possible time.
LMIC_setTxData2(1, message, sizeof(message)-1, 0);
Serial.println(F("Sending uplink packet..."));
digitalWrite(LEDPIN, HIGH);
}
// Next TX is scheduled after TX_COMPLETE event.
}
void onEvent (ev_t ev) {
Serial.print(os_getTime());
Serial.print(": ");
Serial.print(ev);
Serial.print(": ");
switch(ev) {
case EV_SCAN_TIMEOUT:
Serial.println(F("EV_SCAN_TIMEOUT"));
break;
case EV_BEACON_FOUND:
Serial.println(F("EV_BEACON_FOUND"));
break;
case EV_BEACON_MISSED:
Serial.println(F("EV_BEACON_MISSED"));
break;
case EV_BEACON_TRACKED:
Serial.println(F("EV_BEACON_TRACKED"));
break;
case EV_JOIN_FAILED:
Serial.println(F("EV_JOIN_FAILED"));
break;
case EV_REJOIN_FAILED:
Serial.println(F("EV_REJOIN_FAILED"));
break;
case EV_LOST_TSYNC:
Serial.println(F("EV_LOST_TSYNC"));
break;
case EV_RESET:
Serial.println(F("EV_RESET"));
break;
case EV_RXCOMPLETE:
// data received in ping slot
Serial.println(F("EV_RXCOMPLETE"));
break;
case EV_LINK_DEAD:
Serial.println(F("EV_LINK_DEAD"));
break;
case EV_LINK_ALIVE:
Serial.println(F("EV_LINK_ALIVE"));
break;
case EV_SCAN_FOUND:
Serial.println(F("EV_SCAN_FOUND"));
break;
case EV_TXSTART:
Serial.println(F("EV_TXSTART"));
break;
case EV_TXCANCELED:
Serial.println(F("EV_TXCANCELED"));
break;
case EV_RXSTART:
// do not print anything -- it wrecks timing
break;
case EV_TXCOMPLETE:
Serial.println(F("EV_TXCOMPLETE (includes waiting for RX windows)"));
if (LMIC.txrxFlags & TXRX_ACK) {
Serial.println(F("Received ack"));
}
if (LMIC.dataLen) {
int i = 0;
Serial.print(F("Data Received: "));
Serial.write(LMIC.frame+LMIC.dataBeg, LMIC.dataLen);
Serial.println();
Serial.println(LMIC.rssi);
for ( i = 0 ; i < LMIC.dataLen ; i++ )
TTN_response[i] = LMIC.frame[LMIC.dataBeg+i];
TTN_response[i] = 0;
}
// Schedule next transmission
os_setTimedCallback(&sendjob, os_getTime()+sec2osticks(TX_INTERVAL), do_send);
digitalWrite(LEDPIN, LOW);
// Schedule next transmission
os_setTimedCallback(&sendjob, os_getTime()+sec2osticks(TX_INTERVAL), do_send);
break;
case EV_JOINING:
Serial.println(F("EV_JOINING: -> Joining..."));
break;
case EV_JOINED: {
Serial.println(F("EV_JOINED"));
LMIC_setLinkCheckMode(1);
}
break;
default:
Serial.println(F("Unknown event"));
Serial.print(ev);
Serial.print("\n");
break;
}
}
void setup() {
Serial.begin(115200);
delay(2500); // Give time to the serial monitor to pick up
Serial.println(F("Starting..."));
// Use the Blue pin to signal transmission.
pinMode(LEDPIN,OUTPUT);
// LMIC init
os_init();
// Reset the MAC state. Session and pending data transfers will be discarded.
LMIC_reset();
LMIC_setClockError(MAX_CLOCK_ERROR * 1 / 100);
// Set up the channels used by the Things Network, which corresponds
// to the defaults of most gateways. Without this, only three base
// channels from the LoRaWAN specification are used, which certainly
// works, so it is good for debugging, but can overload those
// frequencies, so be sure to configure the full frequency range of
// your network here (unless your network autoconfigures them).
// Setting up channels should happen after LMIC_setSession, as that
// configures the minimal channel set.
LMIC_setupChannel(0, 868100000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band
LMIC_setupChannel(1, 868300000, DR_RANGE_MAP(DR_SF11, DR_SF7B), BAND_CENTI); // g-band
LMIC_setupChannel(2, 868500000, DR_RANGE_MAP(DR_SF10, DR_SF7), BAND_CENTI); // g-band
LMIC_setupChannel(3, 867100000, DR_RANGE_MAP(DR_SF9, DR_SF7), BAND_CENTI); // g-band
LMIC_setupChannel(4, 867300000, DR_RANGE_MAP(DR_SF8, DR_SF7), BAND_CENTI); // g-band
LMIC_setupChannel(5, 867500000, DR_RANGE_MAP(DR_SF7, DR_SF7), BAND_CENTI); // g-band
LMIC_setupChannel(6, 867700000, DR_RANGE_MAP(DR_SF7, DR_SF7), BAND_CENTI); // g-band
// TTN defines an additional channel at 869.525Mhz using SF9 for class B
// devices' ping slots. LMIC does not have an easy way to define set this
// frequency and support for class B is spotty and untested, so this
// frequency is not configured here.
// Disable link check validation
///LMIC_setLinkCheckMode(0);
LMIC_setAdrMode(1);
LMIC_setLinkCheckMode(1);
//LMIC_setClockError(MAX_CLOCK_ERROR * 1 / 100);
// TTN uses SF9 for its RX2 window.
LMIC.dn2Dr = DR_SF9;
// Set data rate and transmit power for uplink (note: txpow seems to be ignored by the library)
//LMIC_setDrTxpow(DR_SF11,14);
LMIC_setDrTxpow(DR_SF9,14);
// Start job
do_send(&sendjob); // Will fire up also the join
}
void loop() {
os_runloop_once();
}</code></pre></div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:56.000000Z</dc:date>
<title>#Mayke Day 4 – TTN and LoRaWAN – TiL</title>
<link>https://planb.nicecupoftea.org/2023/05/04/mayke-day-4-ttn-and-lorawan-til/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>
<p><a href=
"https://www.watershed.co.uk/studio/residents/tarim/">Tarim</a> and
I have been trying to get a LoRaWAN network up and running in
Bristol using some of the old <a href=
"https://www.bristolwireless.net">Bristol Wireless</a> antenna
locations. First step for me was in January when we got together
and tried to get a Raspberry Pi Gateway working, with so much
#fayle – a subtly broken Pi, a dodgy PSU connector, and I did not
know that the <a href=
"https://www.raspberrypi.com/software/">Raspberry Pi imager</a>
process had changed for Bullseye (you have to set a user in
settings, and enable ssh there – you can also put the wifi details
in, so it’s handy if you know about it).</p>
<p>Aaanyway for #<a href=
"https://mastodon.me.uk/@libbymiller/110293403268784344">mayke</a>
(now on Mastodon) I’ve been trying for a couple of days to get a
TTGO LoRa32 OLED v1.3(?) I bought ages ago to work with the Pi
gateway. In summary: argh. there’s so many partial examples around
and different naming things and allsorts. But are some notes on
what works.</p>
<p>On the <strong>Raspberry Pi</strong>: 3B+ and a <a href=
"https://lora-alliance.org/lora_products/ic880a-lora-concentrator/">
IC880A</a> board that Tarim had – then install Bullseye (with ssh
access and wifi and a pi user) and then install using <a href=
"https://www.thethingsnetwork.org/">The Things Network</a> (TTN)’s
example gateway <a href=
"https://www.thethingsindustries.com/docs/gateways/models/raspberry-pi/">
instructions</a>. All fine. My only daftness here was finding this
command: <code>/opt/ttn-station/bin/station -p</code> and assuming
(why?) that I was tailing the logs instead of running another
instance on top of the systemctl one. Which led to all sorts of
weird errors, including ones related to not resetting the device
e.g.</p>
<p><code>[lgw_receive:1143] CONCENTRATOR IS NOT RUNNING, START IT
BEFORE RECEIVING</code></p>
<p>…</p>
<p> <code>[HAL:INFO] [lgw_spi_close:159] Note: SPI port
closed</code></p>
<p>…</p>
<p><code>[lgw_start:764] Failed to setup sx125x radio for RF chain
0</code></p>
<p>etc.</p>
<p>D’oh.</p>
<p>The <strong>TTGO</strong> was more tricky. There seem to be
multiple libraries at multiple levels of abstraction and I wanted
one that was Arduino-IDE compatible. It’s really hard to find out
what pin mapping you need for these slightly obscure (and
superceded) TTGO boards. Then there’s the difference between
LoRaWAN Specification 1.0.3 and LoRaWAN Specification 1.1.1. After
a while I realised that the <a href=
"https://github.com/mcci-catena/arduino-lorawan/">MCCI_LoRaWAN_LMIC_library</a>
(0.9.2) I was using in the code I had found on the internet was
made for <strong>1.0.3</strong> – and then configuring a TTN device
was muuch easier with fewer baffling options.</p>
<p>One final self-own by my frenetic searching of forums looking
for a bit of code with the right pin mapping for the TTGO</p>
<p>I somehow found some old code (I think it was <a href=
"https://github.com/fcgdam/TTGO_LoRa32/blob/master/TTN_TTGOLora32_OTAA/src/main.cpp">
this</a> – don’t use it, 5 years’ old! – which I think is based on
an old version of <a href=
"https://github.com/gonzalocasas/arduino-uno-dragino-lorawan/blob/master/send-sensor-data/send-sensor-data.ino">
this</a>, but adapted for the TTGO) which didn’t recognise all the
event types from TTN. Updated below, basically adding this in
<code>setup()</code><br />
<code>LMIC_setAdrMode(1);<br />
LMIC_setLinkCheckMode(1);</code><br />
in <code>setup()</code><br />
and <code>LMIC_setLinkCheckMode(1)</code> again in <code>case
EV_JOINED</code>.<code><br /></code>Thank you <a href=
"https://www.thethingsnetwork.org/forum/t/lmic-unknown-event-20/42647/11">
TTN forum users</a>, and <a href=
"https://www.thethingsnetwork.org/forum/t/heltec-wifi-lora-v2-compilation-error-due-to-missing-constant-declaration/39382/4">
again</a>.</p>
<p>A couple more things – though there are probably more I’ve
forgotten.</p>
<ol>
<li>The gateway was ok to set up on the <a href=
"https://console.cloud.thethings.network">TTN console</a>, but
setting up devices was not – all the names for the different device
ids were completely baffling and seem to have changed over time.
You also need to set up an application before you can add a device.
Two key learnings (a) you can get the little / big endian -ness and
the right format for the ids by clicking on the ids themselves in
the console, see image below and (b) the Gateway has the JoinEUI
you need to set up a device (check the Gateway’s messages for this,
see image below).</li>
<li>You HAVE TO hand edit
<code>./project_config/lmic_project_config.h</code> in <a href=
"https://github.com/mcci-catena/arduino-lorawan/">MCCI_LoRaWAN_LMIC_library</a>
on your machine to pick the right region (on a mac, mine was in
<code>/Users/[me]/Documents/Arduino/libraries/MCCI_LoRaWAN_LMIC_library/project_config/lmic_project_config.h</code>)</li>
</ol>
<h4 class="wp-block-heading"><strong>Formatting endianness</strong>
and chars</h4>
<p>LSB is little- MSB is big- and <> switches between chars
with the preceding 0x business and without. DEVEUI and APPEUI are
little and APPKEY is big.</p>
<figure class="wp-block-image size-large"><a href=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png">
<img width="1024" height="145" data-attachment-id="3473"
data-permalink=
"https://planb.nicecupoftea.org/2023/05/04/mayke-day-4-ttn-and-lorawan-til/screenshot-2023-05-04-at-21-51-10-1/"
data-orig-file=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png"
data-orig-size="1104,157" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="screenshot-2023-05-04-at-21.51.10-1"
data-image-description="" data-image-caption="" data-medium-file=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png?w=300"
data-large-file=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png?w=1024"
src=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png?w=1024"
alt="" class="wp-image-3473" srcset=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png?w=1024 1024w, https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png?w=1020 1020w, https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png?w=150 150w, https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png?w=300 300w, https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png?w=768 768w, https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.51.10-1.png 1104w"
sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
<h4 class="wp-block-heading">JoinEUI for devices is in the gateway
messages like this:</h4>
<figure class="wp-block-image size-large"><a href=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png">
<img width="1024" height="134" data-attachment-id="3475"
data-permalink=
"https://planb.nicecupoftea.org/2023/05/04/mayke-day-4-ttn-and-lorawan-til/screenshot-2023-05-04-at-21-54-44/"
data-orig-file=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png"
data-orig-size="1947,256" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="screenshot-2023-05-04-at-21.54.44"
data-image-description="" data-image-caption="" data-medium-file=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png?w=300"
data-large-file=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png?w=1024"
src=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png?w=1024"
alt="" class="wp-image-3475" srcset=
"https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png?w=1024 1024w, https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png?w=1019 1019w, https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png?w=150 150w, https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png?w=300 300w, https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png?w=768 768w, https://libbymiller.files.wordpress.com/2023/05/screenshot-2023-05-04-at-21.54.44.png 1947w"
sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
<p>I somewhat enjoyed the detective work and even read some of
<a href=
"https://www.thethingsindustries.com/docs/getting-started/">TFM</a>.
So a happy #mayke for me.</p>
<p>The final code I used:</p>
<pre class="wp-block-code"><code>// MIT License
// https://github.com/gonzalocasas/arduino-uno-dragino-lorawan/blob/master/LICENSE
// Based on examples from https://github.com/matthijskooijman/arduino-lmic
// Copyright (c) 2015 Thomas Telkamp and Matthijs Kooijman
#include <Arduino.h>
#include "lmic.h"
#include <hal/hal.h>
#include <SPI.h>
#define LEDPIN 2
unsigned int counter = 0;
char TTN_response[30];
// This EUI must be in little-endian format, so least-significant-byte
// first. When copying an EUI from ttnctl output, this means to reverse
// the bytes.
// Copy the value from Device EUI from the TTN console in LSB mode.
static const u1_t PROGMEM DEVEUI[8]= { 0x.., 0x.., .. };
void os_getDevEui (u1_t* buf) { memcpy_P(buf, DEVEUI, 8);}
// Copy the value from Application EUI from the TTN console in LSB mode
static const u1_t PROGMEM APPEUI[8]= { 0x.., 0x.., .. };
void os_getArtEui (u1_t* buf) { memcpy_P(buf, APPEUI, 8);}
// This key should be in big endian format (or, since it is not really a
// number but a block of memory, endianness does not really apply). In
// practice, a key taken from ttnctl can be copied as-is. Anyway its in MSB mode.
static const u1_t PROGMEM APPKEY[16] = { 0x.., .. };
void os_getDevKey (u1_t* buf) { memcpy_P(buf, APPKEY, 16);}
static osjob_t sendjob;
// Schedule TX every this many seconds (might become longer due to duty
// cycle limitations).
const unsigned TX_INTERVAL = 120;
// Pin mapping
const lmic_pinmap lmic_pins = {
.nss = 18,
.rxtx = LMIC_UNUSED_PIN,
.rst = 14,
.dio = {26, 33, 32} // Pins for the Heltec ESP32 Lora board/ TTGO Lora32 with 3D metal antenna
};
void do_send(osjob_t* j){
// Payload to send (uplink)
static uint8_t message[] = "Hello OTAA!";
// Check if there is not a current TX/RX job running
if (LMIC.opmode & OP_TXRXPEND) {
Serial.println(F("OP_TXRXPEND, not sending"));
} else {
// Prepare upstream data transmission at the next possible time.
LMIC_setTxData2(1, message, sizeof(message)-1, 0);
Serial.println(F("Sending uplink packet..."));
digitalWrite(LEDPIN, HIGH);
}
// Next TX is scheduled after TX_COMPLETE event.
}
void onEvent (ev_t ev) {
Serial.print(os_getTime());
Serial.print(": ");
Serial.print(ev);
Serial.print(": ");
switch(ev) {
case EV_SCAN_TIMEOUT:
Serial.println(F("EV_SCAN_TIMEOUT"));
break;
case EV_BEACON_FOUND:
Serial.println(F("EV_BEACON_FOUND"));
break;
case EV_BEACON_MISSED:
Serial.println(F("EV_BEACON_MISSED"));
break;
case EV_BEACON_TRACKED:
Serial.println(F("EV_BEACON_TRACKED"));
break;
case EV_JOIN_FAILED:
Serial.println(F("EV_JOIN_FAILED"));
break;
case EV_REJOIN_FAILED:
Serial.println(F("EV_REJOIN_FAILED"));
break;
case EV_LOST_TSYNC:
Serial.println(F("EV_LOST_TSYNC"));
break;
case EV_RESET:
Serial.println(F("EV_RESET"));
break;
case EV_RXCOMPLETE:
// data received in ping slot
Serial.println(F("EV_RXCOMPLETE"));
break;
case EV_LINK_DEAD:
Serial.println(F("EV_LINK_DEAD"));
break;
case EV_LINK_ALIVE:
Serial.println(F("EV_LINK_ALIVE"));
break;
case EV_SCAN_FOUND:
Serial.println(F("EV_SCAN_FOUND"));
break;
case EV_TXSTART:
Serial.println(F("EV_TXSTART"));
break;
case EV_TXCANCELED:
Serial.println(F("EV_TXCANCELED"));
break;
case EV_RXSTART:
// do not print anything -- it wrecks timing
break;
case EV_TXCOMPLETE:
Serial.println(F("EV_TXCOMPLETE (includes waiting for RX windows)"));
if (LMIC.txrxFlags & TXRX_ACK) {
Serial.println(F("Received ack"));
}
if (LMIC.dataLen) {
int i = 0;
Serial.print(F("Data Received: "));
Serial.write(LMIC.frame+LMIC.dataBeg, LMIC.dataLen);
Serial.println();
Serial.println(LMIC.rssi);
for ( i = 0 ; i < LMIC.dataLen ; i++ )
TTN_response[i] = LMIC.frame[LMIC.dataBeg+i];
TTN_response[i] = 0;
}
// Schedule next transmission
os_setTimedCallback(&sendjob, os_getTime()+sec2osticks(TX_INTERVAL), do_send);
digitalWrite(LEDPIN, LOW);
// Schedule next transmission
os_setTimedCallback(&sendjob, os_getTime()+sec2osticks(TX_INTERVAL), do_send);
break;
case EV_JOINING:
Serial.println(F("EV_JOINING: -> Joining..."));
break;
case EV_JOINED: {
Serial.println(F("EV_JOINED"));
LMIC_setLinkCheckMode(1);
}
break;
default:
Serial.println(F("Unknown event"));
Serial.print(ev);
Serial.print("\n");
break;
}
}
void setup() {
Serial.begin(115200);
delay(2500); // Give time to the serial monitor to pick up
Serial.println(F("Starting..."));
// Use the Blue pin to signal transmission.
pinMode(LEDPIN,OUTPUT);
// LMIC init
os_init();
// Reset the MAC state. Session and pending data transfers will be discarded.
LMIC_reset();
LMIC_setClockError(MAX_CLOCK_ERROR * 1 / 100);
// Set up the channels used by the Things Network, which corresponds
// to the defaults of most gateways. Without this, only three base
// channels from the LoRaWAN specification are used, which certainly
// works, so it is good for debugging, but can overload those
// frequencies, so be sure to configure the full frequency range of
// your network here (unless your network autoconfigures them).
// Setting up channels should happen after LMIC_setSession, as that
// configures the minimal channel set.
LMIC_setupChannel(0, 868100000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band
LMIC_setupChannel(1, 868300000, DR_RANGE_MAP(DR_SF11, DR_SF7B), BAND_CENTI); // g-band
LMIC_setupChannel(2, 868500000, DR_RANGE_MAP(DR_SF10, DR_SF7), BAND_CENTI); // g-band
LMIC_setupChannel(3, 867100000, DR_RANGE_MAP(DR_SF9, DR_SF7), BAND_CENTI); // g-band
LMIC_setupChannel(4, 867300000, DR_RANGE_MAP(DR_SF8, DR_SF7), BAND_CENTI); // g-band
LMIC_setupChannel(5, 867500000, DR_RANGE_MAP(DR_SF7, DR_SF7), BAND_CENTI); // g-band
LMIC_setupChannel(6, 867700000, DR_RANGE_MAP(DR_SF7, DR_SF7), BAND_CENTI); // g-band
// TTN defines an additional channel at 869.525Mhz using SF9 for class B
// devices' ping slots. LMIC does not have an easy way to define set this
// frequency and support for class B is spotty and untested, so this
// frequency is not configured here.
// Disable link check validation
///LMIC_setLinkCheckMode(0);
LMIC_setAdrMode(1);
LMIC_setLinkCheckMode(1);
//LMIC_setClockError(MAX_CLOCK_ERROR * 1 / 100);
// TTN uses SF9 for its RX2 window.
LMIC.dn2Dr = DR_SF9;
// Set data rate and transmit power for uplink (note: txpow seems to be ignored by the library)
//LMIC_setDrTxpow(DR_SF11,14);
LMIC_setDrTxpow(DR_SF9,14);
// Start job
do_send(&sendjob); // Will fire up also the join
}
void loop() {
os_runloop_once();
}</code></pre></div>
</div>]]></content:encoded>
<description>Tarim and I have been trying to get a LoRaWAN network up and running in Bristol using some of the old Bristol Wireless antenna locations. First step for me was in January when we got together and tried to get a Raspberry Pi Gateway working, with so much #fayle – a subtly broken Pi, a dodgy PSU connector, and I did not know that the Raspberry Pi imager process had changed for Bullseye (you have to set a user in settings, and enable ssh there – you can also put the wifi details in, so it’s handy if you know ...</description>
</item>
<item rdf:about="https://planb.nicecupoftea.org/2022/05/19/time-squish/">
<dc:creator>Libby Miller</dc:creator>
<dc:source>Plan B by Libby Miller</dc:source>
<dc:relation>http://planb.nicecupoftea.org/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>
<p>I keep seeing these two odd time effects in my life and
wondering if they are connected.</p>
<p>The first is that my work-life has become either extremely
intense – and I don’t mean long hours, I mean intense brainwork for
maybe a week – that wipes me out – and then the next is inevitably
slower and less intense. Basically everything gets bunched up
together. I <em>feel</em> like this has something to do with
everyone working from home, but I’m not really sure how to explain
it (though it reminds me of my time at <a href=
"https://en.wikipedia.org/wiki/Joost">Joost</a> where we’d have an
intense series of meetings with everyone together every few months,
because we were distributed. But this type is not organised, it
just happens). My partner pointed out that this might simply be
poor planning on my part (thanks! I’m quite good at planning
<em>actually</em>).</p>
<p>The second is something we’ve noticed at the <a href=
"https://cubecinema.com">Cube</a> – people are not committing to
doing stuff (coming to an event, volunteering etc) until very close
to the event. Something like 20-30% of our tickets for gigs are
being sold the day before or on the day. I don’t think it’s people
waiting for something better. I wonder if it’s Covid-related
uncertainty? (also 10-15% don’t turn up, not sure if that’s
relevant).</p>
<p>Anyone else seeing this type of thing?</p>
<figure class="wp-block-image size-large"><a href=
"https://libbymiller.files.wordpress.com/2022/05/image.png"><img width="480"
height="360" data-attachment-id="3417" data-permalink=
"https://planb.nicecupoftea.org/2022/05/19/time-squish/image-2/"
data-orig-file=
"https://libbymiller.files.wordpress.com/2022/05/image.png"
data-orig-size="480,360" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="image" data-image-description=""
data-image-caption="" data-medium-file=
"https://libbymiller.files.wordpress.com/2022/05/image.png?w=300"
data-large-file=
"https://libbymiller.files.wordpress.com/2022/05/image.png?w=480"
src=
"https://libbymiller.files.wordpress.com/2022/05/image.png?w=480"
alt="" class="wp-image-3417" srcset=
"https://libbymiller.files.wordpress.com/2022/05/image.png 480w, https://libbymiller.files.wordpress.com/2022/05/image.png?w=150 150w, https://libbymiller.files.wordpress.com/2022/05/image.png?w=300 300w"
sizes="(max-width: 480px) 100vw, 480px" /></a></figure>
</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:56.000000Z</dc:date>
<title>Time squish</title>
<link>https://planb.nicecupoftea.org/2022/05/19/time-squish/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>
<p>I keep seeing these two odd time effects in my life and
wondering if they are connected.</p>
<p>The first is that my work-life has become either extremely
intense – and I don’t mean long hours, I mean intense brainwork for
maybe a week – that wipes me out – and then the next is inevitably
slower and less intense. Basically everything gets bunched up
together. I <em>feel</em> like this has something to do with
everyone working from home, but I’m not really sure how to explain
it (though it reminds me of my time at <a href=
"https://en.wikipedia.org/wiki/Joost">Joost</a> where we’d have an
intense series of meetings with everyone together every few months,
because we were distributed. But this type is not organised, it
just happens). My partner pointed out that this might simply be
poor planning on my part (thanks! I’m quite good at planning
<em>actually</em>).</p>
<p>The second is something we’ve noticed at the <a href=
"https://cubecinema.com">Cube</a> – people are not committing to
doing stuff (coming to an event, volunteering etc) until very close
to the event. Something like 20-30% of our tickets for gigs are
being sold the day before or on the day. I don’t think it’s people
waiting for something better. I wonder if it’s Covid-related
uncertainty? (also 10-15% don’t turn up, not sure if that’s
relevant).</p>
<p>Anyone else seeing this type of thing?</p>
<figure class="wp-block-image size-large"><a href=
"https://libbymiller.files.wordpress.com/2022/05/image.png"><img width="480"
height="360" data-attachment-id="3417" data-permalink=
"https://planb.nicecupoftea.org/2022/05/19/time-squish/image-2/"
data-orig-file=
"https://libbymiller.files.wordpress.com/2022/05/image.png"
data-orig-size="480,360" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="image" data-image-description=""
data-image-caption="" data-medium-file=
"https://libbymiller.files.wordpress.com/2022/05/image.png?w=300"
data-large-file=
"https://libbymiller.files.wordpress.com/2022/05/image.png?w=480"
src=
"https://libbymiller.files.wordpress.com/2022/05/image.png?w=480"
alt="" class="wp-image-3417" srcset=
"https://libbymiller.files.wordpress.com/2022/05/image.png 480w, https://libbymiller.files.wordpress.com/2022/05/image.png?w=150 150w, https://libbymiller.files.wordpress.com/2022/05/image.png?w=300 300w"
sizes="(max-width: 480px) 100vw, 480px" /></a></figure>
</div>
</div>]]></content:encoded>
<description>I keep seeing these two odd time effects in my life and wondering if they are connected. The first is that my work-life has become either extremely intense – and I don’t mean long hours, I mean intense brainwork for maybe a week – that wipes me out – and then the next is inevitably slower and less intense. Basically everything gets bunched up together. I feel like this has something to do with everyone working from home, but I’m not really sure how to explain it (though it reminds me of my time at Joost where we’d have an ...</description>
</item>
<item rdf:about="https://planb.nicecupoftea.org/2021/05/08/sparkfun-edge-macos-x-ftdi/">
<dc:creator>Libby Miller</dc:creator>
<dc:source>Plan B by Libby Miller</dc:source>
<dc:relation>http://planb.nicecupoftea.org/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>
<p>More for my reference than anything else. I’ve been trying to
get the toolchain set up to use a Sparkfun Edge. I had the <a href=
"https://www.sparkfun.com/products/15170">Edge</a>, the <a href=
"https://www.sparkfun.com/products/13746">Beefy3 FTDI breakout</a>,
and a working USB cable.</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><a href=
"https://libbymiller.files.wordpress.com/2021/05/cats.png"><img width="324"
height="244" data-attachment-id="3398" data-permalink=
"https://planb.nicecupoftea.org/cats/" data-orig-file=
"https://libbymiller.files.wordpress.com/2021/05/cats.png"
data-orig-size="324,244" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="cats" data-image-description=""
data-image-caption="" data-medium-file=
"https://libbymiller.files.wordpress.com/2021/05/cats.png?w=300"
data-large-file=
"https://libbymiller.files.wordpress.com/2021/05/cats.png?w=324"
src=
"https://libbymiller.files.wordpress.com/2021/05/cats.png?w=324"
alt="" class="wp-image-3398" srcset=
"https://libbymiller.files.wordpress.com/2021/05/cats.png 324w, https://libbymiller.files.wordpress.com/2021/05/cats.png?w=150 150w, https://libbymiller.files.wordpress.com/2021/05/cats.png?w=300 300w"
sizes="(max-width: 324px) 100vw, 324px" /></a>
<figcaption>Blurry pic of cats taken using Sparkfun Edge and HIMAX
camera</figcaption>
</figure>
</div>
<p><a href=
"https://codelabs.developers.google.com/codelabs/sparkfun-tensorflow/#0">
This</a> worked great for the speech example, for me (although the
actual tensorflow part never understands my “yes” “no” etc, but
anyway, I was able to successfully upload it)</p>
<pre class="wp-block-code">
<code>$ git clone --depth 1 https://github.com/tensorflow/tensorflow.git
$ cd tensorflow
$ gmake -f tensorflow/lite/micro/tools/make/Makefile TARGET=sparkfun_edge micro_speech_bin
$ cp tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/keys_info0.py tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/keys_info.py
$ python3 tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/create_cust_image_blob.py --bin tensorflow/lite/micro/tools/make/gen/sparkfun_edge_cortex-m4_micro/bin/micro_speech.bin --load-address 0xC000 --magic-num 0xCB -o main_nonsecure_ota --version 0x0
$ python3 tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/create_cust_wireupdate_blob.py --load-address 0x20000 --bin main_nonsecure_ota.bin -i 6 -o main_nonsecure_wire --options 0x1
$ export BAUD_RATE=921600
$ export DEVICENAME=/dev/cu.usbserial-DN06A1HD
$ python3 tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/uart_wired_update.py -b ${BAUD_RATE} ${DEVICENAME} -r 1 -f main_nonsecure_wire.bin -i 6</code></pre>
<p>But then I couldn’t figure out how to generalise it to use other
examples – I wanted to use the camera because ages ago I bought a
load of tiny cameras to use with the Edge.</p>
<p>So I tried <a href=
"https://learn.sparkfun.com/tutorials/using-sparkfun-edge-board-with-ambiq-apollo3-sdk/introduction">
this guide</a>, but couldn’t figure out where it the installer had
put the compiler. Seems basic but….??</p>
<p>So in the end I used <a href=
"https://codelabs.developers.google.com/codelabs/sparkfun-tensorflow/#0">
the first instructions</a> to download the tools, and then <a href=
"https://learn.sparkfun.com/tutorials/using-sparkfun-edge-board-with-ambiq-apollo3-sdk/example-applications">
the second</a> to actually do the compilation and installation on
the board.</p>
<pre class="wp-block-code">
<code>$ find . | grep lis2dh12_accelerometer_uart
# you might need this -
# mv tools/apollo3_scripts/keys_info0.py tools/apollo3_scripts/keys_info.py
$ cd ./tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/boards_sfe/edge/examples/lis2dh12_accelerometer_uart/gcc/
$ export PATH="/Users/libbym/personal/mayke2021/tensorflow/tensorflow/lite/micro/tools/make/downloads/gcc_embedded/bin/:$PATH"
$ make clean
$ make COM_PORT=/dev/cu.usbserial-DN06A1HD bootload_asb ASB_UPLOAD_BAUD=921600</code></pre>
<p>etc. Your COM port will be different, find it using</p>
<pre class="wp-block-code"><code>ls /dev/cu*</code></pre>
<p>If like me the FTDI serial port KEEPS VANISHING ARGH – <a href=
"https://aloriumtech.com/how-to-fix-ftdi-driver-issue-on-mac-and-macos/">
this</a> may help (I’d installed 3rd party FTDI drivers ages ago
and they were conflicting with the Apple’s ones. Maybe. Or the
reboot fixed it. No idea).</p>
<div data-carousel-extra=
'{"blog_id":7954761,"permalink":"https:\/\/planb.nicecupoftea.org\/2021\/05\/08\/sparkfun-edge-macos-x-ftdi\/"}'
class=
"wp-block-jetpack-tiled-gallery aligncenter is-style-rectangular">
<div class="tiled-gallery__gallery">
<div class="tiled-gallery__row">
<div class="tiled-gallery__col" style="flex-basis:50%;">
<figure class="tiled-gallery__item"><img data-attachment-id="3400"
data-permalink="https://planb.nicecupoftea.org/img_2052/"
data-orig-file=
"https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg"
data-orig-size="3024,4032" data-comments-opened="1"
data-image-meta="{"aperture":"1.6","credit":"","camera":"iPhone 12 mini","caption":"","created_timestamp":"1620485175","copyright":"","focal_length":"4.2","iso":"640","shutter_speed":"0.03030303030303","title":"","orientation":"1"}"
data-image-title="img_2052" data-image-description=""
data-image-caption="" data-medium-file=
"https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg?w=225"
data-large-file=
"https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg?w=768"
srcset=
"https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg?strip=info&w=600 600w,https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg?strip=info&w=900 900w,https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg?strip=info&w=1200 1200w,https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg?strip=info&w=1500 1500w,https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg?strip=info&w=1800 1800w,https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg?strip=info&w=2000 2000w"
alt="" data-height="4032" data-id="3400" data-link=
"https://planb.nicecupoftea.org/img_2052/" data-url=
"https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg"
data-width="3024" src=
"https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg"
data-amp-layout="responsive" /></figure>
</div>
<div class="tiled-gallery__col" style="flex-basis:50%;">
<figure class="tiled-gallery__item"><img data-attachment-id="3402"
data-permalink="https://planb.nicecupoftea.org/img_2054/"
data-orig-file=
"https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg"
data-orig-size="3024,4032" data-comments-opened="1"
data-image-meta="{"aperture":"1.6","credit":"","camera":"iPhone 12 mini","caption":"","created_timestamp":"1620485190","copyright":"","focal_length":"4.2","iso":"640","shutter_speed":"0.03125","title":"","orientation":"1"}"
data-image-title="img_2054" data-image-description=""
data-image-caption="" data-medium-file=
"https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg?w=225"
data-large-file=
"https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg?w=768"
srcset=
"https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg?strip=info&w=600 600w,https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg?strip=info&w=900 900w,https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg?strip=info&w=1200 1200w,https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg?strip=info&w=1500 1500w,https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg?strip=info&w=1800 1800w,https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg?strip=info&w=2000 2000w"
alt="" data-height="4032" data-id="3402" data-link=
"https://planb.nicecupoftea.org/img_2054/" data-url=
"https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg"
data-width="3024" src=
"https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg"
data-amp-layout="responsive" /></figure>
</div>
</div>
</div>
</div>
<p>Then you have to use a serial programme to get the image. I used
the arduino serial since it was there and then copy and pasted the
output into a textfile, at which point you can use</p>
<pre class="wp-block-code">
<code>tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/boards_sfe/common/examples/hm01b0_camera_uart/utils/raw2bmp.py</code></pre>
<p>to convert it to a png. Palavers.</p>
</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:56.000000Z</dc:date>
<title>Sparkfun Edge, MacOS X, FTDI</title>
<link>https://planb.nicecupoftea.org/2021/05/08/sparkfun-edge-macos-x-ftdi/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>
<p>More for my reference than anything else. I’ve been trying to
get the toolchain set up to use a Sparkfun Edge. I had the <a href=
"https://www.sparkfun.com/products/15170">Edge</a>, the <a href=
"https://www.sparkfun.com/products/13746">Beefy3 FTDI breakout</a>,
and a working USB cable.</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><a href=
"https://libbymiller.files.wordpress.com/2021/05/cats.png"><img width="324"
height="244" data-attachment-id="3398" data-permalink=
"https://planb.nicecupoftea.org/cats/" data-orig-file=
"https://libbymiller.files.wordpress.com/2021/05/cats.png"
data-orig-size="324,244" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="cats" data-image-description=""
data-image-caption="" data-medium-file=
"https://libbymiller.files.wordpress.com/2021/05/cats.png?w=300"
data-large-file=
"https://libbymiller.files.wordpress.com/2021/05/cats.png?w=324"
src=
"https://libbymiller.files.wordpress.com/2021/05/cats.png?w=324"
alt="" class="wp-image-3398" srcset=
"https://libbymiller.files.wordpress.com/2021/05/cats.png 324w, https://libbymiller.files.wordpress.com/2021/05/cats.png?w=150 150w, https://libbymiller.files.wordpress.com/2021/05/cats.png?w=300 300w"
sizes="(max-width: 324px) 100vw, 324px" /></a>
<figcaption>Blurry pic of cats taken using Sparkfun Edge and HIMAX
camera</figcaption>
</figure>
</div>
<p><a href=
"https://codelabs.developers.google.com/codelabs/sparkfun-tensorflow/#0">
This</a> worked great for the speech example, for me (although the
actual tensorflow part never understands my “yes” “no” etc, but
anyway, I was able to successfully upload it)</p>
<pre class="wp-block-code">
<code>$ git clone --depth 1 https://github.com/tensorflow/tensorflow.git
$ cd tensorflow
$ gmake -f tensorflow/lite/micro/tools/make/Makefile TARGET=sparkfun_edge micro_speech_bin
$ cp tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/keys_info0.py tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/keys_info.py
$ python3 tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/create_cust_image_blob.py --bin tensorflow/lite/micro/tools/make/gen/sparkfun_edge_cortex-m4_micro/bin/micro_speech.bin --load-address 0xC000 --magic-num 0xCB -o main_nonsecure_ota --version 0x0
$ python3 tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/create_cust_wireupdate_blob.py --load-address 0x20000 --bin main_nonsecure_ota.bin -i 6 -o main_nonsecure_wire --options 0x1
$ export BAUD_RATE=921600
$ export DEVICENAME=/dev/cu.usbserial-DN06A1HD
$ python3 tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/uart_wired_update.py -b ${BAUD_RATE} ${DEVICENAME} -r 1 -f main_nonsecure_wire.bin -i 6</code></pre>
<p>But then I couldn’t figure out how to generalise it to use other
examples – I wanted to use the camera because ages ago I bought a
load of tiny cameras to use with the Edge.</p>
<p>So I tried <a href=
"https://learn.sparkfun.com/tutorials/using-sparkfun-edge-board-with-ambiq-apollo3-sdk/introduction">
this guide</a>, but couldn’t figure out where it the installer had
put the compiler. Seems basic but….??</p>
<p>So in the end I used <a href=
"https://codelabs.developers.google.com/codelabs/sparkfun-tensorflow/#0">
the first instructions</a> to download the tools, and then <a href=
"https://learn.sparkfun.com/tutorials/using-sparkfun-edge-board-with-ambiq-apollo3-sdk/example-applications">
the second</a> to actually do the compilation and installation on
the board.</p>
<pre class="wp-block-code">
<code>$ find . | grep lis2dh12_accelerometer_uart
# you might need this -
# mv tools/apollo3_scripts/keys_info0.py tools/apollo3_scripts/keys_info.py
$ cd ./tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/boards_sfe/edge/examples/lis2dh12_accelerometer_uart/gcc/
$ export PATH="/Users/libbym/personal/mayke2021/tensorflow/tensorflow/lite/micro/tools/make/downloads/gcc_embedded/bin/:$PATH"
$ make clean
$ make COM_PORT=/dev/cu.usbserial-DN06A1HD bootload_asb ASB_UPLOAD_BAUD=921600</code></pre>
<p>etc. Your COM port will be different, find it using</p>
<pre class="wp-block-code"><code>ls /dev/cu*</code></pre>
<p>If like me the FTDI serial port KEEPS VANISHING ARGH – <a href=
"https://aloriumtech.com/how-to-fix-ftdi-driver-issue-on-mac-and-macos/">
this</a> may help (I’d installed 3rd party FTDI drivers ages ago
and they were conflicting with the Apple’s ones. Maybe. Or the
reboot fixed it. No idea).</p>
<div data-carousel-extra=
'{"blog_id":7954761,"permalink":"https:\/\/planb.nicecupoftea.org\/2021\/05\/08\/sparkfun-edge-macos-x-ftdi\/"}'
class=
"wp-block-jetpack-tiled-gallery aligncenter is-style-rectangular">
<div class="tiled-gallery__gallery">
<div class="tiled-gallery__row">
<div class="tiled-gallery__col" style="flex-basis:50%;">
<figure class="tiled-gallery__item"><img data-attachment-id="3400"
data-permalink="https://planb.nicecupoftea.org/img_2052/"
data-orig-file=
"https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg"
data-orig-size="3024,4032" data-comments-opened="1"
data-image-meta="{"aperture":"1.6","credit":"","camera":"iPhone 12 mini","caption":"","created_timestamp":"1620485175","copyright":"","focal_length":"4.2","iso":"640","shutter_speed":"0.03030303030303","title":"","orientation":"1"}"
data-image-title="img_2052" data-image-description=""
data-image-caption="" data-medium-file=
"https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg?w=225"
data-large-file=
"https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg?w=768"
srcset=
"https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg?strip=info&w=600 600w,https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg?strip=info&w=900 900w,https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg?strip=info&w=1200 1200w,https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg?strip=info&w=1500 1500w,https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg?strip=info&w=1800 1800w,https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg?strip=info&w=2000 2000w"
alt="" data-height="4032" data-id="3400" data-link=
"https://planb.nicecupoftea.org/img_2052/" data-url=
"https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg"
data-width="3024" src=
"https://libbymiller.files.wordpress.com/2021/05/img_2052.jpg"
data-amp-layout="responsive" /></figure>
</div>
<div class="tiled-gallery__col" style="flex-basis:50%;">
<figure class="tiled-gallery__item"><img data-attachment-id="3402"
data-permalink="https://planb.nicecupoftea.org/img_2054/"
data-orig-file=
"https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg"
data-orig-size="3024,4032" data-comments-opened="1"
data-image-meta="{"aperture":"1.6","credit":"","camera":"iPhone 12 mini","caption":"","created_timestamp":"1620485190","copyright":"","focal_length":"4.2","iso":"640","shutter_speed":"0.03125","title":"","orientation":"1"}"
data-image-title="img_2054" data-image-description=""
data-image-caption="" data-medium-file=
"https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg?w=225"
data-large-file=
"https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg?w=768"
srcset=
"https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg?strip=info&w=600 600w,https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg?strip=info&w=900 900w,https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg?strip=info&w=1200 1200w,https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg?strip=info&w=1500 1500w,https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg?strip=info&w=1800 1800w,https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg?strip=info&w=2000 2000w"
alt="" data-height="4032" data-id="3402" data-link=
"https://planb.nicecupoftea.org/img_2054/" data-url=
"https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg"
data-width="3024" src=
"https://libbymiller.files.wordpress.com/2021/05/img_2054.jpg"
data-amp-layout="responsive" /></figure>
</div>
</div>
</div>
</div>
<p>Then you have to use a serial programme to get the image. I used
the arduino serial since it was there and then copy and pasted the
output into a textfile, at which point you can use</p>
<pre class="wp-block-code">
<code>tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/boards_sfe/common/examples/hm01b0_camera_uart/utils/raw2bmp.py</code></pre>
<p>to convert it to a png. Palavers.</p>
</div>
</div>]]></content:encoded>
<description>More for my reference than anything else. I’ve been trying to get the toolchain set up to use a Sparkfun Edge. I had the Edge , the Beefy3 FTDI breakout , and a working USB cable. Blurry pic of cats taken using Sparkfun Edge and HIMAX camera This worked great for the speech example, for me (although the actual tensorflow part never understands my “yes” “no” etc, but anyway, I was able to successfully upload it) $ git clone --depth 1 https://github.com/tensorflow/tensorflow.git $ cd tensorflow $ gmake -f tensorflow/lite/micro/tools/make/Makefile TARGET=sparkfun_edge micro_speech_bin $ cp tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/keys_info0.py tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/keys_info.py $ python3 tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/create_cust_image_blob.py --bin tensorflow/lite/micro/tools/make/gen/sparkfun_edge_cortex-m4_micro/bin/micro_speech.bin ...</description>
</item>
<item rdf:about="https://planb.nicecupoftea.org/2020/12/03/esp32-m5stickc-https-websockets-and-slack/">
<dc:creator>Libby Miller</dc:creator>
<dc:source>Plan B by Libby Miller</dc:source>
<dc:relation>http://planb.nicecupoftea.org/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>
<p>I got one of these lovely <a href=
"https://m5stack.com/products/stick-c?variant=17203451265114">M5StickC</a>s
for a present, and had a play with it as part of <a href=
"https://chickengrylls.wordpress.com/2017/10/31/the-makevember-manifesto/">
Makevember</a>. I wanted to make a “<a href=
"https://www.instructables.com/Push-Puppet-Automata/">push</a>
<a href=
"https://www.instructables.com/3D-printed-Push-Puppet/">puppet</a>”
(one of those toys that you push upwards and they collapse) that
reacted to Slack commands. Not for any reason really, though I like
the idea of tiny colleagues that stand up when addressed on slack.
Makevember doesn’t need a reason. Or at any rate, it doesn’t need a
<em>good</em> reason.</p>
<p>Here are some notes about https and websockets on the ESP32 pico
which is the underlying board for the M5StickC.</p>
<p>I made a “<a href=
"https://makingathingaday.tumblr.com/post/179806193743/wemos-slack-pipecleaner-notifier">slack
wobbler</a>” a couple of years ago, also in makevember – an ESP8266
that connected to slack, then wobbled when someone was mentioned,
using a servo. Since then I ran into some https problems, obviously
also encountered by Jeremy21212121 who fixed it using a <a href=
"https://github.com/jeremy21212121/slack-doorbot-esp8266">modified
version of a websockets server</a>. This works for the ESP8266 –
turns out you can also get the same result using
<code>httpsClient.setInsecure()</code> using BearSSL. I’ve put an
example of that <a href=
"https://github.com/libbymiller/makeingathingaday/tree/master/slackwobbler-2020-insecure">
here</a>.</p>
<p>For ESP32 it seems a bit different. <a href=
"https://github.com/espressif/arduino-esp32/blob/master/libraries/HTTPClient/examples/BasicHttpsClient/BasicHttpsClient.ino">
As far as I can tell</a> you need the certificate not the
fingerprint in this case. You can get it using <code>openssl
s_client -connect api.slack.com:443</code></p>
<p>For ESP32 you also need to use the <a href=
"https://stackoverflow.com/a/51193438">correct libraries for wifi
and wifimulti</a>. The websocket client library is <a href=
"https://github.com/Links2004/arduinoWebSockets%20-%20Marcus%20Sadler">
this one</a>.</p>
<p>And a final note – the M5StickC is very cool but doesn’t enable
you to use many of its GPIO ports. The only one I can find that
allows you to use a servo directly is on the Grove connector, which
I bodged some female jumper wires into, though you can get a
<a href=
"https://m5stack.com/products/connector-grove-to-grove-pin-servo">grove
to servo converter</a> (there are various M5Stick hats you can use
for <a href=
"https://m5stack.com/products/m5stickc-8servos-hat">multiple
servo</a>s). Here’s some <a href=
"https://github.com/libbymiller/makeingathingaday/tree/master/m5_esp32_slack">
code</a>. And <a href=
"https://twitter.com/libbymiller/status/1333165223327444993">a
video</a>.</p>
<figure class="wp-block-image size-large"><a href=
"https://libbymiller.files.wordpress.com/2020/12/santa.jpg"><img width="768"
height="1024" data-attachment-id="3363" data-permalink=
"https://planb.nicecupoftea.org/santa/" data-orig-file=
"https://libbymiller.files.wordpress.com/2020/12/santa.jpg"
data-orig-size="3024,4032" data-comments-opened="1"
data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="santa" data-image-description=""
data-image-caption="" data-medium-file=
"https://libbymiller.files.wordpress.com/2020/12/santa.jpg?w=225"
data-large-file=
"https://libbymiller.files.wordpress.com/2020/12/santa.jpg?w=768"
src=
"https://libbymiller.files.wordpress.com/2020/12/santa.jpg?w=768"
alt="" class="wp-image-3363" srcset=
"https://libbymiller.files.wordpress.com/2020/12/santa.jpg?w=768 768w, https://libbymiller.files.wordpress.com/2020/12/santa.jpg?w=1536 1536w, https://libbymiller.files.wordpress.com/2020/12/santa.jpg?w=113 113w, https://libbymiller.files.wordpress.com/2020/12/santa.jpg?w=225 225w"
sizes="(max-width: 768px) 100vw, 768px" /></a></figure>
</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:56.000000Z</dc:date>
<title>ESP32 M5StickC, https, websockets, and Slack</title>
<link>https://planb.nicecupoftea.org/2020/12/03/esp32-m5stickc-https-websockets-and-slack/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>
<p>I got one of these lovely <a href=
"https://m5stack.com/products/stick-c?variant=17203451265114">M5StickC</a>s
for a present, and had a play with it as part of <a href=
"https://chickengrylls.wordpress.com/2017/10/31/the-makevember-manifesto/">
Makevember</a>. I wanted to make a “<a href=
"https://www.instructables.com/Push-Puppet-Automata/">push</a>
<a href=
"https://www.instructables.com/3D-printed-Push-Puppet/">puppet</a>”
(one of those toys that you push upwards and they collapse) that
reacted to Slack commands. Not for any reason really, though I like
the idea of tiny colleagues that stand up when addressed on slack.
Makevember doesn’t need a reason. Or at any rate, it doesn’t need a
<em>good</em> reason.</p>
<p>Here are some notes about https and websockets on the ESP32 pico
which is the underlying board for the M5StickC.</p>
<p>I made a “<a href=
"https://makingathingaday.tumblr.com/post/179806193743/wemos-slack-pipecleaner-notifier">slack
wobbler</a>” a couple of years ago, also in makevember – an ESP8266
that connected to slack, then wobbled when someone was mentioned,
using a servo. Since then I ran into some https problems, obviously
also encountered by Jeremy21212121 who fixed it using a <a href=
"https://github.com/jeremy21212121/slack-doorbot-esp8266">modified
version of a websockets server</a>. This works for the ESP8266 –
turns out you can also get the same result using
<code>httpsClient.setInsecure()</code> using BearSSL. I’ve put an
example of that <a href=
"https://github.com/libbymiller/makeingathingaday/tree/master/slackwobbler-2020-insecure">
here</a>.</p>
<p>For ESP32 it seems a bit different. <a href=
"https://github.com/espressif/arduino-esp32/blob/master/libraries/HTTPClient/examples/BasicHttpsClient/BasicHttpsClient.ino">
As far as I can tell</a> you need the certificate not the
fingerprint in this case. You can get it using <code>openssl
s_client -connect api.slack.com:443</code></p>
<p>For ESP32 you also need to use the <a href=
"https://stackoverflow.com/a/51193438">correct libraries for wifi
and wifimulti</a>. The websocket client library is <a href=
"https://github.com/Links2004/arduinoWebSockets%20-%20Marcus%20Sadler">
this one</a>.</p>
<p>And a final note – the M5StickC is very cool but doesn’t enable
you to use many of its GPIO ports. The only one I can find that
allows you to use a servo directly is on the Grove connector, which
I bodged some female jumper wires into, though you can get a
<a href=
"https://m5stack.com/products/connector-grove-to-grove-pin-servo">grove
to servo converter</a> (there are various M5Stick hats you can use
for <a href=
"https://m5stack.com/products/m5stickc-8servos-hat">multiple
servo</a>s). Here’s some <a href=
"https://github.com/libbymiller/makeingathingaday/tree/master/m5_esp32_slack">
code</a>. And <a href=
"https://twitter.com/libbymiller/status/1333165223327444993">a
video</a>.</p>
<figure class="wp-block-image size-large"><a href=
"https://libbymiller.files.wordpress.com/2020/12/santa.jpg"><img width="768"
height="1024" data-attachment-id="3363" data-permalink=
"https://planb.nicecupoftea.org/santa/" data-orig-file=
"https://libbymiller.files.wordpress.com/2020/12/santa.jpg"
data-orig-size="3024,4032" data-comments-opened="1"
data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}"
data-image-title="santa" data-image-description=""
data-image-caption="" data-medium-file=
"https://libbymiller.files.wordpress.com/2020/12/santa.jpg?w=225"
data-large-file=
"https://libbymiller.files.wordpress.com/2020/12/santa.jpg?w=768"
src=
"https://libbymiller.files.wordpress.com/2020/12/santa.jpg?w=768"
alt="" class="wp-image-3363" srcset=
"https://libbymiller.files.wordpress.com/2020/12/santa.jpg?w=768 768w, https://libbymiller.files.wordpress.com/2020/12/santa.jpg?w=1536 1536w, https://libbymiller.files.wordpress.com/2020/12/santa.jpg?w=113 113w, https://libbymiller.files.wordpress.com/2020/12/santa.jpg?w=225 225w"
sizes="(max-width: 768px) 100vw, 768px" /></a></figure>
</div>
</div>]]></content:encoded>
<description>I got one of these lovely M5StickC s for a present, and had a play with it as part of Makevember . I wanted to make a “ push puppet ” (one of those toys that you push upwards and they collapse) that reacted to Slack commands. Not for any reason really, though I like the idea of tiny colleagues that stand up when addressed on slack. Makevember doesn’t need a reason. Or at any rate, it doesn’t need a good reason. Here are some notes about https and websockets on the ESP32 pico which is the underlying board for ...</description>
</item>
<item rdf:about="https://planb.nicecupoftea.org/2020/11/14/improved-simpler-presence-robot/">
<dc:creator>Libby Miller</dc:creator>
<dc:source>Plan B by Libby Miller</dc:source>
<dc:relation>http://planb.nicecupoftea.org/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>
<p><a href=
"https://chickengrylls.wordpress.com/2017/10/31/the-makevember-manifesto/">
Makevember</a> and lockdown have encouraged me to make an improved
version of <a href=
"https://planb.nicecupoftea.org/2020/10/24/libbybot-a-posable-remote-presence-bot-made-from-a-raspberry-pi-3-updates/">
libbybot</a>, which is a physical version of a person for remote
participation. I’m trying to think of a better name – she’s not all
about representing me, obviously, but anyone who can’t be somewhere
but wants to participate. [update Jan 15: she’s now called
“sock_puppet”].</p>
<p>This one is much, much simpler to make, thanks to the addition
of a pan-tilt hat and a simpler body. It’s also more expressive
thanks to <a href=
"https://shop.pimoroni.com/products/5x5-rgb-matrix-breakout">these
lovely little 5*5 led matrixes</a>.</p>
<p>Her main feature is that – using a laptop or phone – you can
see, hear and speak to people in a different physical place to you.
I used to use a version of this at work to be in meetings when I
was the only remote participant. That’s not much use now of course.
But perhaps in the future it might make sense for some people to be
remote and some present.</p>
<p>New recent features:</p>
<ul>
<li>easy to make*</li>
<li>wears clothes**</li>
<li>googly eyes</li>
<li>expressive mouth (moves when the remote participant is
speaking, can be happy, sad, etc, whatever can be expressed in 25
pixels)</li>
<li>can be “told” wifi details using QR codes</li>
<li>can move her head a bit (up / down / left / right)</li>
</ul>
<p>* ish<br />
**a sock</p>
<p>I’m still writing docs, but the repo is <a href=
"https://github.com/libbymiller/sock_puppet">here</a>.</p>
<div class="wp-block-group">
<div class=
"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<div class=
"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex">
<div class=
"wp-block-column is-layout-flow wp-block-column-is-layout-flow"
style="flex-basis:100%;">
<figure class="wp-block-image alignwide size-large"><img src=
"https://libbymiller.files.wordpress.com/2020/11/libbybot-lite-portrait.png?w=768"
alt="" />
<figcaption>Libbybot-lite – portrait by Damian</figcaption>
</figure>
</div>
</div>
</div>
</div>
</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:56.000000Z</dc:date>
<title>Sock-puppet – an improved, simpler presence robot</title>
<link>https://planb.nicecupoftea.org/2020/11/14/improved-simpler-presence-robot/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>
<p><a href=
"https://chickengrylls.wordpress.com/2017/10/31/the-makevember-manifesto/">
Makevember</a> and lockdown have encouraged me to make an improved
version of <a href=
"https://planb.nicecupoftea.org/2020/10/24/libbybot-a-posable-remote-presence-bot-made-from-a-raspberry-pi-3-updates/">
libbybot</a>, which is a physical version of a person for remote
participation. I’m trying to think of a better name – she’s not all
about representing me, obviously, but anyone who can’t be somewhere
but wants to participate. [update Jan 15: she’s now called
“sock_puppet”].</p>
<p>This one is much, much simpler to make, thanks to the addition
of a pan-tilt hat and a simpler body. It’s also more expressive
thanks to <a href=
"https://shop.pimoroni.com/products/5x5-rgb-matrix-breakout">these
lovely little 5*5 led matrixes</a>.</p>
<p>Her main feature is that – using a laptop or phone – you can
see, hear and speak to people in a different physical place to you.
I used to use a version of this at work to be in meetings when I
was the only remote participant. That’s not much use now of course.
But perhaps in the future it might make sense for some people to be
remote and some present.</p>
<p>New recent features:</p>
<ul>
<li>easy to make*</li>
<li>wears clothes**</li>
<li>googly eyes</li>
<li>expressive mouth (moves when the remote participant is
speaking, can be happy, sad, etc, whatever can be expressed in 25
pixels)</li>
<li>can be “told” wifi details using QR codes</li>
<li>can move her head a bit (up / down / left / right)</li>
</ul>
<p>* ish<br />
**a sock</p>
<p>I’m still writing docs, but the repo is <a href=
"https://github.com/libbymiller/sock_puppet">here</a>.</p>
<div class="wp-block-group">
<div class=
"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<div class=
"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex">
<div class=
"wp-block-column is-layout-flow wp-block-column-is-layout-flow"
style="flex-basis:100%;">
<figure class="wp-block-image alignwide size-large"><img src=
"https://libbymiller.files.wordpress.com/2020/11/libbybot-lite-portrait.png?w=768"
alt="" />
<figcaption>Libbybot-lite – portrait by Damian</figcaption>
</figure>
</div>
</div>
</div>
</div>
</div>
</div>]]></content:encoded>
<description>Makevember and lockdown have encouraged me to make an improved version of libbybot , which is a physical version of a person for remote participation. I’m trying to think of a better name – she’s not all about representing me, obviously, but anyone who can’t be somewhere but wants to participate. [update Jan 15: she’s now called “sock_puppet”]. This one is much, much simpler to make, thanks to the addition of a pan-tilt hat and a simpler body. It’s also more expressive thanks to these lovely little 5*5 led matrixes . Her main feature is that – using a laptop ...</description>
</item>
<item rdf:about="https://planb.nicecupoftea.org/2020/10/24/libbybot-a-posable-remote-presence-bot-made-from-a-raspberry-pi-3-updates/">
<dc:creator>Libby Miller</dc:creator>
<dc:source>Plan B by Libby Miller</dc:source>
<dc:relation>http://planb.nicecupoftea.org/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>
<p>A couple of people have asked me about my
presence-robot-in-a-lamp, libbybot – unsurprising at the moment
maybe – so I’ve updated the code in <a href=
"https://github.com/libbymiller/libbybot_eleven">github</a> to use
the most recent <a href=
"https://www.rtcmulticonnection.org">RTCMultiConnection</a>
(webRTC) library and done a general tidy up.</p>
<p>I gave a presentation at EMFCamp about it a couple of years ago
– here are the slides:</p>
<div class="wp-block-file"><a href=
"https://libbymiller.files.wordpress.com/2020/10/libbybot_a_cheapo_posable-presence_robot_emfcamp_presentation.pdf">
libbybot – EMF 2018 talk</a><a href=
"https://libbymiller.files.wordpress.com/2020/10/libbybot_a_cheapo_posable-presence_robot_emfcamp_presentation.pdf"
class="wp-block-file__button">Download</a></div>
<figure class="wp-block-image size-large"><a href=
"https://libbymiller.files.wordpress.com/2020/10/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067.jpeg">
<img width="1024" height="576" data-attachment-id="3315"
data-permalink=
"https://planb.nicecupoftea.org/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067/"
data-orig-file=
"https://libbymiller.files.wordpress.com/2020/10/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067.jpeg"
data-orig-size="1248,702" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"1"}"
data-image-title=
"68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067"
data-image-description="" data-image-caption="" data-medium-file=
"https://libbymiller.files.wordpress.com/2020/10/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067.jpeg?w=300"
data-large-file=
"https://libbymiller.files.wordpress.com/2020/10/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067.jpeg?w=1024"
src=
"https://libbymiller.files.wordpress.com/2020/10/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067.jpeg?w=1024"
alt="" class="wp-image-3315" srcset=
"https://libbymiller.files.wordpress.com/2020/10/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067.jpeg?w=1024 1024w, https://libbymiller.files.wordpress.com/2020/10/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067.jpeg?w=150 150w, https://libbymiller.files.wordpress.com/2020/10/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067.jpeg?w=300 300w, https://libbymiller.files.wordpress.com/2020/10/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067.jpeg?w=768 768w, https://libbymiller.files.wordpress.com/2020/10/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067.jpeg 1248w"
sizes="(max-width: 1024px) 100vw, 1024px" /></a>
<figcaption>Libbybot</figcaption>
</figure>
</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:56.000000Z</dc:date>
<title>Libbybot – a posable remote presence bot made from a
Raspberry Pi 3 – updates</title>
<link>https://planb.nicecupoftea.org/2020/10/24/libbybot-a-posable-remote-presence-bot-made-from-a-raspberry-pi-3-updates/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>
<p>A couple of people have asked me about my
presence-robot-in-a-lamp, libbybot – unsurprising at the moment
maybe – so I’ve updated the code in <a href=
"https://github.com/libbymiller/libbybot_eleven">github</a> to use
the most recent <a href=
"https://www.rtcmulticonnection.org">RTCMultiConnection</a>
(webRTC) library and done a general tidy up.</p>
<p>I gave a presentation at EMFCamp about it a couple of years ago
– here are the slides:</p>
<div class="wp-block-file"><a href=
"https://libbymiller.files.wordpress.com/2020/10/libbybot_a_cheapo_posable-presence_robot_emfcamp_presentation.pdf">
libbybot – EMF 2018 talk</a><a href=
"https://libbymiller.files.wordpress.com/2020/10/libbybot_a_cheapo_posable-presence_robot_emfcamp_presentation.pdf"
class="wp-block-file__button">Download</a></div>
<figure class="wp-block-image size-large"><a href=
"https://libbymiller.files.wordpress.com/2020/10/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067.jpeg">
<img width="1024" height="576" data-attachment-id="3315"
data-permalink=
"https://planb.nicecupoftea.org/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067/"
data-orig-file=
"https://libbymiller.files.wordpress.com/2020/10/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067.jpeg"
data-orig-size="1248,702" data-comments-opened="1" data-image-meta=
"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"1"}"
data-image-title=
"68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067"
data-image-description="" data-image-caption="" data-medium-file=
"https://libbymiller.files.wordpress.com/2020/10/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067.jpeg?w=300"
data-large-file=
"https://libbymiller.files.wordpress.com/2020/10/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067.jpeg?w=1024"
src=
"https://libbymiller.files.wordpress.com/2020/10/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067.jpeg?w=1024"
alt="" class="wp-image-3315" srcset=
"https://libbymiller.files.wordpress.com/2020/10/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067.jpeg?w=1024 1024w, https://libbymiller.files.wordpress.com/2020/10/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067.jpeg?w=150 150w, https://libbymiller.files.wordpress.com/2020/10/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067.jpeg?w=300 300w, https://libbymiller.files.wordpress.com/2020/10/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067.jpeg?w=768 768w, https://libbymiller.files.wordpress.com/2020/10/68747470733a2f2f6c696262796d696c6c65722e66696c65732e776f726470726573732e636f6d2f323031372f30372f696d6167655f75706c6f616465645f66726f6d5f696f732e6a7067.jpeg 1248w"
sizes="(max-width: 1024px) 100vw, 1024px" /></a>
<figcaption>Libbybot</figcaption>
</figure>
</div>
</div>]]></content:encoded>
<description>
A couple of people have asked me about my
presence-robot-in-a-lamp, libbybot – unsurprising at the moment
maybe – so I’ve updated the code in github to use
the most recent RTCMultiConnection
(webRTC) library and done a general tidy up.
I gave a presentation at EMFCamp about it a couple of years ago
– here are the slides:
libbybot – EMF 2018 talk Download
Libbybot
</description>
</item>
<item rdf:about="https://industrial-inference.com/2019/09/12/knowledge-graphs-101/">
<dc:creator>Andrew Matthews</dc:creator>
<dc:source>The Wandering Glitch 2 by Andrew Matthews</dc:source>
<dc:relation>http://aabs.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>This is the first in a short series introducing Knowledge
Graphs. It covers just the basics, showing how to write, store,
query and work with graph data using RDF (short for Resource
Description Format). I will keep it free of theory and interesting
but unnecessary digressions. Let me know in the comments if you
find […]</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:55.000000Z</dc:date>
<title>Knowledge Graphs 101</title>
<link>https://industrial-inference.com/2019/09/12/knowledge-graphs-101/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>This is the first in a short series introducing Knowledge
Graphs. It covers just the basics, showing how to write, store,
query and work with graph data using RDF (short for Resource
Description Format). I will keep it free of theory and interesting
but unnecessary digressions. Let me know in the comments if you
find […]</div>
</div>]]></content:encoded>
<description>
This is the first in a short series introducing Knowledge
Graphs. It covers just the basics, showing how to write, store,
query and work with graph data using RDF (short for Resource
Description Format). I will keep it free of theory and interesting
but unnecessary digressions. Let me know in the comments if you
find […]
</description>
</item>
<item rdf:about="https://industrial-inference.com/2011/05/14/preparing-a-project-gutenberg-book-for-use-on-a-6-ereader/">
<dc:creator>Andrew Matthews</dc:creator>
<dc:source>The Wandering Glitch 2 by Andrew Matthews</dc:source>
<dc:relation>http://aabs.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>For a while I’ve been trying to find a nice way to convert
project Gutenberg books to look pleasant on a BeBook One. I’ve
finally hit on the perfect combination of tools, that produces
documents ideally suited to 6″ eInk ebook readers like my BeBook.
The tool chain involves using GutenMark to convert the file
[…]</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:55.000000Z</dc:date>
<title>Preparing a Project Gutenberg ebook for use on a 6″
ereader</title>
<link>https://industrial-inference.com/2011/05/14/preparing-a-project-gutenberg-book-for-use-on-a-6-ereader/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>For a while I’ve been trying to find a nice way to convert
project Gutenberg books to look pleasant on a BeBook One. I’ve
finally hit on the perfect combination of tools, that produces
documents ideally suited to 6″ eInk ebook readers like my BeBook.
The tool chain involves using GutenMark to convert the file
[…]</div>
</div>]]></content:encoded>
<description>
For a while I’ve been trying to find a nice way to convert
project Gutenberg books to look pleasant on a BeBook One. I’ve
finally hit on the perfect combination of tools, that produces
documents ideally suited to 6″ eInk ebook readers like my BeBook.
The tool chain involves using GutenMark to convert the file
[…]
</description>
</item>
<item rdf:about="https://industrial-inference.com/2011/04/11/some-pictures-of-carlton-gardens/">
<dc:creator>Andrew Matthews</dc:creator>
<dc:source>The Wandering Glitch 2 by Andrew Matthews</dc:source>
<dc:relation>http://aabs.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>Carlton Gardens, a set on Flickr. This was my first outing
with the Pentax K-x that I got recently. In these pictures, I’m
trying to get to grips with the camera, so I didn’t have any
particular objective other than to take pictures. The light was so
harsh it was very difficult for me to […]</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:55.000000Z</dc:date>
<title>Some pictures of Carlton Gardens</title>
<link>https://industrial-inference.com/2011/04/11/some-pictures-of-carlton-gardens/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>Carlton Gardens, a set on Flickr. This was my first outing
with the Pentax K-x that I got recently. In these pictures, I’m
trying to get to grips with the camera, so I didn’t have any
particular objective other than to take pictures. The light was so
harsh it was very difficult for me to […]</div>
</div>]]></content:encoded>
<description>
Carlton Gardens, a set on Flickr. This was my first outing
with the Pentax K-x that I got recently. In these pictures, I’m
trying to get to grips with the camera, so I didn’t have any
particular objective other than to take pictures. The light was so
harsh it was very difficult for me to […]
</description>
</item>
<item rdf:about="https://industrial-inference.com/2010/08/31/note-to-self-convert-utf-8-w-bom-to-ascii-wix-db-using-gnu-uconv/">
<dc:creator>Andrew Matthews</dc:creator>
<dc:source>The Wandering Glitch 2 by Andrew Matthews</dc:source>
<dc:relation>http://aabs.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>This one took me a long time to work out, and it took a
non-latin alphabet user (Russian) to point me at the right tools.
Yet again, I’m guilty of being a complacent anglophone. I was
producing a database installer project using WIX 3.5, and ran into
all sorts of inexplicable problems, which I finally […]</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:55.000000Z</dc:date>
<title>Note to Self: Convert UTF-8 w/ BOM to ASCII (WIX + DB) using
GNU uconv</title>
<link>https://industrial-inference.com/2010/08/31/note-to-self-convert-utf-8-w-bom-to-ascii-wix-db-using-gnu-uconv/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>This one took me a long time to work out, and it took a
non-latin alphabet user (Russian) to point me at the right tools.
Yet again, I’m guilty of being a complacent anglophone. I was
producing a database installer project using WIX 3.5, and ran into
all sorts of inexplicable problems, which I finally […]</div>
</div>]]></content:encoded>
<description>
This one took me a long time to work out, and it took a
non-latin alphabet user (Russian) to point me at the right tools.
Yet again, I’m guilty of being a complacent anglophone. I was
producing a database installer project using WIX 3.5, and ran into
all sorts of inexplicable problems, which I finally […]
</description>
</item>
<item rdf:about="https://industrial-inference.com/2010/03/10/programming-with-petri-nets/">
<dc:creator>Andrew Matthews</dc:creator>
<dc:source>The Wandering Glitch 2 by Andrew Matthews</dc:source>
<dc:relation>http://aabs.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>Petri Nets are extremely powerful and expressive, but they are
not as widely used as state machines. That's a pity, they allow us
to solve problems beyond the reach of state machines. This post is
the first in a mini-series on software development with Petri Nets.
All of the code for a full feature-complete Petri Net library is
available online at on GitHub. You're welcome to take a copy, play
with it and use it in your own projects.</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:55.000000Z</dc:date>
<title>Automata-Based Programming With Petri Nets – Part 1</title>
<link>https://industrial-inference.com/2010/03/10/programming-with-petri-nets/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>Petri Nets are extremely powerful and expressive, but they are
not as widely used as state machines. That's a pity, they allow us
to solve problems beyond the reach of state machines. This post is
the first in a mini-series on software development with Petri Nets.
All of the code for a full feature-complete Petri Net library is
available online at on GitHub. You're welcome to take a copy, play
with it and use it in your own projects.</div>
</div>]]></content:encoded>
<description>
Petri Nets are extremely powerful and expressive, but they are
not as widely used as state machines. That's a pity, they allow us
to solve problems beyond the reach of state machines. This post is
the first in a mini-series on software development with Petri Nets.
All of the code for a full feature-complete Petri Net library is
available online at on GitHub. You're welcome to take a copy, play
with it and use it in your own projects.
</description>
</item>
<item rdf:about="https://industrial-inference.com/2009/12/08/quantum-reasoners-hold-key-to-future-web/">
<dc:creator>Andrew Matthews</dc:creator>
<dc:source>The Wandering Glitch 2 by Andrew Matthews</dc:source>
<dc:relation>http://aabs.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>Last year, a company called DWave Systems announced their
quantum computer (the ‘Orion’) – another milestone on the road to
practical quantum computing. Their controversial claims seem worthy
in their own right but they are particularly important to the
semantic web (SW) community. The significance to the SW community
was that their quantum computer solved […]</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:55.000000Z</dc:date>
<title>Quantum Reasoners Hold Key to Future Web</title>
<link>https://industrial-inference.com/2009/12/08/quantum-reasoners-hold-key-to-future-web/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>Last year, a company called DWave Systems announced their
quantum computer (the ‘Orion’) – another milestone on the road to
practical quantum computing. Their controversial claims seem worthy
in their own right but they are particularly important to the
semantic web (SW) community. The significance to the SW community
was that their quantum computer solved […]</div>
</div>]]></content:encoded>
<description>
Last year, a company called DWave Systems announced their
quantum computer (the ‘Orion’) – another milestone on the road to
practical quantum computing. Their controversial claims seem worthy
in their own right but they are particularly important to the
semantic web (SW) community. The significance to the SW community
was that their quantum computer solved […]
</description>
</item>
<item rdf:about="https://industrial-inference.com/2009/11/13/semantic-overflow-highlights-i/">
<dc:creator>Andrew Matthews</dc:creator>
<dc:source>The Wandering Glitch 2 by Andrew Matthews</dc:source>
<dc:relation>http://aabs.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>Semantic Overflow has been active for a couple of weeks. We
now have 155 users and 53 questions. We’ve already had some very
interesting questions and some excellent detailed and thoughtful
responses. I thought, on Egon’s instigation, to  bring
together, from the site’s BI stats, some of the highlights of last
week. The best loved […]</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:55.000000Z</dc:date>
<title>Semantic Overflow Highlights I</title>
<link>https://industrial-inference.com/2009/11/13/semantic-overflow-highlights-i/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>Semantic Overflow has been active for a couple of weeks. We
now have 155 users and 53 questions. We’ve already had some very
interesting questions and some excellent detailed and thoughtful
responses. I thought, on Egon’s instigation, to  bring
together, from the site’s BI stats, some of the highlights of last
week. The best loved […]</div>
</div>]]></content:encoded>
<description>
Semantic Overflow has been active for a couple of weeks. We
now have 155 users and 53 questions. We’ve already had some very
interesting questions and some excellent detailed and thoughtful
responses. I thought, on Egon’s instigation, to&#160; bring
together, from the site’s BI stats, some of the highlights of last
week. The best loved […]
</description>
</item>
<item rdf:about="https://industrial-inference.com/2009/10/27/www-semanticoverflow-com-the-web-2-0-qa-site-for-all-things-web-3-0/">
<dc:creator>Andrew Matthews</dc:creator>
<dc:source>The Wandering Glitch 2 by Andrew Matthews</dc:source>
<dc:relation>http://aabs.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>www.SemanticOverflow.com is a new site based on the hugely
popular StackOverflow.com, devoted to Q&A on anything related
to the semantic web. The site is very new (created today) and I’m
trying to get as many people to visit as I can, so please come and
post your questions and together we’ll create a thriving community
[…]</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:55.000000Z</dc:date>
<title>www.SemanticOverflow.com – the Web 2.0 Q&A site for all
things Web 3.0.</title>
<link>https://industrial-inference.com/2009/10/27/www-semanticoverflow-com-the-web-2-0-qa-site-for-all-things-web-3-0/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>www.SemanticOverflow.com is a new site based on the hugely
popular StackOverflow.com, devoted to Q&A on anything related
to the semantic web. The site is very new (created today) and I’m
trying to get as many people to visit as I can, so please come and
post your questions and together we’ll create a thriving community
[…]</div>
</div>]]></content:encoded>
<description>
www.SemanticOverflow.com is a new site based on the hugely
popular StackOverflow.com, devoted to Q&amp;A on anything related
to the semantic web. The site is very new (created today) and I’m
trying to get as many people to visit as I can, so please come and
post your questions and together we’ll create a thriving community
[…]
</description>
</item>
<item rdf:about="https://industrial-inference.com/2009/03/20/quote-of-the-day-chris-sells-on-cocktail-parties/">
<dc:creator>Andrew Matthews</dc:creator>
<dc:source>The Wandering Glitch 2 by Andrew Matthews</dc:source>
<dc:relation>http://aabs.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>I can relate to this: I’ll take a lake of fire any day over
more than three strangers in a room with which I share no common
task and with whom I’m expected to socialize How to express this to
my wife without her thinking that I am suffering from a combination
of acrophobia and […]</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:55.000000Z</dc:date>
<title>Quote of the Day – Chris Sells on Cocktail Parties</title>
<link>https://industrial-inference.com/2009/03/20/quote-of-the-day-chris-sells-on-cocktail-parties/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>I can relate to this: I’ll take a lake of fire any day over
more than three strangers in a room with which I share no common
task and with whom I’m expected to socialize How to express this to
my wife without her thinking that I am suffering from a combination
of acrophobia and […]</div>
</div>]]></content:encoded>
<description>
I can relate to this: I’ll take a lake of fire any day over
more than three strangers in a room with which I share no common
task and with whom I’m expected to socialize How to express this to
my wife without her thinking that I am suffering from a combination
of acrophobia and […]
</description>
</item>
<item rdf:about="https://industrial-inference.com/2009/02/27/australian-port-a-new-wmd/">
<dc:creator>Andrew Matthews</dc:creator>
<dc:source>The Wandering Glitch 2 by Andrew Matthews</dc:source>
<dc:relation>http://aabs.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>Proving that Cockroaches are not indestructible, Kerry neatly
(if inadvertently) demonstrated that Australian port is capable of
killing things that heat, cold and lethal levels of ionizing
radiation cannot. Of course Kerry was gagging for days just at the
thought that the thing had been in her glass all along – it
probably hadn’t – […]</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:55.000000Z</dc:date>
<title>Australian Port – a new WMD?</title>
<link>https://industrial-inference.com/2009/02/27/australian-port-a-new-wmd/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>Proving that Cockroaches are not indestructible, Kerry neatly
(if inadvertently) demonstrated that Australian port is capable of
killing things that heat, cold and lethal levels of ionizing
radiation cannot. Of course Kerry was gagging for days just at the
thought that the thing had been in her glass all along – it
probably hadn’t – […]</div>
</div>]]></content:encoded>
<description>
Proving that Cockroaches are not indestructible, Kerry neatly
(if inadvertently) demonstrated that Australian port is capable of
killing things that heat, cold and lethal levels of ionizing
radiation cannot. Of course Kerry was gagging for days just at the
thought that the thing had been in her glass all along – it
probably hadn’t – […]
</description>
</item>
<item rdf:about="https://industrial-inference.com/2008/11/18/relational-modeling-not-as-we-know-it/">
<dc:creator>Andrew Matthews</dc:creator>
<dc:source>The Wandering Glitch 2 by Andrew Matthews</dc:source>
<dc:relation>http://aabs.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>... there's plenty of ways that RDF specifically addresses the
problems it seeks to address - data interchange, standards
definition, KR, mashups - in a distributed web-wide way. RDBMSs
address the problems that were faced by programmers at the coal
face in the 60s and 70s - Efficient, Standardized,
platform-independent data storage and retrieval. The imperative
that created a need for RDBMSs in the 60s is not going away, so I
doubt databases will be going away any time soon either. In fact
they can be exposed to the world as triples without too much
trouble. The problem is that developers need more than just data
storage and retrieval. They need <i>intelligent</i> data storage
and retrieval.</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:55.000000Z</dc:date>
<title>Relational Modeling? Not as we know it!</title>
<link>https://industrial-inference.com/2008/11/18/relational-modeling-not-as-we-know-it/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>... there's plenty of ways that RDF specifically addresses the
problems it seeks to address - data interchange, standards
definition, KR, mashups - in a distributed web-wide way. RDBMSs
address the problems that were faced by programmers at the coal
face in the 60s and 70s - Efficient, Standardized,
platform-independent data storage and retrieval. The imperative
that created a need for RDBMSs in the 60s is not going away, so I
doubt databases will be going away any time soon either. In fact
they can be exposed to the world as triples without too much
trouble. The problem is that developers need more than just data
storage and retrieval. They need <i>intelligent</i> data storage
and retrieval.</div>
</div>]]></content:encoded>
<description>... there's plenty of ways that RDF specifically addresses the problems it seeks to address - data interchange, standards definition, KR, mashups - in a distributed web-wide way. RDBMSs address the problems that were faced by programmers at the coal face in the 60s and 70s - Efficient, Standardized, platform-independent data storage and retrieval. The imperative that created a need for RDBMSs in the 60s is not going away, so I doubt databases will be going away any time soon either. In fact they can be exposed to the world as triples without too much trouble. The problem is that ...</description>
</item>
<item rdf:about="https://industrial-inference.com/2008/11/14/patternmatching/">
<dc:creator>Andrew Matthews</dc:creator>
<dc:source>The Wandering Glitch 2 by Andrew Matthews</dc:source>
<dc:relation>http://aabs.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>I recently used Matthew Podwyszocki’s pattern matching classes
for a top level exception handler in an App I’m writing. Matthew’s
classes are a really nice fluent interface attaching predicates to
functions generating results. I used it as a class factory to
select between handlers for exceptions. Here’s an example of how I
used it: ExceptionHandler […]</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:55.000000Z</dc:date>
<title>Pattern Matching in C#</title>
<link>https://industrial-inference.com/2008/11/14/patternmatching/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>I recently used Matthew Podwyszocki’s pattern matching classes
for a top level exception handler in an App I’m writing. Matthew’s
classes are a really nice fluent interface attaching predicates to
functions generating results. I used it as a class factory to
select between handlers for exceptions. Here’s an example of how I
used it: ExceptionHandler […]</div>
</div>]]></content:encoded>
<description>
I recently used Matthew Podwyszocki’s pattern matching classes
for a top level exception handler in an App I’m writing. Matthew’s
classes are a really nice fluent interface attaching predicates to
functions generating results. I used it as a class factory to
select between handlers for exceptions. Here’s an example of how I
used it: ExceptionHandler […]
</description>
</item>
<item rdf:about="https://industrial-inference.com/2008/09/23/object-orientation-not-as-we-know-it/">
<dc:creator>Andrew Matthews</dc:creator>
<dc:source>The Wandering Glitch 2 by Andrew Matthews</dc:source>
<dc:relation>http://aabs.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>I thought I’d start with a lyric: That one’s my mother and
That one’s my father and The one in the hat, that’s me. You could
be forgiven for wondering what Ani Difranco has to do with this
blog’s usual themes, but rest assured, I won’t stray too far. My
theme today is the limitations […]</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:55.000000Z</dc:date>
<title>Object Orientation? Not as we know it.</title>
<link>https://industrial-inference.com/2008/09/23/object-orientation-not-as-we-know-it/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>I thought I’d start with a lyric: That one’s my mother and
That one’s my father and The one in the hat, that’s me. You could
be forgiven for wondering what Ani Difranco has to do with this
blog’s usual themes, but rest assured, I won’t stray too far. My
theme today is the limitations […]</div>
</div>]]></content:encoded>
<description>
I thought I’d start with a lyric: That one’s my mother and
That one’s my father and The one in the hat, that’s me. You could
be forgiven for wondering what Ani Difranco has to do with this
blog’s usual themes, but rest assured, I won’t stray too far. My
theme today is the limitations […]
</description>
</item>
<item rdf:about="https://industrial-inference.com/2008/09/15/new-resources-for-linqtordf/">
<dc:creator>Andrew Matthews</dc:creator>
<dc:source>The Wandering Glitch 2 by Andrew Matthews</dc:source>
<dc:relation>http://aabs.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>John Mueller recently sent through a link to a series of
articles on working with RDF. As well as being a useful
introduction to working with RDF, they use LinqToRdf for code
examples. Modeling your Data with RDF (Part 1) Understanding and
Using Resource Description Framework Files (Part 2) They provide
information on hosting RDF […]</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:55.000000Z</dc:date>
<title>New Resources for LinqToRdf</title>
<link>https://industrial-inference.com/2008/09/15/new-resources-for-linqtordf/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>John Mueller recently sent through a link to a series of
articles on working with RDF. As well as being a useful
introduction to working with RDF, they use LinqToRdf for code
examples. Modeling your Data with RDF (Part 1) Understanding and
Using Resource Description Framework Files (Part 2) They provide
information on hosting RDF […]</div>
</div>]]></content:encoded>
<description>
John Mueller recently sent through a link to a series of
articles on working with RDF. As well as being a useful
introduction to working with RDF, they use LinqToRdf for code
examples. Modeling your Data with RDF (Part 1) Understanding and
Using Resource Description Framework Files (Part 2) They provide
information on hosting RDF […]
</description>
</item>
<item rdf:about="https://industrial-inference.com/2008/08/27/not-another-mapping-markup-language/">
<dc:creator>Andrew Matthews</dc:creator>
<dc:source>The Wandering Glitch 2 by Andrew Matthews</dc:source>
<dc:relation>http://aabs.wordpress.com/</dc:relation>
<planet:content xmlns="http://www.w3.org/1999/xhtml" rdf:parseType="Literal">
<div>Kingsley Idehen has again graciously given LinqToRdf some much
needed link-love. He mentioned it in a post that was primarily
concerned with the issues of mapping between the ontology,
relational and object domains. His assertion is that LinqtoRdf,
being an offshoot of an ORM related initiative, is reversing the
natural order of mappings. He believes […]</div>
</planet:content>
<dc:date rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2024-03-11T14:09:55.000000Z</dc:date>
<title>Not another mapping markup language!</title>
<link>https://industrial-inference.com/2008/08/27/not-another-mapping-markup-language/</link>
<content:encoded rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"><![CDATA[
<div xmlns='http://www.w3.org/1999/xhtml'>
<div>Kingsley Idehen has again graciously given LinqToRdf some much
needed link-love. He mentioned it in a post that was primarily
concerned with the issues of mapping between the ontology,
relational and object domains. His assertion is that LinqtoRdf,
being an offshoot of an ORM related initiative, is reversing the
natural order of mappings. He believes […]</div>
</div>]]></content:encoded>
<description>
Kingsley Idehen has again graciously given LinqToRdf some much
needed link-love. He mentioned it in a post that was primarily
concerned with the issues of mapping between the ontology,
relational and object domains. His assertion is that LinqtoRdf,
being an offshoot of an ORM related initiative, is reversing the
natural order of mappings. He believes […]
</description>
</item>
</rdf:RDF>
If you would like to create a banner that links to this page (i.e. this validation result), do the following:
Download the "valid RSS" banner.
Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)
Add this HTML to your page (change the image src
attribute if necessary):
If you would like to create a text link instead, here is the URL you can use:
http://www.feedvalidator.org/check.cgi?url=http%3A//planetrdf.com/index.rdf