[0] https://www.euronews.com/culture/2021/12/14/garry-kasparov-l...
694 karma · joined February 2, 2013
[0] https://www.euronews.com/culture/2021/12/14/garry-kasparov-l...
I do think he did once (quite a few years ago) consult for a blockchain company. That's about the only factual basis I've discerned for it.
(Disclaimer/source: I met Stephen once or twice a while back, via the Haskell community.)
That already happens. People who know what they are doing (i.e. professionals) already buy scripts and book rights and make movies out of them. It works pretty well already.
(Or the union can decide to display a banner with a message at the bottom of the page, if a full boycott is too strong.)
Eventually the idea is to allow for a more integrated discussion about websites _on the website itself_ (i.e., forums with threads for pages/sites, accessible from that page via the extension, so that starting or participating in the discussion becomes easy).
I think a lot of the difficulties we have in collective organization in the realm of the internet can be ameliorated with a tool of this nature. Think of what it would take to effectively signal something to facebook. How would you find people who might have similar demands as you to organize a boycott? How would they find you? How would you remember about the boycott? How would Facebook know what the "canonical" set of demands are?
The work so far is here: https://izens.net/ (and on github: https://github.com/izens-net). There's still a lot to do, but a basic version of the browser extension already works.
(Other people were involved too, and some did in fact more work than me, in case the tone above suggests it's entirely me work.)
The first thing to notice is that the calculus of unionization or collective action is very different than what we historically know. As a user, whether you see yourself as a customer or a laborer vis-a-vis Google, in both cases your position is different than traditional customers or laborers. The importance of convenience for all your transactions is much bigger. We probably aren't willing to spend an hour a week going to union meetings, because Google isn't as significant to us (as users) as a traditional employer, and because we have a similar relationship to a variety of other companies (Facebook, Amazon, Apple, etc.) as to Google, which would by analogy thereby entail a lot of time.
Moreover, it is much harder to build a social relationship with people in similar positions. At a job, or at a checkout line, you meet people in the same place as you. With a Google service, it's just doesn't happen naturally that you encounter people (and can easily and spontaneously communicate with people) in the same position as you (even though there are likely so many more). The companies themselves control how you inhabit their "space" - whether you can "meet" other people in the relevant way currently depends, for instance, on whether there is a chat or forum connecting you to those people. And of course, relying on their graciousness for that space is not going to go down well most of the time [1] as soon as this collective organization starts becoming significant. (This sort of control of how social interactions take place has been compared to the British enclosures.)
There are probably a number of valuable ways to collectively organize in this space. But the above considerations, and the fact that our own skills (and hence ability to contribute) are in programming and design, led a few friends and I to an idea: that we could create those spaces for collective organization via browser extensions and phone apps. The idea is that you install a browser extension (we haven't started on the app), and join one or more unions (or campaigns). The browser extension, based on the policy files of the unions you've joined, can a) block the website for some period of time for all its members, with some message; or b) display a banner when a member visits a site. The union members discuss and decide what the policy will look like. From there you can organize boycotts and make demands.
(https://izens.net/ (and the browser extension) is still in it's early phases, so feedback is much appreciated!)
[0] I agree that it may be misleading to think of it as a consumer union in most cases, for reasons other people have mentioned. On the other hand, the Posner & Weyl idea that we are data laborers suggests it might be a labor union. Ultimately, none of this matters much to the broader points.
[1] Compare this to moving out of WhatsApp, which I'm in the process of doing. I can use WhatsApp itself to get in touch with the people I want to coordinate with, thus making that coordinating relevant and timely.
main(){int l=999,i,j;int v[]={133,119,89,80,75,119,113,80,89,119,75,80};for(;;){putchar(250*(j++%v[i%12]&&(j+i)%v[i%12]==0));i+=(j%l)==0;}}
Just compile and run that with "a.out | aplay".
It's been a while since I wrote this, and I remeber cheating a bit somewhere, but not surprisingly I can't figure out what it's doing much less how it's cheating.
I'll take this opportunity to say again - this is alpha software, and not ready for production use!
[0] https://github.com/radicle-dev/radicle/blob/master/rad/prelu... [1] https://github.com/radicle-dev/radicle/blob/master/rad/monad...
This isn't quite true. We already have an authentication and authorization mechanism on top of ipfs. So for instance, only admins/maintainers (of which there might be multiple ones) can accept patches.
(Being an admin/maintainer is different than being a machine owner - currently there can be only one owner. Currently owner has to be online for any new inputs to be processed, though reading should work if your data is replicated, and we've already built some tooling around making that easy.)
That said, the already-accepted content will still be in the logs of the machine, even if it doesn't show up at all in the materialized state.
[0] This is based on the eval-redefinition we describe here: https://ipfs.io/ipfs/QmadmGA6mBWZ93Wv4XKuCu9wdPf7Da8pjH3Corz...
That said, there are brew and deb packages!
In servant dealing with the expression problem (albeit in a pretty different way than the usual tagless final approach) was in my opinion a pretty big win - it means you can add terms the the API DSL as well as interpretations for it. I pretty regularly do the former when using it, and there are lots of libraries doing the latter. (Disclaimer: I'm one of the authors of servant.)
Location: Berlin Remote: Yes
I'm one of the original authors of the servant web framework [0]. Web services that are statically guaranteed to match the specification API; documentation (in markdown or Swagger) that never gets out of date; client libraries generated automatically. In short, beautiful APIs.
<myaccount>@gmail.com
[0] https://wiki.haskell.org/Foldable_Traversable_In_Prelude
Anyhow, the title is kind of too much. At least, given the aforementioned discussions, we're conflicted liars.
[0]https://mail.haskell.org/pipermail/haskell-cafe/2015-April/1... [2]http://www.cs.hmc.edu/~oneill/papers/Sieve-JFP.pdf [3] https://github.com/haskell-infra/hl/pull/8
You do get kind of used to it, though, for what it's worth. And you can always break things up. E.g.:
type MyAPI = "users" :> Get '[JSON] User
:<|> "users" :> ReqBody '[JSON] User :> Post '[] ()
Can generally be rewritten as: type GetUser = Get '[JSON] User
type PostUer = ReqBody '[JSON] User :> Post '[] ()
type MyAPI = "user" :> (GetUser :<|> PostUser)
etc.Checking for correctness and deriving functionality from that comes pretty naturally after that, so it's easy to reduce boilerplate (e.g., generate client libraries and documentation automatically) and make static guarantees (e.g., that a link exists within an API, and won't 404).
[0] http://www.informatik.uni-marburg.de/~kos/papers/gpce06.pdf
Two things that you'd get, that to the best of my (limited) knowledge aren't possible in make, is having cut, and the notion of both "and" and "or" - not only can you declare multiple dependencies and rules, but also "alternative" rules in case one does not succeed (e.g., in case you shell-out to a non-existent binary, try a different one).
>Notice that RPN requires no parenthesis, unlike the polish notation of Lisps where the operator comes first, and RPN requires no precedence rules, unlike the infix notation used in most programming languages and in everyday arithmetic.
This seems wrong to me. It's the lack of variadic functions that is the relevant difference to lisp in terms of doing away with parens, not PN vs RPN.
Love the article, though
Unless your operators don't have a fixed arity, anyhow (Lisp's don't). But even then I don't see how RPN is in a better position...