전체 글 9

jekyll 테마 만들기

윤님이 톡방에 이런 채팅을 남겼다 윤님이 만드셨던 블로그중에 https://blog.yuni.dev/ 별 다른 이미지 없이도 매우 깔끔하고 이뻤는데 막상 블로그를 만들려고 하니 갖고 있던 온프레미스 서버들이 전부 하드웨어 이슈로 죽어버리기도 했고(..) 굳이 동적인 사이트를 만들고 싶진 않아서 예전에 jekyll 로 github pages에 올렸던 블로그가 생각나 jekyll로 테마를 만들어보기로 했다. 경고: 이 포스팅은 jekyll 테마를 적용하는 포스팅이 아니다. 만드는 포스팅이므로 단순히 적용하고 싶다면 다른 포스팅을 참고하자. 우선 github에서 repo를 만들자 .github.io 라는 이름으로 만들면 그대로 url이 될것이고, 다른 이름으로 만들면 .github.io/ 이 url이 된다. ..

헛소리 2023.08.19

'.한국' 같은 국가별 퓨니코드 최상위 도메인 구경하기

구경만 하고 싶으면, '분류 결과'를 검색하거나 스크롤을 내리자 몇개월 전, 카카오톡에 '서양.한국' 등을 입력하면 성인 사이트가 나와 이슈가 됐었다. 사실 이는 한글로 만든 도메인으로, a.com 과 같이 그저 url이라서 그런 것 이었는데, 이런 비-알파벳 도메인은 어떤걸 만들 수 있을까? 우리가 보통 도메인을 만들게 되면 .com으로 끝날지, .net으로 끝날지 등 도메인의 마지막 .을 기준으로 오른쪽에 있는 최상위 도메인(TLD, Top Level Domain)또한 골라야한다. 사실 앞부분은 유니코드 문자면 어떤 것이든 상관 없으므로, TLD 중 비 알파벳 도메인을 찾아보자 TLD의 목록은 https://data.iana.org/TLD/tlds-alpha-by-domain.txt 에서 확인할 수 ..

헛소리 2023.08.14

java의 field 초기화와 동시성

다음 코드의 출력을 예상해보자. class A{ A() { f(); } public void f(){ System.out.println("3"); } } class B extends A{ int x = 4; public void f() { System.out.println(x); } } public class Main { public static void main(String[] args) { A a = new B(); } } 답은 뭘까? 3 혹은 4중에 고민하고 있다면, 그렇지 않다. 답은 0이다. java는 C++와 다르게 생성자에서도 virtual하고 순서상 A가 초기화된 후에 B가 초기화되기 때문에, x가 초기화되지 않은 상태로 출력되어 0이 출력된다. 그렇다면 생성자에서 필드를 초기화하는 클래스..

공부 2023.06.15

docker로 Apple Silicon에서 xv6 빌드하기

m1 맥북에서 gcc-multilib이 설치가 안되는 것으로 기억하고 있어 docker에서 로제타를 이용해 amd64 ubuntu로 빌드했다. *vscode 사용자를 기준으로 작성되었다. docker desktop을 설치하자. 만약 이미 설치되어 있다면 Settings > Software updates에서 업데이트하자. Settings > General > Use Virtualization frameworks 활성화 Settings > Features in dev > Use Rosetta .. 활성화 Apply & restart 원하는 프로젝트 위치에서 터미널을 켜서 git clone https://github.com/mit-pdos/xv6-public.git 을 실행하고 ./docker-compose...

기타 2023.05.07

Garbage Collection(4) - Weak Reference

Garbage Collector가 존재하는 언어중 몇몇은 약한 참조(Weak Reference)라는 것을 제공합니다. java js python lua 일반적으로, 참조당하고 있는 객체는 Garbage Collection 대상이 아닙니다. 하지만 캐시와 같이 속도 면에서는 중요하지만 제거해도 괜찮은 객체는 어떻게 할까요? 이를 위해 Reference Object를 제공합니다. Reference Object를 통해 객체를 간접적으로만 참조하는 방식으로 사용하며, GC는 메모리가 부족하면 Reference Object으로만 참조중인 객체를 제거할 수 있습니다. 따라서 일반적으로는 다음과 같이 접근합니다. var weakRef = new WeaKReference(new T()); ... // 객체는 언제든 제..

공부 2023.01.16

Garbage Collection(3) - Java GC Tuning

이전 포스팅에서는 자바의 Garbage Collector에 대해 다뤘습니다. 이번 포스팅에서는 Garbage Collector를 애플리케이션에 맞게 튜닝하는 방법에 대해 알아봅시다. Garbage Collectors * 이 포스팅에서 다루는 java의 버전은 18입니다. Serial GC -XX:+UseSerialGC Parallel GC -XX:+UseSerialGC Concurrent Mark Sweep(CMS) GC(Removed) Garbage-First(G1) GC -XX:+UseG1GC Z GC -XX:UseZGC Shenandoah GC -XX:+UseShenandoahGC Epsilon GC(Experimental) -XX:+UnlockExperimentalVMOptions -XX:+Use..

공부 2023.01.16

Garbage Collection(2) - Java GC

이전 포스팅에서 Garbage Collection에 대한 전략 세가지를 다뤘습니다. 이번 포스팅에서는 추적 전략을 사용하는 java의 Garbage Collector에 대해 다룹니다. Java GC(Garbage Collector) * 이 포스팅에서 다루는 java의 버전은 18입니다. 이전 포스팅에서 모든 스레드에서 변수 혹은 그 변수의 멤버 등으로 참조하지 않는 객체를 garbage라고 하고 이를 찾는 것을 Garbage Collection이라 했습니다. java에서는 garbage를 도달할 수 없다(Unreachable)고 하고, 반대로 하나 이상의 스레드에서 직/간접적으로 참조되는 객체를 도달할 수 있다(Reachable)고 표현합니다. garbage를 런타임에 찾는 알고리즘이나, 이를 수행하는 ..

공부 2023.01.16

Garbage Collection(1) - 탈출 분석과 참조 카운팅, 추적

우리는 프로그래밍을 하면서 다양한 한정적인 자원을 다룹니다. 네트워크 소켓이나, 메모리와 같이 사용한 후 돌려줘야할 것들이죠. 그 중에서, 메모리에 대한 이야기를 하려고 합니다. var a = new Integer(10); var b = a; System.out.println(a); a = null; // 아직 객체는 참조되는중 b = null; // 더 이상 해당 객체는 참조되지 않음 코드를 읽어보면, new Integer(10)은 더 이상 사용되지 않는 객체겠죠? 좀 더 일반화하자면, 모든 스레드에서 변수 혹은 그 변수의 멤버 등으로 참조하지 않는 객체는 제거해도 될겁니다. 이런 객체를 garbage라고 하고, 이를 찾는 것을 Garbage Collection이라고 합니다. garbage인지 어떻게 ..

공부 2023.01.16

2021.01 ~ 2023.01 회고

생각해보니, 이렇다할 회고를 작성하지 않은 듯 해서 기록 보관용으로 작성하기로 했다. 2021 - 2021.01 ~ current 'weekly challenges' 알고리즘 스터디 GitHub - solve-boj/weekly-challenges: 니실력에잠이오냐 니실력에잠이오냐. Contribute to solve-boj/weekly-challenges development by creating an account on GitHub. github.com 알고리즘 문제를 꾸준히 풀자는 생각으로 만든 스터디로, 일주일동안 문제를 풀고, 벌금을 잘 한 사람들에게 배분한다. 6개월쯤 진행 후 현재는 벌금은 사라진 상태이나 여전히 몇몇 스터디원들이 올리고 있다. - 2021.03 부산대학교 입학 공부 좀 더 ..

기타 2023.01.10