1,632 karma · joined May 4, 2012
> cat /usr/share/dict/words | ./pipesock 2013/06/01 22:35:59 Read Line Error: EOF 2013/06/01 22:35:59 Read Line Error: EOF 2013/06/01 22:35:59 Read Line Error: EOF 2013/06/01 22:35:59 Read Line Error: EOF
This happened when trying to do "y | ./pipesock", amongst other things, perhaps you should silently ignore stuff that isn't streaming in line-based.
FWIW the websocket library now installed, I get a single reading in the html frontend, the first message I broadcast.
Nice idea, needs a lot more work!
There's also a provision with the API (for personal use, so far) which turns a filename (and metadata, if you have it) into a JSON hash (or msgpack, of course) of the episode, show and season, etc.
This is also a potential avenue for being more widely made available.
These are all the features of a normal API. As well as access to the above, you could (selectively) register for updates to be pushed to a URL of your choosing when there are additions or amendments to the data held about the show. (or all shows, or all shows matching your criteria, etc)
I believe services such as trakt.tv and similar should be able to do one thing, and do it well, offer a to-do list of shows you should watch, and summarise what you have watched. And they shouldn't have to write thousands of lines of code to interface with an API for what's actually quite simple.
In my (admittedly contrived, and not representative) benchmarks the JSON representing a typical TV series is 76% smaller, and parses 56% faster (that is probably representative of years of research and work into making fast XML parsers, and JSON being a relatively young format)
Also, I find it strange that they don't provide a notifications API or changes stream.
I don't want to call thetvdb specifically, many API and data providers make the same mistakes, if one can call a missing feature a mistake. (TradeDoubler, many financial APIs, etc)
Another departure from typical API design is to accept that many movies, shows, books and so forth are provided simultaneously (or, close to simultaneously), world wide, in multiple languages.
Therefore any API that purports to represent them must acknowledge that English isn't the default language, but it may have been the language in which the media was authored, and that airing dates, shipping and printing dates are worthless without timezone and language information.
My goal is to make an API that is easy to use, and can open the creativity of the community up, by allowing something that is now rather difficult to become easy.
To call out some of the problems I've tried to solve: timezones; networks; outlets (web); airing dates vs. availability dates (locale specific); actors vs. hosts vs. cameos; returning series under the same name; specials vs. pilots vs. shows about a series; treating different languages with equal weight; encoding (utf-8 naturally); gzip; msgpack... I'm sure there are many more which I've forgotten, but that's the gist of it :-)
I fear that existing APIs, through design and coincidence fail to address the needs of flexibly covering media of all types.
Join the list, look me up, or feel free to contact me to discuss
Similar services: * Web: trakt.tv, watched.it, watched.li, gomiso.com, getglue.com * Android: TV Series, TV Show Favs, Twee, DroidSeries, MyEpisodes
I don't think that trakt.tv is really competing on an API level, but the data from openmedia.io would make building and maintaining a TV and movie tracker trivial.
@theallan - It depends whether that would be a competing service under liberal interpretations of the law, when the legal chap has drawn up the API permission guidelines, I'll be sure to notify the mailing list. Under German law we have to be quite explicit about granting permission, but the beta list will be notified of the full terms of usage before the API opens. (My gut-feeling, no problem with using the data to back an app, that's sort-of what the data's for!)
A stack-overflow inspired reputation system will reward community members to contribute translations, new shows, movies and corrections.
Background workers interface with EPGs, other APIs and streams of data from other sources.<p>An image proxy server means openmedia.io will do the heavy lifting delivering images in the dimensions that you want, backed by a speedy CDN.
With that said, props to the designer for working on a solution to a difficult problem, but perhaps more domain knowledge would have lead him to a more suitable solution
The `brew` executable knows about the correct flags to give to `--configure` within it's own context, so it rarely goes wrong.
Thats a half-decent idea, nice smart move, and it looks like the authors motivations weren't dissimilar to my starting point for this query.
I do wonder however if it isn't slightly over-killed, `make install` must generate a list of commands to run, or there should have been some way to stream the output of `make install` to a text file, that it might be undoable ?
That's a good point, there is no dependency resolution at this low-level; and with that in mind, there's probably a good way to uninstall things by hand, if you really wanted to.. thanks for the thought.
I think that Rack is one of the best things that happened to the Ruby web-application community, and I'm a little sad that Rails is getting a "vendor specific" implementation of what should be a wide reaching feature. As you said at @scotruby though, Rails is in a unique position to direct the development on both sides, front and back end of development. (I believe in Scotland you were referring specifically to pushing backend queue implementors to meet the new Rails queueing API.)
I'm looking forward to seeing people building upon this for common use-cases such as streaming reports, CSV exports etc to clients, as well as the more `fun` stuff about live browser reloading (which guard-reload implements very nicely, actually, using a different technique)
And, I think it's fair to say that using a queue, and having a queue consumer (again, I think you demo'ed that in Scotland) isn't such a bad solution, at least as a more experienced developer I appreciate the moving parts, and it doesn't distract me too much from solving the problem at hand, and - most importantly it works.
That all said, I think this is a valuable change, and I thank you for your time in making it work, and coming up with an interesting test-case.
For what it's worth, my last word would be about a post on HN a few days ago, about streaming JPEGs, multi-frame streams often (apparently.) used for IP camera livestreams, that's quite an interesting case which could lead to this controller technique being used to do live image previews without page reloads in Rails with AJAX image upload.
The message queue to notify component X of changes to data in Y is endemic of badly designed systems; if system X cares about changes to data in Y it should be designed that (at scale) it caches the data for a suitably short time, otherwise reads-through to the canonical source.
This is a common anti-pattern, and I've seen it built by smart teams at epic scale (millions of uniques per day) and it is still un-manageable.
Feature toggles, hard and soft-failing, together with a baked-in assumption that APIs are asynchronous (that is, unreliable) at as many levels as is feasible is a good architectural move. (And does not necessitate an abundance of architecture over feature code)
Loosely coupled components that expect their counterparts to respond slowly, or not at all are easy to implement and even easier to test. (HTTP, if one wants to use HTTP as the transport medium, learned this, and offers 201 and 202 for CREATED and ACCEPTED).
In my own projects (and I work mostly on near-realtime billing APIs) we bake this assumption (and others) into every transaction, as try to be restful, and transmit the state, and a URL which can be used to get the canonical representation of any resource, at any given moment, and objects in all parts of the system are stateful, relying on the handshakes (accepted/created) (404, 406, 409) to avoid race conditions and to make sure our systems can handle downtime of any component (internal or external)
As a result, we have lightning quick tests, we are very confident in the system's ability to perform, and we have read-through caches which respect the transport medium's headers.
I suspect the OP is right, many do over-engineer the startup, but remember many startups appear to have an abundance of developer potential, until they don't. (Usually through bad design, not over engineering, the two ought not to be confused)
Perhaps I am biased by having seen it happening in a large company, completely unscalable architecture, and at a point as many "architects" as they had developers, desperately trying to keep the wheels turning.
30 minutes to bring back a homepage is pretty bad man, also your personal homepage http://paulbjensen.co.uk is returning NO CONTENT, is that on the same (bricked) server?
I question the need for yet-another-process-monitor, but I acknowledge that upstart, monit, etc are by and large overcomplicated and messy. They provide more features, of course, but they violate my interpretation of the unix philosophy.
I'm sure many people on HN will condemn you for writing this but, I for one am very excited to try it.
I had a similar idea of a daemon that would allow inter-process signaling for users to signal processes which shared their GID, to simplify web application deployment without relying on sudo privilege restrictions.
You may have just inspired me to take your lead, and just do it - a few hundred lines of C, and smart documentation have a lot of value as learning, experience, proof-of-concept and a discussion point; and that in itself is reason enough for this to exist!