commit 53df5376506e03987923f3b3190bbe35317caf02 Author: Daniel McKnight Date: Thu Jan 30 20:05:16 2025 -0800 Initial outline with some page content diff --git a/__main__.py b/__main__.py new file mode 100644 index 0000000..0fd2605 --- /dev/null +++ b/__main__.py @@ -0,0 +1,49 @@ +from os.path import abspath, isfile + +from nicegui import ui + +_tab_to_content = { + "Home": "page_content/home.md", + "Portfolio": "page_content/portfolio.md", + "Resume": "page_content/resume.md", + "Bio": "page_content/bio.md" +} + +_error_page = "page_content/404.md" + +def _get_content_from_file(file_name: str) -> str: + """ + Take a file name/path and return its contents + :param file_name: Relative or absolute path to a file + """ + if not isfile(abspath(file_name)): + file_name = _error_page + with open(abspath(file_name), 'r') as f: + return f.read() + +def render_tab(tab_name: str): + file_name = _tab_to_content.get(tab_name, _error_page) + ui.markdown(_get_content_from_file(file_name)) + + +def render_header() -> ui.tab_panels: + """ + Render sticky page header with navigation + """ + tab_names = _tab_to_content.keys() + with ui.tabs().classes('w-full') as tabs: + tab_list = [ui.tab(name) for name in tab_names] + with ui.tab_panels(tabs).classes('w-full') as header: + for t in tab_list: + with ui.tab_panel(t): + render_tab(t._props['name']) + return header + +def main(): + header = render_header() + header.set_value(list(_tab_to_content.keys())[0]) + ui.run(dark=None) + + +if __name__ in ("__main__", "__mp_main__"): + main() diff --git a/page_content/404.md b/page_content/404.md new file mode 100644 index 0000000..debde83 --- /dev/null +++ b/page_content/404.md @@ -0,0 +1 @@ +Oops. This content hasn't been written yet... \ No newline at end of file diff --git a/page_content/bio.md b/page_content/bio.md new file mode 100644 index 0000000..f7aa4fc --- /dev/null +++ b/page_content/bio.md @@ -0,0 +1 @@ +## Hi! diff --git a/page_content/home.md b/page_content/home.md new file mode 100644 index 0000000..75c009f --- /dev/null +++ b/page_content/home.md @@ -0,0 +1,19 @@ +# McKnight Technology Services + +Hi! This is some text + +## h2 Title +Lorem ipsum... + +> This is a quote + +### Shell +```shell +ls / +``` + +### Python +```python +for i in range(42): + print(i) +``` diff --git a/page_content/portfolio.md b/page_content/portfolio.md new file mode 100644 index 0000000..344cf9c --- /dev/null +++ b/page_content/portfolio.md @@ -0,0 +1,32 @@ +# Project Portfolio +I have developed and contributed to hundreds of open source repositories on GitHub (as well as some Private ones that +I cannot share here). This is just a selection of some of my favorite projects and what I like about them. + +## `neon-data-models` +This repository contains barely any functional code, but it was an exercise in careful planning. +It is structured into a logical hierarchy with documentation and unit tests. +This project was not fully integrated to the extent I planned, but it proved invaluable in defining/validating +messages sent between modules. The use of Pydantic also means that validator methods can be used to adapt an old-style +input into a new one when an API changes. + +## `neon-users-service` +This project defines a service for managing a user database with a flexible backend; initially, it supports SQLite for +a standalone system (and easy development/testing) and MongoDb, which is what we used for production at NeonGecko. +I implemented a very simple CRUD (Create/Read/Update/Delete) design, with RBAC (Role-Based Access Controls) to enable +easy integration with applications. The design enables the service to be easily adapted to any user database and to +allow other services to easily operate on user entries (with the proper permissions, of course). + +## `neon-hana` +This is primarily a RESTful API used to access other services. This is one of the more complex FastAPI applications +I have written; it implements JWT authentication and Pydantic models to validate requests/responses. + +## `neon-diana` +This isn't the prettiest project, but it is my first foray into writing Helm charts. The module provides some +developer-oriented CLI tools for generating Helm charts to deploy the same services NeonGecko uses in production +systems. + +## `neon-docs` +Just what it says, this is all documentation. + +## This Site +I fully defined this site using [nicegui](https://nicegui.io/)! diff --git a/page_content/resume.md b/page_content/resume.md new file mode 100644 index 0000000..21219bf --- /dev/null +++ b/page_content/resume.md @@ -0,0 +1,52 @@ +## Work Experience +### Neon Gecko Inc. +Software Developer, Developer Relations Manager, Lead Hardware Developer + +December 2017 – Present. Responsibilities Include: +- Managing multiple projects and work from individual contributors, one-off contractors, and long-term contract workers +- Working with management and developers to develop roadmaps, set timelines, and spec projects +- Extensive Python programming +- Extensive GitOps and workflow design, automation, and management +- Being fluent in voice assistant concepts and technologies +- Having a strong understanding of LLM technologies and model fine-tuning +- Deploying and maintaining infrastructure with Kubernetes, XCP-ng, and various cloud providers +- Kotlin for Android app development and Google Play Store publication +### Best Buy/Geek Squad +Consultation Agent, Sales Associate + +November 2015 - December 2017 +- Experience with Windows and Mac system administration, troubleshooting, and repair + +## Projects +- Professional open-source work can be found at: https://github.com/neondaniel +- Documentation I wrote for much of my professional work: https://neongeckocom.github.io/neon-docs/ +- A selection of small projects are documented on my blog: https://blog.mcknight.tech/ + +## Technologies +### Languages +- Python +- SQL +- MongoDb +- Kotlin +### Frameworks +- Git and GitHub +- FastAPI +- SocketIO +- Sentry +- Kubernetes + +## Education +### University of Washington +Bachelor of Science in Physics, June 2018 + +Secretary, Physics Club at UW Bothell + +### Bellevue College +Associate of Science in Engineering, June 2016 + +Member, Phi Theta Kappa Honors Society + +### Mercer Island High School +High School Diploma, June 2012 + +Recipient, Washington State Honors Award