Skip to content

Instantly share code, notes, and snippets.

@sofakingworld
sofakingworld / Elixir.md
Last active January 26, 2020 21:28
Задачки на закрепление знаний по Elixir и OTP

Простое

На сайте https://www.cbr-xml-daily.ru/ можно получить различные курсы валют. Необходимо написать модуль, который позволит переводить деньги из одной валюты в любую другую. Например: 1 турецкая лира = 0.17 долларов США.

Среднее

В онлайн-магазине очень много посетителей, и на популярные товары огромный спрос. Правда, иногда, покупатели покупают товар, который уже закончился на складе (т.к. во время оформления покупки товар был выкуплен другим клиентом). С помощью GenServer необходимо реализовать регистр, который будет хранить количество позиций каждого товара. В случае, если товар кончился - должен быть запрет оформления покупки.

Сложное

;WITH hours as (
SELECT 0 hour_id, '00:00 - 01:00' hour_literal UNION
SELECT 1 hour_id, '01:00 - 02:00' hour_literal UNION
SELECT 2 hour_id, '02:00 - 03:00' hour_literal UNION
SELECT 3 hour_id, '03:00 - 04:00' hour_literal UNION
SELECT 4 hour_id, '04:00 - 05:00' hour_literal UNION
SELECT 5 hour_id, '05:00 - 06:00' hour_literal UNION
SELECT 6 hour_id, '06:00 - 07:00' hour_literal UNION
SELECT 7 hour_id, '07:00 - 08:00' hour_literal UNION
SELECT 8 hour_id, '08:00 - 09:00' hour_literal UNION
;WITH incomes as (
-- группируем по часу, сразу считаем количество проходов
SELECT date_part as , count(*)
FROM
(SELECT
DATE_PART('hour', started.created_at) date_part,
ROW_NUMBER() OVER (PARTITION BY started.id) rn
FROM sensor_triggers started
JOIN sensor_triggers ended
-- Проверяем, что срабатывание между датчиками < 5 секунд
;WITH hours as (
...
),
incomes as (
SELECT *
FROM sensor_triggers
WHERE ...
GROUP BY hour(created_at)
),
outcomes as (
;WITH hours as (
SELECT 0 hour_id, '00:00 - 01:00' hour_literal UNION
SELECT 1 hour_id, '01:00 - 02:00' hour_literal UNION
SELECT 2 hour_id, '02:00 - 03:00' hour_literal UNION
SELECT 3 hour_id, '03:00 - 04:00' hour_literal UNION
SELECT 4 hour_id, '04:00 - 05:00' hour_literal UNION
SELECT 5 hour_id, '05:00 - 06:00' hour_literal UNION
SELECT 6 hour_id, '06:00 - 07:00' hour_literal UNION
SELECT 7 hour_id, '07:00 - 08:00' hour_literal UNION
SELECT 8 hour_id, '08:00 - 09:00' hour_literal UNION
@sofakingworld
sofakingworld / benchmark.rb
Last active June 5, 2019 23:43
Custom serializer benchmarking
user = User.first
require 'Benchmark'
Benchmark.bm do |x|
x.report { 1000.times do UserSerializer.serialize(user) end}
x.report { 1000.times do FJUserSerializer.new(user).serializable_hash end}
end
# # =>
@sofakingworld
sofakingworld / bash_result
Last active April 18, 2019 18:52
Timestamps in console
21:49:09 ➜ ~ echo 'Hello world'
Hello world
@sofakingworld
sofakingworld / cloudSettings
Last active September 25, 2019 13:19
Visual Studio Code Settings Sync Gist
{"lastUpload":"2019-04-01T10:01:42.760Z","extensionVersion":"v3.2.7"}
defmodule StackImpTest do
use ExUnit.Case
test "pops first item" do
assert {1, [2, 3]} = StackImp.pop([1,2,3])
end
test "pops empty list" do
assert {nil, []} = StackImp.pop([])
end
@sofakingworld
sofakingworld / stack.ex
Last active March 19, 2019 23:58
Stack#2
defmodule Stack do
use GenServer
# Client
def start_link(default) when is_list(default) do
GenServer.start_link(__MODULE__, default)
end
def push(pid, item) do