mirror of
https://github.com/Brandon-Rozek/website.git
synced 2024-11-21 15:56:29 -05:00
Syndicated to Medium
This commit is contained in:
parent
17e7209a41
commit
bfa4e52c0b
15 changed files with 95 additions and 75 deletions
|
@ -1,10 +1,11 @@
|
|||
---
|
||||
title: "Accidentally Reinforcing Model Predictions in iNaturalist with Seek"
|
||||
date: 2022-10-04T11:38:03-04:00
|
||||
draft: false
|
||||
tags: []
|
||||
date: 2022-10-04 11:38:03-04:00
|
||||
draft: false
|
||||
math: false
|
||||
medium_enabled: true
|
||||
medium_post_id: 6ecb481df869
|
||||
tags: []
|
||||
title: Accidentally Reinforcing Model Predictions in iNaturalist with Seek
|
||||
---
|
||||
|
||||
I [previously wrote](/blog/identifying-plants-with-inaturalist/) about using Seek to identify organisms and then uploading them separately to iNaturalist. Though after some thought I believe that by only uploading photos that Seek has blessed as knowing, I may be reinforcing peculiar features of the dataset and hence the model.
|
||||
|
@ -21,6 +22,4 @@ Does this mean that uploading photos classified by Seek is redundant? No! Becaus
|
|||
|
||||
For the image itself, one recommendation I have is the following. Take the image that Seek recommends for the classification, and then take one or two different angles of the same organism. Within iNaturalist, you can upload multiple photos for a single organism.
|
||||
|
||||
Now go and take some pictures :)
|
||||
|
||||
|
||||
Now go and take some pictures :)
|
|
@ -1,9 +1,11 @@
|
|||
---
|
||||
title: "Bmaptool: A simpler way to copy ISOs"
|
||||
date: 2023-01-18T11:08:20-05:00
|
||||
date: 2023-01-18 11:08:20-05:00
|
||||
draft: false
|
||||
tags: []
|
||||
math: false
|
||||
medium_enabled: true
|
||||
medium_post_id: b4f33babc3ac
|
||||
tags: []
|
||||
title: 'Bmaptool: A simpler way to copy ISOs'
|
||||
---
|
||||
|
||||
Bmaptool is a project created by Intel for creating and copying data using block maps. It's meant to be a simpler, faster, and more reliable tool than `dd`.
|
||||
|
@ -115,4 +117,4 @@ bmaptool: info: synchronizing '/dev/sdX'
|
|||
bmaptool: info: copying time: 2m 49.2s, copying speed 21.6 MiB/sec
|
||||
```
|
||||
|
||||
Recall that the `bmap` generation isn't necessary, as you can pass in the `--nobmap` flag.
|
||||
Recall that the `bmap` generation isn't necessary, as you can pass in the `--nobmap` flag.
|
|
@ -1,10 +1,13 @@
|
|||
---
|
||||
title: "Corecursion, Unfold and Infinite Sequences"
|
||||
date: 2022-11-12T10:45:04-05:00
|
||||
date: 2022-11-12 10:45:04-05:00
|
||||
draft: false
|
||||
tags: ["Scala", "Functional Programming"]
|
||||
math: true
|
||||
medium_enabled: true
|
||||
medium_post_id: edd1ef8ee314
|
||||
tags:
|
||||
- Scala
|
||||
- Functional Programming
|
||||
title: Corecursion, Unfold and Infinite Sequences
|
||||
---
|
||||
|
||||
Recursion takes a large problem and breaks it down until it reaches some base cases. One popular example, is the factorial function.
|
||||
|
@ -188,4 +191,4 @@ If you want to learn more about unfold or see a different take, then the followi
|
|||
|
||||
https://blog.genuine.com/2020/07/scala-unfold/
|
||||
|
||||
https://john.cs.olemiss.edu/~hcc/csci555/notes/FPS05/Laziness.html
|
||||
https://john.cs.olemiss.edu/~hcc/csci555/notes/FPS05/Laziness.html
|
|
@ -1,10 +1,13 @@
|
|||
---
|
||||
title: "Deep Recursion in Functional Programming"
|
||||
date: 2022-11-11T14:45:17-05:00
|
||||
date: 2022-11-11 14:45:17-05:00
|
||||
draft: false
|
||||
tags: ["Scala", "Functional Programming"]
|
||||
math: false
|
||||
medium_enabled: true
|
||||
medium_post_id: 3515de0ab3a1
|
||||
tags:
|
||||
- Scala
|
||||
- Functional Programming
|
||||
title: Deep Recursion in Functional Programming
|
||||
---
|
||||
|
||||
In functional programming, we often look at a list in terms of its head (first-element) and tail (rest-of-list). This allows us to define operations on a list recursively. For example, how do we sum a list of integers such as `[1, 2, 3, 4]`?
|
||||
|
@ -115,5 +118,4 @@ deep_sum([[1], 2])
|
|||
(0 + 1) + 2
|
||||
1 + 2
|
||||
3
|
||||
```
|
||||
|
||||
```
|
|
@ -1,10 +1,13 @@
|
|||
---
|
||||
title: "Different Views of Fold and Their Combinations"
|
||||
date: 2022-11-09T17:45:26-05:00
|
||||
date: 2022-11-09 17:45:26-05:00
|
||||
draft: false
|
||||
tags: ["Scala", "Functional Programming"]
|
||||
math: true
|
||||
medium_enabled: true
|
||||
medium_post_id: 13bdb8690a4c
|
||||
tags:
|
||||
- Scala
|
||||
- Functional Programming
|
||||
title: Different Views of Fold and Their Combinations
|
||||
---
|
||||
|
||||
Fold is a functional programming pattern that operates over some sequence with a binary operation and a starting value. There are two variants:
|
||||
|
@ -150,4 +153,4 @@ l1.foldLeft(id_outer)((c1, n1) =>
|
|||
|
||||
|
||||
|
||||
[^1]: Thanks Clare for thinking of this example!
|
||||
[^1]: Thanks Clare for thinking of this example!
|
|
@ -1,10 +1,14 @@
|
|||
---
|
||||
title: "Fold Not Only Reduces"
|
||||
date: 2022-11-09T15:15:10-05:00
|
||||
date: 2022-11-09 15:15:10-05:00
|
||||
draft: false
|
||||
tags: ["Functional Programming", "Scala", "Haskell"]
|
||||
math: false
|
||||
medium_enabled: true
|
||||
medium_post_id: b419f7d25313
|
||||
tags:
|
||||
- Functional Programming
|
||||
- Scala
|
||||
- Haskell
|
||||
title: Fold Not Only Reduces
|
||||
---
|
||||
|
||||
One misconception when first learning about fold is that it takes a list of elements of a certain type (`List[T]`) and "reduces" it to a single item of type `T`.
|
||||
|
@ -60,5 +64,4 @@ Haskell Example:
|
|||
l5 c n if n > 5 then c ++ [n] else c
|
||||
foldl l5 [] [5, 7, 1, 8, 9, 3]
|
||||
-- Returns [7,8,9]
|
||||
```
|
||||
|
||||
```
|
|
@ -1,10 +1,11 @@
|
|||
---
|
||||
title: "Identifying Plants With iNaturalist"
|
||||
date: 2022-09-29T20:08:30-04:00
|
||||
draft: false
|
||||
tags: []
|
||||
date: 2022-09-29 20:08:30-04:00
|
||||
draft: false
|
||||
math: false
|
||||
medium_enabled: true
|
||||
medium_post_id: bc9fd04fff31
|
||||
tags: []
|
||||
title: Identifying Plants With iNaturalist
|
||||
---
|
||||
|
||||
Seek by iNaturalist ([android](https://play.google.com/store/apps/details?id=org.inaturalist.seek)) ([apple](https://apps.apple.com/us/app/seek-by-inaturalist/id1353224144)) is a great app for identifying plants and animals. It uses a computer vision model to provide the hierarchical classifications. In fact they run yearly challenges with their dataset on [Kaggle](https://www.kaggle.com/c/inaturalist-2021/overview) as well as publicly host their dataset on AWS ([instructions](https://github.com/inaturalist/inaturalist-open-data)).
|
||||
|
@ -37,4 +38,4 @@ When you click on "What did you see?", you'll see a new screen with the level of
|
|||
|
||||
Once you select the species you're ready to publish the observation! This will generate a unique URL for the observation. For example, my [white snakeroot observation](https://www.inaturalist.org/observations/135665018). If another community member agrees with your classification and the observation has enough supporting metadata, then it could become research grade!
|
||||
|
||||
Research grade observations gets used by scientists for research which may also help improve the image classification algorithm for all. Happy identifying!
|
||||
Research grade observations gets used by scientists for research which may also help improve the image classification algorithm for all. Happy identifying!
|
|
@ -1,9 +1,12 @@
|
|||
---
|
||||
title: "Deploying a Lightweight Git Server with CGit using Docker-Compose"
|
||||
date: 2023-01-20T21:14:03-05:00
|
||||
date: 2023-01-20 21:14:03-05:00
|
||||
draft: false
|
||||
tags: ["Git"]
|
||||
math: false
|
||||
medium_enabled: true
|
||||
medium_post_id: b86160f97df9
|
||||
tags:
|
||||
- Git
|
||||
title: Deploying a Lightweight Git Server with CGit using Docker-Compose
|
||||
---
|
||||
|
||||
In this post, I'll talk about how we can setup CGit within a docker-compose setup. We'll be using the [ClearLinux CGit](https://hub.docker.com/r/clearlinux/cgit) container.
|
||||
|
@ -197,4 +200,4 @@ These references talked about setting up cgit outside of docker, but they helped
|
|||
- https://www.yaroslavps.com/weblog/minimal-git-server/
|
||||
- https://blog.stefan-koch.name/2020/02/16/installing-cgit-nginx-on-debian
|
||||
- https://bryanbrattlof.com/cgit-nginx-gitolite-a-personal-git-server/
|
||||
- https://matejamaric.com/blog/git-server/
|
||||
- https://matejamaric.com/blog/git-server/
|
|
@ -1,10 +1,12 @@
|
|||
---
|
||||
title: "Memoization in Scala"
|
||||
date: 2022-11-12T11:49:51-05:00
|
||||
date: 2022-11-12 11:49:51-05:00
|
||||
draft: false
|
||||
tags: ["Scala"]
|
||||
math: false
|
||||
medium_enabled: true
|
||||
medium_post_id: 2558d6abd9b8
|
||||
tags:
|
||||
- Scala
|
||||
title: Memoization in Scala
|
||||
---
|
||||
|
||||
In a [recent post](/blog/corecursion-unfold-infinite-sequences/), I talked about how corecursion is a great solution for removing redundant calculations. However if we're sticking to a recursive approach, one way we can reduce redundancies is to use memoization. The idea here is that we save prior computations in some data structure and refer to them if requested.
|
||||
|
@ -34,7 +36,4 @@ Calling `fib(5)` returns `5`. However, we can also see the saved computations by
|
|||
|
||||
```
|
||||
HashMap(0 -> 0, 1 -> 1, 2 -> 1, 3 -> 2, 4 -> 3, 5 -> 5)
|
||||
```
|
||||
|
||||
|
||||
|
||||
```
|
|
@ -1,10 +1,12 @@
|
|||
---
|
||||
title: "Speaker Notes in LaTex Beamer"
|
||||
date: 2022-10-25T21:43:38-04:00
|
||||
date: 2022-10-25 21:43:38-04:00
|
||||
draft: false
|
||||
tags: ["LaTex"]
|
||||
math: false
|
||||
medium_enabled: true
|
||||
medium_post_id: 9643b7743f0c
|
||||
tags:
|
||||
- LaTex
|
||||
title: Speaker Notes in LaTex Beamer
|
||||
---
|
||||
|
||||
I often struggle with deciding how much content to put on my slides. Personally, I feel that my slides should be self-contained so that others can review them afterwards. This was especially true when I held [recitations](/ta/spring2022/csci2600/) as a TA.
|
||||
|
@ -48,4 +50,4 @@ With this, I am thinking of distributing slides that I'm presenting more ahead o
|
|||
- Keep answers away from the live audience, with an easy way to distribute aftewards
|
||||
- Not forget any points you want to address
|
||||
|
||||
If you want to learn more features within LaTex beamer, I suggest checking out their [package documentation](http://mirrors.ctan.org/macros/latex/contrib/beamer/doc/beameruserguide.pdf). It's surprisingly written accessibly, with many presentation tips within.
|
||||
If you want to learn more features within LaTex beamer, I suggest checking out their [package documentation](http://mirrors.ctan.org/macros/latex/contrib/beamer/doc/beameruserguide.pdf). It's surprisingly written accessibly, with many presentation tips within.
|
|
@ -1,10 +1,10 @@
|
|||
---
|
||||
title: "Optionality and Risk in Decision Making"
|
||||
date: 2022-10-12T01:10:42-04:00
|
||||
date: 2022-10-12 01:10:42-04:00
|
||||
draft: false
|
||||
tags: []
|
||||
math: true
|
||||
medium_enabled: true
|
||||
medium_enabled: false
|
||||
tags: []
|
||||
title: Optionality and Risk in Decision Making
|
||||
---
|
||||
|
||||
One technique for making decisions in uncertain situations is to look for *optionality*. This is one of the tips given in Russ Robert's book [Wild problems: a guide to the decisions that define us](https://www.worldcat.org/title/1321820629). Let's start off with the two definitions listed on [Wiktionary](https://en.wiktionary.org/wiki/optionality) at my time of writing.
|
||||
|
@ -73,7 +73,4 @@ Acknowledgements: Thanks to Clare for helping me understand the definitions from
|
|||
|
||||
[^1]: There are other ways we can define obligation. In particular, we can take into account each individual effect as opposed to it collectively. Though we'll leave that for another time.
|
||||
|
||||
[^2]: I do not discuss minimizing negative consequences in this post as it has little connection to the concept of optionality.
|
||||
|
||||
|
||||
|
||||
[^2]: I do not discuss minimizing negative consequences in this post as it has little connection to the concept of optionality.
|
|
@ -1,10 +1,13 @@
|
|||
---
|
||||
title: "Getting Podman and Nginx TCPv6 and HTTP/2 Ready"
|
||||
date: 2022-09-28T22:43:28-04:00
|
||||
date: 2022-09-28 22:43:28-04:00
|
||||
draft: false
|
||||
tags: ["Networking", "Containers"]
|
||||
math: false
|
||||
medium_enabled: true
|
||||
medium_post_id: ac419c65c080
|
||||
tags:
|
||||
- Networking
|
||||
- Containers
|
||||
title: Getting Podman and Nginx TCPv6 and HTTP/2 Ready
|
||||
---
|
||||
|
||||
When checking the status of my website, I discovered that my website wasn't accessible over IPV6 and didn't have HTTP/2 enabled! This post will go over how I remedied that with my current setup of Nginx running within a podman container. Do note, TCPv6 will only work if you are provided a IPv6 address from your server provider.
|
||||
|
@ -181,4 +184,4 @@ tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 172/nginx
|
|||
tcp 0 0 :::443 :::* LISTEN 172/nginx
|
||||
```
|
||||
|
||||
There you have it! Now your website should be TCPv6 and HTTP/2 compatible. Feel free to get in touch if you have any questions.
|
||||
There you have it! Now your website should be TCPv6 and HTTP/2 compatible. Feel free to get in touch if you have any questions.
|
|
@ -1,10 +1,12 @@
|
|||
---
|
||||
title: "How to trim a video using FFMPEG"
|
||||
date: 2022-09-28T18:46:32-04:00
|
||||
date: 2022-09-28 18:46:32-04:00
|
||||
draft: false
|
||||
tags: ["Audio-Video"]
|
||||
math: false
|
||||
medium_enabled: true
|
||||
medium_post_id: dd83a32af440
|
||||
tags:
|
||||
- Audio-Video
|
||||
title: How to trim a video using FFMPEG
|
||||
---
|
||||
|
||||
Recently I came across a video that I wanted to split up into multiple files. Given my love for `ffmpeg` the video/audio swiss army knife, I knew there had to be a solution for cutting a video on the terminal. Luckily on [AskUbuntu](https://askubuntu.com/a/56044), Luis Alvarado provides a command snippet. This post will go into slightly more detail on the flags used in the command
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
---
|
||||
title: "Explaining the Shift in Values"
|
||||
date: 2022-10-11T20:19:01-04:00
|
||||
draft: false
|
||||
tags: []
|
||||
date: 2022-10-11 20:19:01-04:00
|
||||
draft: false
|
||||
math: true
|
||||
medium_enabled: true
|
||||
medium_enabled: false
|
||||
tags: []
|
||||
title: Explaining the Shift in Values
|
||||
---
|
||||
|
||||
In the book [Wild problems : a guide to the decisions that define us](https://www.worldcat.org/title/1321820629), Russ Roberts analyzes decision making on difficult life problems. These types of problems don't have straightforward or measurable goals, and there's no set procedure for success. Examples of these problems are choosing whether to marry, have kids, or switch jobs.
|
||||
|
@ -156,4 +156,4 @@ research directions that come from this:
|
|||
- How can you approximate a reward from testimonial evidence?
|
||||
- Techniques for performing state reduction and modeling transitions via these reductions.
|
||||
|
||||
Thank you to both Clare and James for helping me brainstorm the ideas in this post.
|
||||
Thank you to both Clare and James for helping me brainstorm the ideas in this post.
|
|
@ -1,10 +1,11 @@
|
|||
---
|
||||
title: "Website Status Checking"
|
||||
date: 2022-09-28T16:05:23-04:00
|
||||
draft: false
|
||||
tags: []
|
||||
date: 2022-09-28 16:05:23-04:00
|
||||
draft: false
|
||||
math: false
|
||||
medium_enabled: true
|
||||
medium_post_id: 4655285d688f
|
||||
tags: []
|
||||
title: Website Status Checking
|
||||
---
|
||||
|
||||
How do I know when my website goes up or down? Recently, I started using a service from [updown.io](https://updown.io) which gives me a status page and notifies me when it goes down.
|
||||
|
@ -31,4 +32,4 @@ In addition to a simple UP/DOWN metric. The service checks for TCPv4, TCPv6, and
|
|||
|
||||
Also, the service is quite affordable. To check one website every 30 minutes amounts to 2 cents a month. If you want to check it every 15 seconds, then it goes up to a little over $2/month.
|
||||
|
||||
Feel free to get in touch with how you monitor your personal website. I'm curious to see how other people are approaching it.
|
||||
Feel free to get in touch with how you monitor your personal website. I'm curious to see how other people are approaching it.
|
Loading…
Reference in a new issue