Xcode Treasures: Master the Tools to Design, Build, and Distribute Great Apps in beta

Xcode Treasures: Master the Tools to Design, Build, and Distribute Great Apps in beta

Simplifying JavaScript: Writing Modern JavaScript with ES5, ES6, and Beyond in print

Simplifying JavaScript: Writing Modern JavaScript with ES5, ES6, and Beyond in print

Data retention with the Serverless Framework, DynamoDB, and Go

At Honeybadger we have standard retention periods for data from which our customers can choose. Based on which subscription plan they choose, we’ll store their error data up to 180 days. Some customers, though, need to have a custom retention period. Due to compliance or other reasons, they may want to have enforce a data retention period of 30 days even though they subscribe to a plan that offers a longer retention period. We allow our customers to configure this custom retention period on a per-project basis, and we then delete each error notification based on the schedule that they have set. Since we store customer error data on S3, we need to keep track of every S3 object we create and when it should be expired so that we can delete it at the right time. This blog post describes how we use S3, DynamoDB, Lambda, and the Serverless Continue reading “Data retention with the Serverless Framework, DynamoDB, and Go”

Docker for Rails Developers: Build, Ship, and Run Your Applications Everywhere, in beta

Craft GraphQL APIs in Elixir with Absinthe: Flexible, Robust Services for Queries, Mutations, and Subscriptions, in print

Journey to ElixirDaze 2018

Last October I discovered an interesting Github issue, Elixir-Lang #6643. It was opened José Valim, the creator of Elixir.

Here's part of the introduction to this issue:

Elixir master now includes a code formatter that automatically formats your code according to a consistent style.

We want to convert Elixir's codebase to use the formatter on all files. We understand this means a lot of code churn now but, on the positive side, it means we can automatically enforce and/or format future contributions, making it easier for everyone to contribute to Elixir.1

This issue set off a massive refactoring project to get Elixir conforming with its new formatter. Today, new pull requests to Elixir must pass through the formatter without requiring changes. I think this will have a ripple effect on every Elixir project in production.

While closing this issue, José provided the following statistics on the refactor:

Adopting Elixir: From Concept to Production, in print

Programming Clojure, Third Edition, in print; Free iOS course

When To Use Redux

Have you had a conversation about Redux recently that has left you wondering — despite all of its praise and the assured recommendations — if you made a big mistake when you typed the words, yarn add redux?

Jani is being a bit facetious here. But if you’ve been following along on twitter, there has been a lot of discussion about redux. The crux of the conversation is aimed at whether most apps even call for the use of redux and consequently if we, as developers, are using it when we don’t need it.

Creating A Paper Wallet for Your CryptoCurrency with MyEtherWallet

When investing in cryptocurrency, security is a huge concern. In 2014, a famous online bitcoin exchange, Mt.Gox, was the target of a hack that saw 850,000 bitcoins stolen. For many investors, this was a wake-up call. Keeping your money in an online exchange is not a smart move. The best way to protect your investment is to be proactive. There are already many strategies for storing cryptocurrency, and one of the most secure ways is cold storage. Cold storage involves generating and storing your coins private keys offline. While it might not be ideal for you to keep all of your cryptocurrency stored offline, this option ultimately provides the best security.

Like many others, I too had kept my investments on online exchanges (mainly for convenience). After a few months of investing and seeing some positive gains, I decided it was finally time to move my assets off of

MEW - Create Wallet Password
MEW - Save KeyStore File
MEW - Print Paper Wallet
MEW - Wallet Log In

Continue reading “Creating A Paper Wallet for Your CryptoCurrency with MyEtherWallet”

Books I Liked in 2017, All In One Part

2017 Books A Plenty

At long last, the 2017 books that made me happy/recommendations post. Did you miss me?

Past years:

This year, I’m doing it all in one post, because if you are going to write 4000 words it’s best to get it all in at once, that’s just science.

The rules are:

  • These are all books I read in 2017
  • That I liked
  • The books are organized into arbitrary groups, because there were weird coincidences, in that I read a number of say, unusual time-travel books this year.
  • Within each category, books are alphabetical by title.
  • The order of the categories is arbitrary
  • Links go to Amazon Kindle version.

For each book this year, I tried to add a Recommended If You Like.

Weird Portal Fantasies

For some reason, I read a lot of revisionist

Continue reading “Books I Liked in 2017, All In One Part”

Fun with Views and CTEs

A view is a stored query the results of which can be treated like a table. Note that it is the query that is saved and not the results of the query. Each time you use a view, its associated query is executed.

A related concept is that of the common table expression or CTE. A CTE can be thought of as a short-lived view; you can only use it within the query in which it appears (you can refer to it multiple times, however).

Let's say that you're the SQL-savvy owner of a store that sells kits for building robots. On your site, customers are guided through the process of selecting all of the components needed to build a quadrupedal robot, i.e. getting the right motors, microcontrollers, sensors, batteries, grippers, etc.

Robots have lots of component parts and you have to make sure that the correct components for

alt text
customers
alt text
purchases
alt text
component_purchases
query1
query_4
tree graph
working_table_1
inner_join_1
working_table_2
inner_join_2
working_table_3
inner_join_3
working_table_4
inner_join_4
working_table_5
subcomponents
purchases_made
pm_pc_join

Continue reading “Fun with Views and CTEs”

Forge Your Future with Open Source; Domain Modeling Made Functional in print

Binary Searching and Ruby’s bsearch Method

Binary search might be the most well-known search algorithm out there. If you went to school for computer science, you've probably heard the fundamentals of binary search hundreds of times. Chances are, you've been asked about binary search while interviewing for a development job – and for good reason. Binary search is a powerful algorithm. Compared to a linear search it performs very well, and the performance benefit is especially noticeable as the data set grows. A few weeks ago, I got the chance to use it in a live application, but it's been a while since I've worked with this algorithm, so I had to brush up on the implementation.

The Problem

My pair and I were working on a class in one of our client's applications. This class used a lot of finds and other linear search-esque code to check for items in sorted collections. Being the

Continue reading “Binary Searching and Ruby’s bsearch Method”

Scaling ipify to 30 Billion Requests and Beyond on Heroku

The following is the story of how Randall Degges created a simple API to solve the common problem of external IP address lookup and how he scaled it from zero to over 10 thousand requests per second (30B/month!) using Node.js and Go on Heroku.

Several years ago I created a free web service, ipify. It is a highly scalable IP address lookup service. When you make a GET request against it, it returns your public-facing IP address. Try it out yourself!

I created ipify because, at the time, I was building complex infrastructure management software and needed to dynamically discover the public IP address of some cloud instances without using any management APIs.

When I searched online for freely

Continue reading “Scaling ipify to 30 Billion Requests and Beyond on Heroku”

Heroku Postgres PGX: Bigger Databases, Improved Infrastructure, Same Price

Today, we’re excited to announce a major update to Heroku Postgres with a new lineup of production plans. These plans are the first component of Heroku Postgres PGX, the next generation of our managed Postgres solution.

PGX Plans introduce larger database sizes, more generous resource allocations, and a broader set of options to suit your needs and to help your applications scale more smoothly. PGX Plans are generally available as of today, and all new Postgres databases will be created on our latest generation of Postgres infrastructure. Underneath the hood, we've upgraded the CPU, memory, storage, and networking aspects to ensure your Postgres database is running smoothly at scale.

To take a look at which of your Heroku Postgres databases can take advantage of PGX Plans now and how, go to data.heroku.com.

New Production Plans for More Flexible Scaling

Our new lineup of 8 plan levels offers gradual

New Plans, More Possibilities dialog window

Continue reading “Heroku Postgres PGX: Bigger Databases, Improved Infrastructure, Same Price”

Simplifying JavaScript in beta; Complex Network Analysis in Python in print

#Rust2018 – Exploring New Contribution and Feedback Models

Since I’m coming pretty late to the #Rust2018 party, most of the things I wanted to say have already been said!

Ashley’s kick-off post was kind of a meta-#Rust2018 for me, calling for us to experiment with new ways to get community feedback in Rust. I personally really enjoyed all of the energy in #Rust2018, and hope that we continue to experiment on this front.

I really loved Julia’s post, both for enumerating so many ways that Rust has become easier to use since last year, but also for showing that marketing Rust to people who have never written low-level code before need not conflict with marketing Rust to people who want a better C++ (and other audiences too!).

I liked both Steve’s post and Nick’s post for showing that we’re already on track to have a great 2018, as long as we stay focused on shipping and Continue reading “#Rust2018 – Exploring New Contribution and Feedback Models”