The Curious Engineer

All blogs / C++

B. Nikolic Software and Computing Blog

bnikolic.co.uk/blog

Software Engineering, Computing and Programming notes and articles from 20+ years at the cutting edge: C++, Python, PyTorch, Quantitative Finance, Cloud Scale-Out

C++Linux / UnixPythonDevOps / SRE / infrastructure

’10’15’20’25
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

  1. Simulating SLURM scheduling on large clusters
  2. Simulating SLURM scheduling on large clusters
  3. A slice of BayeSys3 in SLURM cluster scheduler
  4. A slice of BayeSys3 in SLURM cluster scheduler
  5. Is Git a database?
  6. Is Git a database?
  7. Fully self contained builds of complex C/C++/Python packages with Spack
  8. Fully self contained builds of complex C/C++/Python packages with Spack
  9. execution::par and parallel STL in C++
  10. execution::par and parallel STL in C++
  11. Easy SLURM job sequencing
  12. Easy SLURM job sequencing

2025 16

  1. Levenshtein distance calculation in Excel witl xlOil and python Levenshtein module
  2. Levenshtein distance calculation in Excel witl xlOil and python Levenshtein module
  3. Postgresql is enough (for a room reservation system)
  4. Postgresql is enough (for a room reservation system)
  5. Python forward compatibility & numpy
  6. Python forward compatibility & numpy
  7. Notes on Marimo
  8. Notes on Marimo
  9. Air gapped / Data Diode backing up arrangement
  10. High performance I/O and OS Error 61 / No Data
  11. Limiting resources used by applications on Linux Desktop
  12. Connecting VSCode to a Slurm dynamically-allocated worker node
  13. Isolating Python and Jupyter using firejail
  14. Python from Emacs redux
  15. Use capsh to find capabilities need for linux perf
  16. IP Address that SSH has connected to

2024 13

  1. Mounting FUSE filesystems as unprivileged user
  2. Avoiding Hyperhtreading using numactl
  3. Installing singularity container system without root permission
  4. Continuously clearing the cache of a long-running non-configurable process
  5. The Secret Life of SymPy
  6. Advanced CPU functions support in Python numerical libraries
  7. Links for performance analysis on Linux
  8. Is Git a system designed for single source of truth?
  9. Seasonal adjustment in Azure Synapse using sktime
  10. Building the Python interpreter and Python packages from known sources
  11. Using Nix as un-privileged user
  12. Isolated Python on Windows using Sandboxes
  13. Notes on somewhat reducing trust of third-party Python packages

2023 10

  1. How to use fully isolated Large Language Models in Windows
  2. BPF monitoring with user stack attribution and the frame pointer
  3. SWIG bindings for llama.cpp into Java/JVM, C#/CLR, etc
  4. MicroOS Desktop on Lenovo X1 Gen 10
  5. Java/IJava and Jupyter Notebooks on binder.org
  6. The Hat monotile in FreeCad
  7. Building Google's Jax library from source using Nix
  8. Using NIX to build Python docker deployment images
  9. Build Python docker deployment images with pyenv and poetry
  10. Is Jax multi-threaded when run CPUs?

2022 19

  1. Dealing with repositories with paths containing Aux on Windows
  2. How much memory does my program need?
  3. What is (did?) big data software architecture aim to solve?
  4. Should you do computationally intensive data analysis in the cloud?
  5. Thoughts on Nextflow
  6. Installing Python on Windows using plain Python installers
  7. If you need a calculator with units support: Maxima
  8. Bayesian robust linear regression in Excel
  9. GitHub CLI
  10. How this site is (re)made (housekeeping)
  11. Testing .Net executables against specific version of the framework
  12. Dynamic extent in Java and Resource Acquisition Is Initialisation (RAII)
  13. Securing Python when using packages
  14. Cancelling async tasks in Python
  15. Installing Python on Windows using the embedded package (no privileges needed)
  16. Python Global Interpreter Lock (GIL) and races
  17. An update on visualising the computational graph of a jax program
  18. Decoding the 'No module named pip._vendor.six' error message
  19. How to check on exceptions in a Python async task

2021 11

  1. How do I know if I'm running log4j ?
  2. What do I need to know about Python's GIL?
  3. Containers and Packages
  4. Makefile technique to rebuild on changes in build options
  5. Principal Component Analysis in Excel
  6. An instant Jekyll publishing environment in Azure
  7. RAII and Java
  8. Environment Variables
  9. What is PyTorch leaf node?
  10. Using PyTorch to accelerate scipy.optimize optimisation
  11. Linux: is file executable or not?

2020 13

  1. Dynamically limiting network bandwidth used by applications on Linux
  2. Jax: Visualising the computational graph of a jax program
  3. Jax: Automatic Differentiation of the Black-Scholes model
  4. Copy a file to multiple hosts simultaneously
  5. Python Panel completes the future of REPL in Python?
  6. Conway's Game of Life implemented in JAX
  7. Connecting Emacs ELPY console to a Jupyter kernel
  8. SSH access to a sandboxed container -- e.g. Google Colab
  9. Entering credentials in an Emacs sub-process shell
  10. Using BERT to mine large datasets for purchasing sentiment
  11. NumPy Ravel
  12. Efficient Hessian calculation with JAX and automatic forward- and reverse-mode differentiation
  13. Redoable graphics: xpyplot

2019 13

  1. Marchenko-Pastur distribution
  2. Using VSCode for remote development with YubiKey SSH authentication
  3. Python forkserver and set_forkserver_preload()
  4. Python 'manylinux' wheels
  5. PyTorch Neural Networks on CPU: 'roofline' for branching-limited models
  6. What Limits Performance of (PyTorch) Neural Networks when running on a CPU?
  7. Counting FLOPS in PyTorch using CPU PMU counters
  8. Counting FLOPS and other CPU counters in Python
  9. PyTorch Architecture
  10. Transitioning to publishing with Jekyll
  11. Who's eaten up all the (inotify) watchers?
  12. Unbound Variable errors in Bash scripts
  13. Fast Non-Linear Optimisation with PyTorch

2018 4

  1. PyTorch .detach() method
  2. Is Python popular *because* it is slow?
  3. Using PyTorch from Microsoft Excel
  4. Quick-to-scale architecture for task-based processing

2013 4

  1. Links 2013-02-27
  2. Links 2013-01-28
  3. Links 2013-01-13
  4. Links 2013-01-04

2012 8

  1. How to easily measure Floating Point Operations Per Second (FLOPS)
  2. Mixed static and shared linking of libraries
  3. Using LD_PRELOAD for testing of alternative implementations in large applications
  4. How to monitor the full range of CPU performance events
  5. The LD_DEBUG environment variable
  6. SWIG wrappers in Java and the C++ RAII pattern
  7. Using QuantLib from Clojure
  8. The new `--as-needed` option to the GNU linker

2011 3

  1. Fitting a Curve in QuantLib
  2. Bumping Interest Rate Curves in QuantLib
  3. Pricing options using the Heston model

2009 4

  1. Example of Pricing an American Option on a Dividend Paying Stock in QuantLib
  2. Setting environment variables from within Emacs
  3. A simple FX-Option Example in QuantLib
  4. Running Python Programs from Emacs

2008 2

  1. Basic random number generation
  2. Running Python

Undated 70

  1. I assembled myself.
  2. A reworked EquityOption Example
  3. Managing QuantLib source using Bazaar
  4. Using QuantLib to generate a Brownian Bridge
  5. Simple input/output of Date objects
  6. Relinking Handles
  7. Constrained fitting in QuantLib
  8. Using QuantLib from Clojure via the SWIG/Java binding
  9. Parallelising QuantLib using Map-Reduce (White Paper)
  10. Appearance at InfiniteConf 2017: "Simulation in a Big Data World"
  11. Talk at InfiniteConf 2017
  12. Heston model calibration
  13. Implementation of the Heston model in QuantLib
  14. Non-dependent name lookup in C++
  15. Constrained Levenberg-Marquardt using the InMin library
  16. Constrained minimisation using the Levenberg-Marquardt algorithm
  17. C++ implementation of Khachiyan algorithm for the minimum enclosing (or covering) ellipsoid
  18. Making use of std::map<> ordered property: interpolation
  19. Lazy Code Generation (LzCG) and C++ Expression Templates
  20. A Simple, Minimal, Example of C++ Expression Templates
  21. trouble with private implementation using smart pointers
  22. A potential pitfall when using boost::uniform_01
  23. Simple input parsing using Boost
  24. Common compile-time errors when using boost::bind
  25. More on generating normally distributed random numbers using boost
  26. "Pointer Conflict" Errors in the Boost Serialization Library
  27. From BoostCon 2011 -- Bulk Synchronous Parallelism using Hybrid MPI+OpenMP
  28. From BoostCon 2011 -- The Geneva Optimisation library
  29. BoostCon 2011 Report
  30. About the Random Review Series
  31. Small numerical values in C++
  32. Basic generation of normally distributed random numbers
  33. Avoiding Artificial Class Hierarchies
  34. Avoiding Memory Allocation
  35. std::vector<> instead of new[]
  36. Generating random numbers in parallel for large-scale MC
  37. Derived classes still have a default assignment operator
  38. Template constructor in a non-template class
  39. C++ & SWIG: using data pointed to by a pointer
  40. Feature inheritance in SWIG -- doesn't apply to classes...
  41. SWIG %insert directive
  42. Using SWIG-ed libraries from Clojure
  43. Finding Out and Visualising Hardware Locality
  44. Measuring Branch Prediction Accuracy Using Linux Perf Tools
  45. The OpenGamma Project
  46. Running Python from the command-line
  47. To Switch or not to Switch
  48. Python/Excel Integration
  49. cx_Freeze
  50. Python numba note
  51. Internship opportunities 2012
  52. Internship opportunities 2011
  53. Numerical and Quantitative methods in C++ project
  54. Version 0.1 of InMin library
  55. Version 0.2 of InMin library
  56. Runtime compilation in InMin of functions to be minimised
  57. Byte Order Marks and Emacs
  58. React, Bootstrap and and simple check-boxes
  59. Atom feeds using Kid
  60. restructured text files to an Atom feed
  61. enabled
  62. Another Employment Opportunity
  63. Employment opportunity
  64. Coccinelle
  65. Cross compiling Boost V1.50 from Ubuntu 12.04 to Windows
  66. Linux Perf tools
  67. Connecting Linux laptop to wireless Vodafone network via an E61
  68. Debugging a collision with a CPP macro name
  69. Python Global Interpreter Lock (GIL) + numerical data processing
  70. Scalability Architecture of Apache Spark