이 블로그는 더 이상 업데이트되지 않습니다.

최신 내용을 확인하시려면 여기를 클릭해주세요.

Blog


코드에서 생성한 View에 Id 생성하기

안드로이드에서 ListView를 사용하면서 ViewHolder 패턴이란 것을 많이 사용해 봤을 것이다.
(아니라면 [Android] ListView 구현시에 뷰홀더(ViewHolder) 사용하기 를 보자.)

viewHolder 패턴을 사용하면서 하나의 ListView에 서로 다른 구조를 가진 View들을 보여주게 되면, convertView.getId() 메서드를 이용하여 View의 교체 여부를 결정하게 된다.

위와 같은 코드를 사용하면서, 차츰 View.getId() 메서드를 이용해 View를 비교하는 방법을 즐겨 사용하게 되었는데, 그러던 와중에 문제점이 하나 발생했다.

만약 Id를 가져오고자 하는 View가 코드상에서 생성된 View라면, Id가 없다…
따라서 Id를 따로 생성해 주어야 한다.

API Level 17 부터는 View.generateViewId() 메서드를 사용하면 되겠지만, 보통 진저브레드까지 지원하도록 앱을 만드는 나는 사용할 수 없었다.

그럴 때 사용할 수 있는 메서드가 있다.
역시 내가 구현한 코드는 아니지만, 유용해보여 소개한다.

* 참고
http://stackoverflow.com/questions/1714297/android-view-setidint-id-programmatically-how-to-avoid-id-conflicts




ViewPager에서 현재 보고있는 Fragment 알아내기

안드로이드에서 ViewPager를 사용할 때, 현재 보고있는 Fragment를 알아내는 것은 여간 골치아픈 일이 아니다.

Fragment 내에서 OnResume()가 호출되는 순간으로는 올바르게 알아 낼 수 없다.
onPageChangeListener 등을 쓰는 방법도 있겠지만, 아주 간단하게 구현할 수 있는 방법이 있다.

바로 setUserVisibleHint 메소드를 오버라이드 하는 방법이다.
Android Support Library (rev 11) 에서도 사용이 가능하다.

적용하고자 하는 Fragment에서 다음과 같이 사용하자.

* 참고
http://stackoverflow.com/questions/10024739/how-to-determine-when-fragment-becomes-visible-in-viewpager




PPTP VPN 서버

간단하게 우분투를 VPN 서버로 만드는 방법을 알아보자.
PPTP로 만들면 windows 환경에서 따로 클라이언트 프로그램이 없어도 쉽게 연결할 수 있다.

설치

$ sudo apt-get install -y pptpd

local / remote ip 설정

/etc/pptpd.conf 파일 최하단에 다음을 추가한다.

locapip 192.168.13.1
remoteip 192.168.13.100-200

DNS 설정

/etc/ppp/pptpd-options 파일에서 ms-dns 항목을 주석을 풀고 수정한다.

ms-dns 8.8.8.8
ms-dns 8.8.4.4

사용자 추가

/etc/ppp/chap-secrets 파일 내용을 수정한다.
ID * Password * 순서로 사용자를 한명씩 추가하면 된다.

# Secrets for authentication using CHAP
# client    server    secret        IP addresses
userId1        *       Password1    *
userId2        *       Password2    *
userId3        *       Password3    *
userId4        *       Password4    *
userId5        *       Password5    *
userId6        *       Password6    *

NAT 설정

사용자가 VPN을 통해 인터넷에 접속하려면 필요하다.
다음 명령어를 실행한다.

$ sudo su
# iptables -t nat -A POSTROUTING -s 192.168.13.0/24 -o eth0 -j MASQUERADE
# iptables-save > /etc/iptables.rules
# exit

그리고, /etc/rc.local 파일에 다음과 같이 추가해준다.

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will “exit 0” on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# 여기 한 줄을 추가한다.
/sbin/iptables-restore < /etc/iptables.rule

exit 0


IP forwarding 설정

ip 포워딩을 허용하기 위해 커널 파라미터를 수정한다.
/etc/sysctl.conf 파일에서 net.ipv4.ip_forward=1 항목의 주석을 풀어주자.

.
.
.
# Uncomment the next line to enable TCP/IP SYN cookies
# See http://lwn.net/Articles/277146/
# Note: This may impact IPv6 TCP sessions too
#net.ipv4.tcp_syncookies=1

# Uncomment the next line to enable packet forwarding for IPv4
# 여기 한 줄의 주석을 해제한다.
net.ipv4.ip_forward=1

# Uncomment the next line to enable packet forwarding for IPv6
#  Enabling this option disables Stateless Address Autoconfiguration
#  based on Router Advertisements for this host
#net.ipv6.conf.all.forwarding=1
.
.
.

그 후, 바뀐 설정을 적용하기 위해 reload 해준다.

$ sudo sysctl -p

MTU 설정

네이버나 다음 같은 국내 포털 사이트들을 접속하기 위해 MTU를 수정해준다.
/etc/ppp/ip-up.local 파일에 다음과 같이 추가한다
(파일이 존재하지 않으면 생성해주자.)

ifconfig $1 mtu 1500

만약 위 설정으로 잘 동작하지 않으면 $1 을 ppp0 으로 바꿔보자
그리고 실행 가능하도록 권한을 수정한다.

$ sudo chmod a+x /etc/ppp/ip-up.local 

pptpd 재시작

다음 명령어를 실행한다.

$ sudo service pptpd restart

위의 과정을 거치면 모든 설정이 완료된다.
시스템을 재시작해도 똑같이 적용된다.

* 참고
http://noise1.tistory.com/5
http://blog.riobard.com/2011/11/12/pptp-vpn-on-ubuntu/
http://blog.naver.com/PostView.nhn?blogId=ilinuxer0&logNo=60167759305




Boot Loader 가 망가지면?

http://ubuntuforums.org/showthread.php?t=1769482

우분투를 비롯한 리눅스를 사용하면서 윈도우와 멀티 부팅을 사용한다면, 누구나 한번쯤은 부트로더가 꼬여서 부팅이 안되는 신비한 경험을 했을 것이다.

이때 당신을 도와줄 아주 좋은 친구 Boot-Repair!

우선 우분투 Live Cd 또는 Live USB로 부팅하자.
그리고 터미널을 열고 아래와 같이 입력해준다.

그 후의 일은 심플한 GUI와 함께 하라는 대로 해주면 된다!

좀 더 자세한 설명은 아래 링크에서 확인.
http://www.howopensource.com/2012/05/reinstall-recover-grub-from-ubuntu-12-04-live-cd-usb/
http://ubuntuforums.org/showthread.php?t=1769482
http://deviantcj.tistory.com/493




비트플래그 (Bitflag)

한번에 여러 가지 속성을 동시에 지정할 때, 편리하게 사용 할 수 있는 방법 중에 하나가 비트플래그이다.
간단하게 안드로이드에서 비트플래그를 사용하는 법을 알아보자.
(사실, 자바랑 똑같다)

우선 사용하는 연산자는 다음과 같다.

~A : NOT 연산자 – A의 각 비트가 0이면 1로, 1이면 0으로 바뀐다.
A & B : AND비트 연산자 – 두 비트가 모두 1일 때 1이다.
A | B : OR비트 연산자  – 두 비트가 모두 0일 때 0이다.
A ^ B : XOR비트 연산자  – 두 비트가 모두 달라야 1이다.

아래는 간단한 예제.

http://pastebin.com/9HspchLS




Type Replace “…” with ellipsis character (…, … ?

ADT에서 Type Replace “…” with ellipsis character (…, &#8230;) ? 라는 경고가 뜬다.

ctrl + 1을 이용한 빠른 수정으로 수정이 안되는걸 보니 버그인듯.

쉽게 말하면 …을 말줄임표 유니코드로 바꾸라는 말씀.
아래처럼 바꾸면 된다.