홈페이지에 드디어 SSL 인증서를 달았습니다! 


https://kyouko.moe


티스토리 블로그에도 달고 싶은데 지원을 안하네요... SSL 인증서 좀 지원해주면 좋으려만


좀 더 자세한 얘기는 호스팅을 bluehost에서 linode로 옮겼습니다. 처음에 서버 세팅에 관한 지식이 없을때 php로 사이트를 뚝딱뚝딱 만든것도 있고, 가격이 월 10$라서 샀었는데, 지금은 linode하나 올려서 쓰는게 좀 더 마음이 편하네요. 가장 싼 플랜이 한 달 5$ 에요. 역시 루트권한 있으니까 마음이 편해요.

예전에는 블루호스트가 인증서 적용하는게 유료라서 못 달았는데, 지금은 letsencrypt로 인증서를 받아서 적용했습니다.


호스팅이 이것저것 난잡해지기도 해서, 아예 flask기반으로 웹을 재구성 하고 있는데 아직 옮기지 못한게 있네요.


하나는 Musicplayer인데, Youtube Red를 쓰니까 별로 쓸 일이 없어지는것 같기도 하네요.

다른건, 사람들에게 링크를 줄 때 잡다하게 파일들을 올리고 그걸 주는 방식으로 문제를 만들었는데, 이것들은 지금 살려둬야 할지 말아야 할지 모르겠는 링크도 많아서 일단은 안 살려 뒀습니다...


사실 최근에 트래픽 부담이 꽤나 있는데 linode도 한달정도 써보고 트래픽 부담이 있으면 여기만 따로 옮기는 방식을 쓰든가 여러가지 조치를 취해야 할 것 같네요.

  1. SSL 2018.07.29 09:22 신고

    클라우드 플레어를 이용하면 티스토리에도 인증서를 붙이는게 가능한걸로 알아요ㅎㅎ

32bit의 (부호 없는)숫자가 할 수 있는 것을 생각해 보자. 하나는 0부터 4294967295까지의 수를 표현할 수 있다. 이것은 32비트 자료형 정수(int32_t)가 할 수 있는 일이다. 또 다른 일은 0부터 31까지의 숫자로 이루어진 "집합"을 표현할 수 있다는 것이다. 우리는 이 숫자를 집합으로 사용하는 것에 대해서 고찰해 보려고 한다.



집합의 비트 표기 방법


우리는 어떤 수를 이진수로 표현할 수 있다. 그러면, 20, 21, ..., 2n자리에 각각 0이나 1이라는 수가 있을 것이다. 2n의 자리가 1이면, n이라는 원소가 있는것이고, 만약 아니면 없는 것이다. 예를들면, 9는, 2진수로 표현하면 1001이고, 이것은 {0, 3}이라는 집합을 나타내는 것이다. 이 방법을 쓰면, 32비트 자료형 정수를, {0, 1, ..., 31}의 부분집합에 하나씩 대응 시킬 수 있다.




비트연산과 집합연산 표기


집합에서 가장 기본적인 연산은, 합집합, 교집합, 차집합, 여집합 등등일 것이다. 우리는 합집합, 교집합, 여집합이 각각 | (bitwise-or, 둘 중 하나라도 1이면, 결과도 1이다.), & (bitwise-and, 둘 다 1인 경우에만, 결과가 1이다.), ~ (bitwise-not, 결과의 0, 1이 바뀐다.) 로 표현됨을 알 수 있다. 


그리고 어떤 숫자 n만 들어있는 집합은, 2n이 {n}에 대응되고, <<연산으로 만들 수 있다.


우리는 이것들을 조합해서여러가지의 결과들을 정리할 수 있다. (집합 A는 비트 a에 대응된다.)




이렇게 숫자를 비트로 표시하면 빠른 속도로 다양하게 사용할 수 있는 여러 특징들을 가진다. 예를들면, 어떤 배열의 모든 subset에 대해 연산을 하는 방법은 다음과 같다.


for(int i=0; i<(1<<n); ++i)

{

for(int j=0; j<n; ++j)

{

printf("{");

if(i&(1<<j))

printf("%d, ", j);

printf("}\n");

}

}

위 코드는, 모든 {0, 1, ..., n-1} 부분집합을 전부다 출력하는 코드이다. printf를 바꿔서, 추가적인 연산을 할 수 있도록 바꿀 수 있다.




그리고 여러가지 bit manipulation들이 있다. 비트연산을 가지고 재미있는 일들을 할 수 있다. 가장 마지막 비트를 뽑아내는 연산, 모든 크기 x인 집합들을 순회하는 방법 등등 여러가지 manipluation이 있다. 재밌는 hack들이 있는 링크와 자주 쓰는 핵들을 몇개 소개하고 글을 마치겠다.


//x의 가장 마지막 비트를 계산함

x&-x;


//v랑 크기가 같고, 사전순으로 다음에 오는 집합을 찾음

unsigned int t = (v | (v - 1)) + 1; w = t | ((((t & -t) / (v & -v)) >> 1) - 1);


//x의 모든 부분집합을 순회함.

for(int i=0; i=(i-x)&x; )


//x의 모든 부분집합을 역순으로 순회함

for(int i=x; i>0; i=(i-1)&x)


//gcc내장함수 이용, x에 있는 비트의 갯수를 반환함

__builtin_popcount(x); //x가 long long type이면 __builtin_popcountll(x);


//gcc내장함수 이용, x의 앞에 있는 0의 갯수를 셈 (x의 가장 큰 원소 = log2(x) = 31-clz(x))

__builtin_clz(x);


//gcc내장함수 이용, x의 뒤에 있는 0의 갯수를 셈 (x의 가장 작은 원소를 가져 옴, x&-x는 1<<__builtin_ctz(x)과 같음)

__builtin_ctz(x);

다양한 비트연산에 관련된 것들이 들어 있는 링크: https://graphics.stanford.edu/~seander/bithacks.html


https://github.com/koosaga/DeobureoMinkyuParty


나는 내 코드나 내 자료들을 퍼블릭하게 올리는게 이롭다고 생각해서 자료들을 계속 업로드 하자고 제안을 했었다.


팀노트를 깃헙에 올리는게 어떻냐고 물어봤고 팀원들이 동의를 했다. 그래서 대전 리저널이 끝난 이후에 올리자는 얘기가 있었고 결국 사과가 팀노트를 업로드 했다. 사실 내가 좀 주도적으로 하는 일이여야 하는게 맞지 않았나 싶다. MolaMola 팀이나 Please Open Testdata 같은 팀도 팀노트를 열었기 때문에, 다른 팀노트의 좋은 점을 받아들이고 개선할 부분을 서로 개선하고 보완하는 방향으로 서로 팀노트를 잘 만들어 갔으면 좋겠다.


사실 지금 팀노트가 굉장히 난해하고 PS에서 사용하는 지식들의 끝단을 다루는 것 같다. 그래서 더 다양한 코드들을 추가하고, 입맛에 맞게 팀노트를 조절해가면서 쓸 수 있게 다양한 레퍼런스 코드들을 써 보려고 한다. 예를들면 기본적인 알고리즘인 Dijkstra나 Extended Euclidean Algorithm 같은 것들은 팀원이 다 짤 줄 안다고 작성을 안했고... 팀원이 알지만 디버깅할 때 버그가 많이 생기는 알고리즘이나, 상수가 매우 작은 (Locality to the rescue!) 알고리즘들이 들어있다. 혹은 공식들을 그냥 블랙박스로 사용하는 정도이다.


공개할 용도의 팀노트를 정비하는 일도 결국에는 해야 할 일인데, 언제부터 해야할 지 모르겠다. 일단 다양한 예제들을 추가하는 것으로 부터 시작해야겠다.

+ Recent posts