"A stripped calculator built for the impossible. Featuring natural logarithm implementation, containerized deployment, and CI/CD automation. Crafted under the guidance of Mr. Iyke."
The lecturer who saw potential where others saw limits. The DevOps mentor who turned code into careers.
Senior Lecturer & DevOps Mentor
Mr. Iyke is not just a lecturer, he is a force of nature in the world of software engineering education. For over fifteen years, he has walked the halls of this institution, not merely teaching subjects, but igniting minds and shaping the next generation of tech leaders.
What makes Mr. Iyke extraordinary is his unwavering belief that every single student, regardless of background or starting point, carries within them the seed of greatness. His DevOps course is legendary, a crucible where theory meets practice and students emerge battle-tested.
Under his guidance, students who once struggled with basic Git commands have gone on to build production-grade CI/CD pipelines, containerize applications, and deploy to cloud infrastructure. His office door is always open, literally. Whether it is 8 AM or 8 PM, Mr. Iyke will be there, ready to debug your pipeline, review your Dockerfile, or push you toward your best self.
A stripped, tested, and containerized calculator built for the SEN 482 DevOps Continuous Assessment.
This is not your average calculator. Stripped down to the essentials, every button serves a purpose. No bloat. No dead code. Just pure functionality wrapped in a clean, responsive interface.
The calculator engine is written in pure JavaScript, no eval() allowed. It uses a custom tokenizer and expression evaluator that parses mathematical expressions safely and accurately. Every operation is testable, every function is linted, and every line of code is ready for production.
Basic arithmetic (addition, subtraction, multiplication, division), percentage calculations, clear functions, and decimal precision. All operations are validated and error-handled to prevent invalid inputs from crashing the application.
The star of the show. The ln button computes the natural logarithm of any positive number using Math.log() with input validation. It handles edge cases like zero and negative numbers gracefully, displaying meaningful error messages instead of NaN.
100% of the calculator engine is covered by Jest tests. Arithmetic operations, edge cases, error handling, and the ln feature all have dedicated test suites. The coverage gate requires 80% functions, 80% lines, and 60% branches minimum.
The custom feature that sets this calculator apart. Deep dive into ln, its mathematics, implementation, and real-world applications.
The natural logarithm, denoted as ln(x), is the logarithm to the base e (Euler's number, approximately 2.71828). It is the inverse function of the exponential function e^x.
It answers the question: "To what power must we raise e to get x?" This fundamental relationship underlies countless phenomena in nature, finance, and technology.
Our implementation uses JavaScript's native Math.log() function, wrapped in a robust validation layer. Before computing, we check if the input is a positive number.
For x less than or equal to 0, we throw a descriptive error: "ln requires positive number". This prevents NaN outputs and provides user-friendly feedback. The function is exported and fully unit-tested.
Natural logarithms power compound interest calculations, radioactive decay modeling, population growth predictions, algorithm complexity analysis (O(log n)), and machine learning loss functions.
From finance to physics, from biology to computer science, ln is everywhere. Understanding it is not just academic, it is a superpower.
Our test suite validates ln(1) = 0, ln(e) = 1, ln(e^2) = 2, and handles edge cases like ln(0) throwing an error and ln(-1) throwing an error. Precision is verified to 10 decimal places.
Every test passes. Every edge case is covered. The ln feature is bulletproof.
The calculator is containerized using a multi-stage Dockerfile. Stage 1 (node:20-alpine) runs tests and builds the dist folder. Stage 2 (nginx:alpine) serves the static files on port 80.
The image is pushed to Docker Hub on every successful CI run, making it available anywhere, anytime.
GitHub Actions orchestrates the entire flow: lint with ESLint, test with Jest (coverage gate), build the Docker image, push to Docker Hub, and deploy via FTP to the live subdomain.
One push. Three jobs. Zero manual intervention. That is the power of DevOps.
Interactive 3D art installation. Hover over the rotating cards to experience the depth. Click for explosion effect.
From code commit to live deployment. Every step automated, every gate enforced, every deployment proven.
Every line of code is battle-tested. From unit tests to integration, from linting to coverage gates.
Every function in the calculator engine has dedicated unit tests using Jest. We test arithmetic operations, edge cases, error handling, and the natural logarithm feature with precision.
Our CI pipeline enforces strict coverage thresholds: 80% functions, 80% lines, and 60% branches. If coverage drops below these gates, the build fails automatically.
Code quality is enforced with ESLint using the recommended configuration. No unused variables, strict equality checks, and mandatory semicolons keep the codebase clean and consistent.
The calculator gracefully handles invalid inputs, division by zero, negative logarithms, and malformed expressions. Every error path is tested and user-friendly messages are displayed.
The full calculator flow is tested end-to-end: button clicks, keyboard input, display updates, and the ln computation pipeline. Every interaction is validated.
Every push triggers the full pipeline. Tests must pass before Docker builds. Docker must build before deployment. The deploy job only runs on main branch pushes, never on PRs.