2020-10-26

구글 검색어 중에 결과를 보여주는 데에 제일 긴 시간이 걸리는 검색어는 무엇일까?

 

0.     Quora에게 물어봐서

l  What does the number of seconds written on a Google search signify?

l  What are the longest and shortest times taken by the Google server to process search query in its database?

l  What Google query takes the longest to calculate?

l  What is the longest Google search?

l  What are some Google searches that give exactly 1 search result?

l  What is the shortest Google search that gives only one result?

l  What is the significance of 25,270,000,000, the maximum number of results returned by a Google search?

l  What is the longest search query on Google that will actually return results?

l  What is the slowest Google query?

10개의 질문에 달린 댓글들을 종합해보았다.

 

 

1.    

구글은 유저들이 검색어를 입력하기 훨씬 전부터 검색 결과를 제공하기 위한 작업을 시작한다. 구글은 전세계 웹사이트에서 정보를 모아 이를 검색 색인에 정리한다. 그렇게 만들어진 색인은 100,000,000 기가바이트가 넘는다. 이조차도 전체 인터넷의 4% 가량밖에 되지 않는다는 추산도 있다(, 2014). 이렇게 수집한 웹페이지들을 분석해서 키워드별로 정리한다. 이제 유저가 검색어를 입력하면 적절한 웹페이지를 순서대로 나열해서 결과를 반환해준다.

이 과정들을 수행하는 소프트웨어를 각각 웹 크롤러(Web Crawler)’, 인덱서(Indexer)’, 쿼리 프로세서(Query Processor)’라고 한다. 모으고, 정리하고, 검색 결과를 적절히 반환해주는 로봇(bot)들이다.

 

 

2.     그렇다면 검색결과 약 118,000,000(0.33)’는 진짜 1억 개의 웹페이지를 보여줄까?

검색 결과와 함께 자랑하는 짧은 검색 시간, 그리고 엄청난 수의 검색결과. 그렇다면 결과 페이지를 계속 넘기면 1억 개의 웹페이지를 전부 볼 수 있을까? 그 대답은 No. 구글 검색 결과 개수는 실제 웹페이지의 개수를 나타내는 것이 아니라, 가장 높은 연관성을 수십 개만 표시해주고, 나머지는 생략하면서 추산한 결과 개수를 보여준다. , 저 숫자는 실제 웹페이지의 개수가 아니라 계산된 값이라는 뜻.

 


(개인적인 용도로 Google Drive에 저장해둔 문서크롬 검색주소창에 뜨는 모습)

 

구글은 단일 인덱스만을 가지고 있는 것이 아니다. 구글은 뉴스와 관련된 것을 검색하면 웹과 뉴스 결과를 모두 반환해준다. 이외에도 Google , , Gamil Photos 등을 지원한다.

 

 

3.     정확히 하나의 검색 결과만 보여주는 검색어가 있을까?

그것은 바로 에서 하기”이다. 지난달에 작성한 이 블로그의 글 하나가 달랑 뜬다. 어떻게 이런 결과가 가능할까?

구글로 뻘짓 좀 해봤다는 사람이라면 많이 봤을 것이다. 구글에서 검색할 때 쌍따옴표(“)로 감싸서 검색하면 검색어와 정확하게 일치하는 결과만 볼 수 있다. 전 세계에서 해당 문장을 사용한 사람은 나밖에 없다! 어디 논문 표절 탐지에서도 사용될 것 같은 기능이긴 하지만, 의외로 이 기능은 정말 자주 쓰이니 꼭 알아둘 필요가 있다.

같은 원리로 정확히 하나의 검색 결과만 보여주는 검색어는 정말 많이 존재할 수 있다. 이번 기회에 구글의 검색엔진에 나만의 문장을 남겨보는 것도 좋을 것 같다.

 

그런 특이한 경우가 아닌데도 과가 도 있다. 앞의 링크를 클릭하면 결과를 볼 수 있다. 20201026일 기준으로 5개의 결과가 뜨는데, google.co.kr이 아닌 google.com에서 언어를 영어로 놓고 검색해야 볼 수 있다.

 

 

4.     구글 검색어 중 가장 느리게 결과 페이지를 보여주는 검색어는 무엇일까?

구글이 350 ms 이상의 시간이 걸리는 결과를 반환하는 경우는 흔치 않다. 특별하게 느린 검색어를 찾고 싶다면 일반적인 단어같은 것들을 boolean 연산자(OR같은 거)를 사용해서 휴리스틱이 비효율적이도록 만드는 검색어를 집어넣을 수 있을 것이다예를 들어서 이런 식이다:

the OR google OR a OR 12345 -the -google -a

처음에 검색할 때에만 가장 느리게 작동하고, 새로고침을 하게 되면 캐시를 읽어오게 되므로 다시 결과 반환 속도가 빨라지게 된다. 그래서 12345 부분을 바꿔서 이런저런 숫자를 넣어본다거나, theOR google OR a OR 12345 -the -google -a 99999..999999999 같이 기형적인 형태로 비틀어서 검색을 실행해보아도 좋다.

 

이 한 번의 검색으로 구글의 컴퓨터를 3.15 동안 사용할 수 있었다. 하지만 곧바로 재검색했을 때에는 캐시가 불러와져서 0.37라는 빠른 시간 내에 결과 페이지를 반환 받았다.

 

 

5.     가장 많은 결과를 반환하는 검색어는 무엇일까?

바로 “a”. 무려 2527000천만 개의 결과가 있다고 알려준다. 얼마나 유명한지 urban dictionary에 등재되어 있기도 하다. 이외에도 the, and, inurl:http (URLhttp가 들어가 있는 것을 찾아라), I, www 등이 있다. 이외도 많으니 찾아보는 것도 재밌을 것 같다.

 

 

Tumor-infiltrating lymphocytes 뜻


0.     Tumor-infiltrating lymphocytes가 뭘까

Tumor: . Infiltrating: 침투. Lymphocyte: 림프구. 근데 세 단어를 합쳐놓으니 무슨 뜻인지 모르겠다. 에서 아래와 같이 설명한다.

 

“Tumor-infiltrating lymphocytes are white blood cells that have left the bloodstream and migrated towards a tumor.”
백혈구 중에서 혈액의 흐름(bloodstream)을 떠나서 암으로 이동하는 림프구들을 말한다

이러한 림프구에는 T 세포와 B 세포도 포함되며, 그 하위에 단핵구와 다핵성 면역 세포(T cells, B cells, 자연 살해 세포(NK 세포; natural killer cells), 대식세포(macrophages), 호중구(neutrophils), 수지상 세포(dendritic cells), 비만 세포(mast cells), 호산구(eosinophils), 호염기성구(basophils))들이 있다. 이러한 면역 세포들이 비정상적이게 많다면 종양 유형 및 단계에 따라 질병 예후와 관련이 있을 수 있다.

 

암을 인식하고 제거하는 단계(elimination phase)에서 CTL’sNK 세포 같은 면역반응 세포들은 수지상 세포(dendritics)CD4+ T-cells의 도움을 받아 암을 인식하고 제거하는 역할을 수행한다. 잘 기억이 나지 않는다면 일반생물학 면역 파트를 복습하자

 

 

1.     Infiltrating cancer

위와 같은 관점으로 볼 때 infiltrating은 조직의 레이어를 넘어서 암이 전파되는 것을 지칭한다. 반면 건강한 조직들로 수평적이게 퍼져나가는 과정을 invasion이라고 표현하기도 한다. 헷갈릴 수 있으니 아래의 그림들을 참조하였다.

 

암의 전파 단계를 지칭하는 단어를 정리하자면 다음과 같다.

(사진 출처: ANNALS of THE NEW YORK ACADEMY OF SCIENCES)

l  Initiation (개시)이미 성숙한 stem cell에서 유전자의 돌연변이가 발생

l  Promotion (촉진)개시된 세포가 분화 자극을 받아 복제되기 시작

l  Propression (진행)초기에 발생한 암세포가 진화되지 않고 살아남음

 

(사진 출처: Molecular Oncology)

위의 과정에서 invasionmetastasis가 비슷한 뜻으로 보일 수 있다. 이 두 가지의 차이는 다음과 같다.

l  Invasion (침투): 암세포가 인접한 조직으로 확장하고 침투해 들어가는 것을 말함. 국소적으로 일어나는 영역 침범이라서 시간이 지나면 곧 metastases로 진화한다.

l  Metastasis (전이): 암세포가 림프계와 혈관으로 침투신체의 다른 장기로 퍼져나갈 수 있는 능력을 말한다(드랍쉽을 탔다고 생각하면 편하다). 이를 전이성 카스케이드(metastatic cascade)라고도 부르며, 이로 인해서 암세포가 최초에 발생한 부위로부터 벗어나 온 몸을 탐험할 수 있게 된다.

l  Proliferation (증식): 국소적으로 암세포 개체가 증가하는 것

l  Intravasation: 혈관을 뚫고 들어감

l  Extravasation: 혈관에서 튀어나와 다른 조직에 정착함

 

2.     그래서 TILs?

행동은 같지만 주체가 다르다. 줄여서 TIL이라고도 부르는 tumor-infiltrating lymphocytes는 혈관을 넘어서 암세포를 공격하는 림프구이다. 암세포가 혈관으로 넘어와 퍼지던 것처럼 림프구도 혈관을 타고 넘어와서 암세포를 인식하고 죽인다. 역할로서 보자면 invasion보단 metastasis와 기능이 비슷해보인다.


2020-10-14

PyCharm 들여쓰기 공백 4칸에서 2칸으로 바꾸기

 

0.     -

PEP 8에서 파이썬의 들여쓰기 공백은 4칸이 원칙이다. 하지만 tab 키와 공백 2칸 등등 들여쓰기 수준을 파이썬 코드 내에서 일정하게 유지시켜주기만 한다면 문제 없이 잘 작동한다. 하지만 파이썬 3부터 공백과 tab 키의 혼용은 허용되지 않는다.

 

1.     하지만 텐서플로우를 사용한다면

2으로 한다. 기본적으로 파이썬의 코딩 스타일을 그대로 따라가기 때문에 이거 외엔 모두 동일하게 작동한다. 텐서플로우에서 들여쓰기를 4칸으로 사용하는 것도 마찬가지로 허용된다.

 

2.     파이참에서 들여쓰기 공백 개수 바꾸는 방법

l  Ctrl + Alt + S를 눌러서 설정으로 진입

l  EditorCode StylePython 클릭

l  IndentContinuation indent를 각각 24로 조정


OBS 타임랩스 녹화


0. OBS에서 타임랩스를 하는 이유

OBS오픈소스 소프트웨어라서 라이선스로부터 자유롭게 사용할 수 있다. 여느 다른 프로 그램 들은 고화질/fps를 사용하는 데에 요금을 내라던가, 아이디를 만들라던가, 무겁다던가, Windows만 지원하는 등의 문제들이 있지만, OBS에는 그런거 없다. 조금만 배워두면 얼마든지 고급 기능까지도 사용할 수 있다는 매우 강력한 장점이 있어서, 많은 스트리머들이 선택하고 있는 소프트웨어이기도 하다.

OBS는 무료임에도 불구하고 많은 조작부를 지원하고 있고, 다양한 플러그인까지 지원한다는 강력한 장점이 있어서 널리 사용되고 있는 소프트웨어이다. 하지만 단점도 있다. 초보자가 사용하기엔 다소 어려울 수도 있는 유저 인터페이스(UI), 클라우드 백업을 지원 기능이 내장되어 있지 않기 때문에 녹화된 파일을 손수 관리해줘야 한다. 단점이라고 꼬집기에도 뭔가 애매하다. 없는 단점 만들어낸 느낌.

동영상 녹화가 주 기능이다보니 타임랩스도 지원하지 않을까 싶었는데, 그건 또 안 된단다. 그래서 찾아보았다. 이 글은 레딧에서 아이디어를 얻고, OBS 포럼에서 방법을 배워서 그대로 적용한 것임을 밝힌다.

 

1. 프레임 계산법

나는 1시간 분량10초로 빠르게 표현하는 타임랩스를 만들고 싶다. 그리고 영상은 60 fps의 프레임레이트를 가진다고 가정해보자.

그렇다면 타임랩스 영상의 10초는 60 fps * 10 seconds = 600 frames가 된다. 1시간은 3600초이므로 3600 seconds / 10 seconds = 360이다. 이 값이 바로 speedup factor이다.

이 계산식이 의미하는 것은 ‘1시간 분량이 600 프레임 내에 들어가게 된다는 것이다. 이보다 더 많은 프레임을 녹화한들, 어차피 남는 프레임들은 모두 떨어져 나가므로, 애초부터 그 이상 녹화할 필요가 없다.

, 3600초당 600 frames. 그러면 600 frames / 3600 seconds = 1/6 fps이다. 이는 1초에 1/6장의 사진을 찍는 것과 같으므로, 6초당 한 프레임을 녹화하면 된다는 뜻이다.

 

2. OBS 설정 방법

OBS에서 이 fps설정하려면 설정 비디오 분수 FPS 으로 이동해 FPS 값을 수정해주어야 한다. 분모에 6, 분자에 1을 입력하면 1/6 fps를 입력할 수 있다.


이 설정으로 녹화한 비디오는 일반적인 미디어 플레이어에서 평범하게 1시간짜리 영상으로 저장되게 된다. 또한, 재생해보면 슬라이드쇼를 보듯이 6초마다 영상이 갱신되는 것을 볼 수 있다. 하지만 파일 자체의 용량은 매우 작다. 1시간을 녹화했지만 고작 600 frames에 불과하기 때문이다. 근데 왜 나의 영상은 용량이 이렇게 클까.. 그래서 이에 관한 여러 테스트를 해본 결과, 그냥 납득하고 비트레이트를 조정하기로 마음 먹었다..

 

<실험>

그러면 데이터율 제어를 CBR로 하지 않고 다른 방식으로 해보면 어떨까? 데이터율 제어에는 아래와 같은 방식이 있다.(출처)(아카이브) 자세한 내용을 다루는 블로그도 있다.

l  CBR(Constant Bit Rate): 고정 비트율. 일정한 비트레이트를 유지.

l  ABR(Available Bit Rate): 비트율. 네트워크 상태에 따라서 비트레이트를 조절.

l  VBR(Variable Bit Rate): 비트율. 정적인 곳은 적은 비트레이트를, 움직임이 격한 곳은 많은 비트레이트를 할당.

l  CRF(Constant Rate Factor): 값이 높을수록 용량이 작고 화질이 열화되며, 값이 낮을수록 용량이 크지만 화질도 좋다.

그러하니 이번에는 CBR이 아니라 VBR로 해보자.

설정은 다음과 같다:
OBS
버전: 25.0.8 (64 bit)
해상도: 3840 * 1200 (4,608,000 픽셀)
공통 FPS : 24 NTSC
비트레이트: 5000 Kbps
최대 비트레이트: 8000 Kbps
인코더: NVIDIA NVENC H.264

듀얼모니터 전체를 녹화하느라 이런 기형적인 해상도가 나왔다. 용량은 1분당 5~6MB의 기염을 토했다. 2560 * 1440 = 3,686,400 픽셀이 1분에 45~135 MB를 차지한다는 것과 비교하면, 그보다 많은 픽셀(3840 * 1200 = 4,608,000 픽셀)로 이 정도 용량이 나온다는 점은 가히 매력적인 압축력이 아닐 수 없다.


(출처: Android Authority)

 

여하튼 녹화된 파일의 용량 문제는 여기에서 정리하고, 녹화된 영상에서 타임랩스를 만드는 과정에 대해 좀 더 알아봐야겠다.

</실험>

 

3. 주의사항

녹화를 중단하는 데에 시간이 오래 걸리는 이유

녹화 중단을 클릭했더니 녹화를 중단합니다….’라고 뜨기만 하고 중단이 되지 않는다. 이 현상은 OBS가 매 20 frames를 녹화한 다음에서야 정지할 수 있기 때문이다. 예를 들어 위의 설정에서 정지 버튼을 누르는 경우엔, 19 frames가 남아 19 * 6 = 114초가 지나서야 완전하게 OBS가 녹화를 중단한다. 강제로 종료하려 하면 파일이 손상될 수 있으니 주의해야 한다.

소스 속성 변경에도 시간이 소요되는 이유

또한 fps 값을 입력해주면 OBS의 미리보기 기능에서도 1/6 fps로 작동한다. 6초마다 이미지 하나를 보는 것과 같이 출력되게 된다. 소스 설정도 슬라이드쇼와 비슷하며, 소스 속성의 변경 사항을 저장하는 데에도 또한 6초가 소요될 수 있다.

 

4. ffmpeg로 타임랩스 만들기

녹화가 끝난 다음에는 비디오 편집기로 fps 값을 바꿔주어 frame rate를 우리가 자주 사용하는 정도로 끌어올린다. 여기에서 사용되는 프로그램이 ffmpeg이다. 아마 라즈베리파이로 영상 처리를 해본 사람이라면 한 번쯤은 꼭 들어봤을 프로그램이다. 그래픽 유저 인터페이스(GUI)가 없고 오직 CLI (Command-line interface)에서 작동하므로, 이 기회에 명령어 입력창과 친해져보자.

 

설치 방법과 기본적인 사용법은 아래의 블로그를 참조하는 것으로 대신한다.

l  컴맹이 알려주는 ffmpeg 사용법

l  윈도우 10에서 ffmpeg 사용하기

 

여기에선 윈도우 기준으로 설명하겠지만, ffmpegcross-platform software기 때문에 타 OS에서도 동일하게 작동하므로 부담 갖지 않아도 된다.




사용한 명령어는 아래와 같다.

ffmpeg -i "input.mkv" -filter:v "setpts=PTS/360" -an -r 60 timelapse.mkv

위의 사진에서 일부 숫자가 다르긴 하지만, 이는 개인의 사용 목적에 따라 변경할 수 있다. setpts filter에서 presentation timestamp (PTS)를 매 1/360 프레임마다 넣을 수 있다. 이 옵션으로 영상이 360배 빠르게 재생되는 것이다. 이는 위에서 계산한 speedup factor를 여기에 입력한다.

-an 옵션은 오디오 트랙을 드랍(drop)하는 옵션이다.

-r 60 옵션은 출력될 영상이 60 fps임을 의미한다.

 

예시로 사용해본 원본파일은 10 fps, VBR, 30분 분량(18000 프레임)이며, 60%의 프레임이 담기고 40%의 프레임이 드랍 되었음을 알 수 있었다. 이전 영상은 120MB였으나 타임랩스 영상은 30MB에 그쳤다. 그래서 PTS 값을 6으로(, 6배 빠르게) 조절하였더니 프레임 드랍 없이 18,000 프레임이 모두 담긴 영상을 얻을 수 있었다. 시간은 30분에서 5(1/6)으로 단축됐고, 용량은 40MB였다.

다만, 아카이빙 용도로 사용하기엔 무리가 있을 것 같다. 30분짜리 영상을 인코딩하는 데에 18분이 걸렸다. 용량이 1/3배로 줄어들긴 했지만, 소모되는 CPU time이 너무 커서 메리트는 딱히 없다. 저장용량에 민감할 정도의 작업이 필요한 경우라면 녹화된 영상을 ffmpeg에 자동으로 input하는 스케줄러를 구성하는 편도 나쁘지 않을 것 같다(예를 들자면 CCTV 영상).

 

5. 추가 내용 (우분투에서 ffmpeg 사용)

똑같은 과정을 우분투 ffmpeg version 3.4.8에서 실행해보았다. 멀쩡하게 잘 실행되지만 를 만날 수도 있다.

Past duration 0.899986 too large

이는 inputoutputframe rate가 다를 때 동기화에서 생기는 일종의 동기화 에러라서 추가적인 명령어를 통해 없애줄 수 있긴 하지만, 무시해도 영상은 제대로 생성되므로 걱정하지 않아도 된다. 더 자세한 분석이 듣고 싶다면 을 참조하면 된다.