16/7/2023 8:18 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.”
7/6/2023 8:28 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.
7/6/2023 7:59 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.”
16/5/2023 8:00 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.
10/5/2023 7:00 Julia 1.9 Released
: 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.
06/04/2023 21:21 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.”
2/4/2023 10:30 Solving one based indexing
: Finally, a solution to the non-problem of 1-based indexing in Julia that should satisfy everybody.
: A list from Julia headquarters of works available now or on the way.
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).
: “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.”
Particle Simulations with Julia
: Excellent tutorial and demonstration available as a web page and as a Pluto notebook. Contains fascinating animations of error propagation in a running simulation.
Convolutions in image processing
: Not much about Julia, but a superb demonstration of how simple convolutions can create blurring, sharpening, and edge detection. Ends by showing how to speed up the calculation using FFTs.
Julia Data Science
: A free and open-source book in several formats, including a paperback on amazon
. Confined mainly to a brief language introduction, dataframes, and plotting with Mackie.
Differentiation for Hackers
: “The goal of this handbook is to demystify algorithmic differentiation, the tool that underlies modern machine learning.”
Julia Meta Types
: “One of my favorite tools and a double edged blade in the Julia programming language are Meta Types. Loosely related to Metaprogramming, meta types, derived from the Greek word μετα, ‘transcend’ beyond a simple data structure. Rather than simply describe a physical data structure in memory, a meta type includes information on the type itself.”
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.
Type-Dispatch Design: Post Object-Oriented Programming for Julia
: “I am going to try to explain in detail the type-dispatch design which is used in Julian software architectures. It’s modeled after the design of many different packages and Julia Base […] Julia is built around types. Software architectures in Julia are built around good use of the type system. This makes it easy to build generic code which works over a large range of types and gets good performance. The result is high-performance code that has many features. In fact, with generic typing, your code may have more features than you know of! The purpose of this tutorial is to introduce the multiple dispatch designs that allow this to happen.”
: High energy physics packages. Includes compatibility layers and partial replacements for ROOT.
: A Julia package for agent-based modeling. Very easy to set up simulations on a variety of spaces, including Open Street Map.
: Julia package for making corner plots, the statistical visualization that lets you compare a collection of distributions all at once.
: Creates books with embedded output from Julia code, using Pandoc.
WaterLily.jl: Fast and simple fluid simulator in Julia
: “WaterLily.jl solves the unsteady incompressible 2D or 3D Navier-Stokes equations on a Cartesian grid. The pressure Poisson equation is solved with a geometric multigrid method. Solid boundaries are modelled using the Boundary Data Immersion Method.”
Pluto’s built-in package management
: “Starting with version 0.15, Pluto has a built-in package manager, which means:
Packages are automatically installed when you use import or using.
Your package environment is stored inside the notebook file. When someone else opens your notebook with Pluto, the exact same package environment will be used, and packages will work on their computer.
These two features are designed to make it easy to write and share reproducible notebooks.”
: Julia library for compositional construction of SQL queries’
: APL in Julia, with all the beautiful characters, and with Julia’s speed.
: “Bayesian inference with probabilistic programming.”
: “Welcome to Yao, a Flexible, Extensible, Efficient Framework for Quantum Algorithm Design. Yao (幺) is the Chinese character for normalized but not orthogonal.”
: 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.
: A set of macros for concurrency. Last updated around 2021; some of its function is provided by the new interactive task feature in Julia 1.9.
: “Better integration of Julia REPL with Emacs vterm terminal.”
: Exploiting the superb TikZ
system from Julia to create high-quality graph diagrams (“graph” in the node-edge sense) conveniently.
: “JuliaSymbolics is the Julia organization dedicated to building a fully-featured and high performance Computer Algebra System (CAS) for the Julia programming language.”
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.”
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.
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”.
: “The Federal Reserve Bank of New York publishes its trademark Dynamic Stochastic General Equilibrium models in Julia.”
Concurrency in Julia
: An overview of the easiest-to-approach facilities for parallel and concurrent computation in Julia, with a demonstration of the effects of a new feature: thread migration. Discussed
on Hacker News.
Julia v1.7.2 Released
: “As a patch release, 1.7.2 contains no new features or breaking changes, only bug fixes, documentation improvements, and performance improvements. […] We recommend that anyone currently using 1.7.0 or 1.7.1 upgrade to 1.7.2. Note that 1.7 on Travis, AppVeyor, Cirrus, and GitHub Actions now refers to 1.7.2.”
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.
C. Brenhin Keller
: An assistant Professor of Earth Sciences at Dartmouth using Julia in research and teaching. Many links to Julia Earth science resources.
: “A modeling framework for automatically parallelized scientific machine learning (SciML) in Julia. A computer algebra system for integrated symbolics for physics-informed machine learning and automated transformations of differential equations”.
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.
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.
Julia 1.7 Highlights
: “After 4 betas and 3 release candidates, Julia version 1.7 has finally been released.”
Auto-Optimization and Parallelism in DifferentialEquations.jl
: A video by Chris Rackauckas describing two levels of automation for the scientist who needs to solve some differential equations efficiently: first, detect properties of the equation system to choose the best solver; but also automate the choice of what algorithm use to do that. The pieces are under the SciML ecosystem.
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?”
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.
Composability in Julia: Implementing Deep Equilibrium Models via Neural ODEs
: “The SciML Common Interface
defines a complete set of equation solving techniques, from differential equations and optimization to nonlinear solves and integration (quadrature), in a way that is made to naturally mix with machine learning. In this sense, there is no difference between the optimized libraries being used for physical modeling and the techniques used in machine learning: in the composable ecosystem of Julia, these are one and the same.[…] With a composable package ecosystem, the only thing holding you back is the ability to figure out new ways to compose the parts.”
Analyzing sources of compiler latency in Julia: method invalidations
: “The Julia programming language
has wonderful flexibility with types, and this allows you to combine packages in unanticipated ways to solve new kinds of problems. Crucially, it achieves this flexibility without sacrificing runtime performance. It does this by running versions of code or algorithms that have been”specialized” for the specific types you are using. Creating these specializations is compilation, and when done on the fly (as is common in Julia) this is called “just in time” (JIT) compilation. Unfortunately, JIT-compilation takes time, and this contributes to latency
when you first run Julia code. This problem is often summarized as “time-to-first-plot,” though there is nothing specific about plotting other than the fact that plotting libraries tend to involve large code bases, and these must be JIT-compiled.”
Bash shell completions for Julia
: Bash shell completions contextually finish what you’re typing when you hit the tab key. This project tells the shell about Julia commands, to save you keystrokes.
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.”
: Computational geometry and meshing algorithms in Julia
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 Computing Raises $24M Series A
: “Julia Computing will use the funding to further develop and advance its secure, high-performance JuliaHub cloud platform and to grow the Julia ecosystem.”