Preface; How This Book Was Written; Audience; Other Resources; Structure; Software Prerequisites; Conventions Used in This Book; Using Code Examples; SafariĀ® Books Online; How to Contact Us; Acknowledgments;Chapter 1: Primitive Data; 1.1 Introduction; 1.2 Changing the Capitalization of a String; 1.3 Cleaning Up Whitespace in a String; 1.4 Building a String from Parts; 1.5 Treating a String as a Sequence of Characters; 1.6 Converting Between Characters and Integers; 1.7 Formatting Strings; 1.
8 Searching a String by Pattern; 1.9 Pulling Values Out of a String Using Regular Expressions; 1.10 Performing Find and Replace on Strings; 1.11 Splitting a String into Parts; 1.12 Pluralizing Strings Based on a Quantity; 1.13 Converting Between Strings, Symbols, and Keywords; 1.14 Maintaining Accuracy with Extremely Large/Small Numbers; 1.15 Working with Rational Numbers; 1.
16 Parsing Numbers; 1.17 Truncating and Rounding Numbers; 1.18 Performing Fuzzy Comparison; 1.19 Performing Trigonometry; 1.20 Inputting and Outputting Integers with Different Bases; 1.21 Calculating Statistics on Collections of Numbers; 1.22 Performing Bitwise Operations; 1.23 Generating Random Numbers; 1.
24 Working with Currency; 1.25 Generating Unique IDs; 1.26 Obtaining the Current Date and Time; 1.27 Representing Dates as Literals; 1.28 Parsing Dates and Times Using clj-time; 1.29 Formatting Dates Using clj-time; 1.30 Comparing Dates; 1.31 Calculating the Length of a Time Interval; 1.
32 Generating Ranges of Dates and Times; 1.33 Generating Ranges of Dates and Times Using Native Java Types; 1.34 Retrieving Dates Relative to One Another; 1.35 Working with Time Zones; 1.36 Converting a Unix Timestamp to a Date; 1.37 Converting a Date to a Unix Timestamp;Chapter 2: Composite Data; 2.1 Introduction; 2.2 Creating a List; 2.
3 Creating a List from an Existing Data Structure; 2.4 "Adding" an Item to a List; 2.5 "Removing" an Item from a List; 2.6 Testing for a List; 2.7 Creating a Vector; 2.8 "Adding" an Item to a Vector; 2.9 "Removing" an Item from a Vector; 2.10 Getting the Value at an Index; 2.
11 Setting the Value at an Index; 2.12 Creating a Set; 2.13 Adding and Removing Items from Sets; 2.14 Testing Set Membership; 2.15 Using Set Operations; 2.16 Creating a Map; 2.17 Retrieving Values from a Map; 2.18 Retrieving Multiple Keys from a Map Simultaneously; 2.
19 Setting Keys in a Map; 2.20 Using Composite Values as Map Keys; 2.21 Treating Maps as Sequences (and Vice Versa); 2.22 Applying Functions to Maps; 2.23 Keeping Multiple Values for a Key; 2.24 Combining Maps; 2.25 Comparing and Sorting Values; 2.26 Removing Duplicate Elements from a Collection; 2.
27 Determining if a Collection Holds One of Several Values; 2.28 Implementing Custom Data Structures: Red-Black Trees--Part I; 2.29 Implementing Custom Data Structures: Red-Black Trees--Part II;Chapter 3: General Computing; 3.1 Introduction; 3.2 Running a Minimal Clojure REPL; 3.3 Interactive Documentation; 3.4 Exploring Namespaces; 3.5 Trying a Library Without Explicit Dependencies; 3.
6 Running Clojure Programs; 3.7 Running Programs from the Command Line; 3.8 Parsing Command-Line Arguments; 3.9 Creating Custom Project Templates; 3.10 Building Functions with Polymorphic Behavior; 3.11 Extending a Built-In Type; 3.12 Decoupling Consumers and Producers with core.async; 3.
13 Making a Parser for Clojure Expressions Using core.match; 3.14 Querying Hierarchical Graphs with core.logic; 3.15 Playing a Nursery Rhyme;Chapter 4: Local I/O; 4.1 Introduction; 4.2 Writing to STDOUT and STDERR; 4.3 Reading a Single Keystroke from the Console; 4.
4 Executing System Commands; 4.5 Accessing Resource Files; 4.6 Copying Files; 4.7 Deleting Files or Directories; 4.8 Listing Files in a Directory; 4.9 Memory Mapping a File; 4.10 Reading and Writing Text Files; 4.11 Using Temporary Files; 4.
12 Reading and Writing Files at Arbitrary Positions; 4.13 Parallelizing File Processing; 4.14 Parallelizing File Processing with Reducers; 4.15 Reading and Writing Clojure Data; 4.16 Using edn for Configuration Files; 4.17 Emitting Records as edn Values; 4.18 Handling Unknown Tagged Literals When Reading Clojure Data; 4.19 Reading Properties from a File; 4.
20 Reading and Writing Binary Files; 4.21 Reading and Writing CSV Data; 4.22 Reading and Writing Compressed Files; 4.23 Working with XML Data; 4.24 Reading and Writing JSON Data; 4.25 Generating PDF Files; 4.26 Making a GUI Window with Scrollable Text;Chapter 5: Network I/O and Web Services; 5.1 Introduction; 5.
2 Making HTTP Requests; 5.3 Performing Asynchronous HTTP Requests; 5.4 Sending a Ping Request; 5.5 Retrieving and Parsing RSS Data; 5.6 Sending Email; 5.7 Communicating over Queues Using RabbitMQ; 5.8 Communicating with Embedded Devices via MQTT; 5.9 Using ZeroMQ Concurrently; 5.
10 Creating a TCP Client; 5.11 Creating a TCP Server; 5.12 Sending and Receiving UDP Packets;Chapter 6: Databases; 6.1 Introduction; 6.2 Connecting to an SQL Database; 6.3 Connecting to an SQL Database with a Connection Pool; 6.4 Manipulating an SQL Database; 6.5 Simplifying SQL with Korma; 6.
6 Performing Full-Text Search with Lucene; 6.7 Indexing Data with ElasticSearch; 6.8 Working with Cassandra; 6.9 Working with MongoDB; 6.10 Working with Redis; 6.11 Connecting to a Datomic Database; 6.12 Defining a Schema for a Datomic Database; 6.13 Writing Data to Datomic; 6.
14 Removing Data from a Datomic Database; 6.15 Trying Datomic Transactions Without Committing Them; 6.16 Traversing Datomic Indexes;Chapter 7: Web Applications; 7.1 Introduction; 7.2 Introduction to Ring; 7.3 Using Ring Middleware; 7.4 Serving Static Files with Ring; 7.5 Handling Form Data with Ring; 7.
6 Handling Cookies with Ring; 7.7 Storing Sessions with Ring; 7.8 Reading and Writing Request and Response Headers in Ring; 7.9 Routing Requests with Compojure; 7.10 Performing HTTP Redirects with Ring; 7.11 Building a RESTful Application with Liberator; 7.12 Templating HTML with Enlive; 7.13 Templating with Selmer; 7.
14 Templating with Hiccup; 7.15 Rendering Markdown Documents; 7.16 Building Applications with Luminus;Chapter 8: Performance and Production; 8.1 Introduction; 8.2 AOT Compilation; 8.3 Packaging a Project into a JAR File; 8.4 Creating a WAR File; 8.5 Running an Application as a Daemon; 8.
6 Alleviating Performance Problems with Type Hinting; 8.7 Fast Math with Primitive Java Arrays; 8.8 Simple Profiling with Timbre; 8.9 Logging with Timbre; 8.10 Releasing a Library to Clojars; 8.11 Using Macros to Simplify API Deprecations;Chapter 9: Distributed Computation; 9.1 Introduction; 9.2 Building an Activity Feed System with Storm; 9.
3 Processing Data with an Extract Transform Load (ETL) Pipeline; 9.4 Aggregating Large Files; 9.5 Testing Cascalog Workflows; 9.6 Checkpointing Cascalog Jobs; 9.7 Explaining a Cascalog Query; 9.8 Running a Cascalog Job on Elastic MapReduce;Chapter 10: Testing; 10.1 Introduction; 10.2 Unit Testing; 10.
3 Testing with Midje; 10.4 Thoroughly Testing by Randomizing Inputs; 10.5 Finding Values That Cause Failure; 10.6 Running Browser-Based Tests; 10.7 Tracing Code Execution; 10.8 Avoiding Null-Pointer Exceptions with core.typed; 10.9 Verifying Java Interop Using core.
typed; 10.10 Type Checking Higher-Order Functions with core.typed;Index;Colophon;.