Learning Rails 3 Rails from the Outside In 1st Edition Simon St. Laurent
Learning Rails 3 Rails from the Outside In 1st Edition Simon St. Laurent
Learning Rails 3 Rails from the Outside In 1st Edition Simon St. Laurent
Learning Rails 3 Rails from the Outside In 1st Edition Simon St. Laurent
1. Learning Rails 3 Rails from the Outside In 1st
Edition Simon St. Laurent download
https://ebookname.com/product/learning-rails-3-rails-from-the-
outside-in-1st-edition-simon-st-laurent/
Get the full ebook with Bonus Features for a Better Reading Experience on ebookname.com
2. Instant digital products (PDF, ePub, MOBI) available
Download now and explore formats that suit you...
Rails Recipes Rails 3 Edition Chad Fowler
https://ebookname.com/product/rails-recipes-rails-3-edition-chad-
fowler/
Rails 4 in Action Revised Edition of Rails 3 in Action
Ryan Bigg
https://ebookname.com/product/rails-4-in-action-revised-edition-
of-rails-3-in-action-ryan-bigg/
Introducing Elixir Getting Started in Functional
Programming 2nd Edition Simon St. Laurent
https://ebookname.com/product/introducing-elixir-getting-started-
in-functional-programming-2nd-edition-simon-st-laurent/
Carbon Nanotubes and Related Structures Peter J. F.
Harris
https://ebookname.com/product/carbon-nanotubes-and-related-
structures-peter-j-f-harris/
3. Ethernet Networks Design Implementation Operation
Management 4th Edition Gilbert Held
https://ebookname.com/product/ethernet-networks-design-
implementation-operation-management-4th-edition-gilbert-held/
The Language of Psychoanalysis First Edition Laplanche
https://ebookname.com/product/the-language-of-psychoanalysis-
first-edition-laplanche/
Somebody Better Page Turners Level 1 1st Edition Julian
Thomlinson
https://ebookname.com/product/somebody-better-page-turners-
level-1-1st-edition-julian-thomlinson/
Death by a Thousand Cuts The Fight over Taxing
Inherited Wealth 1st Edition Michael J. Graetz
https://ebookname.com/product/death-by-a-thousand-cuts-the-fight-
over-taxing-inherited-wealth-1st-edition-michael-j-graetz/
Regret Developmental Cultural and Clinical Realms 1st
Edition Salman Akhtar
https://ebookname.com/product/regret-developmental-cultural-and-
clinical-realms-1st-edition-salman-akhtar/
4. China Building an Innovative Economy 1st Edition
Celeste Varum
https://ebookname.com/product/china-building-an-innovative-
economy-1st-edition-celeste-varum/
7. Learning Rails 3
Simon St.Laurent, Edd Dumbill, and Eric J. Gruber
Beijing • Cambridge • Farnham • Köln • Sebastopol • Tokyo
9. Table of Contents
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
1. Starting Up Ruby on Rails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
If You Run Windows, You’re Lucky 2
Getting Started at the Command Line 3
Starting Up Rails 8
Test Your Knowledge 9
Quiz 9
Answers 9
2. Rails on the Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Creating Your Own View 11
What Are All Those Folders? 14
Adding Some Data 16
How Hello World Works 18
Adding Logic to the View 20
Test Your Knowledge 22
Quiz 22
Answers 22
3. Adding Web Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
I Want My CSS! 23
Specifying Stylesheets 28
Creating a Layout for a Controller 29
Choosing a Layout from a Controller 31
Sharing Template Data with the Layout 33
Setting a Default Page 34
Test Your Knowledge 36
Quiz 36
Answers 36
iii
10. 4. Managing Data Flow: Controllers and Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Getting Started, Greeting Guests 37
Application Flow 42
Keeping Track: A Simple Guestbook 44
Connecting to a Database Through a Model 44
Connecting the Controller to the Model 47
Finding Data with ActiveRecord 52
Test Your Knowledge 54
Quiz 54
Answers 54
5. Accelerating Development with Scaffolding and REST . . . . . . . . . . . . . . . . . . . . . . . . 57
A First Look at Scaffolding 57
REST and Controller Best Practices 61
Websites and Web Applications 61
Toward a Cleaner Approach 63
Examining a RESTful Controller 64
Index: An Overview of Data 69
Show: Just One Row of Data 71
New: A Blank Set of Data Fields 71
Edit: Hand Me That Data, Please 72
Create: Save Something New 72
Put This Updated Record In 74
Destroy It 75
Escaping the REST Prison 76
Test Your Knowledge 76
Quiz 76
Answers 77
6. Presenting Models with Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
More Than a Name on a Form 79
Generating HTML Forms with Scaffolding 80
Form as a Wrapper 84
Creating Text Fields and Text Areas 87
Labels 89
Creating Checkboxes 90
Creating Radio Buttons 91
Creating Selection Lists 93
Dates and Times 95
Creating Helper Methods 97
Test Your Knowledge 100
Quiz 100
Answers 100
iv | Table of Contents
11. 7. Strengthening Models with Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Without Validation 103
The Original Model 106
The Power of Declarative Validation 106
Managing Secrets 109
Customizing the Message 109
Limiting Choices 111
Testing Format with Regular Expressions 112
Seen It All Before 112
Numbers Only 113
A Place on the Calendar 114
Testing for Presence 115
Beyond Simple Declarations 115
Test It Only If 115
Do It Yourself 116
Test Your Knowledge 117
Quiz 117
Answers 117
8. Improving Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Adding a Picture by Uploading a File 119
File Upload Forms 120
Model and Migration Changes 120
Results 126
Standardizing Your Look with Form Builders 129
Supporting Your Own Field Types 130
Adding Automation 132
Integrating Form Builders and Styles 134
Test Your Knowledge 137
Quiz 137
Answers 138
9. Developing Model Relationships . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Connecting Awards to Students 140
Establishing the Relationship 140
Supporting the Relationship 141
Guaranteeing a Relationship 145
Connecting Students to Awards 146
Removing Awards When Students Disappear 146
Counting Awards for Students 147
Nesting Awards in Students 148
Changing the Routing 149
Changing the Controller 150
Table of Contents | v
12. Changing the Award Views 153
Connecting the Student Views 156
Is Nesting Worth It? 158
Many-to-Many: Connecting Students to Courses 159
Creating Tables 159
Connecting the Models 161
Adding to the Controllers 162
Adding Routing 164
Supporting the Relationship Through Views 164
What’s Missing? 172
Test Your Knowledge 172
Quiz 172
Answers 173
10. Managing Databases with Migrations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
What Migrations Offer You 175
Migration Basics 176
Migration Files 177
Running Migrations Forward and Backward 178
Inside Migrations 180
Working with Tables 181
Data Types 181
Working with Columns 183
Indexes 183
Other Opportunities 184
Test Your Knowledge 185
Quiz 185
Answers 185
11. Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Creating Your Own Debugging Messages 187
Raising Exceptions 188
Logging 188
Working with Rails from the Console 190
The Ruby Debugger 195
Test Your Knowledge 199
Quiz 199
Answers 199
12. Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Test Mode 201
Setting Up a Test Database with Fixtures 202
Unit Testing 206
vi | Table of Contents
13. Functional Testing 212
Calling Controllers 214
Testing Responses 215
Dealing with Nested Resources 216
Integration Testing 218
Beyond the Basics 220
Test Your Knowledge 221
Quiz 221
Answers 221
13. Sessions and Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Getting Into and Out of Cookies 223
Storing Data Between Sessions 230
Test Your Knowledge 235
Quiz 235
Answers 235
14. Users and Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Installation 237
Storing Identities 239
Storing User Data 239
Wiring OmniAuth into the Application 240
Classifying Users 248
More Options 255
Test Your Knowledge 256
Quiz 256
Answers 256
15. Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Creating Routes to Interpret URIs 258
Specifying Routes with match 258
Globbing 260
Regular Expressions and Routing 261
A Domain Default with root 261
Named Routes 262
Mapping Resources 263
Nesting Resources 264
Route Order and Priority 265
Checking the Map 265
Generating URIs from Views and Controllers 266
Pointing url_for in the Right Direction 266
Adding Options 267
Infinite Possibilities 267
Table of Contents | vii
14. Test Your Knowledge 268
Quiz 268
Answers 268
16. From CSS to SASS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Getting Started 271
Sassy Style 272
Variables 272
Mixins 274
Nesting 275
Making Everything Work Together 276
Becoming Sassier 279
Test Your Knowledge 280
Quiz 280
Answers 280
17. Managing Assets and Bundles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
The Junk Drawer 281
Sprockets 282
Dissecting The Pipeline 283
Putting It All Together 283
Bundler 286
Test Your Knowledge 290
Quiz 290
Answers 290
18. Sending Code to the Browser: JavaScript and CoffeeScript . . . . . . . . . . . . . . . . . . . 291
Sending JavaScript to the Browser 292
Simplifying with CoffeeScript 293
Have Some Sugar with your CoffeeScript 295
Converting to CoffeeScript 297
Test Your Knowledge 298
Quiz 298
Answers 298
19. Mail in Rails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Sending Mail Messages 299
Receiving Mail 304
Setup 305
Processing Messages 305
Test Your Knowledge 308
Quiz 308
Answers 308
viii | Table of Contents
17. Preface
Everyone cool seems to agree: Ruby on Rails is an amazing way to build web
applications. Ruby is a powerful and flexible programming language, and Rails takes
advantage of that flexibility to build a web application framework that takes care of a
tremendous amount of work for the developer. Everything sounds great!
Except, well… all the Ruby on Rails books talk about this “Model-View-Controller”
thing, and they start deep inside the application, close to the database, most of the time.
From an experienced Rails developer’s perspective, this makes sense—the framework’s
power lies largely in making it easy for developers to create a data model quickly, layer
controller logic on top of that, and then, once all the hard work is done, put a thin layer
of interface view on the very top. It’s good programming style, and it makes for more
robust applications. Advanced Ajax functionality seems to come almost for free!
From the point of view of someone learning Ruby on Rails, however, that race to show
off Rails’ power can be extremely painful. There’s a lot of seemingly magical behavior
in Rails that works wonderfully—until one of the incantations isn’t quite right and
figuring out what happened means unraveling all that work Rails did. Rails certainly
makes it easier to work with databases and objects without spending forever thinking
about them, but there are a lot of things to figure out before that ease becomes obvious.
If you’d rather learn Ruby on Rails more slowly, starting from pieces that are more
familiar to the average web developer and then moving slowly into controllers and
models,you’reintherightplace.YoucanstartfromtheHTMLyoualreadylikelyknow,
and then move more deeply into Rails’ many interlinked components.
This updated version of Learning Rails covers version 3.2. There are
substantial changes from earlier versions. Rails itself keeps changing,
even in ways that affect beginners.
Who This Book Is For
You’ve probably been working with the Web for long enough to know that writing web
applications always seems more complicated than it should be. There are lots of parts
xi
18. to manage, along with lots of people to manage, and hopefully lots of visitors to please.
Ruby on Rails has intrigued you as one possible solution to that situation.
You may be a designer who’s moving toward application development or a developer
who combines some design skills with some programming skills. You may be a
programmer who’s familiar with HTML but who lacks the sense of grace needed to
create beautiful design—that’s a fair description of one of the authors of this book,
anyway. Wherever you’re from, whatever you do, you know the Web well and would
like to learn how Rails can make your life easier.
The only mandatory technical prerequisite for reading this book is direct familiarity
with HTML and a general sense of how programming works. You’ll be inserting Ruby
codeintothatHTMLasafirststeptowardwritingRubycodedirectly,sounderstanding
HTML is a key foundation. (If you don’t know Ruby at all, you probably want to look
over Appendix A or at least keep it handy for reference.)
Cascading Style Sheets (CSS) will help you make that HTML look a lot nicer, but it’s
not necessary for this book. Similarly, a sense of how JavaScript works may help.
Experience with other templating languages (like PHP, ASP, and ASP.NET) can also
help, but it isn’t required.
You also need to be willing to work from the command line sometimes. The commands
aren’t terribly complicated, but they aren’t (yet) completely hidden behind a graphical
interface.
Who This Book Is Not For
We don’t really want to cut anyone out of the possibility of reading this book, but there
are some groups of people who aren’t likely to enjoy it. Model-View-Controller purists
will probably grind their teeth through the first few chapters, and people who insist
that data structures are at the heart of a good application are going to have to wait an
even longer time to see their hopes realized. If you consider HTML just a nuisance that
programmers have to put up with, odds are good that this book isn’t for you. Most of
the other Ruby on Rails books, though, are written for people who want to start from
the model!
Also, people who are convinced that Ruby and Rails are the one true way may have
some problems with this book, which spends a fair amount of time warning readers
about potential problems and confusions they need to avoid. Yes, once you’ve worked
with Ruby and Rails for a while, their elegance is obvious. However, reaching that level
of comfort and familiarity is often a difficult road. This book attempts to ease as many
of those challenges as possible by describing them clearly.
xii | Preface
19. What You’ll Learn
Building a Ruby on Rails application requires mastering a complicated set of skills. You
may find that—depending on how you’re working with it, and who you’re working
with—you only need part of this tour. That’s fine. Just go as far as you think you’ll need.
At the beginning, you’ll need to install Ruby on Rails. We’ll explore different ways of
doing this, with an emphasis on easier approaches to getting Ruby and Rails
operational.
Next, we’ll create a very simple Ruby on Rails application, with only a basic view and
then a controller that does a very few things. From this foundation, we’ll explore ways
to create a more sophisticated layout using a variety of tools, learning more about Ruby
along the way.
Once we’ve learned how to present information, we’ll take a closer look at controllers
and what they can do. Forms processing is critical to most web applications, so we’ll
build a few forms and process their results, moving from the simple to the complex.
Forms can do interesting things without storing data, but after a while it’s a lot more
fun to have data that lasts for more than just a few moments. The next step is setting
up a database to store information and figuring out how the magic of Rails’
ActiveRecord makes it easy to create code that maps directly to database structures—
without having to think too hard about database structures or SQL.
Once we have ActiveRecord up and running, we’ll explore scaffolding and its possi-
bilities. Rails scaffolding not only helps you build applications quickly, it helps you
learn to build them well. The RESTful approach that Rails emphasizes will make it
simpler for you to create applications that are both attractive and maintainable. For
purposes of illustration, using scaffolding also makes it easier to demonstrate one task
at a time, which we hope will make it easier for you to understand what’s happening.
Ideally, at this point, you’ll feel comfortable with slightly more complicated data mod-
els, and we’ll take a look at applications that need to combine data in multiple tables.
Mixing and matching data is at the heart of most web applications.
We’ll also take a look at testing and debugging Rails code, a key factor in the frame-
work’s success. Migrations, which make it easy to modify your underlying data
structures (and even roll back those changes if necessary), are another key part of Rails’
approach to application maintainability.
The next step will be to add some common web applications elements like sessions and
cookies, as well as authentication. Rails (with the help of gems for authentication) can
manage a lot of this work for you.
We’ll also let Rails stretch its legs a bit, showing off its recent support for Syntactically
Awesome Stylesheets (Sass), CoffeeScript scripting, bundle management, and sending
email messages.
Preface | xiii
20. By the end of this tour, you should be comfortable with working in Ruby on Rails. You
may not be a Rails guru yet, but you’ll be ready to take advantage of all of the other
resources out there for becoming one.
Ruby and Rails Style
It’s definitely possible to write Ruby on Rails code in ways that look familiar to
programmers from other languages. However, that code often isn’t really idiomatic
Ruby, as Ruby programmers have chosen other paths. In general, this book will always
try to introduce new concepts using syntax that’s likely to be familiar to developers
from other environments, and then explain what the local idiom does. You’ll learn to
write idiomatic Ruby that way (if you want to), and at the same time you’ll figure out
how to read code from the Ruby pros.
We’ve tried to make sure that the code we present is understandable to those without
a strong background in Ruby. Ruby itself is worth an introductory book (or several),
but the Ruby code in a lot of Rails applications is simple, thanks to the hard work the
framework’s creators have already put into it. You may want to install Rails in Chap-
ter 1, and then explore Appendix: “An Incredibly Brief Introduction to Ruby” before
diving in.
Other Options
There are lots of different ways to learn Rails. Some people want to learn Ruby in detail
before jumping into a framework that uses it. That’s a perfectly good option, and if you
want to start that way, you should explore the following books:
• Learning Ruby by Michael Fitzgerald (O’Reilly, 2007)
• The Ruby Programming Language by David Flanagan and Yukhiro Matsumoto
(O’Reilly, 2008)
• Ruby Pocket Reference by Michael Fitzgerald (O’Reilly, 2007)
• Programming Ruby, Third Edition by Dave Thomas with Chad Fowler and Andy
Hunt (Pragmatic Programmers, 2008)
• The Well-Grounded Rubyist by David A. Black (Manning, 2009)
• Eloquent Ruby by Russ Olsen (Addison-Wesley, 2011)
• Metaprogramming Ruby by Paolo Perrotta (Pragmatic Programmers, 2010)
You may also want to supplement (or replace) this book with other books on Rails. If
you want some other resources, you can explore:
• For maximum excitement, try http://railsforzombies.com/, a training tool that
includes video and exercises.
xiv | Preface
21. • Try http://railscasts.com/ for all kinds of detailed programming demonstrations in
a video format.
• Ruby on Rails 3 Tutorial by Michael Hartl (Addison-Wesley, 2010), provides a
faster-moving introduction that covers many more extensions for Rails.
• The Rails 3 Way by Obie Fernandez (Addison-Wesley, 2010), takes a big-book
reference approach for developers who already know their way.
• Agile Web Development with Rails, Fourth Edition, (Pragmatic Programmers,
2010), by Sam Ruby, Dave Thomas, and David Heinemeier Hansson gives a de-
tailed explanation of a wide range of features.
Ideally, you’ll want to make sure that whatever books or online documentation you
use cover at least Rails 3.0 (or later). Rails’ perpetual evolution has unfortunately made
it dangerous to use a lot of formerly great but now dated material (some of it works,
some of it doesn’t).
Finally, key resources you should always explore are the Ruby on Rails Guides (http://
guides.rubyonrails.org/), which provide an excellent and well-updated overview for a
lot of common topics. Sometimes they leave gaps or demand more background
knowledge than beginners have, but they’re a wonderful layer of documentation at a
level above the basic (though also useful) API documentation at http://api.rubyonrails
.org/.
Rails Versions
The Rails team is perpetually improving Rails and releasing new versions. This book
was updated for Rails 3.2.3 and Ruby 1.9.2.
If You Have Problems Making Examples Work
When you’re starting to use a new framework, error messages can be hard, even
impossible, to decipher. We’ve included occasional notes in the book about particular
errorsyoumight see,but it seemsverynormal for different peopletoencounterdifferent
errors as they work through examples. Sometimes it’s the result of skipping a step or
entering code just a little differently than it was in the book. It’s probably not the result
of a problem in Rails itself, even if the error message seems to come from deep in the
framework. That isn’t likely an error in the framework, but much more likely a problem
the framework is having in figuring out how to deal with the unexpected code it just
encountered.
If you find yourself stuck, here are a few things you should check:
What version of Ruby are you running?
You can check by entering ruby -v. All of the examples in this book were written
with Ruby 1.9.2. You can also use Ruby 1.8.7 with Rails, but many of the examples
Preface | xv
22. here (especially those using hashes) may not always work for you. Versions of Ruby
older than 1.8.7 may cause problems for Rails 3.x, and even version 1.9.1 of Ruby
causes problems. Chapter 1 explores how to install Ruby, but you may need to
find documentation specific to your specific operating system and environment.
What version of Rails are you running?
You can check by running rails -v. You might think that you should be able to
use the examples here with any version of Rails 3.x, but Rails keeps changing in
ways that break even simple code even among the 3.x versions. The examples on
the book’s site include a number of versions from Rails 2.1 to Rails 3.2. If you’re
running a version of Rails other than 3.2, especially an earlier version, you will
encounter problems.
Are you calling the program the right way?
Linux and Mac OS X both use a forward slash, /, as a directory separator, whereas
Windows uses a backslash, . This book uses the forward slash, but if you’re in
Windows, you may need to use the backslash. Leaving out an argument can also
produce some really incomprehensible error messages.
Is the database connected?
By default, Rails expects you to have SQLite up and running, though some instal-
lations use MySQL or other databases. If you’re getting errors that have “sql” in
them somewhere, it’s probably the database. Check that the database is installed
and running, that the settings in database.yml are correct, and that the permissions,
if any, are set correctly.
Are all of the pieces there?
Most of the time, assembling a Rails application, even a simple one, requires
modifying multiple files—at least a view and a controller. If you’ve only built a
controller, you’re missing a key piece you need to see your results; if you’ve only
built a view, you need a controller to call it. As you build more and more complex
applications, you’ll need to make sure you’ve considered routing, models, and
maybe even configuration and plug-ins. What looks like a simple call in one part
of the application may depend on pieces elsewhere.
Eventually, you’ll know what kinds of problems specific missing pieces cause, but
at least at first, try to make sure you’ve entered complete examples before running
them.
It’s also possible to have files present but with the wrong permissions set. If you
know a file is there, but Rails can’t seem to get to it, check to make sure that
permissions are set correctly.
Did you save all the files?
Of course this never happens to you. However, making things happen in Rails often
means tinkering with multiple files at the same time, and it’s easy to forget to save
one as you move along. This can be especially confusing if it was a configuration
or migration file. Always take a moment to make sure everything you’re editing
has been saved before trying to run your application.
xvi | Preface
23. Are your routes right?
If you can’t get a page to come up, you probably have a problem with your routes.
This is a more common problem when you’re creating controllers directly, as you
will be up through Chapter 4, rather than having Rails generate scaffolding. Check
config/routes.rb.
Is everything named correctly?
Rails depends on naming conventions to establish connections between data and
code without you having to specify them explicitly. This works wonderfully, until
you have a typo somewhere obscure. Rails also relies on a number of Ruby con-
ventions for variables, prefacing instance variables with @ or symbols with :. These
special characters make a big difference, so make sure they’re correct.
Is the Ruby syntax right?
If you get syntax errors, or sometimes even if you get a nil object error, you may
have an extra space, missing bracket, or similar issue. Ruby syntax is extremely
flexible, so you can usually ignore the discipline of brackets, parentheses, or
spaces—but sometimes it really does matter.
Is another Rails app running?
Jumping quickly between programs can be really confusing. In a normal develop-
ment cycle, you’ll just have one app running, and things just work. When you’re
reading a book, especially if you’re downloading the examples, it’s easy to start an
app, close the window you use to explore it, and forget it’s still running underneath.
Definitely stop one server before running another while you’re exploring the apps
in this book.
Are you running the right program?
Yes, this sounds weird. When you’re developing real programs, it makes sense to
leave the server running to check back and forth with your changes. If you’re testing
out a lot of small application examples quickly, though, you may have problems.
Definitely leave the server running while you’re working within a given example,
but stop it when you change chapters or set off to create a new application with
the rails command.
Does your model specify attr_accessible?
Rails tightened its security rules in Rails 3.2, requiring that models include an
attr_accessible declaration at the start, identifying which fields can be reached
through Rails. Older code, even code from earlier versions of this book, generally
didn’t do this. If you get error messages like “Can’t mass-assign protected
attributes,” this is likely the problem.
Did the authors just plain screw up?
Obviously, we’re working hard to ensure that all of the code in this book runs
smoothly the first time, but it’s possible that an error crept through. You’ll want
to check the errata, described in the next section, and download sample code,
which will be updated for errata.
Preface | xvii
24. It’s tempting to try Googling errors to find a quick fix. Unfortunately, the issues just
described are more likely to be the problem than something else that has clear
documentation. The Rails API documentation (http://api.rubyonrails.org/) might be
helpful at times, especially if you’re experimenting with extending an example. There
shouldn’t be much out there, though, beyond the book example files themselves that
you can download to fix an example.
If You Like (or Don’t Like) This Book
If you like—or don’t like—this book, by all means, please let people know. Amazon
reviews are one popular way to share your happiness (or lack of happiness), or you can
leave reviews on the site for this book:
http://www.oreilly.com/catalog/9781449309336/
There’s also a link to errata there. Errata gives readers a way to let us know about typos,
errors, and other problems with the book. The errata will be visible on the page
immediately, and we’ll confirm it after checking it out. O’Reilly can also fix errata in
future printings of the book and on Safari, making for a better reader experience pretty
quickly.
We hope to keep this book updated for future versions of Rails and will also incorporate
suggestions and complaints into future editions.
Conventions Used in This Book
The following font conventions are used in this book:
Italic
Indicates pathnames, filenames, and program names; Internet addresses, such as
domain names and URLs; and new items where they are defined.
Constant width
Indicates command lines and options that should be typed verbatim; names and
keywords in programs, including method names, variable names, and class names;
and HTML element tags.
Constant width bold
Indicates emphasis in program code lines.
Constant width italic
Indicates text that should be replaced with user-supplied values.
This icon signifies a tip, suggestion, or general note.
xviii | Preface
25. This icon indicates a warning or caution.
Using Code Examples
The code examples for this book, which are available from http://oreil.ly/Learning
Rails3, come in two forms. One is a set of examples, organized by chapter, with each
example numbered and named. These examples are referenced from the relevant chap-
ter. The other form is a dump of all the code from the book, in the order it was presented
in the book. That can be helpful if you need a line that didn’t make it into the final
example, or if you want to cut and paste pieces as you walk through the examples.
Hopefully, the code will help you learn.
So far, the code examples for this electronic version of the book have stayed in sync
with the code examples for the print book, updated for errata.
This book is here to help you get your job done. In general, you may use the code in
this book in your programs and documentation. You do not need to contact us for
permission unless you’re reproducing a significant portion of the code. For example,
writing a program that uses several chunks of code from this book does not require
permission. Selling or distributing a CD-ROM of examples from O’Reilly books does
require permission. Answering a question by citing this book and quoting example
code does not require permission. Incorporating a significant amount of example code
from this book into your product’s documentation does require permission.
We appreciate, but do not require, attribution. An attribution usually includes the
title, author, publisher, and ISBN. For example: “Learning Rails 3 by Simon St.Laurent,
Edd Dumbill, and Eric J. Gruber. Copyright 2012 Simon St.Laurent, Edd Dumbill, and
Eric Gruber, 978-1-449-30933-6.”
If you feel your use of code examples falls outside fair use or the permission given above,
feel free to contact us at permissions@oreilly.com.
Safari® Books Online
Safari Books Online (www.safaribooksonline.com) is an on-demand digital
library that delivers expert content in both book and video form from the
world’s leading authors in technology and business.
Technology professionals, software developers, web designers, and business and cre-
ative professionals use Safari Books Online as their primary resource for research,
problem solving, learning, and certification training.
Safari Books Online offers a range of product mixes and pricing programs for organi-
zations, government agencies, and individuals. Subscribers have access to thousands
Preface | xix
26. of books, training videos, and prepublication manuscripts in one fully searchable
database from publishers like O’Reilly Media, Prentice Hall Professional, Addison-
Wesley Professional, Microsoft Press, Sams, Que, Peachpit Press, Focal Press, Cisco
Press, John Wiley & Sons, Syngress, Morgan Kaufmann, IBM Redbooks, Packt, Adobe
Press, FT Press, Apress, Manning, New Riders, McGraw-Hill, Jones & Bartlett, Course
Technology, and dozens more. For more information about Safari Books Online, please
visit us online.
How to Contact Us
Please address comments and questions concerning this book to the publisher:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
800-998-9938 (in the United States or Canada)
707-829-0515 (international or local)
707-829-0104 (fax)
We have a web page for this book, where we list errata, examples, and any additional
information. You can access this page at:
http://oreil.ly/LearningRails3
To comment or ask technical questions about this book, send email to:
bookquestions@oreilly.com
For more information about our books, courses, conferences, and news, see our website
at http://www.oreilly.com.
Find us on Facebook: http://facebook.com/oreilly
Follow us on Twitter: http://twitter.com/oreillymedia
Watch us on YouTube: http://www.youtube.com/oreillymedia
Acknowledgments
Thanks to Mike Loukides for thinking that Rails could use a new and different ap-
proach, and for supporting this project along the way. Tech reviewers Gregg Pollack,
Shelley Powers, Mike Fitzgerald, Eric Berry, David Schruth, Mike Hendrickson, and
Mark Levitt all helped improve the first edition of the book tremendously. For this
edition, Aaron Sumner, David DeMello, and Alan Harris went through the details
carefully, finding many changes we’d overlooked and making helpful suggestions. The
rubyonrails-talk group providedregularinspiration,asdidthe screencastsandpodcasts
at http://railscasts.com/.
xx | Preface
27. Edd Dumbill wishes to thank his lovely children, Thomas, Katherine, and Peter, for
bashing earnestly on the keyboard, and his coauthor, Simon St.Laurent, for his patient
encouragement in writing this book.
Simon St.Laurent wants to thank Angelika St.Laurent for her support over the course
of writing this, even when it interfered with dinner, and Sungiva and Konrad St.Laurent
for their loudly shouted suggestions. Simon would also like to thank Edd Dumbill for
his initial encouragement and for making this book possible.
Eric would like to thank his lovely wife for enduring many late-night endeavors to learn
about this wonderful world of code, his parents and sister for always encouraging him
to find his own path, his community of designers and developers in the Lawrence area,
Aaron Sumner for being a patient guide in the Ruby world, and his children, who inspire
him to learn how to code well enough to teach it to them (if that’s what they want).
We’d all like to thank Jasmine Perez for cleaning up our prose, Iris Febres for getting
this book through production, and Lucie Haskins for the patient work it takes to build
an index.
Preface | xxi
29. CHAPTER 1
Starting Up Ruby on Rails
Before you can use Rails, you have to install it. Even if it’s already installed on your
computer, you may need to consider upgrading it. In this chapter, we’ll take a look at
some ways of installing Ruby, Rails, and the supporting infrastructure. Please feel very
welcome to jump to whatever pieces of this section interest you and skip past those
that don’t. Once the software is working, we’ll generate the basic Rails application,
which will at least let you know if Rails is working. However you decide to set up Rails,
in the end you’re going to have a structure like that shown in Figure 1-1.
Figure 1-1. The many components of a Rails installation
1
30. All of these options are free. You don’t need to spend any money to use
Rails, unless maybe you feel like buying a nice text editor.
Figure 1-2. The Rails welcome page
If You Run Windows, You’re Lucky
Windows users (at last) can get a basic installation of Rails and supporting tools—
everything you need to use this book—far more easily than anyone else. EngineYard’s
Rails Installer, which you can get at http://railsinstaller.org/ , provides all the key
components in a one-click installation. Visit the site, download the installer, and watch
the video; after that, you should be ready to move ahead to “Starting Up
Rails” on page 8.
Really, it’s that easy! (Well, except that you may have to tell Windows Defender not
to block the port Rails uses to present the site. It’s also possible that you’ll have to install
developer tools on newer versions of Windows.)
2 | Chapter 1: Starting Up Ruby on Rails
31. As this book was going to print, an initial version of RailsInstaller ap-
peared for Mac OS X at http://railsinstaller.org/. Macintosh users may
also be lucky now. Linux users still await a “coming soon” version.
Getting Started at the Command Line
Installing Rails by hand requires installing Ruby (preferably 1.9.2 or later), installing
Gems,andtheninstallingRails.YouwilleventuallyalsoneedtoinstallSQLite,MySQL,
or another relational database, though SQLite is already present on the Mac and in
many Linux distributions.
As this book was going to print, an initial version of RailsInstaller ap-
peared for Mac OS X at http://railsinstaller.org. Macintosh users may
also be lucky now, while Linux users still await a “coming soon” version.
Ruby comes standard on a number of Linux and Macintosh platforms. To see whether
it’s there, and what version it has, enter ruby -v at the command prompt. You’ll want
Ruby 1.8.7 or 1.9.2, so you may need to update it to a more recent version:
• On Mac OS X, Snow Leopard (10.6) and Lion (10.7) include Ruby 1.8.7, and
Leopard (10.5) includes Ruby 1.8.6, but the previous version of OS X included
Ruby 1.8.2. If you’re on Tiger (10.4) or an earlier version of OS X, you’ll need to
update Ruby itself, a challenge that’s beyond the scope of this book. You may want
to investigate MacPorts, and the directions at http://nowiknow.wordpress.com/
2007/10/07/install-ruby-on-rails-for-mac/. For a more comprehensive installation,
explore http://paulsturgess.co.uk/articles/show/46/. (You should ignore the versions
of Rails installed with OS X - they’re guaranteed to be out of date.)
• Most distributions of Linux include Ruby, but you’ll want to use your package
manager to make sure it’s updated to 1.9.2. Some, notably Ubuntu and Debian,
will name the gem command gem1.9.
• For Windows, unless you’re a hardened tinkerer, it’s much easier to use Rails
Installer. If you’re feeling strong, the One-Click Ruby Installer (http://rubyinstaller
.rubyforge.org/) is probably your easiest option, though there are other alternatives,
including Cygwin (http://www.cygwin.com/), which brings a lot of the Unix envi-
ronment to Windows.
A saner long-term approach to installing Ruby and Rails also includes installing rvm,
the Ruby Version Manager, which frees you from having to worry about what version
of Ruby your system decided it should have as well as giving you better options for
managing a clean work environment. You can find out more about rvm at http://rvm
.beginrescueend.com/. (It was created by Wayne E. Seguin, the same person who created
Getting Started at the Command Line | 3
32. Rails Installer.) If that doesn’t seem right to you, you can also find out more on how to
install Ruby on a variety of platforms, see http://www.ruby-lang.org/en/downloads/.
If rvm isn’t for you, you may also want to explore rbenv (https://github
.com/sstephenson/rbenv/), a much smaller and simpler approach to
switching between versions of Ruby.
RubyGems (often just called Gems) is also starting to come standard on a number of
platforms, most recently on Mac OS X Leopard and Snow Leopard, but if you need to
install Gems, see the RubyGems User Guide’s instructions at http://www.rubygems.org/
read/chapter/3/.
If you use MacPorts, apt-get, or a similar package installer, you may
want to use it only to install Ruby, and then proceed from the command
line. You certainly can install Gems and Rails with these tools, but Gems
can update itself, which can make for very confusing package update
issues.
Once you have RubyGems installed, Rails and its many dependencies are just a
command away (though the output has grown more verbose with every version of
Rails):
~ simonstl$ gem install rails
SimonMacBook:living_book_2010_rails_3 simonstl$ gem install rails
Fetching: i18n-0.6.0.gem (100%)
Fetching: [many more]..
Depending on your version of ruby, you may need to install ruby rdoc/ri data:
<= 1.8.6 : unsupported
= 1.8.7 : gem install rdoc-data; rdoc-data --install
= 1.9.1 : gem install rdoc-data; rdoc-data --install
>= 1.9.2 : nothing to do! Yay!
Fetching: railties-3.2.3.gem (100%)
Fetching: bundler-1.0.22.gem (100%)
Fetching: rails-3.2.3.gem (100%)
Successfully installed i18n-0.6.0
Successfully installed multi_json-1.1.0
Successfully installed activesupport-3.2.3
Successfully installed builder-3.0.0
Successfully installed activemodel-3.2.3
Successfully installed rack-1.4.1
Successfully installed rack-cache-1.2
Successfully installed rack-test-0.6.1
Successfully installed journey-1.0.1
Successfully installed hike-1.2.1
Successfully installed tilt-1.3.3
Successfully installed sprockets-2.1.2
Successfully installed erubis-2.7.0
Successfully installed actionpack-3.2.3
4 | Chapter 1: Starting Up Ruby on Rails
33. Successfully installed arel-3.0.0
Successfully installed tzinfo-0.3.31
Successfully installed activerecord-3.2.3
Successfully installed activeresource-3.2.3
Successfully installed mime-types-1.17.2
Successfully installed polyglot-0.3.3
Successfully installed treetop-1.4.10
Successfully installed mail-2.4.4
Successfully installed actionmailer-3.2.3
Successfully installed thor-0.14.6
Successfully installed rack-ssl-1.3.2
Successfully installed json-1.6.5
Successfully installed rdoc-3.12
Successfully installed railties-3.2.3
Successfully installed bundler-1.0.22
Successfully installed rails-3.2.3
30 gems installed
Installing ri documentation for i18n-0.6.0...
[lots more documentation notices]
You may need to use sudo, which gives your command the power of the root (admin-
istrative) account, if you’re working in an environment that requires root access for the
installation—otherwise, you can just type gem install rails. That will install the latest
version of Rails, which may be more recent than 3.2.3, as well as all of its dependencies.
gem install rails will install the latest official release of Rails, which at present is 3.2.3.
It will not install any Rails betas. (To see which version of Rails is installed, enter rails
-v at the command line.)
You may also need to install the sqlite3 gem, which isn’t automatically installed by the
Rails gem but is needed for development. That’s gem install sqlite3.
If you’re ever wondering which gems (and which versions of gems) are installed, type
gem list --local. For more information on gems, just type gem, or visit http://rubygems
.rubyforge.org/.
You can see the documentation that gems have installed by running the
command gem server, and visiting the URL (usually http://localhost:
8808) that command reports. When you’re done, you can turn off the
server with Ctrl-C.
Once you have Rails installed, you can create a Rails application easily from the
command line. Here’s what it looks like in its extended glory, but you don’t need to
read it every time:
Getting Started at the Command Line | 5
41. GAP: ASSPNetE REVISITN 116 CF AGC FPCGRAF
LU^'INARY BY NASA 2021112-t?l IS :CS AUG. 1 1 , ISf S PAGE 1617
OCTAL LISTING poR '’ARAGR.APH # Y6A, N I TH PARITY PIT IN
BINARY AT TFE PIGFT CF EACH WORC, "5" CENOTFS UNILSED
FIXED MEHOPY ALL VALir kCRCS ARE PASK INSTRUCTIONS EXCEPT
THOSE HARKED "I" ( I N TER FRET I Y E CFEFATCR XCPCS) CR "C"
(CCNSTANTS) ii,2ccn I : 776 16 1 C : ‘0675 1 1 : 66 175 1 C : 03666
0 C: 03663 0 C: 036 72 C I : 77666 C C : C 3 723 1 11,2^10 I : 661
3S 1 r : ; 3000 1 C : 22C26 0 I ; 72 57 5 0 C : 02323 1 C : 26323 1
C : '1233 1 1 I: 7 7 752 1 1 1 , 2^?n C : 26331 ] C : 03672 :) I :
77752 1 C: 0 36 72 r I : 7 766 6 C C : C 37 23 1 I : 71331 C C:
C3617 1 1 1. 20 20 C: 77776 1 I : 70566 1 C : 17667 0 I : 67156 0 C
: TO 156 1 C: 02701 0 I : 77775 1 C : 02323 1 1 1,2060 C : 26655 0
C : '336 7 2 0 r : 16663 0 C : C36 52 1 C : 0267 1 0 I : 772C.1 1 C:
00001 0 C : 02323 1 1 1 .ZOSO I : 61 656 0 1 : 53435 C: 3 2 3 31 1
C: 26676 0 C: 036 7 2 0 I : 502 56 c I : 63015 1 C : 03667 0 11,
2060 r : T366^ 1 C : L3667 f I : 63CA6 c C : 22105 0 C : 03665 0 I:
61575 0 C: 0 2663 0 I : 63266 1 1 1 ,207C I : 66 206 1 C: 126 76 0
T : 51352 1 I : 7 6 2 5 6 c I : 77772 0 C : C2663 0 I : 67351 1 C :
26007 0 11,2100 C : 03617 1 I : 77266 1 ' C : 22 105 0 C : 02663 0
C : 03672 0 l: 63 365 0 C : 260C7 1 C : C2663 c 11,21 10 I : 63256
n C : 02655 1 1 T : 61656 0 I : 57635 1 r : 1000 3 1 I : 77606 1 I :
713 50 1 C: 0 2776 c 11,2120 C : C0023 0 I : 6206 1 1 C: 22126 0 C
: 777 67 1 I : 673 K 1 C : 000 12 1 C : CCC67 1 I : 77230 0 11. 2130
C : 22132 1 ! ; 6 1676 1 I : 7 7 7 7 5 1 I : 50235 0 I : 71266 0 C:
22137 1 I ; 61676 1 I : 67 156 c 11,2160 C : 000 VT 1 C: 02672 ■: I
: 663 50 1 C : C2776 c C : C0C27 1 C : 00026 1 I : 776 26 1 C : 252
1 2 1 11,-’ lEO I : 77216 0 C : 00675 0 C : J2766 1 C : 16337 1 C:
02702 0 I : 65030 c r : 22233 0 C : 2 76 12 c 11,2160 I : 63135 1 C
: C3O00 1 r : CC263 f I : 6303C c C : 22166 0 C : 00 '16 3 1 I :
77775 1 C: C 2 3 2 3 1 1 1,2170 C: 02655 fi C: 25535 0 C: 02337 1
C : 1 5 563 1 C : C361C 0 C : C1517 0 1 : 630 15 1 C: 03652 1 11,
22CC C : 0 1673 1 C : 36-';61 n C : 27 in 1 I: 77775 1 C : Tfi0 2 5 ')
C : 027C3 1 ! : 63 156 1 C : 03616 c 11,2210 C: OOO ) 1 (. I :
55136 1 C : 036 16 G C: C27C1 r 1 : 661 35 1 C : 000 5) 1 C: 22230
42. 0 I : 52375 1 11,2220 C : 03672 0 C: u.JO 1 7 1 I : 77655 1 C:
02663 0 C: 1666 3 0 C : C 3 6 6 7 c I : 7765C 1 C : 22C62 0 11,
2230 I : 77775 1 C : C2663 c C : 03672 0 I : 52375 1 C : 02337 1 C:
02331 1 C: 26366 r C : 0 2 703 1 11 ,2260 C : 13566 1 I : 66135 1
C: :i3 )00 1 C: 22260 c I : 70575 1 C : G3566 1 C : 27566 1 C :
02337 1 1 1 ,22EC I : 77762 o C : 263 3 7 1 C : 33 6 72 .0 I : 77762
0 C: 27672 0 C : 0 23 66 c I ; 77762 C C : C 2 3 6 6 c 11,2260 T :
7075'1 C: 02776 n C : iorc3 0 I : 612f 6 c C : 02762 1 I : 56362 1 C:
000 6 1 1 C: 1772 1 0 11,227C I : 77661 0 C : 206U7 1 C: 0 3 7 17
0 I : 772C1 1 C; OOOC 1 0 C : C 36 72 0 C : 03666 c I : 52C16 0 1
1, 230C C: ':126 7 0 C : 03663 c 56C16 0 00006 1 220 12 1 0 5 3 21
1 C; OOlCO c 15 27C c 11 ,2310 000 16 1 OOO’ 1 0 6QCCQ G 7 26 1
1 1 55666 Q 36752 c 55663 1 36756 1 11 ,232C 05173 1 C: C2326 1
15270 0 55663 1 36757 0 05226 0 C0CC6 1 QCC31 c 11,2320 60000
0 7261' 1 1 57666 1 56001 1 11 666 0 12326 1 10001 1 12 367 1
11,2360 1 1 663 1 12323 0 060 2 2 1 36T6C c 00006 1 CSC 13 0
15261 c 36737 0 1 1, 23E0 00006 1 02U31 1 00006 1 12362 1 3'>
Ml ■1 76766 1 lUOCO c 62602 1 11,2360 27665 1 ?. JOr 1 76 7^7 c
icorc 0 32602 0 27665 1 30001 0 76753 0 1 1 , 2 3 7 C I'lOOO 0
62603 I 27666 1 3000 1 0 76752 1 lOOCO c 326C3 1 27666 1
43. GAP: ASSE^8LE REVISION 116 CF A PC FPCGPAM
LUPINARY BY NASA 20211 12-Ca 1S:09 AUG. 11 ,1S6S FACE 1618
OCTAL LISTING FOP PARAGRAPH # H6F , WITH FAPITV BIT IN
BINARY AT THE RIGHT CF EACH WORC, "5" DENOTES UNLSED
FIXED PENCRY ALL VALID WORDS APE BASIC INSTRUCT TONS
EXCEPT THOSE MARKED "I" ( I NTER FRFT I ,E CFEPATCP WCFCS)
CF "C" (CCNSTANTS) 1 1 ,?Acr 1 2 34 2 1 C : 0006 3 1 C: 01074 0 c
; 002 17 0 I : 40354 1 C : 02C30 0 C : COCCI 0 I : 7 5 5 4 3 1
11,2410 C : 51770 0 I : 53515 C C : C1535 c I : 60325 0 C : 00045
0 C: 0PK)47 1 I : 77715 1 I : 6 524 1 C 1 1 ,2420 C ; : 01543 1 C:
'I2C74 0 I ; 6 3 2 2 5 1 C : 01551 1 C : CCC5 1 0 I : 77742 C I :
6527 1 0 C : 00003 1 1 1 , 2A30 I : 4140 = 0 C : 000 0 5 1 I : 65316
0 P : 0030 5 1 I: 64716 0 C; 5 1773 0 I : 40442 1 I : 4 7 5 1 5 0 1
1,2440 C : 01543 1 l: 4421 5 n C : P.00 4 5 0 I : 412 71 c C : 00003
1 I : 53605 1 C: 13772 1 C: 20 176 0 1 1 ,24E0 I : 43260 1 C : 000
5 1 1 T : 45257 0 C: 20 2 1 1 1 I : 412C5 0 C: OOOC 1 0 C : C00C5
1 I : 53657 0 11,246, C : 20211 1 C : 20 2i 1 c I : 652 1 5 1 C :
C1553 0 1 : 53605 1 C: COCCI 0 C: 20202 0 I : 4 3 204 c 1 1 ,2470
C : 57753 1 I : 77626 0 C: 75647 0 I : 74020 0 C : 02112 1 C :
00012 1 I : 74014 1 C: 00203 1 1 l,25CC C : 24C23 0 r : C00C2 n I :
77650 1 C : 24023 0 I : 663 5C 1 C : C 1500 c C : 000 5 1 C C : 7 7
7 6 2 1 1 1 , 25 10 I : 54345 1 C : 02( 76 1 r : 206 1 2 0 I : 615CC 0
C : 22515 0 I: 43206 1 C: 01551 1 C: 16074 0 1 1,252C I : 7761 5 0
C : ■115 17 0 C : 35517 1 C : 22404 1 I ; 7315f. 1 C : C20 30 0 C;
02030 c I : 77775 1 11,2530 C, : 240-) 7 0 C: 2606 2 1 C : 02C32 1
I : 53257 1 C: 57605 3 C: 01535 0 C: 02J4C 1 I : 65C 14 1 1 1 ,2540
C : 01756 1 C: 22546 c C: C 1 5C0 0 C : 12 132 1 1 ; 77724 0 C: C
1500 0 I : 53575 0 C : 02032 1 11,2550 C : 16032 1 C : 0006 5 0 C ;
36070 n C : 22655 1 I : 6617 5 1 C: 02040 1 C : 000 5 1 c C : 16032
1 11,2560 r ; 02072 0 C: r207C 1 T : 71214 0 C : C0342 1 r ; 23026
1 C: 01517 0 I: 77624 1 C : 2264 7 1 11 ,2570 I : 72174 0 C; 'too 02
0 C : 00051 0 1 : 7 7 6 14 1 C: C0343 Q C : 226C0 1 I : 77076 0 C :
COOOO 1 1 1,?60L C : 020 40 1 C : 261 ( 5 1 C : oonn 3 1 C :
02122 1 I : 45335 0 C: 0 10 11 0 C : 13774 1 I : 42C3C c 11,2610 C
; 22613 o C : ■'1 1 7 5 6 1 C : 22627 1 I : 74375 c P : 02032 1 C :
44. 02070 1 I : 52257 0 C: 57 175 0 1 1 ,262C C : 02040 1 1 : 77724 0
C : 0 1 500 0 C: 12140 1 C : 0 2114 1 I : 7 7 7 24 0 C : 01500 0 I :
62 175 0 ll,263P c : 02 l')5 1 C : n 1! "4 ( I : 43C 14 c C : C4260 1 C
: 00343 n C: 22642 1 I : 5326 1 1 C : 206 1 2 c 1 1 ,2640 C : 12122
1 C: 02122 1 I ; 77624 1 C : 226 5 5 1 I : 62174 1 C : C0OC4 0 C :
00004 0 I : 77775 1 1 1 ,?65C C ; '1 2 12 2 1 C : 36C4C c C : 22655
1 1 : 77650 1 C: 23026 i I : 7 4 5 7 5 0 C : C'2040 1 I ; 4C236 1 1
1,2660 C : OOOOl n I: 6150 1 1 C : 00040 0 I : 60325 c C : 0207C 1
C : O' 10 41 1 I : 63342 1 C: C2C40 1 11,267C I : 77656 1 C : 16040
1 r : 00045 0 C: 02072 C I : 553C 1 0 C : C0042 1 I : 41562 c I :
77743 1 1 1 , 270C C I 27733 0 C : COO 5 1 c I : 5 7124 1 C : 000
50 1 C : 00040 0 I : 71264 1 C: 0004 1 1 C : 00003 1 11,2710 I :
65057 1 : C: 57177 1 C: 000 50 1 I : 744'"6 c 1 : 5u 3 1 5 0 C:
C2032 1 C : 02040 1 I : 44372 1 1 1 ,27?P I : 57206 1 C : Oi'lO C 5
1 r : 77752 1 I ; 43206 1 C : 25766 1 I : 75406 1 I : 414 7 5 1 C :
00013 0 1 1, 2730 I : 43 352 1 C : 25766 1 I : 43325 1 C : C0013 0
C : 24'»0 5 1 I: 72475 1 C: 000 1 1 1 1 : 5 6 2 1 5 1 1 1 ,2740 C ; 2
5760 1 C: 000 17 1 I : 74275 1 C : 0000 7 c C : C204C 1 I : 64515 1
C. : 0 20 3 2 1 I : 41455 0 11,2750 I : ^13^5 0 C : COCHU t) C :
00015 0 I : 61501 1 C: 000 3 7 0 I : 40665 0 C ; 0000 2 1 C : 5177C
0 1 1 ,2760 1 : 74276 1 1: 571 24 1 C : ’>00 50 1 C : CCC51 c I : 5
5 C 6 4 0 C : 'K)0 36 1 C: 00037 0 1 : 53604 0 11,?7-(C C : 57753 1
C : 57177 1 I : 53324 1 C: C00 5C 1 C : 02062 1 C: 02062 1 I :
434CC 1 C : 23000 0
45. GAP: ASSP^BL6 PEVISinN 116 CF AGC FPCC-PAM
LUMINARY BY NASA 2051112-CU 1 S :C9 ALG. 11 ,1969 FACE 1619
OCTAL LISTING FOR PARAGRAPH # -'66, WITH PARITY BIT IN
PINARY AT THE RIGHT CF EACH WORD, ''5" CENGTES UNLSED
FI>EC MEROPV ALL VALID WORDS APE EAS IC INSTRUrr irws
EXCEPT those MARKED "I" ( I NTERPPETI E CPEPATCF ! WGRDS)
CF "C ' (CCNSTANTS) 11 ,TCCC 1 : 51575 1 C : 01521 0 I : 77654 ( .
C: 2 3023 1 I : 54345 1 C : 02 ICO 1 C : 20612 C I : 44206 C ii,T'a!i
r • U 1 5 5 1, 1 C : 16'.’'74 C : 01517 C I : 45425 0 C; 42260 0 C:
224C4 1 I : 77624 1 C : 276 73 0 1 1 ,T1':20 I : 7761A 1 C: ii4’ 20 1
C: 27260 0 I : 7 7 7 7 6 1 C5642 1 C : 20430 1 I : 71354 0 C :
02C30 0 1 1, 3f'3C r : C2070 1 I : 446C1 0 C : OnoOl f' r : 50030 1 I
: 43044 0 C ; 23264 0 C : CC34? c c ; 23273 C 1 1, 3'‘AO 1 : 65375
0 C : ■'2''32 1 C : 01517 c I : 4512 5 0 C : 25756 1 C : 51677 0 r :
24017 1 C: 24CP 1 0 1 1 , 3C5C I : 45 006 0 C : 2.330 1 1 I : 7 7 7
15 1 C : 24CC 5 1 1 : 450C6 r. C ; 2 3 3C 1 1 I : 777 72 c C : 24041
1 11, 3H6R I : 77772 f C : 14025 n C : CCr23 ( I : 65275 1 r : 25770
j C: OOD23 0 I : 573 16 1 C : 25772 1 1 1 ,3C70 I : 41425 1 C:
2576A c I : 41275 1 C : COO 2 3 0 C : 13764 c I : 6 5272 1 C :
oonoi 0 I : 44275 1 1 l,’10O C : 13772 1 T : 572: 6 1 C : 000 23 0 I :
65275 1 C: 1 3 7 6 6 1 C: CCCG3 1 I : 442 75 1 C : 13770 c 11,3110
I ; 56203 0 C: 51764 c C : ;207C 1 I : 56615 0 C : 0000 5 1 G :
51760 1 I : 43271 1 C: 0ZC7G 1 11 .3 120 r ; OOOT3 1 I: 777 6 1 1
C : 02032 1 C : 14033 1 I : 7L4C3 1 C : 51764 0 1 : 432 71 1 C :
02070 1 11, 3120 r : 50A73 I C : 5176C 1 T : 43271 1 r : 02U70 1 I
: 76561 1 C: 000 2 5 0 I : 77645 G C : 00C33 1 11,31A0 C: 14033 1
C: 0 2070 1 I : 63 5C1 C : 000 4 7 1 I : 60316 0 C : 000 51 0 I :
54606 0 C : 51754 c 11 ,31 5H T : 401 61 0 C : 000 3 3 1 C : 23153
1 1 : 5607C n C: 000 4 6 0 c ; 00CA6 c I : 5367C 0 C : 00C50 1
11,3160 C : 20 1 53 1 I : 4 1055 1, C : 02062 1 C : 23000 0 C :
16')6 2 1 C: 000 17 1 I : 414 14 0 C : CC 543 c 11,3170 C : 23264 n
I: 653 16 C; 0G0 21 1 I : 453 1 6 1 I : 742C5 c C : 27735 0 C :
02032 1 I: 65332 0 1 1, 3?C0 T : 53361 r! C : 000 4 1 1 T : 47315 n
C : 000 4 1 1 C : CIOC2 5 0 I : 74372 1 C : 0002 1 1 I : 41X55 c
11,3210 I : 77745 1 C: OOC2 3 0 I : 41516 C I : 65205 0 C : 27735
46. 0 I : 43302 1 C: 000 1 1 1 I : 41221 c 1 1 ,3220 r : 11025 0 C:
00017 1 T : 74205 0 C: 2773 5 c ( : C2C22 1 I : 6 52 72 0 I : 74225
1 C : 11C25 c 1 1 , 32 3C C : 00041 1 1 : 53372 1 T : 413 2 5 C r :
00017 1 C : 000 2 3 0 I : 74205 0 C: 2773 5 c C : CCC25 c 1 1 ,32AC
1 : 53352 U I : 60325 0 C: 0207C 1 C : LCf 5C 1 I : 672C6 1 C:
01351 1 I : 74271 0 1 : 63257 1 ll,32SO C : 576 1 1 1 I : 672C6 1 C
: 013 50 0 I : 5336 1 n 1 ; 702 5 7 0 C: 20 1X6 c I : 40C55 c C : 0
20 6 2 1 11,3260 c ; 23000 n C : C2C62 1 I : 77754 1 C : C20 3C 0 I
: 72135 0 C: 01501 1 C: 00 154 1 I : 7 3 2C5 1 11 ,3270 C : 27737 1
C: 0015 5 0 C : 23306 0 I : 7774 5 1 C : C2036 0 C : 24023 c C :
2400 1 0 I : 77650 1 11, 33CC C : 23061 1 I : 57435 1 C : 02013 1 I
: 77655 1 I: 43505 0 C: 000 2 5 0 C : 2347 5 c C : 23501 1 11,3310
C : 23512 0 I: 77214 0 C : -.1342 1 C : 23342 G C : 01535 0 I :
41241 0 C; 01543 1 C : 02076 1 1 1 , 3 3 2C I : 7764C Ci C : 23342
1 I : 43014 0 C: 00 303 1 C : 234 1 7 1 C : 04540 1 C : 23414 1 I :
45 145 0 1 1, 3330 C : 01517 r, C : 33647 I C : C21C5 1 I : 77754 1
C : 0 20 30 0 l: 5 1445 c C: 01535 0 I: 5C025 c 1 1 ,33A0 C : 27743
1 C: 23434 0 I : 51575 1 C : 01521 C I : 776CC 1 C : 23370 1 I :
51025 1 C : 13 762 0 11,3360 C : 23370 1 1 : 53615 0 C : 13762 0
C : 57605 0 I : 4527 1 1 r : COO 13 0 C : 277x1 1 I : 7 7 244 c 1 1
,3360 C: 23370 1 C ; 7 1^27 c I : 45246 n C : 13762 c I : 7760C 1 C
: 2337') 1 I ; 7764C 0 C: 2 3572 c 1 1 ,33 7C I : 77624 1 C : 27673
0 1 : 777 75 1 C: 01527 c C : 2513X C C : C 1 5 2 1 c C: Cl 126 c I :
77614 1
47. G4P: asSPNBLE RFVISION 116 CF AGC FRCGPAf' LLMINflPY
BY NASA a021112-C?l 19:C‘3 AUG. 11.1969 FAGF 162C octal listing
FCR PARAG1?APH # 067, tilTI- PARITY BIT IN BINARY AT T MS
RIGFT CF FACF WORD, ”i" CFNOTFS UNLSBD FI >60 REFCRY ALL
VALir NOFCS ARE BASIC IN STR T I ON S EXCEPT THCSF PARKED
"I" ( I N T E R F R E T I V F GFEPATCR NCFCS) CR "C" (CCNSTANTS)
11 ,34CC C : 00261 1 I : 66375 o 11.3A1C I : 52014 0 c; 'M3"l 0 1 1
,3421. C: OOC' 1 3 0 I : 50( 2 5 u 11,345C I : 77624 1 C : 3364 7 1
1 1 ,3440 I : 4 5020 1 f : C 2 1 1 2 1 11 ,34 5 C 0* • • 575T4 0 r :
015 13 0 11, 3460 C : 57576 1 1 : 77651 0 1 1,3471 C: 0005 2 l:
52i- 1 4 11 ,39CC C : 23655 fl 1 : 745 75 n 1 1,3910 C : 36046 n C :
236‘15 0 1 1 ,3520 C : 01134 0 T: 53361 1 11, 3530 I : 76561 1 I :
77655 1 11,^540 I : 77354 0 0 : 11116 11,3550 C : 23 7 Vi 1 C:
12401 1 11,3560 I : 67114 1 C : nor, 0 6 1 1 1 ,35 70 C : •'1116 0 T:
77624 1 1 1,3 600, I : 76173 0 C : 7531 0 1 1 1 ,3610 0: Oil 34 0 C:
25527 c 1 1 , 362‘t 0 : 27360 n I : 77776 1 11, ■’630 C: 00053 1 C :
23636 c 11,3640 C : '1117 1 C: 7774 1 1 1 , 375C I : 52 3.6 1 1 C :
13762 0 11,3760 r : 10043 0 Ct •120 72 G 1 1 , 3 7 70 C : 00 051 0
C: •’ 1142 1 C: ■j1126 0 C : C15Q1 1 c : ooooc 1 r : 23714 1 C :
22524 1 J : 52175 0 C: 2 7743 1 C : 23342 r 1 : 712 14 0 I : 77676
0 C : 0210 5 1 1: 7762^ 1 C : 27673 I : 537 75 1 C : 01535 0 C !
015 3 5 0 I : 574 14 1 C : CC343 c I : 7 7657 c C: 57574 0 C : 115
11 0 C: '!'J30 3 1 C : 267 1 2 1 C : 26717 1 C: 12062 1 I : 53216 n
C: ■12146 1 I : 57345 1 C : G2100 1 r : 13772 1 0 ; 0 2100 1 C :
'S1126 C C : 25126 c C : 01134 Cl C: 01134 0 I : 4501 4 0 C : 01
134 0 I : 7 7 7 3 2 1 C ; 12467 1 I : 77624 1 C: 11226 1 I : 66354 0
C : C1125 0 I : 45114 0 C : 2365 1 1 C: 11226 1 I : 76754 f> C :
C1116 c C ; ')J lOO 1 I : 77722 0 C : 35 1 1 C : C1126 0 C : r 1521 c
I : 43C14 1 153 53 1 C: G4022 c G55C4 c I : 52014 0 C : 01714 1 C
: 26662 1 I : 662 14 i C : C 1 7 5 5 1 C : 2357 1 0 r • 11115 (1 C:
340 41 0 C : 27142 0 C ; 615C0 c C : 02100 1 I : 74561 0 C: 11126
J C; C2032 1 I : 5?C 14 0 C ; 01671 0 I : 77614 1 C: 02676 1 I : 7
76 50 1 0 : 27266 0 I : 7:1754 0 I : 62014 0 C; 00342 1 C : 2 3 2 6
4 c C : 23 742 1 I : 50414 0 C : 1130 3 1 I : 6C575 C : f 2U3 2 1 I :
53 5 13 0 1 : 6 C 3 2 5 fl C ; O 't-.) 4 5 0 C: 000 5 2 0 I : 56 342 1 I
48. : 7 7 7 6 1 1 I : 57154 0 I : 43457 0 C : 57606 0 C; C 3 7 7 4 c C 1
16C 32 1 C : 24CC7 C C : 02100 1 C : 02105 1 C : 23335 C 1 ;
6C545 c C : C434 J 1 C : 23434 0 C : 01517 c C: 2 34 40 C I : 77 6
5C 1 C : 23372 c C : 5 7576 1 1 : 536 5 1 0 C; C2 105 1 C : 2 3 4 56
1 I : 53 7 15 1 C : 01543 1 C; 01543 1 I : 67154 C C : 02112 1 I :
64575 1 C: 02062 1 C : 36C46 0 C; 26G54 1 1 : 53362 0 C ; 02C46
1 I : 74206 U C : 112046 1 I : 5 3 3 7 2 1 C : 02062 1 I : 53322 1 C:
U2C54 1 C ; 00 341 1 C; 23606 c C: 11226 1 I : 77775 1 C: 01126 0
1: 40 132 0 C: 0 1116 0 C : n0052 G C : OOCOO 1 C: 1 1226 1 I: 67
154 C C: G 1 1 25 0 C : 75376 1 I : 77722 0 C: 01126 0 C: 234C1 c I
: 772CC c C : 23COC c C : 147 15 0 r : 2763 1 0 C : 01756 1 C : 0C2
36 0 06042 1 1: 77731 1 C: 26735 1 1 : 662 14 c C : CCC 61 c C :
01117 1 C: 777 17 0 1 : 7765C 1 I : 43345 ! C : 02076 1 C : 02100
1 C: J2062 1 1: 74255 c C : 01134 c C : 003C1 0 C : 23714 1 C :
22504 0 I : 774 14 0 C : 014 7 2 1 C5567 c C : 0203U 0 C: 51770 0
C : 36C72 1 C: 7 7 7 7 1 c 1 ; 7C744 1 C : 02C30 0 C: 23736 1 I:
776 55 1 r : C2C62 1 C : 02132 0 I : 46315 1 C : 02032 1 I : 6 34C6
r 1 : 776C5 1 I : 65301 c C : 0 )'l 5 1 ■1 C : 000 5 1 0 I : 57C74 0 C
; 03775 1 CKSR 12143 1 a
49. GAP: ASSENBLE REVISION 116 CF A C-C FROGPAA
LIMINARY BY NASA 20211 12-Cfl 1S:09 AUG. 11 ,196S PAGE 1621
OCTAL LISTING ^OR PARAGRAPH H .17'^', V»ITH PARITY BIT IN
BINARY AT THE RIGHT CF FACE WORD, "S" CENOTFS UNLSED
FINED NENCPY ALL VALID NORCS ARR BASIC IN STkI 1C T I ON 5
EXCEPT THOSE WARNED "I" (INTERPRETUE CFERATCR V,CRCS) CF
"C" (CCNSTANTS) 12,2CCC C : ooooo ! r : O'TU I ) 1 C: OOTOO 1 C:
OOOOC 1 C; 200CC C C : cooco 1 C : OCCCO 1 C : OOGOO 1 12, P'-
'IC r ; occoo 1 C : 0 )00 } 1 C ; CCOCO 1 c ; COOOO 1 C : 77777
■■) C: 7777 1 0 C: 77763 C C : 2 7 7 7 7 1 1 2,2020 C : 37777 1 C:
37777 1 C : 37777 1 I : 4GCC 1 1 C : OCCC 1 0 C: 24C26 G 1 ;
77773 1 r : 10005 0 1 2,2CTC r : 240 17 ! r : 015; 3 0 I : 66256 0 C
: 000 2 7 1 C: 000 2^ 1 C; 1 6647 0 C : 00C45 r C : 24C41 1
12,20A0 r : 01503 0 I : 7644 1 1 r : 015 11 c I : 764C5 1 C : 00023
J C; 24043 ■1 C : 015 11 C I : 5 7 2 3 6 1 12,2hEh C: 00017 1 I :
52405 1 C : 1004 1 1 I : 614 2 5 0 C : 1 1C 1 7 1 C : CCC45 0 I ;
744 21 0 C; 1 1C 17 1 12, 2060 I : 7767 1 1 C : 00C41 1 r ; 00011 1
I : 71244 •) C: 240 7 3 0 C: 1 1025 i I : 40C7 1 c C : CCCll 1
12,2070 C: 24l>77 1 I: 52 166 1 r • 24C77 1 I : 55366 1 C ; 11037 0
I : 77600 1 C: 24'i7 7 1 C : 00013 0 12,2100 I : 6 5205 '.1 C : 0002
3 ■ ) C: OOoll 1 I : 65301 (1 C: 000 4 7 1 I : E 62 57 1 C : 20173 c I
: 50C00 1 12, 2110 C : 24124 C : 24124 0 I : '^1525 1 C : C2074 0 I
: 5 1025 0 C: onnci 0 C: 24124 0 I : 7 7 7 6 5 C 12 ,2120 C : T207 4
n C; 16074 0 I : 77650 1 C : 24112 0 I : 7 12 Cl 1 C : COOCl 0 C :
02 13'T 1 C ; 00025 0 12,2120 I : E316E c C : (2074 C : 24 302 0 l:
5144C 0 C: 243C2 0 I: 51C25 1 C ; one 13 c C : 243C2 c 12,2160 I :
5114 5 0 C : 02074 C : 24 152 1 I : 5 7 5 4 5 1 C • 00013 0 C :
14015 0 C : 24007 0 C : OCC 13 0 12, 21 EC I : 7765C 1 C : 241 55
1 I : 77745 1 C; 24007 r C; 000 1 5 0 I : E 7 3 4 5 1 C : C2C74 c C :
11030 1 12, 21 6C I : 7 7 6 4 6 0 C : 16 177 1 C : '■15 53 0 I :
77621 1 C : ),)025 0 r : 02643 1 I : 62545 c C : OCC 25 c 12,21 70 I
: 41501 0 r : 'lO'iA 7 1 I ! 536C5 1 C ; CG'Ol 1 1 C : 215 7 3 0 C :
34031 1 C : 24421 0 I : 44200 0 12,22CC C : 24 2 1 1 1 C : ■:2’ 74 c
C : '12645 1 I : 44246 1 C: 02177 1 I: 7 1244 0 C : 24 3 23 1 C :
CCC37 c 12 ,22 10 I : 602 2 5 1 C : '1551 1 C ; 00C47 1 I : 60325 0
50. C : 02643 1 C: 00050 1 I : 41260 0 C: 0CC47 1 12 ,2220 C : 02645
1 I: 56257 1 C : 2 1202 1 I : 41542 1 I : 71244 0 C : 24246 1 C :
000 2 5 0 C : 00C13 0 12, 2220 I : 4522 1 1 C : 000 1 5 0 I : 51000
C: 24240 1 C: 24240 1 I : 52145 '1 C : OOOC 1 c C : 2 4 2 6 C c
12,2240 I : 45345 1 C: Oi, lO 1 5 a C: 000 2 5 r I : 52075 1 C:
11032 1 C: 24260 0 I: 77745 1 C: 00025 0 12,22 EC C : 00C.15 0 I :
45221 1 C: 00013 n I : 500:00 1 C: 24274 c C: 24 2 74 0 I : 77745 1
C : UOOOl 0 12,2260 C : 0 264? 1 I : 43 2 5 4 f C : 24 3 33 1 C :
G0025 0 C : 140 2 5 0 C : 00037 c C : 015 51 1 I : 4 6 C 3 4 1
12,2270 C : 24644 1 C: 2 4 ?• ? 3 1 I : 77650 1 C ; 24166 r I :
45345 1 C : one 13 0 C : 000 2 5 0 I : 52075 1 1 1 2 , 2300 C I 1
1033 1 C : 242 6 J c I : 7'J545 1 C : 00 n 1 3 0 I : 7776 E 0 C : C 2C
74 0 C : CQC 2 E c I : 7 7 6 5C 12,2310 C : 2414'.) 1 I : 50145 1 C :
000 2 5 1 C : 24330 1 C : 00C13 u I : 7,)545 1 C: 02643 1 C: C 2 6 4
3 1 12,232C I : 442 54 1 C : 02112 1 C : 0002 5 0 f; 14025 c C : Cl
E E 1 1 C : oon ;-7 Q I : 7 76 EC 1 C : 24267 1 12,2330 C : TOO 1 5
n T : 7765
51. GAP: ASSENBLF RFVISir'N 116 CF AGC FRCGR.M
LUMINARV B V NASA 20 2 1 1 1 2-*'^ ll 19 :Q9 AIG. 11 ,1'36G PAGE
1622 FTP PARAGRAPH If (i71, WITH P.ARITV BIT IN BINARY AT THE
SIGHT CF EACH wORC, CENCTFS CNLSED fixED nCTAL LISTING ALL
VALIC WORCR ARF BASIC INSTRUCTTONS fyCFPT THCSF PARKED
"I” (INTERPRETIVE CPERATCP wCPCS) CR "C" (CCNSTANTS)
12,24uo I ; 65372 1 0 : 00, >35 1 I : 56257 1 C; S66C2 C C: COCAS
C I : 742 21 0 r. : 11C31 C r : 12,2410 I : 42455 n I ; 7 762.6 C :
62234 i) C; 00037 0 C : 15551 1 C : 000 25 0 C : 01553 0 I : 12
,7420 C: ■'2! 1? 1 I : 77776 1 .'1 7 2 2 5 , C: tccic C C : Q2525 1 C:
125 26 C46A5 0 1 C: 67356 0 0 C: 12 ,243C C : 150 n 1 C : 23771 1
C: 64342 0 C: 4 3674 0 C : 0 6 5 6 S 1 C : C : 75173 C J 12, 2440 C
: 00656 ] 0 : 1433 1 0 C : 77633 1 C : 40512 rt C : .3-JO 2 3 0 C:
11211 1 C: 77774 0 C : 12,2450 ■16042 1 C: I4'i33 1 C: 00 O' 31 0 I
: 777 7 6 1 0722 5 G C : CCOlO 0 C : 01000 0 C : 12,246C c ; 72525
52. gap: ASSEN6LE REVISION 116 CF AGC PROGRAM
LUMINARY BY NASA 20iU12-C71 19:09 AUG. 11 ,1969 FACE 1623
nCTAI LISTING FfR PARAGRAPH tf 07 2 , WITH PARITY B IT IN
BINARY AT THE 1 RIGHT CF 1 EACH WORD, i " CENGTES LNLSFD
FIXED NFNCFY ALL valid WORDS ARF BA SK INSTRUC TIONS EXC
5PT thoSF NARXEO "I" ( I NTERPRETIVE CFEPATCR WCRCSI CR "C"
' (CCNSTANTS) 1 2 ,3000 C : 11021 1 I : 56325 1 C: .,12 7 3.1 1 C :
2 160 7 0 I : 77671 1 I : 776CO 1 C : 25122 L I : 61225 1 12,3010 C
: 02766 1 I : 6',1 32 0 C : 25 122 1 I : 63606 0 I : 65351 0 c ;
00155 0 C : 02762 1 I : 762C2 C 12,3020 I : 79660 n C : 2520 5 1 T
: 6 3306 0 I : 61C00 C C : 2512C 0 c : 250 13 1 I : 600 6 5 0 C: 1 10
15 0 12,303C C : 29205 1 I : 61660 1 C: 252>'’5 1 I : 77716 1 I :
613CI 0 c : CCCX7 1 C : 02762 1 I : 77657 1 12,3060 C : 21567 0
07225 r C : J 300 5 1 c : 20000 t) c : I'l.OOO 1 c : 72525 0 C: 5267
1 1 C : 03 166 1 1 2 ,305i! C : 15003 (1 r : 75556 < C : 6 5 2 10 C c
: 01615 1 c : 13553 c r : 76371 0 C : 63777 C: 01232 c 12,306'' C :
27367 0 ■'’6i'62 1 1 : 76605 1 I : 63006 (3 c : 06316 1 c ; 25172 1 I
: 603 16 C C : CCC67 1 12,3070 I : 53605 1 C : 02762 ! C : 21565 1
c : 16C31 C c : 00061 1 I : 75562 u I : 61306 1 I : 776 32 0 12,
31C" r : 00025 0 I : 60316 n C: 0)')67 1 I : 61325 C c : 0276C c c :
CCCxi 1 I : 75652 0 1 : 56605 0 12,3110 C : 02766 1 r : 16C63 0 C :
02 762 1 I : 63021 0 c : 11 '17 1 c : 0627) 0 C : OOC65 0 I : 776 16
c 12,312'' I : 77776 0 C : ■ 1 ■!(iG3 1 I : 5 ICC 1 1 c : fO'. Ol C c ;
25127 1 I : 77616 1 C: i)6U 7 6 1 I : ^ c c ^ ^ 1 12,3130 C : C2760
0 I : 61’25 0 C : •>2733 1 c : 02766 1 I : 65352 0 c : C2722 n I :
632C2 0 C : 11C25 0 12,3160 T : 61225 1 I : 5 53“ 1 C C : rOC67 1
c : C273T 1 I : 51657 0 c : 21176 .1 i: 636C6 0 C : 16C63 c 12 ,31
30 c : ll')23 h T : 636.06 I : 65236 1 c : 21636 (; c : C2762 1 I :
606C5 1 C : 00063 0 I : 77771 0 12, ’160 I : 75660 0 C : 25205 1 I :
7 76 15 0 I : 60306 0 c : 25151 0 c : 01)067 1 I : 776 6 5 1 I :
52C57 1 12,3170 c : 21172 0 C : 25U3 1 1 I : 50 16 5 1 c : C 2 7 6 2
1 c : 252C5 1 I : 60366 1 C : OU067 1 I : 5 3 665 1 12,32FC r : 11.
>37 0 C : 20176 0 I : 6 1625 1 I ; 77650 1 c : 25066 r I : 6DC01 1 C
: OOCCl c C : 25210 0 12,3210 I : 63616 1 C : 06070 1 I : 6C220 r c
: 02710 6 r : O'OOO 1 0 I : 776CC 1 C: 252 17 1 I : 76 6 1 6 c 12
53. ,3220 C : '2676 0 r : 1 iu0 5 0 r : 160 17 1 c : C2671 r. I : 77675 C c
: 11026 1 C : 02766 0 I : 772 16 0 12,3230 r : 00676 0 C: 02 6 55 u
I : 65115 0 c : 02663 0 c : 11112 c c : 16730 1 C : 0272C c I :
653C1 c 12,3260 C : 00067 1 C : C0C6 1 1 T : 56 3X2 1 I : 65257 1
c : 20173 0 I : 77626 0 C : 75-065 1 I : 66 362 1 12,32Sr C : 11'21
1 C : 02 73 6 '1 I : 53106 f c : 25673 0 I : 6 53 Cl 0 c : C0067 1 C :
OOOCl c I : 56362 1 12, 32 6C I : 75657 0 C : 20176 I : 56325 1 c :
0273O 1 c : 20607 1 1 : 63271 1 f : 027 3 6 c I : 7 7 6 2 6 c
12,3270 C; : 77760 0 I : 5) 1 I: 77600 1 C : 2 5 5 1 3 1 12 ,3320 C :
: 00011 1 I : 66216 n C : ‘30 7 ! 5 1 C : 25677 1 c : C0C51 0 c :
COOCl 0 1 : 77765 1 C : 02766 1 12,3330 T : : 77605 1 C : 02730 1
I : 65362 0 c : 02736 1 I : 653C1 0 c : 00067 1 C : C2736 c I : 56
257 1 12,3360 c; 20170 0 T : 53"6Q 0 C : 2562 7 1 c : 25627 1 c :
16760 0 c : 02766 1 I : 63316 1 C: 1 1027 1 12,333r I : 61301 n C :
1 C : U276U 0 I : 66257 1 c : 20571 0 c : 11025 0 C : 16762 1 C :
02760 0 12, ■’■’60 I ; ; 65000 0 r : 256 3 2 c C : 26767 1 I : 77765
1 r. : 00037 0 c : 16762 0 C : 00C31 c I : 650 16 c 12 ,3370 r :
06310 1 r : 25627 1 C: 26621 0 I : 662CC 0 c : 25667 1 c : 02671 0
C : 02760 1 I : 66266 1
54. G&P: /'SSENBLE REVISION 116 CF A HC PRCGRAF
I.UMNAFV RASA 2C21112-(71 1S:09 AUG. 11 ,1969 FACE 162A
OCTAL LISTING FCR PARAGRAPH 4 iTi , WITH PARITY BIT IN
BINARY AT THE RIGHT CF EACH WORD, "a" DENOTES LNLSEC
FIXED NENCFV ALL VALID WORDS ARE BASIC INSTRUCTICNS
EXCEPT THOSE PARKED "I" (IRTEPPPETIVE CFERATCR WCRCS) CR
"C" (CCNSTARTS) 1? ,3400 0 : : 12764 fl I; 47u44 1 C; 255 16 1 C :
24644 1 I : 4303C C C : 25460 1 C : 00714 0 C: 25415 0 12,341D I :
45345 I r : C'H’3 7 :/ C: 02762 0 r ; 77654 0 C: 2546C 1 I ; 77624 1
C ; 24536 1 I : 53145 1 12,3420 C : 0015^ C: 25460 I I : 7 7 6 15 0
C : C2766 1 C : C2766 1 I : 77650 1 C: 25330 0 I : 5 1145 C
12,343C C : 00015 0 c •• 25452 0 I : 71201 1 C: 00001 0 C: C276 6
1 C : coon 1 I : 70545 1 C : 00C15 0 12,3440 C : COO 15 0 I :
44254 1 C : 25460 1 C : C2766 1 C : 02766 1 l: 77650 1 C: 2 5 3 3 C
c I : 7 7 7 4 5 1 12 ,3450 C : .'276? n C: 0.00 3 7 n I : 71201 1 C :
CCOC 1 () C ; C27f 6 1 C : 00017 1 I : 77650 1 C ; 25436 1 12 ,346f
I : 51545 1 C : 02 76'J 1 I : 41325 0 C : 02671 0 C: 11012 1 I; 45 2
1 5 0 C : 11 C.4 1 1 I : 43C44 c 12,3470 0 : 25-= 16 I C : C2434 0 C
: 25 5 16 1 I : 43001 1 C ; oooci n C : 02434 0 C: 02 7 10 0 I : 7
1331 c 12,35’in C: 00051 0 C : 1 0000 C : ..100 1 1 1 I ; 6 5342 1 C
: 000 17 1 I ; 43342 0 1 : 77626 0 C: 75C11 c 12, 3510 C : 00C15 n
I : 77650 1 C : 25 330 0 I : 52145 0 C: 11045 0 C : 25320 i I :
60345 c C: CCC41 1 12, 3520 0 : 10047 1 I : 7-I525 1 C ' : 2 740 c I
: 77671 1 I : 75457 1 C I 20175 0 I : 724C5 0 C: 00C21 1 12,3530 I
: 41206 n C : 02766 1 I: 74261 1 C: 20206 1 C: 027 2 2 1 I : 77725
1 I : 76561 1 C : 02674 0 12,3540 I : 53235 n C : 02722 1 I : 77
772 c C : C2744 1 I : 53135 ) C: 02702 0 C: 25551 1 l: 776 5C 1
12,3550 C : 02710 0 I; 46145 f’ C: 0272 ) 0 C: 247C1 1 C : C27C 2 1
I : 77650 1 C : 02710 0 I : 40 2 20 0 12,3560 C : r 2 7 1 D 0 C :
00001 0 I : 77600 1 C : 25564 1 I: 6 3 3 7 5 0 C: 02655 0 C : 02744
1 I : 7 7 6 24 1 12,3570 C: 11046 0 I: 712fo .o C : 24 76 4 1 C : 1 1
f, 2 5 c I : 4122 5 1 C : 02742 1 C ; 02740 c I : 41366 1 12,3tCC C :
02766 1 I : 7421? 0 C; 027 12 1 I: 4532 5 1 C : 110 17 1 C : C27R2
1 I : 52361 1 C : 02722 1 1 2 , 3 6 1 C I : 535 1? 1 1 ; 776.,' 1 C :
2567C 1 I : 60325 0 r ; 12756 1 C: 00047 1 I: 41325 C C : CCC41 1
55. 12 ,362r 0 : 02740 ri I : 562 57 1 C: 20 20 1 0 I : 56225 1 r : 11023
0 C: 00045 0 C : 00031 0 I : 63400 0 12,3630 C : 25674 0 I : 50021
1 C : 11T21 1 C : 25674 0 I : 75366 0 C: C 2 7 5 5 1 I : 776 14 1 C :
0 4 2 7 2 1 12,3640 I : 76,56 1 1 r : 026 74 c I : 63235 c C : COCCI
I : 53361 0 C : 0.-)0 31 ) I : 415 7 2 1 I : 56 2 4 1 c 12,3650 C :
0272? 1 C : 25766 1 I : 40 142 1 C : 2565R 1 C: 26 7 2 2 c C :
02722 1 I : 76435 1 I : 72441 0 12,3660 r : '267 4 0 C : 16730 1 C :
i274) 0 I : 77624 1 C: 24767 1 l: 776 14 1 C : 02634 1 C : 24 74 7 c
12,3670 I : 4300 1 1 C : 0J(,',1 C : 02434 0 C : 2 5 7 52 L I : 75345
1 C ; 24005 1 C: 00031 0 C : 14031 c 1 2 , 3 7 C C r ; 24007 0 I :
77614 1 C : 04032 1 C: 25640 1 I : 40 2 20 0 C : C 2 7 10 0 C :
OOOCl c I ; 776CQ 1 12,3710 C : 2571 ! 1 I : 633 75 c C : C2655 r C
: C2744 1 I : 77624 1 C: 1 1046 ') 1: 7760C 1 C : 2 5 7 20 c 12,3720
I : 42 40 5 f. r : 027 42 1 I : 75421 1 C: 11017 1 C : C27 52 c 1 :
65215 1 C : 11013 0 C: Q'7C41 1 1 2, 373D 1 : 72405 0 c •• C2 74C
c I : 77671 1 I : 60325 0 C: G2742 1 C : 00047 1 T : 53725 1 C :
CCC41 1 12,3740 C: 20174 1 I : 4527 1 1 I : 500CQ 1 C ; 25747 1 C
: 25747 1 I : 77650 1 C: 02710 0 I ; 52 145 0 12,3750 C I 24020 n
C : 0271 ) T I : 77776 1 C5642 1 C : 206G7 1 C: 04631 1 C ; 23146
0 C : 14000 1 12, 3760 0 ; .,10000 1 r : 02314 c C : 31463 1 C :
C14!.f' 1 C: QOOOD 1 C: 10000 0 C: OOCCC 1 C : C3CC0 1 12 ,3770
C : 1 JOUO 1 r : 36f>?Ki 1 C: COOCO 1 C : C377 3 1 C : C3 7 74 c
CK SP 51153 1 a 5
56. GAP: /SSSEPBLE REVISION 116 OF AC-C PRCGRAP
LUPINflPY E V NASA 2021112-U71 19;0S AUG. 11,196? FAC-E 1625
OCTAL LISTING FCR PARAGRAPH # '''74, WITH PARITY BIT IN
RINAPY AT THE RIGHT fp EACH WORD, "S" CENCTES LNLSFC FIXED
NEFCFY ALL VALID WORDS ARE BASIC INSTRUCTICNC FxCFPT
THOSE NARKED "I" (INTERPRETIVE CFEPATCP WCRDS) CR "C"
(CCNSTANTS) 1 3 ,2000 r ; 07112 1 C: 066 20 C: 2 7 4 46 1 C:
1462G 0 C : 164 7 1 1 C : C1352 1 C : 22437 1 C; 16C67 1 13,201{.
C : 00000 1 C : OOCCO 1 C : 02 30 2 1 r : 24736 Cl C: 7765 1 0 C :
76237 0 C : 77776 1 C : 5 3C32 C 13,20 20 C: 10407 0 C : 05344 1 r
: 137 10 C C : 2532C C C : 1216C 0 C : 12124 0 I : 43014 C C: C
1474 1 13,2030 C : 04347 0 C : 26f'36 0 I ; 43014 0 C: 02756 1 C:
26C36 c C : C 14 76 0 I : 45014 0 C : 01667 1 13, 20^0 C : 27135 0
I : 71214 r C : 04307 1 C : 26063 0 C : 01571 0 C: 34041 c C : 274
12 C I ; 45C 14 c 1 3,2050 C : •U674 n C: 266 4 5 1 I : 77 6 1 4 1 C
: C2756 1 C : 26C6C c I : 43C14 0 c ; 01476 0 C : 01475 0 13,206^
I ; 45014 0 r : C146,7 0 C : 27135 0 I : 776 14 1 C : 01236 1 C: 266
3 3 0 I : 43414 1 C : 0 1674 c 13,2070 1 : 434 14 ] r : 04756 1 C : 2
6 0 7 3 1 I : 53775 1 C : ',1521 0 C: 57605 0 I : 536 55 1 C : 01535
c 13 ,21)0 C : 57576 1 r : 2522 ) 0 C : •11527 C I : 532 5 7 1 C :
576C2 1 C : C l 543 1 1 : 7 7657 C C; 57576 1 13,2110 C ; 15226 0 r
: 01517 C : 01234 0 I : 77616 0 I: 53775 1 C : 0 152 1 0 C : 576C5
c I : 53 6 5 5 1 13,2120 C : ■'1535 C : 5 75 /6 1 C : 2 5 7 20 t C :
C1527 c I : 53257 1 C : 57602 1 r : 01543 1 l: 77657 c 13,2130 r ;
57576 1 r : 61726 0 I: 77616 C C: 000 4 1 1 I: 5754 5 1 C : G0C43 0
I : 674C1 0 C : 00001 0 13, 21 A'l I : 44206 0 C : 240C5 1 r : 14CC5
1 r ; 24007 0 r : 24043 0 C: CC041 1 I; 41056 1 c ; 52^32 c 13 ,21
50 r : 14041 1 r: 0')041 1 I : 44 1 42 0 C : C0051 0 C : 14023 0 C :
00C45 c I : 77742 0 C: 34021 0 13, 2160 C : 47322 1 I : 432C6 1 C
: 24005 1 C: 24007 0 C: OOOC 5 1 I: 77634 0 C : 21636 1 C : 25111
1 13,2170 C: 0009 1 0 I : 77634 V C : 2 16 3 6 1 C : C 1 1 0 7 0 I :
7 77 7 6 1 40 1 10 0 7474C 1 lOCCO 0 13,22C( 12204 1 53107 1
53111 0 53107 1 G6C4 2 1 I : 7 7 6 50 1 C ; C0C51 c 05504 0 13,
22 10 C : 00031 0 C6C42 1 I : 77 775 1 C : 03434 1 C : 02223 0 l:
77776 1 32337 1 C46 16 1 13,2220 r : 20477 1 12333 1 0 2 2 2 4 1
57. 02216 0 32336 0 G46 16 1 C: 20477 1 12333 1 13,223c 02232 0
02224 1 ■:)6n42 1 I : 77745 1 C: 0344 2 0 C: 34C41 c C ; 27044 1 I
: 53575 0 13,2240 C: 000 '1 0 I : 77676 c C : 00031 c I : 53435 0 C
: CO0C7 0 C: 000 2 3 0 I : 534 3 5 c C: 00C31 c 13 ,22 5''' C : 24015
0 C: 02223 0 T ; 76505 0 C: OOD 1 5 0 I : 77655 1 C : 00007 0 C :
00007 0 T : 77624 1 13, 2260 0 : 27412 n I : 77624 1 C : 26343 1 I
: 53775 1 C : 00007 0 C : 57 176 0 C : 25543 1 C : CCCCl c 13,2270
I : 77657 0 r : 57176 c C : 1 5 5 3 5 r C : C3442 c C : 01517 0 T :
712 14 0 C : 01673 1 C: 01643 1 13,23CC C : 34J41 0 C : 27111 1 I
: 77624 1 C: 27412 0 1 : 77775 1 C: COC 17 1 C : 015C3 c C :
15535 0 13,2310 C: 00015 0 r : 255 1 7 c C : 00025 0 I : 77624 1 C:
27707 1 I; 77776 1 05353 1 C : 04C24 c 13 ,2320 05504 n f : 00236
0 06C42 1 I ; 77624 1 C : 2 6 6 6 2 1 I : 77531 0 C : 000 53 1 C:
26332 1 13,2330 .046 16 1 C : 27443 1 I : 77776 1 34755 1 5546 2
1 urci 1 C : 01524 c C: C 1441 1 13,2340 I : 43174 1 r : 00002 1 C :
0PO6 3 1 I : 77C14 1 C : 04303 0 C : 00052 0 C: 00000 1 I : 434 14
1 13,2350 C : 00263 n 1 : 4J220 0 C: 1)36 74 1 C: COOCl c C:
24C07 0 C ; C 2032 1 1 : 514C6 1 C : 16C70 1 13,2360 r 2400 7 0 I
: 714 14 0 C : '1743 r C : 26364 1 I : 77624 1 C : 5 1677 0 I: 77656
1 C ; 36C32 c 13,2 3 7;-. C : 2655T 0 I : 77624 1 C: 26560 { I ; 6 3
545 c C : 0 2032 1 I : 63525 0 C : 02034 1 1 : 754 15 0
58. GAP ASSP^BLE REVISION 116 CF AGC PRCGRA^ LLRINAPY
BV FASA 2021112-071 19:09 AUG. 11 ,1969 FACE 1626 OCTAl
LISTING FCR PARAGPAFF H .i76, wITF PARITY BIT IN BINARY AT
T|-e RIGHT CF EACH VsORO , "i" CENCTES LNLSEC FIXFC NENCFY
ALL VALIC l»QRCS APF PASIC INSTRUCTIONS EXCEPT THCSF
NARKEC "I" ( I NT E R FRF T I v E GFERATCR V«CRCS) OR "C"
(CCNSTANTS) 13,2400 T : 764 15 1 C: 000 1 1 1 C: 14021 1 C ;
02036 C C : 34023 1 C : 26510 1 C : 15 120 0 C: 02C32 1 13,24 If C
: 14021 1 r : 02 03 4 1 0 ; 34023 1 C: 265 13 1 C: 15 122 1 C: 0
2C70 1 I : 77625 C C : C3673 C 13,2420 C: 35124 0 C: C3674 1 I :
4C220 C C : C36 74 1 C : Oi'COl 0 C : 34007 1 C : 265 50 c I : 7 3 5
4 5 1 1 3 ,243C 0 : 01120 t ' I : 65275 1 C : 1 )0 1 1 1 C: C112C r I :
65346 C C : C 1122 1 I : 57356 c 1 : 71525 C 13, 244C C : ■ 1 120
0 I : 71525 C C ; 01122 1 I : 55475 1 1 : 41456 0 C: 36032 0 C:
2656C c I ; 43 145 C 13 ,24 50 0 : 240 17 C: 0174P c 0 : 2 6 4 5 4 c
I : 7 7 7 4 6 1 I : 7 76 24 1 C : 55716 1 r : 16032 1 C: 03673 0
13,246' I : 742 1 5 1 C : C1124 1 0 : 02032 1 I : 77772 0 C: 36C32
0 C : C 3 6 74 1 T : '''63 545 c C : C2C36 C 13,2470 I : 44352 0 0 :
240C5 1 I : 44 2 75 1 C : 26 50 7 1 0 : 2400 5 1 I : 75465 1 f. :
26503 0 I : 7 7622 1 13,2‘^CC C : 03673 (. 1 : 77616 0 r : 004 46 1
C; C03C 5 1 0 : 17711 0 C : C 5 2 5 4 1 C : ■00155 c C : 2 5250 1
13, 251C I : 77600 1 C : 265 1 2 c 1 : 63545 c C : C0023 0 T : 6352
5 0 C : 00021 1 I : 776 1 5 c I : 7 54 54 C 1 3,2520 C : 26536 0 I :
40t',6 5 r r ; Q0023 c r ; 26543 1 I : 67542 a C ; CC(j25 0 I : 50125
1 C : 00021 1 13,253C C : 26532 1 1 : 43545 1 I ; 57545 1 I : 43244
1 C: 2654C 1 C : 240 0 5 1 r : C0025 c 1 : 77616 0 13,2540 I :
52025 1 C: 246 5 1 C : 26 536 c 1 : 75345 1 C : 11021 1 C: 00023 0
c : 000 2 5 c I : 7 7 6 16 c 1 3 ,2550 I : 43145 0 0: 26505 0 C :
01743 n C : 2 6 5 5 6 0 I : 77 73 5 G C : 240C5 1 C : 0001 1 1 I :
776 16 0 13,2560 I : 71220 1 C : 00051 0 C : ri003 0 I : 71214 0 0 :
01703 1 C: 2657 5 1 C : lOCC 1 1 I : 450 14 c 13,2570 C : 00742 0
C: 26573 1 C : 26466 1 C : 37673 1 C : OOU51 0 I ; 77214 0 C:
00702 1 C; 26573 1 13,26fC C : 02 ‘,12 3 1 I : 64^4 6 1 T : 77650 1
C: 26573 1 C 5 3 5 3 1 C : CCC 52 r 35C 17 1 05 105 0 13,2610 C :
■126 13 1 C : 260 63 0 05261 1 C6C42 1 1 : 470 14 1 C: C47 12 1
59. C: 26654 1 C : 2 1574 1 1 3 ,2620 C : 00 141 1 I: 77624 1 C : 274
12 c I : 4 5 f 1 4 0 C : C1C76 1 C : 2 6 6 4 5 1 1 ; 52014 0 C : 0
1460 1 1 3, 26 20 0. : 26026 1 C : 000 1 C : 25140 0 I : 77414 0 C:
0 16 7 2 0 C 53 5 3 1 C : 20C32 1 (CC 06 1 13,2640 3 2632 1 05277
c C : 0 2 6 0 4 1 C : 26C63 c 15155 J I : 4 3014 0 C: 01472 1 C : C
1673 1 13,26SC I : 43C14 0 C : 01676 1 0 : 01675 1 I; 77616 c I : 7
7 7 7 6 1 0 5"^^ 1 C : C0CC2 c 05516 c 13,266f C : 0022 1 0 05
155 c T : 47C20 0 C: 000 51 y C : 26675 1 l: 45014 0 C: 04063 c C :
26114 1 13,2670 I : 43014 0 C : O') 30 3 1 C : CO C 5-1 0 C : C
4223 c C : Q0C5 1 Q 0 3037 c 55500 1 51500 c 13 ,2700 3150 2 1
515C0 c 55554 0 11500 1 12676 C C6C64 c 1 : 43034 1 C : 26724 1
13,2710 0 : 04 30 3 n C : 267 1 7 1 I ; 662 14 c 0, : C0263 0 C : ■3
20 3 1 1 C: COOC ) 1 1 : 776 16 0 I : 6 6 2 1 4 c 13 ,2720 C : iO:16
3 1 C; 0203 1 1 C : 00002 0 I : 776 16 0 C3C27 r 5 55CQ 1 51500 0
31554 1 13,2730 51500 0 555C2 r 1 15 10 1 12725 1 06064 0 I :
47020 0 C : 0005 1 c C : 2 6 7 5 C 1 13,2740 I : 45014 0 r : 0406 4
1 C : 26C70 1 I : 43014 c C : 003C3 1 C : 000 51 1 C : 042 24 1 C :
0005 1 0 13,2750 0303 7 0 5 5 5 ' ‘ 1 1 5 1500 c 31502 1 5 15CC c 5
5626 c 115C0 1 12751 1 12,2760 C6C64 0 I : 4?:, 14 1 C : 043C 7 1
C ; 27CC2 0 C : 2677 1 1 I: 5 20 14 0 C : 043C4 1 C : 26 7 1 7 1 13
,2770 C : 26712 1 0 3037 5 5 500 1 51500 n 31626 1 S15C0 0
55502 0 11500 1
61. Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
Let us accompany you on the journey of exploring knowledge and
personal growth!
ebookname.com