-
Parallelism
In Clojure; you can use parallelism to optimize operational performance across resources. In this video; James Lee demonstrates the pmap function's ability to run Clojure tasks in parallel; optimizing performance.
-
Channel Buffers
After watching this video; you will be able to describe and work with channel buffers.
-
Channels and the Chan Function
After watching this video; you will be able to describe and work with channels and the chan function in Clojure.
-
Clojure's Alts Function
After watching this video; you will be able to work with Clojure's alts function to perform the peek functionality in channels.
-
Clojure's http-kit and Caching
After watching this video; you will be able to use caching and the http-kit with the core.async library.
-
Clojure's Put and Take Functions
After watching this video; you will be able to work with Clojure's put and take functions.
-
Clojure's Putret Feature
After watching this video; you will be able to use the putret feature available in Clojure.
-
Comparing Various Put and Take Functions
After watching this video; you will be able to distinguish the differences between the various put and take functions.
-
Error Handling in Clojure
After watching this video; you will be able to include error handling in your Clojure programs.
-
Garbage Collecting Go Blocks
After watching this video; you will be able to describe how Clojure go blocks are garbage collected.
-
Inside Clojure's core.async Library
After watching this video; you will be able to identify the main features and benefits of using the core.async library when creating asynchronous Clojure programs.
-
Pipelines and the Pipeline Function
After watching this video; you will be able to describe and work with pipelines and the pipeline function.
-
Setting Up the core.async Library
After watching this video; you will be able to install and configure the core.async library for use in your Clojure programs.
-
The Map Function
After watching this video; you will be able to work with the map function of the core.async library.
-
The Merge Function
After watching this video; you will be able to work with the merge function of the core.async library.
-
The Mix Function
After watching this video; you will be able to work with the mix function of the core.async library.
-
The onto-chan Function
After watching this video; you will be able to work with the onto-chan function of the core.async library.
-
The Pub and Sub Functions
After watching this video; you will be able to work with the pub and sub functions of the core.async library.
-
The Reduce Function
After watching this video; you will be able to work with the reduce function of the core.async library.
-
The Split Function
After watching this video; you will be able to work with the split function of the core.async library.
-
Transducers
After watching this video; you will be able to describe transducers and use them in your Clojure programs.
-
Using Go Macros and Go Blocks
After watching this video; you will be able to work with the go macro and use go blocks in your Clojure programs.
-
Using the Pipeline-blocking Function
After watching this video; you will be able to utilize the pipeline-blocking function in your Clojure programs.
-
Boolean Values; Characters; and Keywords in
Clojure supports boolean; char; and keyword functions. In this video; James Lee demonstrates the behavior of the boolean function; the use of the char and char? functions to convert characters into their ASCII representations or vice versa; and the use of the keyword function to create keys.
-
DSLs
Clojure allows you to use macros to create and implement domain-specific languages. In this video; James Lee demonstrates how beginning and end XML tags are programmatically generated for specific macro elements and added recursively to the relevant child elements.
-
Language Basics
In Clojure; you can use several different data types such as integers; floats; strings; vectors; and lists to perform various coding tasks. In this video; James Lee demonstrates the basics of the Clojure programming language as well as some of its data types.
-
Validators
The Clojure programming language allows users to work with validators within the Java Virtual Machine platform. In this video; James Lee demonstrates how to apply a validator to a reference that is being modified.
-
Watchers
Clojure watchers are functions invoked when the references to which they are registered change state. In this video; James Lee demonstrates how to add and remove watchers to and from a Clojure reference.
-
Compojure
In Clojure; you can use the Compojure library to work with a development library. In this video; James Lee demonstrates how to create and configure a development web site using the Compojure library and how to turn the new development library into a web server.
-
Concurrency Functions
In Clojure; the pmap; pvalues; and pcalls concurrency functions parallelize code to create threads that can be executed simultaneously. In this video; James Lee demonstrates the similarities and differences of parallelizing concurrency functions in Clojure.
-
Concurrency with Agents
In Clojure; the send and send-off functions allow agents concurrent use of fixed-size and unbounded thread pools. In this video; James Lee discusses concurrency and explains how multiple agents' concurrent use of the send function's fixed-size thread pool can block I/O operations.
-
Conditional Expressions in
In Clojure; there are a number of conditional functions with their own arguments that can be evaluated with expressions. In this video; James Lee demonstrates how conditional expressions are used; as well as how Boolean values are executed.
-
Constructing Sequences in
In Clojure; sequences are logical lists that implement the iSeq interface. In this video; James Lee demonstrates how to cast to a sequence; return a value from a particular position in a sequence and add an element to a sequence.
-
Consuming First Class Functions
In Clojure; there are many examples of functions that consume first class functions. In this video; James Lee demonstrates how to use the map function to consume first class functions.
-
Creating and Accessing Refs in
The Clojure programming language allows users to create and access references within the Java Virtual Machine platform. In this video; James Lee demonstrates how to use the Clojure ref function to create and access references.
-
Creating and Updating Agents in
In Clojure; you can use the send and send-off functions to update agents. In this video; James Lee demonstrates how to create and change agents' states in multiple threads; using Clojure's send and send-off functions.
-
Deploying Web Apps
Clojure allows you to deploy web apps to Amazon's Elastic Beanstalk Service. In this video; James Lee explains the deployment process and outlines the processes that Clojure undertakes when it automatically deploys an app.
-
Errors and Agents in
In Clojure; you can use functions and keywords to manage agent exceptions. In this video; James Lee forces an agent to throw exceptions and uses Clojure's agent-error and other functions to handle them.
-
Futures and Promises
In Clojure; the future and promise functions create separate threads where their expressions are executed and use cached values in order to return to dereferenced functions. In this video; James Lee demonstrates the future and promise functions; respectively; as well as their unique dereferencing functions.
-
Hierarchies in
In Clojure; you can use multimethods to implement inheritance by way of hierarchies comprising symbols. In this video; James Lee demonstrates how to use the derive and isa? functions to build and query hierarchies in Clojure.
-
HTML Templating in Web Apps
In Clojure; you can create and work with enlive and luminus HTML templating libraries. In this video; James Lee demonstrates how to use each templating system to create web applications as well as how to access and modify the files containing the default content for each of HTML templating library.
-
Implementing Macros
In Clojure; you can implement macros and shortcuts to assign unique values to selected actions and include the single quote; backquote; and unquote characters. In this video; James Lee demonstrates how to implement macros more easily using syntactical shortcut characters and the for loop macro.
-
Installing and Using Leiningen
In Clojure; you can install Leiningen to help automate your projects. In this video; James Lee demonstrates how to install and use Leiningen specifically while working in the Microsoft Windows environment.
-
Introducing Functions in
In Clojure; you can use functions to produce a range of results that may differ depending on which inputs the code received and what arguments have been defined for the code. Some functions may take no arguments. In this video; James Lee gives an introduction to using functions in Clojure.
-
Lazy Sequences in
In Clojure; a lazy sequence is one in which the items are processed only once they’re accessed directly. In this video; James Lee explains how to create a lazy sequence and demonstrates how a lazy sequence behaves in code.
-
Lists in
In Clojure; there are different types of collections. One of these is lists. In this video; James Lee demonstrates two ways to create a list in Clojure.
-
Loading Namespaces from a File or Stream
Clojure allows you to load namespaces from a file or stream if the namespaces have been fully defined. In this video; James Lee demonstrates how to use Clojure to load and work with namespaces in files and streams.
-
Local Bindings in
In Clojure; by default; function arguments are locally bound to the function in which they are defined. In this video; James Lee demonstrates how to use the f1 function to show that the x and y arguments are locally bound to the function.
-
Looping and Recursion in
Clojure variables are immutable and have different looping and recursion constructs than other programming languages. In this video; James Lee demonstrates how to use the loop/recur construct to implement looping and recursion in Clojure.
-
Manipulating Namespaces
Clojure includes various built-in functions that allow you to manipulate namespaces within the Java virtual machine to customize them and associate unique attributes with them as needed. In this video; James Lee demonstrates how to create and modify the values that are associated with namespaces in Clojure.
-
Maps in
In Clojure; collections of key-value pairs are called maps. In this video; James Lee demonstrates how to create maps; how to retrieve values from a map; and how to change; remove; overwrite; or add values to a map.
-
Multimethods in
In Clojure; the defmulti function defines multimethods; dispatching functions accompanied by methods sharing names but expecting different arguments. In this video; James Lee demonstrates how Clojure multimethods match defmethod values or output default values.
-
Namespace-Qualified Symbols and Keywords in
In Clojure; you can query namespaces within Java to establish what methods and other objects are contained within a particular namespace. In this video; James Lee demonstrates how to query namespaces using Clojure.
-
Namespaces in
In Clojure; namespaces are used to provide modularity to code. In this video; James Lee demonstrates how to define and evaluate code variables using namespaces and the ns command.
-
Non-relational Data and
In Clojure; you can work with non-relational databases to execute queries quickly and track changes in the database. In this video; James Lee demonstrates how to use the Clutch library to execute various tasks including creating; retrieving; and updating a CouchDB document with Conjure.
-
Optimizing Functions
In Clojure; you can optimize functions in various ways to improve performance as well as code readability. In this video; James Lee demonstrates how to optimize functions using memorization; Type Hints; and transients.
-
Overview of Protocols and DataTypes
In Clojure; a protocol is equivalent to an interface in Java. In this video; James Lee demonstrates how to create and define a Clojure protocol and its associated data types using the defprotocol and deftype functions and explains how to output the relevant protocol's methods.
-
Packaging Web Apps
In Clojure; you can use the command line interface to package and deploy web apps. In this video; James Lee explains the process of packaging web apps in order to deploy the apps on a web server such as Tomcat.
-
Producing First Class Functions
In Clojure; you can use functions to produce first class functions. In this video; James Lee demonstrates how to use the make-adder-function to produce a first class function that does addition.
-
Proxying Java Classes
In Clojure; the proxy function allows the proxying of Java classes by producing an instance of an anonymous class. In this video; James Lee demonstrates how to create an anonymous class instance object and execute methods defined off it.
-
Querying Namespaces
In Clojure; you can query namespaces within Java to establish what methods and other objects are contained within a particular namespace. In this video; James Lee demonstrates how to query namespaces using Clojure.
-
Reading and Writing Metadata
In Clojure; you can attach metadata to any data structure; including keywords; symbols; sequences; and references. In this video; James Lee demonstrates how to attach metadata to a variable and how to add to existing metadata.
-
Relational Data and
In Clojure; relational data allows you to communicate with an already existing MySQL server. In this video; James Lee demonstrates how to use the clojure.java.jdbc library to connect to SQL databases efficiently; construct queries and execute them; and evaluate the transactions taking place on the database connection.
-
Running Web Apps Locally
Clojure allows you to run web apps on a local machine. In this video; James Lee demonstrates how to create and configure a web app and then host that app locally.
-
Sequence APIs in
Clojure supports a rich set of APIs for working with sequences. In this video; James Lee demonstrates how to use a number of functions to create and manipulate sequences in Clojure.
-
Sets in
In Clojure; a set is a collection of unique items. In this video; James Lee demonstrates different ways to create; sort; and alter sets and how to perform union; difference; and intersection operations on sets in Clojure.
-
Shutting down Agents in
Clojure allows you to use the shutdown-agents function to prevent agents performing new actions. In this video; James Lee demonstrates how the shutdown-agents function shuts down agents and prevents access to them.
-
Side Effects in
Clojure lists are known to be lazy; because they must be evaluated before they are executed. In this video; James Lee demonstrates how to use the foo variable to illustrate a function side effect.
-
Starting with Macros
In Clojure; the defmacro function allows the extension of the compiler; without inbuilt support; through the definition of syntactical constructs. In this video; James Lee demonstrates how to use the defmacro function to build a macro for customizing Clojure syntax.
-
Working with Macros
In Clojure; the macroexpand-1 function assists in debugging macros during development by expanding out code. In this video; James Lee demonstrates how the macroexpand-1 function overcomes Clojure's inability to detect syntax errors in macros during development.
-
Working with Numbers in
Clojure allows you to work with numbers and integers and to perform number conversions within the Java virtual machine platform. In this video; James Lee demonstrates how to use Clojure to work with different number types.
-
State Management in
In Clojure; state is managed using atoms; Agents; and Refs. In this video; James Lee explains the characteristics of each of these entities and demonstrates how to create them.
-
Switching Namespaces
Clojure allows you to switch between namespaces to make variables and functions within a namespace accessible from a fully qualified namespace. In this video; James Lee demonstrates how to switch between namespaces in Clojure.
-
Tail Recursion in
Tail recursion differs in Clojure because it uses Java and calling conventions. In this video; James Lee demonstrates how to use the sums-tail function to explore tail recursion and stack overflow errors.
-
Unit Testing in
In Clojure; you can ensure your code does what you intend it to do using a specific unit testing framework called clojure.test. In this video; James Lee demonstrates how to use the clojure.test unit testing framework to create and run test cases with Clojure.
-
Updating Refs in
The Clojure programming language allows users to update refs using the Java Virtual Machine platform. In this video; James Lee demonstrates how to change and execute references using various functions in Clojure.
-
Use Comp to Compose Functions
In Clojure; the comp function takes a set of functions and combines them into a single function that can be used across arguments. In this video; James Lee demonstrates how to use the comp function to construct an anonymous function consisting of several provided existing functions.
-
Using Korma with
In Clojure; you can use the Korma Domain Specific Language; or DSL; to communicate easily with SQL. In this video; James Lee demonstrates examples of how to use the Korma DSL to define a database and then execute various tasks in the database using Clojure.
-
Using loop
In Clojure; the loop/recur construct is the solution to the tail recursion problem of stack overflows. In this video; James Lee demonstrates how to use the loop/recur construct to find all the digits within a string sentence.
-
Using Partial to Curry Functions
In Clojure; the partial function is a function that defines an anonymous function. In this video; James Lee demonstrates how to use the partial function to create anonymous functions that add numbers; map arguments; and conjoin strings.
-
vars and thread-local State
The Clojure programming language allows users to work with vars and thread-local states within the Java Virtual Machine platform. In this video; James Lee demonstrates how to perform root binding of variables using Clojure.
-
Vectors in
In Clojure; using collections known as vectors are typically preferred to using lists. In this video; James Lee demonstrates different ways to create vectors; to add; remove; return; or replace items in a vector; and to reassign values to a vector.
-
Waiting for Agents in
In Clojure; you can use the await function to monitor tasks performed by agents. In this video; James Lee demonstrates how Clojure's await and await-for functions allow active agents' threads to be monitored.
-
Working with Metadata
In Clojure; you can work with metadata in various ways. In this video; James Lee demonstrates how to add metadata; including a doc string and a test case; to a function; how to read the metadata for a function; how to access specific metadata values associated with a map; and how to modify metadata.
-
Working with DataTypes and Protocols
The Clojure programming language allows users to work with DataTypes and Protocols within the Java Virtual Machine platform. In this video; James Lee demonstrates how to extend Protocols and define DataTypes using Clojure.
-
Java and
Clojure allows you to execute Java code and methods; and the create Java class objects. In this video; James Lee demonstrates how to use Clojure syntax to create; access; and modify Java class objects and instance methods.
-
Working with Strings in
In Clojure; referencing the clojure.string namespace allows you to work with data strings in various ways. In this video; James Lee demonstrates how to use string methods in Clojure; including how to convert a string to a symbol; convert a keyword to a string; and concatenate strings.
-
Profiling
The Clojure programming language allows users to integrate software profiling into the Java Virtual Machine platform. In this video; James Lee demonstrates how to use Clojure profiling features to benchmark your program.
-
Introduction to
Clojure is a fairly simple programming language that has various benefits; but also a few potential drawbacks. In this video; James Lee demonstrates the easy integration of Clojure with various operating systems and software; and examines some of its drawbacks.
-
Updating Refs in
In Clojure; atoms are synchronous and uncoordinated. In this video; James Lee demonstrates how to create an atom; different ways to update atoms; and how operations against atoms are processed.