Skip to content

Instantly share code, notes, and snippets.

View hatemogi's full-sized avatar
😃

Daehyun Kim hatemogi

😃
View GitHub Profile
@hatemogi
hatemogi / tracing_subscriber_init.rs
Created November 19, 2024 01:17
tracing_subscriber 초기화
tracing_subscriber::registry()
.with(fmt::layer())
.with(
EnvFilter::try_from_default_env()
.unwrap_or_else(|_| EnvFilter::new("{crate_name}=debug")),
)
.init();
import commonjs from '@rollup/plugin-commonjs';
import resolve from '@rollup/plugin-node-resolve';
import typescript from '@rollup/plugin-typescript';
export default {
input: 'src/index.ts',
output: {
dir: 'public',
format: 'cjs'
},
@hatemogi
hatemogi / update_view_metadata.sql
Created January 25, 2023 05:53
PG's view columns do not follow "NOT NULL" from the original table's
-- PostgreSQL에서 view를 생성하면, 해당 view의 컬럼메타데이터 중에, null여부가 잘 저장되지 않는 문제.
-- 좀 찜찜하지만, 뷰 생성 후에 view의 metadata를 수동으로 업데이트 해서, NOT NULL 정보를 업데이트 할 수 있음.
CREATE VIEW a_view_from_table AS
SELECT *
FROM original_table
; -- WHERE {conditions}
UPDATE pg_attribute
SET attnotnull=true
@hatemogi
hatemogi / elm-format.md
Created January 18, 2023 04:57
elm-format을 M1용 바이너리로 빌드하기

문제

  • M1 맥북프로에서, elm-format이 때로 느리게 반응한다.
  • 찾아보니, 기본 설치되는 elm-format은 x86바이너리다.
  • M1용으로 바이너리를 만들면 빨라지지 않을까?

정보

  • 해당 이슈를 검색해보니 avh4/elm-format#723 여기에 이미 언급됨.
  • 여러 이유로 아직 m1바이너리는 배포되고 있지 않지만, 로컬에서 따로 빌드할 수는 있겠다.
@hatemogi
hatemogi / object_id.sql
Created January 13, 2023 14:44
PG function generates a mongodb's objectId
CREATE SEQUENCE IF NOT EXISTS object_id_counter AS int;
CREATE OR REPLACE FUNCTION generate_object_id() RETURNS CHAR(24)
AS $$
DECLARE
id CHAR(24);
BEGIN
SELECT right(to_hex(floor(extract(epoch from now()))::integer), 8)
|| right(lpad(to_hex(pg_backend_pid()), 10, '0'), 10)
|| right(lpad(to_hex(nextval('object_id_counter')), 6, '0'), 6)
-- x원소를 n개만큼 갖고 있는 1차원 배열을 생성
CREATE OR REPLACE FUNCTION array_replicate(x anycompatible, n integer)
RETURNS anycompatiblearray AS $$
BEGIN
RETURN array_fill(x, ARRAY[n]);
END
$$ LANGUAGE plpgsql;
-- 배열 xs에서 최대 n개의 요소만 추출.
@hatemogi
hatemogi / gist:56338b0863dedf7ee38964d990c7351a
Created July 18, 2022 14:01
favicon.png -> favicon.ico 변환
convert favicon.png -bordercolor white -border 0 \
\( -clone 0 -resize 16x16 \) \
\( -clone 0 -resize 32x32 \) \
\( -clone 0 -resize 48x48 \) \
\( -clone 0 -resize 64x64 \) \
\( -clone 0 -resize 128x128 \) \
\( -clone 0 -resize 256x256 \) \
-delete 0 -alpha off -colors 256 favicon.ico
@hatemogi
hatemogi / .scalafmt.conf
Last active February 16, 2023 08:07
scalafmt 설정 파일
version = 3.7.1
maxColumn = 120
runner.dialect=scala3
@hatemogi
hatemogi / Time.java.md
Created March 8, 2021 08:25
java.time.Instant 류의 차이점

Instant, LocalDateTime, OffsetDateTime, ZonedDateTime

  • Instant는 UTC기준 유닉스 타임스탬프. 초를 나타내는 long, nano초를 나타내는 int로 구성됨.
  • LocalDateTime은, 시간대는 없이, 시간 자체만 nano초단위까지 표현.
  • OffsetDateTime은, 시간대 정보를 UTC기준 오프셋(ZoneOffset)으로 관리하는 시간. 예) UTC+09
  • ZonedDateTime은, 시간대 정보를 ZoneId로 관리. 예) Asia/Tokyo

각각의 차이

  • LocalDateTime vs. OffsetDateTime|ZonedDateTime => 시간대 정보 포함 여부
type Signal = LazyList[Boolean]
def inv(xs: => Signal): Signal = xs map { ! _ }
def reg(init: => Boolean, d: => Signal): Signal = init #:: d
val tff: Signal = {
def d: Signal = inv(q)
def q: Signal = reg(false, d)
q
}