336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
학교 안드로이드 수업시간에 참고했던 PPT 강의자료입니다.
같이 공부하는분들 처음 안드로이드 공부시작하실때 도움될까 싶어 올립니다.
자료의 출처는 교수님께 받았기에 잘모르겠다는.... 아마 구글의 안드로이드 책을 참고한듯한 느낌이 강하게 !!ㅋ

파일 용량 제한문제로 알집파일 6개로 압축해서 올리겠습니다.

블로그 이미지

By훈트

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
학교 안드로이드 수업시간에 참고했던 PPT 강의자료입니다.
같이 공부하는분들 처음 안드로이드 공부시작하실때 도움될까 싶어 올립니다.
자료의 출처는 교수님께 받았기에 잘모르겠다는.... 아마 구글의 안드로이드 책을 참고한듯한 느낌이 강하게 !!ㅋ

파일 용량 제한문제로 알집파일 6개로 압축해서 올리겠습니다.

블로그 이미지

By훈트

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
학교 안드로이드 수업시간에 참고했던 PPT 강의자료입니다.
같이 공부하는분들 처음 안드로이드 공부시작하실때 도움될까 싶어 올립니다.
자료의 출처는 교수님께 받았기에 잘모르겠다는.... 아마 구글의 안드로이드 책을 참고한듯한 느낌이 강하게 !!ㅋ

파일 용량 제한문제로 알집파일 6개로 압축해서 올리겠습니다.


블로그 이미지

By훈트

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

• 트위터를 시작하시려는 분은 우선 트위터 기본 사용법을 역순으로 읽어보시는 걸 권합니다.
• 그리고 트위터에서 저를 follow 하세요! : )

+ 현재 이 글에 사용한 그림은 2009년 9월에 캡쳐한 것으로 현재 트윗덱 모습과는 차이가 있습니다.

트위터 클라이언트를 간략하게 소개하면서 말씀드린 대로 제일 먼저 트윗덱(TweetDeck) 사용법을 알아보겠습니다. 트윗덱은 전 세계 트위터러가 가장 애용하는 무료 트위터 클라이언트입니다. Adobe Air 기반 애플리케이션으로 윈도우와 맥, 리눅스, 아이폰/아이팟터치 용이 있으며 그룹 생성 등 다양하고 강력한 기능을 자랑합니다. 그렇기 때문에, 보는 사람에 따라 약간 복잡하다고 생각할 수 있습니다. 우선 트윗덱 창 맨위부터 차근차근 알아볼까요?

트윗덱 다운로드

상단 메뉴

1. 입력창: 이 버튼으로 아래 입력창 전체를 열고 닫을 수 있습니다.
2. 타임라인: 트위터 타임라인에 해당하는 칸을 보여줍니다.
3. 리플라이: 리플라이 목록을 한 칸으로 보여줍니다.
4. DM: 다이렉트 메시지를 한 칸으로 보여줍니다.
5. Favorites: 여러분이 즐겨찾기 한 트윗을 역시 한 칸으로 보여줍니다.
6. 그룹: 여러분이 그룹으로 묶은 구성원이 올린 트윗을 한 칸으로 보여줍니다.
7. 트윗덱 추천: 트윗덱이 추천하는 트위터러를 보여줍니다.
8. 검색: 검색 결과를 한 칸으로 보여줍니다. 그러나 한국어 검색은 지원하지 않습니다.

그림을 클릭하면 크게 볼 수 있습니다.

9. Twitscoop: Twitscoop이란 서비스와 결합해서 트윗덱 창에 현재 트위터 상에서 인기있는 태그와 트렌딩 토픽을 보여줍니다.
10. 12Seconds: 12Seconds라는 서비스를 이용해 동영상을 올릴 수 있습니다.
11. StockTwits: StockTwits라는 서비스에서 제공하는 세계 금융, 주식 등 경제와 관련한 트윗을 보여줍니다. 주로 영어권 국가의 경제 동향이겠지요. 이 분야에 관심 있으신 분에게 유용한 기능이 아닐까 합니다.
12. 페이스북: 트윗덱으로 페이스북도 이용할 수 있습니다.
13. 새로고침: 트윗덱을 수동으로 새로고침합니다.

※ 12, 13번 사이에 밑줄 그은 부분은 남은 API 콜 수와 이 API가 새로고침되는 시각을 보여줍니다.

14. 1단보기: 1단만 나타나도록 트윗덱 창 폭이 줄어듭니다.
15. 환경설정: 트윗덱 환경설정 창을 엽니다.
16. 로그아웃: 트윗덱에서 로그아웃합니다.

※ 이 중 7, 9, 10, 11, 12번은 잘 쓰지 않는다고 보셔도 무방하므로 따로 설명하지 않겠습니다.

17. 주소줄이기: 26번 주소창에 긴 주소를 넣고 이 버튼을 누르면 짧은 주소로 변환되어 25번 입력창에 올라갑니다.
18. 사진올리기: 이 버튼을 눌러 나타나는 창에서 여러분 컴퓨터에 있는 사진을 트위터에 올릴 수 있습니다.
19. 글자수 줄이기: 140자가 넘으면 이 버튼을 눌러 글자 수를 줄이는 기능으로 영어의 경우 모음을 지우는 방법을 사용하기 때문에 한국어와는 관련이 없습니다.
20. 번역하기: 25번 입력창에 글을 쓰고 이 버튼을 누르면 원하는 언어로 번역을 해주는 기능으로 역시 한국어는 지원하지 않는군요. 영어를 기타 외국어로 번역할 때만 제대로 동작하는 것 같습니다.
21. 최근 해쉬태그: 여러분이 최근에 올린 해쉬태그를 보여줍니다.
22. 트윗덱에서 현재 사용하는 계정을 보여줍니다. 계정이 여러 개라면 이곳에 추가됩니다.
23. 이 버튼을 누르면 입력창이 사라집니다.
24. 25번 입력창에 글을 쓰고 이 버튼을 누르면 트위터에 올라갑니다. 엔터 키와 같은 기능입니다.
24번 아래 140이란 숫자는 여러분이 입력할 수 있는 글자 수를 보여줍니다.

그룹 관리

위 그림 6번, 그룹으로 다시 돌아가겠습니다. 이 버튼을 누르면 여러분이 follow 하는 분들 목록이 왼쪽 그림처럼 나타납니다. 만들고 싶은 그룹 이름을 입력창에 영어로 적고 아래 여러분 follower 목록에서 그룹에 포함할 사람을 선택(빨간색 원 클릭)한 다음 마쳤으면 맨 아래 "Save Group" 버튼을 누르면 그룹이 생성됩니다. 그룹은 여러 개 만들어도 상관없습니다. 나와 자주 대화를 나누는 사람이나 친구, 직장 동료 등을 이렇게 복잡한 타임라인과 따로 분리해 놓음으로써 트위터를 좀 더 효율적으로 사용할 수 있습니다.

검색(모니터링)

다음은 8번, 검색 버튼입니다. 한글 검색이 되지 않아 상당히 아쉬운 부분입니다. 버튼을 눌러서 나타나는 입력창에 검색어를 넣으면 한 칸이 생성됩니다. 그리고 그 검색어를 포함한 트윗은 실시간으로 필터링되어 이 칸에 올라옵니다. 기업이나 단체라면 이런 방법으로 자사 제품과 같은 특정 단어를 모니터링해서 여러 곳에 이용할 수도 있겠죠.

트윗덱 환경설정을 알아보겠습니다.

환경설정

General
1. 선택하면 트윗 입력창이 아래에 나타납니다. (위가 기본)
2. 리플라이나 멘션이 있을 때 알림 창이 나타나게 할 것인지 선택할 수 있습니다.
3. 타임라인에 새로운 트윗이 올라오면 알림창이 나타납니다. 알림창이 매분 나타날 테니 다른 일을 하는 도중엔 나타나지 않게 하는 것이 집중하는 데 방해가 되지 않겠지요.
4. 2, 3번 알림창이 나타날 때 소리가 나도록 합니다.
5. 트윗덱 폭이 좁아집니다.
6. 선택한 다음 트윗덱을 다시 시작하면 트윗덱을 종료한 시점 이전에 올라왔던 트윗은 나타나지 않습니다.
7. 6번과 마찬가지로 이것을 선택하고 나서 트윗덱을 다시 시작하면 기존 DM은 나타나지 않습니다.
8. 트위터러 이름을 클릭했을 때 그 사람 프로필과 타임라인을 웹브라우저 창을 이용해 보게 합니다. 선택하지 않으면 트윗덱 창에서 볼 수 있지만, 프로필을 볼 때마다 API 콜이 줄어든다는 점 기억하세요.
9. 트윗덱이 아닌 웹브라우저에서 그림 파일을 엽니다.
10. 입력창에서 트위터 사용자 이름 자동완성 기능을 사용합니다.
11. 리플라이를 작성할 때 원래 트윗에 포함된 해쉬태그를 자동으로 삽입합니다.
12. 짧게 변환된 URL을 클릭하면 트윗덱에서 미리 그 URL 컨텐츠에 대한 정보(원래 URL, 제목 등)를 보여줍니다. 트윗덱에 등록된 URL shortener만 해당하는 것으로 보입니다.
13. 트윗마다 트위터 사용자 사진 밑에 follower 숫자를 표시합니다.
14. 시간당 150인 API 콜마다 불러올 수 있는 최대 트윗 개수. (최대 200개)
15. 칸 하나에 포함할 수 있는 최대 트윗 개수 (최대 200개)

Colors/Font
1. 트윗덱 창의 배경색과 글자 색을 여러분이 원하는 색으로 바꿀 수 있습니다. 빨간 사각형을 눌러서 나타나는 색상표에서 색을 선택하거나 직접 RGB 코드를 입력해서 바꿀 수도 있습니다.
2. 색상을 변환했으면 Icon Brightness로 입력창 위와 아래에 있는 트윗덱 아이콘을 잘 보이도록 조절하세요.
3. 그리고 트윗덱을 처음 실행하면 한국어가 제대로 나타나지 않습니다. International Font를 선택해야만 한국어를 읽을 수 있습니다.

Twitter API
1. 막대 바를 조절함으로써 All Friends(타임라인), Mentions(리플라이, 멘션), DM이 업데이트되는 주기를 조절할 수 있습니다. 단 Total이 100%를 넘지 않아야 합니다.
2. "TURN OFF TWITTER UPDATES" 버튼을 누르면 막대 바가 모두 0%로 바뀌고 트윗덱은 업데이트되지 않습니다.

Services
1. 트윗덱 번역 기능을 사용할 때 기본적으로 상대방 트윗을 영어로 번역하도록 하려면 English를 선택하세요.
2. URL 변환 서비스를 선택할 수 있습니다. (bit.ly, is.gd 등)
3. 그림 업로드할 서비스를 선택할 수 있습니다. (twitpic, ysfrog 등)

Accounts
트윗덱에서 사용할 트위터 계정을 추가하거나, 삭제, 변경할 수 있습니다. "Set as Default"버튼을 눌러서 주로 사용할 계정을 선택하세요. 나중에 다시 변경할 수도 있습니다.

Sync
트위터 계정이 아닌 트윗덱 계정을 생성하는 곳입니다. 트윗덱 계정을 만듦으로써 생기는 장점은 어느 컴퓨터에서건 트윗덱에 로그인하면 여러분이 생성한 그룹정보나 트윗덱 환경설정 등이 동기화돼서 똑같은 환경에서 쓸 수 있다는 겁니다. 트윗덱 계정을 만들고 싶은 분은 맨 밑에 있는 "Don't have a TweetDeck Account?" 링크를 클릭하세요. 이윽고 나타난 화면(위 두 번째 그림)에서 계정을 만들면 됩니다.

트윗 메뉴

트위터 클라이언트는 리플라이, DM, 리트윗을 쉽게 할 수 있도록 도와줍니다. 왼쪽 그림으로 설명하겠습니다.

트윗덱에서 프로필 사진에 마우스를 올리면 맨 위 그림처럼 아이콘이 나타나는데요, 1, 2, 3번은 직관적이니 따로 설명하지 않아도 될 거 같아 생략합니다. 4번 아이콘에 다양한 비밀이 숨어 있습니다. 아이콘을 누르면 아래 양쪽 그림처럼 메뉴가 펼쳐집니다. User와 Tweet으로 또 하위 메뉴가 있고 해당 트윗을 올린 사람을 그룹에 넣기, follow/unfollow 하기, block 하기 등을 할 수 있습니다. 또 트윗 메뉴를 보면 해당 트윗에 언급된 트위터 이름이 여러 개일 경우 모두에게 리플라이 하기, 즐겨찾기 하기, 번역하기 등 유용한 기능이 포함되었습니다.

하단 메뉴

1. 왼쪽으로 이동: 말 그대로 해당 칸을 왼쪽으로 이동하는 버튼입니다.
2. 인기단어: 현재 해당 칸에 가장 많이 올라온 단어, 이름, 링크, 쉬태그 등을 보여줍니다.
3. 필터링: 단어, 이름, 트위터 클라이언트, 시간으로 필터링할 수 있습니다. 단, 제가 잘 몰라서일 수도 있으나, 시간으로 필터링하는 것은 제대로 동작하는 것 같지 않아 보이더군요.
4. 프로필 사진 아래를 보면 조그만 점이 하나 보입니다. 트윗을 읽지 않았다는 표시죠. 이 버튼을 누르면 그 표시가 사라집니다.
5. 프로필 사진 아래 조그만 점이 없는 트윗, 즉 읽은 트윗을 해당 칸에서 지웁니다.
6. 모두 지우기: 이 버튼을 클릭하면 칸에 있던 모든 트윗이 지워집니다.
7. 오른쪽으로 이동: 해당 칸을 오른쪽으로 이동합니다.

여기까지 트윗덱의 기본 사용법을 알아봤습니다. 트위터 사용과 별 관련이 없거나 사소한 것은 제외했는데도 이렇게 길군요. 그만큼 기능이 다양하다는 거겠죠. 다음 글에선 장점과 단점을 위주로 설명하면서 트윗덱을 리뷰해보려고 합니다.


블로그 이미지

By훈트

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Chrome & ChromePlus Extensions

 

 

클라우딩 컴퓨팅 환경 - 어느곳에서나 비를 내릴수 있는 구름 처럼

어디에서나 원하는 작업을 가능하게 해주는 컴퓨팅 을 그렇게 부르고 있죠?!

구글은 지향하는 서비스가 벌써 그렇게 하고 있더라구요,

오늘은 , 구글 크롬 혹은 크로미엄을 이용해서 만든 브라우저 크롬플러스 에서 유용하게 쓰이는 확장 프로그램을 소개할까 합니다

아이콘을 클릭하시면 해당 확장 프로그램으로 바로갑니다.


 

1.Aviary Screen Capture

스크린 캡쳐 프로그램이기도 하지만 실제 기능은 훨씬 더 광범위 합니다.

그 기능을 나열하면 이렇습니다.

Image Markup,

Image Editor,

Color Editor,

Effects Editor,

Vector Editor,

Audio editor

저 기능들을 제가 다용하지는 않기때문에 ,어떤 기능들이다 라고 설명드릴순 없지만 저렇게 많은 기능을 구현하는 프로그램입니다.

중요한건, 이것이 웹상에서 구현이 되는 프로그램이란 것입니다.이제 컴퓨터에 프로그램을 설치하는 시절이 지나가고 있다는 것이죠

클라우딩 컴퓨팅이 가고 있는 방향이 여기에있죠,

실제로 저는 컴퓨터에 기본 설치된 프로그램과 인터넷을 통해 필요한 몇가지 프로그램 이외에는 사용하지 않고 있습니다.

Windows 기본프로그램과,Chrome,Chromeplus,알약,알집,알씨,Adobe Reader,PC Manager 가 설치되어있습니다.

이럴 수 있는 것은 ,구글을 알게된 이후부터죠 ,문서는 구글문서도구에서,이미지는 오늘 소개하는 크롬 확장 프로그램들에서 편집 하구요

점점 컴퓨터에 프로그램을 설치할일이 사라져 가는 것 같아요,그리고 ,컴퓨터가 빨리지고 있습니다.

점점 컴퓨터가 가벼워지는 기분이랄까요?


 

2. Downloads

다운로드한 모든 프로그램들을 한번에 보기좋게 하려고 설치한것입니다.

"Google 크롬 사용자 설정및 관리" 에 가면 나오지만,빠르게 보기위해서 설치한 것입니다. 

 

3.Feedly

구글을 이용하면서 부터 RSS의 매력에 빠져버렸는데요,참 좋더군요

모든 신문과,추천하는 피드,내가 구독하는 블로그들,등이 다 한곳에서 확인이 가능하니까요

그런데,이 Feedly 라는 프로그램은 그 RSS 를 한층 더 업그레이드 시켜준 프로그램입니다.

내가 구독하는 모든 피드들이 이곳에서 가능하구요,미리보기기능이 있어서 아주 편리합니다.

또,잡지 처럼 편집 되어져서 나오니깐 보기도 좋구요,트위터도 여기서 확인 할수 있어요

모든 구독가능한 글들은 이곳에서 연동시켜서 볼수있는거죠,참 좋아요

이건 익스플로러에서는 작동하지 않습니다.크롬플러스에서 익스로 변환 시켜도 사용이 되질 않죠

 

4.Google Mailchecker Plus

여러가지 메일 확장 프로그램중에, 단연 돋보이는 데요

Mailto 기능을 통한 메일 작성 기능이 있어서 구글 Gmail로 바로 연결을 시켜줍니다.

데스크톱에 알림창이 뜨게 하는 기능도 아주좋구요

편지왔다!!! 이소리 아시죠^^;메시지 왔다!!!

소리는 없지만,그렇게 메일 도착을 알려줍니다.

이 기능때문에 ,크롬플러스의 보스키(Ctrl+Shfit+A) : 시스템 트레이에 최소화 하기 가 빛을 발합니다.

구글에 자동 로그인 해놓은후에,보스키를 작동시키면 메일이 오는 걸 알려주기때문이죠^^

이 둘을 잘 활용 하시면 브라우저에서 직접 메일알림을 해줍니다.

즉, 아웃룩 익스프레스를 이용해서 메일작성하는 편리함을 이것은 갖추고 있답니다.

Show desktop notifications? : 데스크탑(바탕화면)에서 메일알림 기능설정

체크 하시면 메일이 올때 바탕화면 시계위쪽으로 알림창이 뜹니다.(메일왔다!!!)


Open compose in tab? :

1) 메일쓰기를 누르시면 굳이 메일계정으로 들어가지 않아도 메일쓰기가 열립니다.물론 Gmail 계정이 있어야 겠지요.

2) 또한,눌러지는 이메일들있잖아요? 누르면 마이크로소프트 Outlook express 가 열리던 그메일들 바로 그메일들을 누르면

Outlook Express 대신 구글 Gmail 계정으로 바로 연결되서 메일쓰기가 새탭에서 열리게 하는 겁니다.

단,IE mode 에서 누르시면 Outlook Express가 뜹니다.Chrome mode 에서만 Gmail로 연결됩니다.

Preview window : 메일이 왔을때 아이콘을 클릭 하면 미리보기가 생성 됩니다.그걸 설정해 주는 것입니다.

Language : 한국어 ,맨아래쪽에 있습니다.

Icon selection : 원하는 아이콘으로 설정하세요

Save & Reload : 빠트리면 안되죠,설정하신후에 꼭 눌러주세요                                                  

 


5.Lazarus : Form Recovery

장시간 글을 썼습니다.이제 '등록'버튼만 누르면 되죠,그런데,등록도중 장시간 창을 열어놓음으로 인한  페이지 새로고침을 한다는

안내문이 떴습니다.급히 뒤로가기 버튼을 누르지만,빈페이지뿐......이런 경우 종종 있으셨죠?

그럴때 유용하게 쓰이는 확장 프로그램입니다.모든 글쓰기 영역을 임시저장 해주는 고마운 프로그램입니다.

Fire-fox 유저분들은 알고계실 확장 프로그램이 크롬 & 크롬플러스용으로 나왔답니다.


 

6. Picnik Extensions for Chrome

이거 참 뭐라고 해야 할지, 이제껏 써본 그 어떤 프로그램보다 한글 번역이 완벽하게 되어있는 프로그램 입니다.

이 회사가 얼마전에 구글에 합병됬어요,그래서 이젠 Picasa와 연동되서 잘 사용되어지는 데요

우리나라 업체가 만든 프로그램보다 더 한글을 한글 답게 풀어쓴 프로그램입니다.

쓰기도 좋구요,스크린샷 기능을 기본으로 하기도 하면서,

여러가지 이미지 편집 기능들이 아주 쉽게 사용할 수 있도록 만들어진 프로그램입니다.

강력 추천 입니다.

 

7. RSS 구독 확장 프로그램

RSS 피드를 구독하려면 ,이 프로그램을 설치하신 후에 저 아이콘이 뜨는 곳이면 어디든지 ,클릭하세요

그러면 ,바로 RSS에 구독신청 하게됩니다.RSS 리더는 구글 리더로 해놓고 구글리더에서 읽고 있는데요

요새는 Feedly에서 읽고 있답니다.신청은 구글리더에 읽기는 Feedly 에서 이렇게 사용하고 있습니다.


 

8.Turn Off the Lights

Youtube 에서 동영상을 볼때 주변을 Blackout 시켜주는 프로그램입니다.

간단히 볼때 사용합니다.

 

9.Twitter share this page

지금 보는 페이지를 트위터에 바로 보내주는 프로그램 입니다.

옵션에서 Always shorten links(slower)을 체크하시면 ,bit.ly 로 주소를 줄여서 보내줍니다.

 체크하지 않을때 보다,트위터에 보내는 속도가 약간 줄어듭니다.

 물론,트위터 바로가기용으로도 좋습니다.

 

10.Window Expander for Youtube

Youtube 플레이어에도 전체화면 보기 기능이 있지만,이것은 그보다 더 훨씬 편하게 볼수 있구요,

작은 모니터를 사용하는 사람들은 전체화면 보기를 하면 플레이어가 뭉게져서 버튼등 기능을 구현하는 부분이 보이질 않는 데요,

이 프로그램을 이용하면 화면이 뭉게지지 않습니다.

또한 ,옵션에서 화질을 선택해서 확장할때 어떤 화질로 볼것이냐를 설정 할 수 있게 되어있습니다.

small(240p),midium(360p),large(480p),720HD,1020HD등 영상이 가능한 범위의 화질을 큰 화면으로 볼때 설정하게 됩니다.

 

블로그 이미지

By훈트

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


HTTP 프로토콜로 Get/Post 방식의 요청에대한 Request.Headers 헤더정보를 얻기위한 ASP.NET 소스코드이다.


int loop1, loop2;
NameValueCollection coll;
 
// Load Header collection into NameValueCollection object.
coll=Request.Headers;

// Put the names of all keys into a string array.
String[] arr1 = coll.AllKeys; 
for (loop1 = 0; loop1<arr1.Length; loop1++) 
{
   Response.Write("Key: " + arr1[loop1] + "<br>");
   // Get all values under this key.
   String[] arr2=coll.GetValues(arr1[loop1]);
   for (loop2 = 0; loop2<arr2.Length; loop2++) 
   {
      Response.Write("Value " + loop2 + ": " + Server.HtmlEncode(arr2[loop2]) + "<br>");
   }
}

 


자세한건 아래 MSDN 링크를 참고하자

MSDN Library 링크

블로그 이미지

By훈트

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

이번에 정리해 볼 이슈는 안드로이드 개발에 반드시 사용하게 되는 에뮬레이터의 관한 이슈이다.
에뮬레이터가 특별한 이슈가 될 것은 없지만 Network programming 을 할 때는 이슈가 발생한다.
특히, 안드로이드 애플리케이션이 서버로 동작할 때는 더욱더 그러하다.

들어가기에 앞서, 에뮬레이터를 클라이언트로 이용해서 사용하는 경우에는 별다른 이슈가 없다고 하였는데 이미 에뮬레이터에는 브라우저도 있고, WebView 클래스를 이용한 Webkit controller도 띄우는 예제가 있다. 다만, 외부로 접속하고자 할 경우(즉, 인터넷을 사용하는 경우에는) user-permission 셋팅을 해 주어야 하는 것을 잊지 말자.

AndroidManifest.xml 파일의 가장 상위 엘리먼트인 <manifes> 바로 다음 자식 엘리먼트로 다음을 넣어주면 된다.

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

이 부분에 대한 간략한 설명은 이전 포스트에도 살펴볼 수 있다.

http://www.wiseant.net/blog/7 : android.webkit.WebView 를 이용한 데모

자! 그러면 여기서 살펴보고자 하는 것은 안드로이드 애플리케이션을 SocketServer를 이용한 서버로 띄웠을 때의 이슈이다.

그렇다면, 이에 해당하는 부분을 안드로이드 문서에서는 어떻게 정의해 두었을까? 다음의 링크를 통해서 확인할 수 있다.

# emulator reference

# emulator reference networking

일종의 제약 사항이라고 할 수 있는데 에뮬레이터의 네트워크 아키텍쳐를 virtual router/firewall 을 사용하여 내부적으로 에뮬레이터내에 IP를 할당하고 있는 것을 볼 수 있다.
이렇게되어 있다보니 로컬 시스템의 IP를 사용할 것으로 생각하면 오산인 것이다. 일단은 위의 문서를 토대로 대략적인 것을 살펴볼 수 있고, Network redirerction이란 것도 볼 수 있다.

안드로이드 에뮬레이터에서 Network redirection은 에뮬레이터가 가지는 VLAN과 로컬 시스템의 포트를 연결(파이프로 연결한다고 생각하면 된다)해 주는 개념이다.
즉, 로컬 시스템의 포트로 들어오는 패킷을 에뮬레이터의 포트로 넘겨주는 식이다(Forward 개념과 비슷하다).

좀 복잡한 듯 하니 그냥 간단한 테스트 소스와 설정하는 방법을 통해서 알아보자.
먼저, 안드로이드 애플리케이션에 올라가는 간단한 서버 소켓을 여는 프로그램을 만들어보자. 참고로 안드로이드 전체 소스는 생략한다. 많은 안드로이드 기초 강좌 등에서 찾아볼 수 있다.

    private String host = "localhost";
    private String port = 8002;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);

        status = (TextView)findViewById(R.id.status);
        status.setText("do something");

        Button btnRunServer = (Button)findViewById(R.id.runserver);
        btnRunServer.setOnClickListener(new Button.OnClickListener() {
         public void onClick(View v) {
          // run server
          try {
           ServerSocket serverSocket = new ServerSocket(port);
           
           status.setText(status.getText() + " waiting");
           Log.d("Green", "Waiting...");
           
           Socket player1 = serverSocket.accept();

           status.setText(status.getText() + " Connected");
           Log.d("Green", "Connected");

           player1.close();
          }
          catch (Exception ex) {
           status.setText(status.getText() + ex.getMessage());
          }
         }
        });

        Button btnConnect = (Button)findViewById(R.id.connect);
        btnConnect.setOnClickListener(new Button.OnClickListener() {
         public void onClick(View v) {
          // connect to server
          try {
           Socket socket = new Socket(host, port);

           DataInputStream fromServer = new DataInputStream(socket.getInputStream());
           DataOutputStream toServer = new DataOutputStream(socket.getOutputStream());

           status.setText("connected");
           Log.d("Green", "Connected...");
           
           toServer.writeInt(1337);
          }
          catch (Exception ex) {
           status.setText(ex.getMessage());
          }
         }
        });
    }

위의 소스에서는 ServerSocket을 열어놓고(Listening), accept 시에 Connected 메시만을 뿌려주는 간단한 서버용 애플리케이션이다.
connect 버튼을 클릭 시에는 지정된 host로 접속해 보는 소스이다.

안드로이드 에뮬레이터에서 접속 문제를 다루고 있음으로 여기선 ServerSocket 등에 대해서는 자세하게 다루지 않는다.

일단 위의 소스를 기반으로 하여 안드로이드를 구동해 보자.

일단 위와 같이 애플리케이션이 구동되면 첫 번째 버튼을 클릭해서 ServerSocket을 띄워준다. 이제 안드로이드 서버 애플리케이션과 연동할 간단한 클라이언트 소스를 살펴보자.

/**
 * 
 */
package com.mediachorus.test.android.network;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;

/**
 * @author Sang-Hyup Lee
 * @version 1.0
 *
 */
public class ClientTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  String host = "localhost";
  int port = 8002;
  // TODO Auto-generated method stub
  try {
   Socket socket = new Socket(host, port);

   DataInputStream fromServer = new DataInputStream(socket.getInputStream());
   DataOutputStream toServer = new DataOutputStream(socket.getOutputStream());

   System.out.println("IP:" + socket.getInetAddress().getHostAddress()
       + ", port:" + socket.getPort());
   System.out.println("Connected...");
      
   toServer.writeInt(1337);
   // toServer.write("quit".getBytes());
   toServer.flush();
   
   System.out.println("Done...");
  }
  catch (Exception ex) {
   System.err.println(ex.getMessage());
  }
 }
}

클라이언트 소스 역시 설명할 것도 별로 없다. 자바 네트워크 프로그램으로 서버에 접속해서 패킷을 보내어 본다. 로그를 통해서 접속이 되었는지 확인만 해 보는 것이다.

클라이언트 소스를 실행해 보자. 다음과 같은 Exception을 발생시킨다.

Connection refused: connect

커넥션이 이루어지지 않았다는 말인데, 우리의 의도는 안드로이드 애플리케이션 TCP 서버 소켓에 접속하는 것이다. 동일한 PC 에서 이루어지는데 localhost 라고 하면 되는 줄 알았는데 아니다.

여기서 위의 구글 문서 링크에서 나온 것처럼 Network redirection이 필요하다.
다음과 같이 command 상에서 telnet 접속부터 시작해서 실행해보자. 참고로 에뮬레이터는 5554 포트를 기본으로 할당하여 telnet으로 접속이 가능하다.

telnet localhost 5554
redir add tcp:8002:8002 

사용자 삽입 이미지

위와 같이 로컬 시스템이 8002 포트를 사용하지 않으면 OK 메시지로 응답한다. 참고로 redir 사용법을 보려면 "redir help"라고 입력하면 된다.
위의 명령어 뜻은 다음과 같다.

TCP 형태로 redirection을 하는데, 로컬 시스템의 8002 포트를 VLAN(에뮬레이터에 올라간 안드로이드 애플리케이션) 8002 포트로 연결(redirection) 해 준다.

add <protocol>:<host-port>:<guest-port>

그렇다면 redirection을 해지하는 방법은 add를 del로 바꾸어주면 된다. 다음과 같은 형태이다.

redir del tcp:8002


del 옵션을 사용시에는 system host port만 입력해 주면 된다.

자, 이 상태에서(redirection을 걸어둔 상태에서) 클라이언트 프로그램을 실행해 보자. Connected 메시지를 볼 수 있을 것이다.

이렇게해서 기본적인 Network redirection을 해결할 수 있는데, 클라이언트 소스 코드를 '127.0.0.1'로 host 값을 바뀌어서 해 보자.
(결론은? 잘 된다. 어쩌면 당연한 것을?^^)

하지만, 로컬 시스템이 가지고 있는 IP를 host 값으로 수정하고 실행해 보자. 다시금 "Connection refused: connect" 에러가 발생한다.
그렇다면, 안드로이드 애플리케이션이 실행하고 있는 시스템이 아닌 다른 시스템에서의 접속은? 당연히 안 된다.

문제는 여기에 또 있는 것이다. Server/Client 프로그램은 당연히 서로 다른 시스템의 연결을 지양하고 있는 것인데 이런 문제가 발생한다.
이는 안드로이드 에뮬레이터가 동작시에 localhost에 해당하는 127.0.0.1을 개발 머신의 loopback interface로 alias를 해주기 때문이다.
결국은 로컬 시스템의 IP를 할당하여 수행하지 못한다는 것이다.

이를 해결하기 위해서 다음의 링크를 통해서 stcppipe.exe를 실행해 주어야 한다. 링크에는 sudppipe.exe도 포함되어 있다. 소스와 함께.

Simple UDP proxy/pipe 0.3a  : http://aluigi.org/mytoolz/sudppipe.zip
Simple TCP proxy/pipe 0.4.4a : http://aluigi.org/mytoolz/stcppipe.zip

사용법은 다음과 같다.

stcppipe.exe -b <local IP> <remote hosts> <local port> <remote port>
remote hosts : 127.0.0.1
remote port : emulator 의 host port

이를 응용해서 실행해 보면 다음과 같이 입력할 수 있다.

stcppipe -b 192.168.0.86 l27.0.0.1 8002 8002

이렇게 하고 다시금 로컬에서든 다른 시스템에서든지 Client 프로그램을 실행해보자.
stcppipe 프로그램을 통해서 IN/OUT 되는 포트도 확인해 볼 수 있다. UDP도 마찬가지이다. 각자 테스트해 보는 것도 좋을 거 같다.


이렇게해서 안드로이드 에뮬레이터의 Network redirection 이슈를 마친다. 끝으로 이 문제는 혼자서 고민하고 해결한 것이 아니라 kandroid.org 의 운영자이신 들풀님의 큰 도움이 있었다. 이에 감사의 뜻을 전하며 해당 부분을 Q&A를 통해서 해결하였는데, 링크를 걸어둔다.


# 처음 Emulator IP 관련된 질문후, redir (option)에 대해서 알게된 링크

# 로컬 시스템 내에서의 접속이 아닌 원격 시스템에서의 접속 처리를 해결하게 된 링크

두 번째 링크에도 포함된 링크인데 구글 그룹스에서도 똑같은 고민을 했었고 동일하게 해결한 것을 찾을 수 있다.



다시금 함께 고민해 주신 들풀님에게 감사의 뜻을 전한다.


[마치며]
지금까지의 Network redirection을 통해서 다양한 것을 개발해 보았다. 하지만 실제 개발에서 사용하는 것이 TCP, UDP를 함께 사용하면서 까다로운 네트워크 프로그램을 처리하는 것이었다. 특이한 점은 윈도우에서는 정상적으로 처리되지 않을 때가 많았다.
그래서 Ubuntu 에서 실행해 보니 접속에 대한 문제는 거의 발생하지 않았다. 이러한 원인에 대한 분석은 현재로서는 어려울 것 같아서 다루지 않겠다.
그냥 경험담이라고 생각해 주면 좋겠다.

모두들... 더 좋은 정보나 자료가 있으면 공유해 주세요~^^
블로그 이미지

By훈트

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

저는 Visual Studio 2005 를 쓰는데 최근에 IE 8 을 인스톨했습니다.

그랬더니 디버그가 안 되더라구요. -_-;;

 

그래도 또 검색들어갔습니다.

 

이번 IE에 새롭게 들어간 Loosely-Coupled Internet Explorer (LCIE) 때문이라는군요.

암튼 저는 이렇게 했습니다.

1. RegEdit 을 실행시킵니다.

2. HKEY_LOCALMACHINE -> SOFTWARE -> Microsoft -> Internet Explorer -> Main 열어주세요.

3. 오른쪽 클릭해서 New -> DWORD Value 가서 "TabProcGrowth" 을 생성시켜요.

4. 그리고 생성된 "TabProcGrowth" 를 오른쪽 클릭한 후 "Modify" 열어주세요.

5. Value data 를 위와 같이 "0"으로 해 주세요.

 

다시 디버그해보세요.

블로그 이미지

By훈트

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
안드로이드에서 HTTP를 통한 데이타를 가져오는 방식은,
URL클래스 또는 HttpClient를 사용하는 방법이 있다.

1. URL 클래스 사용

 GET 방식으로 간편히 사용할수 있지만, POST방식은 파라미터를 전달하는 방식이 다르므로
이 대로는 파라미터를 전달할수 없다.

2. HTTPClient 사용
잘못된 예1

HttpPost에 URL과 전달할 파라미터들을 헤더에 추가하여 결과를 얻는다.
HttPost 에 정보 담기
-> HttpClient에서 요청을 실행 HttpResponse로 결과 리턴
-> HttpResponse의 getEntity로 inputstream을 얻어서 결과 얻기

결과를 얻어왔지만,
ㄱ. 파라미터가 제대로 넘어가지 않는 문제와
ㄴ. 한글을 인코딩에서 문제 발생

잘못된 예2

HttpParams 를 사용하여 파라미터를 전달하려함 (후에 안것이지만 HttpParams는 이런 용도가 아니라고 함)

그래서 사용한 방법은
NameValuePair 목록을 가지는 List를 활용하는 방법로 파라미터명 - 값을 List<NameValuePair>로 모아
HttpPost요청에 setEntity(new UrlEncodedFormEntity()) 한다.

결과를 얻어왔지만,
ㄱ. 파라미터가 제대로 넘어가지 않는 문제와
ㄴ. 한글을 인코딩에서 문제 발생

3. 성공한 예

HttpURLConnection을 사용.
PrintWriter를 통해 데이타를 보내고, HttpURLConnection을 통해 InputStream을 얻어 결과를 만든다. -> 파라미터 전송 성공

한글문제는 보내거나 받을때, 모두 최초의 스트림을 만들때 인코딩 문자열을 넘길수 있는 생성자를 통해 한글 인코딩을 전달하여 생성하니 한글도 정상적으로 동작.
블로그 이미지

By훈트

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

트위터 리스트- 복잡한 타임라인,깔끔하게 정리하자.

 

오늘도 즐거운 하루입니다^^ 트위터 코리아 카페분들은 오늘도 즐거운 하루 보내고 계신가요?

많은분들이 어제 트윗으로 많은 문의를 주셔서 오늘 포스팅을 할려고 합니다.

트위터에서, 대략 팔로워 숫자가 백단위일때는, 타임라인에 사실, 이야기가 많지 않습니다.

그래서, 글이 올라오는것을 보면서 답장을 하기도 하고요. 아니면 이야기에 끼어들기도 하면서,

상당히 즐겁게 트위터를 즐길수 있습니다. 하지만 점차 팔로워수가 늘어날수록, 내가 이야기 하고싶은사람과,

또는, 내가 보기싫은 사람들의 글을 너무나도 많이 봐야할 경우가 있습니다. 그러므로, 대안이 필요합니다.

 

트위터 사용법 - 리스트 기능을 사용하자.

 

일단 리스트라는것을 이야기하자면, 일종의 그룹을 묶는 과정이라고 할수 있습니다.

어제 설명드린, " 당 " 개념이나, 해쉬태그의 개념과는 다르다고 볼수 있습니다.

그러니깐 좀더 쉽게 풀어서 설명을 해드리자면,  아래 설명과 같습니다.

 

A,B,C, 라는 사람이 있습니다. A라는 사람은 대학교 친구들, B,C라는 사람들은 고등학교 친구라고 하죠.

나는 A라는 사람의 글과 B,C라는 사람의 글을 따로 보고싶습니다. 즉 구분해서 그사람들이 쓴글을 보고싶은거죠

바로 이럴때, 사용되는것이 바로 리스트 기능입니다. 즉, " 특정 유저들 " 을, 구분해서 이야기 하고싶다는거죠

 

그래서 이 사용법을 이용한다면, 아주 유용하게 트위터를 사용하실수 있습니다.

예전처럼 엉망진창이된, 타임라인이 아니라, 깔끔하게 정리된 타임라인을 보실수 있다는거지요^^

그럼, 아래 사진을 보면서 자세한 설명 보도록 하겠습니다^^

 

 

1) 영문트위터에서 리스트 만들기.

 

 

 

2) 한글트위터에서 리스트 사용하기.

 

 

 

이렇게, 영문판인지, 한글판인지에 따라서, 리스트만드는 방법이 다른데요. 사진을 보시면서 따라가시면 됩니다.

빨간박스를 크게 칠까지 해놓았으니,  문제는 없을꺼라 생각합니다.  그럼, 일단 만들기 버튼을 누르시고요^^

 

 

그럼 리스트를 공개할지 비공개할지, 위의 사진처럼 물어보는 말이 나올겁니다.

여기서 공개,비공개로 나오는 이유는, 다른사람도, 내가 그룹으로 묶어놓은 리스트를 추가할수 있다는거죠.

물론 공개를 했다면 말이죠. 만약에 내가, 카페분들을 리스트해서 지정해 놓았는데, 다른사람이, 제 리스트를,

가져가신다면, 그분들도, 똑같이 카페분들을 리스트화 시킬수 있다는 겁니다.

그렇기때문에, 원치않는 분들은, 꼭 비공개를 체크해 주시기 바랍니다.

 

 

그럼 이름을 적고, 생성하기를 누르면, 리스트가 생성이 되는데요. 중요한것은 현재 트위터에서 한글리스트명을,

지원을 안하는지, 아니면 잠시 버벅인것인지 몰라도 생성이 안되더군요. 하지만 영문으로는 잘 되는거 봐서,

영문으로 리스트명을 정해야 하는거 같습니다. 그래서 저는 트위터 코리아라고 정해놓았습니다.

 

 

그럼 위와 같이, 리스트목록에 새로운 리스트가 작성이 된것을 보실수 있을껍니다.

 

 

그럼 이제, 리스트에 추가할 유저들을 찾아야 겠지요. 이번에는 잠시 저와 대화를 나누셨던 이주님을 찾아보도록 하겠습니다

왼쪽 하단에 보면 검색창이 있죠. 여기서 카테고리를 " 트윗 " 으로 체크를 하시고, 자신의 원하는 사람의 트위터명을 적으신뒤

검색을 하시면 친절하게 검색이 되어지는것을 볼수가 있습니다.

 

 

이렇게 검색이 끝났으면, 검색결과라고 뜨면서 위와같이 결과가 뜨는데요. 여기서 아이디를 클릭해서 넘어가시면됩니다

* 물론 이 방법을 그대로 안가셔도 됩니다, 자신이 아이디를 알고있다면 바로 원하는분의 트윗으로 가셔도 됩니다 *

* 단, 검색을 통해서 다른분들의 트위터를 가셔도 된다는것을 설명해 드리기 위함입니다.  *

 

 

자, 그러면 팔로잉을 할수있는 버튼 오른쪽 끝에, Lists라는 버튼이 보여집니다.

리스트 버튼인데요. 일단 버튼을 클릭하면 바로 아래와 같이 사진이 뜹니다.

 

 

그래서 리스트를 클릭하면, 위에처럼 체크를 할수있는데, 체크를 하면, 이분의 트위터가 제 리스트상 [ 그룹 ]에

추가가 되어진다는것을 이야기 합니다. 일종의 즐겨찾기와 비슷한 개념이 되겠네요.

 

 

그러면, 바로 위에사진처럼, twitterkr 이라는 리스트를 클릭하면, 추가한 이주님 ( Y2ju )님의 글만 보여지게 됩니다.

만약에 이것을 여러명을 한다면, 그 특정분들만, 이쪽에서 오늘 쓴글들을 보실수 있는거지요.

예를들어서, 당원들끼리, 친구들끼리, 연인끼리, 등등 리스트를 통해서 그룹을 맺고 효율적으로 대화가 가능해 집니다.

바로, 이것이 리스트 사용법인것이지요^^ 어떻게 잘 보셨는지 모르겠습니다.

 

오늘은 제가 눈이 침침해서 거슬리는 바람에, 제대로된 포스트를 했는지 모르겠습니다.

도움이 되셨으면 좋겠는데 말이죠. 언제든지, 궁금하신 사항이 있다면 연락을 주시기 바랍니다.

 

아울러 더욱더 많은 트위터 사용법을 알고싶으시다면, 아래 트위터 코리아를 클릭해주시면, 카페로도 이동이 되어집니다.^^

 

블로그 이미지

By훈트

,