I’ve been using Anki to study foreign languages for three years now, and I consistently spend about an hour a day using it. So far, I’ve utilized Anki, to varying degrees, in my study of three languages: Turkish, Russian, and Italian.

But truthfully, I can’t say that my time spent doing Anki has always been effective. In fact, when I look back, I feel that sometimes I actually wasted time by using Anki. However, Anki does have its role in effectively learning languages.

The goal of this article is to provide tips to use Anki for those who have already tried or are currently using it but may be using it ineffectively. It assumes background knowledge about how Anki works; I won’t explain the Anki-related terminology.

Read more

This article summarizes my quest to stubbornly run a cheap Dockerized gRPC server capable of interacting with gRPC Web. I was trying to set up a staging instance (not a production instance) for my startup.

In this article, you can learn one of two things:

  1. How to deploy Docker containers exposed to the internet for cheap on AWS (price of a micro instance)
  2. How to deploy a gRPC web server with Envoy on AWS ECS

In this example, we use a TypeScript Node server, but you can generalize it to any gRPC server.

I’m aware there’s others, but I have AWS credits, and for production, I do, for better or worse, have brand loyalty to AWS. Eventually, I’d need to figure out how to deploy there.

Read more

Another title of this post would be: for protocol buffers in web clients, which TypeScript protocol buffer libraries are well-documented, and which ones are badly documented?

In this post, I’ll talk about the mess that’s the open source TypeScript protocol buffer ecosystem. For historical reasons, based on various libraries that were released when others didn’t exist, there are some libraries that work with each other, some that are outdated, etc. In general, this happens quite commonly in the open source ecosystem, and I hope this post helps others.

The TLDR, if you want to use protocol buffers with the browser:

Read more

This article will answer the following questions in order:

  • What exactly happens in the course at Liden and Denz?
  • What are the pros and cons of taking the class? These are mostly generic to any group language course.
  • How do I personally evaluate the time-effectiveness of a group course versus italki in the broader language learning process?

I took Russian language courses at Liden and Denz in Moscow for about five weeks, having purchased six weeks initially but, like many, ultimately leaving Russia following the start of the war in Ukraine.

Before enrolling, it was difficult to find any details on the internet of exactly what the Liden and Denz course entailed. The purpose of this post is to help those who are curious about the course and whether it would be useful to them.

Read more

Given an existing server on Elastic Beanstalk, this tutorial describes how to connect it to Cloudfront, including using Route53 and managing CORS.

This post assumes that you already have an environment in Elastic Beanstalk.

Step 1: Application Load Balancer

Follow the [Application Load Balancer] documentation to check if a load balancer exists; if not, then add one. If this is a server receiving requests from a web frontend, then you should have listeners at 443 HTTPS and 80 HTTP, wit han SSL certificate connected to the HTTPS port.

Step 2: Create a CloudFront distribution

Create a new CloudFront distribution. The most important step here is to select the appropriate origin under – Elastic Load Balancers – for Origin Domain Name.

  • If you have multiple environments, such as staging and production, I’m actually not sure how to distinguish the two (I used the creation date of the load balancer by searching for “load balancers” and going to EC2 in the search box above). Find some means to select the appropriate one as the Origin Domain Name.
  • Give a meaningful Origin ID. You should be able to use any string here, pick one that you can remember.
  • Select Redirect HTTP to HTTPS.
  • Pick Allowed HTTP Methods based on what your app is doing; if you want to be safe or aren’t sure, select the longest list here. This option is simply what’s allowed, what’s actually cached ony includes GET, HEAD, and optionally OPTIONS (see Cached HTTP Methods section).
  • For Cache Policy, this is totally application dependent; you can pick a default for now and change it later, but this is application-specific. If you simply want to test things first, I suggest making a custom cache policy with all cache durations set to 0.
  • For Origin Request Policy, to get CORS to work (at least in the case of my application), create a new policy with Whitelist: Origin, Access-Control-Request-Method, Access-Control-Request-Headers. Without this, you may see CORS errors from a web frontend. These will allow preflight CORS requests to properly propagate to your server through Cloudfront.

Anything can be changed later; you can save here or read the next step for setting up a custom domain.

Step 3 (optional): Repoint your domain to CloudFront

If you have a custom domain name like api.foo.com, then you’ll want to set it in Alternate Domain Names as well as setting up the SSL certificate. If this is already in Route 53, clicking Request or Import a Certificate with ACM should be enough.

If you already aliased api.foo.com to your Elastic Beanstalk endpoint, then, after the distribution is created, you’ll need to create a new alias record pointing to the CloudFront endpoint and removing the old api.foo.com record in Route53 (presumably this is a CNAME or A record).


At this point, you should have a CloudFront distribution pointing to the load balancer on top of your Elastic Beanstalk environment. If you followed step 3, api.foo.com will point to your CloudFront distribution, otherwise you can use the *.cloudfront.net domain shown under “CloudFront” (also connectable via Route53). Happy caching!

Read more

The purpose of this post is to answer: “when do I use or not use the Turkish accusative?” Most resources on the accusative describe it as a case ending applied to a definite direct object. Some say it’s the equivalent of when you use “the” in English. I found these definitions to be vague and often actively misleading.

Much of this knowledge is thanks to the Türkçe Öğrenelim Discord. Feel free to join the community and support them on Patreon.

Read more

As an instructor, I find myself giving the same advice frequently to many students. In this article, I’ve distilled my most common recommendations into one place, especially since I worry that students might be missing out on advice if I don’t say it in front of the class.

This article contains advice for students in different stages of their programming career, from entering the bootcamp to landing their first development job. It describes some keys to success:

  • As a bootcamp student
  • As a programmer
  • As a job applicant
  • As an employee

My hope is that this will be a resource for all students of the Re:Coded bootcamps (and possibly other bootcamps, but it’s catered to my experience).

For the students: as with all improvement, simply hearing or reading it once isn’t enough to build good habits.

Read more