응용프로그램2015. 6. 3. 00:04

*2016-1-21 추가: 이 글의 방법은 안 통합니다. AWS API를 이용하는 방법밖에 없습니다. 다음 글 등을 참고.

https://ctrlq.org/code/19965-amazon-api-with-google-script



스크립트 없이 구글 스프레드시트 importxml 함수만 이용해서 아마존 상품페이지의 각종 정보를 불러오는 방법임. 현재까지 국내외에 알려진 방법은 더는 통하지 않는다. 아마존이 페이지를 계속 바꾸고 내용을 동적으로 만들기 때문이 아닐까 추측.


알다시피 아마존 상품페이지는 다음과 같이 생겼고, 우리내가 원하는 정보는 빨간 부분, 그리고 저자 및 정가다.


http://www.amazon.com/The-Witcher-Collectors-Edition-Official/dp/0804162980/http://www.amazon.com/The-Witcher-Collectors-Edition-Official/dp/0804162980/


파폭 wdt 확장기능에서 보면 저곳의 dom 경로는 html>body#dp>div#a-page>div>div#detail-bullets이다. 크롬에서는 중간이 약간 다른데, 어쨌든 저기서 우클릭>Copy XPath 하면 //*[@id="detail-bullets"]라고 나올 거다.


크롬 개발자 도구크롬 개발자 도구


그럼 이 XPath 쿼리를 바로 importxml에 넣으면 되겠네? 야 신난다~ 싶겠지만... 처음부터 말했듯 안 된다는 게 문제다. 되면 내가 이걸 쓰고 있지도 않겠지...


importxml 실험-_-importxml 실험-_-


실험 결과, 위 dom 경로에 있는 div 중 importxml로 불러오는 게 가능한 건 최상위 div인 a-page뿐이었다. 직접 보면 알겠지만, 원하지 않는 정보와 엄청난 스크립트 들로 가득 차 있다. 위 페이지의 경우 len 해보니 375,299 글자가 나온다(...). 따라서 a-page에서 원하는 정보를 텍스트로 파싱해야 한다는 거... 절망적이다.


위안이 되는 점도 하나 있다. 메타 태그에 위 정보 중 일부가 들어 있고, 메타 태그는 importxml 함수가 잘 먹힌다.


메타 태그메타 태그


보다시피 저자, 도서명, 부제, ISBN, 분야 정보가 들어 있다. 항목들이 콜론과 스페이스(: )로 잘 구분된 title 태그를 importxml한 다음 split하면 된다.


다만, 이것조차 한계가 있다. 책마다 title 태그에 들어가는 항목이 다르다. -_- 이 책은 부제가 두 개인데, 어떤 책은 부제가 없다. 또 아마존의 서지정보 미흡으로 저자가 들어 있지 않은 경우도 있다. 즉 split을 일관되게 할 수가 없다. 어쩌라고!


게다가 나머지 정보, 즉 출판사, 출간일, 정가, 랭크도 메타 태그에는 없다. 얘네는 결국 a-page를 파싱해야 한다는 거...


메타 태그 및 나머지 정보를 무식하게 파싱하는 예제는 다음과 같다. 랭크 및 분야는 빠져 있다. 나중에 추가할지도.


https://docs.google.com/spreadsheets/d/1GEufB9BxulYIYwOGKZXhAFbC6-aTRmS1uUeDBN-M-fE/ (새창, 웹에 공개)


사용법: I열에 URL을 넣으면 해당 URL의 아마존 문서에서 도서명, 출판사, 출간일, 정가, ISBN을 가져와 B~H를 채운다.


B~H열에도 지저분한 수식이 들어 있지만, J열부터는 한층 지저분한 수식과 그나마 수식을 덜 복잡하게 하려고 넣은 문자열들을 볼 수 있다. 수식에 대한 설명은... 도저히 쓸 엄두가 안 남.


참고로, 일본 아마존 문서는 아마존닷컴과는 또 다르다. div들의 id나 class는 같지만 메타 태그 구분자도 다르고, importxml 결과도 다르다(어째서!? 심지어 가끔씩 내부 오류도 난다). 회사 파일에는 일본 아마존 정보 가져오는 수식을 따로 넣었는데, 정말 거지 같다.


미괄식으로 급 정리.

  1. 구글 스프레드시트에는 웹 문서 정보를 긁어오는 importxml이라는 멋진 함수가 있다.
  2. 근데 아마존 문서(본문)만은 제대로 긁어오지 못한다. WTF!
  3. 그래서 일부 정보는 메타 태그에서 가져오고, 나머지 정보는 무식하게 파싱해야 한다.
  4. 무식하게 파싱하는 방법은 위 구글 스프레드시트를 참고.


***수정: R, S열은 셀 높이가 커 스크롤이 불편해지므로 숨겨놨다. 구글 계정이 있는 사람은 '파일>사본 만들기'로 자기 사본을 만들면 해당 열을 볼 수 있다. 친절하게 수식을 직접 적자면, R2는 =importxml(I2,O2), S2는 =regexreplace(regexreplace(R2,"<.*?>",""),"\s{2,99}"," ")이다(정규표현식 좀 예쁘게 만들어줄 사람 없나?).




Posted by 필유
프로그래밍2015. 4. 8. 16:56

@2016-8-17 [Functional Reactive Programming]이라는 훌륭한 책의 설명을 덧붙인다. 이 책은 한빛미디어에서 번역되어 나올 예정이다.

FRP는 다양한 시각에서 바라볼 수 있다.

  • 널리 사용되는 관찰자 패턴(혹은 리스너나 콜백)의 대용품
  • 이벤트기반 로직을 코딩하는 합성 가능한 모듈식 방법
  • 다른 사고방식. 프로그램을 입력에 대한 응답 혹은 데이터의 흐름으로 표현한다.
  • 프로그램 상태(state) 관리에 질서를 가져다준다.
  • 뭔가 근본적인 것. 관찰자 패턴으로 문제를 해결하려던 사람이라면 누구나 결국에는 FRP를 창시하게 됐을 것이다.
  • 표준적인 프로그래밍 언어의 경량 라이브러리로 구현이 가능하다.
  • 상태유지(stateful) 로직에 사용하기 위한 튜링완전 임베디드 언어로 볼 수 있다.

도메인 특화 언어(DSL)가 뭔지 알고 있다면, FRP를 상태유지 로직에 사용하는 최소한의 튜링완전 DSL이라고 이해해도 좋다. 입출력 부분을 빼면, 가령 어떤 복잡한 게임이든 전적으로 FRP로 작성할 수 있다. 그만큼 강력하고 표현력이 있다.

그렇다고 FRP가 ‘모 아니면 도’라는 말은 아니다. 기존 프로젝트에 쉽게 도입할 수 있고, 도입하는 규모도 원하는 만큼 정할 수 있다. (2~3쪽)


여기부터는 옛날 글.

  1. 코널 엘리엇의 스택오버플로에 쓴 글이 제일 유명하다. 근데 난해하다. (이하 링크 모두 새창)
    http://stackoverflow.com/questions/1028250/what-is-functional-reactive-programming/1030631#1030631
  2. 그리고 이걸 오현석 님이 번역한 게 있다. 다만 이 글 역시 너무 어렵다. -_-
    http://www.enshahar.me/2014/07/frp.html
  3. 스택오버플로의 다른 답변으로 이런 재미난 글도 있다(재미는 있는데 정독할 필요는 없음).
    http://paulstovell.com/blog/reactive-programming
  4. 3과 같은 맥락에서 다른 답변 중 핵심을 짚은 설명으로 이런 게 있다.
    -의미론적: FRP is all about describing a system in terms of time-varying functions instead of mutable state.
    -구문론적: The essence of functional reactive programming is to specify the dynamic behavior of a value completely at the time of declaration.
  5. 4를 눈으로 확인할 수 있는 더 쉬운 예가 elm 예제 페이지다.
    http://elm-lang.org/learn/What-is-FRP.elm (예제 주소가 바뀌어 다음 주소로 수정@2015-12-28)
    http://elm-lang.org/examples/mouse-position (예제가 사라져 다음 주소로 수정@2016-8-17)
    http://elm-lang.org/examples/drag
  6. 참고로 elm은 [Seven More Languages in Seven Weeks]에서 다루는 언어다. [Seven Languages in Seven Weeks]가 국내 반응이 좋다면 이 책도 낼 수도 있...겠는데 그럴 일은 없겠지. → 없다. (@2016-8-17)



Posted by 필유
응용프로그램2015. 2. 25. 23:00

윈도우 기준. 워드의 Normal.dotm 파일은 스타일 등을 저장하는 '사용자 서식 파일'이다. 나는 (다른 많은 사람과 같이) 회사와 집 사이에 드롭박스 및 구글 드라이브로 파일을 동기화해서 사용하는데, 이 파일은 위치가 %appdata%\Microsoft\Templates이다 보니 동기화하기가 좀 불편하다.



찾아본 결과 심볼릭 링크를 사용해서 드롭박스 폴더 밖에 있는 파일을 추가하는 방법(새창)이 있다. 즉 ...\Templates에 있는 '대상'에 대한 '링크'를 드롭박스 안에 만드는 것. 그러나 내 경우 회사와 집의 사용자명이 달라서(즉 %appdata%가 달라서) 이 방법은 사용할 수 없다. 혹시나 해서 대상과 링크를 바꿔서도 해봤는데, 이렇게 하면 워드에서 기본 스타일 수정 후 종료 시 Normal.dotm 파일을 저장할 수 없다는 오류가 뜨면서 실패(당연히 이건 링크니까).


그러다 또 찾은 더 좋은 방법이 이거(새창, 마소). 역시 사람들 생각하는 건 다 똑같은가 보다. 간단하게, 워드에서 사용자 서식 파일의 위치를 설정하면 된다. 먼저 워드 '옵션>고급>일반>파일 위치'에서 해당 폴더를 변경하고, 다음으로 '옵션>보안 센터>보안 센터 설정>신뢰할 수 있는 위치'에서 또 해당 폴더를 변경하면 된다. 두 번째 설정을 안 하면 매크로를 사용할 수 없다는 알림이 뜬다.



옵션>고급>일반>파일 위치옵션>고급>일반>파일 위치


옵션>보안 센터>보안 센터 설정>신뢰할 수 있는 위치옵션>보안 센터>보안 센터 설정>신뢰할 수 있는 위치


Posted by 필유
하드웨어2014. 7. 6. 02:40

루팅 후 system tuner로 각종 최적화를 적용한 뒤에 문제가 하나 생겼다. 전화가 오면 voipcall 앱에 오류가 생겨 종료한다며 전화가 그냥 끊어지는 문제였다...


...-_- -_- -_-


system tuner의 어떤 트윅 때문인지 하나씩 테스트해본 결과, 빌드프롭 최적화를 적용하지 않으면 해당 오류가 발생하지 않는 걸 확인했다.


...-_-?


그래서 빌드프롭 중에서 어떤 항목 때문인지 다시 테스트. 처음에는 통화 관련 항목이라고 생각했으나 웬걸... 원인은 달빅 힙사이즈였다.


LG G3(F400L) 10e 기준으로, build.prop 파일에 힙사이즈가 두 번 정의되어 있었다.


62행: dalvik.vm.heapsize=36m

358행: dalvik.vm.heapsize=512m


이런 글 등에서 볼 수 있듯 LG가 이런 짓을 한 건 처음이 아니다. 하지만 나름 최신 폰인데 이건 좀...


어쨌든 이 문제는, system tuner에서 빌드프롭을 최적화할 때 힙사이즈(62행)가 256m으로 수정되기 때문에 발생하는 것으로 보인다. system tuner의 해당 메뉴에서 힙사이즈를 다시 36m으로 바꾸고 재부팅하면 문제는 사라진다(즉 system tuner는 중복되는 항목에 대해서는 첫 번째 항목만 인식하는 듯하다).


그래도 의문점은 남는다. 항목이 두 번 정의된다면 뒤의 값을 취하는 게 아닌가? 즉 앞의 값이 무엇이든 상관없는 게 아닌가? 상식적으로 36메가라는 힙사이즈는 말이 안 된다(이 폰의 기본 heapgrowthlimit은 256m이다). 게다가 받는 전화에서만 오류가 나는 것도 신기하고. 참 알 수 없는 일이다.



Posted by 필유
하드웨어2014. 7. 1. 22:58

열라 까이고 있는 G3를 샀다. 2년간 쓰던 옵티머스LTE에 비하면 좋기만 하더라-_- 루팅 안 하고 런처 바꾸고 2주를 썼는데, 아무래도 눈에 밟히는 것들이 있다. 가령 '스마트 알리미'라든가, 'Q메모'라든가...


폰도 하드웨어가 발달하며 성능 면에서 루팅의 이점은 없다고 봐야 할 것 같다(불과 2년 사이에!). 그럼에도 루팅을 하는 이유는 하나다.


통신사 앱 삭제.


물론 UX 면에서도 이점이 있다(가령 Xposed라든가, AdAway라든가). 매크로(나는 국산 앱인 The Toucher를 쓰고 있다)도 돌릴 수 있고. 그리고 앞서의 말과 모순되지만, 여전히, 성능을 극한까지 끌어낼 수 있다는 사실은 매력적이다(System Tuner로 잠든 CPU 부활).


이제부터 본론.


*아래 방법은 실패했습니다. OTA 안 됩니다! 해외에도 아직까지 알려진 방법 없습니다!



1.

G3 루팅은 아래 글처럼 하위 기종들처럼 하면 된다길래, 나도 이렇게 했더니 쉽게 됐다.

http://forum.xda-developers.com/showthread.php?t=2766429



2.

루팅 후 System Tuner로 앱 정리하고 빌드프롭 등을 트윅했다. System Tuner를 쓰는 이유는, 여러 개의 앱을 까는 대신 단 하나의 앱에 모든 최적화를 맡기기 위해서다. G3의 경우 (옵티머스LTE보다는-_-) 체감 성능이나 UI가 괜찮은 편이라 특히 더 다른 앱을 깔 생각은 들지 않았다(Xposed 말이다).



3.

그런데 루팅하고 나서 하루 지나 소프트웨어 업데이트를 눌러봤는데, 10g가 나왔다고 한다-_- 내가 산 폰(LGU)은 10e. 업데이트(OTA)를 시도해봤으나 역시나 실패. LG PC Suite로 하라길래 해봤더니 최신 버전을 쓴다는 헛소리만 나옴.


원인은 다음 글에서 찾을 수 있다. 요지는 프레임워크 쪽을 건드리면 OTA가 안 된다는 거.

http://www.clien.net/cs2/bbs/board.php?bo_table=use&wr_id=640284



4.

그래서, 결론은 이렇다. SuperSU를 삭제하고, System Tuner에서 모든 트윅을 끄고 재부팅하면, 루팅은 유지된 상태에서 OTA가 된다. OTA 후에는 System Tuner에서 다시 트윅을 적용하면 된다.


결론2. 최적화 앱은 System Tuner 하나로 족하다. 관리도 쉽고.




Posted by 필유

2007부터인가 엑셀은 기본값으로 다중 실행이 안 되게 바뀐 듯하다. 그래서 다중 창을 원하는 사람들이 많은 글을 올렸던데... 레지스트리 수정 혹은 애드온 설치 말고 아주 간단한 방법이 있다.


윈도우키+R → excel → 엔터


이렇게 엑셀을 실행하면 그때그때 모두 각각의 창으로 뜬다. 나는 이렇게 엑셀을 실행한 후 알트+F → R → 숫자를 눌러 자주 사용하는 문서를 여는 식으로 사용하고 있다(마우스를 적게 쓰는 게 생산성이 높다). 엑셀을 여러 개 실행한 다음 탐색기의 파일을 원하는 창에 드래그앤드롭하는 사용 패턴도 가능하겠다.


흔히 알려진 방법대로 레지스트리를 수정하면 탐색기에서 엑셀 파일을 열 때마다 새로운 엑셀이 실행되게 할 수는 있다. 그러나 이렇게 엑셀 프로세스가 여러 개 실행되면 실행될수록 PC의 자원 소모 또한 증가한다. 사양이 빵빵한 시대이긴 하지만, 그럼에도 나는 모든 파일이 아니라 원하는 파일만 새로운 엑셀 창으로 여는 방법을 선호한다.


그럼 탐색기에서 특정 파일에 대해서만 새 엑셀을 실행하는 방법은 없을까? '보내기' 메뉴를 이용하는 방법이 떠오른다.


  1. 탐색기에서 엑셀 설치된 폴더로 간다. 2010의 경우 보통 C:\Program Files\Microsoft Office\Office14
  2. EXCEL.EXE 파일을 우클릭해서 폴더 안 빈 공간에 끌어다가 놓고 '여기에 바로 가기 만들기' 선택.
  3. 그럼 'EXCEL.EXE - 바로 가기' 이런 파일이 생겼을 거다. 이 파일을 컨트롤+X.
  4. 알트+D 누른 다음 주소창에 shell:sendto 엔터(혹은 윈도우키+R 누르고 shell:sendto 엔터).
  5. 컨트롤+V.


이제 탐색기에서, 새로운 엑셀 창으로 열고 싶은 파일은 우클릭하여 '보내기>EXCEL.EXE - 바로 가기'로 열면 된다.




Posted by 필유
응용프로그램2014. 4. 13. 00:02

플래시에서 타임라인에 애니메이션을 넣은 파일이라면 쉽게 변환해주는 툴이 여럿 있을 것이다. 이런 게 아니라 순수 액션스크립트 코딩한 애니메이션을 동영상으로 만드는 방법이다. 간단히 말해 이런 순서다.


  1. 플래시에서, 이미 완성된 as 파일을 문서 클래스로 삼는 동명의 fla 파일 생성.
  2. 플래시에서 이 fla 파일을 mov로 내보내기(퀵타임 필요)
  3. Adobe Media Encoder에서 mov를 원하는 포맷의 동영상으로 변환(ogv 파일로 변환하고 싶을 경우 플러그인 설치)


하나씩 자세히 보자. 링크는 모두 새창.



1.

보통은(?) 나처럼 플래시디벨롭 같은 툴을 써서 코딩했을 테고, 그 결과로 Main.as 파일 한 개와 거기 딸린 여러 개의 as 파일을 가지고 있을 거다. Main.as와 다른 클래스 파일들이 같은 폴더에 있다고 가정한다.


플래시를 켜고 'ActionScript 3.0' 빈 문서를 하나 만든다. 그리고 Main.as가 있는 폴더에 바로 Main.fla라고 저장한다. 그다음 '문서 클래스'를 Main으로 지정하고 다시 저장한다.



문서의 클래스 외 fps, 크기 등 다른 속성은, 보통은 Main.as에서 [SWF(width=...] 이런 식으로 설정했을 것이다. 플래시에서도 이와 동일하게 설정한다. 이제 Ctrl + Enter로 잘 재생되는지 확인한다.


물론 액션스크립트 코딩 자체를 플래시에서 하는 사람이라면 이 1번 과정은 모두 필요 없다. 이미 가지고 있는 fla 파일이 있을 테니 다음 2번으로 그냥 진행하면 된다.



2.

'파일>내보내기>동영상 내보내기' 혹은 Ctrl + Alt + Shift + S를 눌러 종류는 mov 파일을 선택한다. 퀵타임이 없다면 설치하라고 나올 거다. 공식 사이트 가서 설치하고 플래시를 재시작하고 다시 시도하라. 아, 퀵타임 따위를 설치하는 날이 올 줄이야... 잠시 눈물 좀 닦고 가자.


참고로, 내보내기에서 avi, png 등을 고를 수 있지만, 그렇게 저장해봤자 안 된다! 빈 화면만 나온다. 다른 방식은 타임라인 위에 작업한 애니메이션만 저장되며, 액션으로 만든 애니메이션까지 저장할 수 있는 건 mov뿐이다.


2-1.

파일명을 고르면 퀵타임 내보내기 설정 창이 뜬다.



여기서 렌더링 폭, 높이는 플래시에서 지정한 문서 속성으로, Main.as에서 [SWF(width=...] 식으로 설정한 값이 아니다. 그래서 Main.as와 Main.fla 둘 다 동일하게 맞추라고 한 것이다.


어쨌든, 중요한 건 '다음 경과 시간 후'이다. 타임라인 프레임 단위로 작업한 게 아니므로 반드시 수동으로 끝날 시간을 정해줘야 한다. Main.as 파일에서 보통은 이런 식으로 코딩했을 거다.


stage.addEventListener(Event.ENTER_FRAME, idle);


따라서 전역변수 하나를 잡아, idle 함수 안에서 1씩 더해주게 하고 idle을 stage에서 제거하는 순간 trace하면 전체 프레임 수가 나올 거다. 그 전체 프레임 수를 문서의 fps로 나눠주면 시간을 구할 수 있다.


다만, 버그인지 모르겠는데, 결과물을 보면 의도한 것보다 짧게 저장되는 듯하다(내 경우 문서 fps는 60이었는데 동영상 fps가 62.5로 잡히면서 영상이 중간에 짤렸다). 이런 경우, 시간을 여유 있게 정해준 다음 결과물을 보고 뒤를 자르든가 하자.


2-2.

그리고 하단의 [QuickTime 설정] 버튼을 클릭하고 동영상 크기, 품질 등을 설정한다.



이건 따로 설명할 필요는 없겠지. 본인 목적에 맞게 적절히 설정.



3.

만약 mov가 원하는 포맷이었다면 2에서 끝. 그러나 mov를 누가 원하겠어...


mov를 avi 등으로 변환하는 데에는 Adobe Media Encoder를 사용하면 된다. CS에 포함된 툴로, 아마 플래시와 같은 컬렉션 제품군에 속해 있다. 플래시를 가지고 있다면 이것도 있으리라고 가정한다.


만약 없다면 무료 오픈소스 툴인 Miro Video Converter 같은 툴을 쓰면 된다. 다만 이 툴은 기능이 다소 제한적이고, 폴더명에 한글이 있을 경우 드래그앤드롭도 안 된다. 이 툴은 자세한 설정을 할 수 없어 별도의 설명도 하지 않는다.


3-1.

나처럼 변환하고픈 최종 포맷이 ogv라고 하자. Adobe Media Encoder는 기본적으로 ogv 포맷으로는 변환할 수 없다(적어도 내가 쓰는 CS5.5는 그렇다). 그러나 AdobeOgg라는 플러그인을 설치하면 가능하다. 물론 무료에 오픈소스다. 설명에는 프리미어용이라고 써 있지만, 프리미어에서 내보내기 시 호출하는 프로그램이 바로 Adobe Media Encoder이다.


플러그인을 받았으면 윈도우 기준 C:\Program Files\Adobe\Common\Plug-ins\CSx\MediaCore 폴더에 파일을 넣어준다(CSx에서 x는 자기 CS의 버전). 그다음 Adobe Media Encoder를 실행한다. 시작프로그램>Adobe xxxxxx Collection CSx 폴더에 있다. 여기서 x는... 생략).



플러그인을 설치해야만 스샷처럼 '형식'에서 Theora 포맷을 선택할 수 있다.



그 옆의 '사전 설정'을 누르면 동영상 품질, 크기, fps 등은 물론, 소스 동영상 중 원하는 범위만을 선택할 수도 있다. 위에서 말한 내 경우처럼 실제 길이보다 더 길게 mov를 생성했을 경우 뒷부분은 날리는 게 가능하다. 스샷은 7초 29짜리 소스에서 앞에서 7초 28만을 출력으로 지정한 모습.



이상 과정을 거쳐 내가 만든 swf와 ogm을 집접 임베딩하면 다음과 같다.



Posted by 필유
응용프로그램2014. 4. 10. 00:50

웬만하면 이런 글 쓰기 싫었다. 하지만 아무래도 너무하는 거 같아서.


헝그리앱이라는 사이트에서 게시판에 들어가면 스크롤을 따라다니는 플로팅 배너가 있다.



위 스샷의 경우 큐라레 광고. 보다시피 게시판 목록을 보는 걸 방해하고, 심지어 이 광고는 게시물을 클릭한 다음에도 사라지지 않고 떠 있다. 물론 우상단의 X 버튼을 누르면 사라지지만, 그것 참 거슬린다.


Adblock Plus로 차단하면 되지 않을까? 되면 이 글을 쓰지 않았을 것이다-_- 일반적인 이미지나 플래시를 차단하는 방법만으로는 불가능하다. 이미지만 차단할 경우 저 공간이 하얗게 남아 여전히 스크롤을 따라다니며 방해한다. 배경 이미지(opa.png)를 차단해도 마찬가지다. 저 '공간' 자체를 차단해야 한다.


저 부분의 소스(대충 417행)를 보면 fixed-top.banner_11라는 div를 차단해야 한다는 걸 알 수 있다.



그래서 찾아본 결과, Adblock Plus와 함께 사용하는 확장 기능이 하나 더 있었다. 이름하여 Element Hiding Helper for Adblock Plus. 애드블록 도움말 문서(새창)에서 알아냈다. 이걸 설치하면 단순 이미지 외에 div 등 스타일시트의 특정 요소를 차단하는 게 가능해진다. 이걸 설치하면(재부틸 필요 없음) 특정 요소를 찍어서 차단할 수 있다(요소 숨김 필터)..



단, 찍을 때 div가 아니라 이미지 등으로 인식하는 경우가 있어 그냥 입력하는 게 낫다. 위 스샷처럼 다음과 같은 요소 숨김 필터를 추가하면 된다.


hungryapp.co.kr##DIV.fixed-top.banner_11


추후 헝앱이 소스를 바꾼다면 클래스 명이 달라질지 모른다. 뭐, 방법만 알면 그때 가서 바꾸면 될 일. 하지만 그것보다 헝앱은 인간적으로 이 따위로 조잡하게 플로팅 광고를 노출하는 짓거리에 대해 재고하면 좋겠다. 이렇게 광고 띄워서 광고비 뭐 얼마나 많이 받는다고. 사용자들이 겪는 불편도 좀 생각해주길.






Posted by 필유
응용프로그램2014. 4. 5. 23:31

캣마우스(KatMouse)라는 작지만 대단히 편리한 프로그램이 있다. 창의 현재 포커스와 상관없이 마우스 휠을 작동하게 해주는 프로그램이다. 옛날옛날 마소 인텔리포인트 마우스를 썼던 사람은 아는(그리고 손에 익었을, 대단히 유용한) 기능이다.


글의 요지는, 이 캣마우스의 새 버전이 올해 2월에 나왔다는 거다. 무려 7년-_- 만의 업데이트다. 최신 버전은 KatMouse 7이고 제작사 사이트(새창)에서 다운로드할 수 있다.


결론적으로, 현재 캣마우스를 사용 중이라면, 윈도우7 호환성을 비롯해 여러 가지로 업데이트된 최신 버전을 사용하길 권장한다. 캣마우스가 뭔지 모르는 사무직 종사자 역시, 당장 써보길 권장한다(써보고 필요 없으면 제거하면 그만. 아무 찌꺼기도 남지 않는다). 한 번이라도 써본 사람은 그 편리함을 순식간에 깨달을 수 있다. 이미 앞서가는-_- 사람들은 다 쓰고 있다.


그럼에도 설득을 위해 시나리오를 들자면...


왼쪽에는 탐색기, 오른쪽에는 한글을 띄웠다고 하자. 탐색기 폴더에는 휠로 스크롤해야 할 만큼 파일이 많다. 한글에서 작업 중에 왼쪽 탐색기 화면 아래에 있는 파일을 고르고 싶다고 하자. 이럴 때 우리는 마우스로 왼쪽 창을 클릭한 다음(즉 포커스를 한글에서 탐색기로 옮긴 다음) 마우스 휠을 돌려야 한다. 이럴 때 캣마우스를 설치해놨다면, 그저 마우스를 왼쪽으로 옮겨서 휠을 돌려도 탐색기 안에서 스크롤이 일어난다. 포커스 창이 아니라 현재 마우스가 위치한 창에서 휠 스크롤이 가능해진다.


혹은, 하나의 탐색기 창 안에서 왼쪽 창(정확히는 컨트롤?)에는 폴더 구조, 오른쪽 창에는 현재 폴더 내용을 표시해놓았다고 하자(일반적으로 나는 탐색기를 이렇게 쓴다).



현재 포커스는 오른쪽 창에 있다. 이때 왼쪽 창에서 스크롤을 하려면 어떻게 하는가? 왼쪽 창과 오른쪽 창 사이에 있는 스크롤바를 마우스로 잡고 내리든가, 왼쪽 창 임의의 폴더를 클릭한 다음 휠을 돌려야 한다. 하지만 캣마우스가 설치되어 있다면? 그냥 마우스를 왼쪽 창으로 이동하고 휠을 돌리면 된다.



단언컨대, 이 작고 훌륭한 프로그램을 사용하지 않을 이유는 없다.



사족으로, 이전 버전(~1.04)은 몇몇 프로그램에서 휠이 묘한 오작동을 일으키는 문제가 있었다. 캣마우스 설정(Applications 탭)에서 해당 프로그램을 무시하도록 지정하면 되긴 하는데, 어쨌든.


내 경우 가장 성가셨던 문제는, 크롬에서 컨트롤 키를 한 번이라도 누르면 그다음부터 휠을 돌릴 때 글자가 작아지거나 커지는 현상이었다. 원인을 몰라서 정말 황당했던 일이다. 이번 버전은 제작자 자신이 밝혔듯 크롬과 충돌(?)하지 않는다. 또 하나, 이전 버전은 포토샵, 인디자인, 일러스트레이터 등에서 휠이 제대로 작동하지 않았다(컨트롤, 알트, 시프트 키와 사용 시). 이번 버전은 이런 부분도 고쳐졌다 만세.


Posted by 필유
하드웨어2014. 3. 28. 16:40

현재 웹이나 카페에 있는 방법은 오래됐거나, 복사를 막거나, 회원에게만 공개되어 이 글을 쓴다. 무엇보다 기존에 알려진 방법은 킨들 기본 영영 사전을 영영한 사전으로 대체하는 방식이지만, 이제 그럴 필요가 없어졌으므로 영한 사전을 추가하는 방식이 낫다고 생각한다. 최신 펌웨어 업데이트(뉴페화의 경우 5.4.3)를 하면 독서 중에 사전을 선택할 수 있다. 일단 내 기기는 뉴페화고, 십중팔구 페화에서도 통할 것이다.


현재 웹에 도는 mobi 영한 사전은 두 가지가 있다. 둘 다 네이버 카페의 하민파파 님이 공개한 것으로, 1) 스타딕트 퀵 영한 사전과 2) 저자 미상의 영영한 사전이다. 해당 카페 글은 여기(이하 링크는 모두 새창). 말한 대로, 나는 영한 사전만을 추가할 것이다.


결론만 말하면, 아래 파일을 페화 사전 폴더(\documents\dictionaries)에 넣으면 된다. 스타딕트가 GPL이므로 하민파파 님의 mobi 파일도 GPL일 테고, 거기서 헤더만 수정한 본 파일 역시 GPL이다.


Quick English-Korean Dictionary.mobi


다음은 이 파일을 적용한 스샷.




이하 내용은 이 파일을 어떻게 만들었는지에 대한 설명이다(내용 수정함).


1. 앞에서 쓴, 하민파파 님이 만든 mobi 스타딕트 퀵 영한 사전(quick_english-korean.mobi)을 다운로드한다.


2. 킨들 기본 사전 파일 헤더에는 해당 사전의 asin(아마존 고유 상품번호)이 있다. 기존 방법은 킨들 기본 제공 사전의 asin을 대체했지만, 새로운 사전을 추가할 경우 그 파일의 헤더에는 asin이 없어도 무방하다.


3. 만약 사전 이름을 수정하고 싶다면 Mobi Metadata Editor나 calibre 등을 사용해 헤더를 수정하면 된다. 킨들은 파일명과 상관없이 헤더에서 쓴 사전 이름으로 사전을 인식한다. 위 파일은 Mobi Metadata Editor를 이용해 사전 이름만 수정했고, asin은 넣지 않았다.



'하드웨어' 카테고리의 다른 글

G3 받는 전화가 안 될 때(voipcall 오류)  (2) 2014.07.06
G3 루팅 후 OTA  (0) 2014.07.01
CCC 없이 HDMI 연결 시 언더스캔 끄기  (0) 2014.03.19
슈퍼DMZ 사용 시 파일 공유 문제  (1) 2012.09.17
옆글 결과  (1) 2011.12.22
Posted by 필유