speakerdeck_api 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/fixtures/vcr_cassettes/foo.yml +371 -0
- data/fixtures/vcr_cassettes/speaker_profile_with_complete_info.yml +371 -0
- data/fixtures/vcr_cassettes/speaker_profile_without_info.yml +213 -0
- data/lib/speakerdeck_api/version.rb +1 -1
- data/speakerdeck_api.gemspec +5 -2
- data/spec/fixtures/invalid_speaker.yml +446 -0
- data/spec/fixtures/speaker_profile_with_complete_info.yml +371 -0
- data/spec/fixtures/speaker_profile_without_info.yml +213 -0
- data/spec/speakerdeck_api/connection_spec.rb +10 -4
- data/spec/speakerdeck_api/parser_spec.rb +23 -35
- data/spec/speakerdeck_api/speaker_spec.rb +16 -8
- data/spec/spec_helper.rb +7 -0
- metadata +46 -10
- data/spec/fixtures/speaker_profile.html +0 -388
- data/spec/fixtures/speaker_without_info.html +0 -200
@@ -4,7 +4,7 @@ module SpeakerdeckApi
|
|
4
4
|
describe Connection do
|
5
5
|
|
6
6
|
let(:valid_speaker) { 'ferperales' }
|
7
|
-
let(:invalid_speaker) { '
|
7
|
+
let(:invalid_speaker) { 'fake123' }
|
8
8
|
let(:subject) { SpeakerdeckApi::Connection }
|
9
9
|
|
10
10
|
it 'has a base URL' do
|
@@ -14,14 +14,18 @@ module SpeakerdeckApi
|
|
14
14
|
describe '.get_speaker_data' do
|
15
15
|
context 'with valid url' do
|
16
16
|
it 'returns a parseable object' do
|
17
|
-
|
17
|
+
VCR.use_cassette('speaker_profile_with_complete_info') do
|
18
|
+
expect(subject.new.get_speaker_data(valid_speaker)).to be_a Nokogiri::HTML::Document
|
19
|
+
end
|
18
20
|
end
|
19
21
|
|
20
22
|
end
|
21
23
|
|
22
24
|
context 'with invalid url' do
|
23
25
|
it 'raises a OpenURI::HTTPError' do
|
24
|
-
|
26
|
+
VCR.use_cassette('invalid_speaker') do
|
27
|
+
expect { subject.new.get_speaker_data(invalid_speaker)}.to raise_error OpenURI::HTTPError
|
28
|
+
end
|
25
29
|
end
|
26
30
|
end
|
27
31
|
end
|
@@ -29,7 +33,9 @@ module SpeakerdeckApi
|
|
29
33
|
|
30
34
|
describe '.url_for_speaker' do
|
31
35
|
it 'returns the correct URL' do
|
32
|
-
|
36
|
+
VCR.use_cassette('speaker_profile_with_complete_info') do
|
37
|
+
expect(subject.new.url_for_speaker('ferperales')).to be_eql('https://speakerdeck.com/ferperales')
|
38
|
+
end
|
33
39
|
end
|
34
40
|
end
|
35
41
|
end
|
@@ -3,45 +3,26 @@ require 'spec_helper'
|
|
3
3
|
module SpeakerdeckApi
|
4
4
|
describe Parser do
|
5
5
|
|
6
|
-
let(:speaker_profile_page) do
|
7
|
-
path = File.join(File.dirname(File.expand_path(__FILE__)), "../fixtures/speaker_profile.html")
|
8
|
-
f = File.open(path)
|
9
|
-
doc = Nokogiri::XML(f)
|
10
|
-
f.close
|
11
|
-
doc
|
12
|
-
end
|
13
|
-
|
14
|
-
let(:speaker_without_info) do
|
15
|
-
path = File.join(File.dirname(File.expand_path(__FILE__)), "../fixtures/speaker_without_info.html")
|
16
|
-
f = File.open(path)
|
17
|
-
doc = Nokogiri::XML(f)
|
18
|
-
f.close
|
19
|
-
doc
|
20
|
-
end
|
21
|
-
|
22
|
-
|
23
|
-
|
24
6
|
context 'speakers' do
|
25
7
|
describe '.get_speaker_details' do
|
26
|
-
context 'valid speaker' do
|
8
|
+
context 'valid speaker with complete info' do
|
27
9
|
|
28
|
-
|
29
|
-
|
10
|
+
let(:speaker_profile_page) do
|
11
|
+
VCR.use_cassette('speaker_profile_with_complete_info') do
|
12
|
+
Nokogiri::HTML(open('https://speakerdeck.com/ferperales'))
|
13
|
+
end
|
30
14
|
end
|
31
15
|
|
32
|
-
it 'contains the right value' do
|
33
|
-
expect(subject.get_speaker_details(speaker_profile_page).values_at(:number_of_talks)).to eql([14])
|
34
|
-
end
|
35
16
|
|
36
|
-
it 'contains the
|
37
|
-
expect(subject.get_speaker_details(speaker_profile_page)).to
|
17
|
+
it 'contains the number_of_talks key and correct value' do
|
18
|
+
expect(subject.get_speaker_details(speaker_profile_page).values_at(:number_of_talks)).to eql([14])
|
38
19
|
end
|
39
20
|
|
40
|
-
it 'contains the
|
21
|
+
it 'contains the name key and correct value' do
|
41
22
|
expect(subject.get_speaker_details(speaker_profile_page).values_at(:name)).to eql(["Fernando Perales"])
|
42
23
|
end
|
43
24
|
|
44
|
-
it 'contains the
|
25
|
+
it 'contains the website key and correct value' do
|
45
26
|
expect(subject.get_speaker_details(speaker_profile_page)).to have_key(:website)
|
46
27
|
end
|
47
28
|
|
@@ -50,15 +31,22 @@ module SpeakerdeckApi
|
|
50
31
|
end
|
51
32
|
|
52
33
|
end
|
53
|
-
end
|
54
34
|
|
55
|
-
|
56
|
-
it 'contains the "name" key' do
|
57
|
-
expect(subject.get_speaker_details(speaker_without_info).values_at(:name)).to eql(["Erik Michaels-Ober"])
|
58
|
-
end
|
35
|
+
context 'valid speaker with no info' do
|
59
36
|
|
60
|
-
|
61
|
-
|
37
|
+
let(:speaker_without_info) do
|
38
|
+
VCR.use_cassette('speaker_profile_without_info') do
|
39
|
+
Nokogiri::HTML(open('https://speakerdeck.com/sferik'))
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'contains the name key and correct value' do
|
44
|
+
expect(subject.get_speaker_details(speaker_without_info).values_at(:name)).to eql(["Erik Michaels-Ober"])
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'contains the "website" key as empty string' do
|
48
|
+
expect(subject.get_speaker_details(speaker_without_info).values_at(:website)).to eql([""])
|
49
|
+
end
|
62
50
|
end
|
63
51
|
end
|
64
52
|
end
|
@@ -10,39 +10,47 @@ module SpeakerdeckApi
|
|
10
10
|
context 'with invalid username' do
|
11
11
|
|
12
12
|
it 'throws a SpeakerNotFoundException' do
|
13
|
-
|
13
|
+
VCR.use_cassette('speaker_profile_with_complete_info') do
|
14
|
+
expect { subject.get('fake123') }.to raise_error(SpeakerdeckApi::Exceptions::SpeakerNotFoundException)
|
15
|
+
end
|
14
16
|
end
|
15
17
|
|
16
18
|
end
|
17
19
|
|
18
20
|
context 'with a valid username' do
|
19
21
|
|
22
|
+
let(:subject) do
|
23
|
+
VCR.use_cassette('speaker_profile_with_complete_info') do
|
24
|
+
SpeakerdeckApi::Speaker.get 'ferperales'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
20
28
|
it 'returns a SpeakerdeckApi::Speaker object' do
|
21
|
-
expect(subject
|
29
|
+
expect(subject).to be_a SpeakerdeckApi::Speaker
|
22
30
|
end
|
23
31
|
|
24
32
|
it 'contains the number_of_talks attribute' do
|
25
|
-
expect(subject
|
33
|
+
expect(subject).to respond_to :number_of_talks
|
26
34
|
end
|
27
35
|
|
28
36
|
it 'contains the correct number of talks' do
|
29
|
-
expect(subject.
|
37
|
+
expect(subject.number_of_talks).to eql 14
|
30
38
|
end
|
31
39
|
|
32
40
|
it 'contains the name attribute' do
|
33
|
-
expect(subject
|
41
|
+
expect(subject).to respond_to :name
|
34
42
|
end
|
35
43
|
|
36
44
|
it 'contains the correct name number' do
|
37
|
-
expect(subject.
|
45
|
+
expect(subject.name).to eql 'Fernando Perales'
|
38
46
|
end
|
39
47
|
|
40
48
|
it 'contains the website attribute' do
|
41
|
-
expect(subject
|
49
|
+
expect(subject).to respond_to :website
|
42
50
|
end
|
43
51
|
|
44
52
|
it 'contains the correct website number' do
|
45
|
-
expect(subject.
|
53
|
+
expect(subject.website).to eql 'http://ferperales.net/'
|
46
54
|
end
|
47
55
|
|
48
56
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'coveralls'
|
2
|
+
require 'vcr'
|
3
|
+
|
2
4
|
Coveralls.wear!
|
3
5
|
|
4
6
|
require 'speakerdeck_api'
|
@@ -6,3 +8,8 @@ require 'speakerdeck_api/speaker'
|
|
6
8
|
require 'speakerdeck_api/exceptions/speaker_not_found_exception'
|
7
9
|
require 'speakerdeck_api/connection'
|
8
10
|
require 'speakerdeck_api/parser'
|
11
|
+
|
12
|
+
VCR.configure do |c|
|
13
|
+
c.cassette_library_dir = 'spec/fixtures/'
|
14
|
+
c.hook_into :webmock
|
15
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: speakerdeck_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fer Perales
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: pry
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: coveralls
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
@@ -81,7 +81,7 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: pry-byebug
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
@@ -95,7 +95,7 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: webmock
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - ">="
|
@@ -108,6 +108,34 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: nokogiri
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: vcr
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
111
139
|
description:
|
112
140
|
email:
|
113
141
|
- me@ferperales.net
|
@@ -122,6 +150,9 @@ files:
|
|
122
150
|
- LICENSE.txt
|
123
151
|
- README.md
|
124
152
|
- Rakefile
|
153
|
+
- fixtures/vcr_cassettes/foo.yml
|
154
|
+
- fixtures/vcr_cassettes/speaker_profile_with_complete_info.yml
|
155
|
+
- fixtures/vcr_cassettes/speaker_profile_without_info.yml
|
125
156
|
- lib/speakerdeck_api.rb
|
126
157
|
- lib/speakerdeck_api/connection.rb
|
127
158
|
- lib/speakerdeck_api/exceptions/speaker_not_found_exception.rb
|
@@ -129,8 +160,9 @@ files:
|
|
129
160
|
- lib/speakerdeck_api/speaker.rb
|
130
161
|
- lib/speakerdeck_api/version.rb
|
131
162
|
- speakerdeck_api.gemspec
|
132
|
-
- spec/fixtures/
|
133
|
-
- spec/fixtures/
|
163
|
+
- spec/fixtures/invalid_speaker.yml
|
164
|
+
- spec/fixtures/speaker_profile_with_complete_info.yml
|
165
|
+
- spec/fixtures/speaker_profile_without_info.yml
|
134
166
|
- spec/speakerdeck_api/connection_spec.rb
|
135
167
|
- spec/speakerdeck_api/parser_spec.rb
|
136
168
|
- spec/speakerdeck_api/speaker_spec.rb
|
@@ -161,8 +193,12 @@ signing_key:
|
|
161
193
|
specification_version: 4
|
162
194
|
summary: A gem for getting data from speakerdeck.com
|
163
195
|
test_files:
|
164
|
-
-
|
165
|
-
-
|
196
|
+
- fixtures/vcr_cassettes/foo.yml
|
197
|
+
- fixtures/vcr_cassettes/speaker_profile_with_complete_info.yml
|
198
|
+
- fixtures/vcr_cassettes/speaker_profile_without_info.yml
|
199
|
+
- spec/fixtures/invalid_speaker.yml
|
200
|
+
- spec/fixtures/speaker_profile_with_complete_info.yml
|
201
|
+
- spec/fixtures/speaker_profile_without_info.yml
|
166
202
|
- spec/speakerdeck_api/connection_spec.rb
|
167
203
|
- spec/speakerdeck_api/parser_spec.rb
|
168
204
|
- spec/speakerdeck_api/speaker_spec.rb
|
@@ -1,388 +0,0 @@
|
|
1
|
-
|
2
|
-
<!DOCTYPE html>
|
3
|
-
<html>
|
4
|
-
<head>
|
5
|
-
<meta charset="UTF-8">
|
6
|
-
<title>Presentations by Fernando Perales // Speaker Deck</title>
|
7
|
-
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
|
8
|
-
|
9
|
-
<link href='//fonts.googleapis.com/css?family=Open+Sans:400,300,600&subset=latin,latin-ext,cyrillic,cyrillic-ext' rel='stylesheet' type='text/css'>
|
10
|
-
<link href="https://d2dfho4r6t7asi.cloudfront.net/assets/application-31e7b11e971c1191f531d134325dda3f.css" media="screen" rel="stylesheet" type="text/css" />
|
11
|
-
|
12
|
-
<meta name="octolytics-app-id" content="speakerdeck" /><meta name="octolytics-host" content="collector.githubapp.com" /><meta name="octolytics-script-host" content="collector-cdn.github.com" />
|
13
|
-
<meta name="octolytics-actor-id" content="13424" /><meta name="octolytics-actor-hash" content="050077a3de932b4489000e56dc249fa6b41708404be9ae26ae576c04103177ec" />
|
14
|
-
|
15
|
-
<script src="https://d2dfho4r6t7asi.cloudfront.net/assets/application-de3b0dfb5fa666c00edfef0bbc79a0d7.js" type="text/javascript"></script>
|
16
|
-
<!--[if lt IE 9]>
|
17
|
-
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
18
|
-
<![endif]-->
|
19
|
-
<!--[if (gte IE 6)&(lte IE 8)]>
|
20
|
-
<script src="https://d2dfho4r6t7asi.cloudfront.net/assets/selectivizr-7b14bd1d1264beb6f8c385039c9cf80a.js" type="text/javascript"></script>
|
21
|
-
<![endif]-->
|
22
|
-
<meta content="authenticity_token" name="csrf-param" />
|
23
|
-
<meta content="c6i9OWNVcbBt6H3is4hMjDeJBReVJp6ZaGWwtoZOzH5UQO27+O2NKUh1+ruqLPrYq0iaVtWdu5P10yUrC2zUuw==" name="csrf-token" />
|
24
|
-
|
25
|
-
<link href="https://speakerdeck.com/ferperales.atom" rel="alternate" title="Fernando Perales's Presentations Feed" type="application/atom+xml" />
|
26
|
-
<meta name="octolytics-dimension-user_id" content="13424" /><meta name="octolytics-dimension-user_username" content="ferperales" />
|
27
|
-
|
28
|
-
</head>
|
29
|
-
<body class="signed-in">
|
30
|
-
<header>
|
31
|
-
<div class="container">
|
32
|
-
<h1><a href="/">Speaker Deck</a></h1>
|
33
|
-
|
34
|
-
<form accept-charset="UTF-8" action="/search" id="search_form" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /></div>
|
35
|
-
<input type="text" id="q" name="q" placeholder="Search…" value="" autocomplete="off" />
|
36
|
-
<button>Search</button>
|
37
|
-
</form>
|
38
|
-
<div class="navigation">
|
39
|
-
<ul>
|
40
|
-
<li class="browse"><a href="/p/featured">Browse</a></li>
|
41
|
-
<li class="upload"><a href="/new">Upload</a></li>
|
42
|
-
</ul>
|
43
|
-
|
44
|
-
<div id="amazing-shadow"></div>
|
45
|
-
<div id="account-settings">
|
46
|
-
<a class="user" href="/ferperales"><img alt="597e300a2878d54443eeb8cbde63edad?s=47" src="//secure.gravatar.com/avatar/597e300a2878d54443eeb8cbde63edad?s=47" />Fernando Perales</a>
|
47
|
-
<ul>
|
48
|
-
<li><a href="/ferperales">My Decks</a></li>
|
49
|
-
<li><a href="/account">My Account</a></a>
|
50
|
-
<li><a href="/ferperales/stars">My Stars</a></li>
|
51
|
-
<li><a href="#feedback_box" rel="facebox">Feedback</a></li>
|
52
|
-
<li><a href="/signout">Sign Out</a></li>
|
53
|
-
</ul>
|
54
|
-
</div>
|
55
|
-
|
56
|
-
</div>
|
57
|
-
|
58
|
-
<div id="feedback_box" style="display: none">
|
59
|
-
<div class="letter">
|
60
|
-
<h2>Dear Speaker Deck,</h2>
|
61
|
-
<form accept-charset="UTF-8" action="/feedback" data-remote="true" id="feedback" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="EtNj8IV8MmZP24S+AEVefoNyJloJwNl5U9sn7AC7Mn81OzNyHsTO/2pGA+cZ4egqH7O5G0l7/HPObbJxjZkqug==" /></div>
|
62
|
-
|
63
|
-
<div class="subject">
|
64
|
-
<label for="subject">I’d like to talk with you about</label>
|
65
|
-
<input id="subject" name="subject" placeholder="Subject" type="text" />
|
66
|
-
</div>
|
67
|
-
<textarea id="comments" name="comments" placeholder="Your message">
|
68
|
-
</textarea>
|
69
|
-
|
70
|
-
<span style="display: block; margin-bottom: 10px;">
|
71
|
-
Signed,
|
72
|
-
</span>
|
73
|
-
<h2>Fernando Perales</h2><br/>
|
74
|
-
<hr>
|
75
|
-
<button type=submit class="primary">Send Mail</button>
|
76
|
-
</form> </div>
|
77
|
-
</div>
|
78
|
-
|
79
|
-
</div>
|
80
|
-
</header>
|
81
|
-
|
82
|
-
|
83
|
-
<div id="content">
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
<section class="light">
|
88
|
-
<div class="container">
|
89
|
-
<div class="main">
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
<h1>Talks by Fernando Perales</h1>
|
94
|
-
<p></p>
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
<div class="talks">
|
99
|
-
<div class="talk public" data-id="60e74b1029b90132958f166834114127" data-slide-count="42">
|
100
|
-
<a class="slide_preview scrub" href="/ferperales/i-dot-a-y-open-source">
|
101
|
-
<img alt="Thumb_slide_0" src="https://speakerd.s3.amazonaws.com/presentations/60e74b1029b90132958f166834114127/thumb_slide_0.jpg" />
|
102
|
-
<div class="scrubber"><div class="scrubbed" style="width:0;"></div></div>
|
103
|
-
</a>
|
104
|
-
<div class="talk-listing-meta">
|
105
|
-
<h3 class="title">
|
106
|
-
<a href="/ferperales/i-dot-a-y-open-source">I.A. y Open Source</a>
|
107
|
-
</h3>
|
108
|
-
<p class="date">
|
109
|
-
Sep 20, 2014 by
|
110
|
-
<a href="/ferperales">Fernando Perales</a></p>
|
111
|
-
</div>
|
112
|
-
</div>
|
113
|
-
|
114
|
-
<div class="talk public" data-id="13f78d50f4ea0131751b2ef16f2868ea" data-slide-count="51">
|
115
|
-
<a class="slide_preview scrub" href="/ferperales/the-x-factor">
|
116
|
-
<img alt="Thumb_slide_0" src="https://speakerd.s3.amazonaws.com/presentations/13f78d50f4ea0131751b2ef16f2868ea/thumb_slide_0.jpg" />
|
117
|
-
<div class="scrubber"><div class="scrubbed" style="width:0;"></div></div>
|
118
|
-
</a>
|
119
|
-
<div class="talk-listing-meta">
|
120
|
-
<h3 class="title">
|
121
|
-
<a href="/ferperales/the-x-factor">The X factor</a>
|
122
|
-
</h3>
|
123
|
-
<p class="date">
|
124
|
-
Jul 23, 2014 by
|
125
|
-
<a href="/ferperales">Fernando Perales</a></p>
|
126
|
-
</div>
|
127
|
-
</div>
|
128
|
-
|
129
|
-
<div class="talk public" data-id="119bae30ca68013176a162bf191fee83" data-slide-count="7">
|
130
|
-
<a class="slide_preview scrub" href="/ferperales/using-remotes-in-a-presentation">
|
131
|
-
<img alt="Thumb_slide_0" src="https://speakerd.s3.amazonaws.com/presentations/119bae30ca68013176a162bf191fee83/thumb_slide_0.jpg" />
|
132
|
-
<div class="scrubber"><div class="scrubbed" style="width:0;"></div></div>
|
133
|
-
</a>
|
134
|
-
<div class="talk-listing-meta">
|
135
|
-
<h3 class="title">
|
136
|
-
<a href="/ferperales/using-remotes-in-a-presentation">Using remotes in a presentation</a>
|
137
|
-
</h3>
|
138
|
-
<p class="date">
|
139
|
-
May 30, 2014 by
|
140
|
-
<a href="/ferperales">Fernando Perales</a></p>
|
141
|
-
</div>
|
142
|
-
</div>
|
143
|
-
|
144
|
-
<div class="talk public" data-id="dfc5df0089320131712b6e502952b505" data-slide-count="44">
|
145
|
-
<a class="slide_preview scrub" href="/ferperales/introduccion-a-git-y-github">
|
146
|
-
<img alt="Thumb_slide_0" src="https://speakerd.s3.amazonaws.com/presentations/dfc5df0089320131712b6e502952b505/thumb_slide_0.jpg" />
|
147
|
-
<div class="scrubber"><div class="scrubbed" style="width:0;"></div></div>
|
148
|
-
</a>
|
149
|
-
<div class="talk-listing-meta">
|
150
|
-
<h3 class="title">
|
151
|
-
<a href="/ferperales/introduccion-a-git-y-github">Introducción a git y GitHub</a>
|
152
|
-
</h3>
|
153
|
-
<p class="date">
|
154
|
-
Mar 8, 2014 by
|
155
|
-
<a href="/ferperales">Fernando Perales</a></p>
|
156
|
-
</div>
|
157
|
-
</div>
|
158
|
-
|
159
|
-
<div class="talk public" data-id="fc037890ca6c0130db67327b70541545" data-slide-count="20">
|
160
|
-
<a class="slide_preview scrub" href="/ferperales/marilyn-monroe-top-20-19-moments">
|
161
|
-
<img alt="Thumb_slide_0" src="https://speakerd.s3.amazonaws.com/presentations/fc037890ca6c0130db67327b70541545/thumb_slide_0.jpg" />
|
162
|
-
<div class="scrubber"><div class="scrubbed" style="width:0;"></div></div>
|
163
|
-
</a>
|
164
|
-
<div class="talk-listing-meta">
|
165
|
-
<h3 class="title">
|
166
|
-
<a href="/ferperales/marilyn-monroe-top-20-19-moments">Marilyn Monroe Top -20- 19 moments</a>
|
167
|
-
</h3>
|
168
|
-
<p class="date">
|
169
|
-
Jul 9, 2013 by
|
170
|
-
<a href="/ferperales">Fernando Perales</a></p>
|
171
|
-
</div>
|
172
|
-
</div>
|
173
|
-
|
174
|
-
<div class="talk public" data-id="bf5480d0b1150130d014221a8388c3ea" data-slide-count="31">
|
175
|
-
<a class="slide_preview scrub" href="/ferperales/from-just-hired-to-just-graduated">
|
176
|
-
<img alt="Thumb_slide_0" src="https://speakerd.s3.amazonaws.com/presentations/bf5480d0b1150130d014221a8388c3ea/thumb_slide_0.jpg" />
|
177
|
-
<div class="scrubber"><div class="scrubbed" style="width:0;"></div></div>
|
178
|
-
</a>
|
179
|
-
<div class="talk-listing-meta">
|
180
|
-
<h3 class="title">
|
181
|
-
<a href="/ferperales/from-just-hired-to-just-graduated">From just hired to just graduated</a>
|
182
|
-
</h3>
|
183
|
-
<p class="date">
|
184
|
-
Jun 6, 2013 by
|
185
|
-
<a href="/ferperales">Fernando Perales</a></p>
|
186
|
-
</div>
|
187
|
-
</div>
|
188
|
-
|
189
|
-
<div class="talk public" data-id="a93b60209e7501301b2f469a61e096c5" data-slide-count="96">
|
190
|
-
<a class="slide_preview scrub" href="/ferperales/termine-la-universidad-ahora-que-hago">
|
191
|
-
<img alt="Thumb_slide_0" src="https://speakerd.s3.amazonaws.com/presentations/a93b60209e7501301b2f469a61e096c5/thumb_slide_0.jpg" />
|
192
|
-
<div class="scrubber"><div class="scrubbed" style="width:0;"></div></div>
|
193
|
-
</a>
|
194
|
-
<div class="talk-listing-meta">
|
195
|
-
<h3 class="title">
|
196
|
-
<a href="/ferperales/termine-la-universidad-ahora-que-hago">Terminé la universidad: ¿ahora qué hago?</a>
|
197
|
-
</h3>
|
198
|
-
<p class="date">
|
199
|
-
May 14, 2013 by
|
200
|
-
<a href="/ferperales">Fernando Perales</a></p>
|
201
|
-
</div>
|
202
|
-
</div>
|
203
|
-
|
204
|
-
<div class="talk public" data-id="6dcd02400e8901305c251231382037e3" data-slide-count="13">
|
205
|
-
<a class="slide_preview scrub" href="/ferperales/songfly-dot-me">
|
206
|
-
<img alt="Thumb_slide_0" src="https://speakerd.s3.amazonaws.com/presentations/6dcd02400e8901305c251231382037e3/thumb_slide_0.jpg" />
|
207
|
-
<div class="scrubber"><div class="scrubbed" style="width:0;"></div></div>
|
208
|
-
</a>
|
209
|
-
<div class="talk-listing-meta">
|
210
|
-
<h3 class="title">
|
211
|
-
<a href="/ferperales/songfly-dot-me">Songfly.me</a>
|
212
|
-
</h3>
|
213
|
-
<p class="date">
|
214
|
-
Mar 21, 2013 by
|
215
|
-
<a href="/ferperales">Fernando Perales</a></p>
|
216
|
-
</div>
|
217
|
-
</div>
|
218
|
-
|
219
|
-
<div class="talk public" data-id="41d02bf05ce00130605912313d141deb" data-slide-count="22">
|
220
|
-
<a class="slide_preview scrub" href="/ferperales/hackergarage">
|
221
|
-
<img alt="Thumb_slide_0" src="https://speakerd.s3.amazonaws.com/presentations/41d02bf05ce00130605912313d141deb/thumb_slide_0.jpg" />
|
222
|
-
<div class="scrubber"><div class="scrubbed" style="width:0;"></div></div>
|
223
|
-
</a>
|
224
|
-
<div class="talk-listing-meta">
|
225
|
-
<h3 class="title">
|
226
|
-
<a href="/ferperales/hackergarage">HackerGarage</a>
|
227
|
-
</h3>
|
228
|
-
<p class="date">
|
229
|
-
Feb 19, 2013 by
|
230
|
-
<a href="/ferperales">Fernando Perales</a></p>
|
231
|
-
</div>
|
232
|
-
</div>
|
233
|
-
|
234
|
-
<div class="talk public" data-id="41cbae301bd30130ead722000a1c80bb" data-slide-count="16">
|
235
|
-
<a class="slide_preview scrub" href="/ferperales/eventos-hg">
|
236
|
-
<img alt="Thumb_slide_0" src="https://speakerd.s3.amazonaws.com/presentations/41cbae301bd30130ead722000a1c80bb/thumb_slide_0.jpg" />
|
237
|
-
<div class="scrubber"><div class="scrubbed" style="width:0;"></div></div>
|
238
|
-
</a>
|
239
|
-
<div class="talk-listing-meta">
|
240
|
-
<h3 class="title">
|
241
|
-
<a href="/ferperales/eventos-hg">Eventos HG</a>
|
242
|
-
</h3>
|
243
|
-
<p class="date">
|
244
|
-
Nov 28, 2012 by
|
245
|
-
<a href="/ferperales">Fernando Perales</a></p>
|
246
|
-
</div>
|
247
|
-
</div>
|
248
|
-
|
249
|
-
<div class="talk public" data-id="50799967cd5250000207dfe2" data-slide-count="17">
|
250
|
-
<a class="slide_preview scrub" href="/ferperales/strings-and-ranges-in-ruby">
|
251
|
-
<img alt="Thumb_slide_0" src="https://speakerd.s3.amazonaws.com/presentations/50799967cd5250000207dfe2/thumb_slide_0.jpg" />
|
252
|
-
<div class="scrubber"><div class="scrubbed" style="width:0;"></div></div>
|
253
|
-
</a>
|
254
|
-
<div class="talk-listing-meta">
|
255
|
-
<h3 class="title">
|
256
|
-
<a href="/ferperales/strings-and-ranges-in-ruby">Strings and ranges in Ruby</a>
|
257
|
-
</h3>
|
258
|
-
<p class="date">
|
259
|
-
Oct 13, 2012 by
|
260
|
-
<a href="/ferperales">Fernando Perales</a></p>
|
261
|
-
</div>
|
262
|
-
</div>
|
263
|
-
|
264
|
-
<div class="talk public" data-id="5063daf9d6efd30002040027" data-slide-count="33">
|
265
|
-
<a class="slide_preview scrub" href="/ferperales/ninjavascript">
|
266
|
-
<img alt="Thumb_slide_0" src="https://speakerd.s3.amazonaws.com/presentations/5063daf9d6efd30002040027/thumb_slide_0.jpg" />
|
267
|
-
<div class="scrubber"><div class="scrubbed" style="width:0;"></div></div>
|
268
|
-
</a>
|
269
|
-
<div class="talk-listing-meta">
|
270
|
-
<h3 class="title">
|
271
|
-
<a href="/ferperales/ninjavascript">ninJavascript</a>
|
272
|
-
</h3>
|
273
|
-
<p class="date">
|
274
|
-
Sep 27, 2012 by
|
275
|
-
<a href="/ferperales">Fernando Perales</a></p>
|
276
|
-
</div>
|
277
|
-
</div>
|
278
|
-
|
279
|
-
<div class="talk public" data-id="5063dc09ca52410002040a1c" data-slide-count="21">
|
280
|
-
<a class="slide_preview scrub" href="/ferperales/ajax">
|
281
|
-
<img alt="Thumb_slide_0" src="https://speakerd.s3.amazonaws.com/presentations/5063dc09ca52410002040a1c/thumb_slide_0.jpg" />
|
282
|
-
<div class="scrubber"><div class="scrubbed" style="width:0;"></div></div>
|
283
|
-
</a>
|
284
|
-
<div class="talk-listing-meta">
|
285
|
-
<h3 class="title">
|
286
|
-
<a href="/ferperales/ajax">AJAX</a>
|
287
|
-
</h3>
|
288
|
-
<p class="date">
|
289
|
-
Sep 27, 2012 by
|
290
|
-
<a href="/ferperales">Fernando Perales</a></p>
|
291
|
-
</div>
|
292
|
-
</div>
|
293
|
-
|
294
|
-
<div class="talk public" data-id="5063dbc8d6efd3000204029c" data-slide-count="11">
|
295
|
-
<a class="slide_preview scrub" href="/ferperales/json">
|
296
|
-
<img alt="Thumb_slide_0" src="https://speakerd.s3.amazonaws.com/presentations/5063dbc8d6efd3000204029c/thumb_slide_0.jpg" />
|
297
|
-
<div class="scrubber"><div class="scrubbed" style="width:0;"></div></div>
|
298
|
-
</a>
|
299
|
-
<div class="talk-listing-meta">
|
300
|
-
<h3 class="title">
|
301
|
-
<a href="/ferperales/json">JSON</a>
|
302
|
-
</h3>
|
303
|
-
<p class="date">
|
304
|
-
Sep 27, 2012 by
|
305
|
-
<a href="/ferperales">Fernando Perales</a></p>
|
306
|
-
</div>
|
307
|
-
</div>
|
308
|
-
|
309
|
-
<div class="talk empty"><div class="slide_preview"></div></div>
|
310
|
-
|
311
|
-
</div>
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
</div>
|
316
|
-
|
317
|
-
<div class="sidebar">
|
318
|
-
<div class="sidebar">
|
319
|
-
<h1>Speaker Details</h1>
|
320
|
-
<a href="/ferperales" class="bio_mugshot"><img alt="597e300a2878d54443eeb8cbde63edad?s=47" src="//secure.gravatar.com/avatar/597e300a2878d54443eeb8cbde63edad?s=47" /></a>
|
321
|
-
<h2>Fernando Perales</h2>
|
322
|
-
<div class="bio"><p><a href="http://ferperales.net/" rel="nofollow">http://ferperales.net/</a></p></div>
|
323
|
-
|
324
|
-
<ul class="delimited">
|
325
|
-
<li><a href="/ferperales/stars">7 Stars</a></li>
|
326
|
-
</ul>
|
327
|
-
|
328
|
-
<a href="/account" class="button">Edit My Account</a>
|
329
|
-
|
330
|
-
|
331
|
-
</div>
|
332
|
-
|
333
|
-
</div>
|
334
|
-
</div>
|
335
|
-
</section>
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
</div>
|
340
|
-
|
341
|
-
<footer>
|
342
|
-
<div class="container">
|
343
|
-
<span class="copyright">
|
344
|
-
<img alt="Invertocat" src="https://d2dfho4r6t7asi.cloudfront.net/assets/invertocat-f10d7398407ff679b054b8c4c86aa639.svg" />
|
345
|
-
<div class="copyright-text">Copyright © 2014 <a href="http://github.com">GitHub</a> Inc.
|
346
|
-
<div class="crumb">All slide content and descriptions are owned by their creators.</div>
|
347
|
-
</div>
|
348
|
-
</span>
|
349
|
-
|
350
|
-
<ul class="links">
|
351
|
-
<li><a href="/faq">F.A.Q.</a></li>
|
352
|
-
<li><a href="/tos">Terms of Service</a></li>
|
353
|
-
<li><a href="/privacy">Privacy Policy</a></li>
|
354
|
-
</ul>
|
355
|
-
</div>
|
356
|
-
</footer>
|
357
|
-
|
358
|
-
<script type="text/javascript">
|
359
|
-
var _gaq = _gaq || [];
|
360
|
-
_gaq.push(['_setAccount', 'UA-19290517-1']);
|
361
|
-
_gaq.push(['_setDomainName', '.speakerdeck.com']);
|
362
|
-
_gaq.push(['_trackPageview']);
|
363
|
-
|
364
|
-
(function() {
|
365
|
-
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
366
|
-
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
367
|
-
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
368
|
-
})();
|
369
|
-
</script>
|
370
|
-
|
371
|
-
|
372
|
-
<script type="text/javascript">
|
373
|
-
(function() {
|
374
|
-
var t = document.createElement('script');
|
375
|
-
t.type = 'text/javascript';
|
376
|
-
t.async = true;
|
377
|
-
t.id = 'gauges-tracker';
|
378
|
-
t.setAttribute('data-site-id',
|
379
|
-
'4dd2a2b5613f5d2021000005');
|
380
|
-
t.src = '//secure.gaug.es/track.js';
|
381
|
-
var s = document.getElementsByTagName('script')[0];
|
382
|
-
s.parentNode.insertBefore(t, s);
|
383
|
-
})();
|
384
|
-
</script>
|
385
|
-
|
386
|
-
</body>
|
387
|
-
</html>
|
388
|
-
|