**Date:** May 17 2024

**Summary:** Some preliminary and early thoughts on Forester, a robust tool for scientists and mathematicians in developing and working with one's own Zettelkasten.

**Keywords:** #blog #forester #sterling #zettelkasten #tool #thought #open #source #note #archive

Jon Sterling. Forester. https://github.com/jonsterling/ocaml-forester

- Motivation
- Transclusions Done Right
- Overall Impressions
- Developing a Forester Workflow
- Thoughts for Now

- How To Cite
- References:
- Discussion:

In discussion with my friend and mentor, Dr. Evan Patterson, I was introduced to a tool created by Dr. Jon Sterling called Forester. These are some of my early thoughts on trying out Forester for my own research and workflow.

In my mind, it feels to me that Forester really nailed how transclusions should work in a Zettelkasten type of workflow. In my mind, it is the perfect ambient environment for quickly building and stringing ideas together in coherent and yet atomic ways. Here's an example of it in action:

Forester Transclusion:As one can see, the transclusion is snappy, encourages from its foundation the creation of small pieces of information as different files, and is easy to put together.

What I also didn't really highlight is that it has great support for various kinds of backlinks that I haven't really had a chance to explore yet. I think backlinking is another crucial element of Zettelkastens and this is another thing that Forester's transclusion approach got right. Finally, I haven't tested this yet, but apparently handling of citations via \(\mathbf{BibTeX}\) and some of Forester's unique markup syntax enables citations to get rendered "automatically" between transcluded notes meaning that I would personally not have to worry about creating a bibliography for a note that has several transclusions in it as long as the source notes themselves have the relevant and needed citations.

I played around with Forester for several hours and had quite some fun with the tool. The syntax was relatively straightforward to pick up thanks to the published markup syntax guide and a nice write-up from Owen Lynch. It wraps around HTML elements using a strange combination of XML and XSTL – interestingly, the tool itself was written in OCaml and this served as my first introduction to ML-style languages. Here's an example of the mark-up which is, quite pointedly, called `tree`

files:

```
\title{Jacob S. Zelko Personal Details}
\taxon{bio}
\date{2024-05-16}
\import{macros}\<html:div>[style]{
width: 50\%;
height: 400px;
background-image: url('jz.jpg');
background-size: contain;
background-repeat: no-repeat;
}{}\p{}\p{
My name is Jacob Scott Zelko!
I am currently pursuing my MS in Applied Mathematics at Northeastern University (NEU)
and am a trainee of NEU's Roux Institute.
}
```

As one can see, the syntax is relatively straightforward (although I had to do an "ugly" hack to get image rendering to work). It feels very \(\LaTeX\)-ish in the sense that all the curly braces have come back – with a vengeance! One is able to create their own macros similar to how you can in various programming languages as well as within \(\LaTeX\) and inject HTML directly into your documents similar to how you can with Markdown. In fact, to me, it feels a hybrid between Markdown and \(\LaTeX\) Although the syntax is a bit gnarly, where it really shines is it's handling of mathematical notation directly in your browser. Thanks to a macro and `sty`

file Owen created for the platform, LocalCharts, I can readily render and draw commutative diagrams simply and easily directly within my notes:

```
\p{
\quiver{ \begin{tikzcd}
&& X \\
\\
A && {A \times B} && B
\arrow["{p_1}"', from=1-3, to=3-1]
\arrow["u"', dashed, from=1-3, to=3-3]
\arrow["{p_2}", from=1-3, to=3-5]
\arrow["{\pi_1}"', from=3-3, to=3-1]
\arrow["{\pi_2}"', from=3-3, to=3-5]
\end{tikzcd} }
}
```

Note: the macro

`quiver`

is what allows me to create this`tikzcd`

diagram directly in my notes. Aside from the`p`

and`quiver`

notation, the commutative diagram`tikz`

code I wrote here is strictly \(\LaTeX\) – finally, full Tikz support in the browser and easily done too!

One thing that I should also mention is the first rate support Forester does have for mathematics typesetting. Out of the box, it supports most of \(\LaTeX\) math formatting and enables one to quickly and easily render mathematics equations or notation where necessary. To my understanding, it's way of rendering is much richer than MathJax or \(\KaTeX\) but I am unsure of all the internals of how the math is rendered.

As Forester is still quite new, it is understandable if the workflow isn't quite sorted yet. I personally felt that this was one of the more underdeveloped aspects of the Forester ecosystem. After reviewing available tools, I settled on this approach:

**Writing**: using my Neovim configuration to write notes quickly.**Live Updates**: Kento Okura created a really nice Forester tool called "forest-server" in Rust that allows previews and builds to happen instantly.**Preview**: I use the Vivaldi browser to do a live preview of my notes changing and updating in real time.

Here's an example of the workflow in action:

The key command here I use is the function `forest watch 1234 -- "build forest.toml"`

in the base of my "forest". As I save my file, the command to build the forest is triggered and updates the note rather quickly. There is some flashing going on with the updating that I do not know how to fix – can be a bit jarring but is mostly fine.

Although I quite like Forester, I am a bit hesitant to transfer over to it myself for all my Zettelkasten needs. One of the biggest reasons for this is that my own Zettelkasten at this point has nearly \(600\) notes all written in markdown. To translate them over, I could write a parser for NoteMate.jl that would allow ready translation from my note style to a `tree`

file.

Additionally, there are a few features that I feel just aren't quite "there yet". Particularly, the following:

The syntax for

`tree`

files, although a great start, is missing some things I find important. This includes more ergonomic syntax for including images, code blocks, quote blocks, etc. that I rely on within markdown.The wrapping around HTML elements doesn't feel quite complete. As an example, to include an image on a page, I can write something like

`\<html:img>[src]{photo.png}`

which is easy enough. But what if I want to inject more attributes to the HTML element here, such as the`max-width`

of the image? That was not clear to me in my readings of the source code and syntax reference.Although I thought that the transclusion methods of Forester by default are great, it does not appear to me how one can reference sections of a note via transclusion. For example, within my markdown set-up, not only can I reference other notes, I can also link to the direct section within a particular note. I have not seen any such "section referencing" capabilities available in Forester if I just want to transclude "part" of a note.

Lack of interoperability with other note types or note systems. As I mentioned, I still have \(\approx 600\) markdown notes within my personal Zettelkasten so being able to go between other note types is crucial. What's more, related to this problem, is that markdown or \(\LaTeX\) is far more ubiquitous and accessible across multiple platforms if I need to preview or reference something on the spot. I haven't yet seen this available with

`tree`

files yet.

With that all to say, if I had started my personal Zettelkasten journey with Forester, I think I probably would've figured out ways to get around all these issues. As of now, these issues prevent me from wanting to move my entire Zettelkasten over to the system.

However, with that said, I think I actually will try giving Forester more of a test with some of my mathematics studies and research. It's first rate support for mathematics is superb and although the workflow is quite minimal at the time, while writing some notes in the `tree`

files, I was beginning to see just how natural and ergonomic it was to write within the system. Depending on how things go with my experiments with Forester, I may end up having to write a parser of some kind in the near future!

If you use or have used Forester, please let me know your experience with it and comment below – would love to hear about your experiences!

Zelko, Jacob. *Thoughts on Forester: A Scientist's Zettelkasten*. https://jacobzelko.com/05172024064639-forest-zettelkasten. May 17 2024.

**Date:** November 24 2023

**Summary:** Initial impressions on a few months of Bluesky usage

**Keywords:** #social #media #bluesky #twitter #microblogging #blog #archive

Not Available

- Motivation
- Why Did I Start Using Bluesky?
- Platform Impressions
- Community Impressions
- Feeds I Follow
- People I Follow
- Concluding Thoughts

- How To Cite
- References:
- Discussion:

It's been a few months now and I have some thoughts about Bluesky. Thought it might be fun to share and see what other folks think!

With the recent tailspin that Twitter (X) is experiencing, I decided it's time to explore other options for microblogging. I checked out Mastodon and just found the platform confusing and rather odd. I understand that everyone can run their own Mastodon instance – which is great! – but struggled to find academic circles like I had on Twitter and also felt a bit unwelcome. Also, I really was looking for just a drop-in replacement for Twitter and Bluesky seemed the best option.

Bluesky ticked off the most important criteria I had for finding a Twitter alternative: that it felt like Twitter. The UI feels very clean, I love the idea of feeds, and posting is easy. Importantly, my home page feels very much like how my Twitter feels. Plus, one of my old favorite tools from Twitter was Tweetdeck and it lives on in the tool, deck.blue.

I've been really pleasantly surprised by the academic Bluesky community! Although it is much smaller than Twitter's community and I don't get as much "likes" perhaps as my posts on Twitter, I feel that my interactions on Bluesky are much more meaningful.

One recent example was where I made a post asking about developing a better academic writing habit in my life. On Twitter, although it was seen by a couple hundred people, I got only a few interactions from that. The same sort of question on Bluesky resulted in several interactions that actually resulted in helping me develop a better habit on this front.

Additionally, I feel like Bluesky is a lot less "noisy". As Bluesky doesn't have a central algorithm that is spiking posts for whatever reason, you really only see what you want to see. It makes the entire enterprise feel much more genuine – authentic even.

As feeds are perhaps not as discoverable as finding certain hashtags in Twitter, here is a list of feeds I follow on Bluesky:

Oddly, I find following feeds is sufficient for me for the majority of cases. I am sure this won't be the same forever as more folks join Bluesky.

Although Bluesky still is not as populous yet like Twitter, there are a few accounts I follow directly

Dr. Chris Rackauckas – ordinary differential equations, open source/science, Julia programming, and numerical computing

Dr. Brenhin Keller – geoscience, climate science, open source/science, Julia programming, and excellent meme game

Dr. Karandeep Singh – health informatics, research software engineering, Julia and R programming

I am deeply disappointed in what has happened to Twitter – I feel like a migration to another platform is unavoidable at this point. Bluesky is definitely not Twitter but it might actually be something better. In short, I am really enjoying my interactions on Bluesky, building a small community over there, and learning more from others.

I should say, if you like chatting about mathematics, open science and open source programming, and academia, let's connect on Bluesky! Looking to make more friends and enrich my experience on the platform. My profile is: thecedarprince.bsky.social. Talk more soon!

Zelko, Jacob. *Early Impressions of Bluesky*. https://jacobzelko.com/11242023193535-impressions-bluesky. November 24 2023.

**Date:** October 8 2023

**Summary:** A non-exhaustive list of recommendations for how I suggest learning Julia to language newcomers

**Keywords:** #julia #programming #beginners #recommendations #learning #archive #blog

Not Available

- Motivation
- Before Programming with Julia, Let's Set It Up
- Julia Programming for New Programmers
- Quickly Picking Up Julia Programming
- What Is a Julian?
- Building Up Expertise in Julia Programming
- Domain Specific Workflows in Julia
- Working with Data
- Plotting

- Conclusion

- How To Cite
- References:
- Discussion:

I saw an interesting post on BlueSky recently that got me thinking about Julia learning resources. I tend to give out a lot of advice about how to go about learning Julia but I realized I have never really centralized one place where I keep that information. This blog post talks about my personal opinions both within the Julia ecosystem and recommendations for how to learn Julia.

The fantastic initiative, Modern Julia Workflows, spearheaded by Guillaume Dalle and co has a number of sections that can help with getting set-up fast (I'll be referring to their work quite a bit throughout this post). In particular, here are the sections I'd recommend to get set-up fastest:

What you need to write Julia. A special note on this from me is that you really do not need much – you could use something like NotePad on Windows, textedit on OSX, or KWrite on *nix systems. I like the stance Dalle takes in recommending VSCode however as this gives you the best mileage whether you are a beginner or expert programmer.

Suggestion 2 here will most likely take you the longest if you have never worked with a text editor before (a piece of software to create and edit most different types of files). So, no worries and enjoy the learning here!

If you are completely new to programming in general, I'd recommend the course, Julia Programming for Nervous Beginners, by Dr. Henri Laurie. It really eases you through how to start with programming and uses Julia as that learning tool. Otherwise, skip to the next section.

To pick up Julia programming, I recommend Introduction to Julia (for programmers) by Dr. Jane Herriman. This will get you going with Julia the fastest – especially if you already know some programming.

Before continuing your Julia adventure, it is worth a pause to discuss a couple aspects of Julia that one may not immediately recognize but are crucial in a productive Julia workflow. Otherwise, one may end up despairing over the supposed virtues of Julia. Here are some specific pieces:

Julia is a REPL-centric workflow. If you are unfamiliar with what a REPL is, please see this reference for details but in short, the Julia REPL is a continuous loop that accepts all valid inputs. From loading a file, experimenting with code, or calling functions, the REPL serves as a scratchpad to iteratively build your overall Julia software instantly.

Julia is compiled – packages and functions will take a moment to load for use. This builds on the previous point, but yes, as Julia is compiled, any package or function you want to use may execute slightly longer initially but then will be compiled for the duration of your work session. This is why you want your Julia workflow to be REPL-centric as you can get around this issue.

Julians organize Julia software into "projects" or packages. Whether you are writing a collection of small scripts to analyze some data or developing a completely new software package, to effectively maneuver through your Julia code, make liberal use of Pkg.jl. Dalle has an excellent reference that talks about this concept of project environments as well as how to build your own local package.

Working within Julia can be extremely efficient – if you know how. This is a circular statement as it naturally raises the question of, "how do I actually build a concrete Julia workflow?" Thankfully, much has been written about this

Julians want to help you. What is wonderful about the Julia community is that, in contrast to perhaps alternative internet communities, the bulk of Julians greatly enjoy helping not only other Julians but other programmers in general (there has been numerous occasions where I have seen Julians help other language users become even more proficient in their workflows). This is an invaluable assortment of where to find your fellow Julians.

I hope this section does not come off as overtly prescriptive, but I have seen the notion of "you are holding the tool wrong" or "what is Julian" (i.e. how do proficient Julia users do X) pop up too many times for new Julians or those experimenting with the language. I hope with this nudging guidance here, a new Julian can more clearly understand the "why" of what other more proficient Julians recommend.

At this stage, we can now move from the beginner to intermediate Julian stage. Here, I think the world of Julia quite truly opens up to the new user. To delve deeper into Julia, here are some resources I would personally recommend:

Believe it or not, the Julia documentation is actually really nice to read and accessible. Now, I don't just say this as I have helped write some of it, but I do truly think it worth looking through to get a better feel for aspects of Julia one may not consider. I would suggest starting with the Manual section of the documentation.

Check out the MIT Computational Thinking Course to have a more hands-on introduction to scientific computing. I have never personally gone through it, but I hear it highly praised.

Try solving problems on Exercism.io to practice and improve your skills. I am a mentor here although don't have as much time anymore to help review. I still find this to be a really great place to further your learning and to get better at programming Julia – you'll often get feedback from expert Julia users which, in itself, is extremely valuable.

I will probably spin out the following sub-sections into their own blogs, but here are some selected domain specific workflows I have used or become familiar with that I use regularly within Julia.

This admittedly broad workflow encompasses much, but the most important packages in this space are:

DataFrames.jl: This package provides a powerful data manipulation and analysis tool for Julia, similar to the pandas library in Python.

Additionally, the author of the package, Bogumił Kamiński, is an extremely prolific blogger who shares many different ways of using DataFrames.jl.

I highly suggest his blog.

CSV.jl: Utility library for working with CSV and other delimited files in the Julia programming language

TerminalPager.jl: a REPL-based Julia variable and documentation explorer

When I first started within Julia, this was the only area I felt that was sorely lacking within the ecosystem. However, I am happy to say that this is no longer the case! In my mind, the best Julia plotting package is Makie.jl. It is an interactive data visualization and plotting ecosystem that has support for multiple backends ranging from publication quality static images, 3D images, to fully interactive plots and visualizations. I use it whenever I can.

NOTE:This blog post is a continuous work in progress.

As this blog post is a continuous work in progress, please feel free to comment below on questions about how I could improve it or explain more. That said, my goal with this blog post was not to cover every aspect of the Julia ecosystem but how to quickly go from knowing nothing about programming to becoming a self-sufficient Julian. May this concise guide help you in your way to achieving all that you want within Julia.

Zelko, Jacob. *Resources for Learning the Julia Programming Language*. https://jacobzelko.com/10082023195125-julia-learning-resources. October 8 2023.

**Date:** August 23 2023

**Summary:** How to move your GitHub repository into a GitHub organization

**Keywords:** #github #organization #repository #permissions #git #blog #archive

Not Available

- Steps for Organization Owner
- Optional Step: Transfer Repository Back to Owner

- Steps for Organization Owner
- How To Cite
- References:
- Discussion:

As I am the head of a few GitHub organizations now, I figured it would be useful to have a nice step by step guide for helping individuals move their repositories into organizations that I help manage.

The following assumptions are made in this tutorial:

You have a GitHub profile

You have a repository you wish to transfer

The GitHub organization you wish to transfer the repository to is called "JuliaHealth"

Initiate the Transfer

a. Log in to your GitHub account.

b. Open the repository you want to transfer

c. Click on "Settings" and then select "Options" from the left sidebar.

d. Scroll down to the "Danger Zone" section and click "Transfer Ownership."

e. Confirm by entering your password.

f. Choose "JuliaHealth" from the dropdown.

g. Click "I understand, transfer this repository."

Verify Repository Transfer

a. Go to the JuliaHealth GitHub organization home page

b. You should see the repository on the home page

At this stage, let the Organization admins know that the repository is transferred to the organization. If there were any issues, reach out to JuliaHealth admins for help here.

Adjust transferred repository permissions to allow owners full permission to repository

a. Open the transferred repository within your organization.

b. Navigate to "Settings."

c. Click on "Manage access."

d. Add the original owner's GitHub account as a collaborator or provide them with the necessary access.

Inform the original repository owner of permissions

If the original owner wants to remove the repository from the organization:

Go to the repository's "Settings" within the organization.

Scroll down to the "Danger Zone" section and click "Transfer Ownership."

Opt to transfer the repository back to their personal account.

Additionally, depending on the permissions given by the Organization admins, the repository owners may be able to transfer the package back to themselves as well at any time.

Zelko, Jacob. *Step by Step Guide to Moving Your GitHub Repository to a GitHub Organization*. https://jacobzelko.com/08232023150902-moving-repository-organization. August 23 2023.

**Date:** July 9 2023

**Summary:** Some insights into how I use Anki and suggestions on how to get started

**Keywords:** #anki #blog #archive #anki #spaced #repetition #learning

Not Available

- Motivation
- How To Get Started with Anki
- Effective Anki Philosophies
- Other Personal Strategies
- What about Add-Ons?

- Advanced Techniques
- Incremental Understanding
- Anki for Mathematics?

- Concluding Thoughts
- Footnotes

- How To Cite
- References:
- Discussion:

Recently, I was sharing with a few online communities (namely the Neorg and Anki Discord Servers) my success with Anki. I was somewhat surprised at how many people were both curious and excited about what I was up to and how I was learning things with Anki. After writing up some advice across the servers, I decided it best to coalesce my thoughts here on how I use Anki for mathematics, languages, and incremental reading.

Anki is perhaps one of the greatest learning tools made. To quickly summarize, Anki is a software for creating digital flashcards and then quizzes you throughout the day, everyday on cards according to how well you can recall each card. To get started with Anki, here are some tips I would give to myself if I had to start over again and to anyone curious about getting started with Anki:

**Skim the official Anki documentation**: Familiarize yourself with Anki's features and functionalities by skimming through the official Anki documentation available at Anki Getting Started. (Another good reference, although unofficial and may become outdated, is: How to Use Anki by Lean Anki).**Start with simple cards**: Begin your Anki journey by creating straightforward flashcards to ensure better comprehension and recall.

The basic and cloze default templates are great to use and cover a wide range of use cases you may have.

**Gradually increase the number of new cards per day**: I would not recommend several new cards a day as you get started.

If you start with 100 new cards on day one, that means the next day you would have to study 100 new cards AND 100 reviews of your day old new cards at minimum. In practice, this will hike up your number of reviews between the two days to well over 300 cards potentially.

**Using Pre-made decks is OK**: If you are unsure about how to make decks or are low on time, you can use pre-made decks**Learning deck options can be quite helpful...**: In particular, settings like Daily Limits, Display Order, Timer, and Subdecks are worth learning about as a beginner.

This can help prevent feeling overwhelmed.

**...but, Stick with the default algorithm settings**: Avoid unnecessary tinkering and utilize Anki's default algorithm, which is designed for optimal card review timing.

These are Deck Options like New Cards, Lapses, or other Advanced fields and scheduling. ^{[1]}

To emphasize the last point, while there are numerous Anki resources offering "best settings for success" such as on YouTube or blog posts (even this one – go do Anki!), be cautious not to get caught up in "productivity porn". Focus on consistent usage of Anki and trust in the effectiveness of the default scheduler and most of the review settings.

These are philosophies I have found useful when I work with Anki. Feel free to incorporate, ignore, or use them:

**Add content you want to learn**: Only add content to Anki you truly, genuinely want to learn – ask yourself, "Am I comfortable with reviewing this content over the next year?"

If you even hesitate a moment, **DO NOT ADD IT**. ^{[2]}

**When you have dead time...**: Waiting in a line for a tea at a cafe?

Review Anki. Have a break between a PvP session while playing Destiny 2? Review Anki. Stationary biking at the gym? Review Anki.

**One card, one fact**: Keep one fact per review card you make.**Follow the 20 principles of knowledge formulation**: Read the 20 Rules of Knowledge Formulation.

Learn, live, ~~loathe~~ love it.

**"I... Declare... Bankruptcy!!!" – Michael Scott, King of Anki**: If you are feeling overwhelmed by how many reviews you have to do each day, it is alright to declare what I call "Anki Bankruptcy" and temporarily stop adding new cards to review each day.

Do this until you feel more motivated or your review count is back to a comfortable level. ^{[3]}

These are my highly personal review strategies. They may be wrong, but they help me consistently manage all my Anki reviews:

**Embrace a simplified review process**: Streamline your card reviews by focusing solely on the "good" or "again" key, simplifying decision-making and promoting efficient learning.^{[4]}**Prioritize well-being and take breaks**: Ensure your physical and mental well-being by prioritizing breaks and engaging in activities that rejuvenate you.**Adjust Deck Settings**: Create different deck profiles, such as "Hard Studies" for challenging subjects or "No New Cards" when you need a temporary break.**Regularly review statistics**: I monitor my progress by reviewing Anki's statistics every day.

This helps me track performance and if I may need to reduce or increase the intensity of my recent Anki sessions.

**Organize with decks and subdecks**: I categorize my flashcards into decks and subdecks based on subjects or topics of interest broadly.

I do use a couple Anki Add-ons! I tend to more focus on aesthetics and statistics for my Anki set-up. Here are some that I always use:

Anki-redesign - A new lightweight look for Anki

More Overview Stats 2.1 - This addon adds more information to the deck overview statistics.

More Decks Stats and Time Left - This addon shows extra information of the due cards and returns the expected time to finalize (Due+New).

Review Heatmap - Adds a heatmap graph to Anki's main window which visualizes past and future card review activity.

These are advanced techniques that I am experimenting with. Reader be warned!

I didn't find Anki particularly well-suited for Incremental Reading and instead created an iterative process I call "Incremental Understanding". What the process entails is this:

I pull content from what I read such as a paragraph or a few lines.

For each chunk of information, I add that to a card that only has three sections: the content, associated thoughts, and their reference.

As I review each of these cards, I edit them into my own language. (I max out how much I spend on each card per review to 3 minutes)

I repeat steps 1 - 3, until each card I feel is sufficiently described in my own language and then I suspend and tag the card for transfer into my personal notes.

For each note that is tagged for transfer, I then move and stitch them into my personal notes

To make steps 3 and 4 easier, I use the Tag Toggler Add On. For 5, this is an intentionally manual process that, although labor intensive, forces me to think how this new content fits into my knowledge base and any existing notes I have.

It's an evolving process, but I have written a separate dedicated blog post dedicated to the processes I have been developing for this.

I hope this small guide on getting started with and using Anki was helpful! Again, these are my own personal notes and takes on how to use the tool. To that end, if you have any suggestions, thoughts, or feedback, please let me know!

[1] | Even for me, I do not mess around with the default algorithm much at all. I find it does a great job as is and I have only recently even thought about messing around with the FSRS algorithm. |

[2] | If you are not careful, you can create "Anki Anxiety" where, instead of being excited about learning something via Anki, you dread the reviews you have to do every day for information you are not too excited about. |

[3] | Aside from The Office, I actually got this idea from Danika Dakika from the Anki Discord server; it was a game changer for me so a huge thank you to Danika! |

[4] | I wanted to also say that I didn't come up with this idea specifically but I was unable to find where it was sourced from exactly. If you know the right reference here, please let me know! |

Zelko, Jacob. *Lessons Learned from How I Use Anki*. https://jacobzelko.com/07092023212334-how-i-anki. July 9 2023.

**Date:** June 20 2023

**Summary:** A collected overview on various comments from Julia organization organizers on how to effectively build up an open source organization

**Keywords:** #github #open #source #community #organization #blog #archive #julia

J. Zelko, “Julia Orgs, How Do You Manage Logistics?,” Julia Programming Language, Jun. 16, 2023. https://discourse.julialang.org/t/julia-orgs-how-do-you-manage-logistics/100430 (accessed Jun. 20, 2023).

- Motivation
- Structure Organization for Sustainability
- Organization Guidelines
- Managing Package Development
- Community Outreach and Communication

- How To Cite
- References:
- Discussion:

As I have been involved with and have started various open source organizations in the past, I wanted to learn more about how other organizations within the Julia community manage this. In particular, as I am getting more serious about bolstering JuliaHealth, I want to make sure to do this as effectively as possible. These were some comments and notes from folks within the Julia Community who made suggestions on how to approach this effectively.

Limit dependency on any one person – Jakob Nissen, George Datseris

All repositories and shared documents should have write access for multiple people, ensuring continuity even if some contributors are unavailable – Jakob Nissen, Guillaume Dalle

Furthermore, packages should be designed with longevity in mind, as maintenance can be a significant challenge – Jakob Nissen, Georgia Datseris

Build trust with frequent contributors – George Datseris

Could review their PRs more leniently

Provide detailed reviews for newcomers

Think about what is the criteria (such as reviews or approvals) before action on a pull request is taken – Guillaume Dalle

Setting clear timeframes for feedback should be established – Guillaume Dalle

Allocate review time (around 70-80%) to evaluating design aspects, logical connections between input-output arguments, and documentation of features – George Datseris

Adapt the intensity of a PR review based on its potential impact to a package – George Datseris

PRs with package wide consequences should receive thorough evaluations

PRs that are independent of existing code could be reviewed more quickly

Bug fixes that affect small parts of the package could be reviewed faster

Use GitHub issues to outline development roadmaps for a given package – Guillaume Dalle

Use labels to prioritize GitHub issues as important and relevant to a given package – Guillaume Dalle

Prioritize discussions within GitHub issues to foster transparency and consolidate discussions in location – George Datseris

Maintain source code simplicity – George Datseris

Avoid making promises about deliverables or timelines – Jakob Nissen

Community calls for triage discussions or long-term package orientation can help build community – Guillaume Dalle

Actively invite individuals to join the organization – George Datseris

Provide them with administrative rights to relevant GitHub teams and repositories to foster participation

Zelko, Jacob. *Notes on Managing Open Source Organizations*. https://jacobzelko.com/06202023182947-notes-open-orgs. June 20 2023.

**Date:** May 10 2023

**Summary:** A computational treatment and exploration of abundant and deficient numbers

**Keywords:** #blog #abundant #deficient #number #theory #julia #programming #perfect #aliquot #sequence #archive

Not Available

- Motivation
- What Are These Numbers?
- Examining Divisors of These Numbers
- Abundant Numbers
- Deficient Numbers

- Any Connection to Aliquot Sequences?
- Aliquot Sequences of Abundant Numbers
- Aliquot Sequences of Deficient Numbers

- Conclusion
- Addendums
- Discussion on Julia Implementation
- Categorical Understandings of Number Species

- How To Cite
- References:
- Discussion:

I was at the gym working out when I started thinking about locker numbers in the men's locker room. I was reminded of perfect numbers and was thinking about perfect number examples. I started testing random numbers in my mind and noticed numbers which had divisors that summed up to greater than their number and also less than their number. I had no idea about the existence of abundant and deficient numbers and got curious about these numbers and to see what characteristics I could find about them.

In Number Theory, there exist three species of numbers that depend on the divisors of a given number (excluding the number itself as a divisor). Here are the three species and their simple characteristics:

**Deficient Numbers** - these numbers have divisors whose sum is never greater than the number being examined. An example is the number \(4\) which has as divisors \(1\) and \(2\) – those divisors only sum up to \(3\).

**Perfect Numbers** - these numbers have divisors which sum to exactly to the number being examined. An example is the number \(6\) which has as divisors \(1, 2, 3\) which sum together to \(6\).

**Abundant Numbers** - these numbers have divisors whose sum is greater than the number being examined. An example is the number \(12\) whose divisors are \(1, 2, 3, 4, 6\) and sum to \(16\).

As it turns out, there are infinite deficient, perfect, and abundant numbers. However, only around 50 perfect numbers have ever been discovered to this day! \(6\) is the smallest perfect number but then perfect numbers grow to be hundreds of digits long! For that reason, this fun exploration will really only explore abundant and deficient numbers.

Out of curiosity, I wanted to know if there were any trends to be noticed in the divisors of the deficient and abundant number species. So, I whipped together some code to explore this within Julia (if you are not interested in the code, you can skip it and just go to the results for each section). To get started, I first defined a function to calculate divisors of a number:

```
import Primes: factorfunction divisors(n) d = Int64[1] for (p, e) in factor(n) t = Int64[]
r = 1 for i in 1:e
r *= p
for u in d
push!(t, u * r)
end
end append!(d, t)
end return sort!(d)end
```

With this function defined, now, I am going to calculate some deficient and deficient numbers (since perfect numbers are hard to calculate, I am going to look up a few to explore). To do that, we will use the following snippet to find \(1000\) abundant and deficient numbers:

```
i = 1
deficient_numbers = []
abundant_numbers = []
while true
divisor_sum = divisors(i)[1:end-1] |> sum
if divisor_sum < i && length(deficient_numbers) != 1000
push!(deficient_numbers, i)
elseif divisor_sum > i && length(abundant_numbers) != 1000
push!(abundant_numbers, i)
end i += 1 length(abundant_numbers) == 1000 && length(deficient_numbers) == 1000 ? break : continue
end
```

We are set to explore further these numbers!

As a first pass, let's calculate the divisors of the abundant numbers and plot their frequency:

```
import DataStructures: counter
import UnicodePlots: barplotabundant_divisors = vcat(divisors.(abundant_numbers)...) |> counter |> Dict |> sort;vs = collect(values(abundant_divisors));
ks = collect(keys(abundant_divisors));barplot(ks[1:20], vs[1:20], xlabel = "Count", ylabel = "Divisors", title = "Divisor Count for First 1000 Abundant Numbers")
```

Which gives the following plot:

```
Divisor Count for First 1000 Abundant Numbers
┌ ┐
1 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 1 000
2 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 995
3 ┤■■■■■■■■■■■■■■■■■■■■■■ 677
4 ┤■■■■■■■■■■■■■■■■■■■■■ 623
5 ┤■■■■■■■■■■ 308
6 ┤■■■■■■■■■■■■■■■■■■■■■■ 672
7 ┤■■■■■■■ 216
8 ┤■■■■■■■■■■■ 347
9 ┤■■■■■■■■ 229
Divisors 10 ┤■■■■■■■■■■ 303
11 ┤■■■■ 116
12 ┤■■■■■■■■■■■ 336
13 ┤■■■ 96
14 ┤■■■■■■■ 211
15 ┤■■■■■ 139
16 ┤■■■■■■ 188
17 ┤■■ 68
18 ┤■■■■■■■ 224
19 ┤■■ 61
20 ┤■■■■■■■ 201
└ ┘
Count
```

Without any real methodology, what I notice is that there seems to be an interesting pattern where certain divisors are being repeated more than others as more and more divisors are found. It almost feels like a kind of decaying sequence where counts seems to spike on any multiple of \(3\) or \(4\) more consistently than any other number. Even though, it seems like multiples of \(3\) are not as consistent.

Now, let's calculate the divisors of the deficient numbers and plot their frequency:

```
import DataStructures: counter
import UnicodePlots: barplotdeficient_divisors = vcat(divisors.(deficient_numbers)...) |> counter |> Dict |> sort;vs = collect(values(deficient_divisors));
ks = collect(keys(deficient_divisors));barplot(ks[1:20], vs[1:20], xlabel = "Count", ylabel = "Divisors", title = "Divisor Count for First 1000 Deficient Numbers")
```

Which gives the following plot:

```
Divisor Count for First 1000 Deficient Numbers
┌ ┐
1 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 1 000
2 ┤■■■■■■■■■■■ 337
3 ┤■■■■■■■ 220
4 ┤■■■■ 124
5 ┤■■■■■■ 168
7 ┤■■■■ 119
8 ┤■■ 51
9 ┤■■ 73
10 ┤■ 36
Divisors 11 ┤■■■ 82
13 ┤■■ 71
14 ┤■ 25
15 ┤■ 43
16 ┤■ 18
17 ┤■■ 56
19 ┤■■ 50
21 ┤■ 31
22 ┤■ 22
23 ┤■ 42
25 ┤■ 33
└ ┘
Count
```

What's interesting here is that I did not see any immediate pattern or phenomena with these divisors at first glance. However, when I examined the plot using a log10 scale, I then saw that consistently, the counts for odd divisors for outnumber those for even divisors:

```
Divisor Count for First 1000 Deficient Numbers
┌ ┐
1 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 1 000
2 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 337
3 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■ 220
4 ┤■■■■■■■■■■■■■■■■■■■■■■■ 124
5 ┤■■■■■■■■■■■■■■■■■■■■■■■■ 168
7 ┤■■■■■■■■■■■■■■■■■■■■■■■ 119
8 ┤■■■■■■■■■■■■■■■■■■■ 51
9 ┤■■■■■■■■■■■■■■■■■■■■ 73
10 ┤■■■■■■■■■■■■■■■■■ 36
Divisors 11 ┤■■■■■■■■■■■■■■■■■■■■■ 82
13 ┤■■■■■■■■■■■■■■■■■■■■ 71
14 ┤■■■■■■■■■■■■■■■ 25
15 ┤■■■■■■■■■■■■■■■■■■ 43
16 ┤■■■■■■■■■■■■■■ 18
17 ┤■■■■■■■■■■■■■■■■■■■ 56
19 ┤■■■■■■■■■■■■■■■■■■■ 50
21 ┤■■■■■■■■■■■■■■■■ 31
22 ┤■■■■■■■■■■■■■■■ 22
23 ┤■■■■■■■■■■■■■■■■■■ 42
25 ┤■■■■■■■■■■■■■■■■■ 33
└ ┘
Count (Log10 Scale)
```

Out of curiosity, I wondered if there could be any overlap of abundant and deficient numbers' divisors with their respective aliquot sequences. Now, an aliquot sequence is a rather fun thing. It has the following form:

\[ s_{0} = k \] \[ s_{n} = s(s_{n-1}) = \sigma_{1}(s_{n-1}) - s_{n-1} \text{if} s_{n-1} \gt 0 \] \[ s_{n} = 0 \text{if} s_{n-1} = 0 \]I decided to implement a small algorithm to compute the aliquot sequence for a given number as follows:

```
function aliquot_sequence(num; max_itrs = missing)
sequence = [num]
s = num while true
s = sum(divisors(s)) - s
if !ismissing(aliquot_sequence) && length(sequence) == max_itrs
return nothing
elseif s == 0
push!(sequence, s)
break
elseif in(s, sequence)
break
else
push!(sequence, s)
end
end return sequenceend
```

In my implementation, I decided to limit the sequence to no repeating sequence values for a number. Let's plot these sequence values and see what could be seen as before.

NOTE: As a limitation, some of these sequences have an immensely high number of iterations which cause my computer to explode (looking at you, abundant number \(138\))! For that reason, I am only calculating sequences for an abundant number that has only 10 maximum iterations within their aliquot sequence.

Let's calculate the aliquot sequences for \(500\) abundant numbers that have at most \(10\) terms within their sequence:

```
import DataStructures: counter
import UnicodePlots: barplotabundant_aliquot_sequences = []for i in 1:1000000
divisor_sum = divisors(i)[1:end-1] |> sum
if divisor_sum > i
seq = aliquot_sequence(i, 10)
!isnothing(seq) ? push!(abundant_aliquot_sequences, seq) : continue
end i += 1 length(abundant_aliquot_sequences) == 500 ? break : continue
end
abundant_aliquot_terms = vcat(abundant_aliquot_sequences...) |> counter |> Dict |> sort;vs = collect(values(abundant_aliquot_terms));
ks = collect(keys(abundant_aliquot_terms));barplot(ks[1:20], vs[1:20], xlabel = "Count", ylabel = "Terms", title = "Aliquot Term Count for 500 Abundant Numbers")
```

Which yields the plot:

```
Aliquot Term Count for 500 Abundant Numbers
┌ ┐
0 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 448
1 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 448
3 ┤ 3
4 ┤ 3
6 ┤ 3
7 ┤■ 9
8 ┤■ 9
9 ┤ 3
10 ┤ 1
Terms 11 ┤ 4
12 ┤ 1
13 ┤■ 11
14 ┤ 1
15 ┤ 3
16 ┤ 1
17 ┤ 3
18 ┤ 2
19 ┤■ 8
20 ┤ 1
21 ┤ 4
└ ┘
Count
```

Here, I really cannot discern any relatable pattern as well as significance that can be tied back to abundant numbers. I am not sure if there is a way to tie significance back to abundant numbers at all in this scenario.

Let's calculate the aliquot sequences for \(500\) abundant numbers that have at most \(10\) terms within their sequence:

```
import DataStructures: counter
import UnicodePlots: barplotdeficient_aliquot_sequences = []for i in 1:1000000
divisor_sum = divisors(i)[1:end-1] |> sum
if divisor_sum < i
seq = aliquot_sequence(i, 10)
!isnothing(seq) ? push!(deficient_aliquot_sequences, seq) : continue
end i += 1 length(deficient_aliquot_sequences) == 500 ? break : continue
end
deficient_aliquot_terms = vcat(deficient_aliquot_sequences...) |> counter |> Dict |> sort;vs = collect(values(deficient_aliquot_terms));
ks = collect(keys(deficient_aliquot_terms));barplot(ks[1:20], vs[1:20], xlabel = "Count", ylabel = "Terms", title = "Aliquot Term Count for 500 Deficient Numbers")
```

Which yields the plot:

```
Aliquot Term Count for 500 Deficient Numbers
┌ ┐
0 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 487
0 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 487
1 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 487
2 ┤ 1
3 ┤■■ 28
4 ┤■■ 27
5 ┤ 1
6 ┤■ 10
7 ┤■■ 24
8 ┤■■ 23
Terms 9 ┤■■ 26
10 ┤■ 10
11 ┤■ 17
12 ┤ 2
13 ┤■ 15
14 ┤■ 9
15 ┤■■ 25
16 ┤■ 7
17 ┤■ 13
18 ┤ 1
19 ┤■■ 25
└ ┘
Count
```

Again, I really cannot discern any relatable pattern as well as significance that can be tied back to deficient numbers.

This was a small exploration that I wanted to do of these numbers to see if I could find any patterns or significance within aspects of these numbers. It seems like there may be some present within the factors of abundant and deficient numbers, but when looking at their corresponding aliquot sequences, I am unable to determine anything from a computational sense. To that end, I was also curious about how effective computation can be in helping to derive or provide hints about what may underlie these numbers. In short, it would appear that computation is quite helpful to give rise to initial questions. For example, I'd be curious to what extent the patterns I noticed within abundant and deficient numbers prolong for and if they are actually legitimate observations. At that point, one could then start applying basic data science skills to group, explore, and summarize potential trends within these numbers.

For now, my curiosity is sated and it might be worth a return to in the future. One thing this blog post did make me think about is analogies. The idea of deficient, perfect, and abundant numbers are really fascinating as it lends itself to analogs within set theory relationships (like many-to-one -> deficient number, one-to-one -> perfect number, one-to-many -> abundant number). I wonder if it could be used as analogy outside of mathematics strictly and in terms like healthcare (sub-type of a disease -> deficient number, canonical disease diagnosis -> perfect number, disease family -> abundant number). Might be worth further exploration in the future.

There was a nice discussion from within the Julia Discourse about this post talking about implementation details of some of the functions I was using and how to handle large numbers in computation. In particular, there was suggestion on using types like `BigInt`

or `BigFloat`

to handle these large numbers (such as the 8th perfect number). Interestingly, to calculate divisors, one user (gtgt) suggested the following approach which was quite beyond my thinking to calculate divisors for a given value. Here was their approach:

You can use the fact that if \(n = \prod p_{i}^{e_{i}}\) then \(\sigma{n} = \prod \frac{p_{i}^{e_{i} - 1} - 1}{p_{i} - 1}\) to avoid allocating a vector to store the divisors.

This was then followed by a programming implementation:

```
using Primesfunction sum_divisors(n)
s = one(n)
for (p, e) in Primes.factor(n)
s *= (p^(e + 1) - 1) ÷ (p - 1)
end
s
endfunction get_abundant_and_deficient_numbers(n::T) where T <: Integer
# get the first n abundant and deficient numbers
n_abundants = 0
n_deficients = 0 abundants = sizehint!(T[], n)
deficients = sizehint!(T[], n) k = 1
while n_abundants < n || n_deficients < n
σ = sum_divisors(k)
if σ > 2k && n_abundants < n
n_abundants += 1
push!(abundants, k)
elseif σ < 2k && n_deficients < n
n_deficients += 1
push!(deficients, k)
end k += 1
end abundants, deficients
end
```

I haven't had a chance to test that new implementation but I would imagine, being that it is far more type stable, that it would be more efficient. However, I still feel like we need to have safeguards for large number computation.

Within the Category Theory Zulip community, there was another great discussion about viewing these number species through the lens of categories.

David Egolf and John Carlos Baez had some fantastic ideas within that discussion that I'll excerpt here:

David: [I] wonder if the concepts of "deficient", "perfect" and "abundant" generalize to certain kinds of categories. I suppose what we would need is:

a way to say if one object is a divisor of another object

a way to add objects

a way to compare the size of objects

If we have the three things above available to us, then we can

describe an object \(A\) as "abundant" if the sum of its divisor objects is larger than \(A\).

[...] Here's an initial idea for "categorifying" the above list of three requirements, in a category with coproducts:

Say that \(A\) divides \(B\) if the coproduct of \(A\) with itself some finite number of times is isomorphic to \(B\)

Let the sum of two objects be their coproduct (so the sum is defined up to isomorphism)

Say that \(A \leq B\) if there is a monomorphism from \(A\) to \(B\)

Applying this to the category of finite sets I think gives us something similar to the usual notions of divisiblity, addition, and ordering for the natural numbers. Another approach for divisibility might be, in a category with products:

Say that \(A\) divides \(B\) if there exists some \(C\) so that the product of \(A\) and \(C\) is isomorphic to \(B\)

John: Both these approaches work, in the sense that starting from the category of finite sets and functions we get the usual concept of divisibility for natural numbers.

I encourage you to go see the rest of that discussion there if you found this perspective interesting! There was a lot more spoken of there, but I found this really fascinating. For me, my category theoretic skills still are not up to par just yet to track everything David and John are saying, so I am leaving these excerpts here for future reference to perhaps come back to this.

Zelko, Jacob. *A Fun Exploration of Perfect, Abundant, and Deficient Numbers*. https://jacobzelko.com/05102023043333-perfect-abundant-deficit. May 10 2023.

**Date:** April 15 2023

**Summary:** Considerations and discussion on a workflow for developing computable phenotype definitions to define disease

**Keywords:** #computable #phenotype #observational #health #blog #equity #archive

J. S. Zelko et al., “Developing a Robust Computable Phenotype Definition Workflow to Describe Health and Disease in Observational Health Research.” arXiv, Mar. 30, 2023. doi: 10.48550/arXiv.2304.06504.

- Motivation
- Background
- What's the Purpose about This Paper?
- What's the Process?
- What Are the Trade-offs in Developing a Definition?
- Wrap-Up

- How To Cite
- References:
- Discussion:

This small blog post gives a very high level overview of a paper I authored on developing phenotype definitions which are computable and robust to a disease being examined. This paper is vailable on arXiv under a CC BY-SA 4.0 license. Please reach out to me if you have any issues accessing this paper and I will send you a PDF!

While working on some of my notes one day, I realized I had the beginnings of a paper! In particular, I was working on a note about computable phenotypes and thinking about All Payer Claims Databases. Additionally, I am in the course of a current endeavor built on a study I conducted last year called, *A Pilot Characterization Study Assessing Health Equity in Mental Healthcare Delivery within the State of Georgia* which has made me think strongly about the whole concept of developing definitions of disease.

It just so happened while I was thinking about these ideas, my Georgia Tech Research Institute colleague, Dr. Shenita Freeman, let me know about an upcoming IEEE conference, the *2023 IEEE Computer Based Medical Systems conference*. We both took a look at the opportunity and saw that a paper about computable phenotypes as well as the overall notion of phenotype definitions was a good idea for the conference. I reached out to some collaborators and we were off on writing this paper!

What if I told you, how we, as researchers, speak about disease is, wrong – or at least, not quite accurate? For example, if I tell you, "I research diabetes!", well that is great and a noble cause but that doesn't help with telling people what it is that you are *actually* doing. As any diabetic knows, there is a huge difference between Type I Diabetes and Type II Diabetes and that doesn't consider other species of diabetes such as gestational diabetes, etc. So, it seems to me, that we need some sort of rigorous way to talk about disease, right?

Yes! Many researchers over the years have been defining what are called "phenotypes" which can be things like disease diagnoses (such as Type II Diabetes) and lab measurements (like blood glucose, HbA1C, etc.). Then, we can build upon these phenotypes into what is called a "phenotype definition". Simply put, these are a set of instructions that tells us *how* we are observing these phenotypes. Going back to our rather vague diabetes researcher, they tell us that they are actually investigating Type II Diabetes in geriatric populations within patient data they have access to. Now that is a lot more useful! A possible phenotype definition for what our researcher friend is doing is: "Patients who are 65 or older with a diagnosis of or related to Type II Diabetes."

Our researcher is in much better shape on explaining what they have done. So good that they are on their way to a research conference to present on findings from this definition! Their fellow researchers, as well as some clinicians, at the conference love what they are doing and want to know how they can reproduce this definition with their own patient datasets. And, our researcher friend has documented the process... Right?

Definitely! They have prepared it in the form of a computable phenotype definition! They took the diabetes phenotype definition, looked up medical diagnosis codes, and reviewed patient data that is generally to see what could actually be computed on their patient data. Our researcher chose to implement their computable phenotype definition within a query language like SQL but having the computable phenotype definition on hand, other researchers could either adapt the SQL or re-implement it in another approach they prefer.

And just like that, our researcher now has a much clearer, meaningful, and impactful answer to the question, "What disease are you studying?"

We spent a lot of time thinking through each step a researcher could potentially take on developing a phenotype definition and this diagram summarized our thinking of the entire process. Additionally, to summarize these steps, we created a checklist that could be followed here for developing a phenotype definition:

[ ] Intent

[ ] Decide on a motivation to guide phenotype definition construction

[ ] Literature Review

[ ] Identify phenotypes

[ ] Review or validate selected phenotypes

[ ] Identify Phenotypes

[ ] Specify phenotypes

[ ] Add constraints

[ ] Translate needs to phenotype definition

[ ] Define disqualifiers and/or strengtheners

[ ] Combine relevant phenotypes with a logic description

[ ] Develop Computable Phenotype

[ ] Review what concepts are consistently present in data

[ ] Implement phenotype definition in a computable form

[ ] Execute Definition

[ ] Execute computable phenotype definition on database

[ ] Assess & Revise

[ ] Consider assumptions within phenotype definition

[ ] Revise phenotype definition as needed

[ ] Do, Monitor, & Evaluate

[ ] Answer research question or achieve goal.

[ ] Repeat phenotype definition checklist as appropriate

To learn more about this checklist, definitely read the second part of the paper!

The paper further goes into details about some of the trade-offs within developing a phenotype definition. You may be surprised to hear that there would have to be trade-offs in defining a disease for a population. However, in practice, some counter-intuitive observations emerge:

The first is what I refer to as the paradox of phenotype definitions. A very well-intentioned but somewhat naive approach when thinking about researching specific subpopulations is to define your phenotype definition as specifically as possible. For example, a possible phenotype definition could be "White male patients with depression between the ages of 40 - 49 living within rural Tennessee counties". However, with each intersecting feature ("axis") imposed on a population, the resulting number of patients captured is smaller and smaller. Going back to our example, if you have 1000 males in Tennessee, 100 people between the ages of 40-49, and only 50 people within rural parts of the state, then at best, you'll only end up with 50 people matching your phenotype definition. The question becomes less of how to make a precise definition and more of balancing the trade-off between if a phenotype definition actually represents the population one is investigating and how useful a phenotype definition in practice will be.

The second, is how a phenotype definition can differ from a computable phenotype definition. What I mean by that is a team of clinicians who may want to study a specific disease make a very clinically accurate picture of a patient population in a phenotype definition. However, when an informaticist looks at the definition and tries to implement it into a computable phenotype definition, there may be some aspects of the original phenotype definition that do not map well to a software implementation in practice. For more details, I suggest strongly to look at the first part of this paper as this topic is quite extensive.

Finally, and by no means exhaustive to our list of trade-offs, is the idea of, "Is the data we want to analyze even computable?" An excellent example that had to be cut from the paper for space reasons is the emergence of COVID19. When COVID19 emerged as a threat to humanity, everyone wanted to analyze it and understand it as rapidly as possible. However, the problem was, was that there was a long (in the context of the pandemic) period in which collecting data on COVID19 diagnosis and symptom-type data was not possible. Hospitals would code deaths as related to symptoms exacerbated by COVID19 (myocardial infarction, pneumonia, etc.), diagnoses related to presented symptoms (bronchitis, stroke, etc.) but never to a formal COVID19 diagnosis. This has since been remedied by emergency measures taken by ICD for medical coding but now, much of the earlier pandemic data, if someone wanted to study COVID19 with any kind of phenotype definition for COVID19, is not accurate. This presents a disconnect between a known problem (COVID19) to be studied and what could actually be studied (the data that is actually available for computation).

In summary, I sincerely believe that this paper is quite useful in many different areas! Especially, this paper can now serve as a sort of touchstone for interdisciplinary teams when discussing these concepts.

Please let me know if you have any questions and comments or if you notice any egregious errors within the paper in the comments!

Zelko, Jacob. *Developing a Robust Computable Phenotype Definition Workflow to Describe Health and Disease in Observational Health Research*. https://jacobzelko.com/01102023212115-computable-phenotypes. April 15 2023.

**Date:** April 1 2023

**Summary:** Ultralearning project to learn the equivalent of an undergraduate maths or computer science student understanding of proofs and how to write them.

**Keywords:** #zettel #archive #project #blog #proof

Not Available

- Motivation
- Project Goals
- What Am I Doing?
- Concepts

- What Am I Doing?
- Roadmap

- How To Cite
- References:
- Discussion:

As I am personally moving into applied mathematics for my future graduate studies, I realized I had a deficiency. And that deficiency? How to prove things! "Proof" was always a somewhat scary thing that I encountered in mathematics every once in a while – but at the same time exciting. So, this post aims to allay these fears once and for all!

This process is adapted from the Ultralearning framework posited by Scott Young.

Gain an undergraduate level of understanding of proofs and proof creation on par with maths and computer science students.

Sets and Set Operations

Set Notation

Union and Intersection

Complement and Subset

Power Sets

Logical Structure in Proofs

Implication and Equivalence

Logical Connectives (And, Or, Not)

De Morgan's Laws

Contrapositive, Converse, and Negation of Conditional Statements

Quantifiers

Universal Quantifier (For All)

Existential Quantifier (There Exists)

Uniqueness Quantifier (There Exists Exactly One)

Proof Techniques

Direct Proof

Proof by Contradiction

Proof by Contrapositive

Existence Proofs

Induction and Recursion

Principle of Mathematical Induction

Strong Induction

Recursive Definitions

Relations and Functions

Cartesian Product

Equivalence Relations

Partial and Total Orders

Injectivity, Surjectivity, and Bijectivity of Functions

Cardinality and Countability

Cardinality of Sets

Countable and Uncountable Sets

Diagonalization Argument

Advanced Topics

Constructive Mathematics

Proof Assistants

Zorn's Lemma and Well-Ordering Principle

Completeness Axiom and Real Numbers

This is based on the Meta Learning step Young described as well as some additional tweaks of my own:

**Outcomes:**The knowledge and abilities you’ll need to acquire for success.**Topic:**The topic to learn**Done:**If this task has been completed (X) or not yet (cell is empty)

Done | Topic | Outcomes |
---|---|---|

X | Set Theory | Understand basic set notation and operations, including subsets, set identities, and Cartesian products. |

X | Logic | Understand propositional logic, including truth tables, implications, negations, and quantifiers. |

Proof Writing | Develop skills in writing and constructing mathematical proofs, including direct and indirect proofs, proof by contradiction, proof by contrapositive, and proof by mathematical induction. | |

Number Theory | Understand basic number theory concepts, including divisibility, modular arithmetic, prime numbers, the fundamental theorem of arithmetic, the Euclidean algorithm, and Diophantine equations. | |

Combinatorics | Develop skills in combinatorial counting principles, including permutations, combinations, and the inclusion-exclusion principle. | |

Analysis | Develop skills in calculus, including limits, continuity, differentiation, integration, sequences, and series. | |

Algebra | Understand algebraic structures, including groups, rings, and fields. |

This table describes the very broad topics, resources I'll use, and the expected learning outcomes for each topic. As I progress through this table, I will add an "X" to each row I have studied. Furthermore, the table is ordered by level of difficulty.

Done | Skill Level | Topic | Concept |
---|---|---|---|

X | Beginner | Set Theory | Set Identities |

X | Beginner | Set Theory | Set Notation |

X | Beginner | Set Theory | Set Operations |

X | Beginner | Set Theory | Sets and Elements |

X | Beginner | Set Theory | Subsets and Proper Subsets |

Beginner | Set Theory | Cartesian Products | |

X | Beginner | Logic | Propositions and Logical Connectives |

X | Beginner | Logic | Truth Tables |

X | Beginner | Logic | Implication and Equivalence |

X | Beginner | Logic | Negation and De Morgan's Laws |

X | Beginner | Logic | Quantifiers |

X | Beginner | Logic | Logical Implication |

X | Intermediate | Proof Writing | Proof Techniques |

Intermediate | Proof Writing | Direct Proofs | |

Intermediate | Proof Writing | Indirect Proofs | |

Intermediate | Proof Writing | Proof by Contradiction | |

Intermediate | Proof Writing | Proof by Contrapositive | |

Intermediate | Proof Writing | Proof by Mathematical Induction | |

Intermediate | Proof Writing | Strong Induction | |

Intermediate | Proof Writing | Structural Induction | |

Intermediate | Proof Writing | Proof by Cases | |

Intermediate | Proof Writing | Existence and Uniqueness Proofs | |

Intermediate | Proof Writing | Counterexamples | |

Intermediate | Number Theory | Divisibility and Modular Arithmetic | |

Intermediate | Number Theory | GCD and LCM | |

Intermediate | Number Theory | Prime Numbers | |

Intermediate | Number Theory | Fundamental Theorem of Arithmetic | |

Intermediate | Number Theory | Euclidean Algorithm | |

Intermediate | Number Theory | Diophantine Equations | |

Intermediate | Combinatorics | Counting Principles | |

Intermediate | Combinatorics | Pigeonhole Principle | |

Intermediate | Combinatorics | Permutations and Combinations | |

Intermediate | Combinatorics | Inclusion-Exclusion Principle | |

Intermediate | Combinatorics | Recurrence Relations | |

Intermediate | Combinatorics | Generating Functions | |

Advanced | Analysis | Limits and Continuity | |

Advanced | Analysis | Differentiation | |

Advanced | Analysis | Integration | |

Advanced | Analysis | Sequences and Series | |

Advanced | Algebra | Groups | |

Advanced | Algebra | Rings and Fields |

This table gets more into exact topics and concepts to master. They have an associated difficult level and overall topic. Moreover, this a synthesis of concepts and topics to be covered based on class syllabi from:

MA307: Introduction to Proof (taught by Dan Dugger at University of Oregon)

300:T6 Introduction to Mathematical Reasoning (taught by Chloe Urbanski Wawrzyniak at Rutgers University)

Introduction to Proof-based Discrete Mathematics (taught by Matthew Gelvin at University of Chicago)

MATH 301: Introduction To Proofs (taught by Emily Riehl at John Hopkins University)

Additionally, in the construction of this project, I'd like to thank John Carlos Baez for some of his suggestions!

Zelko, Jacob. *Learning What Every Undergraduate Mathematician Should Know about Proofs*. https://jacobzelko.com/04012023221538-learning-proofs-beginners. April 1 2023.

**Date:** January 7 2023

**Summary:** A thorough tutorial on how to use Julia for asynchronous workflows to do many things, at once!

**Keywords:** #blog #archive #julia #programming #literate #workflow #asynchronous #weave #browser #sync #node

Not Available

- Motivation
- Set-Up
- Simple Workflow Process
- Blocking Workflow
- Asynchronous Workflow

- Asynchronous Workflow for Literate Programming
- Conclusion

- How To Cite
- References:
- Discussion:

I sometimes find myself wanting to execute a Julia file I have just edited. This is different than what the excellent Revise.jl package (created by Tim Holy) does in that I want to execute the full file and not just update function definitions. Moreover, I may just want Julia to do something else entirely upon updating a file or directory. This can be very helpful in analysis workflows as well as literate programming. Creating an extended post on my process for this was inspired by a Julia Discourse post I provided an answer to.

Here is how I recommend setting up your Julia environment to follow this tutorial (I assume you have Julia installed correctly):

Create an empty directory (folder) somewhere on your computer. (NOTE: For sake of this tutorial, I will refer to it as the "test" folder).

Within your favorite text editor (like Notepad, Vim, VSCode, etc.), open this directory.

Open and create a file called "tmp.jmd" (NOTE: Keep the file and your editor open as we will be coming back to this file quite a lot).

Open your Julia REPL within the directory and activate a temporary environment within package mode:

`pkg> activate --temp`

Add into this temporary environment the following packages:

`pkg> add FileWatching, Weave`

Install node onto your machine.

I suggest using the great tool, `nvm`

, which allows easy management of node versions.

Install the node package,

`browser-sync`

, which allows for syncing of webpages based on updates.

Here is the command you can use in your command line:

`npm i -g browser-sync`

NOTE: Steps 6 and 7 are not necessary if you are not interested in the section on literate programming

There are two ways to start this workflow. One blocking (i.e. you cannot use the Julia REPL while working) and another spawning an asynchronous background process to enable you to work with the same REPL. Here is gif showing these workflows in action:

This creates a synchronous task in your Julia REPL that can then run whatever command you want while you monitor a specific file (or folder). In this case, I am making the task print a statement that says “Change Detected!” to my REPL whenever there is a change in the file called “tmp.jmd”.

```
using FileWatchingwhile true
watch_file("./tmp.jmd")
println("Change Detected!")
end
```

This workflow is not optimal as this loop continues and locks your REPL from doing anything else.

This creates an asynchronous task in the background of your Julia REPL that can then run whatever command you want while you monitor a specific file (or folder). In this case, I am making the task print a statement that says “Change Detected!” to my REPL whenever there is a change in the file called “tmp.jmd”.

```
using FileWatching@async while true
watch_file("./tmp.jmd")
println("Change Detected!")
end
```

From here, you could then still interact with this REPL while this task is running in the background. Furthermore, you can change the line that says `println("Change Detected!")`

to whatever command (or commands) you want to trigger.

This workflow allows one to work with a Julia Markdown document with `Weave.jl`

to preview your work in real time. There a few steps to start the workflow but here is how it looks when in operation:

First, execute the following snippet in your Julia REPL to start the asynchronous process to watch for changes and tell Julia to weave the file we will modify:

```
using FileWatching
using Weave@async while true
watch_file("./tmp.jmd")
weave("./tmp.jmd")
end
```

Next, run this in a separate terminal:

`browser-sync start --server --start --file "./*.html"`

or this command within your Julia REPL (NOTE: This will make your REPL session very cluttered but you can still use your REPL):

`@async run(`browser-sync start --server --start --file "./*.html"`)`

At this point, you should see `browser-sync`

spit out a lot of information that looks something like this:

```
[Browsersync] Access URLs:
--------------------------------------
Local: http://localhost:3000
External: http://192.168.1.186:3000
--------------------------------------
UI: http://localhost:3001
UI External: http://localhost:3001
--------------------------------------
[Browsersync] Serving files from: ./
```

You'll want to grab that URL that looks like `http://localhost:3000`

in the `Local`

spot and then open that in your web browser. With the URL that you get (it could be on a different port), navigate to `http://localhost:3000/tmp.html`

.

Finally, when you have this all in place, go ahead and add this code block into the `tmp.jmd`

file that was created:

```
# Hello World This is a Julia Markdown file. ```julia
2 + 2
```
```

You should see a few things happen. You'll see a few messages from the Julia REPL stating that `Weave.jl`

is weaving your document to your desired output. Then, you'll see `browser-sync`

say something about updating or syncing. Finally, you will see your browser update to the latest version of your weaved document.

Feel free to play around with this more and see the dynamism of the workflow! I tend to do this when I am iteratively developing reports within Julia and want to tinker within the REPL at the same time I am creating documents. Having to wait for rendering `Weave.jl`

documents and the like was a pain and this took the pain away.

I hope you appreciated this post! If you have any suggestions, comments, or additional workflows this could be used for, please comment below. May your Julia sessions now be even more supercharged!

Zelko, Jacob. *Asynchronous Workflow Using Julia Tutorial*. https://jacobzelko.com/01082023043553-julia-async-workflow. January 7 2023.

**Date:** January 6 2023

**Summary:** Composite guide in using spaced repetition systems in learning maths

**Keywords:** #math #learning #anki #flashcards #spaced #repetition #proofs #theorems #definitions #project #archive #blog

Not Available

- Motivation
- Introduction
- Principles in Making Anki Cards for Maths
- Card Types
- Definitions
- Properties
- Theorems
- Implication Only Theorems
- Implication and Equivalence Theorems

- Self Testing
- The "Ankification" of Proofs
- Initial Glances of a Proof
- Building Out a Conceptual Roadmap of a Proof
- Consider the Alternatives of a Proof

- Conclusion

- How To Cite
- References:
- Discussion:

A major goal in my life is to get better with studying maths. As I fully intend to study mathematics more rigorously, a powerful component and tool in my studying toolbox has been Spaced Repetition Systems like Anki or Memrise. In particular, I wanted to know how to use these sort of systems to study and retain math more effectively in my studies – which sometimes face unexpected interruptions. This post serves as a guide to do just that.

TODO: Add this discussion into here How I operate is that Anki is a supplement to my learning and not the whole piece. For example, I use Anki to learn definitions and their properties, but then when I work on proofs, I usually scribble that down into my notes and then try my best at linking together different definitions until I have something pleasant. [11:51 AM]TheCedarPrince: I say “linking” intentionally as my notes are stored within a Zettelkasten where each of the definitions I’ve learned are also found. So then I weave together the notes quickly into longer form pieces or proofs or what have you [11:52 AM]TheCedarPrince: Let me know if you have any questions — happy to hear your thoughts!

These principles are curated specifically to think about maths and Anki:

Anki is a complement to learning – it is not the whole process of learning.

With maths, it is required to sit down, to struggle, and fully work through concepts. Anki is at best a complement to help you remember what you have learned or know. At worst, a distraction that one ends up frustrated with as one is not seeing the progress they want to see.

Add small pieces that are worth remembering to Anki.

Be brutally honest in marking an Anki review. [1]

Good cards lead to good results – take the time on making good cards. [1]

If having problems with a certain topic or set of questions, break the topic down to the smallest components possible to better understand the overall topic. [2]

Identify the facts, procedures, and concepts and try to use those in creating smaller supplementary cards to help you with a concept. [3]

In maths, there are many different types of things to learn. Accordingly, there are a few different types of cards that are useful to make this learning process easier.

In learning definitions, some useful principles to keep in mind in constructing Anki cards that test definitions are the following:

A definition can usually be broken down across the following parts:

```
- The object to be defined
- Its descriptor (this is a unique definition for this object)
- Notation conventions for this object
- Properties associated with the object
- Any context that the object may be associated with (e.g. when exploring a set, are we talking about sets with in ZFC Set Theory or within the category of $Set$?) [4]
```

There can be many different definitions for the same object

`- In this case, create different cards for each different definition`

Use clozes liberally to study each part of a given definition [5]

TODO: Include example note outline here

TODO: Add what I have learned about property cards TODO: Include example note outline here

As identified in [4], there are typically two types of theorems: *Implication Only* and *Implication and Equivalency*.

*Implication Only* theorems have the quality that the conditions associated with that particular theorem, when satisfied, imply specific conclusions. Similar to making cards for definitions, there are some principles that can be followed for these sorts of cards:

An

*Implication Only*theorem can be broken down across the following parts:

```
- The theorem name to be defined
- Its descriptor (the definition for this theorem)
- Any context that the theorem may be associated with
- Notation conventions for this object
- Conditions of the theorem
- Conclusions from this theorem
```

*Implication and Equivalence* theorems possess the virtue where if an associated set of conditions are met, imply that two or more arbitrary statements can be equivalent. [4] Making cards for this type of theorem is almost identical to making cards for definitions. The only key difference is that one should also add fields for the equivalent statements that result from this theorem.

TODO: Add section based on question cards TODO: Include example note outline here

Michael Nielsen wrote an excellent piece on this process called "Using spaced repetition systems to see through a piece of mathematics". Basically, he proposes the use of Anki to deeply understand and study proofs. Personally for me, I am not yet confident in an approach to draft proofs in Anki form. I took notes on Nielsen's "Ankification" and processing of a proof and am including some digested thoughts he had on working through proofs.

Pick out single elements of a proof

Convert these elements to Anki cards

As you pick out these elements and create cards, they may be able to be formulated into definition cards. Or, they may be needed to become their own special sort of card or fact – anything that can help in the learning process.

A proof is not a linear list of statements. Per Nielsen, it is much more valuable to think of it as relationships between simple observations. Each of these connections between observations are not just made for no reason. Rather, determine how to find multiple ways to think of the same observation or come to the same observation that is useful for a proof. At this stage, we are beginning to learn our way comfortably around a proof and finding multiple ways to get to each step in a proof is imperative in building that comfort.

Once you have built significant comfort with a proof, keep considering different aspects of the proof. Consider the alternatives within this proof – if this assumption were changed or that context was altered, what are the ramifications of this proof? This process can continue endlessly but should only stop when you are wholly confident in your understandings of a give proof.

To conclude, this short guide is by no means exhaustive. Instead, I made this as a short reference for myself in studying maths using a spaced repetition learning process. I'll certainly come back to revise this as I continue to work and go through the maths I study to share what works for me.

Zelko, Jacob. *Making Math Flashcards Using Spaced Repetition Systems*. https://jacobzelko.com/01072023041127-making-math-anki. January 6 2023.

[1] “[Guide] How to Anki Maths the right way,” Jan. 31, 2016. https://www.reddit.com/r/Anki/comments/43mf83/guide*how*to*anki*maths*the*right_way/ (accessed Jan. 09, 2023).

[2] M. Nielsen, “Using spaced repetition systems to see through a piece of mathematics,” 2019. http://cognitivemedium.com/srs-mathematics

[3] S. Young, Ultralearning. HarperCollins Publishers, 2019.

[4] L. Thorburn, “Using Anki for mathematics,” Mar. 08, 2020. https://www.lukethorburn.com/anki/ (accessed Jan. 09, 2023).

[5] A. Milchior, “How I use Anki to learn mathematics - LessWrong,” Dec. 07, 2016. https://www.lesswrong.com/posts/8ZugMc4E5959Xh86i/how-i-use-anki-to-learn-mathematics (accessed Jan. 09, 2023).

**Date:** December 31 2022

**Summary:** Ultralearning project to learn the equivalent of an undergraduate maths of computer science student understanding of graph theory.

**Keywords:** #zettel #ultralearning #graph #theory #project #archive #blog

Not Available

- Procedures

- Roadmap

- How To Cite
- References:
- Discussion:

I have always found graph theory interesting ever since I was exposed to it back in my undergraduate studies at Georgia Tech. I found out about it through SIR Modeling but personally found the structure of graphs far more fascinating than its application to SIR models. Furthermore, as I intend to be pursuing graduate studies in applied mathematics, why not get started with trying to understand it?

This process is adapted from the Ultralearning framework posited by Scott Young.

Gain an undergraduate level of understanding of graph theory on par with maths and computer science students.

Basic concepts:

Definition of a graph and its components:

Understand the components of a graph and the differences between directed and undirected graphs.

Subgraphs and isomorphism:

Understand the definitions of subgraphs and isomorphism and be able to identify and compare them in a given graph.

Directed graphs:

Understand the definition of a directed graph and be able to represent it using adjacency and incidence matrices.

Graphs and their properties:

Understand various properties of graphs and be able to apply them to analyze and classify different types of graphs.

Connectivity:

Paths and circuits:

Understand the definitions of paths and circuits and be able to identify and construct them in a given graph.

Connectedness and components:

Understand the concept of connectedness and be able to determine whether a graph is connected or disconnected.

Understand the concept of graph components and be able to identify them in a given graph.

Distance in graphs:

Understand the concept of distance between vertices and be able to compute it using various measures.

Trees:

Trees and their properties:

Understand the definition of a tree and be able to identify and distinguish trees from other types of graphs.

Rooted trees and binary trees:

Understand the concept of rooted trees and be able to construct and manipulate them.

Understand the concept of binary trees and be able to construct and manipulate them.

Spanning trees

Matrix representations of graphs:

Adjacency matrices:

Understand the concept of an adjacency matrix and be able to represent a graph using an adjacency matrix.

Incidence matrices:

Understand the concept of an incidence matrix and be able to represent a graph using an incidence matrix.

Graph algorithms:

Breadth-first search:

Understand the concept of breadth-first search and be able to implement it to traverse a graph.

Depth-first search:

Understand the concept of depth-first search and be able to implement it to traverse a graph.

Planar graphs:

Planar graphs and their properties:

Understand the definition of a planar graph and the properties that distinguish planar graphs from other types of graphs.

Euler's formula:

Understand Euler's formula and be able to apply it to analyze the structure of planar graphs.

Dual graphs:

Understand the concept of a dual graph and be able to construct the dual of a given planar graph.

Coloring graphs:

Vertex coloring:

Understand the concept of vertex coloring and be able to color the vertices of a given graph according to various coloring schemes.

Edge coloring:

Understand the concept of edge coloring and be able to color the edges of a given graph according to various coloring schemes.

Matchings and factors:

Matchings:

Understand the concept of a matching in a graph and be able to identify and construct matchings in a given graph.

Factors:

Understand the concept of a factor in a graph and be able to identify and construct factors in a given graph.

More advanced topics:

Hamiltonian cycles:

Understand the concept of a Hamiltonian cycle and be able to identify and construct Hamiltonian cycles in a given graph.

Network flows:

Understand the concept of network flows and be able to model and analyze flow problems in graphs.

Graphs and groups:

Understand the connection between graphs and group theory, and be able to apply group-theoretic techniques to analyze graphs.

Graphs and logic:

Understand the connection between graphs and logic, and be able to apply logical techniques to analyze graphs.

Graphs and geometry:

Understand the connection between graphs and geometry, and be able to apply geometric techniques to analyze graphs.

Definition of a graph and its components:

Vertices (also called nodes).

Edges.

Weights.

Labels.

Subgraphs and isomorphism.

Directed graphs and their representations:

Adjacency matrices.

Incidence matrices.

Graph properties:

Connected/disconnected.

Bipartite/not bipartite.

Cyclic/acyclic.

Paths and circuits.

Connectedness and components.

Distance between vertices.

Trees:

Definition.

Unique path between vertices.

Root vertex.

Branches.

Additional topics:

Matrix representations:

Adjacency matrices.

Incidence matrices.

Graph algorithms:

Breadth-first search.

Depth-first search.

Planar graphs and their properties:

Definition of a planar graph.

Properties that distinguish planar graphs from other types of graphs.

Euler's formula.

Dual graphs.

Tree properties:

Rooted trees.

Binary trees.

Representing graphs using different notations (e.g. adjacency lists, adjacency matrices, incidence matrices).

Traversing graphs using different algorithms (e.g. breadth-first search, depth-first search).

Analyzing the properties of graphs (e.g. connectedness, bipartiteness, acyclicity).

Finding paths and circuits in graphs.

Identifying and constructing different types of trees (e.g. rooted trees, binary trees).

Coloring the vertices or edges of a graph according to various coloring schemes (e.g. vertex coloring, edge coloring).

Finding matchings and factors in graphs.

Identifying and constructing Hamiltonian cycles in graphs.

Modeling and analyzing flow problems in graphs using network flows.

Applying group-theoretic and logical techniques to analyze graphs.

Applying geometric techniques to analyze graphs.

This is based on the Meta Learning step Young described as well as some additional tweaks of my own:

**Outcomes:**The knowledge and abilities you’ll need to acquire for success.**Rationale:**Know exactly why you want to learn a skill or subject.**Resources:**The resources you’ll use when learning.**Done:**If this task has been completed (X) or not yet (cell is empty)

Done | Topic | Resources | Outcomes |
---|---|---|---|

Definition of a graph and its components | [1], [2] | Graph components; differences between directed and undirected graphs | |

Subgraphs and isomorphism | [1], [2] | Subgraphs; isomorphism; identify and compare given graphs | |

Directed graphs | [2] | Directed graph; representation using adjacency and incidence matrices | |

Graphs and their properties | [1], [2] | Properties of graphs; analyze; classify different types of graphs | |

Paths and circuits | [1], [2] | Paths and circuits; identify and construct given graph | |

X | Connectedness and components | [1] | Determine if graph is connected; identify graph components |

Distance in graphs | [1], [2] | Vertex distances; compute vertex distances | |

Trees and their properties | [1], [2] | Tree definitions; identify trees; distinguish trees | |

Rooted trees and binary trees | [1], [2] | Rooted trees; construct and manipulate rooted trees | |

Adjacency matrices | [1] | Adjacency matrix concept; representation of adjacency matrix | |

Incidence matrices | [1] | Incidence matrix concept; representation of incidence graphs | |

Breadth-first search | [1], [2] | Breadth-first search concept; graph traversal | |

Depth-first search | [1], [2] | Depth-first search concept; graph traversal | |

Planar graphs and their properties | [1] | Planar graph definition; properties | |

Euler's formula | [1], [2] | Euler's formula; structure of planar graphs | |

Dual graphs | [1] | Dual graph concept; construction of dual graph | |

Vertex coloring | [1], [2] | Vertex coloring concept; coloring of graph vertices | |

Edge coloring | [1], [2] | Edge coloring concept; coloring of graph edges | |

Matchings | [1], [2] | Matching concept; identification and construction | |

Factors | [1] | Factor concept; identification and construction | |

Hamiltonian cycles | [1], [2] | Hamiltonian cycle concept; identification and construction | |

Network flows | [1] | Network flow concept; modeling and analysis | |

Graphs and groups | [2] | Graph and group theory connection; analysis | |

Graphs and logic | [2] | Graph and logic connection; analysis | |

Graphs and geometry | [2] | Graph and geometry connection; analysis |

This table describes the very broad topics, resources I'll use, and the expected learning outcomes for each topic. As I progress through this table, I will add an "X" to each row I have studied. Furthermore, the table is ordered by level of difficulty with "Definition of a graph and its components" being the first topic I should learn and "Graphs and geometry" being the more advanced topics I should study. The topics and resources here are based on [1] and [2] with potentially more resources to add in the future.

Done | Skill Level | Topic | Concept |
---|---|---|---|

Beginner | Fundamental concepts | Paths | |

Beginner | Fundamental concepts | Cycles | |

Beginner | Fundamental concepts | Subgraphs | |

Beginner | Fundamental concepts | Isomorphism | |

Beginner | Trees | Spanning trees | |

Beginner | Connectivity | Max-flow Min-cut theorem | |

Beginner | Connectivity | Menger's theorem | |

Beginner | Eulerian and Hamiltonian graphs | Eulerian and Hamiltonian graphs | |

Beginner | Matchings | Hall's theorem | |

Beginner | Matchings | Tutte's 1-factor theorem | |

Beginner | Colorings | Greedy coloring | |

Beginner | Colorings | Chromatic polynomial | |

Beginner | Planar graphs | Euler's formula | |

Beginner | Planar graphs | Kuratowski's theorem | |

Beginner | Planar graphs | Equivalents of the 4-color theorem | |

Beginner | Ramsey theory | Ramsey's theorem | |

Intermediate | Structure of 1-, 2-, 3-connected graphs | Blocks | |

Intermediate | Structure of 1-, 2-, 3-connected graphs | Ear-decomposition | |

Intermediate | Structure of 1-, 2-, 3-connected graphs | Contractible edges | |

Intermediate | Perfect graphs | Bipartite graphs | |

Intermediate | Perfect graphs | Comparability graphs | |

Intermediate | Tutte's synthesis of 3-connected graphs | Tutte's synthesis of 3-connected graphs | |

Intermediate | Systems of distinct representatives | Systems of distinct representatives | |

Intermediate | Matching polytope | Matching polytope | |

Intermediate | Chinese postman problem | Chinese postman problem | |

Intermediate | Dual graphs | Dual graphs | |

Intermediate | Graphs on surfaces | Graphs on surfaces | |

Intermediate | Highly chromatic graphs of large girth | Highly chromatic graphs of large girth | |

Intermediate | Vizing's theorem | Vizing's theorem | |

Intermediate | Erdos-de Bruijn compactness theorem | Erdos-de Bruijn compactness theorem | |

Advanced | Line graphs of bipartite graphs | Line graphs of bipartite graphs | |

Advanced | Chordal graphs | Chordal graphs | |

Advanced | Complements of the above | Complements of the above | |

Advanced | Perfect Graph Theorem | Perfect Graph Theorem | |

Advanced | Dilworth's theorem | Dilworth's theorem | |

Advanced | Applications of Ramsey's theorem | Applications of Ramsey's theorem | |

Advanced | Lower bound for Ramsey numbers | Lower bound for Ramsey numbers | |

Advanced | Properties of random graphs | Properties of random graphs | |

Advanced | Threshold functions | Threshold functions | |

Advanced | 0-1 law | 0-1 law |

This table gets more into exact topics and concepts to master. They have an associated difficult level and overall topic. Moreover, this a synthesis of concepts and topics to be covered based on class outlines from:

COMS W4203: Introduction to Graph Theory (taught by Timothy Sun at Columbia University)

MATH 6014: Graph Theory (taught at Georgia Institute of Technology)

MATH 4022: Introduction to Graph Theory (taught at Georgia Institute of Technology)

Zelko, Jacob. *Achieving an Undergraduate Level Understanding of Graph Theory*. https://jacobzelko.com/01012023000122-graph-theory-learning. December 31 2022.

[1] R. Trudeau, Introduction to Graph Theory, Dover. DOVER PUBLICATIONS, INC., 1994.

[2] N. Hartsfield and Ringel, Pearls in Graph Theory A Comprehensive Introduction. DOVER PUBLICATIONS, INC., 1994.

**Date:** May 15 2022

**Summary:** A book review of Thomas Kuhn's most famous book that challenged all of the philosophy of science and introduced such concepts as normal science, paradigm shift, why non-scientific fields struggle with similar revolutions, and when one can adopt new paradigms.

**Keywords:** ##book ##blog ##outline #review #normal #science #paradigm #shift #revolution #science #philosophy #crisis #archive

T. S. Kuhn and I. Hacking, The Structure of Scientific Revolutions, Fourth edition. Chicago; London: The University of Chicago Press, 2012.

- Introduction
- What Is
*Normal Science*?- What Are the Characteristics of Normal Science?

- What Was Kuhn's Concept of a Paradigm?
- What Are the Characteristics of a Paradigm?
- What Are the Benefits of Choosing a Paradigm?

- What Causes the Downfall of a Paradigm?
- What Happens When a Paradigm Is in Crisis?
- Extraordinary Problems

- "Scientific Revolutions" and the Term "Revolution"
- Invoking New Paradigms on Faith
- On the Non-Linearity of Science
- Additional Notes
- Paradigm Shifts in Other Domains
- Non-Kuhnian Revolutions or Domain Transformations

- Conclusion

- How To Cite
- References:
- Discussion:

This book has had an immense impact in the world of science. From how science is taught to how science is thought about, Kuhn's notions of scientific revolution resonated across nearly all domains of science as well as touching into the arts. The central conceit that Kuhn stated in this book is that the scientific community knows what the world is like. I was recommended this book by my friend, collaborator, and Category Theorist, Professor James P. Fairbanks I can see why it was recommended as it fits in quite nicely to the ensuing philosophical ideas found in Category Theory.

According to Kuhn, *normal science*, is research based on past scientific accomplishments that are considered the foundation for that area of investigation. Generally, this is the area where most scientists spend their time. The research done in normal science can be theoretical or empirical.

In the book, Kuhn referred to this as "mop-up work" and that this mopping up or "filling out" of science is what most scientists do. Although language such as "mop-up" work can make one think that Kuhn was being pejorative to these so-called "scut scientists", he did not intend it so. In later versions of this book, he made a response to this point of confusion and clarified that this work still is fascinating and crucial in many ways to the advancement of science.

An important aspect of normal science is that it does not engage with or seek out anything new. The invention of theories, development of new phenomena - anything abnormal - is not part of normal science. Novelty is abhorrent and antithetical to normal science.

Aside from this fundamental aspect of normal science, Kuhn posited that there are three general areas of research in normal science. He emphasized that they do not always hold or are always discrete from one another:

Investigating questions around the fundamental facts found in a specific domain.

Questions that are predicted and expected to have answers existing within an already existing research domain.

Further articulating the fundamental facts held in a given domain.

Kuhn reintroduced into the modern English lexicon the word, "paradigm". Before his time, the term was rather archaic. A paradigm is the background through which normal science is conducted loosely speaking. Another way of thinking about it is from online user *heynonnynonnie* suggesting that a paradigm is a consensus agreed upon by a group of practitioners of a field.

When he used the word, as Kuhn admitted himself, he overloaded the term to mean quite a number of things. To my understanding, this was my gist of a Kuhnian paradigm in that paradigms generally have two core characteristics:

Unprecedented and can sustain practitioners

Open-ended and with problems to be solved or investigated

Endemic to paradigms is that they posit theories around a domain of research. For a paradigm to be accepted, it must propose a better theory than its predecessors or competitors. Furthermore, a proposed new paradigm is not required to address every fact of the world.

When a domain decides upon a paradigm, avenues of research can now be readily scoped. By presupposing paradigm, questions can now be posed within the context of the paradigm. In accordance to the paradigm, it can be reasonably assumed that solutions can be found.

A benefit that did not immediately appear to me was the insulating properties of a paradigm. An example that Kuhn suggested is that in the social sciences, one has to frame an avenue of research by its importance to society (such as studying racial discrimination, etc.). Problems such as these are notoriously difficult to frame and reach a quorum consensus on due to possibly many competing schools of thought or groups. Instead, by keeping a conversation limited to the adherents of a specific paradigm, a researcher can easily keep moving forward through problems without having to strive against competing schools of thought. Furthermore, the insulating power of a paradigms gives a researcher the ability to solely focus on problems they think they can solve or are solvable.

I will admit, his example of social scientists was at first confusing. But, upon reflection, what made this example make sense is that he later explained his decision to have this as an example due to the fact that there are often many competing paradigms in these areas. This conflict makes progress difficult as many people still argue the fundamentals of these sciences.

Normal science certainly is clear, safe, and predictable. But, what if a scientist finds results that do not fit within a paradigm? What if a result, ruling out all possible errors carried forth by a highly scrupulous researcher, is simply unexplainable - an anomaly against the backdrop of a paradigm? To Kuhn, this marks an important inflection point in adopted paradigms.

Novelty in science only emerges with resistance and difficulty because any, as Kuhn wisely points out, researchers who investigate every anomaly will not get much done. But at some point, these anomalies will continue to accumulate to the point of being unignorable to adherents of a paradigm. A sort of malcontent will arise adherents and to quote Sherlock Holmes, "When you have eliminated the impossible, whatever remains, however improbable, must be the truth." And that truth is that an accepted paradigm is no longer sufficient to explain a domain which leads to a period of significant upheaval.

Kuhn characterized the downfall of a paradigm in three generic ways:

Awareness of anomaly

Further recognition of awareness

Contested possible change or challenge to the existing paradigm

When the anomalies are fully unconscionable, they are finally acknowledged and, to quote Kuhn:

"Discovery commences with [...] awareness of anomaly"

The previous paradigm prepared an adherent on how to detect an anomaly and in a way, set up its own downfall. At this stage of upheaval, many will attempt to explain or address the anomalous behavior. A new era of discovery in the face of a failing paradigm marks this interstitial period of an outdated paradigm where many speculative and unarticulated theories abound - often at odds with one another in some way. The previous paradigm's rules become hazy and the rules of normal research begin to veer away from its typical, standard process.

This problem leads normal science into a rather interesting process of science called "extraordinary science". Extraordinary science is an offshoot of normal science that exists when a paradigm is in crisis and to address the paradigm in crisis. It is the science that either repairs, questions, or proves the deficiency of an existing paradigm. Important to note about extraordinary science is that they are never known at the outset of a paradigm but only after advanced normal research in the context of a given paradigm.

According to Kuhn, these crises are the requirements for a new paradigm to come forth. This leads to extraordinary science as this episode in a paradigm's life is extraordinary that causes a basic shift in how science is even conducted. This period, coined by Kuhn, is called a "Scientific Revolution".

Kuhn was very particular in invoking the term "revolution". He related the phrase "scientific revolution" analogously to a political revolution. In the same way that a political revolution is often fomented when a political body fails to serve adequately the growing body of its populace, so too are the grounds set for a scientific revolution.

Although a paradigm may shift how one does science, the world itself does not change. Rather, the way we view and operate in the world does. For the adoptees of a new paradigm, the adoptee must say something to the effect of "I once understood X to be Y, but I was mistaken" and in doing so admit a form of error in looking at reality.

A problem inherit to the development of new paradigms is that to adopt these new paradigms is most certainly an act of faith. Early adherents to a new paradigm must stand against the onslaught of problems that were solved or addressed by a previous paradigm. They must simply have hope and faith that this new paradigm they have adopted will succeed in the areas where the previous paradigm failed. As Kuhn said:

"A decision of that kind can only be made on faith"

Even when this new paradigm is able to successfully surmount longstanding problems, Kuhn says that even still a vast majority of scientists will be apprehensive to adopt this paradigm. Why? Kuhn observed that two conditions must be met for further adoption:

The new paradigm must solve outstanding problems that the prior paradigm could not.

Much of the problem solving tools from previous paradigms should still be able to be used in this new paradigm.

In this sense, there is a type of verification or vetting of a new paradigm – an analogy to natural selection as Kuhn pointed out. For a new paradigm to be successful, not only must it address all problems hitherto encountered by prior paradigms, but be able to solve outstanding problems prior paradigms could not and the barrier to adopting this new paradigm must be minimal. "No theory ever solves all [...] puzzles with which it is confronted at a given time; nor are the solutions already achieved often perfect," is a fitting bookend from Kuhn to remember when encountering new paradigms.

One small final footnote on new paradigms is an observation by Kuhn: the invention of a paradigm most generally comes from someone very young or new to the field where a paradigm exists that they are trying to change.

One thing out of this book is that I very much appreciated and agreed with Kuhn's notion that science is not linear nor is it necessarily the result of a universal truth being uncovered. Rather, it is the confluence of emerging theories that evolve and find they can fit with other theories or paradigms. These newly combined theories then come together to possibly overturn or change the understanding of currently practiced science.

This fallacious notion of linear knowledge going to a particular truth about the world is based in part on science historians and textbook makers. As textbooks are designed to assist students in learning as much material as possible, the teacher with the textbook maker chooses to formulate a textbook around one particular area of knowledge thereby giving a sense of progress to a domain's particular truth. As science does not deal with all possible experiments but only those which are doable according to an existing paradigm, so too a textbook must be very judicious in what it presents to a student from its paradigm.

As I wrap up this review of *The Structure of Scientific Revolutions*, here are some additional notes that didn't quite fit in the overall review. I did still find these pertinent as well as helpful in expanding thoughts about paradigms.

Outside of Science, Technology, Engineering, and Mathematics, Kuhn's notion of paradigm shifts do occur. Such a paradigm shift based on Kuhn's writings in an area such as the social sciences could be - and I am making an educated guess here - something akin to the near modern universal condemnation and outlawing of slavery. However, to this end Kuhn posited that unlike the other natural sciences, there still exist competing schools of thought. A visceral modern example is that social scientists also have to defend their choice of a research problem such as examining race in the context of the social determinants of health where other existing schools of thought may fiercely disagree on the validity of such endeavors.

Furthermore, Kuhn gave the great example that, "the man who argues that philosophy [...] has made no progress emphasizes that there are still Aristotelians, not that Aristotelianism has failed to progress," I am in agreement with Kuhn in that it is not that schools of thought outside Science, Technology, Engineering, and Mathematics are not making progress. It is that their are much more fundamental conflicts in these spaces that have yet to be reconciled in sufficient ways.

In an online group discussion, the user *ish-i-ness* furthered this idea to the arts that, "that in the arts you could even say that there is a desire to discover an aesthetic truth, something that is indisputably, objectively beautiful and thought provoking, rather than just a fad that is only interesting because it’s appeals to a particular, subjective set of preferences." Here, *ish-i-ness* invokes this notion of aesthetic truth which is associated with Theodore Adorno.

In an online group discussion, the user *heynonnynonnie*, made a great point that non-Kuhnian scientific revolutions happen more frequently than the bigger Kuhnian scientific revolutions (such as the heliocentric versus geocentric theory, etc.). As these are much smaller scale revolutions and do not affect the entirety of science, I call these "domain transformations" as they transform or affect a particular domain's way of operating but not the rest of science as a whole. *heynonnynonnie* gave the example that the discovery of the DNA structure, though fantastic and a major discovery, provided only pure information that fit within the preexisting paradigms.

I thought this book was well done and also worth this lengthy analysis. It provided context to a lot of ideas that were born from the notions Kuhn coined here. For me, it felt like giving me a bit more of a better foundation to understand better how to operate in domains. Even if this piece is labeled more as a philosophy of science piece, it could easily also be considered a sociological exploration of academia as a whole. I recommend the read, but also, not to take the notions as literally or seriously as possible. Kuhn himself suggested that as he later would get inundated with letters saying that there was a revolution happening because of X - help me. As judicious as Kuhn was in using the term revolution, we too must be careful to recognize when a revolution or paradigm shift is occurring.

Zelko, Jacob. *The Structure of Scientific Revolutions*. https://jacobzelko.com/05152022174848-structure-revolutions. May 15 2022.

**Date:** May 7 2022

**Summary:** An evolving note on my perspectives on faith as a practicing

**Keywords:** ##blog #faith #christianity #nicean #creed #archive

Not Available

- How To Cite
- References:
- Discussion:

*A living note on my faith as a Christian*

Saying you are a Christian is a loaded statement that colors a spectrum. It brings to mind the halls of a quiet countryside monastery echoing with billowing hymns to outraged shouts of damnation from a pulpit. Saying you are a Christian is strangely all encompassing and hollow simultaneously.

I am a Christian and this blog post is an overview of what *I* mean by that.

My faith as a Christian affects every aspect of my life as I view God as the Lord of All. I mean "Lord of All" as I view God is omniscient over what exists and what will be. He is the master programmer, the master engineer, the master author, the master – . And as a result of that, I view Him as the one source of knowledge and guidance.

I do not mean that one can learn everything from the Bible. There is no book in the Bible that contains Kepler's Laws of Planetary Motion or the Central Limit Theorem. Rather, God communicates a framework through His Word, the Bible, that proves sufficient for every domain and has given us minds and bodies to go and explore His created world.

By God, it is my understanding that there are definite "right" and "wrong" absolutes set forth by a good and righteous God. A result of this I must address is the sad stereotype that unfortunately resonates all too frequently with the truth is the judgemental behavior found in Christian circles. This often has a cultural and historical aspect on how persons view religious institutions - I do not want to discuss that.

Instead, I endeavor practicing the ability to disagree with but accept others. Sadly, this is a skill that is all too-lacking - amongst Christians and beyond. I am perfectly fine discussing generally anything and perhaps most importantly, disagreeing over something. This is a pattern set forth by Jesus from the beginning. Jesus was not sent to those who agreed with him but those who so fiercely opposed Him that they killed Him and still showed compassion for his murderers.

And most important in my faith is my acceptance and trust in the person who is Jesus Christ as the Son of God and Savior of the World. Saving us from what? Ourselves. As I believe there are definite "right" and "wrong" absolutes, it would follow that there are consequences for when we pursue "wrong". And out of those consequences, the most severe is separation from God both now while we are alive and the eternity that our souls find ourselves in upon our demise.

And Jesus is that saving power - that bridge which brings us from that separation to eternity with God. As no one has ever done what is "right" except only Jesus who was both God and a person just like us. I trust that Jesus was killed around 30 CE, He was entombed for three days, resurrected proving that death has no mastery over God, and ascended to the right hand of God. In short, when Jesus said to the grieving sister Martha over the death of her brother, Lazarus:

```
Jesus said to her,"I am the resurrection and the life.
The one who believes in me will live, even though they die;
and whoever lives by believing in me will never die.Do you believe this?"- John 11:25 - 26
```

To which I respond: "yes". There are multiple omissions of my credo that I have left out here for brevity. I have further included a copy of the Nicaean Creed which I am in full accord with that can help fill in some of those gaps, succinctly:

Nicaean Creed

I believe in one God, the Father almighty, maker of heaven and earth, of all things visible and invisible.

I believe in one Lord Jesus Christ, the Only Begotten Son of God, born of the Father before all ages. God from God, Light from Light, true God from true God, begotten, not made, consubstantial with the Father; through him all things were made. For us men and for our salvation he came down from heaven, and by the Holy Spirit was incarnate of the Virgin Mary, and became man.

For our sake he was crucified under Pontius Pilate, he suffered death and was buried, and rose again on the third day in accordance with the Scriptures. He ascended into heaven and is seated at the right hand of the Father. He will come again in glory

to judge the living and the dead and his kingdom will have no end.

I believe in the Holy Spirit, the Lord, the giver of life, who proceeds from the Father and the Son, who with the Father and the Son is adored and glorified, who has spoken through the prophets.

I believe in one, holy, catholic and apostolic Church. I confess one Baptism for the forgiveness of sins and I look forward to the resurrection of the dead and the life of the world to come. Amen.

To leave off, please note: I am not a perfect Christian. No one is or can be. I try to follow God with confident steps; oftentimes, it looks more like a faltering walk. Yet, by the grace of God, I have courage that each day can be better and I can show Christ's love to others not through faux perfection of arrogance but the ordinary efforts of a common man with an extraordinary Savior.

*Solil Deo Gloria – To God Alone Be the Glory.*

Zelko, Jacob. *Personal Perspectives on Faith*. https://jacobzelko.com/05072022162026-personal-faith-perspectives. May 7 2022.

**Date:** April 16 2022

**Summary:** A working proposal on a standard knowledge format for taking notes

**Keywords:** #open #knowledge #standard ##summary #format #blog #archive

Not Available

- Motivation
- Model Components
- Digressions and Recommendations for Model
- Title Block
- Bibliography Block
- Notes
- References

- Implementation Examples
- Tools for Working with Model
- Conclusion

- How To Cite
- References
- Discussion:

Knowledge is one of the most nebulous ideas known to mankind since nearly the beginning of time. What may be knowledge to one person may be useless noise to another - this encapsulates the difficulty in defining knowledge. As a result of its many possible meanings, I put forth a rather opinionated proposal for what I term the "Open Knowledge Model".

The Open Knowledge Model is a standard that defines not how to maintain knowledge in what are typically coined "knowledge management systems". Instead, its focus is on how to structure information that goes directly into such systems. It is fully compatible with the ISO 30401 standard.

There are many different knowledge management systems available to someone – from a pen and pencil to various software offerings. Each of these offerings are very unique and accordingly offer benefits and cons. This model remains independent of any such offering but instead prescribes a model to structure information in any of the offerings one chooses to pursue.

The model is composed of the following sections:

**Title Block**- this is a unique block that begins with the name of the note followed by three required subcomponents:

```
- **Date** - the date the note was created
- **Summary** - a brief, single sentence summary of what this note is about
- **Keywords** - keywords that can be used to find or associated with the content of this note
```

**Bibliography Block**- this contains the bibliographic information that is associated with the specific note**Notes**- where one's notes go on the note subject in whatever format one so chooses**References**- list of references used in the note

And that is the core requirement of the model. What follows are a few digressions on this model.

It is recommended that for **Date**, one chooses a consistent convention for how one will record the date across their knowledge base using this model. In practice, there can be as many **Keywords** as one chooses, but it is often better to be more concise in what you choose as words.

It can be possible that there isn't one bibliography associated with this not or none at all. In those situations, it makes sense to perhaps write something like: "Not Available".

This is the most critical piece to any note. One can structure and write their notes in any way they please here. Include images, diagrams, code snippets – anything your knowledge management system supports. The model imposes no specific structure here – implementations may differ.

It is recommended to never write down the references section manually. Instead, offload this to a third party reference manager or another tool that could generate this information from a given note.

To give an example of implementations, here are some examples of implementations:

Here are a list of some tools that have emerged to work with the Open Knowledge Model:

NoteMate.jl - a companion for working with a knowledge management system that adheres to the Open Knowledge Model.

Written in Julia and offers parsing from Markdown notes to other target formats.

This standard is an active work in progress and is the product of years of experimentation. If you find problems with this model or believe it too restrictive or unwise, please comment in the discussion or reach out to me. My hope is that this standard will co-evolve with new tools and increase the utility of any person's knowledge management system.

Zelko, Jacob. *The Open Knowledge Model*. https://jacobzelko.com/04172022033744-open-knowledge-standard. April 16 2022.

**Date:** April 15 2022

**Summary:** Book review on an approach of using category theory to decouple and discuss characteristics of gender without conflating the two - great read!

**Keywords:** ##summary ##blog #review #book #gender #ingressive #congressive #category #theory #archive

E. Cheng, X + Y: A Mathematician’s Manifesto for Rethinking Gender. Basic Books, 2020.

- Introduction
- Category Theory as Tool for Thinking on Gender
- Congressive versus Ingressive Thinking
- Conclusion
- Final Thoughts

- How To Cite
- References:
- Discussion:

Eugenia Cheng takes a nuanced approach to the discussion around gender. As she references, some feminists' battle cry is the phrase, "Smash the patriarchy!". In Cheng's idea of feminism, she instead looks for language that is less divisive and more inclusive encompassed in her saying, "Let’s transform our world into a more congressively led future."

With this approach, she launches into her core contribution to the discussion on gender which is introducing the mathematics of category theory to decouple historical characteristics associated genders from the genders themselves. Cheng argues that this is a better approach to take in gender discussions to think more deeply about traits or characteristics in isolation rather than rooted in gender. You can then critique a characteristic or trait rather than a whole group of people.

Rather than being a book on mathematics and gender, category theory is used more as a mental model or framework to enact this decoupling. This works well as category theory fundamentally concerns itself about relationships. In her opinion, category theory enables one to think more clearly about about characteristics with a great degree of flexibility.

Cheng introduced two crucial words into her argument which can describe concepts, behaviors or people: "congressive" and "ingressive". This is how she defined these terms summarized below:

**Ingressive**- putting oneself over society, imposing on others frequently, far more individualistic than collaborative, less flexible thinking**Congressive**- society over self, prioritizing others, highly collective and community-focused, holistic thought patterns

In this way, the onus of characteristics is moved from tightly coupled gender stereotypes to decoupled conversations on those characteristics in isolation. However, this isn't entirely the case all the time as most concepts, behaviors, or people have some tendencies to ingressive behavior and some to congressive behavior. As Cheng herself posits, "When gender is relevant, we need to consider it. When character is relevant, we need to consider it. But we shouldn't assume they are linked."

She concludes in her book how she doesn't want, "to see "masculine" and "feminine" character traits evaluated against each other [...] so only one side can win," in discussions around gender. She emphasizes how she doesn't want women having to act like men to succeed. Rather, she believes that there are not only other ways to make contributions to society but rather that there are other traditional forms of success.

Overall, I really enjoyed this book! I feel like her point was made pretty early on and I appreciated some of the examples. However, as I am acquainted with category theory as well as having read some material on gender studies in the past, I personally was able to skip through various parts.

I think her notion of decoupling is immensely important however I am not sure on her terminology of "ingressive" and "congressive". Whenever anyone overloads terms with additional definitions, it makes me nervous that confusion in discussion can occur. However, since these are not commonly used terms, at least in my experience, it makes me think this may not be as big an issue.

Finally, it has made me think about where this method of decoupling can be used rigorously. In particular, I am curious about race and concepts such as the social determinants of health and how category theoretic approaches can be brought there. I think Cheng even teases readers with this idea so I am curious to see if she revisits the ideas someday:

"The idea of a temporary abstraction also takes into account the thorny issue of intersectionality, and the need to take other forms of power imbalance into account besides those governed by gender, for example race, wealth, sexual orientation, and so on."

Overall, good read!

Zelko, Jacob. *X + Y : A Mathematician’s Manifesto for Rethinking Gender*. https://jacobzelko.com/04162022002725-mathematician-gender-rethinking. April 15 2022.

**Date:** April 9 2022

**Summary:** A review of the book Othello and some thoughts on the central conflict

**Keywords:** ##summary ##book #play #tragedy #racism #boredeom ##blog #archive

W. Shakespeare and others, "Othello:[1622]," Oxford Text Archive Core Collection, 1991.

- Racism and Deconstruction of the Noble Savage
- Manipulation as Enigmatic Entertainment
- Transcendental Love

- How To Cite
- References:
- Discussion:

It is surprisingly progressive in some ways I found - even by today's standards which was interesting. The racist overtones in the book were very much in your face but with the treatment of Othello, I did not find it similar to the idea of the "noble savage" literary idea but rather much different. Instead, it felt like Othello was treated by all other accounts either an equal or due to his experience, exempt from the racial overtures his peers had towards him generally.

What I enjoyed the most was this could be also retitled: "Gaslighting: the Book" with how the villain Iago manipulated everyone in the book. It was breathtaking the amount of animus Iago had to everyone and what stuck with me the most at the end when the character was finally caught in his schemes was that Iago didn't really have a reason. Even when Iago himself was trying to justify himself, it was very shaky at best and he knew it. I think he was just a character who knew he could be good at being very bad and enjoyed the power trip it gave him.

I quite liked the fact that he did not have a real motive. It drove home the pettiness of him but is not unrealistic. To me, he reminded me of a man who was very bored and his most fun was in controlling the lives of others in some way even if it meant his ruin. It has been said that the most dangerous people to watch for are those who have nothing to lose when you have every thing to lose. The think this is a very apt description of Iago as a man who has nothing but is happy to see some one lose everything.

Finally, what has stuck with me is how much Othello and Desdemona were in love with each other. It was typical of Shakespeare to write these deep romances where the bonds between the lovers could transcend the times that the people were from. It is both saddening and interesting that the situation described here is not too dissimilar to the world we live in still. In the start of the book, you can see the bigotry at full display in the father of Desdemona which is eerily like modern discussions.

Zelko, Jacob. *Othello*. https://jacobzelko.com/04102022034503-othello. April 9 2022.

**Date:** August 3 2021

**Summary:** The template I use for taking notes

**Keywords:** #notes #template #archive #blog

Not Available

- Example of Actual Note

- How To Cite
- References
- Discussion:

This is an example implementation of the Open Knowledge Standard I use when taking notes in Markdown:

`# [Title]**Date:** [DATE]**Summary:** [ONE SENTENCE SUMMARY]**Keywords:** [KEYWORDS PREPENDED BY #. EXAMPLE: #healthcare]## Note Linked From[REFERENCE TO WHERE THE NOTE WAS LINKED FROM]## Bibliography[BIBLIOGRAPHIC REFERENCE FOR WHERE YOU GOT THE INFORMATION]## Notes[CONTENT OF NOTE]## References:[ADDITIONAL REFERENCES USED IN NOTE]`

What follows is an actual note in my knowledge management system:

```
# Normal Science**Date:** May 22 2022**Summary:** An overview of what normal science is according to Thomas Kuhn.**Keywords:** #normal #science #characteristics #work #archive## BibliographyT. S. Kuhn and I. Hacking, The Structure of Scientific Revolutions, Fourth edition. Chicago ; London: The University of Chicago Press, 2012.## Notes### What Is "Normal Science"?According to Kuhn, *normal science*, is research based on past scientific accomplishments that are considered the foundation for that area of investigation.
Generally, this is the area where most scientists spend their time.
The research done in normal science can be theoretical or empirical.In the book, Kuhn referred to this as "mop-up work" and that this mopping up or "filling out" of science is what most scientists do.
Although language such as "mop-up" work can make one think that Kuhn was being pejorative to these so-called "scut scientists", he did not intend it so.
In later versions of this book, he made a response to this point of confusion and clarified that this work still is fascinating and crucial in many ways to the advancement of science.#### What Are the Characteristics of Normal Science?An important aspect of normal science is that it does not engage with or seek out anything new.
The invention of theories, development of new phenomena - anything abnormal - is not part of normal science.
Novelty is abhorrent and antithetical to normal science.Aside from this fundamental aspect of normal science, Kuhn posited that there are three general areas of research in normal science.
He emphasized that they do not always hold or are always discrete from one another:1. Investigating questions around the fundamental facts found in a specific domain.
2. Questions that are predicted and expected to have answers existing within an already existing research domain.
3. Further articulating the fundamental facts held in a given domain.## References
```

NOTE: As a matter of style, I tend to put sentences each on their own line. This helps me with being able to more quickly pull pieces of information across my knowledge management system.

Zelko, Jacob. *My Note Templates*. https://jacobzelko.com/08032021134232-notes-template. August 3 2021.

**Date:** January 7 2021

**Summary:** How causality gives us tools to understand the question of cause-and-effect and confounders

**Keywords:** ##bibliography #causality #diagrams #counterfactual #statistics #graphs ##book ##blog #archive

J. Pearl and D. Mackenzie, The book of why: the new science of cause and effect, First edition. New York: Basic Books, 2018.

- Benefits of Causal Analysis
- Critiques of Statistics
- Causal Calculus
- Inference Engine
- Ladder of Causality
- Mini-Turing Test
- Bayesian Analysis
- Causal Diagrams
- Paths in Path Diagrams
- Chain junction
- Fork Junction
- Collider Junction

- Lessons from Path Diagrams

- Paths in Path Diagrams

- How To Cite
- References
- Discussion:

This book shows that data is stupid. Data can record events but cannot answer why any of the events are the way they are.

Causal inference posits the brain as the most advanced tool for understanding cause and effect.

Forcing an occurrence means to submit it to one influence to trigger the desired event

**Counterfactual:** When scientific inquiry involves retrospective reflection. "Why?" is a counterfactual question.

Probabilities encode our beliefs about a static world. Causality explains probabilities in a changing world.

Create a smoother human-machine interface.

*THOUGHTS: I wonder if that is what attracted me to the idea of Causal Inference - that it enables better human-machine interfaces. Like human-machine interaction as a discipline; I wonder if they have much in this area. Perhaps reach out to Valentine Wilson about the question?*

Galton separated causation from statistics in 1889 causing the two separate fields to fully manifest.

"Granger causality" and "vector autocorrelation" exists to accommodate for causal explanations. Associated Thoughts: Judea's critique on probability-based causality

Causal calculus uses two communications forms:

Causal Diagrams: communicates what is known.

Symbolic language: defines what is wanted to be known

The inference engine assumes perfect and unlimited data for the given figure:

**Estimand:** generalized mathematical formula to answer data questions. A statistical quantity estimated from data that can represent an answer to a query.

A given estimand is computed on the basis of the causal model alone, prior to an examination of the specifics of the data. This gives the inference engine better adaptibility.

**Binary Evaluation of Query:** determines if a query can be answered under an existing causal model.

**Knowledge:** experience from the past such as prior observations and education.

**Assumptions:** explicit statements from available Knowledge.

**Queries:** the scientific questions to be answered.

**Testable Implications:** observable patterns or dependencies resulting from the listening pattern of a causal model.

**Estimate:** Estimate for the answer is determined alongside uncertainty metrics.The metrics reflect limited data, measurement errors, or missing data.

First rung: observation. This concerns recognition of patterns. This rung asks, "What if I see ...?"

The second rung: Doing. Altering an environment to achieve a certain goal. This rung poses the questions of "What if we do...?" or "How?"

Mini-Turing Test: Encode a simple story on a machine and see if it can answer causal questions a human can answer.

Rules:

Limited only to causal reasoning and language.

The story can be encoded in the easiest way for the programmer.

Simplified Bayesian analysis: prior belief + new evidence = revised belief.

Bayesian inference enables one to express personal experiences mathematically and combine it with data in a principled and transparent way.

"Causation" via a causal diagram is straightforward. A variable X is a cause of Y if Y listens to X. Y's value is determined by what it hears.

B is the mediator which relays the effect of A to C. B filters information about A from C.

B is a confounder of A and C. B makes A and C statistically correlated despite no direct link between them.

Conditioning on B will make A and C dependent

Causal analysis allows us to quantify real world processes

Path analysis draws conclusions about individual causal relationships by examining the diagram as a whole.

Two people creating differing causal diagrams for the same data and may not arrive at the same result.

Zelko, Jacob. *The Book of Why*. https://jacobzelko.com/01072021082043-book-of-why. January 7 2021.

**Date:** July 26 2020

**Summary:** A wonderful but scathing critique of the American dream as told from the perspective of a low-income, and at times, lower-middle class, American family with the father eking out an existence as a traveling salesman.

**Keywords:** ##bibliography #capitalism #classic #fiction #satisfaction ##book ##blog #archive

A. Miller, Death of a Salesman. Penguin Books, 1998.

- What is Satisfaction?
- Shattering of Innocence
- False Expectations

- How To Cite
- References
- Discussion:

"I'm thirty-four years old, I oughta be makin' my future.

That's when I come running home. And now, I get here, and I don't know what to do with myself. [After a pause] I've always made a point of not wasting my life, and everytime I come back here I know that all I've done is to waste my life."

*Biff talking to his mother about his life's relative miserable existence*

His obsession for not wasting his life or waiting almost for his life to start is similar to my thoughts. Interesting. I think the big thing is here is the overinflated notion of being "big" or important. As though that were the ultimate goal of any man.

"All I can do now is wait for the merchandise manager to die.

And suppose I get to be merchandise manager? He's a good friend of mine, and he just built a terrific estate on Long Island. And he lived there about two months and sold it, and now he's building another one. He can't enjoy it once it's finished. And I know that's just what I would do. I don't know what the hell I'm workin' for. Sometimes I sit in my apartment—all alone. And I think of the rent I'm paying. And it's crazy. But then, it's what I always wanted. My own apartment, a car, and plenty of women. And still, goddammit, I'm lonely."

*Happy talking to his brother, Biff, about his own struggle and situation in life*

This carries on the theme of the dissatisfaction with the attainment of being "big". Happy got everything he could want but is still unhappy – contrasting this with Biff is that Biff is unhappy even though he did not get what he wanted. These are two examples of being dissatisfied in uniquely different ways.

Linda: "[to Willy ...] Why must everybody conquer the world?"

It is a powerful insight into Linda's thinking. To Linda, Willy already has the best things in the world. He just can't stop to realize it or rather, it is not enough for him to have a loving family. He needs to be big in the eyes of "people". This reminds me of my note on "False Expertise" where there, the problem is that being exposed enough to material gives you prestige. In this case, Willy thinks being acknowledged by people as a nice guy is enough to ensure endless success.

Willy: "Never mind! He's going to give you those points. I'll see to it." Biff: "He wouldn't listen to you."

*The crushing moment when Biff sees through his father and loses complete faith in him.*

I find this moment in the story more tragic than Willy's eventual death. It is this moment which doomed Willy and his family for the rest of his life. It's never explained why Willy had an affair but, perhaps, that is the point. A person does not need a reason for slipping. I find it interesting how Willy tries to keep up the front of being an exemplar amongst men. Though Biff later calls his father, "a prince among men," I believe it was to keep up Willy's pretense. I wonder if Willy did confess this incident to his family, if things may have been different...

Willy

After all the highways, and the trains, and the appointments, and the years, you end up worth more dead than alive."

The moment in which Willy realizes his life is not moving towards any grand destiny and decides fully upon suicide. It's an interesting insight about the idea of providing incentives.

Willy: "Without a penny to [my brother's name], [...] it's not what you do[.] It's who you know and the smile on your face!"

The crux of Willy's mentality on how life "should be" and how he expects life to work. Ultimately, this is proven false when he fails to get a job after pulling his contacts. In reality, nearly the exact opposite of this maxim is the truth.

Charley: "The only thing you got in this world is what you can sell.

And the funny thing is that you're a salesman, and you don't know that."

*Willy's neighbor Charley admonishing him on his frustration with the world not working they way Willy expects it to.*

Ultimately, this searing criticism of Willy shows to him that he doesn't have any skills to offer outside of his perfunctory service as a salesman. He is a mediocre man who never tried to adapt and move with the times. And Willy refuses to believe that life passed him by in that way.

Zelko, Jacob. *Death of a Salesman*. https://jacobzelko.com/12262020224653-death-salesman. July 26 2020.

**Date:** April 28 2020

**Summary:** Choosing to sleep is an act of faith

**Keywords:** ##zettel #sleep #faith #psalm5 #archive #blog

Not Available

- Psalm 5 Scripture
- Exegesis

- How To Cite
- References
- Discussion:

```
Listen to my words, Lord,
consider my lament.
Hear my cry for help,
my King and my God,
for to you I pray.In the morning, Lord, you hear my voice;
in the morning I lay my requests before you and wait expectantly.[...]But let all who take refuge in you be glad;
let them ever sing for joy.
Spread your protection over them,
that those who love your name may rejoice in you.Surely, Lord, you bless the righteous;
you surround them with your favor as with a shield. - Psalms 5:1-3, 11-12
```

One of the key things to note about this passage is when the Psalmist chooses to lay his requests before God – the morning. If you wake up and the very first thing you do is cry and lament before God, then this illustrates a point of extreme stress. The object of stress in this Psalm is enough to haunt the writer's every waking moment. It causes enough concern for the Psalmist to wait on God to answer the writer.

Yet, what may or may not be implied from this is that the Psalmist still chooses rest and/or sleep. In verses 11 - 12, the Psalmist knows that God protects and blesses those who love Him and he chooses to have faith and trust in that knowledge to rest and rejoice.

Zelko, Jacob. *Sleep as an Act of Faith*. https://jacobzelko.com/04282020175356-sleep-act. April 28 2020.

**Date:** March 29 2020

**Summary:** Takeaways from the book How to Take Smart Notes

**Keywords:** ##bibliography #knowledge #notetaking #zettelkasten #mentalmodels #writing #blog #archive

S. Ahrens, How to Take Smart Notes: One Simple Technique to Boost Writing, Learning and Thinking – for Students, Academics and Nonfiction Book Writers.

- Quotes from the Book:

- How To Cite
- References
- Discussion:

This was overall a book on knowledge management – in particular, how to take, digest, and use the notes we make while reading material, listening to lectures, or absorb knowledge in general. Sonke Ahrens, the author of the book, also gave a rather in-depth overview of the Zettelkasten method created by sociologist Niklas Luhmann. I found the book useful in giving legitimately very good advice on note-taking, great anecdotes to illustrate his point, and also assistance on using the Zettelkasten method.

Furthermore, Ahrens made an interesting point saying that if you are approaching writing where you start with just a blank page, you are missing the point. When you approach a blank page, it *ought* not feel blank but rather the place to put your notes and ideas together that you have been collecting about a particular topic. Ahrens believes that fundamental teachings about how to write long-form papers are wrong in that they do not start with the most crucial aspect of the writing process – free form thought. And free form thought, when investigating a topic, is best captured using a global sort of note taking method like the Zettelkasten.

`"Every intellectual endeavour starts with a note" [pg 8]"We only write if it helps us with our own thinking." [pg 101]`

These two quotes get at the idea that when we write and create notes, we are not only creating notes but also playing with ideas and digesting them into our minds.

Zelko, Jacob. *How to Take Smart Notes*. https://jacobzelko.com/03292020180520-smart-notes. March 29 2020.