좋은 오류 메시지가 시간을 절약하다
(이 글은 영어로 또 있어요.)
개발자는 자주 오류를 보고 오류의 메시지를 읽어야 해요. 그래서 나쁜 오류 메시지 시간 많이 필요할 수 있잖아요. 오류의 안내가 없으면 사람들 추측하기 시작해야 돼요.
나쁜 오류 예: - 프로세스는 비정상 종료 코드만 하하지마! 제발, 표준 에러에 오류를 설명해주세요! - 파일을 못 찾았다고요. 끝. 무슨 파일!, 무슨 파일 못 차았어요? - 등
근데 진짜 좋은 예도 있어요: Babashka HTTP client.
REPL에서:
(http/post "http://gamlor.info/nowhere"
{:headers {"Authorization" "Bearer open-sesame"}})
=> Execution error (ExceptionInfo) at babashka.http-client.interceptors/fn (interceptors.clj:251).
Exceptional status code: 404근데, 오류 정보를 더 잘 살펴보면 정보 많이 생기다:
Good Error Messages Save Time
Developers often face errors and will read error messages. So, a bad error message will use a lot of time. If there is no good information, people have to start guessing.
Bad error examples: - Do not a process with only an error code. Please explain the error in the error standard out. - "File not found error." End. What file! WHAT file was not found - etc
However, a good example is Babashka HTTP client.
In the REPL:
(http/post "http://gamlor.info/nowhere"
{:headers {"Authorization" "Bearer open-sesame"}})
=> Execution error (ExceptionInfo) at babashka.http-client.interceptors/fn (interceptors.clj:251).
Exceptional status code: 404Not much, but you can ask for the full error information in the REPL:
루트 없는 포트 80/443 사용하기 방법: 방화벽으로
(이 글은 영어로 또 있어요.)
유닉스는 루트만 1024이한 포트를 사용할 수 있어요. 근데 인터넷 듣기 위험해요: 이 프러그램이 보안 취약 있으면 나쁜 넘들이 루트 권한을 받을 수 있어요. 그래서 비루트로 1024이한 포트를 사용한 방법 필요해요.
잘 아는 방법은:
`setuid`과 `setgid`로 포트 바인딩 하기 후에 일반 사용자 바꼬기 보텅 권한 해제해요.
자근 유틸리티
privbind는 모든 프로그램 1024이한 포트를 사용 권한으로 비루트로 시작해요.리눅스의
CAP_NET_BIND_SERVICE capability프로그램에게 권한을 해요.Docker아니면 다른 컨테이너는 포트과 사용자 옵션이 있어요.
Using Port 80/443 without root: Via the Firewall
In Unix/Linux only the root can use ports below 1024. However, listening to the internet is dangerous: If that program has a vulnerability, the bad guys can get root permissions. Therefore, you want to use a way to run the app without root and listen to the below 1024 ports.
There are well known methods:
Use
setuidandsetgidto change the user after binding to the ports.Using a small utility like ttps://github.com/JiriHorky/privbind[
privbind] to launch any program non-root but allow it to bind ports.In Linux, grant the
CAP_NET_BIND_SERVICE capabilityto a program.Use
Dockeror other container systems to bind the port and run under a different user.
OutOfMemoryError: Exit Immediately
TLDR: I highly recommend to use -XX:+ExitOnOutOfMemoryError or -XX:+CrashOnOutOfMemoryError
for Java apps, combined with -XX:HeapDumpPath=path-to-crash-dumps -XX:+HeapDumpOnOutOfMemoryError.
This stops the JVM from trying to limp on when it runs out of memory and provides dumps to analyze
the issue later.




