My name is Matt Janda,
This is my software engineering journey; How I turned ideas into small tools, the small tools into a projects and the projects into full stack applications. I designed and wrote from scratch most of the tools and applications presented here. Some of them are available in my public repositories.
- AutoByte
- KiBoards
- Terragate
- JandaBox
- WinGif
- Serilog ClassName Enricher
- Janda.Go
- Github and Jira metrics in Kibana
- CI/CD Pipelines in Jenkins
- Capture The Flag Framework
- CoolCat
- Lightweight Document Review Platform
- Hard drive imaging via IDE ports for DOS
- Software Reverse Engineering with SoftICE
- Dictionary Mobile
- TFL Mobile
- Media Eraser
- Interrupt List Navigator
- Assembler for 8086
- Software Reverse Engineering in DOS
- TSR programs for DOS
- Text mode pictures in Assembler
- Floppy Disk Boot Loader
AutoByte is a data structure deserializer and parser for .NET. It automatically generates code based on class properties, streamlining the parsing of binary data. It simplifies handling binary data in .NET apps, making it easier to integrate and manage complex data structures efficiently.
KiBoards Inspired by Xunit.TestLogger provides Elasticsearch logging for Xunit and visualisations in Kibana.
Terragate is simple web API gateway for terraform command line tool.
JandaBox is everything what I learned while working on Janda.Go and much more.
HelloWorld from command line...
The same HelloWorld directly from Visual Studio...
No more online converters... WinGif is a simple windows screen capture tool that allows to quickly create animated gif files. It can create animated GIF files by capturing given window title or make it from individual frames saved in PNG files.
WinGif 0.2.0
Copyright (C) 2023 Matt Janda
capture (Default Verb) Create animated GIF by capturing active window.
make Make animated GIF from PNG files.
help Display more information on a specific command.
version Display version information.
Key features:
- Capture active windows
- Provide case sesitive, full or partial window title to trigger the capture.
- Start capture when window with given title become active. After this any active window will be captured.
- Capture only window with given title. The capture will pause if active window is does not match given title.
- Save individual frames as PNG files.
- Make GIF file from individual frames saved in PNG files.
- Provide delay between taking screen shoots in milliseconds.
- Provide delay between GIF frames in milliseconds. (33ms delay between frames equals ~30fps)
- Allow self capture. By default WinGif will pause capturing when the window with WinGif title is active.
Self capture and "Chrome" window capture.
Make a new gif file from png frames saved by WinGif.
Here we are... a GIF.
The ClassName enricher uses SourceContext and enrich Serilog logs with class name only.
Janda.Go provides .NET template for console application with dependency injection, logging, and configuration.
The template is available as Nuget package that can be accessed directly using dotnet new install Janda.Go
command.
Key features:
- GitHub actions automatically publish templates to nuget.org
- Installation through
dotnet
command - Provides Microsoft logging and Serilog
- Binding configuration file
- Main program exception handling
I moved my career into management in 2018. Yet, I am still developing in my own time. Management is easier if you find a way to measure success of your team. Since my company is using Jira for project management and GitHub for development I created fully containerised platform which visualise developers participation within the projects.
Metrics service is responsible for transferring relevant data from Jira and Github into Elasticsearch and visualize through Kibana.
The platform consist of 3 containers:
- Kibana
- Elasticsearch
- Metics Loader
Key features:
- Automatically create Kibana spaces.
- Import dashboards from ndjson files.
- Running Jira and GitHub loader services at the same time.
- Index multiple Jira projects simultaneously.
- Retries if too many requests is returned.
- Caching to reduce number of lookups.
Start platform with docker compose.
Jira loader indexing issues.
Jira loader waits and retires when too many requests was made.
I wrote deployment script for Ubuntu 18.04.6. The script configure operating system and deploy metrics services.
- Install docker and docker-compose.
- Run docker-compose.
- Pull image containers for kibana, elastic search and metric.
- Start containers.
It takes only a minute to deploy and start metrics services. The script is executed directly from the last successfull build in Jenkins:
curl -s https://jenkins.***.com/job/mjanda/job/Metrics/job/develop/lastSuccessfulBuild/artifact/ubuntu.sh | sudo bash
Automatically build and push docker images to proget feed.
Running Jenkins pipeline with Ocean Blue plugin.
I created simple .NET framework for playing CTF.
I participated in multiple Capture The Flag events organized by SANS on My ranges.io
Name | Finished At | Challenges | Position | Points |
---|---|---|---|---|
SANS Community CTF | 14:00 on 17 Oct 2020 BST | 35 of 37 completed | 21st of 1055 players | 12,750 of 13,500 possible |
SANS Community CTF - November | 13:00 on 23 Nov 2020 GMT | 61 of 62 completed | 27th of 1690 players | 19,850 of 20,350 possible |
Cyber Camp 2020 | 04:59 on 7 Jan 2021 GMT | 37 of 39 completed | 26th of 360 players | 10,050 of 11,550 possible |
Global Community CTF: Mini BootUp | 18:00 on 19 Feb 2021 GMT | 32 of 32 completed | 17th of 360 players | 8,500 of 8,500 possible |
Intermediate: Global Community CTF: BootUp | 23:00 on 23 Apr 2021 BST | 13 of 24 completed | 88th of 1293 players | 2,300 of 7,500 possible |
Global Community CTF: Bootup | 23:00 on 16 Oct 2021 BST | 36 of 45 completed | 20th of 889 players | 1,934 of 4,630 possible |
Teaching basics of C# programming with a bit of ASCII fun. The picture of CoolCat was copied from my daughter's T-shirt logo.
I designed simple and fast document review platform for Electronic Discovery. I wrote back bone of the application and with a small team of talented developers completed the project.
User can drag and drop data through the web browser. The data is automatically processed and published for review.
Key features:
- Isolated, self serived client workspaces.
- Role based access to client's workspaces.
- Client can create projects, add users and assign them to the projects.
- User can open multiple projects in separate web browser tabs.
- Drag and drop files like archives, mailboxes or standalone documents.
- Data processing powered by ICE processing engine.
- Data deduplication.
- Customizable coding templates.
- Code documents based on isseue or relevance.
- Mass code multiple documents.
- Keyword search powered by dtSearch.
- Search documents by date and coding.
- Saved searches.
- Show unseen documents.
- Show duplicate documents.
- Download documents.
- Print documents into PDF.
I wrote a simple hard drive imaging tool using Borland Pascal. I used Turbo Vision library to create user interface. The software was communicating with hard drive directly via Integrated Drive Electronics (IDE) ports.
Running under Windows 98 with virtual hard drive...
This was my last software written for DOS. You can find the code in IDE repository.
SoftICE was my favourite debugger for Windows XP/2000.
This is one projects I was working on, where I needed to bypass certian software behaviour...
My first software written for Windows PDA. Slowniki Mobile was Polish English, Polish German and Polish French bidirectional dictionary client. The data was retrived from online dictionary website.
"Slownki Mobile" running on my Windows PDA device.
Transport for London Mobile application for PDA. The source code is available in TFLMobile repository.
Search options:
- Station or stop
- Postcode
- Address
- Place of intrest
MediaEraser was compiled into three feature versions: Free (lite), Standard and Full. Each build contained only the code for the features available in given version. The free version of MediaEraser can be still downloaded from websites like programy.net.pl
Media Eraser 2.0a lite (free) was limited to signle file deletion below 10Kb only. The application user interface provides only file deletion settings.
The full version offered many more features like:
- Recursively erase multiple file and folders from Windows explorer's context menu
- Erase entire partitions (volumes)
- Erase free space, slack space and information about files deleted without MediaEraser
- Erase entire physical hard drives
MediaEraser was fully written in C++ with WTL for GUI. MediaEraser was one of the fastest data erasing tools at the time.
Erase volume settings offered Complete volume erase (destructive) and Partial volume erase (safe) erase options.
Complete volume erase (destructive) physically erase entire volume no matter what file system the partition is formatted to. Once the volume is erased it has to be formatted to be accessible by operating system.
Partial volume erase (safe) option erase free space, slack space and optionally unused MFT entries. Slack space is the area of a hard drive ranging from the end of a stored file to the end of that file cluster. Unused MFT entries holds information about files deleted without MediaEraser.
Erase drive settings.
Erase physical drive.
Erase files from Windows Explorer's context menu.
Interrupt List Navigator is a tool written in Delphi 5 to provide a quick search for Interrupt List created by Ralf Brown.
The Interrupt List is a text file with detailed description of 8163 interrupt calls.
The tools offsers quick search by typing interrupt number with AH/AX register value or interrupt description.
Interrupt List Navigator running under Windows 10 with different font.
Key features:
- Serach by interrupt number and AX register.
- Search by iterrupt title.
- Find keyword or phrase in text.
- Print single or multiple interrupt descriptions.
- Change display font.
- Copy interupt description to clipboard.
- Maximize window by pressing F5 key.
It was exciting time writing software using assembler and pascal for DOS. You can find all my assembler source codes and binaries in 8086 repository. The code can be executed only under DosBox. Kudos to the authors for keeping the legacy alive.
Multi-Edit was one of the text editors to write and run assembler code.
I modified software which helped me to learn touch typing. The software was called "Maszynistka" which translates to "Typist". Maszynistka was free to use with the caveat that unregistered version has a splash screen. The splash screen is taking about 15 minutes before you can start using the tool.
I used Turbo Debugger to figure out how to skip the splash screen. This is how I did it...
I let the program to execute until I found the splash screen call. I applied simple NOP slide over the splash screen call. Three bytes only. The challenge was that the code of the program was encoded. I could not make permanent change to MASZ.EXE binaries.
I wrote my own debugger. The assembler code in CRACK.ASM repeats steps required to bypass the splash screen. Instead running MASZ.EXE the program can be executed via CRACK.COM which skips the splash screen.
Program "Maszynistka" with the splash screen...
... and without the splash screen after running it with CRACK.COM
TSR is Terminate and Stay Resident program which allowed to run your program in the background and let the DOS operating system continue. This is where the journey with concept of viruses starts.
I created a number of picutres in text mode and converted them into assembler code. For example, the picture below was manually created in X.ASM (1536 bytes) and compressed to C.ASM file (584 bytes). Compressed picture in C.ASM was converted to assembler's byte array in OUT.ASM. The source code to draw the picture was added later to OUT.ASM code.
The compressed pictures converted to assembler code could easlily fit into a few sectors between MBR and BPB on the hard drive. I used similar idea in boot loader for two operating systems.
I worte boot loader MULTI.ASM which allowed me to place two operating systems on a single 1.44MB floppy disk. I added animated floppy disk picture to the code to make the boot loader a bit more fancy. User can select operating system from the menu.
Microsoft DOS 6.22
Microsoft DOS 4.00 for Windows 95
The physical image of the 1.44MB floppy disk is available in the repository.