};
(() => {
const keys = {
- "Enter": () => !document.execCommand("insertHTML", false, "\n"),
- "Tab": () => !document.execCommand("insertHTML", false, " "),
+ "Enter": () => !document.execCommand("insertText", false, "\r\n"),
+ "Tab": () => !document.execCommand("insertText", false, " "),
};
editor.onkeydown = (ev) => (!!keys[ev.key] ? (keys[ev.key])(ev) : true);
editor.focus();
<%= @site_title %>
</a>
<a class="navLink shrink" href='/index.html'>home</a>
- <a class="navLink shrink" href='/projects.html'>projects</a>
- <a class="navLink shrink" href='/notes.html'>notes</a>
+ <a class="navLink shrink" href='/projs/index.html'>projects</a>
+ <a class="navLink shrink" href='/notes/index.html'>notes</a>
<a class="navLink shrink" href='/sitemap.html'>sitemap</a>
<!--EDIT-->
</div>
# About Me
I am an Embedded Software Engineer, currently employed at Gentex Corporation in Zeeland, MI. I have a keen interest in the concepts of [Software Craftsmanship](https://en.wikipedia.org/wiki/Software_craftsmanship), software minimalism, and clean software design. This site is meant to showcase some of my own thoughts and projects regarding those concepts.
-## Work Experience
+## Contact Info
+**Email:** mike@mdlowis.com
+
+## Current Projects
+Some of the projects I'm actively working on:
+
+* [tide](https://git.mdlowis.com/?p=projs/tide.git;a=summary) -
+ A minimal graphical text editor inspired by [Acme](http://doc.cat-v.org/plan_9/4th_edition/papers/acme/). This is currently my primary text editor.
+* [anvil](https://git.mdlowis.com/?p=proto/anvil.git;a=summary) -
+ A minimal tiling window manager modeled after the window management in [Acme](http://doc.cat-v.org/plan_9/4th_edition/papers/acme/).
+* [awiki](https://git.mdlowis.com/?p=projs/awiki.git;a=summary) -
+ A minimal personal wiki engine for authoring static websites. This is the tool used to author this site.
+* [alib](https://git.mdlowis.com/?p=projs/abt.git;a=summary) -
+ A collection of [header-only](https://en.wikipedia.org/wiki/Header-only) libraries for C. Designed to be cloned and owned into all of my miscellaneous projects to allow reuse without adding external dependencies.
+* [atf](https://git.mdlowis.com/?p=projs/atf.git;a=summary) -
+ A minimal unit testing framework for C distributed as a header-only library. Used to test my other side projects.
+## Work Experience
### [Gentex Corporation](https://www.gentex.com), Zeeland MI (Sep 2010 - Present)
* **Lead Software Engineer (Sep 2019 - Present)**
* **Software Engineer (Sep 2010 - Sep 2019)**
* **Intern**
## Education
-
### [Grand Valley State University](https://www.gvsu.edu/) (Graduated 2009)
* **Bachelor of Science, Computer Science**
+++ /dev/null
-# Notes
-
-## Writing
-* [Article Ideas](notes/article_ideas.html)
-
-## General Programming
-* [C Programming Rules](c_style.html)
-
-## Programming Language Design
-* [SCLPL Design Notes](sclpl.html)
-* [ZINC Abstract Machine](zam.html)
-* [Oberon 07](oberon07.html)
-
-## Miscellaneous
-* [Cube Algorithms](misc/cube_alogrithms.html)
-* [Recipes](recipes.html)
-* [FPGA Development](misc/fpga_dev.html)
-* [Open Source Programs](misc/open_source.html)
\ No newline at end of file
* reference counting
* intrusive data structures
* analysis of various open source tools
-
+* Pratt parser implementation
+* Earley parser implementation
+* Break down of [tide](https://git.mdlowis.com/?p=projs/tide.git;a=summary) design
+* Deferred reference counting
--- /dev/null
+# Erlang
+**Type System:** Dynamically typed<br/>
+**Memory Management:** Garbage Collected (Automatic)<br/>
+
+## Features
+* Single assignment bindings (variables)
+* Immutable data structures
+* Concurrency based on the actor model
+* Isolated processes communicating via message passing
+* Pattern matching
+* Execution in a virtual machine
+
+## Reference Material
+https://www.erlang.org/docs
--- /dev/null
+# Forth
+**Type System:** None<br/>
+**Memory Management:** Manual<br/>
+
--- /dev/null
+# Notes
+This section of the site is constructed as a wiki (using [awiki](https://git.mdlowis.com/?p=projs/awiki.git;a=summary)). As such, it is a chaotic mess of notes, musings, and useful links. Enter at your own risk...
+
+## Frequently Accessed
+* [Programming Languages](proglangs.html)
+
+## Writing
+* [Article Ideas](article_ideas.html)
+* [Random Thoughts](random.html)
+
+## Miscellaneous
+* [Cube Algorithms](misc/cube_alogrithms.html)
+* [Recipes](recipes.html)
+* [FPGA Development](misc/fpga_dev.html)
+* [Open Source Programs](misc/open_source.html)
+
+## General Programming
+* [C Programming Rules](c_style.html)
* [Pick](https://github.com/mptre/pick) - Fuzzy picker, inspiration for the fuzzy picker in tide
* [Nushell](https://www.nushell.sh/book/en/table_of_contents.html) - interesting new command shell with piping of data and metadata
+* [ES Shell)(https://github.com/wryun/es-shell) - An extensible shell with higher order functions
--- /dev/null
+# OCaml
+**Type System:** Strongly statically typed with type inference (Hindley-Milner)<br/>
+**Memory Management:** Garbage Collected (Automatic)<br/>
+
+## Features
+* Strong static typing with type inference
+* Polymorphic types
+
+## References
+https://ocaml.org/docs/papers.html
--- /dev/null
+# Programming Languages
+
+## Designs I'm Working On
+* [SCLPL Design Notes](sclpl.html)
+
+## Language For Inspiration
+* [Erlang](erlang.html)
+* [Scheme](scheme.html)
+* [OCaml](ocaml.html)
+* [Oberon 07](oberon07.html)
+* [Forth](forth.html)
+
+## Runtime Design
+* [ZINC Abstract Machine](zam.html)
--- /dev/null
+# Random Thoughts
+https://untools.co/ - Tools for better thinking
+
--- /dev/null
+# Scheme
+**Type System:** Dynamically typed<br/>
+**Memory Management:** Garbage Collected (Automatic)<br/>
+
+## Features
+* S-expression based syntax
+* Hygenic macro system
+* Proper tail recursion
+* First class continuations
+* First class functions (closures)
+* Full numerical tower
+
+## References
+https://schemers.org/Documents/Standards/R5RS/HTML/
* CSP versus Actor model
## Language Design
+### Ideas to Explore
+* Expression-only Syntax
+ * Assignment operator is the only way to define variables and can be, but should not be, used as an expression.
+ * The entire grammar (almost) is parsed with a Pratt parser.
+* Gradually typed type system
+ * Dynamically typed in absence of annotations
+ * Annotations allow the compiler to utilize unchecked operations for higher performance
+ * Typing would be bidirectional to allow for types to be inferred from values or bindings.
+ * Would allow for unannotated expressions that are still provably safe to utilize unchecked operations
+* Deferred reference counting for garbage collection.
+ * Immutable bindings and data so no cycles to deal with.
+ * Could use non-atomic increment/decrement and use multiprocessing instead of multithreading.
### Atomic Types
* Fixnums