B. Nikolic Software and Computing Blog
Software Engineering, Computing and Programming notes and articles from 20+ years at the cutting edge: C++, Python, PyTorch, Quantitative Finance, Cloud Scale-Out
- Posts
- 202 from 7 Mar 2008 to 2 Apr 2026
- Posting
- monthly (21 in the last year)
- Kind
- personal blog
- Feed
- https://bnikolic.co.uk/blog/blog.atom
2026 12
- Simulating SLURM scheduling on large clusters
- Simulating SLURM scheduling on large clusters
- A slice of BayeSys3 in SLURM cluster scheduler
- A slice of BayeSys3 in SLURM cluster scheduler
- Is Git a database?
- Is Git a database?
- Fully self contained builds of complex C/C++/Python packages with Spack
- Fully self contained builds of complex C/C++/Python packages with Spack
- execution::par and parallel STL in C++
- execution::par and parallel STL in C++
- Easy SLURM job sequencing
- Easy SLURM job sequencing
2025 16
- Levenshtein distance calculation in Excel witl xlOil and python Levenshtein module
- Levenshtein distance calculation in Excel witl xlOil and python Levenshtein module
- Postgresql is enough (for a room reservation system)
- Postgresql is enough (for a room reservation system)
- Python forward compatibility & numpy
- Python forward compatibility & numpy
- Notes on Marimo
- Notes on Marimo
- Air gapped / Data Diode backing up arrangement
- High performance I/O and OS Error 61 / No Data
- Limiting resources used by applications on Linux Desktop
- Connecting VSCode to a Slurm dynamically-allocated worker node
- Isolating Python and Jupyter using firejail
- Python from Emacs redux
- Use capsh to find capabilities need for linux perf
- IP Address that SSH has connected to
2024 13
- Mounting FUSE filesystems as unprivileged user
- Avoiding Hyperhtreading using numactl
- Installing singularity container system without root permission
- Continuously clearing the cache of a long-running non-configurable process
- The Secret Life of SymPy
- Advanced CPU functions support in Python numerical libraries
- Links for performance analysis on Linux
- Is Git a system designed for single source of truth?
- Seasonal adjustment in Azure Synapse using sktime
- Building the Python interpreter and Python packages from known sources
- Using Nix as un-privileged user
- Isolated Python on Windows using Sandboxes
- Notes on somewhat reducing trust of third-party Python packages
2023 10
- How to use fully isolated Large Language Models in Windows
- BPF monitoring with user stack attribution and the frame pointer
- SWIG bindings for llama.cpp into Java/JVM, C#/CLR, etc
- MicroOS Desktop on Lenovo X1 Gen 10
- Java/IJava and Jupyter Notebooks on binder.org
- The Hat monotile in FreeCad
- Building Google's Jax library from source using Nix
- Using NIX to build Python docker deployment images
- Build Python docker deployment images with pyenv and poetry
- Is Jax multi-threaded when run CPUs?
2022 19
- Dealing with repositories with paths containing Aux on Windows
- How much memory does my program need?
- What is (did?) big data software architecture aim to solve?
- Should you do computationally intensive data analysis in the cloud?
- Thoughts on Nextflow
- Installing Python on Windows using plain Python installers
- If you need a calculator with units support: Maxima
- Bayesian robust linear regression in Excel
- GitHub CLI
- How this site is (re)made (housekeeping)
- Testing .Net executables against specific version of the framework
- Dynamic extent in Java and Resource Acquisition Is Initialisation (RAII)
- Securing Python when using packages
- Cancelling async tasks in Python
- Installing Python on Windows using the embedded package (no privileges needed)
- Python Global Interpreter Lock (GIL) and races
- An update on visualising the computational graph of a jax program
- Decoding the 'No module named pip._vendor.six' error message
- How to check on exceptions in a Python async task
2021 11
- How do I know if I'm running log4j ?
- What do I need to know about Python's GIL?
- Containers and Packages
- Makefile technique to rebuild on changes in build options
- Principal Component Analysis in Excel
- An instant Jekyll publishing environment in Azure
- RAII and Java
- Environment Variables
- What is PyTorch leaf node?
- Using PyTorch to accelerate scipy.optimize optimisation
- Linux: is file executable or not?
2020 13
- Dynamically limiting network bandwidth used by applications on Linux
- Jax: Visualising the computational graph of a jax program
- Jax: Automatic Differentiation of the Black-Scholes model
- Copy a file to multiple hosts simultaneously
- Python Panel completes the future of REPL in Python?
- Conway's Game of Life implemented in JAX
- Connecting Emacs ELPY console to a Jupyter kernel
- SSH access to a sandboxed container -- e.g. Google Colab
- Entering credentials in an Emacs sub-process shell
- Using BERT to mine large datasets for purchasing sentiment
- NumPy Ravel
- Efficient Hessian calculation with JAX and automatic forward- and reverse-mode differentiation
- Redoable graphics: xpyplot
2019 13
- Marchenko-Pastur distribution
- Using VSCode for remote development with YubiKey SSH authentication
- Python forkserver and set_forkserver_preload()
- Python 'manylinux' wheels
- PyTorch Neural Networks on CPU: 'roofline' for branching-limited models
- What Limits Performance of (PyTorch) Neural Networks when running on a CPU?
- Counting FLOPS in PyTorch using CPU PMU counters
- Counting FLOPS and other CPU counters in Python
- PyTorch Architecture
- Transitioning to publishing with Jekyll
- Who's eaten up all the (inotify) watchers?
- Unbound Variable errors in Bash scripts
- Fast Non-Linear Optimisation with PyTorch
2018 4
2013 4
2012 8
- How to easily measure Floating Point Operations Per Second (FLOPS)
- Mixed static and shared linking of libraries
- Using LD_PRELOAD for testing of alternative implementations in large applications
- How to monitor the full range of CPU performance events
- The LD_DEBUG environment variable
- SWIG wrappers in Java and the C++ RAII pattern
- Using QuantLib from Clojure
- The new `--as-needed` option to the GNU linker
2011 3
2009 4
2008 2
Undated 70
- I assembled myself.
- A reworked EquityOption Example
- Managing QuantLib source using Bazaar
- Using QuantLib to generate a Brownian Bridge
- Simple input/output of Date objects
- Relinking Handles
- Constrained fitting in QuantLib
- Using QuantLib from Clojure via the SWIG/Java binding
- Parallelising QuantLib using Map-Reduce (White Paper)
- Appearance at InfiniteConf 2017: "Simulation in a Big Data World"
- Talk at InfiniteConf 2017
- Heston model calibration
- Implementation of the Heston model in QuantLib
- Non-dependent name lookup in C++
- Constrained Levenberg-Marquardt using the InMin library
- Constrained minimisation using the Levenberg-Marquardt algorithm
- C++ implementation of Khachiyan algorithm for the minimum enclosing (or covering) ellipsoid
- Making use of std::map<> ordered property: interpolation
- Lazy Code Generation (LzCG) and C++ Expression Templates
- A Simple, Minimal, Example of C++ Expression Templates
- trouble with private implementation using smart pointers
- A potential pitfall when using boost::uniform_01
- Simple input parsing using Boost
- Common compile-time errors when using boost::bind
- More on generating normally distributed random numbers using boost
- "Pointer Conflict" Errors in the Boost Serialization Library
- From BoostCon 2011 -- Bulk Synchronous Parallelism using Hybrid MPI+OpenMP
- From BoostCon 2011 -- The Geneva Optimisation library
- BoostCon 2011 Report
- About the Random Review Series
- Small numerical values in C++
- Basic generation of normally distributed random numbers
- Avoiding Artificial Class Hierarchies
- Avoiding Memory Allocation
- std::vector<> instead of new[]
- Generating random numbers in parallel for large-scale MC
- Derived classes still have a default assignment operator
- Template constructor in a non-template class
- C++ & SWIG: using data pointed to by a pointer
- Feature inheritance in SWIG -- doesn't apply to classes...
- SWIG %insert directive
- Using SWIG-ed libraries from Clojure
- Finding Out and Visualising Hardware Locality
- Measuring Branch Prediction Accuracy Using Linux Perf Tools
- The OpenGamma Project
- Running Python from the command-line
- To Switch or not to Switch
- Python/Excel Integration
- cx_Freeze
- Python numba note
- Internship opportunities 2012
- Internship opportunities 2011
- Numerical and Quantitative methods in C++ project
- Version 0.1 of InMin library
- Version 0.2 of InMin library
- Runtime compilation in InMin of functions to be minimised
- Byte Order Marks and Emacs
- React, Bootstrap and and simple check-boxes
- Atom feeds using Kid
- restructured text files to an Atom feed
- enabled
- Another Employment Opportunity
- Employment opportunity
- Coccinelle
- Cross compiling Boost V1.50 from Ubuntu 12.04 to Windows
- Linux Perf tools
- Connecting Linux laptop to wireless Vodafone network via an E61
- Debugging a collision with a CPP macro name
- Python Global Interpreter Lock (GIL) + numerical data processing
- Scalability Architecture of Apache Spark