Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: Twtxt – Decentralised, minimalist microblogging service for hackers (github.com/buckket)
154 points by buckket on Feb 5, 2016 | hide | past | favorite | 65 comments



Roughly, the .plan or .project file from finger?

In Unix, finger is a program you can use to find information about computer users. It usually lists the login name, the full name, and possibly other details about the user you are fingering. These details may include the office location and phone number (if known), login time, idle time, time mail was last read, and the user's plan and project files. The information listed varies, and you may not be able to get any information from some sites.

In some cases, you may be able to use the finger command to verify an address or find more information for someone at another institution about whom you already have some information. The finger command is available on most Unix systems. It differs from the whois command, which you can use simply to find the email address of someone at another institution.

To use finger, at your Unix prompt, enter:

    finger username@node.domain
Replace node.domain with the appropriate machine and domain address, and username with the name of the person or the person's username, for example:

    finger dvader@mentor.cc.purdue.edu
See: https://kb.iu.edu/d/aasp


I think you're being DV'd because people think you're saying "this is just finger." But I think you're actually reminding people of that old service, which won't be familiar to newer generation, and was ubiquitous back in the day.


And there are still 4,000+ servers running it publicly:

https://www.shodan.io/report/ohcbBDbi

For comparison: finger[1] is more common on the Internet than Apache Cassandra[2].

[1] https://www.shodan.io/search?query=port%3A79+idle

[2] https://www.shodan.io/search?query=product%3Acassandra


A bunch of game developers had .plan files back in the late 90s, but we Windows users had to visit a third-party site to view John Carmack's .plan because Windows didn't have a finger client.

This is better than finger in some ways — it's not multiline-capable as written, but at least clients can consume .txt files with near-universal tools (web browsers).


I still remember reading John Carmack's _amazingly_detailed_ and interesting .plan files back when I was in college.


Check out Freenet (https://freenetproject.org/), it is the perfect platform for implementing static content social media like this. There is already a decent microblogging plugin called Sone which works out of the box and handles unique names, Web of Trust, etc.

https://wiki.freenetproject.org/Sone


I’ve been using Sone for years, and once the Spam-blocking in Freenet is set up (this provides reusable IDs), Sone works great and is a joy to use.


Just hacked together a prototype for a hosted twtxt server in Go: http://github.com/plomlompom/htwtxt

This could be used to allow server-less users to login and twt via a browser to URLs hosted by someone running the server. I'm still pretty new to Go and building / setting up web servers, so don't expect too much (expect session/cookie handling to be messy, and security in general to be bad).

I set up a quick testing version at (http) http://test.plomlompom.com:8000/ and (https, bad certificate) https://test.plomlompom.com:8001/ – just for testing and playing around, don't expect anything hosted there to be up for too long.


Seems like something like this would be a perfect use case for IPFS[0], although I bet there already is something similar for it out there.

[0] https://ipfs.io/


I made a prototype aggregator: https://twtxtlist.cf/

It's written in Nim and is probably good enough.


Cool, added a link to it in twtxt’s README.


Also: https://quitter.se/ (StatusNet/GNU social)


So how does this compare to Sone and Twister?

I know both of those services are P2P but beyond that not much.


GNU Social isn't P2P, but federated. You don't have to host your own node to be able to use it, which massively raises the barrier to entry, but instead lets you register on any server in the federation as an entry point into the network.

There are both upsides and downsides, of course. It's more centralized along with having censorship by your hosting node. However, it doesn't force you to leak your IP address to attackers or run software and be a sysadmin, along with saving bandwidth. It also doesn't have some of the difficulties that proper P2P does: Twister is on top of Bitcoin (costs to use) while Sone is over Freenet (Sybil attacks and routing issues)


Twister is derived from Bitcoin, but actually uses its own fork.

IIRC, the blockchain is used to store account credentials and nothing else.


Similar, but based on git: https://github.com/wilhelmtell/dis


is it me or is this going to result in massively long data files that you KEEP having to re-downloading in their entirety every time you want to get an update from someone you follow?


This could be solved by archiving/rotating old entries, and have the webserver return the n latest.

For instance, you could let nginx do this:

  location /masukomi.txt {
     default_type 'text/plain';
     content_by_lua 'local tail = io.popen("tail -n 20 ".."/chroot/twtxt/masukomi.txt", "r")
     for line in tail:lines() do
       print(c, line)
     end
     ';
  }


The problem is that if you didn't fetch the file at the right time, you will lose some history after rotation happens. At the very least, it needs a standard way to deal with that (like a mandated date-based URL format?), which has to be specified in the format.

Also, no DM and no @-replies. For those, you need a registry of some sort, but decentralized registries enable name-squatting.

Before you know it, you have reinvented the WWW, except limited to 140 chars.


> if you didn't fetch the file at the right time, you will lose some history after rotation

Very true, and that's a trade-off, not unlike what Twitter does today. In my pseudo-code I didn't make the -n part of the url (it easily could be, but that'd add changes to the client). So I agree with your criticism, but a "since" lookup would be a fairly easy extension of the client (i.e. part of query, so unsupported frontends still work), as the data file already contains date.

> Before you know it, you have reinvented the WWW

Yes. :)


No need for all this complication.

Simply use IPFS[1] instead as the underlying protocol.

[1] https://ipfs.io/


Yup that's an issue. Their should be more control on how the data is stored. I like the concept tho.


Can't you just use an HTTP range request?


Yes, should be possible. But then again you would have to specify an ordering, i.e. are newer status updates at the top or at the bottom.



It can help to avoid re-downloading a timeline that didn’t change but you’ll still have to re-download the whole file for each new status.


Make the ETAG the size, send a range request for only the bytes you haven't seen already?


This is nice as long as nobody changes old status updates. Thought about using If-Modified-Since to at least reduce the load when nothing has changed at all.

But still: It will definitely take some time till a "twtxt timeline" causes more traffic than browsing the current Twitter homepage. :3


Are the nicknames created by each follower independently? In other words, would http://bobsplace.xyz/twtxt be bob for me but bobsplace for somebody else? How do @replies work then?

This looks really neat. I'm put off by the python requirement, but this seems simple enough that I might try to put a C client together, or even something in my new language that I've been meaning to add networking libraries to..


Yes, it’s up to each user how he names the URLs he’s following.

This makes it hard to implement global @replies, therefore there’s no recommend way of handling those at the moment. You could just write "@<NICK>:" and hope that the person you had in mind follows you and feels concerned.


I see. So by default all @mentions show up on all followers' timeline, just like regular tweets?


Yes, because there is no difference between an @reply and an ordinary tweet. Not technically at least. It’s just text. But implementing a filter on your side should be trivial if that’s what you want.

Maybe I’ll implement something which makes it easy for users to specify custom filters and/or highlights.


Given the decentralized nature, it'd be nice to parse any @reply , add metadata that indicates the full URL, and thus translate into a local user's nicknames.


Should be easy to add metadata by convention inside the messages, appended to them following some kind of control string, like "META". Clients could interpret anything from that string on by rules yet to be defined.


It would be great if there was a directory of users.

I'd use it if I knew people in my network or people I'd be interested in following were already using it.


Yeah, sounds great in the first place, but then again you’d have to consider how one would implement such a list without the need of registering an account or something of that sort.

My friends and I are basically sharing our followings publicly in a separate text file next to the main one, so we can discover new people.


Not sure I'd want to be in a directory, but wouldn't mind if someone queried based on my email address.

How about a DHT where sha160(emailaddress) would return the URL I use. Could even use the mainline torrent DHT.


Brute-forcing email addresses doesn't seem particularly hard, and a mechanism like that would then allow checking for email address validity and corresponding URL.


How would you prevent people from registering email addresses they don't own?


I like this too, but it is pretty hard to use without a directory, so I created a simple one here where you can register your username: http://twtxt.reednj.com


Just improvised something (probably temporary) here: http://test.plomlompom.com/twtxt/account_list.txt


Why not try https://twtxtlist.cf/?


It's really cool. What happens if you add a new tweet with a date in the past? Isn't a bit weird to be able to change the history?


It hasn't proven to be a problem for email, where the dates are also completely up to the sender to fabricate.


Has there ever been a product or service which has billed itself as "X for hackers" which has actually been successful?


I guess most of the time being "successful" is not the point.


How about hacker news?


Octopress (http://octopress.org/) seems like it's still fairly popular.


linux?


was it actually billed as that when it was created?


Yes, quite literally:

  This is a program for hackers by a hacker.
-- Linus, on the comp.os.minix newsgroup, in 1991

https://groups.google.com/forum/#!msg/comp.os.minix/4995SivO...


I don't understand why anyone would want to go to the trouble to do this. It feels like a huge step backwards.


Yeah. What is the benefit of using twtxt? Ok, it's decentralized, but what actual benefit does that bring? Just anybody can't see what you are saying? But is the communication encrypted somehow?

Don't get me wrong, this is a cool idea and I'm all for building stuff 'just because', but I wouldn't it be just simpler/better to create cli wrapper for Twitter? (which probably exists). That all being said I'm not a big Twitter user, so maybe I'm missing some vital point here that is obvious to regular 'microbloggers'


> What is the benefit of using twtxt? Ok, it's decentralized, but what actual benefit does that bring?

Right now Twitter is up in arms about proposed changes which make users not have control over their feeds; there will be algorithmic curation so you only see the most popular content from your followers. "Just create a CLI wrapper" only works assuming the APIs are not effected by the changes they are making to the main product, which doesn't really make sense.


So why not just make a Twitter clone? As in a website that had same functionality? This extra CLI abstraction will just make it harder to adopt, which again might be by design, but at that point a question comes to mind: why not just start a newgroup-ish email feed?

Again I don't quite get what Twitter is for, so maybe I'm missing something, but at least the publicity isn't an issue here since this seems to make it pretty hard to actually find people to follow.


> why not just start a newgroup-ish email feed?

Have you ever tried to run a mail server before? It's a nightmare wrapped in a fiasco.


Maybe because some people want a Twitter alternative that isn't under the control of a single individual, company or group? There's an increasing amount of talk about Twitter trying to censor things that the management doesn't like hearing about, so perhaps some people might prefer a service or system where no one can control what can be said.

Still a few issues though. Like how to overcome the whole network effect thing. These systems aren't very useful unless there's a large audience, and it's hard to draw a large audience if no one's there to begin with.


i really hate the bells and whistles in most apps these days. even as i build them.

hack chat is kind of nice. same "minimalist" feel https://news.ycombinator.com/item?id=10036770


"Decentralised"? How is this different from a static site generator and an RSS reader?


It’s simpler, but it shares similarities, no doubt.


actually... it seems more complicated. Existing tech: use existing tools written in your language / usage style of choice to generate a site. Consume with one of probably hundreds of RSS readers from which you can pick the one you like the most. this: new tool, not supported by existing apps, glaring limitations, requires non-default python dev environment, etc. etc...


It asks you to enter a username when you set it up, but when you follow someone you have to set a username for them yourself. Am I missing something? It seems that the username is never exposed


Is the name related to TUWAT.TXT[1] by any chance?

[1]: https://berlin.ccc.de/wiki/TUWAT.TXT


Funny thinking about it, but no. It's just a combination of "twitter" and "txt".


Made me think of http://bitcoinmegaphone.com/




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: