HTTP/1.1 HTTP/1.1을 정의한 최신 명세인 RFC 2616에 따르면, 흔히 알고 있는 것과는 달리 의외로 403 Forbidden은 권한(authorization)에 대한 에러가 아니다. 그냥 요청은 이해하지만 수행을 거절(refuse)하겠다는 의미이다. 그리고 또 의외로 400 Bad Request는 그냥 "요청이 잘못되었다"라는 의미가 아니라 "요청의 syntax가 잘못되어서 이해를 못하겠다"라는 의미를 담은 응답이다. 400 Bad Request에 대한 설명 (( http://tools.ietf.org/html/rfc2616#section-10.4.1 )) The request … 400 Bad Request와 403 Forbidden의 의미에 대해 계속 읽기
[작성자:] Yi EungJun
절대경로가 "//"로 시작하는 URL은 스펙 위반일까?
http://example.org//foo/bar 와 같이 path의 절대경로가 //로 시작하는 것은, URI의 정의에 대한 최신 명세인 RFC 3986을 위반한 것이다. 절대 경로는 "//"로 시작해서는 안된다. path-absolute ; begins with "/" but not "//" 그러나 HTML에서 <a href="//foo/bar">test</a> 와 같은 상대경로를 사용하는 것은 아무 문제가 없는데, 왜냐하면 HTML의 가장 최신 표준인 4.01(아직 5는 드래프트)은 RFC 3986보다 훨씬 오래된 RFC … 절대경로가 "//"로 시작하는 URL은 스펙 위반일까? 계속 읽기
HTTP/1.1의 Range 요청과 이를 활용한 Pagination
HTTP/1.1은 Range 요청을 지원한다. 클라이언트가 Range 헤더를 통해 어떤 리소스의 일부분만을 요청하면, 서버는 그 부분만을 반환하는 방식으로 동작한다. /file.zip를 100바이트에서 200바이트까지만 가져오는 클라이언트의 요청과 그에 대한 서버의 응답은 다음과 같다. 요청 GET /file.zip HTTP/1.1 Range: bytes=100-200 ... 응답 HTTP/1.1 206 Partial Content Content-Range: bytes 100-200/500 ... 위의 예에서 단위는 'bytes'를 사용했다. 사실 HTTP/1.1을 정의한 RFC … HTTP/1.1의 Range 요청과 이를 활용한 Pagination 계속 읽기
파일시스템별 timestamp 정밀도
대부분의 파일시스템은 파일들마다 생성시각, 최종변경시각, 최종접근시각을 항상 기록해 둔다. 그런데 이 시간들의 정밀도는 파일시스템별로 제각각이다. 위키백과를 뒤져서 정리해보았다. FAT는 최종변경시각은 2초 생성시각은 10밀리초 최종접근시각은 1일 삭제시각은 2초 HFS+는 1초 ext2,3도 1초 exFAT는 10밀리초 NTFS는 100나노초 ext4는 1나노초 ext4의 등장 이후 1나노초 수준의 정밀도를 요구하는 목소리가 많아지면서, 각 프로그래밍 언어 등에서도 이에 대한 지원이 들어가기 시작했다. … 파일시스템별 timestamp 정밀도 계속 읽기
근황
사실 여긴 근황같은 건 안 적는 블로그인데, 하도 글을 안 쓴지가 오래되서 마치 죽은 블로그처럼 보일까봐 하나 쓴다. 연말에 한해를 돌이켜 볼 때 "대체 이 땐 뭘 한거지?" 하고 궁금해할 미래의 나를 위한 것이기도 하다. 10월엔 1주일에 두개씩 글을 쓸 계획이었는데 그 절반수준밖에 쓰지 못했다. cousera 강의를 두개나 듣기 시작했기 때문이다. 컴파일러하고 스칼라. 11월에라도 좀 … 근황 계속 읽기
Git의 Staging Area는 어떤 점이 유용한가
Git에는 Staging Area라는 공간이 있다. 어떤 변경사항이 저장소에 커밋되기 전에, 반드시 거쳐야만 하는 중간단계이다. 다른 버전관리도구에는 이에 정확히 대응하는 것은 없다. 저장소가 추적하는(관심의 대상이 되는) 파일들의 목록을 유지하고, 그 파일들에 대한 메타데이터를 관리하는 것은 다른 저장소들도 하는 일이지만, Git 처럼 커밋될 예정인 파일의 내용들까지 기억하지는 않는다. 이 Staging Area의 존재는 처음 Git을 사용하는 입장에서는 그저 … Git의 Staging Area는 어떤 점이 유용한가 계속 읽기
Scala의 variant
Scala의 variant는 낯설고도 헷갈리기 쉬운 개념이다. 개념 정의 A <: B 일때 C[A] <: C[B] 라면, C는 covariant다. A <: B 일때 C[A] >: C[B] 라면, C는 contravariant다. 역도 성립한다. C가 covariant라면, A <: B 일때 C[A] <: C[B]이다. C가 contravariant라면, A <: B 일때 C[A] >: C[B]이다. 선언하는 법 C를 covariant로 선언하려면, class C[+A] … Scala의 variant 계속 읽기
Scala와 Haskell의 문법
Functional Progrmaming Principles in Scala 수업을 듣고 스터디를 하면서 배운 스칼라의 문법 및 언어 특징들을 Haskell과 비교하면서 적어본다. Type inference Scala는 함수를 정의할 때 return type이 무엇인지 생략해도 알아서 추론을 할 수 있다. scala> def double (x: Int) = x * 2 scala> :type double (x: Int)Int 하지만 formal parameter의 타입은 생략할 수 없다. scala> … Scala와 Haskell의 문법 계속 읽기
우분투에서 와이파이가 안될때
나는 맥북에어에 우분투를 사용한다. MacOSX를 쓰다가 수 개월 전에 넘어왔다. 우분투가 MacOSX보다 못한 점 중 하나가 와이파이가 잘 안된다는 점이다. 단순히 늦게 연결되는 정도가 아니라 아예 불통인 경우가 수두룩하다. 우분투에서 인터넷이 안될 때 시도해 볼 수 있는 몇가지 팁을 적어본다. 애플릿 재시작 무선 인터넷이 안되서 와이파이 애플릿에서 AP를 바꿔보려고 하는데 전혀 먹통인 경우가 있다. 아무리 … 우분투에서 와이파이가 안될때 계속 읽기
한달간 매일 블로깅을 해보고
9월 한달동안 하루도 빠지지 않고 이 블로그에 포스팅을 했다. (이 포스팅을 포함해서) 어디선가 좋은 프로그래머가 되기 위해서는 블로그를 성실하게 운영해보는 것이 좋다는 이야기를 들은 것이 계기이다. 성실하게 운영하려면 포스팅하는 습관을 들여야 할 것이고, 습관을 들이기 위해서는 하루도 빼놓지 않고 매일 하는 것이 가장 좋은 방법이라고 생각했다. 이 과정에서 문제점을 발견하기도 했지만, 목표로 한 기간 동안에는 … 한달간 매일 블로깅을 해보고 계속 읽기