Lee Phillips’ Website


Subscribe:   RSS icon   twitter icon

Julia

This is a list of resources and articles about the Julia language.

Jump to: DocumentationLibrariesOther

News

8/11/2024 17:26 Tensorial: “Tensorial.jl provides statically sized Tensor type that is compatible with AbstractArray, similar to SArray from StaticArrays.jl. In addition to supporting basic AbstractArray operations, the package offers a tensorial interface and several advanced features”.
03/11/2024 09:34 2D Vortex Dynamics: Evolution of a vortex system in two dimensions. An interactive webpage using Julia.
10/10/2024 11:38 Julia 1.11 Highlights: The new release contains some significant developments and enhancements.
22/9/2024 17:11 Practical Julia Errata Page: I’ve added a list of errata and other notes to the book’s website supplement.
10/9/2024 15:10 DBCollections.jl: Lets you “use the exact same code to manipulate regular Julia collections and SQL databases.” This will be immediately useful: data persistence, using arrays not limited by RAM, and more.
30/8/2024 10:35 MicroGrad.jl: Part 1 ChainRules: An extensive tutorial on automatic differentiation in Julia in the context of machine learning.
29/8/2024 22:57 New symbolic solver for Symbolics.jl: This notice in the Julia Discourse discussion group announces the merge of a new solver that significantly increases Symbolics’ capabilities.
29/8/2024 22:36 A new non-parametric method to infer galaxy cluster masses from weak lensing: “a new, non-parametric method to infer deprojected 3D mass profiles M(r) of galaxy clusters from weak gravitational lensing observations…We provide an efficient implementation in Julia code that runs in a few milliseconds per galaxy cluster.”
12/8/2024 12:59 Fermions.jl: New Julia physics library: “Fermions.jl is a toolkit for designing and analysing second-quantised many-particle Hamiltonians of electrons, potentially interacting with each other.”
29/7/2024 11:00 GeoStats.jl: “An extensible framework for geospatial data science and geostatistical modeling fully written in Julia.” Also see the book.
29/7/2024 10:53 Geospatial Data Science with Julia: “best practices for writing clean, readable and performant code in geoscientific applications involving sophisticated representations of the (sub)surface of the Earth such as unstructured meshes made of 2D and 3D geometries.” Open source and CC licensed.
26/7/2024 17:28 waterlily.jl: “A differentiable and backend-agnostic Julia solver to simulate incompressible viscous flow and dynamic bodies”.
23/7/2024 23:23 Diagramming and Data Visualization with Julia: I didn’t know about Vizagrams.jl, an interesting Julia library for plotting and data visualization. It implements a kind of grammar of graphics, and looks powerful.
14/7/2024 15:47 The main thing in Julia 1.11: Bogumił Kamiński describes a new feature: the @main macro, which defines an entry point.
11/7/2024 19:34 Rankings of Julia books on Amazon: Graphs of Amazon’s sales ranks of their books about the Julia programming language.
8/7/2024 10:46 Julia use in trading leads to massive speedup: Satvik writes on the Julia Discourse: “We use Julia for almost all numeric/data-oriented stuff now, and have moved a lot of the Python code to Julia…At this point 99% of new code I write is Julia, and for the company as a whole it’s about 50-50. The performance differential has become even more ridiculous, an experiment that used to cost ~$125 to run now costs ~.33 cents, and most of those improvements wouldn’t really have been possible in Python.”
1/7/2024 0:19 IdSet in Julia 1.11: A new public type in Julia 1.11 and what it’s good for. As a bonus, a useful summary of Julia’s various equality tests.
18/6/2024 14:12 Julia use in the development of audio codecs for WhatsApp, Instagram and Messenger.: Video in which engineers from Meta describe how they use Julia to develop advanced audio codecs for their communications applications.
3/4/2024 22:49 Mastering Efficient Array Operations with StaticArrays.jl in Julia: Good tutorial with benchmarks.

Documentation and tutorials

Using Julia on the HPC: A survey of simple examples of using Julia in HPC contexts.
Filtering grouped data frames in DataFrames.jl: A helpful tutorial by Bogumił Kamiński.
Ref ref: “Today I want to discuss the Ref type defined in Base Julia. The reason is that it is often used in practice, but it is not immediately obvious what the design behind Ref is.”
Differentiation for Hackers: “The goal of this handbook is to demystify algorithmic differentiation, the tool that underlies modern machine learning.”
Element type surprises when processing collections in Julia
Learning to create a vector in Julia: Two ways to turn a multidimensional array into a Vector in Julia: one that makes a copy and one that uses an alias.
Broadcast fusion in Julia: all you need to know to avoid pitfalls
Guide for writing shell scripts in Julia: From 2019, but may still be useful.
To copy or not to copy, that is the question
GPU Programming: When, Why and How?: This course on using GPUs in general computing contains a section (“High-level language support”) with an overview of Julia and Python.
The 10th annual JuliaCon, 2023: Youtube Playlist
Fundamentals of Numerical Computation: “This is a revision of the textbook Fundamentals of Numerical Computation by Tobin A. Driscoll and Richard J. Braun. The book was originally written for MATLAB, but this resource has been adapted to suit Julia.” Text available free online.
PlutoUI Demonstration: A live demonstration of PlutoUI controls, served with the PlutoSliderServer.
Successful Static Compilation of Julia Code for use in Production: “a successful experiment to statically compile a piece of Julia code into a small .so library on Linux, which is then loaded from Python and used in training of a deep learning model.”
Summary of Julia Plotting Packages
Drawing beautiful maps using Julia
Bayesian Estimation of Differential Equations: Tutorials showing how to use Turing.jl to estimate parameters of ODEs from data.
Make beautiful web apps with Dash.jl
Comparison of plotting packages: Newcomers (and others!) using Julia can be bewildered by the profusion of options for making plots and visualizations. Chris Rackauckas provides a useful summary of the pros and cons of all the major packages.
DataFrame vs NamedTuple: a comparison: Informative comparison of the use of dataframes vs. named tuples to represent tables in Julia, with interesting examples of fast and slow code.
Metadata in DataFrames.jl: why and how?: Valuable and detailed introduction to this useful feature of DataFrames.jl, by one of its developers and the author of Julia for Data Analysis.
Practical Julia Amazon page
Signal Processing with Julia Language: A tutorial series.
Dataframe cheatsheet
Julia: The Greeks and Math operators at the command line via LaTeX: If you haven’t tried Julia, this may whet your appetite.
PrecompileTools.jl: Documentation and tutorials for PrecompileTools.jl, which “is designed to help reduce delay on first usage of Julia code. It can force precompilation of specific workloads…You can use PrecompileTools as a package developer, to reduce the latency experienced by users of your package for ‘typical’ workloads; you can also use PrecompileTools as a user, creating custom ‘Startup’ package(s) that precompile workloads important for your work.”
Python Criticism from a Julia Perspective: Contains, among other interesting nuggets, a description of a Julia REPL facility for discovering a list of methods that can act on a given combination of types (I had no idea).
Practical Julia Barnes & Noble page
Julia macros for beginners: A clear introduction.
What does it mean that a data frame is a collection of rows?: The main developer of Dataframes.jl explains its interface in this illuminating article.
Functional One-Liners in Julia: Introduction to currying used in conjunction with broadcasting, with examples.
Practical guide: how to contribute to open source Julia projects: This is helpful for those interested in making their first contribution to the ecosystem.
Triangle frenzy: A case study using CUDA for some graphics calculations.
PSA: Thread-local state is no longer recommended: “Any code that relies on a specific threadid staying constant, or on a constant number of threads during execution, is bound to be incorrect.”
Tips and tricks to register your first Julia package
My understanding of object property access in Julia: Clarifies the use of fields and properties of composite objects.
Setting up your Julia session: A tutorial about the Julia startup file.
Pkg.jl and Julia Environments for Beginners: Exceptionally clear tutorial about Julia’s package manager.
Storing vectors of vectors in DataFrames.jl: Extremely useful tutorial on preventing vectors from being expanded into multiple rows when applying transformations to dataframes.
My approach to named tuples in Julia: “I find it more natural to think of a NamedTuple as an anonymous struct, that optionally can be integer-indexed to get access to its components.”
Parallel Computing and Scientific Machine Learning (SciML): Methods and Applications: “This book is a compilation of lecture notes from the MIT Course 18.337J/6.338J: Parallel Computing and Scientific Machine Learning…a live document, updating to continuously add the latest details on methods from the field of scientific machine learning and the latest techniques for high-performance computing.”

Libraries

Here’s why quantum computing could be the big break for the Julia Language: Introducing Yao.jl, a Julia library for quantum computing.
TikzGraphs: Exploiting the superb TikZ system from Julia to create high-quality graph diagrams (“graph” in the node-edge sense) conveniently.
PackageCompiler.jl: Compile your Julia Package
SpeedyWeather.jl: The little sister of a big weather forecast model
Trixi.jl: “Trixi.jl is a numerical simulation framework for conservation laws written in Julia. A key objective for the framework is to be useful to both scientists and students. Therefore, next to having an extensible design with a fast implementation, Trixi.jl is focused on being easy to use for new or inexperienced users, including the installation and postprocessing procedures.”
Strided.jl: Make broadcast operations faster.
SciML: Differentiable Modeling and Simulation Combined with Machine Learning: A new hub for Julia’s SciML documentation.
DynamicQuantities.jl: Type stable units in Julia: Along the lines of Unitful, but storing dimensions as values rather than as parametric types. This leads to greater efficiency in many circumstances.
Pluto: The computational notebook for Julia.
PlanetOrbits.jl: Tools for solving and displaying Keplerian orbits for exoplanets.: “The primary use case is mapping Keplerian orbital elements into Cartesian coordinates at different times. A Plots.jl recipe is included for easily plotting orbits.”
Swalbe.jl: A lattice Boltzmann solver for thin film hydrodynamics: A Julia program.
ImplicitPlots.jl: Julia package for the plotting of plane curves and surfaces: “Plot plane curves defined by an implicit function f(x,y)=0.”
Yao: “Welcome to Yao, a Flexible, Extensible, Efficient Framework for Quantum Algorithm Design. Yao (幺) is the Chinese character for normalized but not orthogonal.”
Pandoc.jl: Pandoc Interface and Types in Julia: Run Pandoc and write Pandoc filters in Julia. Uses the json serialization, so won’t be as fast as Lua filters.
Merly.jl: Micro framework for web programming in Julia: Seems similar to Oxygen, but hasn’t been updated since about 2020.
JuliaAstroSim/AstroNbodySim.jl: “Unitful and differentiable gravitational N-body simulation code in Julia”.
Handcalcs.jl: “This package supplies macros to generate LaTeX formatted strings from math[e]matical formulas.” For use in Pluto.
Julia’s HTTP library
6 Julia Frameworks to Create Desktop GUI’s and Web Apps
PureFun.jl: Immutable containers for Julia.
PairPlots.jl: Julia package for making corner plots, the statistical visualization that lets you compare a collection of distributions all at once.
KittyTerminalImages: If you use the superb Kitty terminal emulator, this package is for you. It lets Julia display images directly in the terminal, using the Kitty protocol (not sixel, etc.).
Introducing Braket.jl - Quantum Computing with Julia: “Braket.jl is a new, experimental package that lets you build quantum circuits and programs in Julia and run them on Amazon Braket.”
Julia library for stylized terminal output: Create beautiful output in the terminal.
Bonito: “Bonito.jl is a pretty simple package allowing you to render HTML and serve it from within Julia and build up a communication bridge with the Browser.”
PlutoSliderServer.jl: Web server to run just the @bind parts of a Pluto.jl notebook.
JuliaHEP: High energy physics packages. Includes compatibility layers and partial replacements for ROOT.
Stipple: A reactive user interface library for use with Genie. Standard use is over a websocket, somewhat similarly to Phoenix Liveview. Seems quite useful for building interactive web applications with Julia, but Unfortunately undocumented, like most Julia packages.
Tidier.jl: “Tidier.jl is a data analysis package inspired by R’s tidyverse and crafted specifically for Julia.”
Oxygen.jl: A breath of fresh air for programming web apps in Julia: A micro-framework that provides routing and request/response handling.
My Julia Book is in Libraries: giving me a warm feeling.
SuiteSparseGraphBLAS.jl: An Introduction: “This blog post serves a couple purposes. The first is to introduce Julia users to GraphBLAS, and the features and performance of the SuiteSparseGraphBLAS.jl package. The second is an update on new features in versions 0.6 and 0.7 as well as a roadmap for the near future.”
Gnuplot.jl: Julia interface to gnuplot: This is a very well-thought-out way to use gnuplot from Julia (you need gnuplot installed), giving you the best of both worlds. For (the excellent) documentation, go to the docs/src folder and browse the .md files, starting with basic.md.
OhMyThreads: “OhMyThreads.jl is meant to be a simple, unambitious package that provides user-friendly ways of doing task-based multithreaded calculations in Julia. Most importantly, with a focus on data parallelism, it provides an API of higher-order functions (e.g. tmapreduce) as well as a macro API @tasks for … end (conceptually similar to @threads).”
Microstructure.jl: “Microstructure.jl is a Julia package for fast and probabilistic microstructure imaging… under active development…ocuses on tissue microstructure estimation.”
About.jl: Provides the about function, which prints attractively formatted information about any object.
Vizagrams.jl Documentation
SpeedyWeather: “a global spectral atmospheric model with simple physics which is developed as a research playground with an everything-flexible attitude as long as it is speedy…Why another model? You may ask. We believe that most currently available are stiff, difficult to use and extend, and therefore slow down research whereas a modern code in a modern language wouldn’t have to.”
StaticCompiler.jl: Compiles Julia code to a standalone library (experimental)
Oxygen.jl: “Oxygen is a micro-framework built on top of the HTTP.jl library. Breathe easy knowing you can quickly spin up a web server with abstractions you’re already familiar with.” Supports streams and websockets.

Other

2021_FortranCon Benchmarks: Comparison of of code and performance between Julia and Fortran on a 2D particle simulation.
Practical Julia: The publisher’s page for my Julia book.
Multiple phonon modes in Feynman path-integral variational polaron mobility
Jack Dongarra, who made supercomputers usable, awarded 2021 ACM Turing prize: The creative force behind LINPACK and BLAS says that Julia is a good candidate for the next computing paradigm.
Julia v1.8 Release Notes: Julia 1.8.0 is in beta. These release notes include many welcome enhancements. Several of the new features relate to the creation of sysimages, and appear to make it easier to produce smaller compiled code.
Automated Code Optimization with E-Graphs: “Can programmers implement their own high-level compiler optimizations for their domain-specific scientific programs, without the requirement of them being compiler experts at all? […] can symbolic mathematics do high-level compiler optimizations or vice-versa?”
What’s great about Julia?: The other side of the coin revealed by the author of “What’s bad about Julia?”.
My Julia Activities
Ptolemy’s Universe
Solving one based indexing: Finally, a solution to the non-problem of 1-based indexing in Julia that should satisfy everybody.
JuliaDiff: Mainly a big list of differentiation tools in Julia.
Julia 1.9.0 lives up to its promise
The best Julia programming books going into 2023: Description of books the author has used plus notes about others, including books arriving in the near future.
An Interview With Dr. Lee Phillips Part Four: Science Freelance Writing And Practical Julia: We talk about how to break into freelance science writing and about the Julia programming language.
Inviscid and incompressible Navier-Stokes equations in 2D implemented in Julia and compiled to WASM: This is quite wonderful and amazing: a Julia fluid solver compiled to WASM and running in the browser. Users can create flow boundaries with the mouse.
Julia in the Wild: Examples: Case studies of Julia use in science, engineering, industry, and finance.
Why Julia is the most suitable language for science: Engaging presentation by the maintainer of the Julia dynamical systems package.
Pluto 0.17.6 Announced: The latest version of Pluto, the computational notebook for Julia, has some great new features, including a dark mode and the ability to print logging messages from running code in the notebook.
Why Julia - A Manifesto.
GitHub - JuliaDynamics/NonlinearDynamicsTextbook: coming soon: A repository for the book Nonlinear Dynamics.
Automated Translation and Accelerated Solving of Differential Equations on Multiple GPU Platforms
Review of Interactive Visualization and Plotting with Julia by Zea: A knowledgeable author poorly served by a careless publisher.
What’s the deal with Julia binary sizes?: Traces the huge decreases in the sizes of compiled binaries.
Julia 1.8 released: I’ve been using the betas for a while and they’ve been stable and responsive. The highlights in 1.8 are typed non-constant globals and improvements in precompilation, both significant for all users.
LibPQ.jl: “LibPQ.jl is a Julia wrapper for the PostgreSQL libpq C library.”
Comparing the Performance of Julia on CPUs versus GPUs and Julia-MPI versus Fortran-MPI: a case study with MPAS-Ocean (Version 7.1): “In the end, we were impressed by our experience with Julia. It did fulfill the promise of fast and convenient prototyping, with the ability to eventually run at high speeds on multiple high-performance architectures – after some effort and lessons learned by the developers.”
Julia for Data Analysis
Julia: The Goldilocks language: Contains some interesting details about the origins and history of Julia, along with some odd remarks (“elements of the high-level functionality of MATLAB and R with the speed of C or Ruby”).
Julia 1.9 Highlights: Julia v.1.9 is now officially released. I’ve been enjoying the 1.9 series since the beta releases. The new version offers significant performance improvements and is even more convenient for development.
The Plucked String: Simulates the effect of pluck position on the timbre of plucked string instruments. An interactive webpage using Julia.
Bridging HPC Communities through the Julia Programming Language: “The Julia programming language has evolved into a modern alternative to fill existing gaps in scientific computing and data science applications.”
State of machine learning in Julia: …as of Jan, 2022.
Julia as a unifying end-to-end workflow language on the Frontier exascale system: “Julia emerges as a compelling high-performance and high-productivity workflow composition language, as measured on the fastest supercomputer in the world.”
From Common Lisp to Julia: A personal journey from CL to Julia from a graphics and games programmer. Interesting observations, badly in need of editing.
Why Menlo Ventures Invested in Julia Computing
Threadpools in Julia: My favorite new feature in Julia v.1.9: spawn as many tasks as you want, but keep a thread reserved for the REPL, so it continues to respond instantly.
C. Brenhin Keller: An assistant Professor of Earth Sciences at Dartmouth using Julia in research and teaching. Many links to Julia Earth science resources.
Julia for Biologists: “Major computational challenges exist in relation to the collection, curation, processing and analysis of large genomic and imaging datasets, as well as the simulation of larger and more realistic models in systems biology. Here we discuss how a relative newcomer among programming languages—Julia—is poised to meet the current and emerging demands in the computational biosciences and beyond. Speed, flexibility, a thriving package ecosystem and readability are major factors that make high-performance computing and data analysis available to an unprecedented degree. We highlight how Julia’s design is already enabling new ways of analyzing biological data and systems, and we provide a list of resources that can facilitate the transition into Julian computing.”
Julia 1.9 Brings More Speed and Convenience: My article about the goodies in Julia v.1.9 appeared today in LWN.
Plot recipes pipeline documentation
Julia: Project Workflow: Good ideas about organizing Julia projects, including how to incorporate Pluto notebooks.
Oceananigans.jl: Fast and friendly geophysical fluid dynamics on GPUs: “Oceananigans.jl is a fast and friendly software package for the numerical simulation of incompressible, stratified, rotating fluid flows on CPUs and GPUs. Oceananigans.jl is fast and flexible enough for research yet simple enough for students and first-time programmers. Oceananigans.jl is being developed as part of the Climate Modeling Alliance project for the simulation of small-scale ocean physics at high-resolution that affect the evolution of Earth’s climate.”
Generalizing Scientific Machine Learning and Differentiable Simulation Beyond Continuous models: Data-driven Physical Simulations Seminar Series talk by Chris Rackauckas.
New stack traces in Pluto: more colorful, less intimidating!: I recently wrote about the new features in Julia v1.10, including the friendlier, more useful stacktraces in the REPL. Now the amazing Fons van der Plas has released a new version of Pluto, the reactive computational notebook for Julia, with powerful and helpful stacktraces inspired by the new REPL improvements—they take error reporting to a new level.
Julia’s latency: Past, present and future
JuliaCon 2022 Agenda
A Look at Communication-Intensive Performance in Julia: “if programmers properly balance the computation to communication ratio, Julia can actually outperform C/MPI in a cluster computing environment.”
Julia v1.10: Performance, a new parser, and more: My article about the Julia v1.10 release appeared today in LWN.
Julia REPL ↓ trick: Stefan Karpinski reveals a secret superpower in plain sight: “After evaluating a command from history in the REPL, you can press ↓ and get the next command after that one, so you can replay a sequence of commands by finding the first one and doing ↓⏎ repeatedly”.
ForwardDiff.jl: Forward Mode Automatic Differentiation for Julia
Why not: from Common Lisp to Julia: Somewhat of a rebuttal to this.
Switching from Common Lisp to Julia: Although written in the pre-1.0 Julia era, the author penetrates into the core of Julia’s uniqueness: “A sufficiently rich parametric type system with multiple dispatch integrated into the language and supported by a JIT compiler is the secret weapon of Julia.” An informative discussion of scientific computing in CL and Julia.
Interactive Visualization and Plotting with Julia
Fermi.jl: A Modern Design for Quantum Chemistry: “we introduce the quantum chemistry package Fermi.jl, which contains the first implementations of post-Hartree–Fock methods written in Julia. Its design makes use of many Julia core features, including multiple dispatch, metaprogramming, and interactive usage. Fermi.jl is a modular package, where new methods and implementations can be easily added to the existing code. Furthermore, it is designed to maximize code reusability by relying on general functions with specialized methods for particular cases.”
PlutoUI Demonstration: Using the PlutoSliderServer.
Julia v1.10 Release Notes: Excellent progress, especially in package loading times. Watch for my LWN writeup, coming soon.
The Essential Tools of Scientific Machine Learning: An overview of the state of packages and libraries for scientific ML as of 2019, not confined to Julia.
Extreme Multi-Threading: C++ and Julia 1.9 Integration: With Julia v.1.9 we can call Julia libraries from multi-threaded C++ programs, apparently. This article shows you how.
Femtolisp: a lightweight, robust, scheme-like lisp implementation: The Julia parser up to Julia v1.10. “This project began with an attempt to write the fastest lisp interpreter I could in under 1000 lines of C.”
JuliaCon 2023 Live Streaming: Some of the program of this year’s Julia conference will be streamed on YouTube, free to watch.
Practical Julia: My introduction to the best language for scientific computing.
Meshes.jl: Computational geometry and meshing algorithms in Julia
Frequentist and Bayesian coin flipping in Julia
Modern Julia Workflows: “Our purpose is to gather the hidden tips and tricks of Julia development, and make them easily accessible to beginners. We do not cover syntax, and assume that the reader is familiar enough with the basics of Julia. Instead, we focus on all the tools that can make the coding experience more pleasant and efficient.”
Accuracy of tropical peat and non-peat fire forecasts enhanced by simulating hydrology: Fire forecasting using Flux.jl.
Switching from Common Lisp to Julia: “A sufficiently rich parametric type system with multiple dispatch integrated into the language and supported by a JIT compiler is the secret weapon of Julia” and the core reason for the author’s adoption of the language for scientific computing.
Potential of the Julia programming language for high energy physics computing: “In this paper the applicability of using the Julia language for HEP research is explored, covering the different aspects that are important for HEP code development: runtime performance, handling of large projects, interface with legacy code, distributed computing, training, and ease of programming. The study shows that the HEP community would benefit from a large scale adoption of this programming language.”
Macroeconomic Modeling: “The Federal Reserve Bank of New York publishes its trademark Dynamic Stochastic General Equilibrium models in Julia.”

Share with Facebook Share with Twitter Share with Reddit Share with Slashdot lee-phillips.org is a participant in the Amazon Services LLC Associates Program, an affiliate advertising program designed to provide a means for sites to earn advertising fees by advertising and linking to amazon.com.
Quotilizer ... loading ...

Tenuously related: