hackety_hack-lessons 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.swp
2
+ *.gem
3
+ *.rbc
4
+ .bundle
5
+ .config
6
+ .yardoc
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in hackety_hack-lessons.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Steve Klabnik
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # HacketyHack::Lessons
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'hackety_hack-lessons'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install hackety_hack-lessons
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
@@ -0,0 +1,122 @@
1
+ # Data Types
2
+
3
+ ## This is where it starts getting fun!
4
+
5
+ ### Let's get started
6
+
7
+ Awesome! Glad to see you here! You're going to learn some great things in this
8
+ lesson. Ruby has a few different ways to manipulate data, and you're going to
9
+ play with them!
10
+
11
+ Click the icon like this (on the bottom of the screen) to get started:
12
+
13
+ ![Not this one! The one below!](/icon_button/arrow_right)
14
+
15
+ ### Lesson Controls
16
+
17
+ Before we move on, Here's a refresher on the controls you can use to move around
18
+ in the Lesson.
19
+
20
+ ![](/icon_button/arrow_left)
21
+ __back__: goes back one page
22
+
23
+ ![](/icon_button/arrow_right)
24
+ __continue__: goes to the next page
25
+
26
+ ![](/icon_button/menu)
27
+ __menu__: makes it easy to jump around to any lesson
28
+
29
+ ![](/icon_button/x)
30
+ __close__: closes the tutor
31
+
32
+ Don't forget! Press this to move to the next part:
33
+
34
+ ![](/icon_button/arrow_right)
35
+
36
+ Have at it!
37
+
38
+ ## Strings
39
+
40
+ ### You've got this down!
41
+
42
+ _String_s are something you already know about! Let's refresh your memory.
43
+
44
+ Basically, Strings let you manipulate a bunch of characters. It's sort of like
45
+ writing something down: and often, Strings are used for handling input and
46
+ output. Check it out:
47
+
48
+ name = "Steve"
49
+ alert name
50
+
51
+ This should be familliar. If it isn't you may want to go review the Basic Ruby
52
+ lesson before moving on. Gotta learn the basics before you can understand the
53
+ hard stuff!
54
+
55
+ ### Concatawhat?
56
+
57
+ Here's a big word for you: __concatenation__. It's a mouthful, but luckily for
58
+ you, it means something really simple:
59
+
60
+ first_name = "Steve"
61
+ last_name = "Klabnik"
62
+ alert first_name + last_name
63
+
64
+ See what I mean by addition? The _+_ lets us __concatenate__ the two Strings
65
+ together. The first name goes up front, and the last name goes in the back. Nice
66
+ and easy.
67
+
68
+ ### Interpawho?
69
+
70
+ Okay, since you did so well with that word, I'm going to throw another one at
71
+ you, while you're still trying to recover: __interpolation__. It kinda means
72
+ 'put into.' See if this makes sense:
73
+
74
+ first_name = "Steve"
75
+ alert "The first name is #{first_name}".
76
+
77
+ Whoah! What's up with that? Try running it, and see what it does.
78
+
79
+ ### They're like pincers
80
+
81
+ Terrible analogy alert: See that { and its partner in crime, }? These two _curly
82
+ braces_ are like the pincers of some strange species of crab. You can put
83
+ whatever you want between them, and they hold your info in place in the middle
84
+ of a string.
85
+
86
+
87
+ Oh, and the # (a _hash_), is a funky hat the crab wears. Or something. I dunno.
88
+ Point is, you need all three parts, #{} and something in the middle. And that's
89
+ __interpolation__.
90
+
91
+ ## Arrays
92
+
93
+ ### The 411
94
+
95
+ ### Concatination
96
+
97
+ ### A short shout-out to Modules
98
+
99
+ ### Not a treasure map...
100
+
101
+ ### Gotta collect 'em all!
102
+
103
+ ## Hashes
104
+
105
+ ### A slightly different Array
106
+
107
+ ## Putting them together
108
+
109
+ ### Arrays of Arrays
110
+
111
+ ### Arrays of hashes
112
+
113
+ ### Hashes of hashes
114
+
115
+ ### Hashes of Arrays
116
+
117
+ ## Summary
118
+
119
+ ### Good job!
120
+
121
+ Awesome! You should be prepared to play around with all kinds of data now. Keep
122
+ up all the good work!
@@ -0,0 +1,142 @@
1
+ # Beginner Data Structures
2
+
3
+ ## Hello there!
4
+
5
+ ### Let's get started
6
+
7
+ Welcome to your first lesson about Data Structures! Now that you know how to
8
+ obtain data with Ruby you're also going to be able to store it in collections.
9
+ Arrays and Hashes are two key classes in Ruby that are able to help with
10
+ storing your data! Let's get going!
11
+
12
+ Click the icon like this (on the bottom of the screen) to get started:
13
+
14
+ ![Not this one! The one below!](/icon_button/arrow_right)
15
+
16
+ ### Lesson Controls
17
+
18
+ Before we move on, Here's a refresher on the controls you can use to move around
19
+ in the Lesson.
20
+
21
+ ![](/icon_button/arrow_left)
22
+ __back__: goes back one page
23
+
24
+ ![](/icon_button/arrow_right)
25
+ __continue__: goes to the next page
26
+
27
+ ![](/icon_button/menu)
28
+ __menu__: makes it easy to jump around to any lesson
29
+
30
+ ![](/icon_button/x)
31
+ __close__: closes the tutor
32
+
33
+ Don't forget! Press this to move to the next part:
34
+
35
+ ![](/icon_button/arrow_right)
36
+
37
+ Have at it!
38
+
39
+ ### What are Arrays?
40
+
41
+ An array can be thought of as a dresser where each drawer is a numbered spot.
42
+ This dresser is a collection of slots where one thing can be in each place.
43
+ Arrays are used to store data like numbers, strings, or even other Arrays!
44
+ Ruby makes it really easy to create and store things inside of them. Let's get
45
+ going!
46
+
47
+ ### What can we do with them?
48
+
49
+ my_array = [1,2,"shoes"]
50
+
51
+ Try typing this and press the Run button.
52
+
53
+ You created an array with the numbers 1, 2, and the string 'shoes' in it.
54
+ Things in the array can be gotten by typing the array's variable name
55
+ (`my_array`) and square brackets (`[]`) with a number inside of the brackets.
56
+ This number can be though of as the address to that spot in the array. It's
57
+ good to remember that arrays start at 0 in Ruby.
58
+
59
+ alert my_array[0]
60
+
61
+ What thing in the array are you going to get back? Type this in and press the
62
+ 'Run' button.
63
+
64
+ ### Arrays in action!
65
+
66
+ When using Arrays we need to know a few things first. Arrays in Ruby can expand
67
+ to the size that you need them. So if you wanted to put the string 'cat' at
68
+ spot 99(which would be the 100th item in the array) we could put:
69
+
70
+ my_array[99] = "cat"
71
+
72
+ If there is nothing in a spot you will have 'nil' filling it.
73
+
74
+ If we wanted to print out everything in an array we could do something like
75
+ this:
76
+
77
+ my_new_array = ["cat","dog","mouse"]
78
+
79
+ Then we would put:
80
+
81
+ my_new_array.each {|animal| alert animal}
82
+
83
+ Type this all in and press the 'Run' button.
84
+
85
+ ### Arrays in even more action!
86
+
87
+ We've seen what we can do with arrays, but what other things can they do to help
88
+ us? What if we had an array of numbers and we wanted to sort it? Try typing
89
+ this this and running it:
90
+
91
+ num_array = [4,3,22,19,100,45]
92
+
93
+ alert num_array.sort
94
+
95
+ That was really easy to sort it from lowest to highest! What if we want it from
96
+ highest to lowest though? Type this in next and press the 'Run' button.
97
+
98
+ alert num_array.reverse
99
+
100
+ The array class has so many methods that you can call upon it. Take a look on
101
+ the Ruby API: http://www.ruby-doc.org/core/classes/Array.html
102
+
103
+ ## The Hash
104
+
105
+ ### What are Hashes?
106
+
107
+ Now that we've gotten an introduction to Arrays we can also learn about Hashes!
108
+ Hashes in other languages are sometimes called Dictionaries. Well, what do they
109
+ do? Like in a dictionary you are able to look up a word or 'key' which
110
+ corresponds to a 'value'. You separate the key and value with a hashrocket
111
+ (=>). Just like Arrays you can access a certain key by typing the hashes
112
+ variable name and the key in square brackets ([]). Let's try working with a
113
+ hash!
114
+
115
+ my_hash = { "dog" => "puppy", "cat" => "kitten" }
116
+
117
+ alert my_hash["dog"]
118
+
119
+ Try typing this all in and press the 'Run' button!
120
+
121
+ ### Working with Hashes
122
+
123
+ So what else are we able to do with hashes? Let's try something will help us
124
+ see if something is in the hash as a key or value The methods `has_key?` and
125
+ `has_value?` are exactly what we're looking for!
126
+
127
+ new_hash = { "1" => "one", "2" => "two"}
128
+
129
+ alert new_hash.has_key?("1")
130
+
131
+ alert new_hash.has_value?("one")
132
+
133
+ Try typing these in and press the 'Run' button for each of the methods!
134
+
135
+ ### Let's tie these Hashes and Arrays together!
136
+
137
+ We've looked at two different data structures that are able to hold data for us
138
+ and let us access certain parts of the collections. Both Arrays and Hashes are
139
+ commonly used by programmers and are great to have knowledge about! Both of
140
+ these data structures have so many methods that can be read about in the Ruby
141
+ Documentation: http://www.ruby-doc.org/core/. Now with Arrays and Hashes you
142
+ should be able to keep your data organized and usable!
@@ -0,0 +1,321 @@
1
+ # Beginner Programming
2
+
3
+ ## Hello there!
4
+
5
+ ### Round One
6
+
7
+ So, you'd like to learn how to hack code with the best of 'em, eh? Well, you've
8
+ come to the right place. This is the very first lesson I have to share with you.
9
+ It all starts here.
10
+
11
+ I want to get you started off on the best possible foot with making programs, so
12
+ we'll start off by talking a little bit about what programming is, and then
13
+ we'll write some basic programs to draw fun things on the screen. Sound good?
14
+ Off we go!
15
+
16
+ Click the icon like this (on the bottom of the screen) to get started:
17
+
18
+ ![Not this one! The one below!](/icon_button/arrow_right)
19
+
20
+ ### Lesson Controls
21
+
22
+ Before we move on, Here's a refresher on the controls you can use to move around
23
+ in the Lesson.
24
+
25
+ ![](/icon_button/arrow_left)
26
+ __back__: goes back one page
27
+
28
+ ![](/icon_button/arrow_right)
29
+ __continue__: goes to the next page
30
+
31
+ ![](/icon_button/menu)
32
+ __menu__: makes it easy to jump around to any lesson
33
+
34
+ ![](/icon_button/x)
35
+ __close__: closes the tutor
36
+
37
+ Don't forget! Press this to move to the next part:
38
+
39
+ ![](/icon_button/arrow_right)
40
+
41
+ Have at it!
42
+
43
+ ## Let's talk about programming
44
+
45
+ ### It's all about instructions
46
+
47
+ When you get down to it, programming is all about __algorithms__. That's a big
48
+ fancy word for 'a list of instructions.' Every program is simply a big to-do
49
+ list of instructions for the computer to follow.
50
+
51
+ You can turn almost anything into a list of instructions if you really think
52
+ about it. Most of the time, you've got so much practice at doing things that you
53
+ don't even think about these individual steps. You just do them. It's very
54
+ natural.
55
+
56
+ ### The computer is simple
57
+
58
+ Unfortunately, computers are actually quite simple. This may be contrary to
59
+ everything you've ever heard, but it's the truth. Even though we compare
60
+ computers to things like our brains, it's a really poor analogy. What computers
61
+ are actually really good at is performing simple, boring things over and over
62
+ again very accurately. They can't think for themselves!
63
+
64
+ This is why computers appear to be complex. They blindly follow whatever orders
65
+ they're given, without any thought about how those instructions are good or bad.
66
+ It's hard to think in such simple terms!
67
+
68
+ ### Explain yourself well
69
+
70
+ It's important to remember that you have to fully explain yourself to the
71
+ computer when you're programming. It can't figure out what you're trying to say,
72
+ so you have to say what you mean!
73
+
74
+ This takes some practice, so we're going to start off with some exercises in
75
+ explaining ourselves in very basic terms. It's almost like trying to explain
76
+ math to a young child: you have to go slowly, triple check your work, and have
77
+ some patience when it just doesn't quite get it.
78
+
79
+ ## Lists of Instructions
80
+
81
+ ### A to-do list, not a shopping list
82
+
83
+ When I say that computers follow lists of instructions, I mean a to-do list, not
84
+ a shopping list. What I'm trying to say is that these lists have an __order__ to
85
+ them that the computer follows. It does each step in turn as quickly as it
86
+ possibly can.
87
+
88
+ A shopping list is a different kind of list entirely. You can go to whichever
89
+ aisle you choose, and as long as you get everything before you leave, you're
90
+ A-OK. This isn't what the computer does at all.
91
+
92
+ ### How would you tell a person to do it?
93
+
94
+ Let's try an example: if you had to tell someone in words how to draw a square
95
+ on a piece of paper, how would you do it?
96
+
97
+ You're not allowed to say "like this" or "this way," that's cheating! You have
98
+ to spell out every detail.
99
+
100
+ ### Once again: computers are simple
101
+
102
+ How'd you do? I can't see what you said, but here's an example of how simple
103
+ computers are compared to people. Did you forget to mention how long each side
104
+ of the square is? If you didn't good job!
105
+
106
+ Here's how I'd do it, by the way. This isn't the only right answer, it's just an
107
+ example:
108
+
109
+ 1. Put your pen down on the paper.
110
+ 2. Draw right one inch.
111
+ 3. Draw down one inch.
112
+ 4. Draw left one inch.
113
+ 5. Draw up one inch.
114
+ 6. Take your pen off of the paper.
115
+ 7. Finished!
116
+
117
+ ## Turtles, all the way down.
118
+
119
+ ### Drawing... with turtles?
120
+
121
+ Okay! Enough of these thinking experiments. Let's actually make something. I bet
122
+ you've been wondering when that was going to start, right? It's really important
123
+ to get the basics down first.
124
+
125
+ We're going to tell the computer how to draw shapes... with turtles. Yes, you
126
+ heard me right. You're going to have to give these instructions to a turtle.
127
+
128
+ This particular turtle is carrying a pen. You have a piece of paper. The turtle
129
+ will follow your every word. But the turtle is a bit slow, and needs careful
130
+ instruction. Are you up to it?
131
+
132
+ ### The Turtle and its commands
133
+
134
+ We have to tell Hackety Hack that we want to tell the Turtle what to do. To do
135
+ that, we have a `Turtle` command. We can tell the `Turtle` two things:
136
+
137
+ `draw`: the turtle will follow our instructions at lightning speed,
138
+
139
+ `start`: an interactive window will appear, which lets you see the turtle move
140
+ at each step in the program. You can move at your own pace. This is useful if
141
+ the turtle isn't doing what you expect!
142
+
143
+ Click on the editor tab to get started:
144
+
145
+ ![Not this one, silly! the one on the left!](static/tab-new.png)
146
+
147
+ ### Type it in!
148
+
149
+ Cool. Now type this:
150
+
151
+ Turtle.draw
152
+
153
+ The period in between the `Turtle` and the `draw` connects them together.
154
+ Programming languages have rules, just like English has rules! You can think of
155
+ `Turtle` like a subject, and `draw` as a verb. Together, they make a sentence:
156
+ hey turtle, draw me something!
157
+
158
+ Once you've typed that in, go ahead and click the 'Run' button. The turtle moves
159
+ so quickly in `draw` mode that you won't even see him, but I assure you, he's
160
+ there!
161
+
162
+ ### Do... what I tell you to
163
+
164
+ Awesome! We've got the turtle going, at least. Now we need to tell it what we
165
+ want to draw!
166
+
167
+ Remember when we said that all programs are lists of instructions? In this case,
168
+ our program only has one instruction: `Turtle`, draw something! But we need to
169
+ be able to give the `Turtle` its own list of instructions.
170
+
171
+ To do this, we'll use two words: `do` and `end`. These two words together make
172
+ up a _sublist_ of things, just for the `Turtle`!
173
+
174
+ ### Changing the background
175
+
176
+ Let's try this: we can tell the `Turtle` that we want to use a different
177
+ background color by using the `background` command. Check it out:
178
+
179
+ Turtle.draw do
180
+ background maroon
181
+ end
182
+
183
+ Type this in and click 'Run'!
184
+
185
+ ### The Turtle gets its orders
186
+
187
+ Cool stuff! The background is now maroon. You can find a full list of colors
188
+ that are supported on the [Shoes
189
+ website](http://shoesrb.com/manual/Colors.html).
190
+
191
+ This is also how you make lists of instructions for the `Turtle` to follow. To
192
+ make it a little easier to see, programmers will often put two spaces before
193
+ sublists. Get in the habit now, you'll thank me later!
194
+
195
+ ### The pen
196
+
197
+ Now that we've got a snazzy background color, how do we draw some lines? Well,
198
+ the first thing you need to know about is the pen. The `Turtle` carries a pen
199
+ along, and drags it along the ground behind itself. You can change the color of
200
+ line the pen draws with the `pencolor` command.
201
+
202
+ ## Drawing lines
203
+
204
+ ### Sally forth!
205
+
206
+ Okay, enough dilly-dallying. Let's tell the turtle to draw a line! Here's my
207
+ line. Give this one a shot, then try your own colors and numbers!
208
+
209
+ Turtle.draw do
210
+ background lightslategray
211
+ pencolor honeydew
212
+ forward 50
213
+ end
214
+
215
+ 50 is the number of pixels to move foward, by the way.
216
+
217
+ ### You spin me right round, baby
218
+
219
+ Great! So you've got a line. But what if you don't want the `Turtle` to move
220
+ forward? Well, you can tell it to turn by using a `turnleft` or `turnright`
221
+ command, like this:
222
+
223
+ Turtle.draw do
224
+ background lightslategray
225
+ pencolor honeydew
226
+ forward 50
227
+ turnright 90
228
+ forward 50
229
+ end
230
+
231
+ Give that a shot, then play with it a bit!
232
+
233
+ If you're wondering what 90 means, it's the number of degrees that it'll turn.
234
+
235
+ ### I like to move it, move it
236
+
237
+ Okay, now we're cooking! Let's break this down again:
238
+
239
+ `Turtle.draw` tells the `Turtle` we want it to draw some things. The period
240
+ connects the two.
241
+
242
+ `do ... end` is a sublist of things. This is what we want the `Turtle` to be
243
+ drawing. Not for the rest of our program.
244
+
245
+ `pencolor` sets the color of the pen the `Turtle` is dragging along behind him,
246
+ and `background` sets the color of the background.
247
+
248
+ `turnright` (or its buddy `turnleft`) tells the `Turtle` to turn to the right or
249
+ left.
250
+
251
+ `forward` (or its friend `backward`) tells the `Turtle` to move.
252
+
253
+ ### Let's try drawing that square
254
+
255
+ Go ahead. Give it a shot. Try to get the `Turtle` to draw a square.
256
+
257
+ I'll wait. :)
258
+
259
+ ### Here's my version
260
+
261
+ Here's how I did it:
262
+
263
+ Turtle.draw do
264
+ background lightslategray
265
+ pencolor honeydew
266
+ forward 50
267
+ turnright 90
268
+ forward 50
269
+ turnright 90
270
+ forward 50
271
+ turnright 90
272
+ forward 50
273
+ end
274
+
275
+ ## Repeating ourselves
276
+
277
+ ### Pete and Repeat...
278
+
279
+ Man, that was a ton of reptition! My fingers almost fell off typing `forward`
280
+ and `turnright` there!
281
+
282
+ I have good news, though: I mentioned something earlier about computers. It
283
+ turns out that doing boring, repetitive things is something they're really good
284
+ at! They'll do the same thing over and over again, forever even as long as you
285
+ ask nicely.
286
+
287
+ ### Repeating repeating ourselves ourselves
288
+
289
+ Check it out: our `Turtle` actually knows numbers. For example:
290
+
291
+ Turtle.draw do
292
+ background lightslategray
293
+ pencolor honeydew
294
+ 4.times do
295
+ forward 50
296
+ turnright 90
297
+ end
298
+ end
299
+
300
+ Try running this example. It also draws a square! Wow!
301
+
302
+ ### 4.times
303
+
304
+ It's pretty easy: `4` can take instructions too, just like our `Turtle`. This
305
+ command repeats a list of instructions that many times. Fun! Four times. And the
306
+ `do` and `end` show which list of instructions go with the `4` rather than with
307
+ the `Turtle`.
308
+
309
+ ### Try it out!
310
+
311
+ Have a blast: make some fun shapes of your own!
312
+
313
+ ## Summary
314
+
315
+ ### Congratulations!
316
+
317
+ Wow, you're awesome. Pat yourself on the back. High five someone. You've got
318
+ these basics down!
319
+
320
+ Check out the _Basic Ruby_ lesson to pick up some totally different and exciting
321
+ things!