AWS Management Console

When using CloudFront to distribute content stored with Amazon S3, you may at times want to force the browser to download the content rather than display it in the browser. I ran into this scenario when building Cloudbeam.

Cloudbeam generates signed URLs in order to serve private content to authorized recipients. The purpose of the application is to allow each recipient a single download of the content. I wanted to avoid the browser simply displaying the content inline. To accomplish this, I used the query string response-content-disposition=attachment in the signed URL. However, the content was still frequently being displayed in…


Cloudbeam’s home page

Recently I built this Rails 6 application, Cloudbeam, with my good friends Kyle Ledoux and Jimmy Zheng. The application also leverages AWS S3 and CloudFront. You can visit Cloudbeam on the web or read on to learn more about this project and how it was built!

About Cloudbeam

Cloudbeam is an application designed to make sharing a large file with a small group of people easier. Cloud drive solutions exist, but there’s quite a bit of unforeseen legwork involved in what, at first glance, would appear to be a simple file share!

Our solution leverages low-impact file storage in the cloud, competent…


I started leading Ruby study groups at Launch School in the fall of 2016. Currently, I’m running several JavaScript-focused study groups. Over the years, I’ve met with many students who have come to Launch School from a wide variety of backgrounds. I’ve had the privilege of watching many of them advance through Launch School’s curriculum, grow as developers, and begin their careers.

After observing so many learners over time I can say with certainty that a student’s success is not dictated by their personal characteristics. A person’s age, career history, location, and family circumstances all influence their learning journey at…


What is open-source software?

Open-source software (OSS) is simply software in which the source code is accessible to anyone. Users can view the source code, make changes to the code, and redistribute it.

OSS may be licensed under a variety of licenses. The key, according to the Open Source Initiative, is that the license “must allow software to be freely used, modified, and shared”. Some popular licenses for OSS include the MIT License, GNU General Public License, and Apache License 2.0. …


The Fisher-Yates Shuffle is named after statisticians Ronald Fisher and Frank Yates, who developed the original algorithm in 1938. In 1964, Richard Durstenfeld developed a more modern version of the algorithm which improved upon its asymptotic complexity and was optimized for use with computers. Donald Knuth published this modernized version of the Fisher-Yates Shuffle in his 1968 book, The Art of Computer Programming. For this reason, the Fisher-Yates Shuffle is also known as the Knuth Shuffle.

This article is about the modernized Fisher-Yates Shuffle.

What Does it Do?

The purpose of the algorithm is to randomly shuffle a collection in place. The Fisher-Yates Shuffle…


List comprehensions in Python provide a more concise way to generate a list of values.

Let’s first take a look at a more verbose way to generate a list of new elements. In the below code we iterate over a range of numbers three through nine and create a new list, cubed_values, containing each number cubed.

cubed_values = []
for num in range(3, 10):
cube = num**3
cubed_values.append(cube)
print(cubed_values)
# [27, 64, 125, 216, 343, 512, 729]

There’s nothing wrong with the above code. It’s pretty simple and easy to read.

However, list comprehensions offer us an alternative way to…


A conceptually simple and straight-forward way to calculate the factors of a given number n, might look like the below code:

# ruby
def factors(n)
(1..n).select { |int| n % int == 0 }
end
// javascript
function factors(n) {
return Array(n).fill().map((_, idx) => idx + 1)
.filter(int => n % int === 0);
}

These code samples do the job. They iterate through an inclusive list of numbers 1 through n, selecting only those numbers by which n can be divided evenly. The returned result is an array of n's factors, as expected. While this approach works, it is…


Linear Search

As a beginner programmer, conducting a linear search on an array is conceptually simple and straight-forward to implement. Let’s take a look at an arbitrary example code below. The code is written in Ruby, but the concept of a linear search is language-agnostic.

arr = [1, 2, 3, 4, 5, 6, 7, 8, 11]def linear_search(arr, val)
arr.each do |n|
return true if n == val
end
false
end
linear_search(arr, 3) # returns true
linear_search(arr, 9) # returns false

Our first invocation of linear_search searches for the integer 3; next we search for 9. The search behavior is the same…


For some time, I wasn’t aware that there is a very simple way to preserve delimiters when splitting a string with String#split. Let’s look at the exercise below as a basic example of when this knowledge might be useful:

Implement the substitute_numbers method so that each number written out in English within the string argument is replaced with its corresponding string digit instead. For example: ‘zero’ should be replaced with ‘0’. The string argument will contain only single-digit numbers zero through nine.

A first attempt at implementing a solution may look something like this:

Our general approach is…


Perfect is good, right?

When it comes to learning, I‘m not so sure. Making mistakes is an important part of both learning new information and retaining it. Fear of appearing anything less than perfect may squash a learner’s willingness to ask questions and experiment with new ideas. If you are a perfectionist, you may even find yourself afraid to take on new challenges or use what you have learned because… what if you fail? Spoiler alert: if you fail, you will pick yourself back up and keep going.

What is interesting is how vastly our self-assessment varies from the way…

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store