This is my first Clojure project. It was originally meant to be a generic version of weekly reddit (which I wrote using Python and deployed to App Engine) -- the idea is to be sent a weekly digest of any frequently updating site. Initially, I wanted to do this for Hacker News and stackoverflow.com.
At its present state, "weekly stackoverflow" is mostly implemented but still not ready for public use.
Although my enthusiasm for this project began withering away when I first heard of StackExchange newsletters, after actually reading their newsletter for a couple of weeks, I came to realize its pain points:
- I want RSS, not Inbox spam
- I want to filter questions by specific "tag"
- I may want a monthly, instead of weekly, digest
These are not possible with StackExchange newsletters. Furthermore, I am still interested in creating a weekly digest for Hacker News. Consequently, my interest on this project came back to full force.
Check out the source:
$ git clone https://github.com/srid/notaskinnerbox.git
$ cd notaskinnerbox
Download dependencies:
$ lein deps
This is a web application and you can run it using:
$ lein ring server
The default page gives you the top posts at stackoverflow.com since last
week. To view an arbitrary StackExchange site, go to URL /se/; eg:
/se/skeptics.stackexchange.com
. Further, the URL format optionally accepts a
tagname and the number of days; see routes.clj
for details.
The app uses Ring, Compojure and Enlive. It can be seemlesly deployed to Heroku or Stackato.
To retrieve the links directly from the command line:
$ lein run -m notaskinnerbox.core -t learning -s programmers.stackexchange.com -n 360
1) My Dad is impatient with the pace of my learning to program. What do I do?
http://programmers.stackexchange.com/questions/97785
2) I still can't figure out how to program?
http://programmers.stackexchange.com/questions/32425
[...]
$
The slow way:
lein appengine-prepare
dev_appserver.sh war
However, using the REPL allows you to quickly restart the server after file edits:
cake swank
# M-x slime-connect from Emacs
# Visit deploy.clj and C-c C-k
# In the REPL:
user> (deploy/ae-develop)
Launching server at http://localhost:8080/
Visit http://localhost:8080/. Whenever you edit a file, (eg: views.clj
),
remember to recompile it in the REPL:
user> (deploy/ae-develop 'notaskinnerbox.views)
Launching server at http://localhost:8080/
ae-develop
is just an utility function that reloads the given namespaces and
relaunches the App Engine dev server.
This app can be deployed to Heroku, Stackato or Google App Engine. For App Engine,
lein appengine-prepare
appcfg.sh update war
Skinner Box refers to the operant conditioning chamber used to train rats. I likened the conditioning to us humans mindlessly clicking links (or pressing the lever) to feel a spurt of novelty (or satisfying hunger). "Fast news", it seems, has conditioned us to seek this behaviour in ever greater intensity. This concept is widely known as information overload, but that only deflects attention (of the addict) away from the psychological behaviour (addiction).
- Cache API requests
- Weekly cron tasks
- Database
- RSS!
- UI to select StackExchange site
- Hacker News
- Reddit?