Hi, I’m Nick Demming, I studied both law and mathematics1, and have eventually embraced data science, efficient computations and software architecture and development.
I’ll be posting here my musings on numerical methods in Haskell as compared with mainstream imperative languages such as Java and C++, providing conditioning and stability analyses as well as benchmarks for different implementations of the respective algorithms.
Another big series of topics in the making is on machine learning, deep learning, and Bayesian statistics — applied real-world data sets. We will see how to clean up the data while maintaining its integrity, draw inferences mathematically correctly on it (analysis, synthesis, and prediction), and how to consistently interpret the results.
Another series will cover data science, Haskell, DevOps, and web development, in particular
- Haskell development workflow, with containerization, continuous integration and deployment, including Heroku, AWS, the Google cloud platform, and Azure.
- Vim and NeoVim, tmux, XMonad, and Mutt
- Functional software architecture and Domain-driven design,
- Functional reactive programming (FRP),
- Data Science with Haskell, R and Python,
- SQL-persistence with Postgres and TimeSeries DB, and SQLite,
- Interoperability between Haskell, Java (actually likely any JVM language, including the polyglot projects such as Vert.x), R, and Python,
- Web frameworks,
- Microservice orchestration,
- Concurrent, parallel and distributed computing,
- Build automation, continuous integration and deployment (CI/CD), resource provisioning, containerization, and virtualization — Docker, Vagrant, Ansible, Kubernetes (minikube), OpenShift (minishift),
- and a couple topics more
As time goes by, I’ll also post on pure mathematics, mathematical physics, mathematical finance, stochastic processes and control, nonlinear optimization, and many other mathematical things applied to real-world problems.
Moreover, I’m planning to post about my Haskell setup, workflow, and other things, as I know it can be hard to get everything working as desired. I hope this will help novice Haskell users to adapt more quickly to the new environment and get started with their own projects. This will be a humble contribution of mine to the Haskell community, to which I so much owe.
I hope to keep the style of exposition more or less informal, at least as much as possible. My utmost goal is to point out the pragmatic usefulness of many abstract tools that sometimes stay aside in the rankings of popularity due to their high mental burden, which sometimes results simply from the lack of practical examples and consistent explanations of the theoretical background that are required to actually understand what is going on. In other words, I want to help everyone interested to learn fishing rather than give the fish. And, as a result, I hope to motivate the reader for a deeper study of these abstract concepts that I deal with in my day-to-day life.
Haskell is actually notoriously hard for numerical work. This is an unfortunate sentiment. In fact, there are many ways at which Haskell as a platform excels at this.
One of the major advantages of Haskell, as you can read in my comments on Reddit, is that it enforces a minimum viable degree of correctness on the program by virtue of the type theory as implemented in the GHC (Haskell’s de facto main compiler and de facto “language standard”).
There are also downsides to using Haskell. … TODO
I’m planning to develop several series of blog posts which I later might assemble in individual books. To regular readers of my blog I will certainly offer various discount coupons. You can also subscribe to my newsletter (TODO) with exclusive content! (Looks like I’m into digital marketing EMOJI’) Since the scope of planned posts is pretty wide, I will adopt the LEAN/Agile practice of incremental extension of the posts, first building the skeleton of the series. The various sections or paragraphs marked with a “TODO” note will be completed hopefully soon. Just go with the flow of the posts. Many things are best understood when read multiple times with intermittent breaks, so as to view the problem from a different angle.
I hope you enjoy this blog. Feel free to reach out to me via the contact form TODO. I will also post a JS-obfuscated E-Mail address to reduce potential spam induced by the troves of various web crawlers. As this blog is hosted on GitHub pages, you can also submit pull requests on GitHub against this repo.
I’m using the wonderful static site generator Hakyll by Jasper van der Jeugt. As a sign of my gratitude, each page contains a link to his project, which also contains an instructive series of tutorial posts on how to setup, configure, and use it for your own blog. Give it a try, if you’re considering blogging.
An RSS/Atom feed is on my checklist. Check.
On “exercises” in my posts
I know some readers may be less excited by an exercise. But they are in fact optional. You don’t need to do them unless you want to. I just have to strike a balance between too much detail in expositions and legibility. My blog posts are intended to convey and share knowledge and motivate for discussions, in which I would love to learn something new. If I spelled out every formal piece of argument, the overall article would become unwieldy for many readers. And if I left it all hand-wavy, perhaps a single important bit would be left unpronounced that otherwise would have made it click for many readers.
A good exercise is hard to pose. But from my experience, exercises are a huge boon to motivation. They do tend to interrupt the flow. But if posed well and at good sites in text, they will help in understanding and checking whether something important in the sequel might have been left unaware of. I’m confident in their ultimate benefit, as otherwise I wouldn’t take the burden of offering them. Exercises that I pose in my articles are intended to provide an opportunity to acquire and test skills important at becoming fluent with a novel technology or concept. They are about converting passive knowledge into active skills, something you can not only explain but also actually perform. I hope you recognize their value, but you don’t have to!
So if you decide to do an exercise, which is always a good idea, and get stuck, just reach out to me by any means of communication available to you. It might be just that I might have omitted an important piece of information that could not immediately be inferred from the context. In the end, there is no requisite peer review on blogs. But some readers are kind enough to leave corrections and suggestions in comments. This is always a pleasant opportunity to verify the correctness of my knowledge.
With the scientific method being introduced in ever more industries, mostly sold as “artificial intelligence”, “business analytics”, “machine learning”, “data science”, or ‘just’ “statistics”, different worlds collide at the difference of perspectives on the same problems at hand. This makes it even more important to strike a good balance between too much detail in the scientific concepts at the cost of the business problem and a too opaque justification for a conclusion, given the limited space and time, among other resources. In other words, even authoring an article is an optimization problem. In business, in order to reduce volatility in returns and ensure their consistency, all decisions must be justified and testable.
Of course, I also appreciate all and any remarks regarding potential ambiguities arising in certain passages, which might make an actually simple concept appear veiled and impenetrable. With so many abstractions commonplace in modern-age software development and data science, this is an apparent issue that needs to be managed well. My utmost goal here is to convey knowledge, whereby I’m determined to explain everything clearly and correctly. In doing so I also enjoy the benefit of ordering sometimes dissipate bits of information, accumulated over time, in a coherent structure deserving a presentation here. So I’ll be happy about all sorts of feedback.
TODO
I’m planning to introduce a comments section via Disqus. Here are some further tasks to complete.
-
Enable Pandoc’s
taks_lists
extension to render this list correctly. - RSS/Atom feed
- Sitemap
- Tags
- Word cloud
- An individual CSS/JS theme
- CSS+JS for code blocks
- Code highlighting
- Disqus
- Contact form
- Dark mode (almost ready) + sepia filter
- Mobile-friendly
- Caniuse + polyfills
- React/Angular CV app route
- E-mail address
- Newsletter
- Importance markers
- Medium-like reference markers
- Other reading and legibility improvements and tools.
- Cross-posting? Integration with blogging platforms.
- Add a CDN and embed the font family files as a fall-back solution
- …
- Many things I’m unaware of right now. But this should not become another framework!
On JavaScript CDNs
Some JavaScript libraries can be hosted locally with this blog front-end, while others are hosted remotely on content delivery networks (CDNs). I will try to host locally all files essential for your visual experience. But to automate security updates, CDNs are a good alternative.
For now, embedded remote JavaScript files hosted on remote CDNs are MathJax on Cloudflare and Fontawesome on <Fontawesome.com>. I’m planning on embedding React, Angular and Stencil components, hosted on <Unpkg.com> too. If you use AdBlockers in regular mode, you don’t need to unblock any domain, whereas if you’ve got advanced-user mode turned on, you would only need to whitelist (green) or graylist cdnjs.cloudflare.com
for MathJax (and unpkg.com
later for React components), and kit.fontawesome.com
or kit-free.fontawesome.com
for some font elements, which, however, are not essential. I will soon provide minimized font families to reduce the payload for you.
I’m determined on optimization in almost everything that I do. It is important to me to reduce the payload and thereby the mobile traffic charges for the users. Faster load times are also a pleasant experience. I will therefore minimize the scope of external libraries used.
At the moment of writing this paragraph (2020-04-21), I’ve rewritten the entire front-end for this blog in TypeScript, and after applying JS output “minification”, the entire JS front-end occupies only 17KB of the total payload. I’m omitting jQuery now almost completely to reduce it even further, so only my CSS output and the background images remain to optimize as well as external dependencies like fonts and MathJax. I’m also going to make sure that they are cached properly across page reloads.
A next step will be to transform this into an SPA–PWA, where the asynchronous routing is carried out on the client; this will minimize the payload even further.
Note that there is also a discipline called “Law and Mathematics”. I haven’t had a chance to learn anything about it yet.↩︎