mirror of
https://github.com/Brandon-Rozek/website.git
synced 2024-11-09 10:40:34 -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
|
||||
date: 2022-10-04 11:38:03-04:00
|
||||
draft: false
|
||||
tags: []
|
||||
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.
|
||||
|
@ -22,5 +23,3 @@ 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 :)
|
||||
|
||||
|
||||
|
|
|
@ -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`.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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]`?
|
||||
|
@ -116,4 +119,3 @@ deep_sum([[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:
|
||||
|
|
|
@ -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`.
|
||||
|
@ -61,4 +65,3 @@ 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
|
||||
date: 2022-09-29 20:08:30-04:00
|
||||
draft: false
|
||||
tags: []
|
||||
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)).
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
@ -35,6 +37,3 @@ 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.
|
||||
|
|
|
@ -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.
|
||||
|
@ -74,6 +74,3 @@ 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.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
date: 2022-10-11 20:19:01-04:00
|
||||
draft: false
|
||||
tags: []
|
||||
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.
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
---
|
||||
title: "Website Status Checking"
|
||||
date: 2022-09-28T16:05:23-04:00
|
||||
date: 2022-09-28 16:05:23-04:00
|
||||
draft: false
|
||||
tags: []
|
||||
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.
|
||||
|
|
Loading…
Reference in a new issue