6509efcecbf02c96b39311ecd15ae3d03ad719a9 — Andrew Zah 4 months ago 34eb0b7
clean house
M content/posts/001_a_new_year/index.md => content/posts/001_a_new_year/index.md +1 -1
@@ 2,6 2,7 @@ title = "A new year, a new site"
  slug = "a-new-year-a-new-site"
  date = 2018-02-01
+ template = "post.html"
  
  [taxonomies]
  tags = ["docker", "rust", "clojure"]


@@ 149,4 150,3 @@ ## Non-programming
  
  I also spent almost 7 months in Korea. More info on that will come, but I truly enjoyed my time there, and I'm making a plan on returning full-time as a programmer.
- 

M content/posts/002_books_for_2018/index.md => content/posts/002_books_for_2018/index.md +1 -0
@@ 2,6 2,7 @@ title = "Books for 2018"
  slug = "books-for-2018"
  date = 2018-02-24
+ template = "post.html"
  
  [taxonomies]
  tags = ["books", "philosophy", "programming"]

M content/posts/003_discord_bot_crystal_part_0/index.md => content/posts/003_discord_bot_crystal_part_0/index.md +1 -0
@@ 2,6 2,7 @@ title = "Making a Discord bot in Crystal: Part 0"
  slug = "making-a-discord-bot-in-crystal-part-0"
  date = 2018-03-05
+ template = "post.html"
  
  [taxonomies]
  tags = ["discord", "crystal"]

M content/posts/004_selfhosted_git_gitea_docker_caddy/index.md => content/posts/004_selfhosted_git_gitea_docker_caddy/index.md +2 -1
@@ 2,6 2,7 @@ title = "Selfhosting git with Gitea, Docker, Caddy"
  slug = "selfhosting-git-with-gitea-docker-caddy"
  date = 2018-05-15
+ template = "post.html"
  
  [taxonomies]
  tags = ["selfhosting", "gitea", "docker", "caddy"]


@@ 223,7 224,7 @@   ## Conclusion
  
- If everything was done correctly, you should now have a self-hosted git frontend. Nice! Please leave a comment if something went awry.
+ If everything was done correctly, you should now have a self-hosted git frontend. Nice!
  
  I recommend checking out [awesome-selfhosted](https://github.com/Kickball/awesome-selfhosted) to see a huge list of other software you can host. [reddit.com/r/selfhosted](https://www.reddit.com/r/selfhosted/) is also a good resource. The possibilities are endless... You could host a [Kanban board](https://github.com/wekan/wekan) or a [Magic: The Gathering Cockatrice server](https://cockatrice.github.io/)!
  

M content/posts/005_finishing_that_marathon/index.md => content/posts/005_finishing_that_marathon/index.md +5 -4
@@ 2,6 2,7 @@ title = "Finishing that Marathon"
  slug = "finishing-that-marathon"
  date = 2018-11-03
+ template = "post.html"
  
  [taxonomies]
  tags = ["learning", "motivation"]


@@ 18,9 19,9 @@ ## It's easy to start off strong
  The beginning of anything, especially learning a language, is always the easiest part. You go from nothing to something. With languages, you go from not knowing anything to knowing a few things in that domain- an infinite% improvement!! And afterwards your ability will continue to skyrocket- relatively speaking.
  
- For real languages this amounts to learning the alphabet or script, and some very basic words or phrases. Then more words and some beginner grammar. For programming languages, it's the code syntax and style, then the surrounding ecosystem, etcetera. You can keep this up for a while, months, even a year if you're lucky. There are many things to learn but they're still fresh, exciting, new.  
+ For real languages this amounts to learning the alphabet or script, and some very basic words or phrases. Then more words and some beginner grammar. For programming languages, it's the code syntax and style, then the surrounding ecosystem, etcetera. You can keep this up for a while, months, even a year if you're lucky. There are many things to learn but they're still fresh, exciting, new.
  
- Along this journey, people start to fall off for various reasons, but there are two big ones. First, the law of diminishing returns. You go from infinite! increase, to 100% increase, to 10% increase, until it becomes more of a steady drip.  Second, in the beginning of any field, study, or profession, you cannot know how little you actually know. How little ability you actually have. Don't worry, you will realize this once you start to become more intermediate, after longer exposure—maybe 3-4 months, maybe a year. For languages, this is typically when it becomes frustrating. You're no longer impressed by "Hi, my name is Andrew"-style basic speech... You're yearning for you know, actual conversations. 
+ Along this journey, people start to fall off for various reasons, but there are two big ones. First, the law of diminishing returns. You go from infinite! increase, to 100% increase, to 10% increase, until it becomes more of a steady drip.  Second, in the beginning of any field, study, or profession, you cannot know how little you actually know. How little ability you actually have. Don't worry, you will realize this once you start to become more intermediate, after longer exposure—maybe 3-4 months, maybe a year. For languages, this is typically when it becomes frustrating. You're no longer impressed by "Hi, my name is Andrew"-style basic speech... You're yearning for you know, actual conversations.
  
  Yet you can't.
  


@@ 48,7 49,7 @@ * Attending a language exchange or going somewhere that forces you to use the language. Personally I find language exchanges slightly forced/awkward sometimes, but they can be good too. When I visit Korea again, I'll be attending 문화원s (cultural centers that offer classes on traditional Korean arts—in Korean only).
  * Teaching people who are less skilled than yourself. *You don't have to be a master to be a teacher*. I personally believe teaching is one of the best ways of retaining information. Wait until you're mid-intermediate/advanced though, unless it's very basic teaching. The last thing you want is to teach someone incorrect things.
  
- ## Conclusion  
+ ## Conclusion
  These are some of the lessons I learned over time. When I moved back to the US, my motivation was killed for a while because I didn't explore other avenues like tv shows. I did study, but maybe once a week. Which was useless. I began improving again when I properly sat down, figured out my goals, and began studying every. single. day.
  
- All I can say is Keep on keepin' on. Be honest with yourself and make sure you really want it- then dedicate yourself. Figure out reasonable, attainable goals, not perfectionist ones. Learning anything well is *never* a sprint—it's a marathon. Eventually you will be amazing at it, but only if you practice correctly and analyze yourself. Just showing up is not enough!!<Paste>
+ All I can say is Keep on keepin' on. Be honest with yourself and make sure you really want it- then dedicate yourself. Figure out reasonable, attainable goals, not perfectionist ones. Learning anything well is *never* a sprint—it's a marathon. Eventually you will be amazing at it, but only if you practice correctly and analyze yourself. Just showing up is not enough!!

M content/posts/006_growth_as_software_developer/index.md => content/posts/006_growth_as_software_developer/index.md +46 -42
@@ 2,6 2,7 @@ title = "My growth as a self-taught developer in 2018"
  slug = "my-growth-self-taught-software-developer-in-2018"
  date = 2018-11-18
+ template = "post.html"
  
  [taxonomies]
  tags = ["programming"]


@@ 18,25 19,28 @@   <!-- more -->
  
- {{ image(url="https://s3.amazonaws.com/andrewzah.com/posts/006/remotely-working.jpg", desc="Working remotely whilst driving across Wyoming") }}
- ###### Working remotely while driving across Wyoming
+ {{image(
+   url="https://s3.amazonaws.com/andrewzah.com/posts/006/remotely-working.jpg",
+   desc="Working remotely whilst driving across Wyoming",
+   t="Working remotely while driving across Wyoming"
+ )}}
  
- ## Background 
- 2018 marks my first year being a professional programmer. That is, actually earning income from it. In late 2016/early 2017 I had been looking for work but I hadn't done it correctly. My largest mistake was not networking.  
+ ## Background
+ 2018 marks my first year being a professional programmer. That is, actually earning income from it. In late 2016/early 2017 I had been looking for work but I hadn't done it correctly. My largest mistake was not networking.
  
  I was living in Chicago at that time but I was still making the vast majority of my applications online, through sites like Indeed or Hacker News' monthly [Who's Hiring? threads](https://news.ycombinator.com/item?id=18354503). As a Media Arts major with no formal software experience, it's not hard to see why it was a bit difficult to apply to backend developer jobs—or rather, just non-web/frontend developer jobs. I suppose I could have found a job doing that much faster, but I loath it. ¯\\_(ツ)_/¯
  
- The other two mistakes I made were not hanging around in the right circles and focusing on a specific programming language when job hunting. I attended ChiPy [Chicago Python]'s monthly meetups—which I do recommend—but I was looking for ruby jobs. So the Python jobs recruiter in that group wasn't able to help me.. I should have at least attended meetups that focused around ruby.  
-   
+ The other two mistakes I made were not hanging around in the right circles and focusing on a specific programming language when job hunting. I attended ChiPy [Chicago Python]'s monthly meetups—which I do recommend—but I was looking for ruby jobs. So the Python jobs recruiter in that group wasn't able to help me.. I should have at least attended meetups that focused around ruby.
+ 
  As I've come to realize, I should've just applied to any entry-level roles in Backend dev, whether it be in `ruby`, `python`, `c#`, etc. It's better obviously to have experience in it already, but I learned *so much* about ruby on rails in my first job that I might as well have known nothing. My personal experience merely gave me a headstart. However, I worked primarily alone in my first job—not knowing much about rails probably wouldn't have worked out well.
-   
+ 
  I did eventually find a ruby on rails job, but now I'm working on a c# asp.net web api project. My general skills transferred; all I had to do was get up to speed on the idiosyncrasies of this particular framework and ecosystem. (And I love it. Statically typed languages for life!)
-   
+ 
  ## My first programming job
  I found my first job through the [Open Source South Carolina](https://www.meetup.com/Open-Source-South-Carolina/) meetup. I attended a session and Todd Lewis (the organizer) mentioned that he had a few internships he knew about. I talked to him afterwards and got the email of someone who needed a ruby on rails guy to help him out with some of his side gigs. Thus, I agreed to work part-time (about 10-15 hours/week) at $10/hour.
-   
+ 
  Although the project's backend was ruby on rails, I also had to learn [Elm](https://elm-lang.org/) for interacting with the frontend. Lesson learned: You always need to be able to expand your skillset. In the end I'm really glad I learned Elm—if I work on a frontend again, I'll likely use that.
-   
+ 
  This went on for about 2.5 to 3 months. I was a sub-contractor for a side project my employer was working on and he billed my hours to his clients. I was eventually told the clients were putting a hold on the project for a while, so there wasn't anything for me to do. This worked out as I'd started the application process with Gitlab as a rails backend developer.
  
  ## Applying to Gitlab


@@ 50,58 54,58 @@ I'm okay with it. I definitely read a lot more about the things I had worked on in that merge request. Sometimes you're just not what a company is looking for, and all I could do was learn from the experience.
  
  Luckily, at the same time I received an offer from someone else!
-   
+ 
  ## My first real programming job
- About a month before applying to gitlab, I had met my current employer, Chad, at All Things Open Columbia—another conference organized by Todd. After the conference I mingled with some people at the local bar, met Chad, and mentioned that I was familiar with ruby. He said that he might need a ruby guy for a project in the future, and then we parted ways.    
-   
+ About a month before applying to gitlab, I had met my current employer, Chad, at All Things Open Columbia—another conference organized by Todd. After the conference I mingled with some people at the local bar, met Chad, and mentioned that I was familiar with ruby. He said that he might need a ruby guy for a project in the future, and then we parted ways.
+ 
  Well, he did in fact need a ruby guy later on. So we discussed it and I became employed at [Open Source Systems](https://www.ossys.com/) to work on an existing project headed by a doctor at MUSC. It had two other part-time developers but I was practically working alone for the majority of the time. After about 5 months the funding for the contract was temporarily up so I got assigned to a new C# rest api project with a company based in Charleston. And that's pretty much where I am now—helping migrate a legacy codebase to a leaner, modern rest api implementation.
  
  This company is 100% remote! I live in Columbia, SC, my boss is in Charleston, and we have other employees in various places. Sometimes I really can't believe it—I'm earning money and getting valuable experience while not having to commute or work typical hours. In fact, I'll be staying in Korea, Japan, and Taiwan for months at a time starting next year. :-)
  
  And it's all from networking. At [All Things Open 2018 in Raleigh, NC](https://allthingsopen.org/) I met an IBM employee who I can contact if I ever want to for IBM in Korea. I don't plan to—working remotely is just incredible—but it just shows you just how good these events are for finding work. If I had stayed for drinks on the second day I likely would've found other opportunities.
-   
+ 
  ## Things I learned
  ### Testing
  For a good month and a half or so I took a rails codebase from zero tests to a fairly comprehensive testing pipeline. I was just shocked initially that a program for calculating medical simulation data and displaying it had *zero tests*. There were more than a few instances where the reports simply had incorrect data due to some math or datetime bugs...
-   
- The very first thing I did was set up an automated [Semaphore CI](https://semaphoreci.com/) test process that ran on every commit on every branch. Setting things up on there is very straightforward for ruby apps. Then I learned a lot about the [FactoryBot](https://github.com/thoughtbot/factory_bot_rails), [RuboCop](https://github.com/rubocop-hq/rubocop), and [Brakeman](https://github.com/presidentbeef/brakeman) libraries. I initially tried to model everything with FactoryBot but our data model was a tad convoluted and it made the factorybot setup very brittle to work with. So I ended up reverting back to a custom [rails' Fixtures](https://api.rubyonrails.org/v2.3/classes/Fixtures.html) solution for a bulk of the tests, which also made the overall testing time way faster.  
-   
- Sometimes a standard framework (like FactoryBot) may not suit your particular testing style or needs. Don't use things just because it's a style or trend.  
-   
- ### Organization / Separation of Concerns  
+ 
+ The very first thing I did was set up an automated [Semaphore CI](https://semaphoreci.com/) test process that ran on every commit on every branch. Setting things up on there is very straightforward for ruby apps. Then I learned a lot about the [FactoryBot](https://github.com/thoughtbot/factory_bot_rails), [RuboCop](https://github.com/rubocop-hq/rubocop), and [Brakeman](https://github.com/presidentbeef/brakeman) libraries. I initially tried to model everything with FactoryBot but our data model was a tad convoluted and it made the factorybot setup very brittle to work with. So I ended up reverting back to a custom [rails' Fixtures](https://api.rubyonrails.org/v2.3/classes/Fixtures.html) solution for a bulk of the tests, which also made the overall testing time way faster.
+ 
+ Sometimes a standard framework (like FactoryBot) may not suit your particular testing style or needs. Don't use things just because it's a style or trend.
+ 
+ ### Organization / Separation of Concerns
  This is more particular to traditional MVC-architecture applications, particularly ruby on rails. The project I took on had huge swaths of code & extraneous logic inside its `controllers`. I had to spend a lot of time refactoring and moving that code into a relevant `model`, `service` or `command` file, but it was worth it as:
  
  * the controller/view logic became significantly more readable.
- * later on when I rendered via PDF & XLSX in addition to HTML, already calling the logic through `service`s saved a huge amount of time. I would've either had to copy the logic or heavily refactor anyway.  
-   
+ * later on when I rendered via PDF & XLSX in addition to HTML, already calling the logic through `service`s saved a huge amount of time. I would've either had to copy the logic or heavily refactor anyway.
+ 
  ### Learning outside of your current skillset
- The reality of working on real projects is that you invariably will have to learn things outside of your wheelhouse. When I first learned rails I had to learn SQL shortly after because you need to do things manually sometimes. I had to learn how to generate PDFs, and so on. As you implement different things you should always be growing. 
+ The reality of working on real projects is that you invariably will have to learn things outside of your wheelhouse. When I first learned rails I had to learn SQL shortly after because you need to do things manually sometimes. I had to learn how to generate PDFs, and so on. As you implement different things you should always be growing.
  
- Sometimes you have to switch languages and frameworks entirely, which is perfectly fine. Getting acclimated to the language's syntax, ecosystem, etc. can suck but usually it's a very brief period. However don't switch just for the sake of it—have a good reason. No, it being discussed around the watercooler and on Hacker News is not a good reason to switch.  
-   
- ## Areas of Growth  
+ Sometimes you have to switch languages and frameworks entirely, which is perfectly fine. Getting acclimated to the language's syntax, ecosystem, etc. can suck but usually it's a very brief period. However don't switch just for the sake of it—have a good reason. No, it being discussed around the watercooler and on Hacker News is not a good reason to switch.
+ 
+ ## Areas of Growth
  * Ruby/Ruby on Rails
- 	* more frontend familiarity (Vue.js / Elm)
- 	* PDF & XLSX generation
- 	* fixtures testing
- 	* factorybot testing
- 	* code organization via `Service`s/`Command`s, etc  
- 	* more quickly getting up to speed on large codebases (like gitlab's)
+   * more frontend familiarity (Vue.js / Elm)
+   * PDF & XLSX generation
+   * fixtures testing
+   * factorybot testing
+   * code organization via `Service`s/`Command`s, etc
+   * more quickly getting up to speed on large codebases (like gitlab's)
  * Rust
- 	* writing CLI tools with option flags parsing via [Clap](https://docs.rs/clap/2.32.0/clap/)  
- 	* better error handling
+   * writing CLI tools with option flags parsing via [Clap](https://docs.rs/clap/2.32.0/clap/)
+   * better error handling
  * Elm 0.18
- 	* Wrote a full frontend in a functional javascript language!
+   * Wrote a full frontend in a functional javascript language!
  * C# ASP.NET Web API 2.1 / MS SqlServer
- 	* MVC layout / idiosyncracies
- 	* SQL Server dialect for queries, and more complicated sql queries in general
- 	* working with decade+ old stored procedures
+   * MVC layout / idiosyncracies
+   * SQL Server dialect for queries, and more complicated sql queries in general
+   * working with decade+ old stored procedures
  * General
- 	* Implemented a Lexer and Parser in [Crystal lang](https://crystal-lang.org/) to recursively evaluate client commands
-   
+   * Implemented a Lexer and Parser in [Crystal lang](https://crystal-lang.org/) to recursively evaluate client commands
+ 
  ## Goals for 2019
  My most present goal is to learn Common Lisp. I enjoyed Clojure but I *hate* its gibberish error messages. CL tells me exactly what I did wrong most of the time.
  
- For my job it looks like I'll continue to learn C# ASP.NET and SQL Server, but my side projects will be Rust or Crystal, with Postgres. Perhaps my real goal should be to actually finish more side projects instead of getting distracted...  
-   
+ For my job it looks like I'll continue to learn C# ASP.NET and SQL Server, but my side projects will be Rust or Crystal, with Postgres. Perhaps my real goal should be to actually finish more side projects instead of getting distracted...
+ 
  I just want to keep learning and growing overall. I don't know if I'll actually develop in Common Lisp, but I *do* know it'll give me a new perspective in programming. I'm very excited to see what 2019 offers in terms of safe, performant languages.

M content/posts/007_korean_cooking_eating_reference/index.md => content/posts/007_korean_cooking_eating_reference/index.md +9 -12
@@ 2,6 2,7 @@ title = "Korean Food & Cooking Vocabulary Reference"
  slug = "korean-cooking-eating-vocabulary-reference"
  date = 2018-12-28
+ template = "post.html"
  
  [taxonomies]
  tags = ["korean", "vocabulary", "cooking"]


@@ 10,6 11,14 @@ [extra]
  keywords = "korean language english reference cooking eating out vocab vocabulary"
  summary = "Here is a compiled list of Korean words related to food, cooking, eating (out), going out, and nutrition."
+ 
+ resources = [
+   ["KWP _ Cooking", "http://www.koreanwikiproject.com/wiki/Cooking"],
+   ["KWP – Nutrition", "http://www.koreanwikiproject.com/wiki/Nutrition"],
+   ["KWP – Food and Drinks", "http://www.koreanwikiproject.com/wiki/Food_and_drinks"],
+   ["KWP – Eating Out and Drinking", "http://www.koreanwikiproject.com/wiki/Eating_out_and_drinking"],
+   ["National Institute of Korean Language Dictionary", "https://krdict.korean.go.kr/eng/"],
+ ]
  +++
  
  Here is a compiled list of Korean words related to food, cooking, eating (out), going out, and nutrition.


@@ 654,15 663,3 @@ | 비스킷 | biscuit |
  | 케이크 | cake |
  | 아이스크림 | ice cream |
- 
- 
- ## References
- [0] http://www.koreanwikiproject.com/wiki/Cooking
- 
- [1] http://www.koreanwikiproject.com/wiki/Nutrition
- 
- [2] http://www.koreanwikiproject.com/wiki/Food_and_drinks
- 
- [3] http://www.koreanwikiproject.com/wiki/Eating_out_and_drinking
- 
- [4] https://krdict.korean.go.kr/eng/

M content/posts/008_programming_korean/index.md => content/posts/008_programming_korean/index.md +14 -12
@@ 2,6 2,7 @@ title = "Korean for Programmers"
  slug = "korean-for-programmers"
  date = 2019-02-16
+ template = "post.html"
  
  [taxonomies]
  tags = ["korean", "programming", "linguistics"]


@@ 11,6 12,15 @@ keywords = "korean programming language hangeul linguistics hangeul perspective"
  summary = "Korean has similarities with functional programming languages."
  show_summary = true
+ 
+ references = [
+   ["German for Programmers", "https://wickedchicken.github.io/post/german-for-programmers/"],
+   ["Hangeul Grid Order ", "https://www.howtostudykorean.com/unit0/unit0lesson1/"],
+   ["Final Consonant Exception Rules", "http://www.koreanwikiproject.com/wiki/%EB%B0%9B%EC%B9%A8"],
+   ["Hangeul in Unicode", "https://en.wikipedia.org/wiki/Korean_language_and_computers#Hangul_in_Unicode"],
+   ["Korean Speech Levels", "https://en.wikipedia.org/wiki/Korean_speech_levels"],
+   ["English Registers", "https://en.wikipedia.org/wiki/Register_(sociolinguistics)"]
+ ]
  +++
  
  I was inspired to write this after reading *German for Programmers*.{{cite(num=0)}} It's quite likely that I'm just biased to see things a certain way because I work with programming languages for a living, but I often find myself drawing comparisons among Korean and programming.


@@ 152,7 162,7 @@   One way to do past tense is `~ㅆ`, which gets merged with the previous vowel. Other tenses can depend on the last character being a vowel or not, like future tense (`~ㄹ/을`).
  
- Finally, we need to think about our relationship to the audience and append or merge a politeness/speech level. See politeness below for more details. 
+ Finally, we need to think about our relationship to the audience and append or merge a politeness/speech level. See politeness below for more details.
  
  We can model this as a basic pipeline à la Clojure:
  


@@ 206,7 216,7 @@   Note that `갔` changed to `간`. `갔` is 가다 (to go) + `~ㅆ` (past tense). But the past tense nominalization form uses `~ㄴ (것)`. Instead of 것 (thing) we swapped it for another noun 여자 (woman).
  
- Not that one would only say "the girl who walked to school" by itself, but we can now use the entire construct as a noun in other sentences: 
+ Not that one would only say "the girl who walked to school" by itself, but we can now use the entire construct as a noun in other sentences:
  
  <p>
    {{hlw(c="green",t="저는")}} {{hlw(c="red",t="학교로 걸어 간 여자를")}} {{hlrw(c="blue",t="알았어요")}} — {{hlw(c="green",t="I")}} {{hlw(c="red",t="the girl who walked to school")}} {{hlrw(c="blue",t="knew")}}


@@ 248,7 258,7 @@ These are some cool traits about Korean, or things related to this post, that don't necessarily have to deal with programming.
  
  #### Politeness / Formality
- The Korean language conjugates differently based on the status of speaker and intended audience. For example, one of the simplest ways to conjugate any verb is to add `~어/아/여` to it. This is based on the last *vowel*, not the last character. 
+ The Korean language conjugates differently based on the status of speaker and intended audience. For example, one of the simplest ways to conjugate any verb is to add `~어/아/여` to it. This is based on the last *vowel*, not the last character.
  
  For example, you may have seen 감사합니다 before ("thank you", formal polite). This is 감사하다, merged with `~ㅂ니다` because `하` ends in a vowel. 고마워요 is another way to say thank you(informal polite): 고맙다 + apply `irregular ㅂ` consonant ending filter +  `~아/어/여요`.
  


@@ 311,12 321,4 @@ ## Contributors
  
  * Article – Andrew Zah
- * Editing, sentence suggestions – 웁스
- 
- ## References
- * {{ footnote(num="0", url="https://wickedchicken.github.io/post/german-for-programmers/", title="German for Programmers") }}
- * {{ footnote(num="1", url="https://www.howtostudykorean.com/unit0/unit0lesson1/", title="Grid Order ") }}
- * {{ footnote(num="2", url="http://www.koreanwikiproject.com/wiki/%EB%B0%9B%EC%B9%A8", title="Final Consonant Exception Rules") }}
- * {{ footnote(num="3", url="https://en.wikipedia.org/wiki/Korean_language_and_computers#Hangul_in_Unicode", title="Hangeul in Unicode") }}
- * {{ footnote(num="4", url="https://en.wikipedia.org/wiki/Korean_speech_levels", title="Korean Speech Levels") }}
- * {{ footnote(num="5", url="https://en.wikipedia.org/wiki/Register_(sociolinguistics)", title="English Registers") }}
+ * Editing, sentence suggestions – 웁스

M content/posts/009_korean_series_1/index.md => content/posts/009_korean_series_1/index.md +1 -2
@@ 2,6 2,7 @@ title = "Korean Progress #1"
  slug = "korean-progress-1"
  date = 2019-02-24
+ template = "post.html"
  
  [taxonomies]
  tags = ["korean", "learning"]


@@ 188,5 189,3 @@ | 중고 | used, secondhand item/article |
  | 청소년 | teenager, youth |
  | 황사 | Yellow/Asian dust |
- 
- ## References

M content/posts/010_korean_series_2/index.md => content/posts/010_korean_series_2/index.md +1 -0
@@ 2,6 2,7 @@ title = "Korean Progress #2"
  slug = "korean-progress-2"
  date = 2019-03-03
+ template = "post.html"
  
  [taxonomies]
  tags = ["korean", "learning"]

M content/posts/011_resources_for_learning_korean_in_2019/index.md => content/posts/011_resources_for_learning_korean_in_2019/index.md +1 -0
@@ 2,6 2,7 @@ title = "Ultimate List of Resources for Learning Korean in 2019"
  slug = "ultimate-list-of-resources-for-learning-korean-in-2019"
  date = 2019-03-04
+ template = "post.html"
  
  [taxonomies]
  tags = ["korean", "learning"]

M content/posts/012_shinkansen_green_and_beetle_ferry/index.md => content/posts/012_shinkansen_green_and_beetle_ferry/index.md +1 -0
@@ 3,6 3,7 @@ slug = "japanese-shinkansen-beetle-ferry"
  date = 2019-03-30
  draft = true
+ template = "post.html"
  
  [taxonomies]
  tags = ["japan", "korea", "trains", "ferries"]

M content/posts/013_padrino_nested_forms/index.md => content/posts/013_padrino_nested_forms/index.md +4 -2
@@ 2,6 2,7 @@ title = "Nested Resource Forms Tutorial with Padrino or Rails"
  slug = "nested-resource-forms-tutorial-with-padrino-rails"
  date = 2019-04-11
+ template = "post.html"
  
  [taxonomies]
  tags = ["padrino", "ruby", "forms"]


@@ 10,7 11,8 @@ [extra]
  keywords = "ruby padrino rails nested resource forms how to tutorial sequel activerecord"
  summary = "This guide shows how to create forms with nested resources in padrino (and/or rails)."
- citations=[
+ 
+ resources=[
    ["Sequel Plugins Nested Attributes Reference","https://sequel.jeremyevans.net/rdoc-plugins/classes/Sequel/Plugins/NestedAttributes.html"],
    ["Rails Api Reference for Nested Attributes", "https://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html"],
    ["Padrino Nested Form Reference", "http://padrinorb.com/guides/application-helpers/nested-object-form-support/"]


@@ 305,4 307,4 @@   ### Conclusion
  
- I hope this short guide helped you. You should now be able to create a model and a nested object at the same time! Nested resources are pretty nice to work with. Please [email me](mailto:zah@andrewzah.com?subject=Padrino%20Nested%20Resources) if you spot any mistakes or have any observations.
+ I hope this short guide helped you. You should now be able to create a model and a nested object at the same time!

M content/posts/014_backpacking_three_month_retrospective/index.md => content/posts/014_backpacking_three_month_retrospective/index.md +2 -2
@@ 3,6 3,7 @@ slug = "living-out-of-two-backpacks-a-three-month-retrospective"
  date = 2019-04-24
  draft = true
+ template = "post.html"
  
  [taxonomies]
  tags = ["backpacking"]


@@ 235,5 236,4 @@ [logitech]: https://www.logitech.com/en-us/product/keys-to-go
  
  ### Conclusion
- 
- [email me](mailto:zah@andrewzah.com?subject=Padrino%20Nested%20Resources) if you spot any mistakes or have any observations.
+ {Write pls}

M content/posts/015_remote_workflow_2019/index.md => content/posts/015_remote_workflow_2019/index.md +2 -1
@@ 3,6 3,7 @@ slug = "my-setup-remote-programming-osx-2019"
  date = 2019-04-26
  draft = true
+ template = "post.html"
  
  [taxonomies]
  tags = ["programming", "workflow"]


@@ 196,4 197,4 @@ [rust-plugin]: https://intellij-rust.github.io/
  
  ## Conclusion
- This is my personal setup. It is by no means prescriptive– I merely wanted to share what works for me. [Email me](mailto:hello@andrewzah.com?subject=setup%202019) if you spot any mistakes or have any observations.
+ This is my personal setup. It is by no means prescriptive– I merely wanted to share what works for me. I enjoy looking at other people's workflows to see how they handle things–usually I can take away a thing or two.

M content/posts/016_things_to_avoid_in_anki/index.md => content/posts/016_things_to_avoid_in_anki/index.md +1 -0
@@ 2,6 2,7 @@ title = "5 Things to avoid for Anki"
  slug = "5-things-to-avoid-for-anki"
  date = 2019-05-12
+ template = "post.html"
  draft = true
  
  [taxonomies]

M sass/_misc.scss => sass/_misc.scss +1 -1
@@ 1,5 1,5 @@ /* Misc all */
-   html { 
+   html {
      font-family: $serif-stack;
      position: relative;
      min-height: 100%;

M sass/_posts.scss => sass/_posts.scss +11 -0
@@ 37,10 37,21 @@ }
  }
  
+ #email-me {
+   margin-bottom: 1.25rem;
+ }
+ 
  
  .container.page {
    max-width: 680px;
  
+   .image-desc {
+     font-style: italic;
+     color: $headers;
+     text-align: center;
+     font-size: 15px;
+   }
+ 
    time {
      font-family: $serif-stack;
      margin-top: -1rem;

M templates/macros.html => templates/macros.html +28 -10
@@ 65,28 65,46 @@ </div>
  {% endmacro render_footnotes %}
  
- {% macro render_citations(citations) %}
-   <div id="citations">
-     <h3> Citations </h3>
+ {% macro render_references(references) %}
+   <div id="references">
+     <h3> References </h3>
      <ul>
-       {% for citation in citations %}
+       {% for reference in references %}
          <li>
            <span>
-             <a 
-               id="citation-{{loop.index0}}"
-               href="#cite-{{loop.index0}}"
+             <a
+               id="reference-{{loop.index0}}"
+               href="#refer-{{loop.index0}}"
              >
                [{{loop.index0}}] &#x21A9;</a>
 -             <a href="{{citation.1}}">
-               {{citation.0}}
+             <a href="{{reference.1}}">
+               {{reference.0}}
+             </a>
+           </span>
+         </li>
+       {% endfor %}
+     </ul>
+   </div>
+ {% endmacro render_references %}
+ 
+ {% macro render_resources(resources) %}
+   <div id="resources">
+     <h3> External Resources </h3>
+     <ul>
+       {% for resource in resources %}
+         <li>
+           <span>[{{loop.index0}}]
++             <a href="{{resource.1}}">
+               {{resource.0}}
              </a>
            </span>
          </li>
        {% endfor %}
      </ul>
    </div>
- {% endmacro render_citations %}
+ {% endmacro render_resources %}
  
  {% macro render_nav(current_path) %}
    <nav>

R templates/page.html => templates/post.html +8 -2
@@ 39,11 39,17 @@ </aside>
      <article itemprop="articleBody">
        {{ page.content | safe }}
+       <div id="email-me">
+         Have any observations, criticisms, or corrections? Feel free to <a href="mailto:blog@andrewzah.com">email me</a>. Have a nice day!
+       </div>
        {% if page.extra.footnotes %}
          {{ macros::render_footnotes(footnotes=page.extra.footnotes) }}
        {% endif %}
-       {% if page.extra.citations %}
-         {{ macros::render_citations(citations=page.extra.citations) }}
+       {% if page.extra.references %}
+         {{ macros::render_references(references=page.extra.references) }}
+       {% endif %}
+       {% if page.extra.resources %}
+         {{ macros::render_resources(resources=page.extra.resources) }}
        {% endif %}
      </article>
    </div>

M templates/shortcodes/cite.html => templates/shortcodes/cite.html +1 -1
@@ 1,1 1,1 @@-<a id="cite-{{num}}" href="#citation-{{num}}">[{{num}}]</a>
+ <a id="refer-{{num}}" href="#reference-{{num}}">[{{num}}]</a>

M templates/shortcodes/image.html => templates/shortcodes/image.html +3 -0
@@ 1,4 1,7 @@ <a href="{{url}}" data-lity data-lity-desc={{desc}} alt={{desc}}>
    <img src="{{url}}"/>
  </a>
+ {% if t %}
+   <p class="image-desc"> {{t}} </p>
+ {% endif %}
  

M templates/shortcodes/localimage.html => templates/shortcodes/localimage.html +3 -1
@@ 1,4 1,6 @@ <a href="{{url}}" data-lity data-lity-desc={{desc}} alt={{desc}}>
    <img src="{{page.slug}}/{{url}}"/>
  </a>
- 
+ {% if t %}
+   <p class="image-desc"> {{t}} </p>
+ {% endif %}