Skip to content

Instantly share code, notes, and snippets.

View ryochin's full-sized avatar
🏠
Working at home

Ryo Okamoto ryochin

🏠
Working at home
View GitHub Profile
@ryochin
ryochin / Dockerfile
Created March 19, 2025 08:19
Dockerfile: MySQL Client + grc (Generic Colouriser)
FROM mysql:8.0.32
RUN microdnf install -y python3 wget
ENV GRC_VERSION 1.12
RUN wget -q -O grc_$GRC_VERSION.tar.gz http://kassiopeia.juls.savba.sk/~garabik/software/grc/grc_$GRC_VERSION.orig.tar.gz \
&& tar xf grc_$GRC_VERSION.tar.gz \
&& cd grc-$GRC_VERSION \
&& sh ./install.sh \
@ryochin
ryochin / filter_map.ts
Last active February 13, 2025 03:00
TS: filterMap using ramda.js
import { chain, isNotNil } from 'ramda'
export const filterMap = <A, B>(fn: (a: A) => B | null, list: A[]): B[] =>
chain((x: A): B[] => {
const result = fn(x)
return isNotNil(result) ? [result] : []
}, list)
@ryochin
ryochin / Taskfile.yml
Last active March 16, 2025 01:48
Rails env builder
version: '3'
vars:
PROJECT: rails80
RUBY_VERSION: 3.3.4
NODE_VERSION: 20.10.0
BUN_VERSION: 1.2.0
RAILS_VERSION: 8.0.2
DATABASE: postgresql # mysql | postgresql
@ryochin
ryochin / UseKeyPress.ts
Last active September 4, 2024 04:28
TS: enhanced UseKeyPress React Hook
// https://novajs.co/react-hook-key-press
import { useState, useEffect } from 'react'
type KeyConfig = {
key: string
ctrl?: boolean
alt?: boolean
shift?: boolean
meta?: boolean
@ryochin
ryochin / ContentLength.ex
Created July 2, 2024 08:14
Elixir: Tesla Middleware of adding content-length header field
defmodule Tesla.Middleware.ContentLength do
@behaviour Tesla.Middleware
@impl Tesla.Middleware
def call(env, next, _options) do
env
|> Tesla.put_header(
"content-length",
(env.body || "") |> String.length() |> Integer.to_string()
)
@ryochin
ryochin / save_full_screenshot.rb
Created June 20, 2024 02:23
Rails: Rspec: save full screenshot on feature tests
def save_full_screenshot(page, path)
width = page.execute_script('return Math.max(document.body.scrollWidth, document.body.offsetWidth, document.documentElement.clientWidth, document.documentElement.scrollWidth, document.documentElement.offsetWidth);')
height = page.execute_script('return Math.max(document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight);')
window = page.driver.browser.manage.window
window.resize_to width + 100, height + 100
page.save_screenshot path
end
@ryochin
ryochin / datetime_to_str.ex
Last active July 2, 2024 08:15
Elixir: 日時のタプルをメール日時形式でフォーマットする
@doc """
日時のタプルをメール日時形式でフォーマットする
### Example
```
iex> {{2021, 4, 3}, {9, 46, 58}} |> datetime_to_str
"Sat, 03 Apr 2021 09:46:58 +0900"
```
"""
@ryochin
ryochin / openssl3.2.spec
Last active December 26, 2023 05:47
OpenSSL 3 that installed to /usr/local/openssl-3.xx.xx without docs for CentOS 7
Name: openssl3.2
Version: 3.2.0
Release: 1%{?dist}
Summary: Utilities from the general purpose cryptography library with TLS implementation
License: Apache License v2.0
URL: https://www.openssl.org/
Source0: https://www.openssl.org/source/openssl-%{version}.tar.gz
BuildRequires: perl-IPC-Cmd
@ryochin
ryochin / range.rs
Created December 22, 2023 01:44
TypeScript: range()
const range = (begin: number, end: number) => ([...Array(end - begin)].map((_, i) => (begin + i)))
@ryochin
ryochin / create_zip.ex
Created December 20, 2023 04:31
Elixir: Create a ZIP archive from list of files
defmodule Zip do
@moduledoc """
Easy ZIP creator
you need to install zstream:
```
{:zstream, "~> 0.6"}
```
"""