Skip to content

Instantly share code, notes, and snippets.

Code is fun

Vincent Nguyen vinhnglx

Code is fun
View GitHub Profile
vinhnglx / migration.ex
Created Apr 23, 2018
Migration script when release a Phoenix/OTP app by Distillery
View migration.ex
# apps/myapp/lib/migration.ex
defmodule MyApp.ReleaseTasks do
@start_apps [
@app :myapp
def repos, do: Application.get_env(@app, :ecto_repos, [])
vinhnglx /
Last active Aug 26, 2016
Type of servers in Rails application


Webrick is a single-thread, single-process web server.

Webrick will keep the router's connection open until it has downloaded the entirety of the request from the router. The router then will move on to the next request. Webrick server will then take the request, run the application code and send back the response to the router.

During the all of time, your host is busy, and will not accept connections from other routers. If the router attemps to connect to this host while the request is being processed, the router will wait until the host is ready.

The problem with Webrick are exaggerated with slow requests and uploads. If someone is trying to upload a big file, Webrick is going to sit there and wait while the request downloads, and will not download anything in the meantime, and it also will not accept any requests.


How many instances do you need?

There's a theoretical tool we can use, the number of instances must obey Little's Law. The definition from Wikipedia is so hard to understand. So, basically, we just need to know the formula

Number of application instances = Average number of requests per second (requests/second) * Average response time (second)

Application Instances, its job is process a single request dependently and send it back to client. When using Puma in threaded mode, application instance is the entire Puma process, when using MRI, JRuby,each thread counts as an application instance. When using Unicorn, Puma (clustered) or Passenger, your application instance is each worker process.

vinhnglx /
Last active Nov 19, 2020
Difference between Benchmarking and Profiling


Benchmarking. We take two competing pieces of code - could be as simpler as a one liner or as complex as an entire web framework. Then, we put them up against each other (iterations per second). At the end of the task, we come up with a single metric, a score. We use the score to compare the two competing options.

In Ruby, the Benchmark module provides methods to measure and report the time used to execute Ruby code.

Profiling. Profiling your program is a way to determining which methods are called and how long each method take to complete.

vinhnglx / User.rb
Created Mar 11, 2016
Custom validation message in Rails - Override prefix
View User.rb
class User < ActiveRecord::Base
validates_uniqueness_of :email, message: 'has already taken'
# user = '')
#! => User has already taken.
# If you wanna change the error message to "Your fucking account has already taken"
# just edit one file config/locales/en.yml

============== #rails #tips ​​_[Mẹo hay]_​ Viết filter phức tạp cho rails controller thì nên cho vào Filter class​ Vd nếu bạn cần một filter phức tạp cho before_action, rails có một dạng là nhận vào một class

class ApplicationController < ActionController::Base
  before_action LoginFilter
class LoginFilter
vinhnglx / random.rb
Created Nov 5, 2015
Random record in Rails
View random.rb
# Inspired from Sebastien Saunier
# models/production.rb
class Production < ActiveRecord::Base
enum status: {active: 1, deactive: 0}
validates_presence_of :status
include Randomable
vinhnglx / omniauth_macros.rb
Created Oct 6, 2015 — forked from kinopyo/omniauth_macros.rb
Integration test with Omniauth. This example is using twitter, and assume you've installed rspec and capybara. Official document is here:
View omniauth_macros.rb
# in spec/support/omniauth_macros.rb
module OmniauthMacros
def mock_auth_hash
# The mock_auth configuration allows you to set per-provider (or default)
# authentication hashes to return during integration testing.
OmniAuth.config.mock_auth[:twitter] = {
'provider' => 'twitter',
'uid' => '123545',
'user_info' => {
'name' => 'mockuser',
View rspec_cheatsheet_controller_spec.rb
require 'rails_helper'
RSpec.describe TodosController, :type => :controller do
context "GET index" do
#context "POST create" do
#context "GET show" do
#context "PATCH update" do (or PUT update)
#context "DELETE destroy" do
#context "GET new" do
vinhnglx / example_nokogiri_scraping.rb
Created Sep 20, 2015
View example_nokogiri_scraping.rb
require 'open-uri'
require 'nokogiri'
require 'csv'
# Store URL to be scraped
url = ""
# Parse the page with Nokogiri
page = Nokogiri::HTML(open(url))
# Display output onto the screen