From 8554dc79de0577d857ab95868df906c7cacc099d Mon Sep 17 00:00:00 2001 From: David Timber Date: Sat, 8 Feb 2025 03:23:56 +0100 Subject: Add davo-cv --- davo-cv/.gitignore | 4 + davo-cv/img/broken.svg | 29 ++ davo-cv/img/qr.svg | 331 +++++++++++++++++++++ davo-cv/index.css | 69 +++++ davo-cv/index.html | 127 ++++++++ .../portfolio/img/Luxriot-Monitor-Playback-1.webp | Bin 0 -> 144476 bytes davo-cv/portfolio/img/camsite-kr-0.webp | Bin 0 -> 95122 bytes davo-cv/portfolio/img/camsite-kr-1.webp | Bin 0 -> 806782 bytes davo-cv/portfolio/img/camsite-sv-0.webp | Bin 0 -> 1192632 bytes davo-cv/portfolio/img/camsite-wa-0.webp | Bin 0 -> 834354 bytes davo-cv/portfolio/img/camsite-wa-1.webp | Bin 0 -> 1493556 bytes davo-cv/portfolio/img/codec-research.webp | Bin 0 -> 33338 bytes davo-cv/portfolio/img/codec-research.xcf | Bin 0 -> 379115 bytes davo-cv/portfolio/img/codec-research/chip-cpu.svg | 27 ++ .../color-adjustement-mode-channels.svg | 2 + .../img/codec-research/display-material-3.svg | 17 ++ davo-cv/portfolio/img/codec-research/file.svg | 4 + davo-cv/portfolio/img/codec-research/imx.webp | Bin 0 -> 35902 bytes .../img/codec-research/outline-ram-red.svg | 37 +++ davo-cv/portfolio/img/codec-research/picture.svg | 4 + davo-cv/portfolio/img/codec-research/scale-03.svg | 4 + .../portfolio/img/codec-research/video-card.svg | 42 +++ davo-cv/portfolio/img/codec-traditional.webp | Bin 0 -> 34820 bytes davo-cv/portfolio/img/codec-traditional.xcf | Bin 0 -> 360860 bytes davo-cv/portfolio/img/danusys-prism-animated.webp | Bin 0 -> 430408 bytes davo-cv/portfolio/img/danusys-prism.xcf | Bin 0 -> 19933492 bytes .../img/danusys-prism/13cameras4-superJumbo.jpg | Bin 0 -> 419741 bytes .../img/danusys-prism/q8752e-zoom-left-2006.png | Bin 0 -> 626312 bytes .../portfolio/img/danusys-prism_pipeline-0.webp | Bin 0 -> 392750 bytes davo-cv/portfolio/img/danusys-prism_pipeline-0.xcf | Bin 0 -> 21130667 bytes .../portfolio/img/danusys-prism_pipeline-1.webp | Bin 0 -> 235696 bytes davo-cv/portfolio/img/danusys-prism_pipeline-1.xcf | Bin 0 -> 6356736 bytes davo-cv/portfolio/img/danusys-sys-arch.webp | Bin 0 -> 87440 bytes davo-cv/portfolio/img/danusys-sys-arch.xcf | Bin 0 -> 1633820 bytes davo-cv/portfolio/img/danusys-sys-arch/car.svg | 4 + davo-cv/portfolio/img/danusys-sys-arch/cctv.svg | 6 + davo-cv/portfolio/img/danusys-sys-arch/fight.svg | 42 +++ davo-cv/portfolio/img/danusys-sys-arch/fire.svg | 2 + .../portfolio/img/danusys-sys-arch/monitor-tv.svg | 32 ++ .../img/danusys-sys-arch/server-minimalistic.svg | 5 + .../portfolio/img/danusys-sys-arch/server-rack.svg | 15 + davo-cv/portfolio/img/danusys-sys-arch/walking.svg | 2 + davo-cv/portfolio/img/gis.webp | Bin 0 -> 174078 bytes davo-cv/portfolio/index.md | 301 +++++++++++++++++++ 44 files changed, 1106 insertions(+) create mode 100644 davo-cv/.gitignore create mode 100644 davo-cv/img/broken.svg create mode 100644 davo-cv/img/qr.svg create mode 100644 davo-cv/index.css create mode 100644 davo-cv/index.html create mode 100644 davo-cv/portfolio/img/Luxriot-Monitor-Playback-1.webp create mode 100644 davo-cv/portfolio/img/camsite-kr-0.webp create mode 100644 davo-cv/portfolio/img/camsite-kr-1.webp create mode 100644 davo-cv/portfolio/img/camsite-sv-0.webp create mode 100644 davo-cv/portfolio/img/camsite-wa-0.webp create mode 100644 davo-cv/portfolio/img/camsite-wa-1.webp create mode 100644 davo-cv/portfolio/img/codec-research.webp create mode 100644 davo-cv/portfolio/img/codec-research.xcf create mode 100644 davo-cv/portfolio/img/codec-research/chip-cpu.svg create mode 100644 davo-cv/portfolio/img/codec-research/color-adjustement-mode-channels.svg create mode 100644 davo-cv/portfolio/img/codec-research/display-material-3.svg create mode 100644 davo-cv/portfolio/img/codec-research/file.svg create mode 100644 davo-cv/portfolio/img/codec-research/imx.webp create mode 100644 davo-cv/portfolio/img/codec-research/outline-ram-red.svg create mode 100644 davo-cv/portfolio/img/codec-research/picture.svg create mode 100644 davo-cv/portfolio/img/codec-research/scale-03.svg create mode 100644 davo-cv/portfolio/img/codec-research/video-card.svg create mode 100644 davo-cv/portfolio/img/codec-traditional.webp create mode 100644 davo-cv/portfolio/img/codec-traditional.xcf create mode 100644 davo-cv/portfolio/img/danusys-prism-animated.webp create mode 100644 davo-cv/portfolio/img/danusys-prism.xcf create mode 100644 davo-cv/portfolio/img/danusys-prism/13cameras4-superJumbo.jpg create mode 100644 davo-cv/portfolio/img/danusys-prism/q8752e-zoom-left-2006.png create mode 100644 davo-cv/portfolio/img/danusys-prism_pipeline-0.webp create mode 100644 davo-cv/portfolio/img/danusys-prism_pipeline-0.xcf create mode 100644 davo-cv/portfolio/img/danusys-prism_pipeline-1.webp create mode 100644 davo-cv/portfolio/img/danusys-prism_pipeline-1.xcf create mode 100644 davo-cv/portfolio/img/danusys-sys-arch.webp create mode 100644 davo-cv/portfolio/img/danusys-sys-arch.xcf create mode 100644 davo-cv/portfolio/img/danusys-sys-arch/car.svg create mode 100644 davo-cv/portfolio/img/danusys-sys-arch/cctv.svg create mode 100644 davo-cv/portfolio/img/danusys-sys-arch/fight.svg create mode 100644 davo-cv/portfolio/img/danusys-sys-arch/fire.svg create mode 100644 davo-cv/portfolio/img/danusys-sys-arch/monitor-tv.svg create mode 100644 davo-cv/portfolio/img/danusys-sys-arch/server-minimalistic.svg create mode 100644 davo-cv/portfolio/img/danusys-sys-arch/server-rack.svg create mode 100644 davo-cv/portfolio/img/danusys-sys-arch/walking.svg create mode 100644 davo-cv/portfolio/img/gis.webp create mode 100644 davo-cv/portfolio/index.md diff --git a/davo-cv/.gitignore b/davo-cv/.gitignore new file mode 100644 index 0000000..f8073e9 --- /dev/null +++ b/davo-cv/.gitignore @@ -0,0 +1,4 @@ +*.tmp + +/portfolio/index.html +/portfolio/showdown-dark-theme.css diff --git a/davo-cv/img/broken.svg b/davo-cv/img/broken.svg new file mode 100644 index 0000000..e3d9d66 --- /dev/null +++ b/davo-cv/img/broken.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/davo-cv/img/qr.svg b/davo-cv/img/qr.svg new file mode 100644 index 0000000..0394c46 --- /dev/null +++ b/davo-cv/img/qr.svg @@ -0,0 +1,331 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/davo-cv/index.css b/davo-cv/index.css new file mode 100644 index 0000000..c627250 --- /dev/null +++ b/davo-cv/index.css @@ -0,0 +1,69 @@ +@media print { + html { + font-size: 11pt; + } + + .no-print { + display: none; + } +} + +@media screen { + .only-print { + display: none; + } +} + +@page { + size: auto; + margin: 5mm 5mm 5mm 5mm; +} + +td { + padding: 1vw; +} + +div.right-align { + text-align: right; +} + +table.main-table { + width: 100%; +} + +td.left-cell { + width: 15vw; +} + +td.center-cell { + text-align: center; + vertical-align: middle; +} + +td.upper-cell { + vertical-align: top; +} + +td.grey-ish-cell { + background-color: lightgray; + print-color-adjust: exact; +} + +td.grey-cell { + background-color: gray; + print-color-adjust: exact; +} + +img.passport-profile { + /* standard passport size: 128mm, 88mm */ + width: 2.56vw; + height: 1.76vw; +} + +h3.inline { + display: inline; +} + +.qr-url { + font-size: smaller; +} diff --git a/davo-cv/index.html b/davo-cv/index.html new file mode 100644 index 0000000..8395dd7 --- /dev/null +++ b/davo-cv/index.html @@ -0,0 +1,127 @@ + + + + + Davo's Resume (r0) + + + + + + This page is print-friendly. + This is a living document. Revision #0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
cdn.snart.me/hireme/
+
+ This is a placeholder image. Please contact me for the version with the real picture +
+

DAVID TIMBER

+ "Linux monkey" +

+ 🖅 dxdt 𝕒𝕥 dev.snart.me + 📌 Worldwide +

+
+

SUMMARY

+
+

+ Linux and network engineering enthusiast with 4 years of professional experience as a backend and embedded programmer. +

+ +
+

HISTORY

+
+

+

Danusys Co., Ltd.

2013 ~ 2017 +
+ Korean local government contractor +

+ Responsibilities +
    +
  • Network, systems admin
  • +
  • Linux advisor
  • +
+ Projects +
    +
  • Computer vision algorithm
  • +
  • Windows backends port to Linux
  • +
  • Video codec research
  • +
  • Embedded systems development
  • +
  • Video Management Software(VMS) development media coverage
  • +
+ +

+

Change of scenery

2017 ~ +

+ Time in Australia ~ 2023 + article1 + article2 +
    +
  • Machine operating
  • +
  • Truck driving
  • +
+
+

EDUCATION

+
+

PCM High School

+ ~ 2013 +
    +
  • + Robotics Competition Club + video1 + video2 +
  • +
  • English Club
  • +
  • School tech support team
  • +
+
+

QUALIFICATIONS

+
+
    +
  • International: IETLS 7.0
  • +
  • Australian: Multi Combination (MC), Forklift, First Aid, Boom Lift
  • +
  • Korean: Craftsman Information Processing, Network Administration, Word Processing
  • +
+
+ + + \ No newline at end of file diff --git a/davo-cv/portfolio/img/Luxriot-Monitor-Playback-1.webp b/davo-cv/portfolio/img/Luxriot-Monitor-Playback-1.webp new file mode 100644 index 0000000..628444c Binary files /dev/null and b/davo-cv/portfolio/img/Luxriot-Monitor-Playback-1.webp differ diff --git a/davo-cv/portfolio/img/camsite-kr-0.webp b/davo-cv/portfolio/img/camsite-kr-0.webp new file mode 100644 index 0000000..ff63142 Binary files /dev/null and b/davo-cv/portfolio/img/camsite-kr-0.webp differ diff --git a/davo-cv/portfolio/img/camsite-kr-1.webp b/davo-cv/portfolio/img/camsite-kr-1.webp new file mode 100644 index 0000000..2378bc3 Binary files /dev/null and b/davo-cv/portfolio/img/camsite-kr-1.webp differ diff --git a/davo-cv/portfolio/img/camsite-sv-0.webp b/davo-cv/portfolio/img/camsite-sv-0.webp new file mode 100644 index 0000000..b387c62 Binary files /dev/null and b/davo-cv/portfolio/img/camsite-sv-0.webp differ diff --git a/davo-cv/portfolio/img/camsite-wa-0.webp b/davo-cv/portfolio/img/camsite-wa-0.webp new file mode 100644 index 0000000..ecab05d Binary files /dev/null and b/davo-cv/portfolio/img/camsite-wa-0.webp differ diff --git a/davo-cv/portfolio/img/camsite-wa-1.webp b/davo-cv/portfolio/img/camsite-wa-1.webp new file mode 100644 index 0000000..4a7f3db Binary files /dev/null and b/davo-cv/portfolio/img/camsite-wa-1.webp differ diff --git a/davo-cv/portfolio/img/codec-research.webp b/davo-cv/portfolio/img/codec-research.webp new file mode 100644 index 0000000..969de73 Binary files /dev/null and b/davo-cv/portfolio/img/codec-research.webp differ diff --git a/davo-cv/portfolio/img/codec-research.xcf b/davo-cv/portfolio/img/codec-research.xcf new file mode 100644 index 0000000..1f3672f Binary files /dev/null and b/davo-cv/portfolio/img/codec-research.xcf differ diff --git a/davo-cv/portfolio/img/codec-research/chip-cpu.svg b/davo-cv/portfolio/img/codec-research/chip-cpu.svg new file mode 100644 index 0000000..1dc8b5c --- /dev/null +++ b/davo-cv/portfolio/img/codec-research/chip-cpu.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/davo-cv/portfolio/img/codec-research/color-adjustement-mode-channels.svg b/davo-cv/portfolio/img/codec-research/color-adjustement-mode-channels.svg new file mode 100644 index 0000000..5502e1e --- /dev/null +++ b/davo-cv/portfolio/img/codec-research/color-adjustement-mode-channels.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/davo-cv/portfolio/img/codec-research/display-material-3.svg b/davo-cv/portfolio/img/codec-research/display-material-3.svg new file mode 100644 index 0000000..b0af631 --- /dev/null +++ b/davo-cv/portfolio/img/codec-research/display-material-3.svg @@ -0,0 +1,17 @@ + + + + + + + + + + \ No newline at end of file diff --git a/davo-cv/portfolio/img/codec-research/file.svg b/davo-cv/portfolio/img/codec-research/file.svg new file mode 100644 index 0000000..3a24946 --- /dev/null +++ b/davo-cv/portfolio/img/codec-research/file.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/davo-cv/portfolio/img/codec-research/imx.webp b/davo-cv/portfolio/img/codec-research/imx.webp new file mode 100644 index 0000000..19c3698 Binary files /dev/null and b/davo-cv/portfolio/img/codec-research/imx.webp differ diff --git a/davo-cv/portfolio/img/codec-research/outline-ram-red.svg b/davo-cv/portfolio/img/codec-research/outline-ram-red.svg new file mode 100644 index 0000000..a09d803 --- /dev/null +++ b/davo-cv/portfolio/img/codec-research/outline-ram-red.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/davo-cv/portfolio/img/codec-research/picture.svg b/davo-cv/portfolio/img/codec-research/picture.svg new file mode 100644 index 0000000..bced148 --- /dev/null +++ b/davo-cv/portfolio/img/codec-research/picture.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/davo-cv/portfolio/img/codec-research/scale-03.svg b/davo-cv/portfolio/img/codec-research/scale-03.svg new file mode 100644 index 0000000..abdf721 --- /dev/null +++ b/davo-cv/portfolio/img/codec-research/scale-03.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/davo-cv/portfolio/img/codec-research/video-card.svg b/davo-cv/portfolio/img/codec-research/video-card.svg new file mode 100644 index 0000000..afe1385 --- /dev/null +++ b/davo-cv/portfolio/img/codec-research/video-card.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/davo-cv/portfolio/img/codec-traditional.webp b/davo-cv/portfolio/img/codec-traditional.webp new file mode 100644 index 0000000..9409179 Binary files /dev/null and b/davo-cv/portfolio/img/codec-traditional.webp differ diff --git a/davo-cv/portfolio/img/codec-traditional.xcf b/davo-cv/portfolio/img/codec-traditional.xcf new file mode 100644 index 0000000..430d77b Binary files /dev/null and b/davo-cv/portfolio/img/codec-traditional.xcf differ diff --git a/davo-cv/portfolio/img/danusys-prism-animated.webp b/davo-cv/portfolio/img/danusys-prism-animated.webp new file mode 100644 index 0000000..de0153f Binary files /dev/null and b/davo-cv/portfolio/img/danusys-prism-animated.webp differ diff --git a/davo-cv/portfolio/img/danusys-prism.xcf b/davo-cv/portfolio/img/danusys-prism.xcf new file mode 100644 index 0000000..9e32371 Binary files /dev/null and b/davo-cv/portfolio/img/danusys-prism.xcf differ diff --git a/davo-cv/portfolio/img/danusys-prism/13cameras4-superJumbo.jpg b/davo-cv/portfolio/img/danusys-prism/13cameras4-superJumbo.jpg new file mode 100644 index 0000000..5bbdb09 Binary files /dev/null and b/davo-cv/portfolio/img/danusys-prism/13cameras4-superJumbo.jpg differ diff --git a/davo-cv/portfolio/img/danusys-prism/q8752e-zoom-left-2006.png b/davo-cv/portfolio/img/danusys-prism/q8752e-zoom-left-2006.png new file mode 100644 index 0000000..9517732 Binary files /dev/null and b/davo-cv/portfolio/img/danusys-prism/q8752e-zoom-left-2006.png differ diff --git a/davo-cv/portfolio/img/danusys-prism_pipeline-0.webp b/davo-cv/portfolio/img/danusys-prism_pipeline-0.webp new file mode 100644 index 0000000..c3ac568 Binary files /dev/null and b/davo-cv/portfolio/img/danusys-prism_pipeline-0.webp differ diff --git a/davo-cv/portfolio/img/danusys-prism_pipeline-0.xcf b/davo-cv/portfolio/img/danusys-prism_pipeline-0.xcf new file mode 100644 index 0000000..d83469b Binary files /dev/null and b/davo-cv/portfolio/img/danusys-prism_pipeline-0.xcf differ diff --git a/davo-cv/portfolio/img/danusys-prism_pipeline-1.webp b/davo-cv/portfolio/img/danusys-prism_pipeline-1.webp new file mode 100644 index 0000000..c29fd37 Binary files /dev/null and b/davo-cv/portfolio/img/danusys-prism_pipeline-1.webp differ diff --git a/davo-cv/portfolio/img/danusys-prism_pipeline-1.xcf b/davo-cv/portfolio/img/danusys-prism_pipeline-1.xcf new file mode 100644 index 0000000..b533c8b Binary files /dev/null and b/davo-cv/portfolio/img/danusys-prism_pipeline-1.xcf differ diff --git a/davo-cv/portfolio/img/danusys-sys-arch.webp b/davo-cv/portfolio/img/danusys-sys-arch.webp new file mode 100644 index 0000000..4d25038 Binary files /dev/null and b/davo-cv/portfolio/img/danusys-sys-arch.webp differ diff --git a/davo-cv/portfolio/img/danusys-sys-arch.xcf b/davo-cv/portfolio/img/danusys-sys-arch.xcf new file mode 100644 index 0000000..c9e5dc6 Binary files /dev/null and b/davo-cv/portfolio/img/danusys-sys-arch.xcf differ diff --git a/davo-cv/portfolio/img/danusys-sys-arch/car.svg b/davo-cv/portfolio/img/danusys-sys-arch/car.svg new file mode 100644 index 0000000..06764cf --- /dev/null +++ b/davo-cv/portfolio/img/danusys-sys-arch/car.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/davo-cv/portfolio/img/danusys-sys-arch/cctv.svg b/davo-cv/portfolio/img/danusys-sys-arch/cctv.svg new file mode 100644 index 0000000..e04ce4c --- /dev/null +++ b/davo-cv/portfolio/img/danusys-sys-arch/cctv.svg @@ -0,0 +1,6 @@ + + + +cctv + + \ No newline at end of file diff --git a/davo-cv/portfolio/img/danusys-sys-arch/fight.svg b/davo-cv/portfolio/img/danusys-sys-arch/fight.svg new file mode 100644 index 0000000..56902f4 --- /dev/null +++ b/davo-cv/portfolio/img/danusys-sys-arch/fight.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/davo-cv/portfolio/img/danusys-sys-arch/fire.svg b/davo-cv/portfolio/img/danusys-sys-arch/fire.svg new file mode 100644 index 0000000..d45ac09 --- /dev/null +++ b/davo-cv/portfolio/img/danusys-sys-arch/fire.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/davo-cv/portfolio/img/danusys-sys-arch/monitor-tv.svg b/davo-cv/portfolio/img/danusys-sys-arch/monitor-tv.svg new file mode 100644 index 0000000..375d732 --- /dev/null +++ b/davo-cv/portfolio/img/danusys-sys-arch/monitor-tv.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/davo-cv/portfolio/img/danusys-sys-arch/server-minimalistic.svg b/davo-cv/portfolio/img/danusys-sys-arch/server-minimalistic.svg new file mode 100644 index 0000000..28e9811 --- /dev/null +++ b/davo-cv/portfolio/img/danusys-sys-arch/server-minimalistic.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/davo-cv/portfolio/img/danusys-sys-arch/server-rack.svg b/davo-cv/portfolio/img/danusys-sys-arch/server-rack.svg new file mode 100644 index 0000000..d5ca6d2 --- /dev/null +++ b/davo-cv/portfolio/img/danusys-sys-arch/server-rack.svg @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/davo-cv/portfolio/img/danusys-sys-arch/walking.svg b/davo-cv/portfolio/img/danusys-sys-arch/walking.svg new file mode 100644 index 0000000..67f41c7 --- /dev/null +++ b/davo-cv/portfolio/img/danusys-sys-arch/walking.svg @@ -0,0 +1,2 @@ + + Walking \ No newline at end of file diff --git a/davo-cv/portfolio/img/gis.webp b/davo-cv/portfolio/img/gis.webp new file mode 100644 index 0000000..54006ef Binary files /dev/null and b/davo-cv/portfolio/img/gis.webp differ diff --git a/davo-cv/portfolio/index.md b/davo-cv/portfolio/index.md new file mode 100644 index 0000000..a5c6260 --- /dev/null +++ b/davo-cv/portfolio/index.md @@ -0,0 +1,301 @@ +# Davo's Portfolio +*This is part of [Davo's resume](https://cdn.snart.me/hireme/). This is a living +document. Revision: 0* + +Dear human readers, + +In this era of ATS and AI, I cannot thank you enough for taking your valuable +time to have a look at my portfolio. Here, I present you my best efforts to +showcase my work experience in simple terms for both non-technical and technical +audience. I hope you enjoy. + +(c) 2025 David Timber + +## Keywords +C/C++ dev, sysadmin, network engineering + +Linux, OpenWrt, Qt, MSVC++, MFC, WinAPI, ffmpeg, OpenCV, OpenGL, DirectX, WebGL + +Embedded development, kernel development, React, ReactNative, Unity + +WebRTC, real-time streaming/processing, web development, frontend, backend + +AWS, GCP, Azure, Orchestration, Ansible, Docker, CD/CI(Github, Gitlab), libvirt + +## Language Skills +| Expert | Good/average | Good/average but rather not use it | +| - | - | - | +| C, Python, Shell | C++, PHP, Basic, CSS, SQL | Javascript, Java | + +## Danusys +In Korea, video surveillance is a multi-million dollar industry. Danusys has had +a fair share of the market since 2007 a contractor for multiple municipal +government across South Korea. + +wa +stockholm + +boannews.com + + +dailycc.net + + +### System architecture +https://www.datapanik.org/wp-content/uploads/CCTV-Cameras-by-City-and-Country.pdf + + +GIS showing camera locations(screenshot) + + +A usual metropolitan city council operates 10k+ fixed camera sites. Over the +dark fibre network, the video streams are relayed to the city council data +centre, where the video streams are stored and monitored by the operators. + +A massive amount of data has to be transferred, processed, stored in real-time. +Numerous contractors are involved to build the infrastructure required. Multiple +technologies, including ones home-brewed by Danusys, are employed to overcome +many engineering challenge to build such systems. + +Simplified architecture diagram + +Simplified diagram of Danusys VMS architecture + +*(This is a typical architecture of any VMS solution. The actual product names +are replaced with generic tech industry jargons to avoid breach of NDA.)* + +#### Edge Node +The video streams from multiple cameras are gathered on the edge node. A +specialty hardware is used where the cameras are traditional analogue cameras to +transcode the footage to modern encodings like H264 and HEVC. The video streams +are encapsulated in one unified internal protocol for ease of processing, +transport, and storage. The edge node is responsible for (but not limited to): + +- Relaying streams to the data centre +- Processing footage and decision making in real-time + - Track moving objects using [PTZ camera](https://en.wikipedia.org/wiki/Pan%E2%80%93tilt%E2%80%93zoom_camera) + - Alerting the command centre and sounding alarms in case of events + - Facial recognition and [ANPR](https://en.wikipedia.org/wiki/Automatic_number-plate_recognition) (where required) +- Storing video + +Due to RTT(round-trip time), "edge computing"(a technique that's been +popularised recently) is employed. The edge nodes are often equipped with +sufficient computing power to processing video in real-time. The edge nodes +operate autonomously(without the need to communicate to the data centre) to +issue commands to the PTZ cameras and other peripheral devices. The edge nodes +are also capable of storing video on site so that no data is lost during link +failure. + +#### Stream Relay Agent +The data link between the camera sites and the local government's data centre is +often limited and unstable. To prevent network overload, real-time streams are +relayed to the data centre where they're duplicated for other purposes such as +storage, further analysis, and manual monitoring by human operators. + +The Stream Relay Agent also features conversion from and to standard streaming +format(RTP/RTSP) and vendor-specific proprietary streaming protocols. + +#### Stream Store Agent +To implement the [3-2-1 rule](https://www.seagate.com/gb/en/blog/what-is-a-3-2-1-backup-strategy/), +a backend program that stores data relayed from the stream relay agent runs on +the servers at the data centre. The servers are backed by enterprise data +storage(SAN, directly attached SCSI HDDs). The agents are responsible for +storing data for the duration required by local legislation(30 days in Korea) +and deletion of data. + +The operators can use the front apps to access data stored on the store agents +to search and view stored videos and events. + +#### Master Control Plane Server +The master control plane server is a program that supervises overall operation. +The operation includes: + +- Access control: user authentication and authorization +- Distribution of centralised configurations to all backend and frontend nodes +- Enforcing site-specific policies +- Other stateful functionality: scheduled tasks, pre-programmed logic and + behaviour set by site operators + +As the server is a crucial component of the system, the server is hosted on +hardware with additional redundancies. The server also features active-backup +failover. + +#### Front GUI Apps +Typical VMS front app + +Multiple front-end apps are developed for client's use cases. The apps can be +categorised in these feature groups: + +- Control Plane Manager: talks directly to the master control plane server, used + to configure site-wide settings +- Operator Software: used by command center operators and other external + stakeholders, including police dept., defense agents, city maintenance + contractors + - Viewer for live and stored stream + - Search engine for stored data +- Diagnostics tools for experts and devs + +### My Involvement +Building such a complex software architecture requires a team effort. The +following highlights my involvement and achievement during my time with Danusys. + +#### Edge Node +- General maintenance +- Complete rewrite of the existing vision algorithm (detailed in later section) +- Other performance improvements in video decoding, memory management + +#### Server Products +- Porting existing Windows server products to Linux +- Linux tech support +- Embedded Linux dev + +#### Codec Research +(detailed in later section) + +#### Network and Systems Administration +- HQ office net admin, sysadmin +- Site net admin support + +--- + +### Computer Vision R&D + + + +- **Project duration**: 1.5 years +- **Written in**: C++ +- **Platforms**: Windows, Unix-like + +The following diagram illustrates the pipeline of the computer vision algorithm +module for object detection and tracking I myself, under the supervision senior +devs, developed from scratch. + + + +Live video streams are decoded on the edge node and fed to the pipeline for +analysis. The estimated background image constantly gets updated by input +frames. The generated background image is then diff'd against the latest frame +to extract foreground objects. The object association model then takes the +extracted foreground object as input to associate them with the objects appeared +in the previous frames to make the best model of the object's characteristics +including travel path, direction, speed, and type of object. + +The information is then consumed by other modules to perform various tasks, +including, but not limited to: + +- PTZ tracking +- Preset events e.g. intrusion, loitering +- AI models, facial/plate recognition + + + + + +The module is an amalgamation of several algorithms from various papers +optimised for real-time performance and memory footprint. The module is still in +use county-wide. + +### Media Codec Research + + +- **Project duration**: 6 months +- **Written in**: C++ +- **Platforms**: Windows, Linux + +Media codecs are one of the critical components of the VMS solutions. New +encoding standards are release every decade whilst numerous old cameras are +stuck with legacy video encoding. Some camera vendors insist on supporting their +own proprietary video encoding only to circumvent patent and +[licence fee](https://en.wikipedia.org/wiki/MPEG_LA) issues. + +It's not unusual for a VMS solutions to support more than 20+ different video +and audio encodings. This calls for a good codec abstraction layers to keep the +software maintainability at bay. + +I was tasked to bring the codec abstraction and APIs up to the modern standard. + +#### Hardware accelerated codec + + +Another engineering challenge for the front apps is the large number of +real-time video streams to decode simultaneously. Mid 2010 was when Intel, AMD +and Nvidia started to embed ASIC video codec in the silicon die. Historically, +the VMS apps had to rely soley on software-based decoding. Modern CPUs and GPUs +are now capable of decoding 2-3 1080p streams at the same time. By utilising all +of the hardware codecs in the CPU and GPU on a regular PC, some of the load +required for video decoding can be offloaded to ASIC decoders. To put things in +perspective, in a 4x4 viewing configuration, 5-6 out of 16 streams could be +offloaded. + +Software-based codecs suffer from memory bandwidth starvation since fully +decoded frames need to be transferred back and forth before they can be +displayed: + +1. Decoding: encoded 264/HEVC data from memory to full YUV picture to memory +1. Scaling: full YUV picture from memory to scaled down/up RGB picture to memory +1. Rendering: RGB picture from memory to VRAM framebuffer + +Some optimisations can help skip the step 2, but there still remains the problem +of having to transfer full 1080p frames 30 times per second through the PCIe +bus. ASIC codecs provide what's called "zero-copy" solution, in which encoded +frames are copied to the VRAM where they are decoded directly to the frame +buffer. + +#### SoC codec + + +There was a brief period when the company endeavoured the venture into the +consumer NVR market in effort of diversifying the B2G portfolio. This meant the +development of a low-cost SoC based NVR. + +Many video surveillance companies are faced with the same problem and constantly +try to break free from government funding by venturing into the consumer market. +The major issue is the scale of the domestic market and the fact that the global +market is dominated by cheap Chinese and Taiwanese brands. + +Although the product never saw the light of day, my expertise was required for +the development of the product. I added SoC codec support and ported all the +backend daemons and frontend apps. + +## Hobbyist years +### Failed video game project +2018 + +https://youtu.be/PaBgZEkTaFw?si=rI-nD-GpPrW28bEL + +### "Proone" Research Linux Worm Virus +2019 - 2022 + +https://github.com/dxdxdt/proone + +### Book: "Dev Log" +Deep dive into network engineering(work in progress). + +## Open source project contributions +| project | what | url | +|-|-|-| +| http-server | -H/--header option in line with curl(1) | https://github.com/http-party/http-server/pull/887 | +| NetworkManager | Bug fix: default route pushed RIO(Router Information Option, RFC 4191) in IPv6 RA not honoured | https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1666 | +| TP-Link C20-v5 OpenWrt port | OpenWrt port for TP-Link Archer C20 v5, a cheap router found in Australian consumer retail | https://github.com/dxdxdt/tp-link_c20-v5.dev | -- cgit