Introduction xixChapter 1: Game of Life: The Basics 1Game of Life: The Program 2Starting with Cargo 4Putting the Pieces Together 5Bringing In External Functionality 5Namespaces 6Generating the Game Grid 7Dissecting Main 8Defining Functions 8Defining Variables 9Datatypes 11Arrays 12Control Structures 14Looking at More Function Functions 16Returning Values 16Passing Parameters 18Scope 21Compiling Programs 22Summary 24Exercises 25Additional Resources 25Chapter 2: Extended Life 27Understanding Ownership 28Extending Life 30Adding Modules 32Working with Command-Line Arguments 34Option Types 36Reading from Files 39Extracting Values 41Populating from the Vector 42Outputting to the Terminal 43Using Colors 44Printing Generations 44Summary 46Exercises 48Additional Resources 48Chapter 3: Building A Library 49References 50First Pass 53Traits and Implementations 56Self-Identification 60The Rest 60Second Pass 62The Driver 65Summary 67Exercises 69Additional Resources 69Chapter 4: Hangman 71Our Data 74The Traits 77Implementations 79Using the Option Enum 82Finishing Up the Implementation 83Reading Files and Selecting Words 84Handling Errors Concisely 85Generics and Bounds 87A Vector of Lines 88The Rest of the Story 90Initialization 91Playing the Game 92Summary 94Exercises 95Additional Resources 95Chapter 5: In Concurrence 97The Dining Philosophers 98Mutexes and Semaphores 101Interprocess Communications 103The Main Event 106Unix Sockets 107File and Directory Handling 109Closures 112Threading in the Main 114Creating Streams 115Cryptographic Hashing 116Creating Threads 117Summary 118Exercises 119Additional Resources 119Chapter 6: Clients and Servers 121Planning 123Network Programming 125Programming Sockets 128Rust TCP Server 131Handling Requests 134Operating System Calls 137Summary 139Exercises 140Additional Resources 140Chapter 7: Client-Side Applications 141Encryption 142Encryption Algorithms 144Going Hybrid 145Encryption Algorithms 147Transport Layer Security (TLS) 147TLS Server 151Remote Access Client 154Creating the Connection 156Validating Input 157Regular Expressions 157The Final Function 159Summary 163Exercises 164Additional Resources 164Chapter 8: Going Relational 165Application Architectures 166n-Tier Applications 167Microservices 169Model-View-Controller 171Databases 172Structured Query Language 172Server or Embedded 175Accessing Databases 176Writing a Database Program 177Main and Modules 178Database Functions 183Adding Records 184Listing Records 186Summary 189Exercises 190Additional Resources 190Chapter 9: NO(SQL) Going 191Assertions 192Design by Contract 195NoSQL 198Working with MongoDB 202Inserting Data 202Reading in Data from a File 206Populating the Database 207Retrieving Values 209Summary 213Exercises 214Additional Resources 214Chapter 10: Web Communications 215Style Guides 216Hypertext Transfer Protocol 219Programmatic Communication 222Web Communication Over TLS 227Client Communication 229Jumping Ahead 232Jumping Back 237Summary 238Exercises 239Additional Resources 240Chapter 11: Web Server 241Offensive vs. Defensive Programming 242Web Application Communications 245Web Application Parameters 245Asynchronous JavaScript and XML 248Representational State Transfer 249APIs in Node.js and Python 250API Server in Rust 252Rust Rocket 255Summary 262Exercises 262Additional Resources 263Chapter 12: Getting to the System 265Extending Functionality 266Windows Registry 272Programmatic Access to the Registry 275Using Rust to Access the Registry 277System Information with Rust 282Persistence (for Fun) 287Summary 289Exercises 290Additional Resources 290Chapter 13: Device Programming 291Logging 292Using syslog 292Using Windows Event Logs 299Working with Raspberry Pi 305Lighting Lights 310Reading GPIO 315Summary 318Exercises 319Additional Resources 319Chapter 14: Collecting Stuff 321Arrays and Vectors 322Linked Lists 329Stacks 333Queues 336Sorting 337Search Trees 340Summary 345Exercises 346Additional Resources 346Chapter 15: Odds and Sods 347Unit Testing 348Testing Types 350Test Plans 351Unit Tests 353Recursion 360Machine Learning 364Chatbots 366Neural Networks 369Summary 371Exercises 373Additional Resources 373Index 375
About the AuthorRic Messier is Senior Information Security Consultant with FireEye Mandiant. He is an author, consultant, and educator who holds GCIH, GSEC, CEH, and CISSP certifications and has published several books on information security and digital forensics. He is familiar with a wide variety of languages, including BASIC, Pascal, C, C++, C#, Rexx, Perl, Python, Java, Go, Swift, and Objective-C.Visit us at wrox.com for free code samples.