Skip to content

Instantly share code, notes, and snippets.

View dalinaum's full-sized avatar
:octocat:
Learning Rust and IR.

LYK dalinaum

:octocat:
Learning Rust and IR.
View GitHub Profile
@dalinaum
dalinaum / squash-merge.markdown
Last active August 10, 2022 15:01
스쿼시, 머지 가이드

머지 제거

git log를 봤을 때 마지막에 마스터를 머지했네요.

commit 449ce0b2929cddd7cf760f63d4e07dc25d574abd (HEAD -> patch-1, danuel/patch-1)
Merge: 8fea8a6c1fc 66eb9821666
Author: Danuel <public.danuel@gmail.com>
Date:   Mon Jan 18 23:50:41 2021 +0900
@dalinaum
dalinaum / no-won.sh
Last active March 6, 2022 14:54
백쿼트를 제대로 쓰게
#!/bin/sh
dir="$HOME/Library/KeyBindings"
file="DefaultKeyBinding.dict"
mkdir -p $dir
cd $dir
echo "{" >> $file
echo " \"₩\" = (\"insertText:\", \"\`\");" >> $file
echo "}" >> $file
@dalinaum
dalinaum / callback.kt
Last active February 4, 2022 07:23
콜백과 코루틴
import kotlinx.coroutines.*
fun handleError(error: String) {
println(error)
}
fun callback(f: String) {
println(f)
}
@dalinaum
dalinaum / Rx.kt
Last active January 26, 2022 11:20
코루틴을 쓰기 전의 코드와 쓴 후의 코드
fun getProfilePage() {
getUserById("fastcampus")
.map { getAdditionalUserInfo(e) }
// 내용이 길어질 수록 길어지는 체이닝 .XX, .YY.
// 줄줄이 쓰고 싶은데 어떤 것을 .map이나 .filter나 .flatMap에 나누어서 전달해야.
.subscribeWith(object: DisposableObserver<String>() {
override fun onError(e: Exception) {
handleUserInfo(e)
}
override fun onSuccess(additionalUserInfo: AdditionalUserInfo) {
#!/bin/sh
brew_root="/usr/local/m1-homebrew"
brew_bin="$brew_root/bin"
sudo mkdir $brew_root
sudo chown $(whoami) $brew_root
curl -L https://github.com/Homebrew/brew/tarball/master | tar xz -C $brew_root --strip 1
echo "export PATH=$brew_bin:\$PATH" >> ~/.zshrc
/*
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
@dalinaum
dalinaum / android-build.md
Last active June 1, 2021 13:02
안드로이드 빌드 시스템

안드로이드 빌드 시스템

자바 세계의 빌드 시스템은 시기에 맞추어 다른 도구가 주목을 받았습니다. 처음에는 확장성이 강력한 아파치 앤트, Apache Ant가 주목을 받았습니다. 설정이 편하고 중앙 저장소를 가진 아파치 메이븐, Apache Maven이 다음 타자였습니다. 사람들은 강력하지만 설정하기 어려운 앤트와 편리하지만 커스터마이징하기 어려운 메이븐 사이에서 아쉬움을 느꼈고 절충된 해법을 찾기를 원했습니다. 아파치는 2004년 대안으로 아파치 아이비, Apache Ivy를 선보였으나 시장의 반응은 좋지 않았습니다. 그 후로 3년 뒤 우리는 그래들, Gradle을 만나게 됩니다. 그래들은 그루비 언어를 기반으로 쉽게 설정할 수 있으며 다양한 기능을 추가할 수 있었고 자바 세상의 주류로 편입하게 됩니다.

안드로이드가 처음 등장했을 때 안드로이드의 주요 빌드 시스템은 아파치 앤트였습니다. 이 당시에는 IDE 환경도 안드로이드 스튜디오를 쓰는 지금과는 달리 이클립스 기반의 안드로이드 개발 툴, Android Development Tool을 사용했습니다. 이후 자바 세계의 변화에 맞추어서 안드로이드 빌드에서 메이븐을 여러 안드로이드 커뮤니티에서 실험하기 시작했고 나중에 구글이 공식 빌드 시스템을 그래들 기반으로 변경하였습니다.

기본 빌드 시스템의 파일 구성

일반적인 안드로이드 빌드 구성

answers_query = """
SELECT a.id, a.body, a.owner_user_id
FROM `bigquery-public-data.stackoverflow.posts_questions` AS q
INNER JOIN `bigquery-public-data.stackoverflow.posts_answers` AS a
ON q.id = a.parent_id
WHERE q.tags LIKE '%bigquery%'
"""
@dalinaum
dalinaum / conflict-resolution-for-eventual-consistency-goto.md
Created March 21, 2021 11:31
결과적 일관성을 위한 충돌 해결 (Conflict Resolution for Eventual Consistency)

결과적 일관성을 위한 충돌 해결 (Conflict Resolution for Eventual Consistency)

  • 마틴 클레프만 (Martin Kleppmann)

소개

분산 시스템에서 충돌 해결(Conflict resolution)을 다루려 합니다. 다른 사람들이 데이터를 독립적으로 변경했을 때 어떤 일이 일어나고, 일어난 충돌을 어떻게 해결하냐입니다. 내 이름은 마틴 크레프만이며 캠브리지 대학의 연구자이고요. 예전에는 산업에서 인터넷 스타트업에 종사했습니다. 또 링트인(LinkedIn)에서도 몇년동안 일했습니다.

Trve 데이터

@dalinaum
dalinaum / yyerror.md
Last active February 3, 2021 17:28
좋은 구문 오류 생성하기

좋은 구문 오류 생성하기

Go 언어 개발자 러스 콕스Generating Good Syntax Errors의 번역입니다. 해당 글은 Creative Commons Attribution License 라이선스를 따르며 번역본도 역시 동일합니다.

yacc류와 같은 파서 생성기(parser generator, 구문 분석기 생성기)를 써야할지 (일반적으로는 재귀 하강(recursive descent)을 이용해) 손으로 파서를 작성할지 여부는 컴파일러를 작성할 때 큰 논쟁거리입니다. 파서 생성기를 이용하면 파서 개발자는 파싱할 언어를 정확하게 정의하고 대부분의 지저분한 작업은 프로그램이 합니다. 반면 손으로 재귀 하강 파서를 만드는 것을 지지하는 사람들은 파서 생성기는 과도하고, 파서는 손으로 작성하기 충분히 쉬우며, 그 결과는 이해하기 쉽고, 더 효과적이며, 구문 상 유효하지 않는 프로그램에 대해 더 나은 오류 메시지를 줄 수 있다고 주장합니다.

대부분의 종교 논쟁에서와 마찬가지로 어느 쪽을 선택할지는 무엇보다 친숙함에 의해 결정되는 것으로 보입니다. 나는 yacc를 사용하는 법을 손으로 파서를 작성하는 것보다 먼저 알았기에 파서 생성기 편에 강하게 서게 되었습니다. 지금은 두 기술을 어떻게 적용하는지 알지만, 여전히 파서 생성기를 사용하곤 합니다. 사실, 손으로 파서를 작성하기 보다는 파서 생성기로 여러 프로젝트를 작성했습니다. 앞으로 보게 될 좋은 표기법은 많은 것을 의미할 것입니다.

Coder At Work에서 켄 톰슨 (Ken Thompson) (주: 유닉스