SlideShare uma empresa Scribd logo
1 de 66
Baixar para ler offline
With Great Power 
Comes Great Responsibility 
John SJ Anderson § @genehack 
PPW2014 § 2014-11-08
Nerder y 
With Great Power 
Comes Great Responsibility 
John SJ Anderson § @genehack 
PPW2014 § 2014-11-08
image: http://25.media.tumblr.com/tumblr_m69bglG75B1r72cw7o1_500.jpg
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
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
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/
My name is John and 
this is my manifesto 
i have feels.
many feels 
image: http://www.hnldesign.nl/wp-content/uploads/2013/02/The-Manifesto-Manifesto.jpg
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.
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.
Some recent 
exemplary efforts 
not everything is bad news. there are other people that have started trying to do stuff about this too.
ftrain's tilde.club 
screencap by speaker
brennen's squiggle.city 
screencap by speaker
full of stuff that looks like this.
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
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
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
and we were right. 
photo: stevan little
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
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.
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
but for this talk, i want to focus on twitter. 
image:http://edudemic.com/wp-content/uploads/2013/04/twitter1.gif
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.
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.
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".
Inspiration. 
one of the best benefits of my job is getting to hang out with people that make me want to do better.
http://micro.sartak.org/
• Archive 
• Search 
• Potential Escape Hatch 
great, because it does the stuff that shawn wanted it to do.
doesn't do everything i want though.
So I started writing 
Klatsch.
• Archive 
• Search 
• Potential Escape Hatch 
• Feed reading / management 
• Posting (micro- and macro-blogging) 
• RSS reader 
• Hub for online social activity in general
• 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
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.
Which, yes, means:
Not Perl 
Perl deployments are horrible.
#sorry
#sorrynotsorry
Best deployment story 
around, currently:
Go.
Go (aka golang) 
• Statically typed (w/inference) 
• Compiled (cross-platform) 
• C-like syntax & design 
• Garbage collected 
• Excellent concurrency support 
• Interesting approach to OO
But, most importantly: 
Statically-linked. Binaries. 
Deployment == trivial.
package 
main 
import 
"fmt" 
func 
main() 
{ 
fmt.Print("Hello 
world") 
} 
this is hello world in go.
% 
ls 
-­‐sh 
hello 
1.8M 
hello* 
static linking == big binaries
but it doesn't matter. 
image: http://www.quickmeme.com/img/3b/3b0241c9f06118600eaa2271ac5a0e11c619bc72a2a547d6883c8f62a2dc7a58.jpg
So... 
Klatsch.
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() 
}
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) 
} 
} 
}
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...
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) 
} 
} 
}
Live demo!
Live demo! 
(safest live demo evar.)
<!DOCTYPE 
html> 
<html 
lang="en" 
data-­‐ng-­‐app="klatsch"> 
<head> 
<meta 
charset="utf-­‐8"> 
<title>Klatsch!</title> 
<link 
href="css/bootstrap.min.css" 
rel="stylesheet"> 
<link 
href="css/klatsch.css" 
rel="stylesheet"> 
</head> 
<body> 
<div 
class="container"> 
<div 
class="col-­‐md-­‐3"></div> 
<div 
class="col-­‐md-­‐6"> 
<h1>Postin'</h1> 
<twitter-­‐input></twitter-­‐input> 
</div> 
<div 
class="col-­‐md-­‐3"></div> 
</div> 
<div 
class="footer"> 
<div 
class="container"> 
<p 
class="text-­‐muted">Powered 
by 
Klatsch!</p> 
</div> 
</div> 
<script 
src="http://code.angularjs.org/1.2.26/angular.min.js"></script> 
<script 
src="js/directives.js"></script> 
</body> 
</html>
<!DOCTYPE 
html> 
<html 
lang="en" 
data-­‐ng-­‐app="klatsch"> 
<head> 
<meta 
charset="utf-­‐8"> 
<title>Klatsch!</title> 
<link 
href="css/bootstrap.min.css" 
rel="stylesheet"> 
<link 
href="css/klatsch.css" 
rel="stylesheet"> 
</head> 
<body> 
<div 
class="container"> 
<div 
class="col-­‐md-­‐3"></div> 
<div 
class="col-­‐md-­‐6"> 
<h1>Postin'</h1> 
<twitter-­‐input></twitter-­‐input> 
</div> 
<div 
class="col-­‐md-­‐3"></div> 
</div> 
<div 
class="footer"> 
<div 
class="container"> 
<p 
class="text-­‐muted">Powered 
by 
Klatsch!</p> 
</div> 
</div> 
<script 
src="http://code.angularjs.org/1.2.26/angular.min.js"></script> 
<script 
src="js/directives.js"></script> 
</body> 
</html>
directive("twitterInput", 
function 
() 
{ 
return 
{ 
restrict: 
"E" 
, 
replace: 
true 
, 
templateUrl: 
"./twitter_input.html" 
, 
controller: 
function($scope,$timeout) 
{ 
$scope.error 
= 
function(name) 
{ 
var 
form 
= 
$scope.form[name]; 
return 
form.$invalid 
&& 
form.$dirty 
? 
"has-­‐error" 
: 
""; 
}; 
}, 
scope: 
{} 
}; 
})
<form 
name="form" 
role="form"> 
<div 
class="form-­‐group" 
data-­‐ng-­‐class="error('postfield')"> 
<div 
class="controls"> 
<input 
type="text" 
name="postfield" 
class="form-­‐control" 
data-­‐ng-­‐trim=false 
counted-­‐max="140" 
data-­‐ng-­‐model="post.content" 
placeholder="Compose 
new 
tweet" 
/> 
</div> 
<div 
class="pull-­‐right" 
style="margin:5px 
0;"> 
<span 
class="help-­‐block 
inline-­‐display" 
data-­‐ng-­‐show="form.postfield.$error.unique"> 
Post 
is 
too 
long! 
</span> 
<span 
class="count" 
style="margin-­‐right:5px" 
data-­‐ng-­‐class="error('postfield')"> 
{{140 
-­‐ 
post.content.length}} 
</span> 
<button 
class="btn 
btn-­‐primary" 
data-­‐ng-­‐click="postToTwitter(account)" 
data-­‐ng-­‐disabled="!form.$valid"> 
Post 
to 
Twitter 
</button> 
</div> 
</div> 
</form>
.directive("countedMax", 
function() 
{ 
return 
{ 
require: 
"ngModel" 
, 
restrict: 
"A" 
, 
link: 
function(scope,element,attrs,ngModelCtrl) 
{ 
var 
maxlength 
= 
Number(attrs.countedMax); 
function 
fromUser(text) 
{ 
ngModelCtrl.$setValidity( 
'unique', 
text.length 
<= 
maxlength 
); 
return 
text; 
} 
ngModelCtrl.$parsers.unshift(fromUser); 
} 
}; 
})
Live demo 2: search
So that's what I'm 
trying to do about it.
what can _you_ do about it? 
image: http://memestorage.com/_nw/21/04359364.jpg
Just use the 
app and give 
me feedback. 
once it's ready, I mean. 
image: http://memestorage.com/_nw/21/04359364.jpg
http://www.poststat.us/wp-content/uploads/2013/12/patches-welcome-752x361.jpg
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
Reminder.
http://lesquestionscomposent.fr/wp-content/uploads/2013/03/23353915.jpg
https://github.com/genehack/klatsch
https://github.com/genehack/klatsch 
questions?

Mais conteúdo relacionado

Mais procurados

Optical Illusions
Optical IllusionsOptical Illusions
Optical Illusionsteganr4
 
第一次程式親密接觸
第一次程式親密接觸第一次程式親密接觸
第一次程式親密接觸彼得潘 Pan
 
Graph API - Facebook Developer Garage Taipei
Graph API - Facebook Developer Garage TaipeiGraph API - Facebook Developer Garage Taipei
Graph API - Facebook Developer Garage TaipeiCardinal Blue Software
 
Social 101: Introduction to Google Buzz
Social 101: Introduction to Google BuzzSocial 101: Introduction to Google Buzz
Social 101: Introduction to Google BuzzWill Norris
 
The New Rules of Site Architecture - Martin MacDonald, Expedia Affiliate Network
The New Rules of Site Architecture - Martin MacDonald, Expedia Affiliate NetworkThe New Rules of Site Architecture - Martin MacDonald, Expedia Affiliate Network
The New Rules of Site Architecture - Martin MacDonald, Expedia Affiliate Networkauexpo Conference
 
Goodle Developer Days Munich 2008 - Open Social Update
Goodle Developer Days Munich 2008 - Open Social UpdateGoodle Developer Days Munich 2008 - Open Social Update
Goodle Developer Days Munich 2008 - Open Social UpdatePatrick Chanezon
 
المدينة المنورة
المدينة المنورةالمدينة المنورة
المدينة المنورةmeshal999999
 
Deck 8983a1d9-68df-4447-8481-3b4fd0de734c-54
Deck 8983a1d9-68df-4447-8481-3b4fd0de734c-54Deck 8983a1d9-68df-4447-8481-3b4fd0de734c-54
Deck 8983a1d9-68df-4447-8481-3b4fd0de734c-54Ivy Rueb
 
Experiments in Data Portability 2
Experiments in Data Portability 2Experiments in Data Portability 2
Experiments in Data Portability 2Glenn Jones
 
Browsers & Web Technology - an Opera talk
Browsers & Web Technology - an Opera talkBrowsers & Web Technology - an Opera talk
Browsers & Web Technology - an Opera talkZi Bin Cheah
 

Mais procurados (11)

Optical Illusions
Optical IllusionsOptical Illusions
Optical Illusions
 
第一次程式親密接觸
第一次程式親密接觸第一次程式親密接觸
第一次程式親密接觸
 
Graph API - Facebook Developer Garage Taipei
Graph API - Facebook Developer Garage TaipeiGraph API - Facebook Developer Garage Taipei
Graph API - Facebook Developer Garage Taipei
 
Social 101: Introduction to Google Buzz
Social 101: Introduction to Google BuzzSocial 101: Introduction to Google Buzz
Social 101: Introduction to Google Buzz
 
The New Rules of Site Architecture - Martin MacDonald, Expedia Affiliate Network
The New Rules of Site Architecture - Martin MacDonald, Expedia Affiliate NetworkThe New Rules of Site Architecture - Martin MacDonald, Expedia Affiliate Network
The New Rules of Site Architecture - Martin MacDonald, Expedia Affiliate Network
 
Snakes on the Web
Snakes on the WebSnakes on the Web
Snakes on the Web
 
Goodle Developer Days Munich 2008 - Open Social Update
Goodle Developer Days Munich 2008 - Open Social UpdateGoodle Developer Days Munich 2008 - Open Social Update
Goodle Developer Days Munich 2008 - Open Social Update
 
المدينة المنورة
المدينة المنورةالمدينة المنورة
المدينة المنورة
 
Deck 8983a1d9-68df-4447-8481-3b4fd0de734c-54
Deck 8983a1d9-68df-4447-8481-3b4fd0de734c-54Deck 8983a1d9-68df-4447-8481-3b4fd0de734c-54
Deck 8983a1d9-68df-4447-8481-3b4fd0de734c-54
 
Experiments in Data Portability 2
Experiments in Data Portability 2Experiments in Data Portability 2
Experiments in Data Portability 2
 
Browsers & Web Technology - an Opera talk
Browsers & Web Technology - an Opera talkBrowsers & Web Technology - an Opera talk
Browsers & Web Technology - an Opera talk
 

Destaque

Disruptive Innovation & The Roadless Economy in New Zealand
Disruptive Innovation & The Roadless Economy in New ZealandDisruptive Innovation & The Roadless Economy in New Zealand
Disruptive Innovation & The Roadless Economy in New ZealandArturo Pelayo
 
Nur 4112 class #3
Nur 4112  class #3Nur 4112  class #3
Nur 4112 class #3jgregg1
 
CSCfi Computing Services 12/2014
CSCfi Computing Services 12/2014CSCfi Computing Services 12/2014
CSCfi Computing Services 12/2014Olli-Pekka Lehto
 
2013 11 19 seoul underground hk s watts
2013 11 19 seoul underground hk s watts2013 11 19 seoul underground hk s watts
2013 11 19 seoul underground hk s wattsFirsta Ismet
 
Character education – self knowledge
Character education – self knowledgeCharacter education – self knowledge
Character education – self knowledgerocoley
 
Dinesh Mullangi Departmental seminar 12th August 2015
Dinesh Mullangi Departmental seminar  12th August 2015Dinesh Mullangi Departmental seminar  12th August 2015
Dinesh Mullangi Departmental seminar 12th August 2015mullangi dinesh
 
Consumer insights: Finding and Guarding the Treasure Trove Infographic
Consumer insights: Finding and Guarding the Treasure Trove InfographicConsumer insights: Finding and Guarding the Treasure Trove Infographic
Consumer insights: Finding and Guarding the Treasure Trove InfographicCapgemini
 
Los tipos de `"porque"
Los tipos de `"porque"Los tipos de `"porque"
Los tipos de `"porque"Luis Gil Gil
 
SharePoint Intersections - SP11 - SharePoint and IaaS - The OnPrem in the Cloud
SharePoint Intersections - SP11 - SharePoint and IaaS - The OnPrem in the CloudSharePoint Intersections - SP11 - SharePoint and IaaS - The OnPrem in the Cloud
SharePoint Intersections - SP11 - SharePoint and IaaS - The OnPrem in the CloudDan Usher
 
Management society Num 47 (2014)
Management society  Num 47 (2014)Management society  Num 47 (2014)
Management society Num 47 (2014)Santiago Garcia
 
タイ人オタクが艦これ聖地山を巡った話 第1話 京都 高雄~愛宕山
タイ人オタクが艦これ聖地山を巡った話 第1話 京都 高雄~愛宕山タイ人オタクが艦これ聖地山を巡った話 第1話 京都 高雄~愛宕山
タイ人オタクが艦これ聖地山を巡った話 第1話 京都 高雄~愛宕山Matumit Sombunjaroen
 
Content/Communication: Lavacon 2014
Content/Communication: Lavacon 2014Content/Communication: Lavacon 2014
Content/Communication: Lavacon 2014Kristina Halvorson
 
Event Report - Oracle OpenWorld - Top 3 Positive and Top 3 Concerns
Event Report - Oracle OpenWorld - Top 3 Positive and Top 3 ConcernsEvent Report - Oracle OpenWorld - Top 3 Positive and Top 3 Concerns
Event Report - Oracle OpenWorld - Top 3 Positive and Top 3 ConcernsHolger Mueller
 
Movements Begin Within: Mashable Social Good Conference
Movements Begin Within: Mashable Social Good ConferenceMovements Begin Within: Mashable Social Good Conference
Movements Begin Within: Mashable Social Good ConferenceGeoff Livingston
 
Newsbrands and social media
Newsbrands and social mediaNewsbrands and social media
Newsbrands and social mediaNewsworks
 

Destaque (20)

How enroll cwd's to school
How enroll cwd's to schoolHow enroll cwd's to school
How enroll cwd's to school
 
Disruptive Innovation & The Roadless Economy in New Zealand
Disruptive Innovation & The Roadless Economy in New ZealandDisruptive Innovation & The Roadless Economy in New Zealand
Disruptive Innovation & The Roadless Economy in New Zealand
 
Nur 4112 class #3
Nur 4112  class #3Nur 4112  class #3
Nur 4112 class #3
 
Angie
AngieAngie
Angie
 
CSCfi Computing Services 12/2014
CSCfi Computing Services 12/2014CSCfi Computing Services 12/2014
CSCfi Computing Services 12/2014
 
2013 11 19 seoul underground hk s watts
2013 11 19 seoul underground hk s watts2013 11 19 seoul underground hk s watts
2013 11 19 seoul underground hk s watts
 
Character education – self knowledge
Character education – self knowledgeCharacter education – self knowledge
Character education – self knowledge
 
Dinesh Mullangi Departmental seminar 12th August 2015
Dinesh Mullangi Departmental seminar  12th August 2015Dinesh Mullangi Departmental seminar  12th August 2015
Dinesh Mullangi Departmental seminar 12th August 2015
 
Consumer insights: Finding and Guarding the Treasure Trove Infographic
Consumer insights: Finding and Guarding the Treasure Trove InfographicConsumer insights: Finding and Guarding the Treasure Trove Infographic
Consumer insights: Finding and Guarding the Treasure Trove Infographic
 
Los tipos de `"porque"
Los tipos de `"porque"Los tipos de `"porque"
Los tipos de `"porque"
 
SharePoint Intersections - SP11 - SharePoint and IaaS - The OnPrem in the Cloud
SharePoint Intersections - SP11 - SharePoint and IaaS - The OnPrem in the CloudSharePoint Intersections - SP11 - SharePoint and IaaS - The OnPrem in the Cloud
SharePoint Intersections - SP11 - SharePoint and IaaS - The OnPrem in the Cloud
 
Management society Num 47 (2014)
Management society  Num 47 (2014)Management society  Num 47 (2014)
Management society Num 47 (2014)
 
The Twist and Shout Guide to Employee Engagement
The Twist and Shout Guide to Employee EngagementThe Twist and Shout Guide to Employee Engagement
The Twist and Shout Guide to Employee Engagement
 
タイ人オタクが艦これ聖地山を巡った話 第1話 京都 高雄~愛宕山
タイ人オタクが艦これ聖地山を巡った話 第1話 京都 高雄~愛宕山タイ人オタクが艦これ聖地山を巡った話 第1話 京都 高雄~愛宕山
タイ人オタクが艦これ聖地山を巡った話 第1話 京都 高雄~愛宕山
 
Content/Communication: Lavacon 2014
Content/Communication: Lavacon 2014Content/Communication: Lavacon 2014
Content/Communication: Lavacon 2014
 
Event Report - Oracle OpenWorld - Top 3 Positive and Top 3 Concerns
Event Report - Oracle OpenWorld - Top 3 Positive and Top 3 ConcernsEvent Report - Oracle OpenWorld - Top 3 Positive and Top 3 Concerns
Event Report - Oracle OpenWorld - Top 3 Positive and Top 3 Concerns
 
Movements Begin Within: Mashable Social Good Conference
Movements Begin Within: Mashable Social Good ConferenceMovements Begin Within: Mashable Social Good Conference
Movements Begin Within: Mashable Social Good Conference
 
Newsbrands and social media
Newsbrands and social mediaNewsbrands and social media
Newsbrands and social media
 
6º básico a semana 02 al 06 de mayo
6º básico a semana 02  al 06 de mayo6º básico a semana 02  al 06 de mayo
6º básico a semana 02 al 06 de mayo
 
1º básico a semana del 2 al 6 de mayo (1)
1º básico a semana del 2 al 6 de mayo (1)1º básico a semana del 2 al 6 de mayo (1)
1º básico a semana del 2 al 6 de mayo (1)
 

Semelhante a With Great Nerdery Comes Great Responsibility

He stopped using for/while loops, you won't believe what happened next!
He stopped using for/while loops, you won't believe what happened next!He stopped using for/while loops, you won't believe what happened next!
He stopped using for/while loops, you won't believe what happened next!François-Guillaume Ribreau
 
Faster! Faster! Accelerate your business with blazing prototypes
Faster! Faster! Accelerate your business with blazing prototypesFaster! Faster! Accelerate your business with blazing prototypes
Faster! Faster! Accelerate your business with blazing prototypesOSCON Byrum
 
Open Hack London - Introduction to YQL
Open Hack London - Introduction to YQLOpen Hack London - Introduction to YQL
Open Hack London - Introduction to YQLChristian Heilmann
 
Technology Careers v2.0 SP1 Ultimate Edition
Technology Careers v2.0 SP1 Ultimate EditionTechnology Careers v2.0 SP1 Ultimate Edition
Technology Careers v2.0 SP1 Ultimate EditionJohn Bristowe
 
Stefan Judis "Did we(b development) lose the right direction?"
Stefan Judis "Did we(b development) lose the right direction?"Stefan Judis "Did we(b development) lose the right direction?"
Stefan Judis "Did we(b development) lose the right direction?"Fwdays
 
Operational transformation
Operational transformationOperational transformation
Operational transformationMatteo Collina
 
Speed is Essential for a Great Web Experience
Speed is Essential for a Great Web ExperienceSpeed is Essential for a Great Web Experience
Speed is Essential for a Great Web ExperienceAndy Davies
 
I don't know what I'm Doing: A newbie guide for Golang for DevOps
I don't know what I'm Doing: A newbie guide for Golang for DevOpsI don't know what I'm Doing: A newbie guide for Golang for DevOps
I don't know what I'm Doing: A newbie guide for Golang for DevOpsPeter Souter
 
Starting to Monkey Around With Yahoo! Search Monkey
Starting to Monkey Around With Yahoo! Search MonkeyStarting to Monkey Around With Yahoo! Search Monkey
Starting to Monkey Around With Yahoo! Search MonkeyNeil Crosby
 
Unleashing Twitter Data for Fun and Insight
Unleashing Twitter Data for Fun and InsightUnleashing Twitter Data for Fun and Insight
Unleashing Twitter Data for Fun and InsightMatthew Russell
 
Unleashing twitter data for fun and insight
Unleashing twitter data for fun and insightUnleashing twitter data for fun and insight
Unleashing twitter data for fun and insightDigital Reasoning
 
Back To The Future.Key 2
Back To The Future.Key 2Back To The Future.Key 2
Back To The Future.Key 2gueste8cc560
 
Travailler dans le présent - Chris Heilmann - Paris Web 2008
Travailler dans le présent - Chris Heilmann - Paris Web 2008Travailler dans le présent - Chris Heilmann - Paris Web 2008
Travailler dans le présent - Chris Heilmann - Paris Web 2008Association Paris-Web
 
Working In The Now - Paris Web
Working In The Now - Paris WebWorking In The Now - Paris Web
Working In The Now - Paris WebChristian Heilmann
 

Semelhante a With Great Nerdery Comes Great Responsibility (20)

Hacking For Innovation
Hacking For InnovationHacking For Innovation
Hacking For Innovation
 
He stopped using for/while loops, you won't believe what happened next!
He stopped using for/while loops, you won't believe what happened next!He stopped using for/while loops, you won't believe what happened next!
He stopped using for/while loops, you won't believe what happened next!
 
Faster! Faster! Accelerate your business with blazing prototypes
Faster! Faster! Accelerate your business with blazing prototypesFaster! Faster! Accelerate your business with blazing prototypes
Faster! Faster! Accelerate your business with blazing prototypes
 
Georgia Tech Hack Day
Georgia Tech Hack DayGeorgia Tech Hack Day
Georgia Tech Hack Day
 
Open Hack London - Introduction to YQL
Open Hack London - Introduction to YQLOpen Hack London - Introduction to YQL
Open Hack London - Introduction to YQL
 
Yahoo for the Masses
Yahoo for the MassesYahoo for the Masses
Yahoo for the Masses
 
Technology Careers v2.0 SP1 Ultimate Edition
Technology Careers v2.0 SP1 Ultimate EditionTechnology Careers v2.0 SP1 Ultimate Edition
Technology Careers v2.0 SP1 Ultimate Edition
 
Stefan Judis "Did we(b development) lose the right direction?"
Stefan Judis "Did we(b development) lose the right direction?"Stefan Judis "Did we(b development) lose the right direction?"
Stefan Judis "Did we(b development) lose the right direction?"
 
Technical Introduction to YDN
Technical Introduction to YDNTechnical Introduction to YDN
Technical Introduction to YDN
 
Operational transformation
Operational transformationOperational transformation
Operational transformation
 
Speed is Essential for a Great Web Experience
Speed is Essential for a Great Web ExperienceSpeed is Essential for a Great Web Experience
Speed is Essential for a Great Web Experience
 
Jabber Bot
Jabber BotJabber Bot
Jabber Bot
 
I don't know what I'm Doing: A newbie guide for Golang for DevOps
I don't know what I'm Doing: A newbie guide for Golang for DevOpsI don't know what I'm Doing: A newbie guide for Golang for DevOps
I don't know what I'm Doing: A newbie guide for Golang for DevOps
 
Starting to Monkey Around With Yahoo! Search Monkey
Starting to Monkey Around With Yahoo! Search MonkeyStarting to Monkey Around With Yahoo! Search Monkey
Starting to Monkey Around With Yahoo! Search Monkey
 
Making sense out of things on the web
Making sense out of things on the webMaking sense out of things on the web
Making sense out of things on the web
 
Unleashing Twitter Data for Fun and Insight
Unleashing Twitter Data for Fun and InsightUnleashing Twitter Data for Fun and Insight
Unleashing Twitter Data for Fun and Insight
 
Unleashing twitter data for fun and insight
Unleashing twitter data for fun and insightUnleashing twitter data for fun and insight
Unleashing twitter data for fun and insight
 
Back To The Future.Key 2
Back To The Future.Key 2Back To The Future.Key 2
Back To The Future.Key 2
 
Travailler dans le présent - Chris Heilmann - Paris Web 2008
Travailler dans le présent - Chris Heilmann - Paris Web 2008Travailler dans le présent - Chris Heilmann - Paris Web 2008
Travailler dans le présent - Chris Heilmann - Paris Web 2008
 
Working In The Now - Paris Web
Working In The Now - Paris WebWorking In The Now - Paris Web
Working In The Now - Paris Web
 

Mais de John Anderson

Introduction to Git (even for non-developers)
Introduction to Git (even for non-developers)Introduction to Git (even for non-developers)
Introduction to Git (even for non-developers)John Anderson
 
Logs are-magic-devfestweekend2018
Logs are-magic-devfestweekend2018Logs are-magic-devfestweekend2018
Logs are-magic-devfestweekend2018John Anderson
 
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To YouLogs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To YouJohn Anderson
 
A static site generator should be your next language learning project
A static site generator should be your next language learning projectA static site generator should be your next language learning project
A static site generator should be your next language learning projectJohn Anderson
 
Do you want to be right or do you want to WIN?
Do you want to be right or do you want to WIN?Do you want to be right or do you want to WIN?
Do you want to be right or do you want to WIN?John Anderson
 
An Introduction to Git (even for non-developers)
An Introduction to Git (even for non-developers)An Introduction to Git (even for non-developers)
An Introduction to Git (even for non-developers)John Anderson
 
You got chocolate in my peanut butter! .NET on Mac & Linux
You got chocolate in my peanut butter! .NET on Mac & LinuxYou got chocolate in my peanut butter! .NET on Mac & Linux
You got chocolate in my peanut butter! .NET on Mac & LinuxJohn Anderson
 
A static site generator should be your next language learning project
A static site generator should be your next language learning projectA static site generator should be your next language learning project
A static site generator should be your next language learning projectJohn Anderson
 
Old Dogs & New Tricks: What's New with Perl5 This Century
Old Dogs & New Tricks: What's New with Perl5 This CenturyOld Dogs & New Tricks: What's New with Perl5 This Century
Old Dogs & New Tricks: What's New with Perl5 This CenturyJohn Anderson
 
Introduction to Git (even for non-developers!)
Introduction to Git (even for non-developers!)Introduction to Git (even for non-developers!)
Introduction to Git (even for non-developers!)John Anderson
 
Introduction to Git for Non-Developers
Introduction to Git for Non-DevelopersIntroduction to Git for Non-Developers
Introduction to Git for Non-DevelopersJohn Anderson
 
A Modest Introduction To Swift
A Modest Introduction To SwiftA Modest Introduction To Swift
A Modest Introduction To SwiftJohn Anderson
 
A static site generator should be your next language learning project
A static site generator should be your next language learning projectA static site generator should be your next language learning project
A static site generator should be your next language learning projectJohn Anderson
 
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To YouLogs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To YouJohn Anderson
 
JSON Web Tokens Will Improve Your Life
JSON Web Tokens Will Improve Your LifeJSON Web Tokens Will Improve Your Life
JSON Web Tokens Will Improve Your LifeJohn Anderson
 
Old Dogs & New Tricks: What's New With Perl5 This Century
Old Dogs & New Tricks: What's New With Perl5 This CenturyOld Dogs & New Tricks: What's New With Perl5 This Century
Old Dogs & New Tricks: What's New With Perl5 This CenturyJohn Anderson
 
A Modest Introduction to Swift
A Modest Introduction to SwiftA Modest Introduction to Swift
A Modest Introduction to SwiftJohn Anderson
 
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To YouLogs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To YouJohn Anderson
 
Friends Don't Let Friends Browse Unencrypted: Running a VPN for friends and f...
Friends Don't Let Friends Browse Unencrypted: Running a VPN for friends and f...Friends Don't Let Friends Browse Unencrypted: Running a VPN for friends and f...
Friends Don't Let Friends Browse Unencrypted: Running a VPN for friends and f...John Anderson
 

Mais de John Anderson (20)

#speakerlife
#speakerlife#speakerlife
#speakerlife
 
Introduction to Git (even for non-developers)
Introduction to Git (even for non-developers)Introduction to Git (even for non-developers)
Introduction to Git (even for non-developers)
 
Logs are-magic-devfestweekend2018
Logs are-magic-devfestweekend2018Logs are-magic-devfestweekend2018
Logs are-magic-devfestweekend2018
 
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To YouLogs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
 
A static site generator should be your next language learning project
A static site generator should be your next language learning projectA static site generator should be your next language learning project
A static site generator should be your next language learning project
 
Do you want to be right or do you want to WIN?
Do you want to be right or do you want to WIN?Do you want to be right or do you want to WIN?
Do you want to be right or do you want to WIN?
 
An Introduction to Git (even for non-developers)
An Introduction to Git (even for non-developers)An Introduction to Git (even for non-developers)
An Introduction to Git (even for non-developers)
 
You got chocolate in my peanut butter! .NET on Mac & Linux
You got chocolate in my peanut butter! .NET on Mac & LinuxYou got chocolate in my peanut butter! .NET on Mac & Linux
You got chocolate in my peanut butter! .NET on Mac & Linux
 
A static site generator should be your next language learning project
A static site generator should be your next language learning projectA static site generator should be your next language learning project
A static site generator should be your next language learning project
 
Old Dogs & New Tricks: What's New with Perl5 This Century
Old Dogs & New Tricks: What's New with Perl5 This CenturyOld Dogs & New Tricks: What's New with Perl5 This Century
Old Dogs & New Tricks: What's New with Perl5 This Century
 
Introduction to Git (even for non-developers!)
Introduction to Git (even for non-developers!)Introduction to Git (even for non-developers!)
Introduction to Git (even for non-developers!)
 
Introduction to Git for Non-Developers
Introduction to Git for Non-DevelopersIntroduction to Git for Non-Developers
Introduction to Git for Non-Developers
 
A Modest Introduction To Swift
A Modest Introduction To SwiftA Modest Introduction To Swift
A Modest Introduction To Swift
 
A static site generator should be your next language learning project
A static site generator should be your next language learning projectA static site generator should be your next language learning project
A static site generator should be your next language learning project
 
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To YouLogs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
 
JSON Web Tokens Will Improve Your Life
JSON Web Tokens Will Improve Your LifeJSON Web Tokens Will Improve Your Life
JSON Web Tokens Will Improve Your Life
 
Old Dogs & New Tricks: What's New With Perl5 This Century
Old Dogs & New Tricks: What's New With Perl5 This CenturyOld Dogs & New Tricks: What's New With Perl5 This Century
Old Dogs & New Tricks: What's New With Perl5 This Century
 
A Modest Introduction to Swift
A Modest Introduction to SwiftA Modest Introduction to Swift
A Modest Introduction to Swift
 
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To YouLogs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
 
Friends Don't Let Friends Browse Unencrypted: Running a VPN for friends and f...
Friends Don't Let Friends Browse Unencrypted: Running a VPN for friends and f...Friends Don't Let Friends Browse Unencrypted: Running a VPN for friends and f...
Friends Don't Let Friends Browse Unencrypted: Running a VPN for friends and f...
 

Último

Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts servicevipmodelshub1
 
Russian Call girls in Dubai +971563133746 Dubai Call girls
Russian  Call girls in Dubai +971563133746 Dubai  Call girlsRussian  Call girls in Dubai +971563133746 Dubai  Call girls
Russian Call girls in Dubai +971563133746 Dubai Call girlsstephieert
 
VIP Kolkata Call Girl Kestopur 👉 8250192130 Available With Room
VIP Kolkata Call Girl Kestopur 👉 8250192130  Available With RoomVIP Kolkata Call Girl Kestopur 👉 8250192130  Available With Room
VIP Kolkata Call Girl Kestopur 👉 8250192130 Available With Roomdivyansh0kumar0
 
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort ServiceEnjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort ServiceDelhi Call girls
 
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Delhi Call girls
 
Moving Beyond Twitter/X and Facebook - Social Media for local news providers
Moving Beyond Twitter/X and Facebook - Social Media for local news providersMoving Beyond Twitter/X and Facebook - Social Media for local news providers
Moving Beyond Twitter/X and Facebook - Social Media for local news providersDamian Radcliffe
 
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
VIP Kolkata Call Girl Alambazar 👉 8250192130 Available With Room
VIP Kolkata Call Girl Alambazar 👉 8250192130  Available With RoomVIP Kolkata Call Girl Alambazar 👉 8250192130  Available With Room
VIP Kolkata Call Girl Alambazar 👉 8250192130 Available With Roomdivyansh0kumar0
 
AWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptxAWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptxellan12
 
Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
AlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsAlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsThierry TROUIN ☁
 
Russian Call Girls in Kolkata Ishita 🤌 8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Ishita 🤌  8250192130 🚀 Vip Call Girls KolkataRussian Call Girls in Kolkata Ishita 🤌  8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Ishita 🤌 8250192130 🚀 Vip Call Girls Kolkataanamikaraghav4
 
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark WebGDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark WebJames Anderson
 
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...tanu pandey
 
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls KolkataVIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkataanamikaraghav4
 
Call Girls In Ashram Chowk Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Ashram Chowk Delhi 💯Call Us 🔝8264348440🔝Call Girls In Ashram Chowk Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Ashram Chowk Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
Networking in the Penumbra presented by Geoff Huston at NZNOG
Networking in the Penumbra presented by Geoff Huston at NZNOGNetworking in the Penumbra presented by Geoff Huston at NZNOG
Networking in the Penumbra presented by Geoff Huston at NZNOGAPNIC
 
Challengers I Told Ya ShirtChallengers I Told Ya Shirt
Challengers I Told Ya ShirtChallengers I Told Ya ShirtChallengers I Told Ya ShirtChallengers I Told Ya Shirt
Challengers I Told Ya ShirtChallengers I Told Ya Shirtrahman018755
 

Último (20)

Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
 
Russian Call girls in Dubai +971563133746 Dubai Call girls
Russian  Call girls in Dubai +971563133746 Dubai  Call girlsRussian  Call girls in Dubai +971563133746 Dubai  Call girls
Russian Call girls in Dubai +971563133746 Dubai Call girls
 
VIP Kolkata Call Girl Kestopur 👉 8250192130 Available With Room
VIP Kolkata Call Girl Kestopur 👉 8250192130  Available With RoomVIP Kolkata Call Girl Kestopur 👉 8250192130  Available With Room
VIP Kolkata Call Girl Kestopur 👉 8250192130 Available With Room
 
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort ServiceEnjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort Service
 
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
 
Moving Beyond Twitter/X and Facebook - Social Media for local news providers
Moving Beyond Twitter/X and Facebook - Social Media for local news providersMoving Beyond Twitter/X and Facebook - Social Media for local news providers
Moving Beyond Twitter/X and Facebook - Social Media for local news providers
 
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
 
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No AdvanceRohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
 
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Sukhdev Vihar Delhi 💯Call Us 🔝8264348440🔝
 
VIP Kolkata Call Girl Alambazar 👉 8250192130 Available With Room
VIP Kolkata Call Girl Alambazar 👉 8250192130  Available With RoomVIP Kolkata Call Girl Alambazar 👉 8250192130  Available With Room
VIP Kolkata Call Girl Alambazar 👉 8250192130 Available With Room
 
AWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptxAWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptx
 
Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Pratap Nagar Delhi 💯Call Us 🔝8264348440🔝
 
AlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsAlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with Flows
 
Russian Call Girls in Kolkata Ishita 🤌 8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Ishita 🤌  8250192130 🚀 Vip Call Girls KolkataRussian Call Girls in Kolkata Ishita 🤌  8250192130 🚀 Vip Call Girls Kolkata
Russian Call Girls in Kolkata Ishita 🤌 8250192130 🚀 Vip Call Girls Kolkata
 
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark WebGDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
GDG Cloud Southlake 32: Kyle Hettinger: Demystifying the Dark Web
 
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...
 
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls KolkataVIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkata
 
Call Girls In Ashram Chowk Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Ashram Chowk Delhi 💯Call Us 🔝8264348440🔝Call Girls In Ashram Chowk Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Ashram Chowk Delhi 💯Call Us 🔝8264348440🔝
 
Networking in the Penumbra presented by Geoff Huston at NZNOG
Networking in the Penumbra presented by Geoff Huston at NZNOGNetworking in the Penumbra presented by Geoff Huston at NZNOG
Networking in the Penumbra presented by Geoff Huston at NZNOG
 
Challengers I Told Ya ShirtChallengers I Told Ya Shirt
Challengers I Told Ya ShirtChallengers I Told Ya ShirtChallengers I Told Ya ShirtChallengers I Told Ya Shirt
Challengers I Told Ya ShirtChallengers I Told Ya Shirt
 

With Great Nerdery Comes Great Responsibility

  • 1. With Great Power Comes Great Responsibility John SJ Anderson § @genehack PPW2014 § 2014-11-08
  • 2. Nerder y With Great Power Comes Great Responsibility John SJ Anderson § @genehack PPW2014 § 2014-11-08
  • 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.
  • 14. full of stuff that looks like this.
  • 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
  • 18. and we were right. photo: stevan little
  • 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.
  • 28. • Archive • Search • Potential Escape Hatch great, because it does the stuff that shawn wanted it to do.
  • 29. doesn't do everything i want though.
  • 30. So I started writing Klatsch.
  • 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.
  • 35. Not Perl Perl deployments are horrible.
  • 38. Best deployment story around, currently:
  • 39. Go.
  • 40. Go (aka golang) • Statically typed (w/inference) • Compiled (cross-platform) • C-like syntax & design • Garbage collected • Excellent concurrency support • Interesting approach to OO
  • 41. But, most importantly: Statically-linked. Binaries. Deployment == trivial.
  • 42. package main import "fmt" func main() { fmt.Print("Hello world") } this is hello world in go.
  • 43. % ls -­‐sh hello 1.8M hello* static linking == big binaries
  • 44. but it doesn't matter. image: http://www.quickmeme.com/img/3b/3b0241c9f06118600eaa2271ac5a0e11c619bc72a2a547d6883c8f62a2dc7a58.jpg
  • 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) } } }
  • 51. Live demo! (safest live demo evar.)
  • 52. <!DOCTYPE html> <html lang="en" data-­‐ng-­‐app="klatsch"> <head> <meta charset="utf-­‐8"> <title>Klatsch!</title> <link href="css/bootstrap.min.css" rel="stylesheet"> <link href="css/klatsch.css" rel="stylesheet"> </head> <body> <div class="container"> <div class="col-­‐md-­‐3"></div> <div class="col-­‐md-­‐6"> <h1>Postin'</h1> <twitter-­‐input></twitter-­‐input> </div> <div class="col-­‐md-­‐3"></div> </div> <div class="footer"> <div class="container"> <p class="text-­‐muted">Powered by Klatsch!</p> </div> </div> <script src="http://code.angularjs.org/1.2.26/angular.min.js"></script> <script src="js/directives.js"></script> </body> </html>
  • 53. <!DOCTYPE html> <html lang="en" data-­‐ng-­‐app="klatsch"> <head> <meta charset="utf-­‐8"> <title>Klatsch!</title> <link href="css/bootstrap.min.css" rel="stylesheet"> <link href="css/klatsch.css" rel="stylesheet"> </head> <body> <div class="container"> <div class="col-­‐md-­‐3"></div> <div class="col-­‐md-­‐6"> <h1>Postin'</h1> <twitter-­‐input></twitter-­‐input> </div> <div class="col-­‐md-­‐3"></div> </div> <div class="footer"> <div class="container"> <p class="text-­‐muted">Powered by Klatsch!</p> </div> </div> <script src="http://code.angularjs.org/1.2.26/angular.min.js"></script> <script src="js/directives.js"></script> </body> </html>
  • 54. directive("twitterInput", function () { return { restrict: "E" , replace: true , templateUrl: "./twitter_input.html" , controller: function($scope,$timeout) { $scope.error = function(name) { var form = $scope.form[name]; return form.$invalid && form.$dirty ? "has-­‐error" : ""; }; }, scope: {} }; })
  • 55. <form name="form" role="form"> <div class="form-­‐group" data-­‐ng-­‐class="error('postfield')"> <div class="controls"> <input type="text" name="postfield" class="form-­‐control" data-­‐ng-­‐trim=false counted-­‐max="140" data-­‐ng-­‐model="post.content" placeholder="Compose new tweet" /> </div> <div class="pull-­‐right" style="margin:5px 0;"> <span class="help-­‐block inline-­‐display" data-­‐ng-­‐show="form.postfield.$error.unique"> Post is too long! </span> <span class="count" style="margin-­‐right:5px" data-­‐ng-­‐class="error('postfield')"> {{140 -­‐ post.content.length}} </span> <button class="btn btn-­‐primary" data-­‐ng-­‐click="postToTwitter(account)" data-­‐ng-­‐disabled="!form.$valid"> Post to Twitter </button> </div> </div> </form>
  • 56. .directive("countedMax", function() { return { require: "ngModel" , restrict: "A" , link: function(scope,element,attrs,ngModelCtrl) { var maxlength = Number(attrs.countedMax); function fromUser(text) { ngModelCtrl.$setValidity( 'unique', text.length <= maxlength ); return text; } ngModelCtrl.$parsers.unshift(fromUser); } }; })
  • 57. Live demo 2: search
  • 58. So that's what I'm trying to do about it.
  • 59. what can _you_ do about it? image: http://memestorage.com/_nw/21/04359364.jpg
  • 60. Just use the app and give me feedback. once it's ready, I mean. image: http://memestorage.com/_nw/21/04359364.jpg
  • 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