The Code Repository
Getting the Code
I’ve put some of the programs from the book into a registry devoted to Practical Julia code samples.
For convenient access, just do
registry add git://julia.lee-phillips.org/PracticalJulia
from package mode in the Julia REPL.
After adding the registry, you can add any package listed below by entering package mode in the
Julia REPL and typing add PACKAGE
, substituting the package name shown in boldface.
Then, as usual, back in the normal REPL mode, just say using PACKAGE
to get access
to the module. Many of the modules do not export names, so you will need to namespace them.
In the REPL, you can type the name of the package followed by a dot, and then press TAB to
see all the available functions (usually only one per package).
If you prefer to download the code outside of the package system, you can use Git directly.
Go to the directory where you want to put the code and enter
git clone git://julia.lee-phillips.org/code/ChapterN/PACKAGE
.
For example, to download the first package listed below, enter
git clone git://julia.lee-phillips.org/code/Chapter2/BetterStringDecorator
.
You’ll find the actual module file within the src
directory inside the package
directory that appears if the git clone
command works.
About This Code
These programs are teaching devices, not “production code”. Most of them can be made faster and improved in various ways. All the code in the registry is MIT licensed. Feel free to reuse, including placing into Github or anywhere else that you find convenient. The “canonical” versions will, however, always remain in this repository.
How to Contribute
If you have ideas or improvements that you feel might be useful for other learners, you can contribute patches by email. See these general instructions for the procedure.Less formally, you can just email me a diff file, or another description of your suggestions. And of course, as mentioned above, you may also maintain your own forks.
The Packages
Chapter 2: Language Basics
BetterStringDecorator: A tiny program that provides a festive version of a string.
Chapter 4: The Plotting System
Gingerbread: This package collects several fragments in this chapter to create a little function
that you can call to draw a scatter plot of the iterated map called the “Gingerbread Man”.
After importing the package, simply enter draw_gingerbread(a, x₀, y₀, N)
to create the picture.
Interesting results can be had for values of the parameter 0 < a < 2
.
Chapter 5: Collections
Nprimes: The continue
statement is illustrated with a small program that generates
the first 100 prime numbers. The version in this repository displays the first N
primes
when you call nprimes(N)
.
Chapter 6: Functions, Metaprogramming, and Errors
ThreeMacros: The three example macros from this chapter are collected in this package.
Chapter 7: Diagrams and Animations
PlanetDiagram: From Listing 7.1, the function planet_diagram()
will use Luxor to draw a diagram of the solar system.
PtolemyJavis: From the “Epicycle Animation” section of the chapter; uses Javis to animate a planet orbiting the Sun in the Ptolemaic style.
DrumheadWithReel: From Listing 7.5, with the addition of one function using Plots’
@gif
macro.
Chapter 8: Types
GraphSomeTypes: The program in Listing 8-2, placed in a function. Run to create the diagram.
IsCircleInCircle: The code leading to Figure 8-3. Our circle types, and the is_inside()
function for
checking if one circle is inside another. The code that draws the diagram is turned into a function that
can plot any number of circles.
LeibnizSeries: Using the Leibniz series to estimate π. From the code just before the start of the “Types Aliases” section.
EllipseComplexPlane: Code assembled from the “Parametric Types” section.
The Luxor code that creates Figure 8-5 is turned into a function that draws any CEllipse
.
WeatherPlotRecipes: Collects all the plotting recipes up to the @userplot
section.
Call make_weather_plots()
to generate the four weather plots.
Chapter 9: Physics
RBCOceananigans: All the code from the “Fluid Dynamics with Oceananigans” section, plus a program to animate the solution.
PlottingUnitsErrors: Publication-quality plots of Unitful arrays. For some mysterious reason the first call to plot_with_units() in this module produces an empty plot sometimes, but subsequent calls work correctly.
ParametricPendulum: Define your desired time function of the string length, and see the resulting pendulum motion. Also includes the Luxor program that draws the diagram of the system.
Chapter 10: Statistics
MontyHall: The “Monty Hall Problem” program, upgraded to use a random number generator and a slightly different style of plot. Contains one function that simulates the problem and draws the plot directly.
PandemicSimulation: From the “Modeling a Pandemic” section. Running the pandemic()
function runs the simulation and pops up a live animation of its progress.
Chapter 11: Biology
PreyEvolution: The evolution simulation and visualization functions.
Chapter 12: Mathematics
JmSeries: Calculates the m
th Bessel function using the series in Listing 12.2.
Chapter 13: Scientific Machine Learning
SciMLexamples
ParameterInference: code for Figure 13-12, testing parameter inference for the parametric pendulum.
Chapter 14: Signal and Image Processing
cellCount: Counting cells using the Hough transform.
imageAverager: Smooth pictures with the method that creates Figure 24.
Chapter 15: Parallel Processing
taskTiming: The code that creates Figure 1 in this chapter.