| Acknowledgments |
|
xvii | |
| Introduction |
|
xix | |
| Part I: Internet Infrastructure |
|
1 | |
|
Chapter 1: Bringing Your Business Online |
|
|
3 | |
|
|
|
3 | |
|
|
|
8 | |
|
|
|
10 | |
|
Setting Up Your Development Environment |
|
|
12 | |
|
Creating Your Own Website |
|
|
16 | |
|
|
|
16 | |
|
Chapter 2: Unix Is the Engine |
|
|
17 | |
|
|
|
17 | |
|
|
|
19 | |
|
|
|
19 | |
|
|
|
20 | |
|
|
|
20 | |
|
|
|
21 | |
|
|
|
21 | |
|
Users, Groups, and Permissions |
|
|
30 | |
|
|
|
38 | |
|
|
|
39 | |
|
|
|
43 | |
|
|
|
45 | |
|
Chapter 3: Unix Applications |
|
|
47 | |
|
|
|
47 | |
|
|
|
49 | |
|
|
|
52 | |
|
|
|
54 | |
|
|
|
62 | |
|
|
|
63 | |
|
Using Google Apps for Email |
|
|
67 | |
|
|
|
69 | |
|
|
|
76 | |
|
|
|
77 | |
|
Using a port-knocking utility |
|
|
79 | |
|
|
|
80 | |
| Part II: Client-Side Development |
|
81 | |
|
|
|
83 | |
|
|
|
83 | |
|
|
|
85 | |
|
|
|
86 | |
|
|
|
89 | |
|
|
|
93 | |
|
|
|
95 | |
|
|
|
99 | |
|
Using Table-Based Layouts |
|
|
103 | |
|
|
|
105 | |
|
|
|
106 | |
|
Chapter 5: Cascading Style Sheets |
|
|
107 | |
|
|
|
108 | |
|
|
|
109 | |
|
|
|
116 | |
|
|
|
119 | |
|
|
|
128 | |
|
|
|
135 | |
|
|
|
135 | |
|
Coding a two-column layout |
|
|
137 | |
|
Coding a three-column layout |
|
|
140 | |
|
|
|
142 | |
|
Creating an entire layout |
|
|
142 | |
|
|
|
143 | |
|
|
|
144 | |
|
|
|
145 | |
|
|
|
146 | |
|
Styling the sidebar elements |
|
|
147 | |
|
|
|
147 | |
|
|
|
148 | |
|
|
|
149 | |
|
|
|
151 | |
|
The Role of Client-Side Scripting |
|
|
151 | |
|
JavaScript as a First Programming language |
|
|
153 | |
|
|
|
157 | |
|
|
|
159 | |
|
|
|
159 | |
|
|
|
160 | |
|
|
|
161 | |
|
|
|
161 | |
|
Adding to your HTML foundation |
|
|
162 | |
|
|
|
163 | |
|
Connecting functions and arrays |
|
|
163 | |
|
Working with the Document Object Model |
|
|
164 | |
|
|
|
165 | |
|
|
|
166 | |
|
|
|
166 | |
|
Common JavaScript Techniques |
|
|
167 | |
|
Passing form values to functions with 'this' |
|
|
167 | |
|
|
|
167 | |
|
Opening and closing windows |
|
|
170 | |
|
|
|
171 | |
|
|
|
172 | |
|
|
|
173 | |
|
|
|
173 | |
|
|
|
174 | |
|
|
|
175 | |
|
|
|
176 | |
|
|
|
177 | |
|
|
|
178 | |
|
|
|
180 | |
|
|
|
182 | |
|
|
|
183 | |
| Part III: Web Design |
|
185 | |
|
Chapter 7: Design Concepts |
|
|
187 | |
|
Design Sense Isn't Innate |
|
|
188 | |
|
|
|
188 | |
|
|
|
188 | |
|
|
|
189 | |
|
|
|
190 | |
|
|
|
191 | |
|
|
|
193 | |
|
|
|
194 | |
|
|
|
195 | |
|
|
|
195 | |
|
|
|
195 | |
|
|
|
198 | |
|
|
|
199 | |
|
|
|
200 | |
|
|
|
201 | |
|
|
|
204 | |
|
Chapter 8: User Interface Design |
|
|
205 | |
|
|
|
205 | |
|
|
|
207 | |
|
|
|
210 | |
|
Make links look like links |
|
|
213 | |
|
Separate elements with white space |
|
|
213 | |
|
Know the steps to accomplish a task |
|
|
215 | |
|
|
|
217 | |
|
|
|
218 | |
|
|
|
218 | |
|
|
|
219 | |
|
|
|
219 | |
|
Chapter 9: Search Engine Optimization |
|
|
221 | |
|
|
|
221 | |
|
PageRank and the Art of Relevance |
|
|
222 | |
|
|
|
223 | |
|
|
|
224 | |
|
|
|
227 | |
|
|
|
228 | |
|
|
|
230 | |
|
|
|
232 | |
|
|
|
232 | |
|
|
|
235 | |
|
|
|
239 | |
|
Chapter 10: Wireframe Basics |
|
|
241 | |
|
|
|
241 | |
|
|
|
243 | |
|
|
|
243 | |
|
|
|
244 | |
|
|
|
246 | |
|
|
|
249 | |
|
|
|
252 | |
|
|
|
252 | |
|
|
|
254 | |
|
|
|
255 | |
|
|
|
256 | |
|
|
|
257 | |
|
|
|
259 | |
|
|
|
262 | |
|
Grid Tools and Techniques |
|
|
266 | |
|
|
|
266 | |
|
|
|
267 | |
|
|
|
268 | |
|
|
|
269 | |
|
|
|
270 | |
|
Chapter 12: Photoshop 101 |
|
|
271 | |
|
|
|
272 | |
|
|
|
272 | |
|
|
|
275 | |
|
|
|
279 | |
|
|
|
281 | |
|
|
|
286 | |
|
|
|
289 | |
|
|
|
293 | |
|
|
|
294 | |
|
|
|
299 | |
| Part IV: Server Side Development |
|
301 | |
|
Chapter 13: Principles of Server-Side Development |
|
|
303 | |
|
Deconstructing a Web Application |
|
|
304 | |
|
|
|
305 | |
|
|
|
307 | |
|
|
|
308 | |
|
|
|
308 | |
|
|
|
310 | |
|
Ruby on Rails installation |
|
|
313 | |
|
|
|
315 | |
|
Chapter 14: MySQL Database Server |
|
|
317 | |
|
|
|
318 | |
|
|
|
318 | |
|
|
|
320 | |
|
|
|
322 | |
|
Getting Data into and out of Tables |
|
|
326 | |
|
Updating and deleting rows |
|
|
331 | |
|
|
|
332 | |
|
|
|
334 | |
|
|
|
339 | |
|
|
|
340 | |
|
Chapter 15: PHP Introduction |
|
|
341 | |
|
Your First PHP Application |
|
|
341 | |
|
|
|
346 | |
|
|
|
346 | |
|
|
|
348 | |
|
|
|
349 | |
|
|
|
349 | |
|
|
|
351 | |
|
Passing data between pages |
|
|
352 | |
|
|
|
361 | |
|
|
|
362 | |
|
Creating a PHP Application |
|
|
365 | |
|
Drafting the Baseball! application |
|
|
365 | |
|
Writing the template code |
|
|
369 | |
|
|
|
372 | |
|
|
|
378 | |
|
Completing the application's roster |
|
|
383 | |
|
|
|
386 | |
|
Chapter 16: Ruby Introduction |
|
|
387 | |
|
Understanding Object-Oriented Code |
|
|
388 | |
|
Your First Ruby Application |
|
|
389 | |
|
|
|
390 | |
|
|
|
391 | |
|
|
|
391 | |
|
|
|
392 | |
|
|
|
394 | |
|
|
|
395 | |
|
|
|
396 | |
|
|
|
398 | |
|
Connecting objects together |
|
|
401 | |
|
Adding features with Ruby gems |
|
|
404 | |
|
|
|
413 | |
|
Using the Ruby documentation |
|
|
417 | |
|
|
|
420 | |
|
Chapter 17: Ruby on Rails |
|
|
421 | |
|
|
|
421 | |
|
Your First Rails Application |
|
|
423 | |
|
Rails models and migrations |
|
|
425 | |
|
|
|
431 | |
|
Writing the views and controllers |
|
|
433 | |
|
Adding the remaining features |
|
|
442 | |
|
Digging Deeper: Introducing the Pipeline Application |
|
|
447 | |
|
Building the model objects |
|
|
449 | |
|
|
|
455 | |
|
Setting up the views and controllers |
|
|
456 | |
|
The Finishing Touches: A Tour |
|
|
465 | |
|
Implementing AJAX in your application |
|
|
465 | |
|
Reusing view elements with partials |
|
|
467 | |
|
Managing multiple models at once |
|
|
469 | |
|
Feature complete but never finished |
|
|
471 | |
|
Pushing Rails to Production |
|
|
471 | |
|
|
|
472 | |
|
|
|
472 | |
|
|
|
473 | |
| Appendix A: Running a Freelance Web Business |
|
475 | |
|
|
|
475 | |
|
|
|
475 | |
|
Centralizing domain management with a registrar |
|
|
476 | |
|
Choosing a dedicated server for your business |
|
|
477 | |
|
Providing clients with a selection of hosting options |
|
|
478 | |
|
|
|
478 | |
|
|
|
479 | |
|
Subcontracting versus hiring |
|
|
479 | |
|
How to compete with the nephew in the basement |
|
|
480 | |
|
Large versus small clients |
|
|
481 | |
|
Getting new clients by keeping the old ones |
|
|
481 | |
|
Up-selling your services for more revenue |
|
|
482 | |
|
Surviving in the Long Term |
|
|
483 | |
|
|
|
483 | |
|
|
|
484 | |
|
Staying relevant with new skills |
|
|
484 | |
| Appendix B: Resources |
|
487 | |
|
|
|
487 | |
|
Running other operating systems |
|
|
488 | |
|
|
|
488 | |
|
|
|
489 | |
|
|
|
489 | |
|
|
|
490 | |
| Glossary |
|
491 | |