From 658cd2744098c810210d7c9cafccc2093a285b0e Mon Sep 17 00:00:00 2001 From: "Jakob L. Kreuze" Date: Sun, 1 Jun 2025 06:13:43 -0400 Subject: [org] Updates to about pages --- data/bookmarks.scm | 12 ++ jakob/reader/org-mode.scm | 167 +------------------------ jakob/utils/org-mode.scm | 189 ++++++++++++++++++++++++++++ pages/about-complete.org | 308 +++++++++++++++++++--------------------------- pages/about.org | 24 ++-- 5 files changed, 344 insertions(+), 356 deletions(-) create mode 100644 jakob/utils/org-mode.scm diff --git a/data/bookmarks.scm b/data/bookmarks.scm index d1fbfdf..3da01cc 100644 --- a/data/bookmarks.scm +++ b/data/bookmarks.scm @@ -18,6 +18,15 @@ "security" "video" "video-games")) + ("Tony Hawk’s Pro Strcpy – I Code 4 Coffee" + "https://icode4.coffee/?p=954" + ("binary-exploitation" + "game-hacking" + "x86" + "xbox" + "security" + "video" + "video-games")) ("Disassembling Jak & Daxter" "http://www.codersnotes.com/notes/disassembling-jak/" ("lisp" @@ -73,6 +82,9 @@ ("Reverse Engineering the source code of the BioNTech/Pfizer SARS-CoV-2 Vaccine" "https://berthub.eu/articles/posts/reverse-engineering-source-code-of-the-biontech-pfizer-vaccine/" ("biology" "reversing")) + ("Reverse Engineering TicketMaster's Rotating Barcodes (SafeTix)" + "https://conduition.io/coding/ticketmaster/" + ("reversing")) ("Modifying Telegram's \"People Nearby\" feature to pinpoint people's homes" "https://owlspace.xyz/cybersec/tg-nearby/" ("security") diff --git a/jakob/reader/org-mode.scm b/jakob/reader/org-mode.scm index b55dbf3..3cb8da9 100644 --- a/jakob/reader/org-mode.scm +++ b/jakob/reader/org-mode.scm @@ -14,175 +14,16 @@ ;;; along with this program. If not, see ;;; . -;;; Commentary: ;;; -;;; Reader for Org syntax which invokes `org-export' via the Emacs daemon for -;;; rendering and metadata extraction. -;;; -;;; The choice to leverage Emacs, rather than writing a parser in Guile, was -;;; made because it enabled us to leverage other Emacs facilities such as -;;; `font-lock' and `htmlize' for syntax highlighting. +;;; Haunt reader for Org documents. ;;; ;;; Code: (define-module (jakob reader org-mode) #:use-module (haunt reader) - #:use-module (ice-9 match) - #:use-module (ice-9 popen) - #:use-module (ice-9 textual-ports) - #:use-module (jakob utils) - #:use-module (srfi srfi-1) - #:use-module (srfi srfi-19) - #:use-module (srfi srfi-26) - #:use-module (srfi-197) - #:use-module (sxml simple) - #:export (render-org-mode-file - extract-org-mode-metadata - org-mode-reader)) - -;; Directory to store cached artifacts in. -;; -;; Caching is disabled if this is `#f'. -(define %cache-directory - (make-parameter (if (getenv "HAUNT_ORG_READER_DISABLE_CACHE") - #f - (or (getenv "HAUNT_ORG_READER_CACHE_DIR") - "./.org-mode-reader-cache/")))) - -;; File name of Elisp script to execute before anything else -(define %additional-emacs-preamble - (make-parameter (getenv "HAUNT_ORG_READER_EMACS_PREAMBLE"))) - -;; Additional Org-mode keywords to include in the extracted metadata. -(define %additional-keys - (make-parameter '("CROSSPOST" "SCRIPTS" "META-TAGS"))) - -;; Whether to use a running Emacs daemon to evaluate elisp forms. -(define %use-emacsclient - (make-parameter (getenv "HAUNT_ORG_READER_USE_EMACSCLIENT"))) - -(define (eval-in-emacs form) - "Evaluate s-exp FORM in Emacs and return the result - -If `%use-emacsclient' is truthy, evaluate FORM in the current running Emacs -daemon. Assumes that FORM does not write to `standard-output'." - (let* (;; If `HAUNT_ORG_READER_PREAMBLE' is specified, load that. - (form (if (%additional-emacs-preamble) - `(progn - (load-file ,(%additional-emacs-preamble)) - ,form) - form)) - ;; We need to explicitly request that Emacs write the result if using - ;; Emacs batch mode (which is how we evaluate forms without - ;; `emacsclient'.) - (form (if (not (%use-emacsclient)) - `(print ,form) - form)) - (stringified (call-with-output-string (cut write form <>))) - (port (if (%use-emacsclient) - (open-pipe* OPEN_READ "emacsclient" "-e" stringified) - (open-pipe* OPEN_READ "emacs" "--batch" "--eval" stringified))) - (result (read port)) - ;; The symbol `nil' doesn't have the same semantics in Scheme, so we'll - ;; convert it to the empty list. - (result (if (eqv? result 'nil) - '() - result))) - (if (eqv? 0 (status:exit-val (close-pipe port))) - result - (error "could not eval" form)))) - -(define (render-org-mode-file file-name) - "Export FILE-NAME as an HTML document string" - (define output-file-name (tmpnam)) - (define result - (eval-in-emacs - `(save-excursion - (load-file "./emacs-htmlize/htmlize.el") - (setq org-html-htmlize-output-type 'css) - (let ((enable-local-variables :all)) - (set-buffer (find-file-noselect ,file-name))) - (setq-local org-export-filter-latex-fragment-functions - (list (lambda (data backend channel) - (org-html-encode-plain-text data)))) - (let ((result (org-export-as 'html nil nil t))) - (with-temp-buffer - (insert result) - (write-region (point-min) (point-max) ,output-file-name)))))) - (define parsed (call-with-input-file output-file-name get-string-all)) - (delete-file output-file-name) - ;; We wrap in a `div' because when we call `xml->sxml' later on in - ;; `read-org-mode-post-fresh', it is expecting a single element. - (format #f "
~a
" parsed)) - -(define (extract-org-mode-metadata-raw file-name) - (map (match-lambda - ((key value) `(,(string->symbol (string-downcase key)) . ,value))) - (eval-in-emacs - `(save-excursion - (let ((enable-local-variables :all)) - (set-buffer (find-file-noselect ,file-name))) - (org-collect-keywords ',(append '("TITLE" "DATE" "TAGS") - (%additional-keys))))))) - -(define (parse-metadata metadata-alist) - (chain metadata-alist - (assq-map! _ 'date (cut string->date <> "<~Y-~m-~d ~a ~H:~M>")) - (assq-map! _ 'tags (cut string-split <> #\space)))) - -;; This is the public-facing interface. Because dates aren't serializable with -;; `write', the internal interface has extraction and parsing broken out into -;; separate procedures. -(define (extract-org-mode-metadata file-name) - "Parse the metadata out of FILE-NAME as an alist" - (chain file-name - (extract-org-mode-metadata-raw _) - (parse-metadata _))) - -(define (metadata-file-name hash) - (string-append (%cache-directory) - file-name-separator-string - hash - "-metadata")) -(define (sxml-file-name hash) - (string-append (%cache-directory) - file-name-separator-string - hash - "-sxml")) - -(define (read-org-mode-post-cached hash) - (values (parse-metadata (call-with-input-file (metadata-file-name hash) read)) - (call-with-input-file (sxml-file-name hash) read))) - -(define (read-org-mode-post-fresh hash file-name) - (let ((metadata (extract-org-mode-metadata-raw file-name)) - (sxml (match (call-with-input-string (render-org-mode-file file-name) xml->sxml) - (('*TOP* ('div sxml ...)) sxml)))) - (when (%cache-directory) - (call-with-output-file (metadata-file-name hash) (cut write metadata <>)) - (call-with-output-file (sxml-file-name hash) (cut write sxml <>))) - (values (parse-metadata metadata) sxml))) - -(define (read-org-mode-post file-name) - (define hash - (let* ((port (open-pipe* OPEN_READ "md5sum" file-name)) - (result (string-trim-both (get-string-all port)))) - (unless (eqv? 0 (status:exit-val (close-pipe port))) - (error "cannot hash file")) - (first (string-split result #\ )))) - (when (%cache-directory) - (cond ((and (file-exists? (%cache-directory)) - (not (eqv? 'directory (stat:type (stat (%cache-directory)))))) - (error "cache directory exists but is not a directory" - (%cache-directory))) - ((not (file-exists? (%cache-directory))) - (mkdir (%cache-directory))))) - (if (and (%cache-directory) - (file-exists? (metadata-file-name hash)) - (file-exists? (sxml-file-name hash))) - (read-org-mode-post-cached hash) - (read-org-mode-post-fresh hash file-name))) + #:use-module (jakob utils org-mode) + #:export (org-mode-reader)) (define org-mode-reader (make-reader (make-file-extension-matcher "org") - read-org-mode-post)) + read-org-mode-file)) diff --git a/jakob/utils/org-mode.scm b/jakob/utils/org-mode.scm new file mode 100644 index 0000000..fdaaa06 --- /dev/null +++ b/jakob/utils/org-mode.scm @@ -0,0 +1,189 @@ +;;; Copyright © 2019 - 2024 Jakob L. Kreuze +;;; +;;; This program is free software; you can redistribute it and/or +;;; modify it under the terms of the GNU General Public License as +;;; published by the Free Software Foundation; either version 3 of the +;;; License, or (at your option) any later version. +;;; +;;; This program is distributed in the hope that it will be useful, +;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with this program. If not, see +;;; . + +;;; Commentary: +;;; +;;; Parser for Org syntax which invokes `org-export' via the Emacs daemon for +;;; rendering and metadata extraction. +;;; +;;; The choice to leverage Emacs, rather than writing a parser in Guile, was +;;; made because it enabled us to leverage other Emacs facilities such as +;;; `font-lock' and `htmlize' for syntax highlighting. +;;; +;;; Code: + +(define-module (jakob utils org-mode) + #:use-module (ice-9 match) + #:use-module (ice-9 popen) + #:use-module (ice-9 textual-ports) + #:use-module (jakob utils) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-19) + #:use-module (srfi srfi-26) + #:use-module (srfi-197) + #:use-module (sxml simple) + #:export (%additional-keys + read-org-mode-file)) + +;; Directory to store cached artifacts in. +;; +;; Caching is disabled if this is `#f'. +(define %cache-directory + (make-parameter (if (getenv "HAUNT_ORG_READER_DISABLE_CACHE") + #f + (or (getenv "HAUNT_ORG_READER_CACHE_DIR") + "./.org-mode-reader-cache/")))) + +;; File name of Elisp script to execute before anything else +(define %additional-emacs-preamble + (make-parameter (getenv "HAUNT_ORG_READER_EMACS_PREAMBLE"))) + +;; Additional Org-mode keywords to include in the extracted metadata. +(define %additional-keys + (make-parameter '("CROSSPOST" "SCRIPTS" "META-TAGS"))) + +;; Whether to use a running Emacs daemon to evaluate elisp forms. +(define %use-emacsclient + (make-parameter (getenv "HAUNT_ORG_READER_USE_EMACSCLIENT"))) + +(define (htmlize-path) + (string-append (dirname (current-filename)) "../../../emacs-htmlize/htmlize.el")) + +(define (eval-in-emacs form) + "Evaluate s-exp FORM in Emacs and return the result + +If `%use-emacsclient' is truthy, evaluate FORM in the current running Emacs +daemon. Assumes that FORM does not write to `standard-output'." + (let* (;; If `HAUNT_ORG_READER_PREAMBLE' is specified, load that. + (form (if (%additional-emacs-preamble) + `(progn + (load-file ,(%additional-emacs-preamble)) + ,form) + form)) + ;; We need to explicitly request that Emacs write the result if using + ;; Emacs batch mode (which is how we evaluate forms without + ;; `emacsclient'.) + (form (if (not (%use-emacsclient)) + `(print ,form) + form)) + (stringified (call-with-output-string (cut write form <>))) + (port (if (%use-emacsclient) + (open-pipe* OPEN_READ "emacsclient" "-e" stringified) + (open-pipe* OPEN_READ "emacs" "--batch" "--eval" stringified))) + (result (read port)) + ;; The symbol `nil' doesn't have the same semantics in Scheme, so we'll + ;; convert it to the empty list. + (result (if (eqv? result 'nil) + '() + result))) + (if (eqv? 0 (status:exit-val (close-pipe port))) + result + (error "could not eval" form)))) + +(define (render-org-mode-file file-name) + "Export FILE-NAME as an HTML document string" + (define output-file-name (tmpnam)) + (define result + (eval-in-emacs + `(save-excursion + (load-file ,(htmlize-path)) + (setq org-html-htmlize-output-type 'css) + (setq enable-local-variables :all) + (set-buffer (find-file-noselect ,file-name)) + ;; (let ((enable-local-variables :all)) + ;; (set-buffer (find-file-noselect ,file-name))) + (setq-local org-export-filter-latex-fragment-functions + (list (lambda (data backend channel) + (org-html-encode-plain-text data)))) + (org-mode) + (let ((result (org-export-as 'html nil nil t))) + (with-temp-buffer + (insert result) + (write-region (point-min) (point-max) ,output-file-name)))))) + (define parsed (call-with-input-file output-file-name get-string-all)) + (delete-file output-file-name) + ;; We wrap in a `div' because when we call `xml->sxml' later on in + ;; `read-org-mode-file-fresh', it is expecting a single element. + (format #f "
~a
" parsed)) + +(define (extract-org-mode-metadata-raw file-name) + (map (match-lambda + ((key value) `(,(string->symbol (string-downcase key)) . ,value))) + (eval-in-emacs + `(save-excursion + (let ((enable-local-variables :all)) + (set-buffer (find-file-noselect ,file-name))) + (org-mode) + (org-collect-keywords ',(append '("TITLE" "DATE" "TAGS") + (%additional-keys))))))) + +(define (parse-metadata metadata-alist) + (chain metadata-alist + (assq-map! _ 'date (cut string->date <> "<~Y-~m-~d ~a ~H:~M>")) + (assq-map! _ 'tags (cut string-split <> #\space)))) + +;; This is the public-facing interface. Because dates aren't serializable with +;; `write', the internal interface has extraction and parsing broken out into +;; separate procedures. +(define (extract-org-mode-metadata file-name) + "Parse the metadata out of FILE-NAME as an alist" + (chain file-name + (extract-org-mode-metadata-raw _) + (parse-metadata _))) + +(define (metadata-file-name hash) + (string-append (%cache-directory) + file-name-separator-string + hash + "-metadata")) +(define (sxml-file-name hash) + (string-append (%cache-directory) + file-name-separator-string + hash + "-sxml")) + +(define (read-org-mode-file-cached hash) + (values (parse-metadata (call-with-input-file (metadata-file-name hash) read)) + (call-with-input-file (sxml-file-name hash) read))) + +(define (read-org-mode-file-fresh hash file-name) + (let ((metadata (extract-org-mode-metadata-raw file-name)) + (sxml (match (call-with-input-string (render-org-mode-file file-name) xml->sxml) + (('*TOP* ('div sxml ...)) sxml)))) + (when (%cache-directory) + (call-with-output-file (metadata-file-name hash) (cut write metadata <>)) + (call-with-output-file (sxml-file-name hash) (cut write sxml <>))) + (values (parse-metadata metadata) sxml))) + +(define (read-org-mode-file file-name) + (define hash + (let* ((port (open-pipe* OPEN_READ "md5sum" file-name)) + (result (string-trim-both (get-string-all port)))) + (unless (eqv? 0 (status:exit-val (close-pipe port))) + (error "cannot hash file")) + (first (string-split result #\ )))) + (when (%cache-directory) + (cond ((and (file-exists? (%cache-directory)) + (not (eqv? 'directory (stat:type (stat (%cache-directory)))))) + (error "cache directory exists but is not a directory" + (%cache-directory))) + ((not (file-exists? (%cache-directory))) + (mkdir (%cache-directory))))) + (if (and (%cache-directory) + (file-exists? (metadata-file-name hash)) + (file-exists? (sxml-file-name hash))) + (read-org-mode-file-cached hash) + (read-org-mode-file-fresh hash file-name))) diff --git a/pages/about-complete.org b/pages/about-complete.org index 56562c3..a1832ae 100644 --- a/pages/about-complete.org +++ b/pages/about-complete.org @@ -1,214 +1,158 @@ -#+TITLE: About me. - -* About me. - -My name is Jakob Kreuze (/​ˈdʒeɪkəbˈkɹuz/ and /​ˈjaːkɔp ˈkʁɔʏ̯tsə/ are both acceptable pronunciations). I'm a 24 year-old living in the National Capital Region. I received my B.Sc. in Computer Science and Mathematics from the University of Massachusetts in 2021, and my M.Sc. in Computer Science from Brown University in 2024. Nowadays, I am a civil servant, and my role is in Computer Network Defense (CND). Previously, I was a software engineer and led several teams in designing software libraries and development environments to support use-cases involving [[https://en.wikipedia.org/wiki/Multilevel_security#][multilevel security]] requirements. - -My research interests are formal methods, distributed computing, symbolic execution, and signals processing. I did my undergraduate research in cryptography; the experience was gratifying and greatly influenced my career path, but I'm not especially interested in it these days. - -My free time not spent on chores or being with friends and family is spent working on personal projects, which are outlined [[https://jakob.space/pages/about.html][here]]. - -If you're interested in game engine tech, my younger brother is working on a game engine + graphics engine of his own. You can read about it on [[https://p0ly.com/][his website]]. I like to think of him as my protégé, but he's mostly self-taught. - -** My Interests - -*** (Functional) programming - -I was introduced to computer programming at an early age. My parents were given a Nintendo 64 as a wedding gift shortly before I was born, so I spent my early years playing /Ocarina of Time/ and the likes. My young, impressionable mind drew inspiration, and I would go on about how I wanted to make games of my own. My technically-apt father was able to point me in the right direction for learning to do so. - -I was writing small games in Python by the time I was ten years old, though I have little to show for it with much lost to failing hard drives. The interest waxed and waned, but picked back up significantly when I turned 14 and began using GNU/Linux. - -The renowned /Structure and Interpretation of Computer Programs/ was my introduction to functional programming, recommended by several in the "online" circle I hung around circa then. It's an excellent book, but I was not mature enough to understand it at that age. The points about higher-order functions did, however, click for me, and I was inspired to begin using the handful of functional programming tools available in Python, and to learn Common Lisp (because I thought the syntax laden with parentheses was obscure and cool). - -this was all prior to learning about the sort of object-oriented style that was taught in my ap computer science class. having to deal with that programming paradigm really cemented my opinions about why functional is the "right" way to write software. - -Nowadays, my favorite programming languages are Scheme, Haskell, and Rust. Depending on who you ask, some subset of those languages are "functional programming languages." It's not a clear-cut term, but what it means to me is an emphasis on immutability and higher-order functions. I consider all three to be functional, though Rust is somewhat of a black sheep. - -*** Computer security - -Amid my early years with computer programming, I was briefly introduced to web development and, in particular, PHP. The language has a reputation for the ease with which one can introduce security vulnerabilities, and as such, the book I was using to teach myself at the time expatiated about SQL injection, going so far as to walk the reader through an example. At eleven years old, this piqued my interest, and I soon sought out as much material on computer security as I could, showing my friends what I could do on [[https://www.hackthissite.org/][HackThisSite]]. - -I began playing capture-the-flag when I was in high school and came across LiveOverflow's [[https://yewtu.be/playlist?list=PLhixgUqwRTjxglIswKp9mpkfPNfHkzyeN][early videos]], which inspired me to play in the (now defunct) [[https://ctf-x.github.io/][CTF(x)]]. I was a team of one until I started playing with [[https://0xbu.com/blog/][0xBU]]. I was still in high school, only 16, but I noticed them on the leader-board. They were just a train ride away, so I reached out to ask if I could show up to their meetings. They said yes, so I spent most of my weekends downtown, getting good at pwning. - -In my university years, I was an e-board member of the [[https://umasscybersec.org/][UMass Cybersecurity Club]]: playing for their CTF team, and putting serious work into the CTF's we hosted. - -*** Lifting weights - -I exercise every day, barring extreme circumstances. - -#+CAPTION: Current body as of April 13, 2023. -[[./cbt-2023-04-13.jpg]] - -Sports didn't interest me when I was younger. I was signed up for soccer, and basketball, and many other after-school sports programs, but nothing stuck. - -At 13, I joined the [[https://en.wikipedia.org/wiki/Civil_Air_Patrol][Civil Air Patrol]], which changed my prior attitudes toward fitness. Now I had to pass fitness tests to promote, and I had to be in-shape for the emergency response work I was doing, so I picked up a regular exercise routine. I began with body-weight exercises and running outside, and I fell in love with it. Pushing yourself to exhaustion -- until you can barely lift your arms -- is addicting. But I was soon bored with calisthenics and begged my parents for a gym membership. I posed it as something I could do with my dad, and that's how I spent my evenings in high school. - -I don't lift competitively. I've had aspirations to over the years, but injuries have prevented me from pushing enough weight to place (herniated disk circa 2017, gluteus medius tear circa 2020). Perhaps my time will come. - -I'm selective about the fitness-related content I consume, tending to prefer folks in the "evidence-based fitness community" like Greg Nuckols, Eric Trexler, and Jeff Nippard. - -**** Regimen - -A given day is cardio xor weightlifting. It's rare that I do both on the same day. This is for the resiliency of my routine; if I know I'm going to be stuck somewhere without access to weights, I can still keep up with my routine by going outside to run. - -At the moment, I'm running the third of Jeff Nippard's "Powerbuilding System" programs, after having an exceptionally good experience with the first two. - -*** Food and Permaculture - -In spite of my deceptively trim figure, I love to cook and eat, especially when it involves unfamiliar cuisines. "Gourmand" is a term I often use when describing myself. - -I was fortunate that most of my meals growing up were homemade. It was much healthier than the alternative, and I was able to learn a lot from my parents in the kitchen. I started taking on that chore in high school with the aim of making things less stressful for my parents. Nowadays, it's practically a hobby for me. I love learning new skills and techniques, and making delicious meals to share with my friends and family. - -I especially enjoy dishes from Africa and South Asia. - -Having an adventurous palate, I'm also interested in permaculture, because it enables me to enjoy produce I would otherwise have a difficult time acquiring (like besobela, or Carolina reapers). My parents always had a garden when I was growing up, and I really enjoyed the idea of self-resiliency that's embedded in the hobby. It's been a bit difficult to grow much on my own because I currently live in an apartment, but some day I'll fulfill my dream of having a huge and varied garden just like theirs. - -*** Music - -I don't really play or write music at the moment. - -My parents signed me up for drum lessons when I was 10, and I did that until I was 18, eventually getting a summer job as a drum line instructor. I didn't have time to keep up with practicing when I went off to college. - -I tried to pick up the electric guitar in 2020 as my "pandemic hobby", but stopped a few months in because I was incredibly burned out with school and couldn't even find the five minutes to practice. - -I love to /listen/ to music, though, especially when I'm exercising or working. Old punk rock, in particular. My favorite bands are the Descendents, Black Flag, and Minor Threat. - -** Technologies I Use - -My preferred software stack: - -| Operating System | Gentoo GNU/Linux | -| initd | OpenRC | -| Shell | Bash | -| Window Manager | Awesome | -| Text Editor | GNU Emacs | -| Email Client | gnus | -| Web Browser | eww, Mozilla Firefox | -| Torrent Client | transmission | -| Keyboard Remapping | xremap | -| Version Control | git | -| Hex Editor | radare2 | -| Disassembler | Ghidra | - -Humorously, I went: awesomewm → i3 → dwm → exwm → stumpwm → awesomewm +#+TITLE: About Me +#+OPTIONS: num:nil + +#+BEGIN_EXPORT html + +#+END_EXPORT + +* People In My Life + +If you're interested in game engine tech, my younger brother is working on a game engine and graphics engine of his own. You can read about it on [[https://p0ly.com/][his website]]. I like to think of him as my protégé, but he's mostly self-taught. + +My significant other, Oli, also has a [[https://hewwo.ooo/][website built with Haunt]]. + +* Curriculum Vitae + +I currently hold a Master of Science from [[https://en.wikipedia.org/wiki/Brown_University][Brown University]] in Computer Science and a Bachelor of Science from the [[https://en.wikipedia.org/wiki/University_of_Massachusetts_Amherst][University of Massachusetts]] in Computer Science and Mathematics. + +I am not an engineer, and I am not a scientist. Perhaps I was in the past, and perhaps I will find myself in one of those roles again some day. But today, I am neither of those things, and don't especially care to be. + +** Coursework at University of Massachusetts + +| Course | Course Description | Grade | +|---------------+--------------------------------+-------| +| CICS 191CICS1 | FYS - CICS | A | +| COMPSCI 187 | Programming w/Data Structures | A | +| COMPSCI 220 | Programming Methodology | A | +| COMPSCI 230 | Computer Systems Principles | A | +| COMPSCI 240 | Reasoning Under Uncertainty | A | +| COMPSCI 250 | Introduction To Computation | A | +| COMPSCI 311 | Introduction to Algorithms | A | +| COMPSCI 320 | Software Engineering | P | +| COMPSCI 373 | Intro to Computer Graphics | A | +| COMPSCI 453 | Computer Networks | A | +| COMPSCI 466 | Applied Cryptography | A | +| COMPSCI 575 | Combntrcs&Graph Thry | A | +| COMPSCI 590J | Cyber Effects | A | +| COMPSCI 690C | FoundationsAppliedCryptography | A | +| MATH 132 | Calculus II | A | +| MATH 233 | Multivariate Calculus | A | +| MATH 235 | Intro Linear Algebra | A | +| MATH 331 | Ord Dif Eq/Sci Eng | A | +| MATH 370 | Writing in Mathematics | A | +| MATH 411 | Intro to Abstract Algebra I | A | +| MATH 471 | Theory Of Numbers | A | +| MATH 551 | Int Scientfc Comput | P | +| STATISTC 515 | Statistics I | A | + +I've excluded courses taken to meet general education requirements. My degree was awarded /Summa Cum Laude/ on May 14th, 2021. + +** Coursework at Brown University + +| Course | Course Description | Grade | +|------------+-------------------------------+-------| +| CSCI 1260 | Compilers + Program Analysis | A | +| CSCI 1510 | Intro Cryptography + Comp Sec | A | +| CSCI 1670 | Operating Systems | A | +| CSCI 1710 | Logic for Systems | A | +| CSCI 1730 | Design + Implement Prog Langs | A | +| CSCI 1951X | Formal Proof and Verification | A | +| CSCI 2980 | Reading and Research | A | +| CSCI 2980 | Reading and Research | A | + +My degree was awarded February 11th, 2024. I suppose they don't do Latin honors for the Master's program at Brown. + +* My Interests + +** Free Software + +I like programming and I've found using free software to be a good way to scratch that itch. Bugs invite investigation and hacking on the code. If I want to do something that a piece of software doesn't currently support, I can grab the source code and bend it to my will. And I feel better about releasing my side projects out to the world for anyone to use and benefit from for free, because techbro entrepreneurs who productize everything are annoying, and I make enough money that I don't need to be one. + +This is the software I use: + +- Gentoo GNU/Linux + - OpenRC + - NetworkManager on laptop, netifrc everywhere else + - Bash + - MATE + - xremap +- Mozilla Firefox +- GNU Emacs +- Claws Mail +- Transmission +- Ghidra +- Radare2 + +I used to be a tiling window manager (Awesome) user but installed MATE after a re-read of Xah Lee's article "[[http://xahlee.info/linux/why_tiling_window_manager_sucks.html][Why Tiling Window Manager Sucks]]" and frankly haven't looked back. I'm usually just using a maximized Emacs window. + +I used to be a "Emacs for everything" type, but sometimes specialized tools are better for the job. For example, if I really did believe in using Emacs for everything I would probably be using [[https://github.com/emacsorphanage/org-page][org-page]]. I've come to accept that Emacs inter-operating with other applications is probably a bit better than shoehorning every possible use-case into it. My Emacs configuration can be found [[https://git.sr.ht/~jakob/.emacs.d][here]]. -*** Machines (In-Commission) - -**** endseal (Workstation) - -I built this computer with my father when I was 12, and I still use it today. I've upgraded the graphics card and the RAM since then, but it's otherwise the same machine I had in middle school. - -| Hardware | Custom | -| • CPU | Intel® Core™ i5-2500 CPU @ 3.30GHz | -| • GPU | AMD Radeon RX 460 Graphics (POLARIS11) | -| • RAM | 16GB DDR3 | -| Operating System | Gentoo GNU/Linux | - -**** stellarwind (Laptop) - -My newest machine, and my daily driver for getting things done when I'm on the go (which constitutes most of my time these days). I'm a big fan of it. A fully-charged battery lasts several hours and it sports a powerful processor, all while being lightweight and quiet. I suspect it's a bit more powerful than endseal. +** Computer Security -| Hardware | ThinkPad™ T495s | -| • CPU | AMD® Ryzen™ 5 PRO 3500U @ 3.70GHz | -| • GPU | AMD® Radeon™ Vega 8 Graphics | -| • RAM | 16GB DDR4 | -| Operating System | Gentoo GNU/Linux | +People I work with are sometimes surprised by my aptitude here. Truth is, I have literally been into this stuff since I was eleven years old. Amid my early years with computer programming, I was briefly introduced to web development and, in particular, PHP, which has a reputation for the ease with which one can introduce security vulnerabilities. There was a section in the book I was going through full of examples about SQL injection. That was enough for me to get hooked. I found [[https://www.hackthissite.org/][HackThisSite]] shortly afterward and got into CTF. I was an early follower of [[https://yewtu.be/playlist?list=PLhixgUqwRTjxglIswKp9mpkfPNfHkzyeN][LiveOverflow]] and played with [[https://web.archive.org/web/20210518161049/https://0xbu.com/blog/][0xBU]] on the weekends while I was in high school. -**** forte (Mobile Workstation) +When I was at UMass, I was an e-board member of the [[https://umasscybersec.org/][UMass Cybersecurity Club]] and made a dozen or so challenges for their CTFs. -For extended trips away from my apartment, I have this mini-PC I put together. It's made me think a lot about hardware, since I spent only $300 on it, yet it's the most powerful machine I own currently. +** Radio Spectrum -| Hardware | Custom | -| • CPU | AMD® Ryzen™ 5 5560U @ 4.00GHz | -| • GPU | AMD® Radeon™ Vega 6 Graphics | -| • RAM | 12GB DDR4 | -| Operating System | Gentoo GNU/Linux | - -**** kandik (Cellphone) - -Daily driver. It's an older phone but it runs PostmarketOS well and it's far more powerful than the PinePhone. +I am a licensed (general class) ham, but I am rarely active. My callsign is KR3UZE. -| Hardware | OnePlus 6T | -| • CPU | 4 x Qualcomm Kryo cores @ 2.8 GHz + 4 x Qualcomm Kryo cores @ 1.8 GHz | -| • GPU | Qualcomm Adreno 630 | -| • RAM | 6GB LPDDR4X | -| Operating System | PostmarketOS (Phosh) | +** Food and Cooking -**** misty (Server) +Fitness and diet go hand-in-hand for a lot of people, and that was certainly the case with me. I had always been interested in cooking, having grown up around two decent home cooks who watched [[https://en.wikipedia.org/wiki/Good_Eats][Alton Brown]] et al. (I've seen him live!), but I got really into it when I started my extensive fitness regimen. I was making supper for my family most nights starting when I was fifteen. -This is the machine that runs all of the server-side scripts for this site, as well as my Pleroma instance. +When I started, I didn't really consider it an interest, because I saw it as just another thing that everyone has to do (like doing laundry or cleaning the house - two similar tasks that no one considers a hobby or interest), but I get a great deal of enjoyment out of exploring different flavors and textures. I love learning about new techniques and new cuisines. There's a cultural piece to cooking and eating food that simply isn't present with other household chores, and so I put a lot of importance on the task of feeding myself. -| Hardware | PINE64 ROCKPro64 | -| • CPU | 4 x ARM Cortex A53 cores @ 1.4GHz + 2 x ARM Cortex A72 cores @ 1.8 GHz | -| • RAM | 4GB LPDDR4 RAM | -| Operating System | Gentoo GNU/Linux | +My favorite things are soups and stews, spicy curries, and American barbecue. -**** hypo (Access Point) +** Electric Vehicles -This used to serve the purpose that misty serves now. It wasn't powerful enough. I've re-purposed it as a wireless access point for when I visit my parents. +Most of my adult life was spent uninterested in cars. I was fortunate to have one, but I rarely worked on it myself because I didn't care to learn how and I had a mechanic I trusted. It lasted me a pretty long time, but failed inspection when I moved down to Virginia because the frame was rusted to hell. That's when I got a [[https://en.wikipedia.org/wiki/Ford_Mustang_Mach-E][Ford Mustang Mach-E]] (RWD Select), which was probably one of the better purchases I've made in my life. I love it. Maybe because it's more of a computer on wheels than a car. -| Hardware | Raspberry Pi 3 Model B | -| • CPU | Broadcom BCM2837 @ 1.2GHz | -| • RAM | 1GB LPDDR2 SDRAM | -| Operating System | Gentoo GNU/Linux | +It's reliable, doesn't demand much in the way of maintenance, and I can charge it for virtually no cost at work. I'm firmly sold on electric cars. -**** corona (Media Center) +#+CAPTION: My beautiful blue Mustang. I'm still deciding on a name. +[[file:mach-e.jpg]] -This was the laptop I lugged around with me in high school and college. It's absurdly heavy and large, and has an awful battery life, but it sports some decent hardware so I'm using it as a [[https://kodi.tv/][Kodi]] and [[https://www.retroarch.com/][RetroArch]] box. +I had originally wanted to hold out until [[https://en.wikipedia.org/wiki/Solid-state_battery][solid-state battery]] tech made its way into EVs to get one, but it will probably be some time before the cost is reasonable and the kinks are worked out. I think my pony will at least last until then. -| Hardware | Lenovo Y50 | -| • CPU | Intel® Core™ i7-4700HQ @ 2.4 GHz | -| • GPU | NVIDIA® GTX-860M | -| • RAM | 8 GB DDR3 | -| Operating System | Gentoo GNU/Linux | +** Marksmanship -It saw a lot more use when I was living in Providence and my kitchen opened up into the living room. I'd use it to watch YouTube while I cooked or did dishes. +I try not to let this be a big part of my personality because I really do not want to be regarded as a [[https://en.wikipedia.org/wiki/Gun_culture_in_the_United_States][gun nut]], but I do enjoy shooting and working with firearms. Despite getting out to the range only once in a blue moon, I'm a pretty good shot. Probably due to my perfect eyesight and being fit enough to have exceptional control over my breathing. -*** Other +#+CAPTION: Me and my weapon of choice. +[[file:weapon-of-choice.jpg]] -For my home network, I have a TP-Link AC1750 Archer A7 running [[https://en.wikipedia.org/wiki/OpenWrt][OpenWRT]] hooked up to a NetGear CM1000. +I like the AR-15 platform because it "just works" and I can wrap my head around it enough to build one. And I like Glocks, but I'm not otherwise huge into handguns. -I wear a Casio DBC-611-1 everywhere I go. +** Video Games -And I've got a handful of other random SBCs and retro hardware that I don't regularly use: +Like many, my interest in computer programming started with video games. The wedding gift my uncle gave my parents was a [[https://en.wikipedia.org/wiki/Nintendo_64][Nintendo 64]]. That's what I grew up with. Some of my earliest memories were of playing video games -- I was definitely playing them at the age of 3 if not earlier. I have a soft spot for [[https://en.wikipedia.org/wiki/The_Legend_of_Zelda:_Ocarina_of_Time][Ocarina of Time]], [[https://en.wikipedia.org/wiki/The_Legend_of_Zelda:_Majora%27s_Mask][Majora's Mask]], and [[https://en.wikipedia.org/wiki/The_Legend_of_Zelda:_Majora%27s_Mask][Super Mario 64]]. -- SeeedStudio BeagleBone Green -- Raspberry Pi 2 Model B -- Commodore 64 -- Commodore VIC-20 -- Nintendo Super Famicom -- Nintendo 64 -- Sega Dreamcast - -*** Machines (Out-Of-Commission) +I did a lot of PC gaming throughout elementary school and middle school. Most of that time being spent on [[https://en.wikipedia.org/wiki/Source_(game_engine)][Source Engine]] games like [[https://en.wikipedia.org/wiki/Team_Fortress_2][Team Fortress 2]] and [[https://en.wikipedia.org/wiki/Counter-Strike:_Source][Counter-Strike]], and other old first-person shooters like [[https://en.wikipedia.org/wiki/Doom_(1993_video_game)][Doom]] and [[https://en.wikipedia.org/wiki/Quake_(video_game)][Quake]]. I played [[https://en.wikipedia.org/wiki/Counter-Strike:_Global_Offensive][Counter-Strike: Global Offensive]] quite a bit at the beginning of high school, and then my interest in games started to drop off. -**** whitecloud (Laptop) +Now that my life involves a lot of [[https://en.wikipedia.org/wiki/Hurry_up_and_wait]["hurry up and wait,"]] I've been getting back into them somewhat. I mostly play on, in order of portability, an [[https://anbernic.com/products/rg35xxsp?srsltid=AfmBOoppIyaVcQ5BXlz0KT2ibHKBGXNEOckDhiI8RqHC_z60s0bzptl5][Anbernic RG35XXSP]] running [[https://muos.dev/][MuOS]] (Tael), a [[https://www.goretroid.com/products/retroid-pocket-4-handheld?srsltid=AfmBOop2ePZOKFk_AR1gx--7UrZHzKIAb8jbGAr-yntF7IsVu0gKdmpI][Retroid Pocket 4 Pro]] (Navi), and a [[https://store.steampowered.com/steamdeck/][Steam Deck]] (Saria). When I have an aching to play some shooter games or something with very complicated controls (like [[https://cataclysmdda.org/][Cataclysm]] or [[https://cataclysmdda.org/][X-COM]]), I do it on my old tower. -This was a fine daily driver for a little while. I eventually gave up on using -it because of the weak battery controller, the buggy keyboard firmware that I -couldn't re-flash, and eventually wanting to be able to do things more -computationally-intensive than run GNU Emacs. +* My Fundamentals -| Hardware | Pinebook Pro | -| • CPU | 4 x ARM Cortex A53 cores @ 1.4GHz + 2 x ARM Cortex A72 cores @ 1.8 GHz | -| • GPU | ARM Mali T860 MP4 GPU | -| • RAM | 4GB LPDDR4 RAM | -| Operating System | Gentoo GNU/Linux | +** Fitness -**** vela (Cellphone) +Every day of my life begins with exercise. I am impeded only by an act of God. -The subject of [[https://jakob.space/blog/i-love-my-pinephone.html][this blog post]]. It was a great daily driver for almost a year, but I was really desiring something more powerful, and the Braveheart Edition I have has some really unsavory hardware issues. +#+CAPTION: Current body as of April 13, 2023. +[[./cbt-2023-04-13.jpg]] -| Hardware | PINE64 Pinephone (Braveheart Edition) | -| • CPU | Allwinner A64 @ 1.152 GHz | -| • GPU | ARM Mali-400 MP2 | -| • RAM | 2GB LPDDR4 RAM | -| Operating System | PostmarketOS (Phosh) | +I've been working out almost daily since I was fourteen. -** Other Bits and Pieces +Sports don't interest me much. I just like looking fit and trim, so exercise is either long-distance cardio (most often running) or hypertrophy-focused weightlifting. -I'm a vocal supporter of open access and the free software movement. I'm an associate member of the [[https://www.fsf.org/][Free Software Foundation]] and I contribute to [[https://en.wikipedia.org/wiki/User:ZeroDaysForDays][Wikimedia]] and [[https://www.openstreetmap.org/user/Jakob%20Kreuze][OpenStreetMap]]. +** Substance Use -I am a licensed (general class) ham, but I am rarely active. My callsign is KR3UZE. +I don't drink (though I do cook with alcohol). I also don't do anything conventionally considered to be a drug or controlled substance. I could probably considered [[https://en.wikipedia.org/wiki/Straight_edge][straight edge]] if not for being a heavy user of [[https://en.wikipedia.org/wiki/Caffeine][caffeine]] and an occasional user of [[https://en.wikipedia.org/wiki/Nicotine][nicotine]]. diff --git a/pages/about.org b/pages/about.org index e10a095..1f4a6b8 100644 --- a/pages/about.org +++ b/pages/about.org @@ -1,15 +1,15 @@ -#+TITLE: About me (abridged) +#+TITLE: About #+OPTIONS: num:nil toc:nil #+BEGIN_EXPORT html
- A portrait of myself, done by @scolastiko on Twitter. + A portrait of myself, generated by a low-rank adaptation of SD-XL 1.0-base trained on many photographs.
#+END_EXPORT * About Me -My name is Jakob Kreuze (/​ˈdʒeɪkəb ˈkɹuz/ and /​ˈjaːkɔp ˈkʁɔʏ̯tsə/ are both acceptable pronunciations), and I'm a 24 year-old [[https://en.wikipedia.org/wiki/Digital_forensics][digital forensics and incident response]] professional living in the [[https://en.wikipedia.org/wiki/Virginia][Commonwealth of Virginia]]. Outside of work, I like to program and tinker with [[https://www.gnu.org/philosophy/free-sw.html][free software]], reverse engineer things, and hunt for security vulnerabilities. In the past, I've used the [[https://en.wikipedia.org/wiki/Hacker_culture#Definition][traditional definition]] of "hacker" to describe myself. These days, the [[https://en.wikipedia.org/wiki/Hacker#Security_related_hacking][vernacular meaning]] is a bit more accurate. +My name is Jakob Kreuze (/​ˈdʒeɪkəb ˈkɹuz/ and /​ˈjaːkɔp ˈkʁɔʏ̯tsə/ are both acceptable pronunciations), and I'm a 25 year-old cybersecurity professional living in the [[https://en.wikipedia.org/wiki/Virginia][Commonwealth of Virginia]]. Outside of work, I like to program and tinker with [[https://www.gnu.org/philosophy/free-sw.html][free software]], reverse engineer things, and hunt for security vulnerabilities. In the past, I've used the [[https://en.wikipedia.org/wiki/Hacker_culture#Definition][traditional definition]] of "hacker" to describe myself. These days, the [[https://en.wikipedia.org/wiki/Hacker#Security_related_hacking][vernacular meaning]] is a bit more accurate. On the softer side, I love cooking (and eating) delicious food, running long distances, lifting weights, and playing old video games. @@ -22,15 +22,15 @@ I have a [[https://jakob.space/pages/about-complete.html][more detailed biograph #+BEGIN_EXPORT html - - + + - + - +
@jakobPleroma@jakob
Lobste.rs jakob
Sourcehut ~jakob
@@ -44,8 +44,10 @@ This is my personal website for showcasing the things I make. Currently, that is The website is built using the [[https://dthompson.us/projects/haunt.html][Haunt]] [[https://en.wikipedia.org/wiki/Static_site_generator][static site generator]], but features some dynamic components that use Guile's =(http server)= module. The source code is available on [[https://git.sr.ht/~jakob/blog][Sourcehut]]. It started in 2015 as [[https://tsar-fox.com][tsar-fox.com]] and was written in [[https://web.archive.org/web/20161229222910/http://jakob.space/][Python]] using the [[https://en.wikipedia.org/wiki/Flask_(web_framework)][Flask]] web framework. In late 2018, I dropped that code base and began using the [[https://gohugo.io/][Hugo]] static site generator until mid 2019 when I began using Haunt. The [[https://web.archive.org/web/20161229222910/http://jakob.space/][Wayback Machine]] has several snapshots reaching back to December of 2016. -I am not currently aware of any attempts to censor this website. Nonetheless, I maintain mirrors on [[http://jakobyallfrbd3herebyee7hug3hxs2ma6aflmmllk35d7dyiwp3adid.onion/][Tor]] and [[http://mtgqjdrqqpovyhx7tortulrnvakbptsi3w5yintmo6lqapdd3hnq.b32.i2p][I2P]] should you have difficulty accessing my writing in your locality. +I am not currently aware of any attempts to censor this website. Nonetheless, I maintain mirrors on [[http://jakobyallfrbd3herebyee7hug3hxs2ma6aflmmllk35d7dyiwp3adid.onion/][Tor]] and [[http://mtgqjdrqqpovyhx7tortulrnvakbptsi3w5yintmo6lqapdd3hnq.b32.i2p][I2P]] should you have difficulty accessing this website in your locality. -# Local Variables: -# mode: org -# End: +No part of this website was generated by a [[https://en.wikipedia.org/wiki/Large_language_model][large language model]] (LLM), and the use of other forms of [[https://en.wikipedia.org/wiki/Generative_artificial_intelligence][generative artificial intelligence]] are explicitly highlighted. + +** Symbology + +The icon used on this website is a naval trident to symbolize strength and power. It was traced from [[https://commons.wikimedia.org/wiki/File:Heraldic_Trident.svg][File:Heraldic Trident.svg]] (CC BY-SA 4.0). Previously, I had used an archaic [[https://en.wikipedia.org/wiki/Lambda][Greek lambda]] in reference to its usage as notation in [[https://en.wikipedia.org/wiki/Programming_language_theory][programming language theory]]. I think a tool is a better representation of myself and my values at this point in time. -- cgit v1.3