2019년 3월 19일 화요일

커서에 한영 상태를 표시하는 작은 도구 IMECursor v0.71

참고한 사이트는 여기이다. 타자를 치기 시작하다가 백스페이스 키를 눌러서 잘못 입력된 글자를 지운 다음 [한/영] 전환키를 누를 필요가 없다.


그런데 실제 작동을 해 보면 알겠지만, '가' 또는 'a'가 작게 표시되는 것은 마우스 포인터이지 커서 자체는 아니다. 텍스트를 입력 가능한 위치에 마우스 포인터를 올리면 현재의 한/영 상태가 표시되는 것이다.

마우스 커서? 다음의 것을 마우스 커서라고도 부르는 것 같다. 마우스 포인터가 제대로 된 명칭이라고 생각했는데 영어권에서도 이런 표현을 사용한다.


아주 간단하지만 유용한 프로그램을 알게 되어 즐겁다. 기왕이면 텍스트가 입력되는 커서를 따라 이동하면서 한/영 표시가 나오면 좋을 것이다.

2019년 3월 13일 수요일

도마 위에 진공관 앰프 꾸미기

식재료를 다듬기 위해 칼질을 할 때 밑에 받치는 물건이 도마다. 순 우리말로서, 체조 경기 종목 중 하나인 도마(跳馬)와는 아무런 상관이 없다.

나무판은 앰프 자작을 할 때 부품들을 늘어놓는 용도로 흔히 쓰인다. 하지만 일부러 나무판을 재단해 오려면 상당히 귀찮은 일이라서, 주변에서 흔히 구할 수 있는 재료로 대체하는 일이 많다. 그때 쓰이는 것이 바로 나무로 만든 도마다. 요즘은 다이소에 가면 매우 저렴한 가격에 도마를 살 수 있다.

아파트의 폐기물 내놓는 곳에서 제법 쓸만한 도마를 구하게 되어 여기에 43 오극관 싱글 앰프를 올리기로 하였다. 목공을 잘 모르기 때문에 어떤 재질의 나무인지는 모른다. 나사못이 술술 들어가는 것으로 보아 굉장히 무른 재질임을 알 수 있다.


R코어 출력 트랜스의 받침대에 각재를 덧댄 다음에 공구통에서 굴러다니던 작은 경첩을 달아서 도마에 고정하였다. 경첩의 움직임을 이용하려는 것은 전혀 아니고, 다만 ㄱ자 꺾쇠를 대신한 것이다. 두 개의 코어에 케이블타이를 가로질러 묶어서 도마를 기울여도 트랜스가 쏟아지지 않게 하였다.


진공관 바로 곁에서 나사못을 박으려고 스크류 드라이버를 쓸 때에는 주의를 해야 되겠다. 자꾸 진공관을 드라이버로 툭툭 건드리게 되니 말이다. 비싼 진공관은 아니지만 깨지면 아깝다. 내가 소유한 모든 물건 중에 가장 오래된 것이니(1940년대 제조)...


소켓 가이드와 러그판 등을 사용해서 도마 위에 멋지게 재배선을 할까 여러날 고민하였지만 일단은 이대로 두기로 하였다. 심지어 출력 트랜스에 케이스를 씌우려던 생각도 접었다. 현 상태로도 소리는 매우 잘 나고, 첫 작품을 원형 그대로 보존하는 것이 의미도 있기 때문이다. 대신 6N1+6P1 싱글 앰프용 출력 트랜스(아마도 EI 코어를 쓴 기성품)은 따로 구입을 하는 것이 좋겠다. 트랜스 하나를 여러 앰프에 바꾸어 가면서 듣는 것도 한계가 있지 않은가. R코어에 다시 한번 에나멜선을 감으려니 엄두가 나질 않는다. 57 코어(싱글 5 와트) 정도를 염두에 두고 있다.

도마를 사용하여 전기기타를 만드는 사람도 있다. 물론 따라서 할 엄두는 나지 않는다.


출처: https://www.instructables.com/id/Cutting-Board-Electric-Guitar/

[Bash, shell] 구분자가 포함된 문자열의 조작 기법

예전에는 늘 Perl을 써서 작업하던 것을 shell 수준에서 구현하기 위해 노력하고 있다. 제목에서 밝힌 문자열은 사실은 파일의 제목을 의미한다. 오늘 글을 쓰는 목적은 NCBI에서 다운로드한 파일을 하나 가득 들어 놓고는 제목을 한꺼번에 변경하기 위한 방법을 정리하기 위함이다. 특정 균주(Paenibacillus polymyxa E681)에 대한 RefSeq assembly 다운로드 사이트(링크)를 방문해 보자.


파일의 이름은 '필드1_필드2_필드3_..' 형태이다. 여기서 구분자는 밑줄 문자(_, under)이다. 위치를 기준으로 하여 원하는 필드만 조합하여 파일명을 단순하게 바꾸는 사례를 알아보자. NCBI에서 유전체 정보를 일괄적으로 다운로드하여 이름을 바꾸는 방법은 나의 위키 페이지(링크)에 상세히 설명하였다. 여기에 나온대로 따라서 하면 다음과 같은 형태의 파일을 얻는다.

Rhodococcus_sp._H-CA8f_GCA_002501585.1.fna

때로는 빨갛게 표시한 부분만을 떼어서 파일명으로 삼고 싶을 때가 있다. iTOL 서버를 쓰는 경우에는 단순하게 표시된 자료로 만든 newick tree file을 업로드한 다음 실제로 표시할 label을 별도로 제공하는 것이 더 합리적이다.

그렇다면 위에서 보인 파일명을 구분자(_)로 나눈 뒤 5, 6번째 필드를 붙인 것으로 바꾸면 된다. 이때 유용한 명령어는 cut이다.

$ ls *fna | while read F
> do
> mv $F $(cut -d'_' -f5,6 <<<$F)
> done

꺾쇠 세 개가 연달아 표시된 줄이 약간 난해한데, 어쨌든 잘 작동은 한다. 그러나 이 방법은 필드의 수가 엄격하게 고정된 경우에 한하여 쓸 수 있다. 파일명의 세번째 필드, 그러니까 strain 명에 해당하는 곳에 또 밑줄이 들어간 경우가 종종 있다. 'ATCC 842'와 같이 원래는 공백이지만 파일명에 공백을 넣는 것이 별로 바람직하지 않기 때문에 밑줄을 추가적으로 넣게 된 것이다. 이러한 상황에서는 '구분자를 떼어낸 다음 몇 번째 필드를 취하라' 하는 식으로는 원하는 결과를 얻기 어렵다. 차라리 '앞에서 처음, 혹은 뒤에서 처음'하는 방법이 더 낫다. 이때 BASH의 문자열 조작 기법이 매우 유용하게 떠오른다.

상세하게 공부를 하려면 Advanced Bash-Scripting Guide의 제10장 Manipulating Variables를 숙독하라. 나는 여기에서 꼭 필요한 부분만을 골라서 설명하겠다. 다음의 예제만 잘 보면 뭐가 어떻게 돌아가는지를 잘 알 수 있다. #와 %는 앞 또는 뒤로부터 시작하는 매치를 삭제하는 것이다. *를 쓰지 않고 ${NAME#_}라고만 쓰면 앞부분부터 시작해서 첫번째 '_'가 나오는 곳까지를 삭제할 것만 강렬한 욕구가 느껴지지만 이건 오해다(사실 이것 때문에 혼동을 많이 했다). 반드시 *_라고 써야 하고, #를 사용하는 경우에는 _*라고 해야 한다. #와 ##, %와 %%의 차이는 shortest(하나) or longest match(둘)를 의미하는 것이다.

$  NAME=abc_def_123_456.txt
$ echo ${NAME#*_}
def_123_456.txt
$ echo ${NAME##*_}
456.txt
$ echo ${NAME%_*}
abc_def_123
$ echo ${NAME%%_*}
abc
$ echo ${NAME/_/XYZ}
abcXYZdef_123_456.txt
$ echo ${NAME/_*/}
abc
$ echo ${NAME/*_/}
456.txt

그러면 파일명을 구성하는 필드의 수가 일정하지 않다 하더라도 맨 뒷부분을 이용하여 assembly accession만을 떼어내는 것이 가능하다.

$ ls *fna | while read F
> do
> mv $F GCA_${F##*_}
> done

변수 F의 앞에서부터 시작하여 *_를 longest match로 삭제하면 ...GCA_의 나머지 부분이 남는다. 이렇게 얻은 값의 앞에 다시 GCA_를 붙이면 된다. 혹은 while-do 블록 내의 명령어를 mv $F GCA_${F#*_GCA_}으로 써도 결과는 같다. _GCA_는 변수 F의 값에서 단 한번만 존재하므로(철저한 사람이라면 균주명에 앞뒤에 공백을 포함하는 GCA라는 이름이 들어있지는 않은지 확인을 해 보겠지만) #를 한 번만 써도 된다.

대충 써 왔던 기법이 이제 좀 정히가 되었다.

2019년 3월 8일 금요일

밀린 윈도우즈 업데이트 - 업데이트가 되지 않을 때 해결 방법

3월 8일이 되어서야 3월의 첫 포스팅을 하게 되었다. 무엇인가 무척 바쁘거나, 심경의 변화가 있거나(개인적인 글을 인터넷에 올리는 것에 대해서 회의가 들기 시작했다거나) 등등의 핑계를 댈 수 있겠다.

언제부턴가 Windows Update가 되지 않기 시작하였다. 업데이트의 의미는 새롭고 신기한 기능을 제공하는 것도 있지만 그보다는 보안을 향상시키는 것에 있다.

도대체 문제가 무엇일까? 구글링을 하여 이런 메시지가 나올 때 대처하는 방법을 찾아보았다. 마이크로소프트 커뮤니티에서 제공하는 공식적인 해결책을 하나 찾았다.

Windows Update 확인을 할 수 없습니다

이대로 하나씩 따라서 하면 몇 달 동안 밀린 업데이트를 할 수 있으리라 생각을 했다. 그런데 세번째 단계에서 C: - WINDOWS - SoftwareDistribution 폴더의 이름을 변경할 수가 없는 것이었다. 이건 또 왜 이런가?

새로 발견한 문제를 해결하기 위해 영문으로 검색을 해 보았다.

cannot Rename SoftwareDistribution folder error "the action can't be completed because the folder or a file in it is open in another program"

될까? 여기에 나온대로 따라서 했더니 SoftwareDistribution과 softwaredostribution.old의 두 가지 폴더가 보인다. 무슨 원리인지는 모르겠으나 SoftwareDistribution 폴더는 계속 새로 만들어진다는 생각이 들었다. 여기까지 한 다음 다시 첫번째 사이트의 지시대로 나머지 과정을 진행한 뒤 윈도우즈 업데이트를 실행하였다.

20개의 업데이트가 나를 기다리고 있다! 다행이다. 밀린 숙제를 하러 공책을 펼친 기분이다. 이것이 다 끝나면 퇴근을 해야 되겠다.