Skip to content

Instantly share code, notes, and snippets.


Max Chernyak maxim

View GitHub Profile
maxim / Excellent Karaoke Setup
Last active Jun 21, 2021
An excellent high quality karaoke setup for under $1000
View Excellent Karaoke Setup

Excellent high quality karaoke setup for under $1000

For my Vietnamese wife a good karaoke setup is serious business. Problem is, I noticed that some people spend thousands of dollars on unnecessary stuff like gigantic receivers and speakers, only to end up with hiss, clipping, and clunky operation. Smart/consistent home setup should definitely fit under $1000, and that's with speakers and expensive Nvidia Shield box. You could definitely cut it to under $500 and still have a great setup. I did some research and put together a convenient setup for amazing quality at-home karaoke that isn't worth thousands, isn't a chore to operate, and passes Asian quality standards with flying colors.

How to use this setup once it's ready:

  1. You find any song on your phone's Youtube and cast it to your TV
  2. You pick up the microphone, start singing, and it all just sounds surprisingly beautiful

This guide assumes that you already have a TV with HDMI ARC or Optical/Coaxial audio output, and that you have WiFi at home.

View barewords.rb
def plain_text_receipt # => Runtime: 5 sec, Network Timeout
Thank you for your order!
Product: #{name} - #{price} # => 2 DB queries
Tax: #{tax_amount} # => 1 DB query, 1 API call
Total: #{total_amount} # => 2 DB queries, 1 API call
maxim / react.rb
Created Jun 28, 2019
Extending react-rails with styled components support
View react.rb
# config/initializers/react.rb
Rails.configuration.react.server_renderer = do
def render_from_parts(before, main, after)
js_code = compose_js(before, main, after)
View stream_ext.ex
defmodule StreamExt do
@doc """
Stream records from Ecto in batches.
Supported options are
* batch_size - how many rows to fetch at once
* strategy - either :offset or :id
* :offset - uses SQL offset to fetch pages of results
This is slower, but works for any query.
maxim / docker-compose.yml
Created Aug 7, 2017
Getting started with docker
View docker-compose.yml
version: '3'
image: postgres:9.6
- "5432:5432"
- postgres-data:/var/lib/postgresql/data
View select_at.ex
def select_at(list, indexes),
do: select_at(list, indexes, 0, []) |> Enum.reverse
def select_at([], _, _, results),
do: results
def select_at(_, [], _, results),
do: results
def select_at([item | list], [i | indexes], i, results),
do: select_at(list, indexes, i + 1, [item | results])
def select_at([_ | list], indexes = [index | _], i, results),
do: select_at(list, indexes, i + 1, results)
View singleton_or_not.rb
# You could have an object for the whole app to use (e.g. in rails initializer)
ChanceGenerator =
# But also easily testable (this would be in a test setup):
test_chance = 1)
# The constructor can have a little documentation:
class Chance
# If seed is omitted, a new seed will be generated for each random call
def initialize(seed: nil)
maxim / 1-works_fine.rb
Last active Nov 28, 2016
Strange ruby bug: can't put comment after linebreak in method args. Tested in 2.3.2.
View 1-works_fine.rb
def foo \
a: 'a',
# comment here is ok
b: 'b'
puts a, b
foo(a: 'a', b: 'b') # => a\nb
View pipe.rb
class Object
def pipe(meth, obj = self, args = [])
obj.public_send(meth, self, *args)
class Doubler
def double(c);{|v| v*2} end
View foobar.rb
module Widgets
def self.extended(base)
class << base
attr_accessor :widgets
base.widgets = {}
def add_widget(name, widget)