-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtechnical_projects.html
More file actions
173 lines (158 loc) · 6.91 KB
/
technical_projects.html
File metadata and controls
173 lines (158 loc) · 6.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
<!DOCTYPE HTML>
<html lang="en">
<head>
<title>Kenneth's Technical Projects</title>
<meta name="description"
content="Technical projects and open-source contributions by Kenneth Hsu, FCAS, CSPA, MAAA including data engineering and actuarial tools.">
<link rel="canonical" href="https://kennethhsu.com/technical_projects.html">
<link rel="icon" type="image/png" href="/favicon.png">
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="assets/css/main.css" />
<link rel="stylesheet" href="assets/css/reveal.css" />
<noscript>
<link rel="stylesheet" href="assets/css/noscript.css" />
</noscript>
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://kennethhsu.com/"},{"@type":"ListItem","position":2,"name":"Technical Projects","item":"https://kennethhsu.com/technical_projects.html"}]}
</script>
</head>
<body class="is-preload">
<!-- Page Wrapper -->
<div id="page-wrapper">
<!-- Header -->
<header id="header">
<h1><a href="index.html">Kenneth Hsu, FCAS, CSPA, MAAA</a></h1>
<!-- <nav>
<a href="#menu">Menu</a>
</nav> -->
</header>
<!-- Menu -->
<!-- <nav id="menu">
<div class="inner">
<h2>Menu</h2>
<ul class="links">
<li><a href="index.html">Home</a></li>
<li><a href="generic.html">Generic</a></li>
<li><a href="elements.html">Elements</a></li>
<li><a href="#">Log In</a></li>
<li><a href="#">Sign Up</a></li>
</ul>
<a href="#" class="close">Close</a>
</div>
</nav> -->
<!-- Wrapper --><!-- Wrapper -->
<section id="wrapper">
<header>
<div class="inner">
<h2 class="reveal">My Technical Projects</h2>
<p class="reveal">
I love messing around with code and tech just for the fun of it. Whether it's contributing to
open-source projects, hacking together electronic gadgets, or wiring up old school breadboards,
I enjoy building things that are both cool and useful. It's a hobby driven by curiosity. I’m
always looking for ways to create something that helps me or someone else solve a problem or do
something better.
</p>
</div>
</header>
<!-- Content -->
<div class="wrapper">
<div class="inner">
<h3 class="major">Project Gallery</i></h3>
<section class="features">
<article class="reveal">
<h3 class="major">chainladder-python</h3>
<p class="reveal">
<i>chainladder-python</i> is a Python package designed to handle all core actuarial
reserving
tasks, including triangle data manipulation, link ratio calculations, and IBNR
estimation using both deterministic and stochastic models. It offers a modern
alternative to outdated legacy tools, with a syntax inspired by familiar libraries like
pandas and scikit-learn. Built to be intuitive, minimal, and powerful, it enables
actuaries to focus on analysis—not software limitations.
</p>
<a href="https://github.com/casact/chainladder-python" class="special" target="_blank">Learn
more</a>
</article>
<article class="reveal">
<h3 class="major">Colonizer</h3>
<p class="reveal">
<i>Colonizer</i> is a strategic analysis tool for the board game Settlers of Catan. It
helps
players, especially beginners, make better decisions by identifying suboptimal
settlement placements and trades using economic theory. By analyzing game data and
common patterns, it offers insights into gameplay mistakes, helping users improve
strategy, resource efficiency, and overall competitiveness.
</p>
<a href="https://github.com/kennethshsu/Colonizer" class="special reveal"
target="_blank">Learn
more</a>
</article>
<article class="reveal">
<h3 class="major">Custom Router</h3>
<p class="reveal">
My home network router uses an open-source solution for managing network traffic
and blocking ads across all devices. It intelligently routes data, enhances privacy, and
improves performance by eliminating unwanted ads and tracking. With fine-grained control
over traffic behavior, it serves as a home-network upgrade that improves speed,
security, and my home network experience.
</p>
<a href="https://github.com/kennethshsu/DDWRT" class="special reveal"
target="_blank">Learn
more</a>
</article>
<article class="reveal">
<h3 class="major">Aerial Extractor</h3>
<p class="reveal">
<i>Aerial Extractor</i> is a utility that downloads Apple's cinematic aerial
screensavers,
originally created for Apple TV. It allows users to view these high-quality visuals on
their own systems by extracting and organizing the entire collection. Lightweight and
easy to use, it brings Apple's most beautiful motion backdrops to desktops and custom
displays with minimal setup.
</p>
<a href="https://github.com/kennethshsu/Aerial_Extractor" class="special reveal"
target="_blank">Learn more</a>
</article>
<article class="reveal">
<h3 class="major">Byte-It</h3>
<p class="reveal">
<i>Byte-It</i> is an arcade-style survival game where players dodge moving obstacles
while
collecting apples and gems for points. Built on custom hardware with microcontrollers,
LCD screens, and NES-style controls, it challenges players to stay alive and use
power-ups strategically. With visual score displays and fast-paced action, it blends
classic gaming with embedded systems design.
</p>
<a href="https://www.youtube.com/watch?v=nwX5HKSbFQM" class="special reveal"
target="_blank">Learn
more</a>
</article>
</div>
</div>
</section>
<!-- Footer -->
<section id="footer">
<div id="contact-section-placeholder"></div>
</section>
</div>
<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/jquery.scrollex.min.js"></script>
<script src="assets/js/browser.min.js"></script>
<script src="assets/js/breakpoints.min.js"></script>
<script src="assets/js/util.js"></script>
<script src="assets/js/main.js"></script>
<script src="assets/js/reveal.js"></script>
<script>
fetch('contact_footer.html')
.then(response => response.text())
.then(html => {
document.getElementById('contact-section-placeholder').innerHTML = html;
// Initialize reply fields toggle after footer is loaded
if (window.initReplyFields) window.initReplyFields();
})
.catch(err => console.error('Error loading contact section:', err));
</script>
</body>
</html>