<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Fluidinfo on Blog | Jonas Neubert</title><link>https://blog.jonasneubert.com/tags/fluidinfo/</link><description>Recent content in Fluidinfo on Blog | Jonas Neubert</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 04 Jan 2025 22:49:55 -0700</lastBuildDate><atom:link href="https://blog.jonasneubert.com/tags/fluidinfo/index.xml" rel="self" type="application/rss+xml"/><item><title>Fluidinfo API: Likes &amp; Dislikes</title><link>https://blog.jonasneubert.com/2011/04/24/fluidinfo-api-likes-and-dislikes/</link><pubDate>Sun, 24 Apr 2011 00:00:00 +0000</pubDate><guid>https://blog.jonasneubert.com/2011/04/24/fluidinfo-api-likes-and-dislikes/</guid><description>&lt;p>I spent the last two weekends[1] working with the Fluidinfo API (&lt;a href="https://blog.jonasneubert.com/2011/04/16/hello-fluidinfo-api-competition/">here is why&lt;/a>). Using Fluidinfo is pretty easy, I found two weekends enough to discover most of what is possible with Fluidinfo.[2] Here&amp;rsquo;s my collection of likes and dislikes which accumulated while working with Fluidinfo. In the spirit of a true pessimist, I start with dislikes.&lt;/p>
&lt;h2 id="dislikes">Dislikes&lt;/h2>
&lt;ol>
&lt;li>Among the very first things I learned while playing with Fluidinfo: You can delete your root namespace but you can&amp;rsquo;t re-create it. If you sign up with the username skillshelv.es your root namespace will be &lt;code>skillshelv.es&lt;/code> (big surprise) meaning that all your tags will be in the format &lt;code>skillshelv.es/tagname&lt;/code> or &lt;code>skillshelv.es/subnamespace/tagname&lt;/code>. Because you have the ability to manage sub-namespaces under your root namespace, Fluidinfo exposes the ability to delete namespaces. When I first tried out the Python Library, the first thing I managed to do successfully was to delete my root namespace &lt;code>skillshelv.es&lt;/code>. Trying to recreate it results in a permission error. That&amp;rsquo;s why all Skillshelv.es related tags now live in the alternate namespace &lt;code>skillshelves&lt;/code> which I obtained after creating a second account.&lt;/li>
&lt;li>There is no results pagination and no way of limiting the result count. &lt;a href="http://doc.fluidinfo.com/fluidDB/queries.html#query-result-limits">The heading of the docs chapter on query results limits&lt;/a> sounds promising, but only talks about hard limits imposed by Fluidinfo, not limits set in the query. &lt;a href="http://fluiddb.fluidinfo.com/values?query=has%20oreilly.com/title&amp;amp;tag=oreilly.com/title&amp;amp;tag=oreilly.com/author-names">Try querying for the titles and author names of all O&amp;rsquo;Reilly books stored in Fluidinfo&lt;/a>. You get 2373 book titles and their respective authors, totaling half a megabyte of data. If you only want to show the first ten, you&amp;rsquo;ll still have to query all of them.&lt;/li>
&lt;li>Fluidinfo (sometimes) is slooooooooow. &lt;a href="http://fluiddb.fluidinfo.com/values?query=has%20oreilly.com/title&amp;amp;tag=oreilly.com/title&amp;amp;tag=oreilly.com/author-names">The query mentioned above&lt;/a> takes somewhere between 8 seconds and forever to return results. That&amp;rsquo;s a long time if you know that your user is waiting for a page to display. It&amp;rsquo;s an even longer time if you are using Google App Engine: GAE has a hard limit of 10 seconds on how long an outgoing HTTP request may wait for a response. On Skillshelv.es I work around long load times by running all Fluidinfo GET queries in Javascript. That way I can display a loading indicator while the Fluidinfo data is loading. This gives the user something to see and shifts the blame to Fluidinfo :-) More generally, though, it means that Fluidinfo shouldn&amp;rsquo;t be the datastore you query when generating pages. A potential solution might be allowing to limit the result count (see #2) which might reduce processing time on the Fluidinfo side and reduces the amount of data to be transferred.&lt;/li>
&lt;li>Object IDs can&amp;rsquo;t be used in queries. It&amp;rsquo;s easy to get a list of all tag names that are attached to an object. It&amp;rsquo;s not so easy getting the values of all those tags. Fluidinfo only provides a clear method to retrieve exactly one tag value associated with a specific object at a time, e.g. &lt;a href="http://fluiddb.fluidinfo.com/objects/83b8917f-e078-43c8-96fd-0007a6835009/oreilly.com/title">the title of a certain O&amp;rsquo;Reilly book&lt;/a>. If you want multiple tag values at the same time, you&amp;rsquo;ll have to use the /values API endpoint, like in &lt;a href="http://fluiddb.fluidinfo.com/values?query=oreilly.com/title+matches+%22python%22&amp;amp;tag=oreilly.com/title&amp;amp;tag=oreilly.com/author-names">this example which gives you title and price of all O&amp;rsquo;Reilly books whose title contains &amp;ldquo;PHP&amp;rdquo;&lt;/a>. Fluidinfo gives you a pretty neat query language to define which objects are included in the response for a query to &lt;code>/values&lt;/code>, but querying for an object ID isn&amp;rsquo;t part of that query language. Therefore, you can&amp;rsquo;t retrieve multiple tag values for a single object at a time, unless you already know one tag value that uniquely identifies this object. For O&amp;rsquo;Reilly books the contents of &lt;code>oreilly.com/id&lt;/code> seem to be unique and Skillshelv.es uses it equivalently to a primary ID. &lt;em>Update: I mentioned this in the Fluidinfo IRC channel and apparently this is now a ticket and might become a feature in future.&lt;/em>&lt;/li>
&lt;li>While &lt;a href="http://blogs.fluidinfo.com/fluidinfo/2011/03/21/examples-of-fluidinfo-oreilly-api-queries/">this Fluidinfo blog post&lt;/a> suggests that Fluidinfo&amp;rsquo;s &lt;code>matches&lt;/code> operator for text matching works like MySQL&amp;rsquo;s &lt;code>LIKE&lt;/code>, it doesn&amp;rsquo;t actually. &lt;code>matches&lt;/code> only matches full words. That&amp;rsquo;s not unsurprising but was a little disappointing when I tried building an auto-complete feature that pulls data directly from Fluidinfo.&lt;/li>
&lt;/ol>
&lt;h2 id="likes">Likes&lt;/h2>
&lt;ol>
&lt;li>First class user support! When I &lt;a href="https://twitter.com/jonemo/status/56951196916776961">reported #1 of the dislikes above via Twitter&lt;/a>, Fluidinfo&amp;rsquo;s CEO &lt;a href="https://twitter.com/terrycojones/status/57177719225589761">replied within a few hours acknowledging the issue&lt;/a>. Later I figured out that most the action is going on in Fluidinfo&amp;rsquo;s IRC channel where the folks behind Fluidinfo seem to always be hanging out waiting for people to approach them with their problems. When one of my (valid) queries wouldn&amp;rsquo;t work one day, the problem was fixed in no time and on top I got a ton of useful advice.&lt;/li>
&lt;li>&lt;a href="https://explorer.fluidinfo.com/fluidinfo/oreilly.com">Fluidinfo Explorer&lt;/a>. This tool didn&amp;rsquo;t seem very useful to me at first but then I discovered the context menu and the login button :-) Once you have some data in Fluidinfo and you want to quickly check or change a few entries, nothing beats this tool.&lt;/li>
&lt;li>There are &lt;del>a million&lt;/del> lots of ways to access Fluidinfo. Libraries are available for &lt;a href="http://github.com/maxapps/FluidDBServer">Adobe AIR&lt;/a>, &lt;a href="http://github.com/hugoduncan/clj-fluiddb">Clojure&lt;/a>, &lt;a href="http://github.com/micrypt/GoFluidDB">Go&lt;/a>, &lt;a href="http://github.com/ntoll/JFluidDB">Java&lt;/a>, &lt;a href="http://github.com/ecarnevale/jsFluidDB">Javascript&lt;/a>, &lt;a href="http://github.com/hdurer/cl-fluiddb">Lisp&lt;/a>, &lt;a href="http://github.com/ntoll/FluidDB.NET">.NET&lt;/a>, &lt;a href="http://github.com/fxn/net-fluidinfo">Perl&lt;/a>, &lt;a href="http://github.com/paparent/phpFluidDB">PHP&lt;/a>, &lt;a href="https://github.com/fluidinfo/fluidinfo.py">Python&lt;/a>, &lt;a href="https://github.com/gridaphobe/fluidinfo.rb">Ruby&lt;/a> and &lt;a href="http://www.squeaksource.com/FluidDB.html">Smalltalk&lt;/a>. And Fluidinfo supports JSONP and CORS. It&amp;rsquo;s really nice to be able to hit the ground running in whatever language you like best. Compare this to &lt;a href="https://developers.google.com/products/?csw=1">some big companies who have tens of APIs, each with libraries available in another random selection of two or three languages&lt;/a>.&lt;/li>
&lt;/ol>
&lt;h2 id="footnotes">Footnotes:&lt;/h2>
&lt;p>[1] Like every good grad student I did not devote the entire weekend but also did some &lt;del>real&lt;/del> research work on these weekends.&lt;/p></description></item><item><title>Fluidinfo API Contest: Design Decisions</title><link>https://blog.jonasneubert.com/2011/04/18/fluidinfo-api-contest-design-decisions/</link><pubDate>Mon, 18 Apr 2011 00:00:00 +0000</pubDate><guid>https://blog.jonasneubert.com/2011/04/18/fluidinfo-api-contest-design-decisions/</guid><description>&lt;p>I announced yesterday that I am currently working on a submission to the O&amp;rsquo;Reilly/Fluidinfo API contest. You should check out the other submissions so far:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="http://www.bookchirpa.com/">BookChirpa&lt;/a> by Mark McSpadden is a data mashup project showing recent tweets about O&amp;rsquo;Reilly books enriched with information about these books which is pulled from Fluidinfo. There is an &lt;a href="http://www.bookchirpa.com/about">About page with a whole bunch of technical info&lt;/a>. Ironically, the top entry on the &lt;a href="http://www.bookchirpa.com/books">Bookchirpa library page&lt;/a> is &amp;ldquo;21 Recipes for Mining Twitter&amp;rdquo;.&lt;/li>
&lt;li>David Karapetyan opts for a submission which only adds data to the Fluidinfo data store but doesn&amp;rsquo;t have a frontend. That&amp;rsquo;s legit by the contest rules. &lt;a href="http://articulationstudy.posterous.com/oreilly-writable-api-competition">Here&amp;rsquo;s a blog post about how he added Amazon Suggestions to each book&lt;/a>. 90% of his post are crossed out indicating that the story behind his submission isn&amp;rsquo;t exactly linear.&lt;/li>
&lt;li>Eric Seidel&amp;rsquo;s submission is really similar to Skillshelv.es. Shockingly similar. &lt;a href="http://eseidel.org/blog/2011/04/fluidinfo-oreilly-competition/">Read about it in his blog&lt;/a>. By the looks of it he&amp;rsquo;s been a Fluidinfo aficionado before because his prior project FluidCV is based on it. His submission to the contest is to let people add O&amp;rsquo;Reilly books to their FluidCV to - hold your breath - show their skills based on the books they own. Disclaimer: I hadn&amp;rsquo;t seen his project when I started working on &lt;a href="http://www.skillshelv.es/">Skillshelv.es&lt;/a>.&lt;/li>
&lt;li>Michael Hawes noticed that the books which Fluidinfo imported into their database are only those English language ones sold in the USA. But O&amp;rsquo;Reilly also publishes books in other languages in the small part of the earth known as ROTW to Americans (the acronym stands for both Rest of the World and Rim of the World). He embarked on the mission to add links to the foreign language equivalents to all existing Fluidinfo book objects. Like David K.&amp;rsquo;s entry, Michael&amp;rsquo;s has no front page, &lt;a href="http://www.gottahavacuppamocha.com/about/oreilly-fluidinfo-api-competition/">but extensive documentation on his blog&lt;/a>.&lt;/li>
&lt;li>Rachel Willmer &lt;a href="http://luzme.com/blog/2011/04/luzme-enters-fluidinfos-writable-api-competition/">wrote an extension&lt;/a> to her eBook price aggregator &lt;a href="http://www.luzme.com/">Luzme.com&lt;/a> to send up to date eBook pricing details into the Fluidinfo data store. She writes that she will only sync this data for the duration of the competition but I sure hope she continues to do so after the deadline on Sunday night.
It strikes me how open everyone is about what their entry is and how they went about creating it. So I won&amp;rsquo;t hold back either and write up the details on my submission, predominantly in this blog and maybe later on as part of the Skillshelv.es site. Today, let&amp;rsquo;s talk about the design decision that had to be made before I started touching my keyboard.&lt;/li>
&lt;/ul>
&lt;h2 id="quick-recap">Quick Recap&lt;/h2>
&lt;p>Here&amp;rsquo;s the quick technical summary of what my submission will do: Each book will be tagged with one or more skills representing the expertise conveyed in the book. Each book will also be tagged with usernames to represent ownership. Based on this info, users&amp;rsquo; skill levels and some other derivative data will be computed.&lt;/p></description></item><item><title>Hello Fluidinfo API Competition</title><link>https://blog.jonasneubert.com/2011/04/16/hello-fluidinfo-api-competition/</link><pubDate>Sat, 16 Apr 2011 00:00:00 +0000</pubDate><guid>https://blog.jonasneubert.com/2011/04/16/hello-fluidinfo-api-competition/</guid><description>&lt;p>How does a small startup get the word out about their API? The people at Fluidinfo probably thought that a full page ad in the New York Times is a bad idea. They decided to run a contest instead. If things go well, contests are great because tens or hundreds or thousands of people (&amp;ldquo;contest participants&amp;rdquo;) create value according to your specification but you only have to pay a few of them (&amp;ldquo;lucky winners&amp;rdquo;). If all goes wrong only a few people create very little value and you have to pay all of them. That&amp;rsquo;s really all there is to know about contests.&lt;/p></description></item></channel></rss>