Skip to content

Instantly share code, notes, and snippets.

@thruflo
Created December 4, 2011 12:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thruflo/1430121 to your computer and use it in GitHub Desktop.
Save thruflo/1430121 to your computer and use it in GitHub Desktop.
Snapshot of the (rarely used) Togethr pivotal tracker stories on Sunday 4th December 2011
We can make this file beautiful and searchable if this error is corrected: It looks like row 2 should actually have 17 columns, instead of 16. in line 1.
Id,Story,Labels,Iteration,Iteration Start,Iteration End,Story Type,Estimate,Current State,Created at,Accepted at,Deadline,Requested By,Owned By,Description,URL,Note
19725001,PyPy Ctypes Support,"@tav, #python",1,"Oct 24, 2011","Oct 30, 2011",feature,2,accepted,"Oct 15, 2011","Oct 24, 2011",,tav,,"In order to use existing code like [pybonjour][] under PyPy, its `ctypes`
support needs to be improved a little.
**Done:**
* The [necessary][] [changes][] have now been committed to [PyPy][].
[pybonjour]: http://pypi.python.org/pypi/pybonjour
[necessary]: https://github.com/pypy/pypy/commit/ec8ef738ba5f648653d195d95f9db5d70dcd172d
[changes]: https://github.com/pypy/pypy/commit/0f7ec12cf68443ab1e0e265a17ff51495a646068
[PyPy]: https://github.com/pypy/pypy
",https://www.pivotaltracker.com/story/show/19725001
18207953,Deployment Instances,"",6,"Nov 28, 2011","Dec 4, 2011",chore,,started,"Sep 13, 2011",,,James Arthur,James Arthur,,https://www.pivotaltracker.com/story/show/18207953
18207983,User Object,"",6,"Nov 28, 2011","Dec 4, 2011",feature,1,finished,"Sep 13, 2011",,,James Arthur,James Arthur,,https://www.pivotaltracker.com/story/show/18207983
18208035,Item Object,"",6,"Nov 28, 2011","Dec 4, 2011",feature,2,finished,"Sep 13, 2011",,,James Arthur,James Arthur,,https://www.pivotaltracker.com/story/show/18208035
18208003,Authenticate / Credentials,"@tav, #design",6,"Nov 28, 2011","Dec 4, 2011",feature,1,started,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208003
19738143,Argonought: Go,"#argo, #go",6,"Nov 28, 2011","Dec 4, 2011",feature,2,started,"Oct 16, 2011",,,tav,tav,"There needs to be a Go implementation of the [Argonought serialisation
format](#item-argonought-serialisation-format) in `amp/argo`. This should follow
the standard set by Go's [gob](http://golang.org/pkg/gob/) and
[json](http://golang.org/pkg/json/) packages.
Thus, the core encoder API should look like:
:::go
type Encoder struct {}
func NewEncoder(w io.Writer) *Encoder
func (enc *Encoder) Encode(v interface{}) os.Error
And the decoder API:
:::go
type Decoder struct {}
func NewDecoder(r io.Reader) *Decoder
func (dec *Decoder) Decode(v interface{}) os.Error
In addition, the package may expose specific type-related encoding/decoding
methods, e.g. `.WriteInt(v)`, `.ReadString()`, &c.
",https://www.pivotaltracker.com/story/show/19738143
19737479,Argonought: JavaScript,"#argo, #js",6,"Nov 28, 2011","Dec 4, 2011",feature,2,started,"Oct 16, 2011",,,tav,tav,"There needs to be a JavaScript implementation of the [Argonought serialisation
format](#item-argonought-serialisation-format). Given the lack of builtin binary
data types in JavaScript, we probably want to make use of the [Buffers
API](http://nodejs.org/docs/latest/api/buffers.html) on Node.js and [Typed
Arrays](https://developer.mozilla.org/en/JavaScript_typed_arrays) on browsers.
We should also time the typed array implementations on recent browsers as
[benchmarks from early 2011](http://blog.n01se.net/?p=248) indicate that native
arrays performed significantly better for read/writes.
The core functions will be:
* `argo.encode(object)`
* `argo.decode(stream)`
And, to take advantage of JITs on modern interpreters, we may also want to
expose monomorphic functions for the specific type encoders, e.g.
`argo.encodeString(string)`.
",https://www.pivotaltracker.com/story/show/19737479
20060845,OCSP stapling,#nodule,6,"Nov 28, 2011","Dec 4, 2011",feature,2,started,"Oct 24, 2011",,,James Arthur,tav,,https://www.pivotaltracker.com/story/show/20060845
20061075,'dev' mode cmd line arg --single-server hardwires single node,#foo,7,"Dec 5, 2011","Dec 11, 2011",feature,1,unstarted,"Oct 24, 2011",,,James Arthur,tav,,https://www.pivotaltracker.com/story/show/20061075
18207977,Client Base,"",7,"Dec 5, 2011","Dec 11, 2011",feature,1,unstarted,"Sep 13, 2011",,,James Arthur,tav,,https://www.pivotaltracker.com/story/show/18207977
18208027,#Hashspaces,"",7,"Dec 5, 2011","Dec 11, 2011",feature,1,unstarted,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208027
20336305,Reactivate MEDEA Funding thread.,"",7,"Dec 5, 2011","Dec 11, 2011",chore,,unstarted,"Oct 30, 2011",,,James Arthur,Nick Ierodiaconou,,https://www.pivotaltracker.com/story/show/20336305
18208093,Add Item API,"",7,"Dec 5, 2011","Dec 11, 2011",feature,1,unstarted,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208093
18208079,Query API,"",7,"Dec 5, 2011","Dec 11, 2011",feature,2,unstarted,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208079
18208047,Message Parser,"",7,"Dec 5, 2011","Dec 11, 2011",feature,2,unstarted,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208047
18208105,Search Parser,"",8,"Dec 12, 2011","Dec 18, 2011",feature,2,unstarted,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208105
18208111,Live Messages,"",8,"Dec 12, 2011","Dec 18, 2011",feature,2,unstarted,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208111
18208145,Controlled Space,"",8,"Dec 12, 2011","Dec 18, 2011",feature,3,unstarted,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208145
18208157,Access Tokens,"",9,"Dec 19, 2011","Dec 25, 2011",feature,3,unstarted,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208157
18208161,Access Token Search,@tav,9,"Dec 19, 2011","Dec 25, 2011",feature,1,unstarted,"Sep 13, 2011",,,James Arthur,,"And ok. Heh.
",https://www.pivotaltracker.com/story/show/18208161
18208177,Page Views,"",9,"Dec 19, 2011","Dec 25, 2011",feature,2,unstarted,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208177
18208189,Cajoling #! coffee,"",9,"Dec 19, 2011","Dec 25, 2011",feature,2,unstarted,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208189
18208221,Markdown,"",9,"Dec 19, 2011","Dec 25, 2011",feature,1,unstarted,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208221
18208231,{{ wiki }},"",10,"Dec 26, 2011","Jan 1, 2012",feature,3,unstarted,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208231
18208235,Hooks,"",10,"Dec 26, 2011","Jan 1, 2012",feature,2,unstarted,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208235
18208243,Handshakes,"",10,"Dec 26, 2011","Jan 1, 2012",feature,3,unstarted,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208243
18208341,Channel API,"",11,"Jan 2, 2012","Jan 8, 2012",feature,1,unstarted,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208341
20738885,"Notifications (This is a core part of the OS experience, including things like email integration on the live server. How do they get experienced and how are they customised?).","#app, #design, #concept",,,,feature,,unscheduled,"Nov 8, 2011",,,Ifung Lu,,,https://www.pivotaltracker.com/story/show/20738885
20738865,How Context and Networks affect the presentation / operation of apps and how users understand this (linked to 1. above). ,"#app, #design, #concept",,,,feature,,unscheduled,"Nov 8, 2011",,,Ifung Lu,,,https://www.pivotaltracker.com/story/show/20738865
20738835,Networks i.e. for example the Hub Community space (How do users / resources get attached to networks and navigate them in terms of discoverability and messaging in/out?).,"#app, #design, #concept",,,,feature,,unscheduled,"Nov 8, 2011",,,Ifung Lu,,,https://www.pivotaltracker.com/story/show/20738835
20738821,Events and if / how these are differentiated from other ad-hoc activity on the platform.,"#app, #design, #concept",,,,feature,,unscheduled,"Nov 8, 2011",,,Ifung Lu,,,https://www.pivotaltracker.com/story/show/20738821
20738809,Ticketing and how it is experienced by users ,"#app, #design, #concept",,,,feature,,unscheduled,"Nov 8, 2011",,,Ifung Lu,,,https://www.pivotaltracker.com/story/show/20738809
20738777,Resources and how they are experienced / transacted by users.,"#app, #design, #concept",,,,feature,,unscheduled,"Nov 8, 2011",,,Ifung Lu,,,https://www.pivotaltracker.com/story/show/20738777
20738751,"Messaging (general UI work, contextual prompts and shortcuts if any such as ‘Action’ buttons, attachments, etc).","#app, #design, #concept",,,,feature,,unscheduled,"Nov 8, 2011",,,Ifung Lu,,,https://www.pivotaltracker.com/story/show/20738751
20738735,Appreciation (in what ways is the concept learnt and first experienced by users – how do users begin to benefit from it quickly?).,"#app, #design, #concept",,,,feature,,unscheduled,"Nov 8, 2011",,,Ifung Lu,,,https://www.pivotaltracker.com/story/show/20738735
20738711,"Trust Maps (our interpretation of follows / circles / ripples etc, and how these are first presented to users and understood).","#app, #design, #concept",,,,feature,,unscheduled,"Nov 8, 2011",,,Ifung Lu,,,https://www.pivotaltracker.com/story/show/20738711
20738689,"The On-boarding process and the sequence of sign-up, sign-on and authentication on the root app.","#app, #design, #concept",,,,feature,,unscheduled,"Nov 8, 2011",,,Ifung Lu,,,https://www.pivotaltracker.com/story/show/20738689
20738659,"Widgets (in particular those related to core OS functionality eg. ‘Who, What, Where, When’ Nav widget)","#app, #design, #concept",,,,feature,,unscheduled,"Nov 8, 2011",,,Ifung Lu,,,https://www.pivotaltracker.com/story/show/20738659
20738629,"App Discovery (The whole OS thing and how it fits with the whole MVP to users, what it presents itself as, discoverability, etc)","#app, #design, #concept",,,,feature,,unscheduled,"Nov 8, 2011",,,Ifung Lu,,,https://www.pivotaltracker.com/story/show/20738629
20071511,"Fallback to JSON with [flag, value] rich types hack for non bytesarray browsers","",,,,feature,,unscheduled,"Oct 24, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/20071511
20060789,Blacklisting,#nodule,,,,feature,,unscheduled,"Oct 24, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/20060789
19877137,'My Guestlist',#app,,,,feature,1,unscheduled,"Oct 19, 2011",,,James Arthur,,A feature that would be awesome to have is a 'my guestlist' where members can add the guests they're expecting within the coming week. Currently they email us so we can add them to an excel sheet - but that's sooo not a viable solution.,https://www.pivotaltracker.com/story/show/19877137
19756741,Amazon EC2,#devops,,,,feature,,unscheduled,"Oct 17, 2011",,,tav,,,https://www.pivotaltracker.com/story/show/19756741
19756737,Dedicated Server Providers,#devops,,,,feature,,unscheduled,"Oct 17, 2011",,,tav,,,https://www.pivotaltracker.com/story/show/19756737
19756713,Server Filesystem,#devops,,,,feature,,unscheduled,"Oct 17, 2011",,,tav,,"We should decide on the filesystem(s) to use on the Togethr EC2 instances:
* [Ext4](http://en.wikipedia.org/wiki/Ext4) — pretty reliable and offers great
overall performance.
* [XFS](http://en.wikipedia.org/wiki/XFS) — offers excellent performance for
large files and as of Linux 2.6.37 has significantly improved metadata
operations.
* [Btrfs](http://en.wikipedia.org/wiki/Btrfs) — extremely promising future
candidate but perhaps needs a bit more work to be stable enough for production
use.
Though [external
benchmarks](http://mindplusplus.wordpress.com/2011/02/02/finding-the-fastest-filesystem-2011-edition/)
can be insightful, we should conduct tests ourselves. The test scripts should
cater for the various kernel/fs/tuning combinations.
Tests should be conducted on large EC2 instances and cover the two main volume
types:
* Temporary instance volumes where we do not care for durability.
* Striped EBS volumes where we seriously care about durability.
With the latter, it's worth bearing in mind that it is really hard to get
reliable data on [EBS I/O
rates](http://orion.heroku.com/past/2009/7/29/io_performance_on_ebs/).
",https://www.pivotaltracker.com/story/show/19756713
19754693,CoffeeScript Services,#js,,,,feature,,unscheduled,"Oct 17, 2011",,,tav,,"We will be supporting custom services written in
[CoffeeScript](http://jashkenas.github.com/coffee-script/) syntax. This is seen
as a better alternative to offering JavaScript directly. For example, compare:
:::coffeescript
listBrowsers = (browsers) ->
list = $('<ul />')
for [id, name, url] in browsers
$(""""""<li id=""#{id}""><a href=""#{url}"">#{name}</a></li>"""""").appendTo list
return list
With the resulting JavaScript:
:::javascript
var listBrowsers;
listBrowsers = function(browsers) {
var _a, _b, _c, _d, id, list, name, url;
list = $('<ul />');
_b = browsers;
for (_a = 0, _d = _b.length; _a < _d; _a++) {
_c = _b[_a];
id = _c[0];
name = _c[1];
url = _c[2];
$(""<li id=\"""" + (id) + ""\""><a href=\"""" + (url) + ""\"">"" + (name) + ""</a></li>"").appendTo(list);
}
return list;
};
",https://www.pivotaltracker.com/story/show/19754693
19754527,Emacs Major Mode for Naaga,"#emacs, #naaga",,,,feature,,unscheduled,"Oct 17, 2011",,,tav,,"There should be a `naaga-mode` for Emacs which makes editing Naaga code
extremely pleasant. The mode should require nothing more than the following in a
user's `.emacs` config to work:
:::scheme
(add-to-list 'load-path ""path/to/naaga-mode"")
(require 'naaga-mode)
(add-to-list 'auto-mode-alist '(""\\.naaga$"" . naaga-mode))
The mode should support syntax highlighting, code completion, automatic
indentation, electric backspace and at least the following commands which should
be boundable to custom keys:
* `naaga-compile-buffer`
* `naaga-execute-buffer`
* `naaga-shift-region-left`
* `naaga-shift-region-right`
And, finally, the mode should integrate well with
[js2-mode](http://code.google.com/p/js2-mode/) and support basic hooks for
extensibility:
::: scheme
(defun naaga-custom ()
""naaga-mode-hook""
(set (make-local-variable 'tab-width) 2))
(add-hook naaga-mode-hook
'(lambda() (naaga-custom)))
For bonus points, the mode should integrate well with `naaga.test`.
",https://www.pivotaltracker.com/story/show/19754527
19751671,SSL Certificates,#devops,,,,feature,,unscheduled,"Oct 17, 2011",,,tav,,,https://www.pivotaltracker.com/story/show/19751671
19751669,Trademarks,#legal,,,,feature,,unscheduled,"Oct 17, 2011",,,tav,,"As a defensive measure against idiots like the one who filed for the [Linux
trademark and then demanded royalties from Linux
distributors](http://en.wikipedia.org/wiki/Linux#Copyright.2C_trademark.2C_and_naming),
it would be prudent to trademark ""Ampify"" and ""Togethr"".
At the very least, we should file for trademarks with the
[USPTO](http://www.uspto.gov/), [U.K. Intellectual Property
Office](http://www.ipo.gov.uk/tm.htm) and
[OHIM](http://oami.europa.eu/ows/rw/pages/index.en.do) (EU). And, dependent on
resources, in as many other countries as we can afford.
Since trademarks needed to be actively defended, we also need to come up with an
[open and sensible
policy](http://linux.slashdot.org/story/00/01/19/0828245/linus-explains-linux-trademark-issues)
regarding its usage.
",https://www.pivotaltracker.com/story/show/19751669
19751215,Domain Names,#legal,,,,feature,,unscheduled,"Oct 17, 2011",,,tav,,"We need to purchase various domain names relating to the operations of Togethr.
The following still need to be bought:
* `naaga.io` — the main Naaga domain.
* `tgt.hr` — for URL shortening.
The domain `ampify.com` seems to be owned by someone called Bri Holt according
to the [WHOIS records](http://whois.domaintools.com/ampify.com). Tav has emailed
him about buying the domain but hasn't heard anything back.
Similarly, `togethr.com` seems to be owned by Xchanging Global Insurance. Since
people tend to search it's not really a problem that we don't have these
domains, but they would be very nice to have.
**Done:**
The following domains have already been bought:
* `ampify.it` — the main Ampify domain.
* `ampifyit.com`, `ampify.org` , `ampify.net` — alternates.
* `espians.com` — the main Espians domain.
* `togethr.at` — the main Togethr domain.
* `togethrat.com`, `togetherat.com` — alternates.
",https://www.pivotaltracker.com/story/show/19751215
19748703,PayPal Business Account,#legal,,,,feature,,unscheduled,"Oct 17, 2011",,,tav,,"Given the tragic state of online payment processing, we are left with
[PayPal](https://www.paypal.com/) as our only viable option. If we were based in
the U.S. we could use various attractive offerings for handling credit cards:
* [Braintree](http://www.braintreepayments.com/)
* [Samurai](https://samurai.feefighters.com/)
* [Stripe](https://stripe.com/)
However those offerings are U.S. only. And, furthermore, credit card penetration
is still [abysmally low
internationally](http://corporate.visa.com/_media/ita-credit-card-report.pdf) —
even in countries like the Netherlands, Germany, &c.
In comparison, PayPal's user base is extremely attractive. So we need to:
* Setup a [PayPal business account](https://www.paypal-business.co.uk/).
* Verify it.
* Link it to our [business bank account](#business-bank-accounts).
But given the constant
[horror](http://notch.tumblr.com/post/1096322756/working-on-a-friday-update-crying-over-paypal)
[stories](http://www.reddit.com/r/reddit.com/comments/l4q2y/please_help_me_expose_this_newest_paypal_fraud/),
we should only use PayPal if we can establish a relationship high up within
their corporate structure. Perhaps someone like [Dan
Schatt](http://www.linkedin.com/pub/dan-schatt/1/96/961), their head of
Financial Innovations?
",https://www.pivotaltracker.com/story/show/19748703
19748695,Source Repositories,#devops,,,,feature,,unscheduled,"Oct 17, 2011",,,tav,,"For the reasons outlined in our [getting started with
git](http://ampify.it/getting-started-with-git.html#why-git) article, we need to
setup git repositories for Ampify and Togethr.
**Done:**
* [Ampify Repo](https://github.com/tav/ampify).
* [Togethr Repo](https://github.com/tav/togethr).
* Ask Tav if you'd like write access to any of the repositories.
",https://www.pivotaltracker.com/story/show/19748695
19748511,Business Bank Accounts,#legal,,,,feature,,unscheduled,"Oct 17, 2011",,,tav,,"We need business bank accounts for Espians LLP. Given their international
presence, [HSBC](http://www.hsbc.co.uk) would probably be the best choice for
our main account. As part of setting up the account, we should ensure:
* Online access is secured with, at minimum, two-factor authentication.
* Core Espians have access to the funds within predefined limits.
* Multiple currency accounts and
[forex](http://en.wikipedia.org/wiki/Foreign_exchange_market) risk management.
* Sub-accounts are setup so as to streamline accounting.
We should also hedge our reserves by taking advantage of multiple savings
accounts in various jurisdictions.
",https://www.pivotaltracker.com/story/show/19748511
19748507,Unlicense,#legal,,,,feature,,unscheduled,"Oct 17, 2011",,,tav,,"It is insane that we cannot simply declare our work to be in the [Public
Domain](http://en.wikipedia.org/wiki/Public_domain). The folk at CERN and Tim
Berners-Lee were able to place the first implementation of the Web into the
Public Domain with this simple document:
<div style=""text-align: center""><a
href=""http://tenyears-www.web.cern.ch/tenyears%2Dwww/Declaration/Page2.html""><img
src=""http://static.ampify.it/img.cern-public-domain-page-2.png""
width=""447px"" height=""552px"" alt=""Public Domain Document"" /></a>
</div>
Unfortunately we live in more complex times and have to take into account issues
like [moral rights](http://en.wikipedia.org/wiki/Moral_rights_(copyright_law))
and their implications.
Therefore we need a Public Domain declaration that also doubles up as a license
approximating it for the jurisdictions where one can no longer place works into
the Public Domain.
**Done:**
* A document based heavily on [Creative Commons
Zero](http://creativecommons.org/publicdomain/zero/1.0/) with additional
clauses for grant of patent rights has now been put together as our
[Unlicense](http://ampify.it/unlicense.html).
* It needs to be reviewed by an international intellectual property lawyer
though.
* Relatedly, we've proposed a Creative Commons Unlicense to our old friend [Mike
Linksvayer](http://wiki.creativecommons.org/User:Mike_Linksvayer), the current
Vice President of Creative Commons.
",https://www.pivotaltracker.com/story/show/19748507
19746541,Member Agreement (Constitution),#legal,,,,feature,,unscheduled,"Oct 16, 2011",,,tav,,"One of the advantages of [Limited Liability
Partnerships](http://www.legislation.gov.uk/ukpga/2000/12/contents) is that they
allow you to define your own Member Agreement. We need such a legal document to
act as the Espian Constitution for all members of [Espians
LLP](#item-incorporate-as-a-legal-entity).
Built around the principles of self-rule and autonomy, it should cover:
* The rights and obligations of individual members.
* The membership classes — from Open Members to Seeds/BDFLs.
* The trust-based architecture for governance and decision making.
* The pecus-based mechanism for reward and profit sharing.
* Mechanisms for making amendments, like in
[Nomic](http://en.wikipedia.org/wiki/Nomic).
* Mechanisms for handling issues like insolvency, acquisition, &c.
* Mechanisms for conflict resolution and healthy friction levels.
* Mechanisms for handling properties/assets.
* Dedicating intellectual property rights to the [Public
Domain](http://en.wikipedia.org/wiki/Public_domain).
* Mechanisms for doing transparent accounting and reporting.
* Any valuable lessons from [conventional
practices](http://www.lawgazette.co.uk/in-business/ten-important-provisions-include-your-partnership-or-llp-agreement).
In addition to drawing upon existing corporate governance work, we should also
look to:
* Progressive work like the [Chaordic Commons](http://www.chaordic.org/).
* National constitutions like the [Constitution of the United
States](http://en.wikipedia.org/wiki/United_States_Constitution).
* Frameworks like the [International Bill of Human
Rights](http://en.wikipedia.org/wiki/International_Bill_of_Human_Rights).
* Influential work like the [Federalist
Papers](http://en.wikipedia.org/wiki/Federalist_Papers).
* Notes like the [Common Economic Protocols](http://cep.metropipe.net/).
* Fictional work like the [Martian
Constitution](http://anti-state.com/forum/index.php?board=3;action=display;threadid=2564).
We have the expertise in-house to draw up the initial drafts, but we need to
have it finalised by a law firm. Perhaps our old lawyers at [DLA
Piper](http://www.dlapiper.com/) would be suited or perhaps a more specialised
firm?
",https://www.pivotaltracker.com/story/show/19746541
19746537,VAT Registration,#legal,,,,feature,,unscheduled,"Oct 16, 2011",,,tav,,"Given that we expect to pass the [VAT registration
threshold](http://www.hmrc.gov.uk/vat/start/register/when-to-register.htm) of
£73,000 relatively soon after launch, it seems worthwhile to voluntarily
[register with
HMRC](http://www.hmrc.gov.uk/vat/start/register/how-to-register.htm).
Once we've registered, we must make sure to charge VAT to all non-VAT registered
customers [within the
EU](http://en.wikipedia.org/wiki/European_Union_value-added_tax).
",https://www.pivotaltracker.com/story/show/19746537
19738145,Argonought: Python,"#argo, #python",,,,feature,,unscheduled,"Oct 16, 2011",,,tav,,"There needs to be a `ampify.argo` module providing a Python implementation of
the [Argonought serialisation format](#item-argonought-serialisation-format).
The core API should be:
* `argo.encode(object)`
* `argo.decode(stream)`
When performance becomes an issue, it might be worthwhile to leverage the
[extmodules
support](https://github.com/pypy/pypy/commit/22d94d09eb51fc6aa8c9415ba03421efed0d9141)
we've added to PyPy and implement the module directly in `RPython`.
",https://www.pivotaltracker.com/story/show/19738145
19737539,Argonought Serialisation Format,#argo,,,,feature,,unscheduled,"Oct 16, 2011",,,tav,,"There are hundreds of serialisation/exchange formats/protocols: [ASN.1][],
[Avro][], [BERT][], [BSON][], [Etch][], [Gob][], [Hessian][], [JSON][],
[MessagePack][], [Pickle][], [Protocol Buffers][], [S-Expressions][], [SOAP][],
[Thrift][], [Universal Binary JSON][], [XDR][], [XML-RPC][], [YAML][], &c.
They are all brilliant in their own way. But, unfortunately, none of them
offer the full set of features that we want:
* JSON-like simplicty.
* Efficient binary encoding.
* Rich set of builtin types -- currencies, geo-location, sets, &c.
* Optional streaming support.
* Support for synchronous/async calls.
* Ability to define arbitrary environment/headers.
* Architecture independent representation.
* No need to escape binary data.
* Lexicographically sortable encoding.
* Dynamic (No IDLs or code generation).
[BERT][] and BERT-RPC from GitHub are the closest existing format to the above
ideal. Unfortunately it doesn't support the much needed [lexicographically
sortable encoding](#item-lexicographically-sortable-representation-of-numbers)
or the full set of desired builtin types:
* `boolean`
* `bytestream`
* `currency`
* `datetime`
* `error`
* `float` — float64
* `handshake`
* `header`
* `identity`
* `int32`
* `int64`
* `item`
* `geopt`
* `link` — amp links
* `list`
* `map`
* `number` — decimals & arbitrary precision integers
* `request`
* `response`
* `route`
* `set`
* `storageref`
* `stream`
* `string` — utf-8 encoded
* `symbol`
* `transaction`
* `uint32`
* `uint64`
* `unit`
* `url`
We will therefore be defining a new serialisation format called Argonought — a
play on JSON and [the Argonauts](http://en.wikipedia.org/wiki/Argonauts) — that
will provide all of the desired functionality and support for the desired data
types.
It may also be worth pointing out the downsides to the
[CORBA](http://en.wikipedia.org/wiki/Common_Object_Request_Broker_Architecture)-esque
formats like Protocol Buffers and Thrift. These depend on specifications being
defined using an
[IDL](http://en.wikipedia.org/wiki/Interface_description_language) and code
being generated to support the specification in target languages.
This can definitely be attractive in certain contexts, but it can also prove to
be a right pain as developers have to take on the burden of constantly keeping
both the IDL generated code *and* the app code up-to-date at multiple locations.
For example, with Protocol Buffers, you'd have to first create a specification:
:::pb
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
}
Then you'd have to generate the code for your target languages before you can
start doing anything, e.g.
:::python
person = Person()
person.set_name(""John Doe"")
person.set_id(1234)
person.set_email(""jdoe@example.com"")
In contrast, consider the simplicity of JSON:
:::javascript
{ ""type"": ""Person"",
""name"": ""John Doe"",
""id"": 1234,
""email"": ""jdoe@example.com"" }
It allows for dynamic development as there's no intermediate step. And should
the developer wish to add a new field, there'd be no need to update the spec and
the generated code in all target languages before making changes to the actual
application code!
[ASN.1]: http://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One
[Avro]: http://hadoop.apache.org/avro/docs/current/
[BERT]: http://bert-rpc.org/
[BSON]: http://bsonspec.org/
[Etch]: https://cwiki.apache.org/ETCH/
[Gob]: http://golang.org/pkg/gob/
[Hessian]: http://hessian.caucho.com/doc/hessian-overview.xtp
[JSON]: http://www.json.org/
[MessagePack]: http://msgpack.sourceforge.net/
[Pickle]: http://docs.python.org/library/pickle.html
[Protocol Buffers]: http://code.google.com/p/protobuf/
[S-Expressions]: http://en.wikipedia.org/wiki/S-expression
[SOAP]: http://www.w3.org/TR/soap/
[Thrift]: http://incubator.apache.org/thrift/
[Universal Binary JSON]: http://ubjson.org/
[XDR]: http://www.rfc-editor.org/rfc/rfc4506.txt
[XML-RPC]: http://www.xmlrpc.com/
[YAML]: http://www.yaml.org/
",https://www.pivotaltracker.com/story/show/19737539
19727305,Lexicographically Sortable Representation of Numbers,#argo,,,,feature,,unscheduled,"Oct 15, 2011",,,tav,,"When dealing with numbers, most people don't care whether it's an unsigned
32-bit integer or a 128-bit decimal. Even programmers have been spoilt by
automatic type coercion in many dynamic languages, e.g.
:::irb
>> 1000000.class
=> Fixnum
>> 10000000000.class
=> Bignum
Unfortunately this support is not reflected in most datastores. App Engine, for
example, indexes strings up to 500 bytes in length but
[truncates](http://code.google.com/appengine/docs/python/datastore/typesandpropertyclasses.html#IntegerProperty)
integer values greater than 64 bits.
If one were to try and encode the number as a string to take advantage of the
extra space, the naive approach fails quite quickly:
:::irb
>> '9' > '8'
=> true
>> '1000' > '9'
=> false
The official documentation for SimpleDB even
[recommends](http://developer.amazonwebservices.com/connect/entry.jspa?categoryID=152&externalID=1232)
the usual tricks of negative-number offsetting and zero padding as a solution to
this problem:
:::irb
>> '1000' > '0009'
=> false
But this approach gets a massive FAIL since it requires not only having to
predefine the largest possible value (the exact problem we're trying to avoid!),
but also ends up wasting a lot of space due to the zero padding.
In order to support numeric values in our datastore, we need an efficient
representation of arbitrary precision integers that maintains natural numeric
order when [sorted
lexicographically](http://en.wikipedia.org/wiki/Lexicographical_order). Ideally,
it would also be able to handle reasonably high precision decimals too.
**Done:**
:::pycon
>>> argonought.pack_number(8234364) # takes just 3 bytes!
'\xfe\xa2\xa0'
>>> argonought.pack_number(8234364) > argonought.pack_number(-234364)
True
* As part of Argonought, we have defined and implemented such an encoding.
* It can handle, subject to memory limits, numbers of whatever size — including
decimals like `1.40498442367601246105`.
* The precision of decimal values is limited to 20 digits after the decimal
point. This currently wastes spaces and we may want to improve upon this.
",https://www.pivotaltracker.com/story/show/19727305
19725423,Browser Support,"@tav, #js",,,,feature,,unscheduled,"Oct 15, 2011",,,tav,,"Togethr depends on a lot of modern ""[HTML5](http://www.html5rocks.com/)""
features. And given the significant use of client side processing, we can only
offer a smooth user experience on relatively modern browsers with fast
JavaScript interpreters.
Therefore, we need a `browser.supported()` function which will do [feature
detection](http://www.quirksmode.org/js/support.html) for functionality like:
* [Canvas](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html)
* [CSS3](http://www.w3.org/TR/CSS/)
* [HTML5 History](http://www.w3.org/TR/html5/history.html)
* [JSON](http://www.ecma-international.org/publications/standards/Ecma-262.htm)
* [Typed Arrays](http://www.khronos.org/registry/typedarray/specs/latest/)
* [Web Messaging](http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html)
* [Web Sockets](http://www.w3.org/TR/websockets/)
* [Web Storage](http://www.w3.org/TR/webstorage/)
* [Web Workers](http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html)
* [XMLHttpRequest2](http://www.w3.org/TR/XMLHttpRequest2/)
Given the requirements, we will probably only be supporting the following
browsers:
* IE 10+
* iOS Safari 5+
* Chrome 14+
* Firefox 6+
* Opera 12+
* Safari 5.1+
For all other browsers, we need a `browser.upgrade()` function which will prompt
the user to upgrade to a more modern browser for their OS. And for those with
JavaScript disabled, we need a similar message within the main template's
`<noscript>` tag.
",https://www.pivotaltracker.com/story/show/19725423
19594627,Incorporate as a Legal Entity,#legal,,,,feature,,unscheduled,"Oct 12, 2011",,,tav,,"Of the various legal forms available within England, [Limited Liability
Partnerships](http://www.legislation.gov.uk/ukpga/2000/12/contents) offer us the
most advantage:
* Flexibility in defining our own member agreement.
* Tax transparency.
* Ability to act as a holding vehicle.
We need to register ""Espians LLP"" with [Companies
House](http://www.companieshouse.gov.uk) in England & Wales. The founding
partners will be:
* Tav (Vageesan Sivapathasundaram)
* Inderpaul Johar
* James Arthur
* Mamading Ceesay
* Nick Ierodiaconou
For purposes of collecting payments through U.S. merchant accounts as provided
by the likes of [Braintree](http://www.braintreepayments.com), we may need to
incorporate a U.S. subsidiary. Perhaps a
[C-Corp](http://en.wikipedia.org/wiki/C_corporation) would be suitable for this.
Setting up such a subsidiary would require advice on issues like [transfer
pricing rules](http://en.wikipedia.org/wiki/Transfer_pricing) and [avoiding
double
taxation](http://en.wikipedia.org/wiki/Tax_avoidance_and_tax_evasion#Tax_avoidance).
We may even be able to get advice from the [IRS](http://www.irs.gov/) directly.
",https://www.pivotaltracker.com/story/show/19594627
19441331,Design Overview,#design:overview,,,,feature,,unscheduled,"Oct 9, 2011",,,tav,,"The design is going to be awesome!
",https://www.pivotaltracker.com/story/show/19441331
19400945,Togethr Overview,:overview,,,,chore,,unscheduled,"Oct 7, 2011",,,tav,,"Togethr is the future and it is going to be powered by
[Ampify](http://ampify.it), a decentralised application platform. This planfile
documents the initial release.
If you find this interesting and enjoy hacking on open source projects, do join
us on the `#esp` channel on `irc.freenode.net`.
",https://www.pivotaltracker.com/story/show/19400945
18913101,Node Track Usage & Logging,"",,,,feature,,unscheduled,"Sep 27, 2011",,,James Arthur,,n.b.: S3 PutObject permission,https://www.pivotaltracker.com/story/show/18913101
18660599,Payment API Client,"",,,,feature,,unscheduled,"Sep 22, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18660599
18480029,"""Fast Switch"" User","",,,,feature,,unscheduled,"Sep 19, 2011",,,James Arthur,,"Cumulative logged in: you're authenticated as multiple users at any time. The current/active user is specified *per tab* by:
* adding an id to the end of the #hash (interpretable on a refresh)
* sending the id along with the xsrf token
Keep auth users list in sync between tabs. Retain remaining duration of cookie when updating.
On reload:
* if token matches auth user, use it to apply state
* if not, strip it out (replace with first auth user)
In api handler:
* make sure id matches one of the authenticated users",https://www.pivotaltracker.com/story/show/18480029
18481215,Connect social media accounts.,"",,,,feature,,unscheduled,"Sep 19, 2011",,,James Arthur,,"We allow user to connect TW, FB, Google Calendar:
* pull in data when signing up / setting profile
* ingest social graph & suggest connections
* option to post out messages / set event
* authorise apps to access post out functionality",https://www.pivotaltracker.com/story/show/18481215
18474779,Incoming Replies,"",,,,feature,,unscheduled,"Sep 19, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18474779
18474229,Email Notifications,"",,,,feature,,unscheduled,"Sep 19, 2011",,,James Arthur,,"http://sendgrid.com/
",https://www.pivotaltracker.com/story/show/18474229
18473259,Upload files via S3,"",,,,feature,,unscheduled,"Sep 19, 2011",,,James Arthur,,"Raw files on S3.
Cache thumbs / previews (etc.) in disk cache, e.g.: Haystack / bitcask.
Force mimetypes.",https://www.pivotaltracker.com/story/show/18473259,"They recently added automated encryption support. (tav - Oct 6, 2011)"
18481207,Avatar select from connected services.,avatar,,,,feature,,unscheduled,"Sep 19, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18481207
18471113,Avatar resize / cache / serve.,avatar,,,,feature,,unscheduled,"Sep 19, 2011",,,James Arthur,,"Use `user.key()` and `user.modified` to generate an image serving url. This is served with a 2 week max-age header and cached in the browser.
When we do a query / any server side api function that gets items, we do::
:::python
for item in results:
accumulate(by, from, refs) # refs e.g.: `~tav/thruflo`
for item in accumulated:
get_pref_nick_and_modified(item)
Return the data to the client side where the js api function we provide to the apps generates a serving url.
The handler for the serving url knows:
* user.key()
* user.modified
* x
* y
Does::
user = cache.get or db.get
serve cache resize user.avatar
invalidate `user/*` cache on user.put.
",https://www.pivotaltracker.com/story/show/18471113
18470177,Optimise db package field names,"",,,,feature,,unscheduled,"Sep 19, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18470177
18394891,Node.js OpenSSL,"",,,,feature,,unscheduled,"Sep 16, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18394891
18208507,Aliases,"",,,,feature,,unscheduled,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208507
18208505,Address Book,"",,,,feature,,unscheduled,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208505
18208327,Javascript Big Decimal,"",,,,feature,,unscheduled,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208327
18208287,Braintree Setup,"",,,,feature,,unscheduled,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208287
18208311,Braintree Integration,"",,,,feature,,unscheduled,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208311
18208523,Amp Creds,"",,,,feature,,unscheduled,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208523
18596945,Appreciation,"",,,,feature,,unscheduled,"Sep 21, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18596945
18208517,Subscriptions,"",,,,feature,,unscheduled,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208517
18208295,Terms of Service and Privacy Policy,#legal,,,,feature,,unscheduled,"Sep 13, 2011",,,James Arthur,,"We need to have a decent [terms of
service](http://en.wikipedia.org/wiki/Terms_of_service) and [privacy
policy](http://en.wikipedia.org/wiki/Privacy_policy) for Togethr. They should be
easily readable and focus on giving users as much control as possible while
minimising our exposure to litigation.
There are a number of resources under the Creative Commons that we could use as
a starting point:
* [WordPress Terms of Service](http://en.wordpress.com/tos/)
* [Automattic Privacy Policy](http://automattic.com/privacy/)
But the final version needs to be reviewed by an appropriate law firm — making
sure to avoid any [costly
punctuation](http://www.theglobeandmail.com/report-on-business/article838561.ece).
",https://www.pivotaltracker.com/story/show/18208295
18208481,Usage Tracking,"",,,,feature,,unscheduled,"Sep 13, 2011",,,James Arthur,,,https://www.pivotaltracker.com/story/show/18208481
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment