[구글은 어떻게 일하는가?]를 보고 느낀 밤쏭 생각

http://www.slideshare.net/alleciel/how-google-works-korean


위 내용은 비지니스에 대한 내용이지만.

밤쏭에게는 자신을 돌아보는 계기가 되었네요.



"지금 무엇이 달라졌을까요?"

지금 항상 하던 일에 익숙해서 새로운 일에 두려움과 귀찮음을 가지고 있나요?

아니면 부족함을 알고 항상 새로운걸 보고, 다른 사람과 교류 하고 있나요?



그리고 한해가 지날 때 마다 나에 미래가 작아지고 있는건 아닌지 생각했습니다.






도전하세요.!!


Git 네이버 개발자센터 remote 서버 추가하기

- 원하는 내용 

기존 다른 remote에서 네이버 개발자센터 오픈프로젝트 git에도 추가하고 싶다.

추가 시 기존 작업 히스토리등 공유하고 싶다.



네이버 git 등록하기. (http)


# 등록.
$ git remote add dev_naver [naver git path]

# 등록 확인.
$ git remote -v

# 인증 받기.(show를 통해서 인증을 받고, pull & push 가 가능해진다.)
$ git remote show dev_naver


위 작업 시 naver 개발자 암호를 물어본다.

# 암호 인증 후 pull하고, Merge가 끝나면 push를 통해서 기존 git 히스토리를 

# 공유 할 수 있다.



SourceTree를 사용해서 pull push를 쉽게 할 수 있기 때문에 remote 서버 추가까지만 기술한다.

네트워크 감시 관련 (Reachability)

Reachability 를 쓰면 인터넷이랑 wifi에 대해서 노티를 받을 수 있다.

자세한건 아래 링크 2개를 보면된다.

http://blog.jidolstar.com/731

http://developer.apple.com/iphone/library/samplecode/Reachability/Introduction/Intro.html


단 그런 문제가 있다.

사용자가 직접 설정에서 wifi연결 상태에서 다른 wifi연결 시 Reachability에서는 관련 처리가 없어서 노티를 받을 수 없다. 



retain이 되어 있어도 객체가 nil이 되는 경우

@property (nonatomic, retain) NSArray *nameList;


- (void)initList:(NSArray *)list{

self.nameList = list

      nameList = list   //autorelease 가 자동으로 걸린다.(위에 retain이 되어 있어도..)

}


[android] layout folder 분류

참고 사이트.
http://developer.android.com/guide/topics/resources/providing-resources.html
http://blog.naver.com/PostView.nhn?blogId=chiew&logNo=110133805702 

갤럭시탭 10.1

drawable-xlarge-mdpi

layout-xlarge 또는 layout-1280x800


갤럭시탭 7.0

drawable-large-hdpi

layout-1024x600


일반폰 (480x800)

drawable-hdpi

layout


HD폰(1280x720)

drawable-xhdpi

layout-1280x720

원문 : http://www.androidpub.com/1934764 




갤럭시 노트 : layout-xhdpi-1280x800
갤럭시 HD : layout-xhdpi-1280x720

주의할 건, 폴더별 검사할 때 인데..
만약 layout-xhdpi 폴더 가 없다면, 갤럭시 HD는 어디로 탈까?
layout?  layout-hdpi? 답은 layout-hdpi로 들어간다. 

이부분을 주의해서 개발하면 그나마 괜찮다


디자인쪽에서 비율로 디자인해서 넘겨주고 1~2 px 문제에 대해서 문제를 삼지 않는다면, 밀도(xhdpi, hdpi 등등) 분류로 충분히 개발이 가능하다..

실제 앱 개발하면서 갤럭시 노트, HD 두개를 비율로 해서 개발하니 문제가 없어 보였다.







 

mac에서 이클립스 여러개 띄우기

원문 : http://www.kiwook.pe.kr/123

 

open -n (eclipse 경로)/Eclipse.app

[ubuntu] 하위폴더 rename 하기

ubuntu의 경우 rename이 link로 됨
user/bin/rename -> /usr/bin/prename 
(whereis rename으로 확인)

ubuntu에서는 이렇게 사용합니다.

 find . -type f -exec rename 's/$search_str/$replace_str/g' {} \;

예 :  find . -type f -exec rename 's/test/good/g' {} \;
-> test 문자열을 가진 파일을 good으로 치환합니다. 


mac에서는....rename 을 복사해서 파일을 하나 만들고, 사용하면 됩니다.

perl에 대해서..
 

[mac] ftp 간단하게 연결하기

Finder 상태에서 Command + k 를 누르면 서버연결이 나옵니다.

간단하게 ftp연결할 수 있습니다.  

[mac] 화면 녹화하기

화면을 녹화해서 설명할 때 쓰임

QuickTime Player > 파일 > 새로운 화면 기록

정말이지 강력하다!! 

TCP socket 연결에 문제가 있는 경우에 확인해야 할 사항들(펌)

TCP socket 연결이 안될 때 확인해야 할 사항

세부사항
TCP socket 통신에서 TCP client는 connect() system call을 이용하여 TCP server가 listen하고 있는 socket으로 connection을 시도하는데, server port의 상태에 따라 client program의 connect() call은 아래와 같은 결과를 가지게됨

- server 측에 해당 port를 listen하는 program이 기동되어 있지 않는 경우, server 장비는 RESET segment를 보내며, client장비에서는 connect() call에서 ECONNREFUSED error가 발생함

- 만일 server 장비 자체가 down되어 있는 상태라면, client측에서는 여러번의 connection retry 과정(SYN segment를 재전송)을 거쳐서 최종적으로 connection timeout 상태에 이르고, connect() call은 ETIMEDOUT error를 return 받게 됨

 - server 측에 접속 port를 listen 하는 program이 기동되어 있다면, 일단 TCP connection는 맺어지며, connect() call은 정상적으로 return되나, 해당 socket에 대한 read나 write시에 server로 부터 응답이 없는 경우가 있을 수 있음



일반적으로 TCP connection의 연결상태는 "netstat -na | grep tcp" 명령을 통해 알 수 있는데, 위의 세번째 case는 netstat에서는 ESTABLISHED 상태로 보이면서도 socket 통신이 안되는 경우임

 

TCP 통신에서 client program와 server program이 data transfer 상태가 되려면, client가 먼저 connect() call을 호출하고, server는 accept()를 call 해야 하는데, OS의 TCP stack은 server program이 accept()를 call하지 않더라도, client에서 들어오는 connection을 listen queue에 넣고 connection 상태를 ESTABLISHED로 놓게 됨.

따라서 TCP connection의 상태가 ESTABLISHED일 경우, 실제로 server program이 accept를 한 상태인지 아닌지는 구분할 수가 없음.

다만 대부분의 경우에 tcp server program은 빠르게 accept() call을 반복하므로, ESTABLISHED 상태에 있는 tcp connection은 server program에서 accept까지 한 것으로 볼 수 있음

간혹 client로 부터 들어오는 새로운 tcp connection들이 ESTABLISHED 상태가 되긴 하지만, client에서 통신에 안되는 경우가 있는데, 이는 server program에서 아직 accept()를 하지 않은 상태, 즉 connection이 backlog queue에 머물러 있는 상태일 수가 있음.

이처럼 아직 accept()되지 않은 connection들이 ESTABLISHED 상태로 놓이는 것은 정상적이며, server program이 빠르게 accept() loop를 돌고 있다면, 별다른 문제점이 발생하지 않음.

client와 server장비에서 netstat -na로 두 connection이 ESTABLISHED 상태에 놓인 것을 확인했는데도, client에서 통신이 안된다면, server program에 tusc를 걸어서 accept()이 자주 실행되는지 확인할 필요가 있음.(tusc의 사용방법은 다른 Q&A문서 참조)

새로운 connection들이 계속들어오는 상황인데도 server program에서 accept()를 call하지 않는다면, 이는 server program의 logic에 문제가 일어난 상황이므로 해당 application에 대한 debugging이 필요함

매우 간헐적으로 새로운 connection이 listen queue로 들어 왔으나, 아직 ESTABLISHED 상태로 바뀌지 않는 경우(pending state)도 있는데, 이는 기존에 server 장비로 접속한 적이 없는 신규 IP(소위 goodguy list에 포함되지 않은 IP)로 부터의 접속 일 때는 accept() call이 이루어 질때까지 ESTABLISHED 상태로 바뀌지 않게되어, connection이 pending 상태로 유지될 수 있음.

이러한 상태인지 여부는 xportshow라는 troubleshooting 용 tool로서 확인가능한데, "xportshow -f"의 결과 중 tcp connection 정보를 보면, 아래와 같이 listen port의 queue size 및 현재 pending상태의 connection의 수를 볼 수 있음

*************
Protocol: TCP
*************

*=no socket(XTI)
Pro PCB Address rwin swin ND/KA stat
tcl Address ( Local ) ( Remote ) (Rq) (Sq) (Type)
--+---------+---------------------+--------------------+---------------------
T 05f3925e8 100.100.100.7.1521 100.100.100.7.65305 32768 32768 y/y EST
T 0601ba0a8 100.100.100.7.1521 *.* 30 1 n/n LSN

위 출력 중 두번째 entry에서 다음과 같은 정보를 얻을 수 있음

local IP인 100.100.100.7의 1521 port가 LSN(Listen) 상태에 있음
1521 port의 listen queue(backlog size)는 30으로 설정되어 있음(Rq항목)
1521 port의 listen queue에 들어와 있으나 ESTABLISH 상태로 바뀌지 않은 pending connection의 수가 1개 임(Sq항목)


종합적으로 정리하자면, socket 통신에 문제가 있을 때는 다음과 같은 분석방법을 이용해보야야 함

client와 server간의 접속이 잘 이루어지지 않을 때는, nettl trace 를 통해서 tcp 접속과정이 정상적으로 이루어지는지 확인(ESTABLISHED가 되지 않는 경우에 실시)
netstat -na 를 통해 connection 상태확인 ==> ESTABLISH가 되는지 확인
tusc를 통해 server program이 계속적으로 accept()를 호출하는지 확인
listen queue나 pending connection에 관한 정보는 xportshow tool을 이용