Web Application
Development
joe.mariadassou@norwestcomputing.com.au
Ph:0425361912
What we do
I am C++ developer. I used to develop on Windows OS. But now I have shifted to Linux. My latest toy is C++ Asio using coroutines. I developed this website to show case some of my skills and learning. This site runs Openresty (an offshoot of NGINX), which uses Lua as a scripting language, on Docker containers. There are separate containers for MariadDB, PhpFPM, and a C++ http server running as an upstream server. There is also a Wordpress container. Following Jason Knight I don't use any framework apart from JQuery. I started using PHP and Lua in the backend. I am now migrating to C++ from PHP.
I write blogs relating to C++. I also publish code on github
Blogs
- IO Completion Port
- Using MS Windows to develop for Raspberry Pi
- Some Notes on Direct2D
- UML Diagram of a Solution to Expression Problem
- Version Control for General Use
- Why Functional Programming works for the Eight Queens Problem.
- Wiener Filtering using OpenCV
- WPF Animation without XAML
- Sudoku Solver
- More….
- C++ Coroutines Simplified
- Large Scale C++: An Executive Summary of Chapter 0
- Iterative Versions of Recursive Functions in C++
- On Computing the Fibonacci Number in O(log(n))
- C++ Idioms for handling Tuples
- Machine Learning with C++ MLPack on Windows
- Unit Testing with Boost in Visual Studio
- No Raw Pointers
- Asio: A Brief Introduction for the Windows Programmer
- Web Server Using C++ – Asio
- C++ Multithreading: Promise and Future
- PThreads: An Introduction for Windows Programmers
- Evolve existing multi-threaded code to use C++ 14
- Template Meta Programming: Part II SFINAE
- Template Meta Programming in C++: A Gentle Introduction – Part I : Template Specialisation
- More….
- Linear-Search based algorithm for Mth Lexicographic ordering of Mathematical Permutation and Combination
- Is Dijkstra Wrong? Another look at the Dutch National Flag problem
- On Computing Prime Numbers
- Sudoku Solver
- Depth First Game Trees
- Breadth First Search
- “Water buckets” Problem
- On Computing the Fibonacci Number in O(log(n))
- TARGET Solver
- Brainvita Solution
- Master Mind Solver
- Serial Number
- More….
Projects
- WebAuth An Openresty based web server demonstating the use of Redis for Web Authentication & Authorisation
- CppLinq A Linq library for C++ forked from Berrysoft. Fixes the ‘reverse’ bug and adds “writeline”
- Camerasp2 An updated version of Camerasp that uses a different web server.
- tiny_nn_json A project to build a Neural Network (CNN and FFN) from JSON Input
- Camerasp Convert Raspberry Pi into a web camera using C++
- AsioFileCopy Windows specific application that demonstrates the use of Asio random access handles in a file copy application.
- Knights C++ solution to the knights problem
- MthCombination Compute Mth Combination
- GUI for BrainVita written in
- .NET / C# & WPF BrainVitaWPF
- OCaml using built-in graphics
- Qt C++
- BVitaCpp Program to compute a solution to the BrainVita game written in C++
- WienerFilter Using OpenCV
- IOCP_FileCopy Threadpool based on IO Completion port to perform fast copy
- Sudoku C++ Sudoku Solver
- BrainVitaFS Brain Vita solver in F#
- WaterBucket C++ solution to the Water Buckets Problem
Large Scale C++ Volume I by John Lakos
A Qucick Comment on Chapter 1
The book claims that design and development methodologies are predicated on the language and tools used to develop the software. Language independent design and development is not feasible, claims Lakos. Although I don't fully agree with the premise, the second chapter (the book starts with Chapter 0), is a worthwhile read as it makes a number of useful suggestions. There are so many gotchas in compiling C++ programs that, no wonder, most modern languages like Rust and Swift which still go through the compile-link cycle have their own linker. For example C++ uses name mangling to allow function name overloads. Two functions can have the same name as long as they have different paramaters. This is often implemented through name mangling. However the return type is not considered for name mangling. So it is possible to declare "int f()" and "double f()" in two translation units and even the linker cannot point out the discrepency. Another issue is name hiding. A function in a derived class hides a function of the same name in its base class even when the functions are overloaded, i.e. the parameters are different.
Although few organisations have such large codebases - meaning multi million lines of code- many of his recommendations are worth practicing. For example:
- No cyclic dependencies.
- Use levels to ensure that a class at Level n+1 can call functions at Level n only.
- Do not depend on automatic instantion of classes. Call functions to do so
The book is over 900 pages long. Every chapter contains a long summary that is worth reading even if you skip most of the chapter. The end of the book contains a quick reference of all the key terms and concepts. Given its length it is worth a quick look over before you put in the effort to read the whole book