Saturday, 16 March 2013

Google Reader alternatives

Google Reader, which I use everyday, is going to be shut down by Google on July 1st. Ideally I'd be able to google "google reader alternatives" and find one, but unfortunately all the search results are people just making filler posts and stories for various sites. That's one of the problems with the internet, too many people posting helpful information about things they haven't actually tried. The reddit comments on the subject are mostly from frustrated people venting outrage.

Alternative #1: My own internet accessible site

It seems like the best option is to host one of the similar open source projects myself. In order for this to be a reasonable replacement for Reader, I would need to do so on a public server somewhere. Benefits:

  • Permanent record of interesting sites. If in the past I read and star a blog post, what is to say that the site the post came around will still exist? Or be in the Internet Archive? Or would have even be kept around in Google Reader, had it continued indefinitely?
  • Ability to customise the code for personal preference.
Costs:
  • Hosting costs. I currently pay Bluehost around $104 USD a year to have a web site and shell account. I could install one of the alternatives there, but I was already intending to close my account. It might be worth my while to sign up elsewhere for a longer term, like Hostmonster for 3 years at ~57% of the Bluehost price
  • Maintenance burden. How often are security problems found in PHP these days? There's also the random assortment of other weird dependencies that people burden their software these days.
This solution also lacks the one single interesting benefit of the more "social" alternatives, the ability to get recommended content from other users with the same interests. However, Google Reader had this feature, and it's recommendations were a waste of time.

Tiny Tiny RSS looks like the most appealing project to me.

TLDR: Maybe, but it would be a lot of work.

Alternative #2: The Old Reader

People suggesting The Old Reader as an alternative mention it is like "the old Google Reader."


In the Reddit thread, people dismiss it because it requires you to use your Google account or Facebook account to log in.


I'm with them.  This rules out this alternative for me.  Even if it didn't there's little to show what this site offers, or whether it costs money, or even besides what the name hints at.. what it actually is.  The tour page seems more like a basic make-do step by step tutorial than an actual tour of the features.

TLDR: Can't access it and not sure what it actually is.

Alternative #3: Bloglines

I signed up for Bloglines, exported my Google Reader subscriptions using Google Takeout, and imported them with little difficulty.  The default view is some complicated image-based one, that only shows bits of images and bits of post name.


I can change this to a list view.


But it makes strange alterations to browser behaviour.  If I try and scroll up when viewing a post, it doesn't inch up as it would for a normal web page.  Rather it jumps some arbitrary amount, so I end up going up and down trying to view the right parts of image and text.  If I press space, it jumps to the next oldest article.  No more press space to page down, as a standard web page behaviour.

One thing I appreciated about reader, was that reading the next unread article took me to the next newest article.  In this way, I would catch up on what had left to read.  Bloglines however reads from newest to oldest.  This is not useful to me, and it doesn't appear possible to change it.

Bloglines is still giving me extra unread articles for various subscriptions occasionally when I log in -- like those Paizo articles from 2010 which are shown in the screenshots.  This would seem to be the subscriptions it didn't already have indexed for other people, like custom RSS feeds for forum threads.  That's fine.

TLDR: UI too fancy, and works in arbitrary ways.  But better than nothing.


Alternative #4: Feedly

Feedly is apparently based on Google's Google Reader API, so it is really just a way of viewing Google Reader content.  This means it is another website that needs your Google login, although justifiably so to allow you to read and manage your subscriptions in Google Reader.  They plan to make their own API to replace that of Google's when Reader is phased out.


It's not really a Google Reader replacement in any case.  You need to have local clients installed, and can't just go to a website to catch up.  What if I am in a web cafe, or borrowing someone else's computer?  The only time I would want a custom client would be if it downloaded all the latest state to my computer or mobile device and allowed me to completely read offline.  That would be really nice actually, and I wouldn't be surprised if it was what Feedly does.

But what does Feedly do?  How does it work?  Does it cost money?  Will it cost money?  This is another of those modern web sites that you can sign up to use something, or install something, but they don't really tell you what that something is.

I installed the Feedly Google Chrome app, and it promptly invited itself to start Chrome when Windows starts.  That's another slowdown on startup, for an inscrutable application which is thought to read blogs and whatnot, but how it allows me to do this is again inscrutable.  At this point, I uninstalled it and moved on.

TLDR: This website has no helpful content besides installation options.  If you use it, let me know what it is.

Browsing the comments for their announcement blog post, where they mention how they will transition after the Google Reader API is closed down, there are some tidbits.  Whether it is offline, whether there is a cost to use now, or a future cost, etc.

From what I can tell, and it's unfortunate I have to try and work it out this way:

  • Feedly does not have an offline mode.
  • They may have web-based access in the future, but do not at this time.
  • It has ability to sort from oldest to newest articles, but only on individual feeds.
  • DATA LOSS: If you have old subscriptions in Google Reader for websites that no longer exist, allowing you to access the otherwise no longer accessible articles, Feedly will lose that data when it transitions to it's own API.
  • DATA LOSS: It does not import tags from Google Reader, although there is reported to be a hacky workaround.
  • DATA LOSS: People report it not importing all subscriptions, requiring people to manually resubscribe.


Conclusion

I've looked at several other alternatives that appear to be more of the same.  But at this point, I think it's obvious that the existing alternatives are too fancy, and the fanciness gets in the way of usability.  That's assuming I can even work out what exactly an alternative is, from it's website. One of the things I appreciate more and more about Google Reader, is that it is simple and works in all the different ways I need it to.

It looks like the way forward for me from here, is to install one of the self-hosted alternatives into my Bluehost-hosted website.  And to buy a cheaper longer term plan from another hoster that offers shell access, once my Bluehost package expires.

Saturday, 16 February 2013

OpenCyc experimentation

Last December, OpenCyc 4.0 was released. I've been meaning to get more familiar with OpenCyc for a long time, and luckily this release adds a lot of interface improvements.

  • The search bar now has a drop down set of auto-complete matches.
  • The display for a selected term is cleaner and easier to use.
  • Terms have a popup menu that allows easy editing or deletion.
Experiment

I was hoping to translate the D&D SRD ability modifier formula into a CycL function, so that I could at a later point calculate the modifier for the given attribute of an entity. The OpenCyc documentation was never extensive enough to describe how to do this sort of thing, and it has not been updated since the original 1.0 release. Add into that dead links, and working out how to use OpenCyc is pretty hard going.

A huge amount of browsing terms in the OpenCyc ontology browser led me to the simple formula:
(#$TruncateFn (#$QuotientFn (#$DifferenceFn ?SCORE 10) 2))
And that's ignoring that I had trouble finding DifferenceFn and QuotientFn, originally using PlusFn and TimesFn in their places.

In order to test an expression like this, it needs to be wrapped in evaluate, which binds the result to a variable allowing it to be seen in the query page.
(#$evaluate ?RESULT (#$TruncateFn (#$QuotientFn (#$DifferenceFn ?SCORE 10) 2)))
Like a SELECT statement in SQL, this effectively displays one row with one column named RESULT showing the value of 3.

Defining the standard terms for a CycL function is pretty simple.

The first step is to create a term (a generic step) with the name of the function, in this case #$AbilityScoreModifierFn. In the top frame, there is a tools link on the right hand side. Click on this, and then select Create Term.

Next various properties are asserted for the term. In the top frame, there is a Assert link. Click on this, and then simply enter the relevant expressions and assert each in turn.
(#$isa #$AbilityScoreModifierFn #$UnaryFunction)
(#$arity #$AbilityScoreModifierFn 1)
(#$arg1Isa #$AbilityScoreModifierFn #$Integer)
(#$resultIsa #$AbilityScoreModifierFn #$Integer)
And finally the remaining task, is to associate the formula with the AbilityScoreModifierFn function. I've come to the conclusion that this actually isn't possible to do from within CycL.

There are two possible ways of associating logic with a term (that I've been able to find).
  1. rewriteOf
  2. evaluationDefn
With rewriteOf, you might assert something like:
(#$rewriteOf #$AbilityScoreModifierFn
  (#$Lambda (?SCORE) (#$TruncateFn (#$QuotientFn (#$DifferenceFn ?SCORE 10) 2))))
Unfortunately, rewriteOf expects a reifiable function as it's second argument. What this means, is that what this does is assert (#$AbilityScoreModifierFn 18) as a fact in the ontology. This is obviously not what I want, which is simply calculate and output a value, with no side-effects.

CycL expressions cannot be associated with evaluationDefn. This is intended rather to simply specify the name of a function in the lower level lisp language, called SubL. These are apparently easy enough to define, but it has been hard enough getting to this point, let along adding further complication outside of the ontology.

Experiment conclusion

At this point, I get the feeling it isn't intended that you can directly create formulas as expressions within CycL. Instead, I assume that it is expected that these are defined in SubL.

Ontology thoughts

I'm also not entirely sure that the effort of using OpenCyc is worth it. While there is a wealth of knowledge in the ontology, it doesn't seem deep enough in the right places to be used to back a game experience.

There are definitions for Crossbow and Longbow for instance, but they don't have the depth which there is for Gun. Gun has logic to define information about its projectiles, and defines the parts that make up both guns and their projectiles. But there is no corresponding breakdown of the parts of a bow, or the projectile which a bow fires.

The humanoid body has parts, but there is no definition of how the parts join together. Actually, that's not entirely true. I believe there are a few definitions of which rib comes before the next, but little more. Torso doesn't seem to be joined to arms, neck and legs or whatever it should be joined to. Of course, cutting up corpses is not a crucial MUD feature, but I believe this is illustrative of a general lack of depth where it counts.

OpenCyc thoughts

Do you know how much memory OpenCyc requires to run out of the box? A minimum of 5 gigabytes. Who wants to run a MUD and to have to run a second process which they connect to via SOAP, which uses this much memory? And who wants to write their own SOAP encoding of their queries and other commands directed at the OpenCyc process, because there are only Java bindings provided?

At this point I am wondering if there is any reason to bother experimenting further.

Monday, 4 February 2013

pysrd

One of my long-term projects is to programmatically generate game logic from the D&D 3.5 SRD.  The idea is that ideally if the required legwork was done, any time I wanted to prototype something around a game experience, it should be possible to plug in the processed data and be 98% of the way to having stock D&D gameplay.  There's a lot of hand-waving there around the phrase "required legwork", but that's not really important for the purpose of this post.


I've extracted the low level scripts I use to both extend the database and introspect it's contents, and published them on github under the project name pysrd.




The SRD is available from Wizards of the Coast as a set of RTF documents.  This of course, is not ideal, but fortunately it is possible to get the data from andargor.com in different database formats, including SQLite.  Unfortunately however, not all SRD data is included in these databases.  Fortunately, the OpenSRD project includes generated HTML versions of the RTF documents, which can more easily be processed.