<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6639337702975571846</id><updated>2011-09-08T15:13:48.135-07:00</updated><category term='node.js'/><category term='distributed'/><category term='vision'/><category term='installation'/><category term='javascript'/><category term='scalability'/><category term='dbslayer'/><category term='riak'/><category term='interdisciplinary'/><category term='vm'/><category term='triplestore'/><category term='datastore'/><category term='Semantic Web'/><category term='OWLAPI'/><category term='metaphilosophy'/><category term='web of ontologies'/><category term='school'/><category term='graph'/><category term='philosophy'/><category term='recommender'/><category term='Java'/><category term='Pellet'/><category term='Trust'/><category term='Datatype'/><category term='Programming'/><category term='CSML'/><category term='Granularity'/><category term='mvc'/><category term='essay'/><category term='Data'/><category term='consistency'/><category term='sparql'/><category term='Database'/><category term='philoinformatics'/><category term='informatics'/><category term='Work'/><category term='standards'/><category term='Conceptual Space'/><category term='json-template'/><category term='OWL'/><category term='graph datastore'/><category term='CAP-theorem'/><category term='map-reduce'/><category term='categorization'/><category term='content'/><category term='ontology design'/><category term='SWRL'/><category term='json'/><title type='text'>Philoinformatics</title><subtitle type='html'>The study of the foundational information systems required to radically enhance philosophy.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://andrewmcknight.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://andrewmcknight.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Andrew McKnight</name><uri>http://www.blogger.com/profile/13364162134437158686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6639337702975571846.post-2067059464497851215</id><published>2010-12-11T16:03:00.000-08:00</published><updated>2010-12-22T15:17:35.972-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='informatics'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='philoinformatics'/><category scheme='http://www.blogger.com/atom/ns#' term='content'/><category scheme='http://www.blogger.com/atom/ns#' term='categorization'/><title type='text'>Philoinformatics and Categories of Informatics</title><content type='html'>How does philoinformatics relate to general informatics?&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_xoRUcN4SFtc/TQP7bH3Q8lI/AAAAAAAAABM/9CQHzXHIZa8/s1600/informatics_fan.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="184" src="http://2.bp.blogspot.com/_xoRUcN4SFtc/TQP7bH3Q8lI/AAAAAAAAABM/9CQHzXHIZa8/s320/informatics_fan.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;I will once again answer this using MS Paint. I think informatics (information science) can be usefully looked at as a kind of fan-like spectrum from general informatics to specific informatics. On the pointy handle end, you have &lt;i&gt;fundamental informatics&lt;/i&gt;. As you move along to the edges of the fan, you find general &lt;i&gt;domain informatics&lt;/i&gt;. At the edges on the right you have specific informatics fields such as bioinformatics, socioinformatics, and philoinformatics. Those are the grey and beige slices.&lt;br /&gt;&lt;br /&gt;You can think of any very specific topic being placed on the edge of the fan under the title of "Informatics of X" or "X informatics" or, if you're lucky enough to have a nice prefix representing the topic, even "Xoinformatics"!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Domain Informatics&lt;/b&gt;&lt;br /&gt;Just taking a look at the &lt;a href="http://en.wikipedia.org/wiki/Informatics"&gt;wikipedia page on informatics&lt;/a&gt; begs for some subcategories to help organize the discipline. The problems that are solved by the same mechanism in multiple specific informatics disciplines are more appropriately put deeper (to the left) in this fan picture, in the direction of general fundamental informatics. This is the realm of domain informatics. Domain informatics is arguably the most interesting area of informatics. Fundamental informatics is quite stable and almost completely content-neutral. While most advances in a specific informatics domain can usually be generalized to a certain point under certain conditions. I'd put things like information entropy, communication channel theory, cloud computing, and generic encryption issues in the 'fundamental informatics' category. In order to explain where philoinformatics lies in this picture, I'm going to try to identify and categorize the domain informatics.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Qualitative vs Quantitative&lt;/b&gt; &lt;br /&gt;I think a major distinction to make when categorizing the growing amount of domain informatics is between qualitative and quantitative content. All disciplines, of course, need to deal with both quantitative and qualitative data, but some disciplines (like physics) have quantitative measurement at their cores, while other disciplines (like history) have qualitative reports and observations at their cores.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A Third Q?&lt;/b&gt;&lt;br /&gt;Abstract disciplines like philosophy, law, math, economics, and computation, which are "removed" in a sense from direct empirical observation are interesting cases. They all seem to allow for more rigid models than qualitative observations but are generally not amenable to numerical models in the way quantitative measurements are. Unfortunately I can't think of an appropriate catchy word that starts with a 'Q' to add to the Quantity/Quality (false) dichotomy. But I think we can roughly partition all of domain informatics into Feature, Model, and Measurement Informatics. These are the yellow, blue, and red parts of my beautiful map of informatics above.&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;Categorizing Philoinformatics&lt;/b&gt;&lt;br /&gt;Content in philosophy is published in chunks on the paper and book level. Some of these papers can get heavy in symbols but generally we're talking about free text and almost does a paper get heavy on numbers. Philoinformatics to handle this traditional form of philosophy becomes largely encompassed by general Publishing 2.0 initiatives which is a part of domain informatics. Registries of philosophers, registries of papers, and construing bibliographies as dereferencable (aka "followable") URIs are not unique to philosophical publications. This initiative involves simple feature informatics (by which I mean 'simple features' not 'simple task'). It's also a task that is &lt;i&gt;extrinsic&lt;/i&gt; to philosophy in the sense that it is neutral to the content.&lt;br /&gt;&lt;br /&gt;The more radical goal of philoinformatics that I mentioned in my &lt;a href="http://andrewmcknight.blogspot.com/2010/07/philoinformatics-manifesto.html"&gt;philoinformatics manifesto draft&lt;/a&gt; involves cracking into the content itself whether by extracting from traditional publications or inventing new types of publication. Much of this content will involve trying to serialize identified ideas, concepts, and definitions that would be only available as unstructured freeform text in regular publications. As important as this is, even these items are somewhat general in that they are going to be used in all kinds of publications. But I should stress that these are the kinds of things that are currently rarely captured in a formal machine-readable kind of form, and would be a major enhancement to the entire domain.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So what content is unique to philosophy, or at least almost unique? The motivation for distinguishing philoinformatics (and any subdiscipline of general informatics) is that there is a different quality of the content that makes it somewhat unique. The content that is almost unique to philoinformatics is the handling of thought experiments, the free use of 'Xian' where X is any philosopher's name, and possibly the modeling of widespread but uniquely philosophical notions like internalist/externalist, foundational/coherentist, objective/subjective, absolute/relative, contingent/necessary. With a proper foundation with terms and links combining these items with to publications and endorsement and rejection statements, we could start computing over philosophical notions to find general properties of philosophical positions such as hidden inconsistencies, distance from evidence, robust multidirectional support and other relations that could potentially be defined in terms of this foundational data. Basically, traction and then real progress may finally be possible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6639337702975571846-2067059464497851215?l=andrewmcknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewmcknight.blogspot.com/feeds/2067059464497851215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6639337702975571846&amp;postID=2067059464497851215' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/2067059464497851215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/2067059464497851215'/><link rel='alternate' type='text/html' href='http://andrewmcknight.blogspot.com/2010/12/philoinformatics-and-categories-of.html' title='Philoinformatics and Categories of Informatics'/><author><name>Andrew McKnight</name><uri>http://www.blogger.com/profile/13364162134437158686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_xoRUcN4SFtc/TQP7bH3Q8lI/AAAAAAAAABM/9CQHzXHIZa8/s72-c/informatics_fan.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6639337702975571846.post-5731837224280578010</id><published>2010-12-08T10:50:00.000-08:00</published><updated>2010-12-14T12:21:53.911-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='map-reduce'/><category scheme='http://www.blogger.com/atom/ns#' term='riak'/><category scheme='http://www.blogger.com/atom/ns#' term='datastore'/><category scheme='http://www.blogger.com/atom/ns#' term='Semantic Web'/><category scheme='http://www.blogger.com/atom/ns#' term='sparql'/><category scheme='http://www.blogger.com/atom/ns#' term='graph datastore'/><category scheme='http://www.blogger.com/atom/ns#' term='informatics'/><category scheme='http://www.blogger.com/atom/ns#' term='graph'/><category scheme='http://www.blogger.com/atom/ns#' term='triplestore'/><title type='text'>Sparql on Riak</title><content type='html'>&lt;b&gt;Graph Data Stores&lt;/b&gt;&lt;br /&gt;There are generally two different goals people have in mind when using &lt;a href="http://en.wikipedia.org/wiki/Graph_database#Graph_database_projects"&gt;graph data stores&lt;/a&gt;.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;i&gt;Graph-walking&lt;/i&gt; from node to node, by following edges in the  graph. People usually have social networks or &lt;i&gt;The Social Web&lt;/i&gt; in mind.&lt;/li&gt;&lt;li&gt;&lt;i&gt;Dynamic schema&lt;/i&gt; or schemaless  triplestores. People usually have mass fact databases (aka  "knowledgebases") or &lt;i&gt;The Semantic Web&lt;/i&gt; in mind.&lt;/li&gt;&lt;/ol&gt;But under the covers, these two concerns generally overlap as graph data stores.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://wiki.basho.com/display/RIAK/Riak"&gt;Riak&lt;/a&gt; is a very interesting, open source, homogeneously clustered, document data store. But Riak also supports "links" between documents, which makes it a graph data store as well. These links were designed for the goal of graph-walking. An interesting feature is that this graph-walking is reduced to a series of &lt;a href="http://en.wikipedia.org/wiki/MapReduce"&gt;map-reduce&lt;/a&gt; operations so queries are fulfilled in parallel across the cluster.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SPARQL on Riak&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.w3.org/TR/rdf-sparql-query/"&gt;SPARQL&lt;/a&gt; is a query language that is designed for the triplestores (the 2nd goal) but I see  no reason why you couldn't use it for graph data stores in general, at least in theory. So if you can reduce SPARQL queries down to a Riak queries then you automatically get your SPARQL queries reduced down to map-reduce operations. Riak even supports something similar to SPARQL property paths where you can keep intermediate results while following links, so it might not be too difficult reduce most types of SPARQL queries. One concern I have (after the main concern of whether the reduction is possible) is whether Riak can handle billions of tiny "documents", which would essentially just be URIs unless you wanted to store associated documents with each URI.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Infinitely Scalable Triplestore&lt;/b&gt;&lt;br /&gt;One goal I would like to see achieved is an infinitely scalable triplestore. Or if "infinite" is too strong of a word, let's say a triplestore that can handle an order of magnitude more triples than the &lt;a href="http://esw.w3.org/LargeTripleStores"&gt;biggest triplestores out there&lt;/a&gt;. This SPARQL on Riak proposal might actually be able to pull this off. The query might be unbearably slow, but it should complete reliably even if it takes hours, days, or months. Creating some sort of major plug-in for Apache Hive that handles SPARQL-like queries (Hive currently supports SQL-like queries) might be the more ideal way to build an infinitely scalable distributed triplestore, but doing this would be &lt;i&gt;much&lt;/i&gt; more difficult.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6639337702975571846-5731837224280578010?l=andrewmcknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewmcknight.blogspot.com/feeds/5731837224280578010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6639337702975571846&amp;postID=5731837224280578010' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/5731837224280578010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/5731837224280578010'/><link rel='alternate' type='text/html' href='http://andrewmcknight.blogspot.com/2010/12/sparql-on-riak.html' title='Sparql on Riak'/><author><name>Andrew McKnight</name><uri>http://www.blogger.com/profile/13364162134437158686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6639337702975571846.post-9130396555213666479</id><published>2010-12-07T17:35:00.000-08:00</published><updated>2010-12-14T12:23:42.754-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='consistency'/><category scheme='http://www.blogger.com/atom/ns#' term='datastore'/><category scheme='http://www.blogger.com/atom/ns#' term='CAP-theorem'/><category scheme='http://www.blogger.com/atom/ns#' term='informatics'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed'/><title type='text'>Subjective Consistency</title><content type='html'>I've been researching all kinds of data stores (well, actually relational, key-value, and document data stores) and I've become aware of the interesting constraint on distributed data stores known as &lt;a href="http://www.royans.net/arch/brewers-cap-theorem-on-distributed-systems/"&gt;Brewer's CAP Theorem&lt;/a&gt;. The idea is that you can't have &lt;b&gt;C&lt;/b&gt;onsistency, &lt;b&gt;A&lt;/b&gt;vailability, and &lt;b&gt;P&lt;/b&gt;artition tolerance, simultaneously in any distributed data store. It looks like it's difficult to get &lt;i&gt;complete&lt;/i&gt; consistency on a single node (see: &lt;a href="http://en.wikipedia.org/wiki/Isolation_%28database_systems%29#Isolation_levels"&gt;Isolation Levels&lt;/a&gt;) and it's thought to be impossible to get it on a network scale (because of CAP theorem). This is where "Eventual Consistency" usually comes in, relaxing consistency for availability and partition tolerance.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Interaction-Centric Consistency &lt;/b&gt;&lt;br /&gt;Hopefully I can frame my idea properly now that I've confused you with some terminology. My initial thought was: What kind of guarantees can a data store offer if a single user or application talks to the same node in the network? We could call this a "data session" or an "interaction". It's a kind of &lt;i&gt;network transaction&lt;/i&gt; idea, looser than a data transaction. Anyways, I wonder if&amp;nbsp; you could guarantee a stronger level of consistency by using your distributed network in this way. There might be a way to offer an apparent or &lt;i&gt;subjective temporary consistency&lt;/i&gt;. Ultimately, the idea is that maybe if we make use of the patterns of access we expect from our users, then we won't need strict distributed consistency in the first place for a good number of applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6639337702975571846-9130396555213666479?l=andrewmcknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewmcknight.blogspot.com/feeds/9130396555213666479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6639337702975571846&amp;postID=9130396555213666479' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/9130396555213666479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/9130396555213666479'/><link rel='alternate' type='text/html' href='http://andrewmcknight.blogspot.com/2010/12/types-of-data-consistency.html' title='Subjective Consistency'/><author><name>Andrew McKnight</name><uri>http://www.blogger.com/profile/13364162134437158686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6639337702975571846.post-7222291648685346663</id><published>2010-12-01T13:23:00.000-08:00</published><updated>2010-12-14T12:24:50.391-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web of ontologies'/><category scheme='http://www.blogger.com/atom/ns#' term='Semantic Web'/><category scheme='http://www.blogger.com/atom/ns#' term='informatics'/><category scheme='http://www.blogger.com/atom/ns#' term='ontology design'/><category scheme='http://www.blogger.com/atom/ns#' term='scalability'/><title type='text'>Bridging Ontologies: The Key to Scalable Ontology Design</title><content type='html'>It's been years since I've created an ontology (in the computing/informatics sense) but I'm going to give some advice on creating them anyways. When creating an ontology, it can be helpful to connect it up to other related ontologies. In fact, I think this is a &lt;i&gt;requirement&lt;/i&gt; for building the semantic web (taking 'ontology' in a broad sense). You may want to &lt;i&gt;ground&lt;/i&gt; your ontology (i.e. connect it to more generic or foundational ontologies; towards &lt;a href="http://en.wikipedia.org/wiki/Upper_ontology_%28information_science%29"&gt;upper ontologies&lt;/a&gt;) or connect it to well known ontologies increasing the potential usefulness and adoption of your ontology. Whatever the reason, there are benefits in doing so if you want the data that your ontology schematizes to be more easily and automatically reusable. The potential downside is that you are forcing your users to endorse the ontology you're connecting to. So how exactly should one connect their ontology into the ontology ecosystem?&lt;br /&gt;&lt;br /&gt;Most ontologies out there seem to me to be part of a stack of ontologies built by a single group of people. The ontologies tend to build directly on top of each other, meaning "lower" ontologies &lt;i&gt;directly reference&lt;/i&gt; "upper" ontologies. Since the ontologies are developed by a single organization, it seems to make sense to directly connect to them because the organization (arguably) knows exactly what they are attempting to represent or what they mean. The fact that organizations tend to keep their ontologies rather isolated may be caused by a fear to commit to ontologies they didn't create.&lt;br /&gt;&lt;br /&gt;The way ontologies are (or at least should be) developed allows the possibility for changes and updates. To accommodate this, one should develop ontologies with &lt;i&gt;versioning&lt;/i&gt;. This way, someone using your ontology won't ever have it change on them and the developers can still maintain and change the ontology by introducing new versions. It's as simple as adding a version number to your ontology's url. &lt;br /&gt;&lt;br /&gt;But this brings up the problem we face by directly referencing other ontologies. Let's imagine you have an ontology X that makes reference to another ontology Y and that ontology Y has a newer version available. You're planning on updating a term in X to make reference to essentially the same term but in the newer version of Y to keep X up to date. So you update X to the new version of Y even though it basically hasn't changed its meaning. The &lt;i&gt;role&lt;/i&gt; an ontology fulfills is to describe a certain subject or topic and this&lt;i&gt; intrinsic meaning&lt;/i&gt; has not changed. Yet you still need to change your ontology. Under these conditions, no matter how much concensus is formed around the accuracy of your ontology, you will never know when it is stable. In fact, this leads to a cascading of updates and changes required by upstream ontologies that reference your ontology, and so on. This is &lt;i&gt;not&lt;/i&gt; a distributed web-scale ontology design pattern. We need a way to &lt;i&gt;decouple&lt;/i&gt; our ontologies. &lt;br /&gt;&lt;br /&gt;So, is there a design pattern we can use to avoid these dangers and burdens of connecting to other ontologies? Can we do better than simply identifying good stable ontologies and directly referencing only those ontologies in our own ontology? Yes!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Introducing: Content vs Bridging Ontologies&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The key to &lt;i&gt;scalable &lt;/i&gt;ontology design is what I call Bridging Ontologies. You write your intended ontology without referencing other ontologies and then create a separate ontology that is mainly made up of owl:sameAs and rdfs:subClassOf relationships between your terms and the target ontology's terms. I call these ontologies Content Ontologies and Bridging Ontologies, respectively. You only need to update your Bridging Ontology when either the source or target ontology changes. The nature of a Bridging Ontology makes it useless for anyone to reference in their own ontologies, which stops any potential cascade of changes throughout the web of ontologies. Of course users would still need to use the Bridging Ontologies and would likely need to collapse/deflate the owl:sameAs relationships into single terms for most visualizing, processing, or reasoning purposes.&lt;br /&gt;&lt;br /&gt;I'll go out on a limb here and say that &lt;i&gt;every&lt;/i&gt; ontology anyone creates should be isolated in this manner. The vision then becomes a web of ontologies of small Content Ontology &lt;i&gt;nodes&lt;/i&gt; that satisfy specific "semantic roles" and then Bridging Ontology &lt;i&gt;edges&lt;/i&gt; definied between these Content Ontologies. Since you don't need to adopt all of the Bridging Ontologies that are built for a Content Ontology, it is much easier to reach concensus on the Content Ontologies and then to pick and choose your Bridging Ontologies, choosing to commit (or not) to exactly how that content fits into the big picture. This allows for &lt;i&gt;decoupled&lt;/i&gt; semantics rather than traditional inflexible semantics.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6639337702975571846-7222291648685346663?l=andrewmcknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewmcknight.blogspot.com/feeds/7222291648685346663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6639337702975571846&amp;postID=7222291648685346663' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/7222291648685346663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/7222291648685346663'/><link rel='alternate' type='text/html' href='http://andrewmcknight.blogspot.com/2010/12/bridging-ontologies-key-to-scalable.html' title='Bridging Ontologies: The Key to Scalable Ontology Design'/><author><name>Andrew McKnight</name><uri>http://www.blogger.com/profile/13364162134437158686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6639337702975571846.post-3044199318791093082</id><published>2010-11-30T19:07:00.000-08:00</published><updated>2010-12-14T12:24:32.613-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='informatics'/><title type='text'>The Universal Model</title><content type='html'>Imagine a computer model of the universe. The past, the present, the future, every event that has or will ever occur. This is &lt;b&gt;The Universal Model&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Clearly there would be some major limitations on the quality this model. You can't have a &lt;i&gt;perfect&lt;/i&gt; model of the present stored in the present (not to mention storing the past 13.7 billion years or the next googols of years predicted by our current best cosmological theories). What I have in mind is a kind of massive service where you can ask for information about the universe and retrieve those answers if they are available. The Universal Model is an &lt;i&gt;abstract&lt;/i&gt; model that is, at best, partly built, as needed, in order to fulfill a query about it.&lt;br /&gt;&lt;br /&gt;Let me try to flesh the idea out a little more. Imagine any system that needs to "answer a question" of some sort. Maybe you're typing a question into a search box. Maybe you're "asking" Google Earth to display a useful image of downtown Seattle. Maybe you're checking the weather for next weekend. Now, imagine a system that can &lt;i&gt;fulfill&lt;/i&gt; the query in terms of questions about the way the universe is, plus some processing. In other words, imagine converting or compiling down the question into explicit questions about the universe. For Google Earth this could amount to rendering the image of what would be seen from a specific point and orientation above Seattle, right now. For the weather, you need to look at the 4D volume of space above the location you're at and from Saturday morning until Sunday evening. You'd then need to process the physical description to extract the amount of cloud and rain that's present, and then convert that into a label saying "sunny" or "partly cloudy" based on the context.&lt;br /&gt;&lt;br /&gt;Now, again, since we can't store the whole universe, we need methods to fulfill the queries about The Universal Model. This could be done in a number of ways. If only a small subsection of the model is required, which would be the case in the vast majority of queries, then you could invoke specialized services designed to answer queries of that type. Queries about the nature of the weather on the weekend could be fulfilled by invoking weather models, for example.&lt;br /&gt;&lt;br /&gt;Consider an analogy. When one wants to automatically translate a document from one language to another, one method would be to build a language-agnostic conceptual representation of the meaning expressed by the sentence and then to express that conceptualization in the other language. This solution would be extremely powerful because it preserves all relevant information and is scalable. (For any new language, you only need to be able to map it to The Language Model and then express that, in any language you want.) The downside of this approach is that we haven't been able to achieve any kind of mapping like this, partly because we don't know exactly what The Language Model would look like and because language is very context-dependent. Instead we build lower level representations, but not as "low" as The Language Model and then take a shortcut &lt;i&gt;on that level of representation&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;This is what would need to be done with The Universal Model as well. We take shortcuts while "translating" our query into an answer. This is a general problem for &lt;i&gt;any&lt;/i&gt; sort of "conversion".&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_xoRUcN4SFtc/TPW2L5__kXI/AAAAAAAAABI/FeJ5HLTX63k/s1600/problem_resolution_model2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="201" src="http://3.bp.blogspot.com/_xoRUcN4SFtc/TPW2L5__kXI/AAAAAAAAABI/FeJ5HLTX63k/s400/problem_resolution_model2.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;(Forgive the MS Paint). The boxes are representations of queries (red) and answers (green). As you get lower in layers, the representations are more abstract, more powerful, and more fully answerable. Each arrow is a conversion. The horizontal arrows are hacky conversions that skip the lower more ideal, powerful, but unobtainable layers and conversions. For both ideal models, we get as close as we can to the ideal, so that we can use "hacks" and shortcuts and ingenious tricks to jump to the other side of the gap. For the NLP example, the top layer could start with a document in spanish and end with a document in english. The bottom layer would be The Language Model.&lt;br /&gt;&lt;br /&gt;If, like me, you believe that all propositions are &lt;i&gt;made&lt;/i&gt; true or false by the universe, then in the case of The Universal Model, the top layer would be &lt;i&gt;any coherent question&lt;/i&gt;. So even our idealistic Language Model could be seen as a special case "hack", albeit at one of the lower levels of this hypothetical universal question answering device, that has The Universal Model at the bottom. &lt;i&gt;The Universal Model is the most ideal model possible&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;That's the idea anyways; I'm not sure it fully holds up; Take it with a grain of salt; etc; etc.&lt;br /&gt;I wanted to get the idea out there rather than dwell on it too much and then end up not posting anything. Please comment and refine and clarify the idea further for me if you find it interesting!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6639337702975571846-3044199318791093082?l=andrewmcknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewmcknight.blogspot.com/feeds/3044199318791093082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6639337702975571846&amp;postID=3044199318791093082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/3044199318791093082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/3044199318791093082'/><link rel='alternate' type='text/html' href='http://andrewmcknight.blogspot.com/2010/11/universal-model.html' title='The Universal Model'/><author><name>Andrew McKnight</name><uri>http://www.blogger.com/profile/13364162134437158686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_xoRUcN4SFtc/TPW2L5__kXI/AAAAAAAAABI/FeJ5HLTX63k/s72-c/problem_resolution_model2.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6639337702975571846.post-439920522438475995</id><published>2010-10-09T17:13:00.000-07:00</published><updated>2010-12-14T12:17:06.652-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='dbslayer'/><category scheme='http://www.blogger.com/atom/ns#' term='vm'/><category scheme='http://www.blogger.com/atom/ns#' term='node.js'/><category scheme='http://www.blogger.com/atom/ns#' term='installation'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='json-template'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><title type='text'>Installing Node.js + DBSlayer on Windows using VirtualBox</title><content type='html'>Recently I've been interested in the idea of using server-side javascript because:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;I've  recently been introduced to jQuery which is an insanely powerful  improvement over the javascript I became familiar with in highschool...  like 10 years ago.&lt;/li&gt;&lt;li&gt;The idea that I can use my (MVC) Model on the server &lt;i&gt;and&lt;/i&gt;  client side seems pretty elegant. I'd be able to send objects back and  forth using AJAX without having two different implementations of the  objects.&lt;/li&gt;&lt;li&gt;The server-side javascript project that sparked my interest, &lt;a href="http://nodejs.org/"&gt;node.js&lt;/a&gt;,  just looks so easy. Building a web service should take no time at all  and deploying the web service looks even easier. You just call:&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;node myjavascriptfile.js&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;Also, using &lt;a href="http://code.nytimes.com/projects/dbslayer"&gt;DBSlayer&lt;/a&gt; as a JSON encoded HTTP wrapping of MySQL and using &lt;a href="http://json-template.googlecode.com/svn/trunk/doc/Introducing-JSON-Template.html"&gt;JSON-Template&lt;/a&gt; for building the View, I can have &lt;i&gt;all&lt;/i&gt; serialization done in JSON and &lt;i&gt;all&lt;/i&gt; communication over HTTP. Since the templating is uses JSON then there's potential for simply binding services to templates without &lt;i&gt;any&lt;/i&gt; transformation required whatsoever. There is also a node.js plugin to make  DBSlayer super simple to use with node.js. I haven't actually used any  of these peices before, but they all seem to fit together so well that I  thought I'd give it a shot.&lt;br /&gt;Unfortunately, installing all  of this was more difficult than I had hoped for, especially because I'm  developing on a Windows XP laptop and node.js currently only works in  Linux. Fortunately, there are two tutorials that have been written for  this exact situation, one for &lt;a href="http://qfox.nl/notes/98"&gt;getting node.js onto an Ubuntu VM&lt;/a&gt; and another for &lt;a href="http://qfox.nl/notes/101"&gt;installing DBSlayer on that same VM&lt;/a&gt;.  But though these tutorials are pretty good, they didn't work perfectly  for me. I'll go over the problems I ran into along the way in hopes that  someone (possibly my future self) can benefit from the added tips.&lt;br /&gt;&lt;br /&gt;A  quick note: I'm relatively new to VirtualBox so I made one awkward  mistake that must be quite common. I left my virtual Ubuntu installation  CD in my virtual CD drive! If it looks like your virtual drive is not  being fully used and it says your 3.1GB drive is full when you have a  bigger than 3.1G drive then you've probably made a similar mistake. Took  me 2 hours to figure that one out. I guess I should consider myself  lucky.&lt;br /&gt;&lt;br /&gt;The first problem with the first tutorial that I  ran into involved OpenSSL. Along with the other few apt-get installs I  needed to do a&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;sudo apt-get install libssl-dev&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When  validating my node.js install using the helloworld.js described in the  first tutorial, the script didn't work. The error I saw was:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/home/amcknight/node/helloworld.js:4&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;res.sendHeader(200, {'Content-Type': 'text/html'});&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     ^&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;TypeError: Object #&amp;lt;a ServerResponse&amp;gt; has no method 'sendHeader'&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; at Server.&lt;anonymous&gt; (/home/amcknight/node/helloworld.js:4:6)&lt;/anonymous&gt;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;    at Server.emit (events:27:15)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;    at HTTPParser.onIncoming (http:885:14)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;    at HTTPParser.onHeadersComplete (http:88:31)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;    at Stream.ondata (http:806:22)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;    at IOWatcher.callback (net:499:29)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;    at node.js:604:9&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Instead I used the first hello world code shown on the &lt;a href="http://www.nodejs.org/"&gt;node.js front page&lt;/a&gt; and everything worked out fine.&lt;br /&gt;&lt;br /&gt;As for the second part of the tutorial for installing dbslayer, I recommend running&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;sudo apt-get update&lt;/span&gt;&lt;/div&gt;first to avoid any errors.&lt;br /&gt;The error I was getting involved not being able to find a &lt;span style="font-family: Arial,Helvetica,sans-serif; font-size: x-small;"&gt;libapr-1.so.0&lt;/span&gt;  file. I'm not sure what exactly resolved this problem for me but I  eventually started over (and found those two tutorials) and the only  difference I can think of is that I used the apt-get update command and  installed libssl-dev the second time around. So unfortunately I can't  pinpoint the cause, but if it ever happens to me again I'll post a  comment about it (or you can).&lt;br /&gt;&lt;br /&gt;Other than that, the tutorial should work fine if you fingers are tightly crossed.&lt;br /&gt;&lt;br /&gt;Ultimately,  these are the relevant commands I ran, in order, and not including the  validation steps that are explained on the two tutorial pages. From a  clean install of Ubuntu 10.04, taking the steps below should get you up  and running.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo apt-get install g++&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo apt-get install git-core&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;git clone git://github.com/ry/node.git&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo apt-get install libssl-dev&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;cd node&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;./configure&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;make&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo make install&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;cd ..&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo apt-get install subversion&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;svn co http://www.dbslayer.org/svn/dbslayer/trunk &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;dbslayer&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo apt-get update&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo apt-get install libapr1-dev&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo apt-get install libaprutil1-dev&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo apt-get install libmysqlclient-dev&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;cd dbslayer&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;./configure&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;make&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo make install&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sudo apt-get install mysql-server&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;dbslayer -s localhost -u root -x YOUR_PASSWORD -c void&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6639337702975571846-439920522438475995?l=andrewmcknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewmcknight.blogspot.com/feeds/439920522438475995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6639337702975571846&amp;postID=439920522438475995' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/439920522438475995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/439920522438475995'/><link rel='alternate' type='text/html' href='http://andrewmcknight.blogspot.com/2010/10/installing-nodejs-dbslayer-on-windows.html' title='Installing Node.js + DBSlayer on Windows using VirtualBox'/><author><name>Andrew McKnight</name><uri>http://www.blogger.com/profile/13364162134437158686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6639337702975571846.post-2918493308502302189</id><published>2010-07-17T14:39:00.000-07:00</published><updated>2010-12-14T12:25:10.428-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='informatics'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='metaphilosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='philoinformatics'/><title type='text'>Philoinformatics Manifesto</title><content type='html'>I wrote this draft philoinformatics "manifesto" in April and have been meaning to polish it up and post it.&lt;br /&gt;&lt;br /&gt;Yeah... it's July now.&lt;br /&gt;&lt;br /&gt;I still intend to clean it up, but I  decided to post my draft, as is, just to get it out there for now. Call it the beta version... actually more like alpha. All comments very welcome at this point.&lt;br /&gt;&lt;br /&gt;Philoinformatics is a scientific, philosophical, and most of all an engineering discipline with the single goal of radically enhancing philosophy using information systems. If you're thinking about Artificial Intelligence that does philosophy for us then you've got the wrong (but awesome) idea. I'm talking about philosophy being done by people, but being done better, with the whole philosophical process being enhanced from end to end with helpful software made possible by underlying information systems.&lt;br /&gt;&lt;br /&gt;We all need to recognize that philosophy as a discipline is devastatingly problematic and requires new life. Philosophy is known to lack proper resolution to patently philosophical problems and is fraught with pervasive disagreement among its experts, among other major problems. Just consider the thousands of man-years of thought put into the Free Will and Determinism topic, for example. Many philosophers do recognize that these and other problems exist and even usually spend some time thinking about them and/or joking about them, but also essentially practice a kind of denial about there existence. Maybe it's because doing philosophy still feels important and individual philosophers are making personal progress in the sense that they are acquiring and refining their own philosophical concepts. Philosophy is a slow and difficult process and philosophers are wasting the vast majority of their time doing what I believe they themselves would agree is a waste of their time if they only had a better way to view the actual landscape of philosophy; the landscape of the content of philosophy.&lt;br /&gt;&lt;br /&gt;Despite this heavily pessimistic view of philosophy, I am not advocating for Skeptical Metaphilosophy, the view that philosophy does not have intrinsic value. I also, of course, don't claim to be able to reliably recognize when I or anyone else is specifically wasting their time doing philosophy. What I am advocating is that we build the systems required to show whether there is, where there is, and when there is valuable philosophy to be done. After thousands of years of philosophers spinning their wheels on philosophical problems, I think it's fair to suggest that some focus needs to be put into novel methods for making discipline-wide progress. For those that are able, instead of spending time refining one's own philosophical positions and attempting to make personal philosophical progress, I advocate putting some work into progress for the discipline as a whole.&lt;br /&gt;&lt;br /&gt;Speaking of traction, actually imagine a wheel spinning on a road. The wheel spinning is the effort of philosophers and the forward motion is the progress of philosophy. If philosophy isn't making progress because of the nature of the content of philosophy (e.g. "words on holiday" or some other confusion) then that means our wheel is slippery, the problem is intrinsic. If instead philosophy isn't making progress because of the way philosophy is done or the current environment of philosophy (e.g. pervasive repetition of ideas or high barrier to entry for publishing or unknown status of philosophical positions) then that means our road is to slippery, the problem is extrinsic. For progress we need traction, for traction we need both the wheel and the road to have grip. Skeptical Metaphilosophy is the view that our wheel can't be made grippy. Naturalism could be construed as the view that scientifically supported positions are are the only grippy parts of the wheel. Both are about the wheel, philosophy itself. Philoinformatics is an attempt to give the road grip. Set up an environment where philosophy can make all the traction it possibly can. Of course, the wheel could be incurably slippery and giving the road grip won't help, but at least now you know where the grip is missing. In other words, Philoinformatics at bare minimum can provide evidence for or against Skeptical Metaphilosophy.&lt;br /&gt;&lt;br /&gt;Philoinformatics is an attempt to face the problems of philosophy head on by building mechanisms for helping people understanding the actual landscape of philosophy. Actually, I intend Philoinformatics to be more general than what I've been advocating. Here's the more general form:&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 1) Identify Symptoms&lt;br /&gt;&amp;nbsp; 2) Identify underlying qualities giving rise to the symptoms&lt;br /&gt;&amp;nbsp; 3) Design Systems to modify that quality of philosophy&lt;br /&gt;&amp;nbsp; 4) Develop the Systems&lt;br /&gt;&lt;br /&gt;As simple as these steps may sound, all four of these steps are quite difficult. You might also notice that despite what I started out saying, Philoinformatics doesn't necessarily need to radically enhance philosophy. Any enhancement will do and would count as work in philoinformatics. But I stand by the "radically" part of the goal because I think philosophy requires radical enhancement and I hope philoinformatics is an avenue for getting us there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6639337702975571846-2918493308502302189?l=andrewmcknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewmcknight.blogspot.com/feeds/2918493308502302189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6639337702975571846&amp;postID=2918493308502302189' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/2918493308502302189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/2918493308502302189'/><link rel='alternate' type='text/html' href='http://andrewmcknight.blogspot.com/2010/07/philoinformatics-manifesto.html' title='Philoinformatics Manifesto'/><author><name>Andrew McKnight</name><uri>http://www.blogger.com/profile/13364162134437158686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6639337702975571846.post-4815084371063823938</id><published>2010-03-23T17:26:00.000-07:00</published><updated>2010-08-11T08:59:47.597-07:00</updated><title type='text'>Philoinformatics</title><content type='html'>I've gone ahead and impulsively bought &lt;a href="http://philoinformatics.com/"&gt;philoinformatics.com&lt;/a&gt; on a surge of possibly-too-much-coffee and currently just have this blog as the main and only page. I renamed the blog to match, at least for now, and intend to keep the blog rolling probably under philoinformatics.com/blog when I get a main page set up. I'm planning on doing some writing for at least the next month or so in order to put together an enticing philoinformatics manifesto/vision (edit: &lt;a href="http://andrewmcknight.blogspot.com/2010/07/philoinformatics-manifesto.html"&gt;draft&lt;/a&gt;) that will hopefully inspire a small community into forming around the idea of enhancing philosophy by building new software. Stay tuned!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6639337702975571846-4815084371063823938?l=andrewmcknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewmcknight.blogspot.com/feeds/4815084371063823938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6639337702975571846&amp;postID=4815084371063823938' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/4815084371063823938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/4815084371063823938'/><link rel='alternate' type='text/html' href='http://andrewmcknight.blogspot.com/2010/03/philoinformatics.html' title='Philoinformatics'/><author><name>Andrew McKnight</name><uri>http://www.blogger.com/profile/13364162134437158686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6639337702975571846.post-5628837380900674904</id><published>2010-03-15T15:07:00.000-07:00</published><updated>2010-03-15T15:07:29.854-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OWL'/><category scheme='http://www.blogger.com/atom/ns#' term='Semantic Web'/><category scheme='http://www.blogger.com/atom/ns#' term='CSML'/><category scheme='http://www.blogger.com/atom/ns#' term='interdisciplinary'/><category scheme='http://www.blogger.com/atom/ns#' term='Granularity'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='Conceptual Space'/><title type='text'>Conceptual Space Markup Language (CSML)</title><content type='html'>&lt;span style="font-family: Georgia;"&gt;&lt;/span&gt;&lt;span style="font-family: Times; font-size: 10pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;      &lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Georgia;"&gt;I've recently come across a great paper by Benjamin Adams and Martin Raubal called &lt;i&gt;Conceptual Space Markup Language (CSML): Towards the Cognitive Semantic Web&lt;/i&gt;. I found their paper interesting on many levels because it lies at the nexus of many rather diverse topics that I’m interested in. CSML directly involves Computational Geometry and the Semantic Web, but indirectly involves the philosophy of meaning, mind, and color. Also, as it grows in popularity, I believe force-based organizational algorithms and neural networks will become a heavily used mechanism for generating and using CSML data. Basically, CSML takes Conceptual Spaces, which are already at an interesting intersection of multiple mind sciences and multiple strands of philosophy, and connects it with multiple threads of engineering and informatics.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Georgia;"&gt;Wait.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Georgia;"&gt;&lt;b&gt;What are Conceptual Spaces?&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;span style="font-family: Georgia;"&gt;Conceptual Spaces are multidimensional spaces made up of &lt;i&gt;quality dimensions&lt;/i&gt;. Quality dimensions are basically just any property you can think of that has a (pseudo-) continuous range of values. Think: size, mass, brightness, beauty, craziness, unicornity or anything else that you think you can make sense of on some sort of numerical range. You can now consider points and (convex) shapes within your set of quality dimensions, which will correspond to concepts. Consider the classic-cool-colour-cone example to the lower right. That’s a representation of a conceptual space with quality dimensions of hue, value, and saturation.&lt;o:p&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;a href="http://4.bp.blogspot.com/_xoRUcN4SFtc/S56oNsqlCZI/AAAAAAAAAAM/X6cpW-U0YOw/s1600-h/colorCone.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/_xoRUcN4SFtc/S56oNsqlCZI/AAAAAAAAAAM/X6cpW-U0YOw/s200/colorCone.png" width="187" /&gt;&lt;/a&gt;&lt;span style="font-family: Georgia;"&gt;But this isn’t just a fancy mathematical model. Structures like this are in some sense actually “held” by neurons in your brain. You may have heard people talk about "levels of reality" (or "levels of description of reality") such as the physical level, biological level, psychological level, sociological level, etc. Well, the idea is that when you look into the brain, which is (of course) very complex, you can look at it "at different levels" (presumably of granularity in this case). Conceptual Spaces are one of those lesser-known but very useful levels between the neuronal level and the psychological level (and below the symbolic level if you think there is one). Other people have much more comprehensive and informative explanations that I’m not going to try to repeat here. If you’re interested in the multitude of potential philosophical implications check out Paul Chruchland’s &lt;i&gt;State-Space Semantics and Meaning Holism&lt;/i&gt;. (He’s also got some good stuff to say about colors &lt;i&gt;outside&lt;/i&gt; of the classic-cool-color-cone &lt;a href="http://web.gc.cuny.edu/cogsci/private/Churchland-chimeric-colors.pdf"&gt;here&lt;/a&gt;.)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;CSML describes Conceptual Spaces&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Georgia;"&gt;CSML, the Conceptual Space Markup Language, is an XML serialization of conceptual spaces. CSML brings a whole new &lt;i&gt;engineering&lt;/i&gt; dimension to conceptual spaces which fits into the realm of Semantic Web technologies and is actually analogous to OWL, but with radically different implications. In my previous post, which was actually written in June 2008, I dreamed of a “smooth semantic web” that didn’t &lt;i&gt;always&lt;/i&gt; require rigid categorization. CSML looks like a better candidate to handle that kind of data. CSML is specifically designed to handle context-dependent meaning and (relative) similarity of concepts, which are both difficult to handle in OWL. (How would you represent a large squirrel and a tiny planet consistently? What about brightness, beauty, craziness, and unicorniness?) After trying to use a few units ontologies for measurement data (at iCAPTURE for &lt;a href="http://www.icapture.ubc.ca/who/who_mark_wilkinson.shtml"&gt;Mark Wilkinson&lt;/a&gt;) I also have high hopes that CSML can help simplify the problems on that front.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Georgia;"&gt;The most exciting part for me is that conceptual spaces lend themselves to fancy techniques for being automatically generated by way of artificial neural networks and force-based organizational algorithms, which brings in a few more of the theoretical engineering topics I’ve been interested in over the years. Starting with similarity data, force-based (or tension reduction) algorithms could help &lt;i&gt;identify&lt;/i&gt; quality dimensions. Neural networks can nicely &lt;i&gt;use&lt;/i&gt; quality dimension coordinates as input and also learn to &lt;i&gt;precisely place&lt;/i&gt; items into conceptual spaces. I can’t wait to see the tools that will be created to allow for generating, reasoning over, and visualizing CSML data and how they will integrate with existing semantic web technologies and machine learning techniques.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6639337702975571846-5628837380900674904?l=andrewmcknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewmcknight.blogspot.com/feeds/5628837380900674904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6639337702975571846&amp;postID=5628837380900674904' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/5628837380900674904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/5628837380900674904'/><link rel='alternate' type='text/html' href='http://andrewmcknight.blogspot.com/2010/03/conceptual-space-markup-language-csml.html' title='Conceptual Space Markup Language (CSML)'/><author><name>Andrew McKnight</name><uri>http://www.blogger.com/profile/13364162134437158686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_xoRUcN4SFtc/S56oNsqlCZI/AAAAAAAAAAM/X6cpW-U0YOw/s72-c/colorCone.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6639337702975571846.post-7350601687454164851</id><published>2010-03-13T15:54:00.000-08:00</published><updated>2010-12-14T12:20:38.226-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OWL'/><category scheme='http://www.blogger.com/atom/ns#' term='vision'/><category scheme='http://www.blogger.com/atom/ns#' term='Semantic Web'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='Data'/><category scheme='http://www.blogger.com/atom/ns#' term='categorization'/><title type='text'>Towards a Smooth Semantic Web</title><content type='html'>This is an almost complete draft I wrote almost 2 years ago. I thought I should publish it because it is basically complete, and because my next post will be about the new language and technologies that will make the "smooth semantic web"&amp;nbsp; a reality. And for the record, 'smooth semantic web' was a provisional name to be changed before publishing.&lt;br /&gt;Here it is:&lt;br /&gt;&lt;br /&gt;The Semantic Web is slowly building up and will eventually grow to a critical mass where it will become useful. How useful is another question. Will it revolutionize the web? Web 3.0? Maybe. Maybe not. But it will definitely have a use and an effect. The current standards such as RDF, OWL, SWRL, SPARQL, and SKOS are good, and still have a ton of potential that is growing exponentially as we speak. But these standards are not enough. OWL and SKOS can only capture so much knowledge. They can capture crystalized categorizations of well defined concepts. But much, if not the vast majority, of knowledge is not found in strict categorization and necessary relationships. So what is missing?&lt;br /&gt;&lt;br /&gt;People have made attempts to extend OWL in a few different ways to make it cover a wider range of statable knowledge. People have looked into adding probability, non-monotonicty (time), belief. I propose a different addition which, if adopted, would add a prior layer to OWL, just as the above attempts do.&lt;br /&gt;&lt;br /&gt;Consider a music ontology. OWL can support certain relationships such as: Rock ISA Genre, Track isPublishedOn CD, etc. But the certain pieces of knowledge cannot be represented because they haven't been crystallized to the point of being definable, especially when you consider the categorization of instances. Imagine the daunting task of deciding whether certain border line songs count as belonging to a specific genre. But consider the task (still daunting, but not as much) of deciding whether a song is "better classified as Rock than Rap" for instance. It may be difficult to say that a song &lt;i&gt;is&lt;/i&gt; Rock, or &lt;i&gt;is&lt;/i&gt; Rap, but it may be clear which one it is closer to. Much more can be said.&lt;br /&gt;&lt;br /&gt;Notice that we are not talking about probabilities here. It isn't semantically correct to say that a song is "more likely" categorized as Rock than Rap. We are saying that &lt;i&gt;if&lt;/i&gt; we were to categorize it as either Rock or Rap, it would be better categorized as Rock than Rap.&lt;br /&gt;&lt;br /&gt;You may be wondering what the criterion for "better" is or should be. This itself should be represented within a knowledgebase.&lt;br /&gt;&lt;br /&gt;So how would we use this knowledge? SWRL and SPARQL can only handle deductive reasoning, so they won't help. There are two options, the way I see it. Take my smooth knowledge and use some kind of classifying step to derive a regular rigid knowledgebase. The other option is to invent smooth reasoners. I think vector space representations and abduction would be important for this step.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6639337702975571846-7350601687454164851?l=andrewmcknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewmcknight.blogspot.com/feeds/7350601687454164851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6639337702975571846&amp;postID=7350601687454164851' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/7350601687454164851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/7350601687454164851'/><link rel='alternate' type='text/html' href='http://andrewmcknight.blogspot.com/2010/03/towards-smooth-semantic-web.html' title='Towards a Smooth Semantic Web'/><author><name>Andrew McKnight</name><uri>http://www.blogger.com/profile/13364162134437158686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6639337702975571846.post-1369481645639981232</id><published>2010-02-14T16:33:00.000-08:00</published><updated>2010-02-14T16:38:20.834-08:00</updated><title type='text'>Reviving this blog!</title><content type='html'>I haven't been blogging for about 18 months and I've decided to give it another shot. So if anyone's following (doubtful at this point) expect a post at least every two weeks or so. I'm hoping to document my attempts at getting into grad schools, engineering tips and tricks I've found, interesting philosophy papers, and odds and ends and ideas that I come across from now on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6639337702975571846-1369481645639981232?l=andrewmcknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewmcknight.blogspot.com/feeds/1369481645639981232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6639337702975571846&amp;postID=1369481645639981232' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/1369481645639981232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/1369481645639981232'/><link rel='alternate' type='text/html' href='http://andrewmcknight.blogspot.com/2010/02/reviving-this-blog.html' title='Reviving this blog!'/><author><name>Andrew McKnight</name><uri>http://www.blogger.com/profile/13364162134437158686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6639337702975571846.post-5691436025706574909</id><published>2008-08-05T20:45:00.001-07:00</published><updated>2008-08-06T21:33:16.103-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Semantic Web'/><category scheme='http://www.blogger.com/atom/ns#' term='recommender'/><category scheme='http://www.blogger.com/atom/ns#' term='Work'/><category scheme='http://www.blogger.com/atom/ns#' term='Data'/><title type='text'>Large and Small Controlled Vocabularies</title><content type='html'>I've been thinking about something to make using a project called &lt;a href="http://www.entitydescriber.org/"&gt;Entity Describer&lt;/a&gt; (ED) that my co-workers have been working on. I thought, and still think, I should make a recommender because ED should contain better tag data than basically all other tag sets because the tags are taken as a &lt;a href="http://http//en.wikipedia.org/wiki/Controlled_vocabulary"&gt;controlled vocabulary&lt;/a&gt; from &lt;a href="http://www.freebase.com/"&gt;Freebase&lt;/a&gt;. A controlled vocabulary gives you spelling correction and possibly disambiguation, but because the tags are from Freebase, ED also has a &lt;span style="font-style: italic;"&gt;very&lt;/span&gt; large user generated vocabulary, and connections between the tags (aka semantics). But I realized that the tag data generated by ED doesn't contain information about what the users like and dislike (as of July 2008), though you could guess that most users tag things they like much more often than things they dislike.&lt;br /&gt;&lt;br /&gt;Fortunately, ED will soon allow you to choose which vocabulary you would like to use if Freebase topics aren't right for your tagging needs. So I thought I would create a few vocabularies including:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Thumbs up and down&lt;/li&gt;&lt;li&gt;Agree/Disagree (more concrete, but less usable than thumbs)&lt;/li&gt;&lt;li&gt;Consistent, Valid, Sound, Straw Man, etc (for arguments, and maybe good for philosophy papers)&lt;/li&gt;&lt;li&gt;Stars (0 or 1) to (4, 5, or 10) seems popular&lt;/li&gt;&lt;li&gt;"Effects on mentality" like frightening, enlightening, and annoying (kind of like &lt;a href="http://www.ted.com/talks"&gt;TED talk&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/a&gt; ratings)&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Emotions (similar to effects on mentality)&lt;br /&gt;or my personal favourite&lt;/li&gt;&lt;li&gt;"like this", "want people to see this", "want to see more like this", "agree with this", and the inverses (a small set of reasons I've used thumbs up or thumbs down with the &lt;a href="http://www.mozilla.com/firefox/"&gt;Firefox &lt;/a&gt;&lt;a href="http://www.stumbleupon.com/"&gt;StumbleUpon&lt;/a&gt; &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/138"&gt;add-on&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I could create these vocabularies, but why not add them to Freebase and let people use them from there? This got me thinking about something more general.&lt;br /&gt;&lt;br /&gt;One great reason to use Freebase for tags is that there are so many. But when trying to use the tag data to make (say) a recommender, the user may not have found their ideal tags to use. So what a person actually felt about something slightly differs from what they expressed through tagging it. This doesn't happen with a sufficiently small vocabulary. You know that the user found the best description they could, but then they may not have been able to express themselves with the limited vocabulary. So, either way, big or small vocabulary, tags may not be reflecting what the user has in mind.&lt;br /&gt;&lt;br /&gt;There are definitely ways to alleviate this problem, and the best size totally depends on exactly how and what your users are tagging. I think the above small vocabularies would all work better &lt;span style="font-style: italic;"&gt;outside&lt;/span&gt; of Freebase, but tags describing the subject of a website work better &lt;span style="font-style: italic;"&gt;within&lt;/span&gt; Freebase. What do you think? How significant is this problem? When is this problem most significant? Do you think a vocabulary of content types (i.e. Blog, Video, News, Article, Game, etc) is better inside or outside of Freebase?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6639337702975571846-5691436025706574909?l=andrewmcknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewmcknight.blogspot.com/feeds/5691436025706574909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6639337702975571846&amp;postID=5691436025706574909' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/5691436025706574909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/5691436025706574909'/><link rel='alternate' type='text/html' href='http://andrewmcknight.blogspot.com/2008/08/large-and-small-controlled-vocabularies.html' title='Large and Small Controlled Vocabularies'/><author><name>Andrew McKnight</name><uri>http://www.blogger.com/profile/13364162134437158686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6639337702975571846.post-3892590376748989151</id><published>2008-07-25T16:31:00.000-07:00</published><updated>2008-07-25T16:41:53.944-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='school'/><category scheme='http://www.blogger.com/atom/ns#' term='essay'/><title type='text'>Putting my old philosophy papers online</title><content type='html'>I'm going to gather all the old philosophy papers I've written over the years, which isn't very many, and post them with my current opinions of the papers. I don't know how useful or interesting this will be, but it might be fun.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6639337702975571846-3892590376748989151?l=andrewmcknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewmcknight.blogspot.com/feeds/3892590376748989151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6639337702975571846&amp;postID=3892590376748989151' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/3892590376748989151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/3892590376748989151'/><link rel='alternate' type='text/html' href='http://andrewmcknight.blogspot.com/2008/07/putting-my-old-philosophy-papers-online.html' title='Putting my old philosophy papers online'/><author><name>Andrew McKnight</name><uri>http://www.blogger.com/profile/13364162134437158686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6639337702975571846.post-5340923967859316104</id><published>2008-07-16T14:34:00.000-07:00</published><updated>2008-07-16T14:56:52.668-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Semantic Web'/><category scheme='http://www.blogger.com/atom/ns#' term='Trust'/><category scheme='http://www.blogger.com/atom/ns#' term='Work'/><title type='text'>Types of "trust" needed in semantic web</title><content type='html'>Anyone (or anything) can potentially publish RDF data. In order to know whether you should use their data, there are many issues of trust. There are (at least) two important categories of trust when it comes to the semantic web.&lt;br /&gt;&lt;br /&gt;1) Personal Trust&lt;br /&gt;Personal trust amounts to trusting that the creator of the data has the right motives. Spam is a good example. This kind of trust will become more important as the semantic web grows, but isn't a major problem yet.&lt;br /&gt;&lt;br /&gt;2) Reliability Trust&lt;br /&gt;Being able to trust data found on the semantic web requires knowing how reliable the data is. Was it created by experts? Is there a peer review mechanism? Was it created by automatic natural language processing? Currently this kind of trust is also not too important, but I believe it will become very important much faster than personal trust. We already know how to solve the reliability trust issues, with more metadata. We will need data about how the data was generated. (Note that implementing this allows more options for lying about data, and so doesn't really help with personal trust issues).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6639337702975571846-5340923967859316104?l=andrewmcknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewmcknight.blogspot.com/feeds/5340923967859316104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6639337702975571846&amp;postID=5340923967859316104' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/5340923967859316104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/5340923967859316104'/><link rel='alternate' type='text/html' href='http://andrewmcknight.blogspot.com/2008/07/types-of-trust-needed-in-semantic-web.html' title='Types of &quot;trust&quot; needed in semantic web'/><author><name>Andrew McKnight</name><uri>http://www.blogger.com/profile/13364162134437158686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6639337702975571846.post-3758543881018296877</id><published>2008-07-03T11:43:00.000-07:00</published><updated>2008-07-17T13:19:55.769-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OWL'/><category scheme='http://www.blogger.com/atom/ns#' term='Semantic Web'/><category scheme='http://www.blogger.com/atom/ns#' term='Trust'/><category scheme='http://www.blogger.com/atom/ns#' term='Granularity'/><category scheme='http://www.blogger.com/atom/ns#' term='Work'/><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><category scheme='http://www.blogger.com/atom/ns#' term='Data'/><category scheme='http://www.blogger.com/atom/ns#' term='Datatype'/><title type='text'>Getting rough data into the semantic web</title><content type='html'>It's nice when regular relational databases, excel spreadsheets, and other sources that people have created can be attached to the semantic web. But there are problems with the way most data is recorded, especially for data about time. In short, the problem is that people round values. This may seem like a trivial unimportant problem, but I don't think so if you want to be able to use the rough data that makes up most of the world's data. Here are the issues:&lt;br /&gt;&lt;br /&gt;1) Datatype granularity. Datatypes allow for a wide range of possible values, but not all values. We may need to know in some situations whether the data value written is an exact match to the value that was intended. For instance, 1/3 can't be represented fully as a double and 3pm today can't be represented as a date without dropping the 3pm part.&lt;br /&gt;&lt;br /&gt;2) Granularity used vs datatype granularity. This is a much bigger problem than (1). People often write things to a granularity that is much less fine grained than the datatype granularity. For instance, you may be recording distance to 2 decimal places and storing it as a float. This needs to be taken into account for situations where values are compared. We don't want to say that two things have the same height just because they are almost the same height. Also, people round times to the minute, 5 minutes, 10 minutes, 15 minutes, hour, and many other ways. Are they rounding down? Are they rounding to the nearest? Some other recording method?&lt;br /&gt;&lt;br /&gt;An ontology that has commonly used recording methods to describe the data recording process would allow more justified inferences about the data to be made. This would allow a higher level of trust (in the second sense, explained &lt;a href="http://andrewmcknight.blogspot.com/2008/07/types-of-trust-needed-in-semantic-web.html"&gt;here&lt;/a&gt;) when using the data which is going to be of great importance as the semantic web grows.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6639337702975571846-3758543881018296877?l=andrewmcknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewmcknight.blogspot.com/feeds/3758543881018296877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6639337702975571846&amp;postID=3758543881018296877' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/3758543881018296877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/3758543881018296877'/><link rel='alternate' type='text/html' href='http://andrewmcknight.blogspot.com/2008/07/getting-rough-data-into-semantic-web.html' title='Getting rough data into the semantic web'/><author><name>Andrew McKnight</name><uri>http://www.blogger.com/profile/13364162134437158686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6639337702975571846.post-6915194877914458594</id><published>2008-06-13T15:30:00.000-07:00</published><updated>2008-08-21T16:00:52.398-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OWLAPI'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='OWL'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Semantic Web'/><category scheme='http://www.blogger.com/atom/ns#' term='Pellet'/><category scheme='http://www.blogger.com/atom/ns#' term='Work'/><category scheme='http://www.blogger.com/atom/ns#' term='SWRL'/><title type='text'>Pellet + OWLAPI + SWRL</title><content type='html'>I've found over the last couple of months that there are a LOT of different ways to mess up when trying to use SWRL, Pellet, and OWLAPI. I'll try to list everything I can remember getting stuck on or potentially getting stuck on. Feel free to add your own by comment.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Java Heap Overflow errors:&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;remember that you can add more memory to java in Eclipse for a single project by going to Run -&gt; Open Run Dialog -&gt; Arguments and then adding -Xmx1024M to your VM Arguments (or some other value instead of 1024).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A great solution is to break your data into separated named graphs where you know the information will not be important between the graphs. For me, this fixed everything (especially in FaCT++ where it fixed speed issues as well). I had data about patients that I knew were not the same patient, and I reason about each patient one at a time.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Still not enough? I'm not sure what to say yet, but I have some extremely unthought out guesses: try KAON2 because I heard it scales better (but might only scale for speed), try a database backend with an rdf to sql mapper (such as D2R Server), and try OWL-Lite (if expressive enough for you). None of these guesses might do anything to fix your problem, but they are what I'm going to try next if I hit this problem. Please tell me if these options would or wouldn't help.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If you're using SWRL rules, try the &lt;a href="http://en.wikipedia.org/wiki/Rete_algorithm"&gt;Rete algorithm&lt;/a&gt; (if using a version of Pellet pre-1.5.2). Turn Rete algorithm on by writing this line: &lt;span style="font-family:courier new;"&gt;PelletOptions.USE_CONTINUOUS_RULES = true;&lt;/span&gt;&lt;br /&gt;I've heard there are some specific cases where this algorithm is slower, but it usually isn't.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;This probably won't happen to you because you are smarter than me. But make sure when you are trying to write "facts" between individuals you don't refer to classes. Write it like this:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;axioms.add( factory.getOWLObjectPropertyAssertionAxiom( personInd, hasWeightOP, weightInd ) );&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and not like this:&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;OWLObjectValueRestriction hasWeightTheWeight = factory.getOWLObjectValueRestriction( hasWeightOP, weightInd );&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;axioms.add( factory.getOWLClassAssertionAxiom( personInd, hasWeightTheWeight ) );&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;SWRL rules just won't work:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;Is your SWRL rule Safe? I saw a few different definitions of "SWRL rule safety" but the one that seems to be right is: Make sure all individuals that are involved are explicitly added! For example, if you have a rule like this:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Person(?x) ^ drives(?x,?y) ^ Car(?y) -&gt; Driver(?x)&lt;/span&gt;&lt;br /&gt;and you have an instance of person which is also an instance of "drives some Car", but you don't have an the instance of Car that he drives explicitly added, the rule will not return the person instance as a driver instance. For more check this &lt;a href="http://protege.cim3.net/cgi-bin/wiki.pl?SWRLLanguageFAQ#nid9VC"&gt;part&lt;/a&gt; of the ProtegeWiki: SWRLLanguageFAQ.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Simplify rules as much as possible. Don't use negation (NOT) and don't use disjunction (OR). I've never had a problem with this, or even tried it, but I seem to remember people having problems with this... somewhere.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Reasoning takes too long!&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;I'm still working on this... but reducing expressivity can't hurt. It sounds like OWL-Lite would make a huge difference for speed, but you have to sacrifice so much that personally, it doesn't seem like it's ever worth it unless you want structured tags and don't care about answering queries.&lt;/li&gt;&lt;li&gt;Try FaCT++. It was orders of magnitude faster when I used iterative reasoning as explained above.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6639337702975571846-6915194877914458594?l=andrewmcknight.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andrewmcknight.blogspot.com/feeds/6915194877914458594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6639337702975571846&amp;postID=6915194877914458594' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/6915194877914458594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6639337702975571846/posts/default/6915194877914458594'/><link rel='alternate' type='text/html' href='http://andrewmcknight.blogspot.com/2008/06/pellet-owlapi-swrl.html' title='Pellet + OWLAPI + SWRL'/><author><name>Andrew McKnight</name><uri>http://www.blogger.com/profile/13364162134437158686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
