SlideShare una empresa de Scribd logo
1 de 66
Descargar para leer sin conexión
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?

Más contenido relacionado

La actualidad más candente

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
 

La actualidad más candente (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
 

Destacado

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
 

Destacado (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)
 

Similar 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
 
Working In The Now - Paris Web
Working In The Now - Paris WebWorking In The Now - Paris Web
Working In The Now - Paris WebChristian Heilmann
 
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
 

Similar 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
 
Working In The Now - Paris Web
Working In The Now - Paris WebWorking In The Now - Paris Web
Working In The Now - Paris Web
 
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
 

Más 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
 

Más 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

Wagholi & High Class Call Girls Pune Neha 8005736733 | 100% Gennuine High Cla...
Wagholi & High Class Call Girls Pune Neha 8005736733 | 100% Gennuine High Cla...Wagholi & High Class Call Girls Pune Neha 8005736733 | 100% Gennuine High Cla...
Wagholi & High Class Call Girls Pune Neha 8005736733 | 100% Gennuine High Cla...SUHANI PANDEY
 
Russian Call Girls Pune (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
Russian Call Girls Pune  (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...Russian Call Girls Pune  (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
Russian Call Girls Pune (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...SUHANI PANDEY
 
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service AvailableCall Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service AvailableSeo
 
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...SUHANI PANDEY
 
Pirangut | Call Girls Pune Phone No 8005736733 Elite Escort Service Available...
Pirangut | Call Girls Pune Phone No 8005736733 Elite Escort Service Available...Pirangut | Call Girls Pune Phone No 8005736733 Elite Escort Service Available...
Pirangut | Call Girls Pune Phone No 8005736733 Elite Escort Service Available...SUHANI PANDEY
 
Nanded City ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready ...
Nanded City ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready ...Nanded City ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready ...
Nanded City ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready ...tanu pandey
 
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
 
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...SUHANI PANDEY
 
"Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency""Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency"growthgrids
 
Real Escorts in Al Nahda +971524965298 Dubai Escorts Service
Real Escorts in Al Nahda +971524965298 Dubai Escorts ServiceReal Escorts in Al Nahda +971524965298 Dubai Escorts Service
Real Escorts in Al Nahda +971524965298 Dubai Escorts ServiceEscorts Call Girls
 
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubai
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls DubaiDubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubai
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubaikojalkojal131
 
( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...
( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...
( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...nilamkumrai
 
APNIC Updates presented by Paul Wilson at ARIN 53
APNIC Updates presented by Paul Wilson at ARIN 53APNIC Updates presented by Paul Wilson at ARIN 53
APNIC Updates presented by Paul Wilson at ARIN 53APNIC
 
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...singhpriety023
 
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...SUHANI PANDEY
 
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...SUHANI PANDEY
 
(+971568250507 ))# Young Call Girls in Ajman By Pakistani Call Girls in ...
(+971568250507  ))#  Young Call Girls  in Ajman  By Pakistani Call Girls  in ...(+971568250507  ))#  Young Call Girls  in Ajman  By Pakistani Call Girls  in ...
(+971568250507 ))# Young Call Girls in Ajman By Pakistani Call Girls in ...Escorts Call Girls
 

Último (20)

Wagholi & High Class Call Girls Pune Neha 8005736733 | 100% Gennuine High Cla...
Wagholi & High Class Call Girls Pune Neha 8005736733 | 100% Gennuine High Cla...Wagholi & High Class Call Girls Pune Neha 8005736733 | 100% Gennuine High Cla...
Wagholi & High Class Call Girls Pune Neha 8005736733 | 100% Gennuine High Cla...
 
Russian Call Girls Pune (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
Russian Call Girls Pune  (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...Russian Call Girls Pune  (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
Russian Call Girls Pune (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
 
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service AvailableCall Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
 
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
 
Pirangut | Call Girls Pune Phone No 8005736733 Elite Escort Service Available...
Pirangut | Call Girls Pune Phone No 8005736733 Elite Escort Service Available...Pirangut | Call Girls Pune Phone No 8005736733 Elite Escort Service Available...
Pirangut | Call Girls Pune Phone No 8005736733 Elite Escort Service Available...
 
Nanded City ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready ...
Nanded City ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready ...Nanded City ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready ...
Nanded City ( 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...
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...
 
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
 
"Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency""Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency"
 
Real Escorts in Al Nahda +971524965298 Dubai Escorts Service
Real Escorts in Al Nahda +971524965298 Dubai Escorts ServiceReal Escorts in Al Nahda +971524965298 Dubai Escorts Service
Real Escorts in Al Nahda +971524965298 Dubai Escorts Service
 
(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7
(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7
(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7
 
valsad Escorts Service ☎️ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
valsad Escorts Service ☎️ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...valsad Escorts Service ☎️ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
valsad Escorts Service ☎️ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
 
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubai
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls DubaiDubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubai
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubai
 
( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...
( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...
( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...
 
APNIC Updates presented by Paul Wilson at ARIN 53
APNIC Updates presented by Paul Wilson at ARIN 53APNIC Updates presented by Paul Wilson at ARIN 53
APNIC Updates presented by Paul Wilson at ARIN 53
 
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
 
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
 
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
 
6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...
6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...
6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...
 
(+971568250507 ))# Young Call Girls in Ajman By Pakistani Call Girls in ...
(+971568250507  ))#  Young Call Girls  in Ajman  By Pakistani Call Girls  in ...(+971568250507  ))#  Young Call Girls  in Ajman  By Pakistani Call Girls  in ...
(+971568250507 ))# Young Call Girls in Ajman By Pakistani Call Girls in ...
 

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