Programming (77)


setLayoutParams와 java.lang.ClassCastException

안드로이드에서 setLayoutParams 메서드를 사용했더니 java.lang.ClassCastException이 발생한다면, LayoutParams를 잘못 사용했을 확률이 높다.

어떤 View에 LayoutParams를 적용할 때에는 View의 부모 레이아웃 클래스의 LayoutParams를 적용해야 한다.

예를들어 RelativeLayout a내부에 있는 LinearLayout b에 LayoutParams를 적용한다면,

이런식으로 말이다.

마찬가지로, ListView 내부의 자식 View에서는 AbsListView.LayoutParams를 사용한다.




Perl 코드 난독화 사이트

펄로 프로그래밍을 해서 배포할 때, 악의를 가진 유저가 소스를 들여다보고 나쁜 일에 써먹으면 골치가 아프다.
특히 PAR::Packer 모듈을 이용하여 배포할 때, 소스코드를 바로 볼 수 있어 더욱 위험하다.

따라서 펄 소스코드를 난독화 해주는 툴이 필요해서 찾아보니, 웹에서 바로 사용할 수 있는 난독화 툴을 찾았다.

http://perlobfuscator.com/

Perl Obfuscator 라는 사이트로, 제목 자체가 펄 난독기(?)이다.

위쪽에 보이는 빈칸에 펄 코드를 붙여넣고 페이지 하단 Obfuscate 버튼을 누르면 버튼 아래에 난독화된 코드가 생성된다.
여러가지 옵션이 있지만, 위에서 세번째 옵션인 Punctuationify 만 해줘도 쉽사리 알아볼 수 없는 코드가 된다.

** 만약 PAR::Packer 모듈을 사용한다면, 펄 소스코드의 use 옵션은 난독화 하지 말아야 한다.
그래야 정상적으로 모듈을 포함하여 패키징하게 된다.




롤 접속 차단 프로그램

Project_LOLBlocker Downloads

(2013.4.22 업데이트)
롤 차단 프로그램!

롤을 차단할때와 해제할때 비번이 필요함!
믿을 수 있는 친구에게 비밀번호를 걸도록 하면 그 친구가 풀어줄때까지 롤 못함 ㅋㅋ

** 관리자 권한으로 차단하지 않으면 나중에 해제 불가능!
** 관리자 권한으로 안했다가 롤 못하게 됬다고 찡찡대도 난 모름
** 이거 hosts 파일 수정하는거 아님
** vista 이상만됨
** 롤 영영 못하게 되도 책임 못짐


perl로 짜본 롤 접속 차단 프로그램입니다.
물론 컴퓨터 왠만큼 해봤다 하시는 분들은 간단히 다시 접속할 수 있겠지만…

packer로 패킹해서 단일 실행파일로 만들었습니다.
테스트는 windows 7 64bit에서밖에 못해서 정상작동 보장 못합니다.

예방의 효과는 있겠죠?




SHA-1, HMAC 해쉬 함수

안드로이드에서 SHA-1과 HMAC hash를 위한 class를 만들어 봤습니다.
역시 구글신은 위대합니다…

http://pastebin.com/r8qnVDUb




AES 암호화 / 복호화 ( ~ Android jelly bean 4.2)

안드로이드 내부에 여러 데이터를 저장하다 보면, 사용자가 쉽게 열어보지 못하도록 암호화해야 하는 상황이 생긴다. 그때 사용 할 수 있는 방법을 찾다가, AES 암호화를 사용하면 좋겠다는 생각이 들었다. 그래서 간단하게 class를 만들어 사용하던 도중, 안드로이드 4.2 젤리빈에서는 정상동작하지 못하고 뻗어버리는 상황에 봉착했다. 이를 해결하기 위해 이곳저곳 돌아다녀 완성한 class를 소개한다. class를 사용하기 전에 key를 우선 바꾸어주자. 실제로 사용하는 메소드는 제일 처음의 encrypt와 decrypt 뿐이다.

http://pastebin.com/6CLVTu9x

이 소스코드의 대부분은 제가 작성한 코드가 아닌, 구글링의 결과물이며, 이를 사용해서 발생한 어떠한 일에도 저는 책임을 질 수 없습니다.




HTTP post 결과값 받아오기

안드로이드에서 어느샌가 메인스레드에서의 네트워크 작업이 불가능해졌습니다.
물론 필요하다고 생각한 내용이었지만, 애초에 불가능하게 만들 줄은 몰랐습니다.

아무튼, HTTP post 메서드를 스레드로 작업하여, 그 결과값을 받아오는 함수입니다.

http://pastebin.com/RwxMDTYW
기본적으로 Callable을 사용하여 Future에서 작업한 결과를 받아서 return합니다.
도중 Exception이 발생하면 무조건 null을 반환합니다.




HTML unescape in Android

안드로이드에서 서버와 JSON 형식의 데이터를 주고받다 보면, 자연스럽게 접하게 되는 문제가 있다.
바로 HTML escape/unescape 관련 문제이다.

HTML escape는 간단히 말하면 ‘&’, ‘<‘ 같은 특수문자들을 ‘&amp;’, ‘&lt;’ 등과 같이 치환하여 혹시 발생할지 모르는 문제들을 방지하는 것이다.

현재 진행중인 프로젝트에서 서버와 통신을 할때, 받아오는 문자열이 모두 HTML escape 되어 있다.
따라서 사용자들에게 문자열을 보여주기 전에 이를 다시 unescape 하는 과정이 필요하다.

사실 안드로이드에서 HTML unescape 하는 방법은 간단하다.

이렇게만 해줘도 완벽하게 HTML unescape가 완료된다.

그러나, 내가 만들고 있는 안드로이드 프로젝트에서는 매우 많은 양의 문자열을 수시로 unescape해야만 했는데, 위의 코드는 생각보다 느리게 동작했다.
따라서 이를 효과적으로 수행할 방법을 찾아야만 했다.

그렇게 구글링을 하던 도중 발견한 내용에 따르면, org.apache.commons.lang.StringEscapeUtils.unescapehtml메소드를 사용하는 것이 좀 더 빠르다고 한다.
(http://stackoverflow.com/questions/4321896/is-there-a-faster-way-to-decode-html-characters-to-a-string-than-html-fromhtml)

그런데 아래 댓글을 보니 이런 말이 있다.

There’s a chance that unescapeHtml4() from Commons Lang 3.1 is significantly (200x) slower than unescapeHtml() from Commons Lang 2.6. I tested using DDMS and Traceview on Galaxy S3 with Android 4.1.1, and emulator with Android 2.2. I know that Dalvik Just-In-Time is disabled when tracing, so my findings may be inaccurate. But it was enough to scare me into using Commons Lang 2.6 instead of 3.1. – TalkLittle Jan 10 at 22:55

즉, 최신 라이브러리인 3.1 버전 보다 2.6 버전이 빠르다는 말씀…
따라서 2.6 버전 라이브러리를 받아서 사용했다.

결국 최종적으로 사용한 방법은 다음과 같다.

일단 DDMS를 통해 본 결과는 빨라지긴 했지만… 사실 체감될 만큼의 효과는 없없다.
그래도 일단, 이 방법이 가장 최선이라 판단하여 현재 사용하고 있다.