The document discusses the author's concerns about privacy and centralization on the internet and social media platforms. It then describes a project called "Klatsch" that the author has started to build as an alternative. Klatsch is being developed in Go and is intended to provide a decentralized way to archive, search, and share content across social networks. The author hopes others will also create their own tools to address these issues and that the tools could potentially work together.
4. is there anybody in here that hasn't heard that? you're the product.
image: https://c1.staticflickr.com/7/6170/6185789175_41f41c843d_z.jpg
5. and i don't mean to just pick on Facebook here -- the "you're the product" business model is industry standard.
image: https://twitter.com/danlyke/status/529826711324876802
6. hell, even if you _are_ paying for a service, that doesn't stop the service owner from making you into the product
image: http://www.forbes.com/sites/kashmirhill/2014/10/28/att-says-its-testing-unkillable-tracker-on-customers-smartphones/
7. My name is John and
this is my manifesto
i have feels.
8. many feels
image: http://www.hnldesign.nl/wp-content/uploads/2013/02/The-Manifesto-Manifesto.jpg
9. We're nerds.
We can do better.
the people in this room have the ability to do things that not many people can do. we need to step up and do something about this.
10. We can do better for our
friends and family too.
and we need to do it in such a way that we lift up the people we care about. we can't just make tools for ourselves, we have to make tools for normal people too.
11. Some recent
exemplary efforts
not everything is bad news. there are other people that have started trying to do stuff about this too.
15. see, here's the thing -- the internet didn't use to be like this.
image: http://img1.wikia.nocookie.net/__cb20110515062056/simpsons/images/3/38/Abe.png
16. i got on the internet in 1989. i read usenet groups on a vt220 at the university of iowa. (before endless september!)
image: http://i.imgur.com/2MhE2.jpg
17. years later, in 1998, i started one of the first weblogs and was part
of an incredibly active and vibrant community that was convinced -- at least some of us were convinced -- that what we were doing, sharing our thoughts and cross-linking
things and snarking about politics -- was going to change everything.
left: http://www.theage.com.au/ffximage/2007/04/06/svBLOG_narrowweb__300x506,0.jpg
right: http://robiospeaks.files.wordpress.com/2010/06/peter-merholz.png
19. except for the comments. i apologize for the whole commenting thing, in retrospect it was a really bad idea.
image: https://img0.etsystatic.com/011/0/7887463/il_fullxfull.438911204_gfot.jpg
20. so enough "good old days" nonsense. i pointed out some people that were trying to do something about this -- what am _i_ trying to do?
image: no idea. i am a bad person and i feel bad.
21. there are a number of things i have on my todo list for 2015: moving away from google, replacing "free" services with services i pay for, or even better, write myself.
image: https://i.imgflip.com/bjr2p.jpg
22. but for this talk, i want to focus on twitter.
image:http://edudemic.com/wp-content/uploads/2013/04/twitter1.gif
23. I ❤️ Twitter.
i really like twitter-the-service. i'm on twitter a _lot_. twitter has helped me hire people, it's been essential in making friends after i moved across the country a couple
years ago, and it's how i keep up with the vast majority of my friends.
24. I ⃠❤️ Twitter.
i'm not quite as big a fan of twitter-the-company. they don't seem to have a great idea of what direction they're going in, and their attempts at monetization and attracting
new users have me increasingly concerned for the future of twitter-the-service.
25. Thinking about solutions.
Or even just mitigations.
Options.
Escape hatches.
so i'm thinking about ways to solve those problems, or even just reduce them. thinking about where i could go, if it came down to that. thinking about what would be in
my "go bag".
26. Inspiration.
one of the best benefits of my job is getting to hang out with people that make me want to do better.
31. • Archive
• Search
• Potential Escape Hatch
• Feed reading / management
• Posting (micro- and macro-blogging)
• RSS reader
• Hub for online social activity in general
32. • Archive
• Search
Note: almost all
currently aspirational...
• Potential Escape Hatch
• Whole Feed
• Posting (micro- and macro-blogging)
• RSS reader
• Hub for online social activity in general
33. Most importantly:
Easy deployment.
I want other people to be able to run their own copies of this software too. Centralization of this sort of thing provides an incentive towards silo-a-zation, and that's the
beginning of the bad times.
46. package
main
import
(
"fmt"
"github.com/spf13/cobra"
)
func
main()
{
var
cmdFetch
=
&cobra.Command{
Use:
"fetch",
Short:
"fetch",
Long:
"long
fetch",
Run:
fetch,
}
var
Force
bool
cmdFetch.PersistentFlags().BoolVarP(&Force,
"force",
"F",
false,
"build
HTML
page
even
if
nothing
has
changed")
var
cmdImportTweets
=
&cobra.Command{
Use:
"import_tweets",
Short:
"import",
Long:
"long
import",
Run:
func(cmd
*cobra.Command,
args
[]string)
{
fmt.Println("import_tweets
not
implemented
yet.")
},
}
...
var
rootCmd
=
&cobra.Command{Use:
"klatsch"}
rootCmd.AddCommand(cmdFetch,
cmdImportTweets,
cmdInit,
cmdSearch,
cmdServer)
rootCmd.Execute()
}
47. import
(
...
"github.com/ChimeraCoder/anaconda"
"github.com/spf13/cobra"
)
func
fetch(cmd
*cobra.Command,
args
[]string)
{
var
force
bool
=
false
if
cmd.Flag("force").Value.String()
==
"true"
{
force
=
true
}
exitUnlessDatabaseExists()
db
:=
getDatabaseHandle()
defer
db.Close()
twitter
:=
getTwitterApiHandle(db)
v
:=
url.Values{"count":
{"200"}}
timeline,
err
:=
twitter.GetUserTimeline(v)
if
err
!=
nil
{
log.Fatal(err)
}
inserted,
err
:=
saveTimeline(db,
timeline)
if
err
!=
nil
{
log.Fatal(err)
}
if
force
||
inserted
>
0
{
if
err
=
writeOutTimeline(db);
err
!=
nil
{
log.Fatal(err)
}
}
}
48. import
(
...
"github.com/ChimeraCoder/anaconda"
"github.com/spf13/cobra"
)
func
fetch(cmd
*cobra.Command,
args
[]string)
{
var
force
bool
=
false
if
cmd.Flag("force").Value.String()
==
"true"
{
force
=
true
}
exitUnlessDatabaseExists()
db
:=
getDatabaseHandle()
defer
db.Close()
twitter
:=
getTwitterApiHandle(db)
v
:=
url.Values{"count":
{"200"}}
timeline,
err
:=
twitter.GetUserTimeline(v)
if
err
!=
nil
{
log.Fatal(err)
}
inserted,
err
:=
saveTimeline(db,
timeline)
if
err
!=
nil
{
log.Fatal(err)
}
if
force
||
inserted
>
0
{
if
err
=
writeOutTimeline(db);
err
!=
nil
{
log.Fatal(err)
}
}
}
You can take the
boy out of Perl...
49. import
(
...
"github.com/ChimeraCoder/anaconda"
"github.com/spf13/cobra"
)
func
fetch(cmd
*cobra.Command,
args
[]string)
{
var
force
bool
=
false
if
cmd.Flag("force").Value.String()
==
"true"
{
force
=
true
}
exitUnlessDatabaseExists()
db
:=
getDatabaseHandle()
defer
db.Close()
twitter
:=
getTwitterApiHandle(db)
v
:=
url.Values{"count":
{"200"}}
timeline,
err
:=
twitter.GetUserTimeline(v)
if
err
!=
nil
{
log.Fatal(err)
}
inserted,
err
:=
saveTimeline(db,
timeline)
if
err
!=
nil
{
log.Fatal(err)
}
if
force
||
inserted
>
0
{
if
err
=
writeOutTimeline(db);
err
!=
nil
{
log.Fatal(err)
}
}
}
62. Or write your
own tool!
(and then we can figure out
how to make them work
together!)
http://treasure.diylol.com/uploads/post/image/399053/resized_jesus-says-meme-generator-jesus-says-do-it-yourself-ffe55f.jpg