INITIALIZING IFEANYI
Mr. Iyke's DevOps Legacy | Natural Log Calculator
0%
SEN 482 DevOps CA
IFEANYI CALCULATOR

"A stripped calculator built for the impossible. Featuring natural logarithm implementation, containerized deployment, and CI/CD automation. Crafted under the guidance of Mr. Iyke."

Scroll to Explore

MR. IYKE

The lecturer who saw potential where others saw limits. The DevOps mentor who turned code into careers.

MI

Mr. Iyke

Senior Lecturer & DevOps Mentor

15+
Years
500+
Students
98%
Pass Rate

The Man Behind The Magic

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.

"I do not teach subjects. I teach people. And every person who walks through that door has a story worth writing. My job is to help them find the pen, and in DevOps, that pen is a terminal."

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.

DevOps Expert CI/CD Mentor Docker Guru GitHub Actions SEN 482 Lead Industry Consultant

THE CALCULATOR

A stripped, tested, and containerized calculator built for the SEN 482 DevOps Continuous Assessment.

ln(2.718)
Natural Logarithm Ready

Built for Precision

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.

Core Features

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.

Custom Feature: Natural Logarithm

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.

Test Coverage

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.

NATURAL LOGARITHM

The custom feature that sets this calculator apart. Deep dive into ln, its mathematics, implementation, and real-world applications.

๐Ÿ“

The Mathematics

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.

ln(x) = log_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.

๐Ÿ’ป

The Implementation

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.

if (x > 0) return Math.log(x)

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.

๐ŸŒ

Real-World Applications

Natural logarithms power compound interest calculations, radioactive decay modeling, population growth predictions, algorithm complexity analysis (O(log n)), and machine learning loss functions.

A = P * e^(rt)

From finance to physics, from biology to computer science, ln is everywhere. Understanding it is not just academic, it is a superpower.

๐Ÿงช

Test Cases

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.

expect(ln(Math.E)).toBe(1)

Every test passes. Every edge case is covered. The ln feature is bulletproof.

๐Ÿณ

Docker Integration

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.

docker run -p 8080:80 image

The image is pushed to Docker Hub on every successful CI run, making it available anywhere, anytime.

๐Ÿš€

CI/CD Pipeline

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.

git push -> live site

One push. Three jobs. Zero manual intervention. That is the power of DevOps.

THE PIPELINE

From code commit to live deployment. Every step automated, every gate enforced, every deployment proven.

๐Ÿ“
01
Code Commit
Developer pushes to main branch. The journey begins with a single git push.
๐Ÿ”
02
Lint & Test
ESLint checks code quality. Jest runs tests with 80% coverage gate. The CI gate.
๐Ÿณ
03
Docker Build
Multi-stage Dockerfile builds the image. Tests pass before production stage.
๐Ÿ“ฆ
04
Push to Registry
Image tagged with latest and SHA. Pushed to Docker Hub for global access.
๐Ÿš€
05
FTP Deploy
Dist folder deployed via FTP to public_html. Live site updated in seconds.

TESTING & VALIDATION

Every line of code is battle-tested. From unit tests to integration, from linting to coverage gates.

๐Ÿงช

Unit Tests

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.

test('ln(e) equals 1', () => {
expect(ln(Math.E)).toBe(1);
});
๐Ÿ“Š

Coverage Gates

Our CI pipeline enforces strict coverage thresholds: 80% functions, 80% lines, and 60% branches. If coverage drops below these gates, the build fails automatically.

coverageThreshold: {
branches: 60,
functions: 80,
lines: 80
}
๐Ÿ“

ESLint

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.

'no-unused-vars': 'warn'
'eqeqeq': 'error'
'semi': ['error','always']
๐Ÿ”’

Error Handling

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.

if (x <= 0) {
throw 'ln requires positive number';
}
๐Ÿ”„

Integration Tests

The full calculator flow is tested end-to-end: button clicks, keyboard input, display updates, and the ln computation pipeline. Every interaction is validated.

test('full ln flow', () => {
click('ln');
click('2');
click('7');
click('1');
click('8');
expect(display).toBe('1');
});
โœ…

CI/CD Validation

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.

needs: [ci]
if: github.ref == 'refs/heads/main'

VOICES FROM THE CLASS

Mr. Iyke did not just teach us DevOps. He taught us how to think like engineers. The calculator project seemed simple at first, but the depth of testing, containerization, and automation he demanded transformed how I approach every project now. The ln feature was my moment to shine, and he pushed me to make it bulletproof.
400L DevOps Student
SEN 482 Class of 2026