• 카테고리
    • 전체 글

    • 카테고리1
    • 카테고리2
    • 카테고리3
    • 카테고리4
  • 태그
  • 방명록

'분류 전체보기'에 해당되는 글 1249건

  • 2012.10.19 넥서스(NEXUS) S 순정롬 업데이트 프로그램 24
  • 2012.10.12 이젠 Firefox 로. 2
  • 2012.10.08 IOS6에서의 카카오톡 문제 - 주소록 동기화 4
  • 2012.10.04 스마트 폰을 어떻게 사용해야 하나? - 1
  • 2012.10.04 내 친구가 드디어 스마트폰을 샀다. 그런데...
  • 2012.09.25 DataRow 유틸-Util 함수를 만들자
  • 2012.09.24 MVNO ( mobile virtual network operator )-TPlus 가입!
  • 2012.09.20 iOS6 업그레이드

넥서스(NEXUS) S 순정롬 업데이트 프로그램

기술자료/모바일 2012. 10. 19. 11:19


nexusupdater_exe.zip

NexusUpdater_src.zip

usb_driver.zip


앞서 "넥서스 S 젤리빈 순정롬 설치하기" 라는 글을 썼습니다.. 

별 다른 글은 아니고, 구글 펌웨어 다운로드 페이지에서 다운 받은 순정롬을 간단(?)하게 업데이트 하는 방법인데, 문제는 그 안에 배치 파일이 .sh 파일로 된 Unix 기반의 파일이라는 사실입니다. 
( 요즘 나오는 젤리빈용 업데이트 롬 파일안에는 .bat 파일이 있어서, 윈도우 에서도 실행 할 수 있습니다 ).

그리고 fastboot 과 같은 도구 같은 경우 안드로이드 SDK에서 뽑아내야 하는데, 그 작업도 이해가 안되는 경우 전혀 손도 못대고, 손댈 수 있다고 해도, 해당 도구만 다운 받기가 생각보다 어렵습니다.

또, 매번 페이지 접속해서 해당 압축 파일 받고, 압축 풀고, 배치 파일 실행하고 하는 그 일련의 작업도 귀찮긴 매한가지 였죠. ( 역시 이런 건 컴퓨터가....)

그래서 그냥 만들었습니다. ㅋ

프로그램 전체는 Visual Studio 2010 기반으로 해서 .NET Framework 2.0 기반으로 만들어져 있으며,
내부적으로 압축을 풀기 위해 ICSharpCode.SharpZipLib 라이브러리를 ( http://www.icsharpcode.net/opensource/sharpziplib )를 가져다 썼습니다.

주의 사항

0. USB 드라이버가 반드시 설치되어 있어야 합니다.

아래 댓글의 숭숭구리님께서 언급해주신 USB 드라이버 <- 이거 해결해 주셔야 합니다.

Nexus의 전원을 끈채로 연결 한 뒤에, 켤 때, 전원 + 볼륨 상 을 눌러 주셔야 합니다.
그러면 알 수 없는 장치로 인식되는 경우 Driver를 설치해 주셔야 합니다.

설치하는 방법은 http://mynexusone.tistory.com/1 에 방문하시면 쉽게 찾아보실 수 있습니다.
여기서는 Windows 7 x64 버전을 기준으로 간단하게 설명 드리겠습니다.

먼저, 상단에 위치한 usb_driver.zip 을 다운 받으시고 적당한 곳에 압축을 푸세요.
( http://www.hind.pe.kr/attachment/cfile28.uf@26341B4D51C122EA118B7D.zip )

이미 장치가 연결되어 있으면 하단 트레이에서 장치 연결 아이콘을 찾으세요.

아이콘 위에서 오른쪽 버튼을 누르면 메뉴가 뜨는데, 굵은색 표시가 된 부분을 클릭하세요.

그러면 장치 관리자가 뜨는데, 드라이버가 제대로 설치되어있지 않으면 Android 1.0 이런식으로 잡혀 있을 겁니다.

해당 아이콘에서 오른쪽 버튼을 눌러 속성에 들어가시기 바랍니다.

속성 창에서 상단에 있는 "하드웨어" 탭을 클릭하세요. 그리고 하단에 있는 속성 버튼을 클릭하세요.


그러면 드라이버에 대한 상세 창이 뜨는데, 하단에 있는 "설정 변경" 버튼을 한번 누르세요.


그러면 드라이버 업데이트 버튼이 활성화 됩니다.

이제 드라이버 업데이트 버튼을 클릭하세요.

드라이버를 찾는 방법에 대한 옵션을 선택하는 창이 뜨는데, "내 컴퓨터에서 드라이버 소프트웨어 찾기"를 선택하세요. 자동 검색을 하게 되면 윈도우즈 업데이트 사이트까지 뒤지는데, 의외로 시간이 너무 걸립니다.


경로를 묻는 창이 뜨는데, 직접 장치를 선택하겠다는 항목을 클릭하세요..

이제 장치 종류가 나오는 창에서 모든 장치 보기를 선택하세요.

드라이버 목록 창에서 이번에는 "디스크에서 찾기" 버튼을 클릭하세요.

이제 드라이버 파일 찾기 창이 뜨면 "찾기" 버튼을 클릭합니다.

아까 압축을 푼 드라이버 파일 위치까지 가면 android_winusb.inf 파일이 보이는데 그것을 선택합니다.

그리고 선택하고 나와서 확인 버튼을 클릭하면 다음과 같은 창이 뜹니다.

맨 위에 있는 Android ADB Interface를 선택하고 다음을 클릭합니다.

설치가 진행되면 이 드라이버가 올바른 드라이버인지 여부를 묻는 창이 뜨는데, 그냥 "네"를 선택하세요.
그리고 중간에 드라이버 확인이 또 들어가는데, "설치" 버튼을 클릭해주세요.

설치가 완료되면 이제 정상적으로 이 프로그램을 사용하실 수 있습니다.


1. Nexus S 에서만 테스트되었습니다.

애석하게도 필자는 이 프로그램을 만들 때 Nexus S로만 했습니다. 즉, Nexus Galaxy, Nexus 7 으로는 전~혀 테스트 안되어 있습니다. 테스트 가능하신 용자분들이 계시면 해보시고, 이상이 발견했을 때 저에게 말씀해주시면 업데이트 하도록 하겠습니다.

2. 휴대폰 내부가 완전 초기화 됩니다.

이거 중요한데요, 이 업데이트 방법을 취하면 기계가 완전히 초기화 됩니다. 진짜 완벽하게!
마치 공장에서 나온듯 깔끔하게 지워져서 초기화 됩니다. 만일 자신의 휴대폰에 중요한 자료가 있거나, 미처 백업해본적이 없는 경우 시도하지 마십시요... 커펌 올리다 벽돌 되거나 했으면 모르겠지만, 잘 사용하는 휴대폰을 가지고 단순히 업그레이드/다운 그레이드 한다고 설치하시면 나중에 피눈물 나옵니다. ( 미처 업로드 못한 사진 등등, 친구와 연인과 대화했던 목록들 등등. )

3. 롬 파일 다운 위치는 내 문서의 NexusUpdate 라는 폴더 입니다.

롭 업데이트 하기 전에 내 문서의 위치를 기준으로 용량이 얼마나 남았는지 확인하시고 진행하시기 바랍니다. 보통 롬 하나가 100~200 메가 안팎이고, 이것을 압축을 풀고 준비하게 되면 보통 3~500 메가 정도의 여유 공간이 있어야 합니다. 요즘은 대부분 테라 사이즈의 용량의 하드를 가지고 계셔서 큰 문제가 없을지 모르겠지만, 간혹 용량이 무척 부족하신 분들이 있습니다. 넉넉히 500메가 정도의 공간을 확보하시고 진행하시기 바랍니다.

꼭 내 문서 위치 입니다. ( 다른 위치를 잡으려 했으나, 윈도우 보안 문제등이 걸리는 경우 알 수 없는 오류들이 너무 많아서 다른 위치 설정은 안됩니다. ㅋ )

4. 인터넷과 연결되어야 합니다.

여기서 사용되는 모든 자료는 인터넷을 통해 받아옵니다.

먼저 ROM 파일 목록은 https://developers.google.com/android/nexus/images?hl=ko-KR 에서 직접 페이지를 읽어서 정리해서 표출 합니다. 그래서 만일 해당 페이지를 열 수 없는 경우에는 이 프로그램도 사용할 수 없습니다. 또한 페이지가 리뉴얼 되서 해당 내용을 추출하지 못하는 경우에도 사용할 수 없습니다. ( 만일 페이지 내용을 분석하지 못하는 경우 다시 업데이트를 해야 합니다. )

그리고 fastboot 과 같은 도구는 제 홈페이지 ( http://www.hind.pe.kr/attachment/cfile1.uf@031B7843507F91551911D4.zip )에서 다운로드 합니다. 만일 홈페이지 접속을 못해서 도구를 다운 받지 못하면 역시 이 프로그램을 사용할 수 없습니다;;;;

5. ROM 파일을 너무 많이 다운 받지는 마세요.

ROM 파일을 다운 받아 놓으면, 이 프로그램을 실행할 때, 해당 파일이 원본인지 여부를 확인하기 위해 Check-Sum이라는 작업을 합니다. 이 경우 모든 ROM 파일에 대해서 검사를 하게 되는데, 이게 은근 시간을 잡아 먹습니다. ( 100~200 메가 짜리 파일을 일일히 열어 모두 합산을 한 뒤, 값을 얻어오는 작업이다 보니... )

내문서\NexusUpdate 폴더 안에서 불필요한 롬 파일들과 하위 폴더들은 모두 삭제하시고 진행하세요.

 

사용법

먼저 프로그램을 실행하면 다음과 같은 화면이 뜹니다.

콤보 박스가 두개 있는데, 하나는 제품별 필터 기능이고 두번째는 그 제품에 속한 롬들을 나타납니다. 현재 펌웨어 다운로드 페이지에 가면 아래와 같은 제품들만 제공한다. 그래서 아래와 같은 화면이 뜹니다. 업데이트할 폰의 제품명을 선택하시면 됩니다.

해당 제품을 선택하면 그에 한정된 롬들 목록을 보여줍니다..

아래의 그림은 Nexus S 목록인데, Nexus S 제품이나 지역별 롬들이 모두 표시됩니다. (우리나라에서 출시된 Nexus S의 경우 4G와 850Mhz version은 없으므로, 반드시 Korean Version 이나 Worldwide version을 사용하셔야 합니다.)

적절한 제품과 롬을 선택했으면 이제 해당 제품의 롬을 다운 받습니다.

다운 받는 법은 제품 목록 밑에 위치한 다운로드 버튼을 누르면 됩니다.

그러면 자동으로 펌웨어 페이지에서 다운로드를 하고, 압축까지 푼다. 진행 정보는 아래의 로그 창에 찍힙니다.

어설픈 마법사 화면이지만, 다운로드와 압축 풀기가 정상적으로 끝나면
업데이트를 하기 위한 다이얼로그가 자동으로 뜹니다.
맨 처음에는 fastboot 화면으로 들어가도록 요청하는 화면입니다.

여기서 fastboot 화면이란, Nexus 폰의 일종의 관리 화면으로 굳이 컴퓨터로 말하자면 BIOS 설정 화면 같은 것입니다. 넥서스 S를 기준으로 보면 볼륨 UP 버튼을 누른 상태로 전원을 켜면 나오게 됩니다. ( 다른 제품은 모르겠습니다 ^^)

Fastboot 화면에 들어온 것을 확인했다면 '다음'을 클릭하세요.

다음 화면은 Lock을 푸는 화면입니다. 보통 별도 펌웨어 작업을 해본적이 없다면 대개의 폰에는 Lock이 걸려 있습니다. 이것을 해제해야 fastboot을 이용한 펌웨어 업데이트가 가능합니다. Unlock을 하려면, "Yes"를 선택해야 하는데, 터치는 안되고, 볼륨 조절 버튼을 눌러서 "Yes"를 선택한 뒤에 전원 버튼을 눌러주면 Unlock이 됩니다.

만일 Lock이 걸려 있지 않으면 이 화면이 잠깐 보였다가 다음 업데이트 화면이 뜰겁니다.

자 그럼 이제 모든 업데이트 준비는 완료되었습니다.

'다음' 버튼을 누르고 휴대폰을 보면서 업데이트가 잘 되고 있는지만 가만히 보시면 됩니다.
(이 때 가급적이면 다른 동작은 자제하시기 바랍니다. 심심하시다고 웹 브라우징 하거나 게임 하시거나 이러면 업데이트가 실패할 수 있습니다. )

보통 업데이트 내용은 휴대폰 맨 아래 쪽에 영어로 된 글이 보이는데, 그 내용에 변화가 있으면 됩니다. 업데이트 중에는 자동으로 휴대폰이 껐다 켜집니다.

마지막으로 Lock 하는 화면이 나옵니다.
보통 위의 업데이트 과정을 거치면 자동으로 업데이트한 버전으로 부팅이 완료되기 때문에, 자동으로 Lock을 거는 것은 어렵습니다. 그러므로 수동으로 다시 fastboot 화면으로 들어가야 합니다.

물론 unlock 상태에서 계속 사용할 예정이면 무시하셔도 무방합니다.

휴대폰을 재부팅 한뒤, 앞에서 제시한 내용 처럼 Fastboot 화면을 띄웁니다.
FastBoot 화면이 떴으면 '다음'버튼을 누르면 됩니다. 그러면 자동으로 Lock을 걸고 휴대폰을 Reset 합니다.

이제 프로그램 종료하시면 됩니다.

 

정리

정상적인 상황에서의 사용은 큰 문제가 없을 것입니다.
하지만, 모든 사람이 똑같은 환경에서 사용하리라 생각되지는 않습니다.
Windows XP에서 실행하시는 분, Vista에서 실행하시는 분, 심지어는 8에서 실행하실 수도 있겠죠.
x86이면 모르겠지만, x64의 경우도 있을 것이며, USB 2.0 이 아닌 1.0 혹은 3.0일 수도 있습니다.

애석하게도 각 케이스별로 모두 테스트한 프로그램은 아니기 때문에, 오류가 발생할 수 있습니다.

오류가 발생했다면, 내 문서\NexusUpdate 폴더 안에 .Log 파일이 있는데, 그 파일을 저에게 알려주시면 됩니다. 그 내용을 비밀 댓글을 통해서 알려주시면 됩니다.

개발된 모든 소스와 프로그램은 Open 되었으며 여기서 다운로드 받으실 수 있습니다.
(나중에 Source는 네이버 오픈 소스 사이트에 올릴 예정입니다. )

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

이젠 Firefox 로.

잡글 2012. 10. 12. 10:53

인터넷은 미지의 탐험을 방불케 할 정도의 고대 때는 선택의 여지 없이 넷스케이프라는 웹 브라우저를 사용할 수 밖에없었다. 선택의 여지조차 없었기에, 아무런 불편함 없이 사용했다.

그러다 MS에서 아예 운영체제 내에 Internet Explorer를 탑재하는 순간 산불 번지듯 인터넷은 확산되었고, IE 6 때는 그 절정에 달했다. 운영체제만 설치하면 별도로 설치하지 않고도 바로 인터넷에 연결할 수 있었으니, 당연히 다른 웹 브라우저를 볼 필요도 없었다. 존재하면 사용하면 되었으니까.. 결국 넷스케이프 뿐만 아니라, 군소 웹 브라우저는 IE에게 먹혀 갔고, 사라지면서 점점 잊혀졌다.

Internet Explorer Security Bug: Loophole for Hackers

점점 발전하는 웹 사이트들과 컨텐츠. 그런데, 애석하게도 MS는 IE 6에서 더 이상의 개발 없이 패치만 하는데 그쳤다. 그에 반해 점점 웹 컨텐츠의 사이즈가 커지고, 자바스크립트와 CSS의 도배질에 IE는 더 이상 버틸 여력이 없었다. 진짜 웹 페이지를 로딩하는데 너무도 힘들어지게 되었다.

이 때, 군소 웹브라우져 중, 오페라 라는 웹 브라우저를 잠깐 사용했다. 다른 이유도 아닌 오로지 로딩 속도!

빠른 로딩 속도와 반응은 IE에서 주었던 불만을 말끔히 씻어내는 것 같았다. 하지만, 국내 웹 사이트들과의 궁합은 영 맞지 않아 화면이 깨지거나 일그러진 경우가 많았다. 당시의 사이트는 오로지 IE 하나만 보고 만든 사이트들이 대부분이다 보니 당연히 IE만 지원했다. 그러니 군소 웹브라우저 였던 오페라에서 제대로 보이지 않는 화면에 대해 언급해 봤자, 웹 개발자들에게 간단히 묵살되었고, 결국 국내 사이트 방문은 IE, 해외 사이트는 오페라 정도로만 이용했다.

그러다가, 어느날 넷스케이프의 전신인 모질라 프로젝트에서 오픈 소스 기반으로 만들어진 순수한 웹브라우저가 탄생했고, 그것이 바로 FireFox다. 정말 심플한 화면에 웹브라우저로써의 속도감을 유지하면서 완벽히는 아니지만 그래도 그러저럭 사용할만한 브라우저 같았다.

속도도 UI도 상당히 만족스러웠다. 특히 플러그 인의 기능은 IE와는 사뭇 다른 경험을 많이 제공해 주었다. IE에서 사용가능한 플러그인이 Active X라는 것인데, 이게 은근 스트레스다. Active X의 보안은 쥐약이고(Active X는 IE를 쥐락 펴락할 수 있는 독립 프로그램의 레벨이다), 그 편리함은 우수하지만, 그 뒤의 해악스러운 문제점들은 지금까지 이어오고 있다. 최소한 FireFox는 이런 Active X와는 다른 구조의 플러그 인이다 보니, 안전하게 사용할 수 있다. 또 사용자의 편의를 위해 구성하는 플러그인 개발자들도 그 숫자가 늘어났다. 당연히 Firefox의 점유율이 높아져 갔고, IE 는 IE6로 개발을 때려치겠다는 선언 번복하고 7, 8 등 계속 개발했다.

그런데, 2.X 즈음 부터 점점 느려지기 시작하면서 3.X 때는 진짜 아니올씨다가 되버렸다. 일단 첫 로딩 부터 시작해서 화면 띄우는데 까지 너무도 지체되는 경우가 많았다. 결국 접고 다시 IE를 사용했다.

그러다 혁명같은 웹브라우저가 나타났는데, 그게 바로 Google의 Chrome이다.

이거 진짜 배기다 싶을 정도로 로딩이 무척 빠르고 정확했다. 자바스크립트를 도배를 하든, 이미지를 도배를 하든, 인터넷과 CPU 만 되면 그냥 로딩을 해버렸다. 그냥 화면이 주루룩 주루룩...

더욱이 이 때 Google 로만 검색하는 나로써는 주소창에서 바로 검색어를 입력하면 그 즉시 결과가 보이는게 정말 마음에 들었다. 정말 끝판왕을 만난 기분이랄까...

 

그런데.. 어느 순간 부터 Chrome도 변질되었다.

일단 로딩이 점점 느려져 갔다. 그래서 한번 프로세스 목록을 보는데...

image

순간 떠 있는 프로세스 갯수에 그 용량까지.. 어느 순간 순간 부터는 아예 구글 계정으로 통합되었는데, 그 때 부터 로딩의 압박은 더욱 심해져만 갔다.

FireFox 3.X 대의 회귀같다고나 할까.... 실망에 실망을 거듭하는 중, 우연히 FireFox 에 대한 기사를 보았고, 그냥 FireFox나 깔아 볼까 하는 마음에 설치를 했다.

현재 버전 16.0.1

image

UI는 4.X 때의 모양에서 크게 바뀐 것은 없는데, 결정적으로 Loading이 예술이 였다. 초창기 미니멀리즘을 다시 살린듯. 용량은 단일 프로세스로 1~200 메가씩 하기는 하지만, 그 정도는 그냥 그냥 넘어갈 수준. IE도 페이지 몇개 열었다 닫았다 하는 순간 순식간에 늘어났을 때의 용량에 비하면 저렴하다고 생각된다.

 

요즘은 웹 브라우저의 춘추 전국 시대에 접어든듯.

Internet Explore - Google Chrome - Firefox - Safari - Opera 등등.

모바일 폰으로 든, PC든 간에 웹 브라우저의 종류는 다양하게 있고, 지금 사용된다.

어떤 특정 웹 브라우저를 권장하기 보다는 이젠 직접 사용해보고 골라야 겠다. 또, 일정 기간이 지났으면 다른 브라우저로 갈아타 보는것도 답일듯.

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

IOS6에서의 카카오톡 문제 - 주소록 동기화

기술자료/모바일 2012. 10. 8. 13:35

문제

IOS6로 업그레이드하고 난 뒤의 흥분이 가라앉을 즈음, 문득 어느날 부터 카카오톡이 이상했다.

맨 처음 문제는 별명으로 정해진 이름이 나오는 문제.
친구 목록을 보면, 친구의 이름이 안나오고, 갑자기 별명으로만 나오는 것이다. 카카오톡의 프로필 상에 넣은 이름인데, 여기에 자신의 개성을 담뿍 담은 분들 같은 경우, 도무지 유추가 되지 않는다. "주워니" 라든가, "한처리" 이러면 대략 유추라도 하는데, 만일 "나의 날개" 라든가, "말하는대로 이루어지리라~" 의 경우에는 누군지 알 수 조차 없다.물론 이름을 내 입맛대로 수정할 수는 있지만, 그런 분들을 일일히 찾아 수정하기란 쉽지 않다.

그리도 또 하나, 상대방 프로필에 전화번호가 표시되지 않는 문제다.

예전에는 위쪽 그림 처럼 전화번호를 직접 클릭하는 곳이라도 있었는데, 아예 사라져서 나타나지 않는 문제다.
그래서 최소한 전화번호로 라도 유추해볼려고 했는데, 불가능.

마지막으로 친구가 자동 추가가 안되는 문제다.
분명 주소록에 보면 등록되어 있는데도 불구하고, 해당 친구가 등록되지 않는 문제였다. 요 근래 간신히 스맛폰을 마련한 친구였는데, 카톡으로 연락하려니까, 등록이 안됐다는...

이런 문제점을 바라보다... 광고 COPY 처럼 "무언가 잘못됐다...." 라는 생각이 떠나질 않았다.

결국 어제 카톡 문의점에 문의를 해보기까지 했다.

그러나 당장 카톡을 정상화 시켜야 겠고, 무엇이 문제인지 하나씩 조건을 줄여 보았다.

1. 사람 이름 문제.
성/이름 이런 식으로 나누어 쓰는게 영 불편한 나로써는 모든 연락처를 쓸 때, 모조리 이름에다가만 넣었다.
그래서 카톡이 인식을 못하나? 싶어 어제 밤에 하루종일 연락처를 뜯어 고쳤다.

2. 전화번호 문제.
구글링을 하다 보니, 전화번호 앞에 +82가 붙어야 인식한다는 글이 있었다. 물론 아이패드 이야기 이긴했지만, 굉장히 의심이 갔다. 그래서 일부 사람들의 전화번호에 +82를 넣어보았다.

3. 전화 걸기 지원.
아이폰에는 "전화 걸기 지원" 이라는 옵션이 있는데, 이 옵션을 사용하면 번호를 자동으로 분석해서 처리한다고 한다. 이 옵션 때문에, 검색이 안될 수 있을지도 모른다는 생각에 꺼보기도 해보고, 켜보기도 했다.

4. 영문 버전 카카오톡?
지금 애플 계정을 미국으로 해놓고 쓰고 있다. 어플 종류도 그렇고, 받고 싶어하는 어플들 대부분이 미국 계정이라, 미국 계정으로 옮겨 사용했다. 그런데 이 어플에 국가별 설정이 있을까 하는 마음에 다시 한국으로 바꾸어 다운 받아 설치해봤다.

5. 탈퇴 후 재가입.
일단 전화번호 인증 체계다 보니, 탈퇴도 무척 간편하고 쉬웠다. 설정에서 메뉴 한두개만 타고 들어가면 바로 탈퇴가 가능했다. 물론 재가입도 간단하다. 하지만, 하루에 1번 밖에는 재가입이 안되는듯... 2번 이상하려면, 24시간 후에 된다는 알싸한 알림 메시지가 뜬다.... 그래서 탈퇴는 딱 한번 해봤다. 어플도 지워보기도 했다.

 

결론.

어제 별별 뻘짓을 다하다가, 친구에가 갈취(?) 한 넥서스S로 Comeback 하려했다. 그런데, 왠걸..USIM을 옮기는데 옮겨지지 않는 것이다. 당장 아침에 연락올데는 없지만, 카카오톡을 활성화 하려면 SMS를 받아야 하는데, USIM 칩이 안 옮겨지니, 결국 SMS는 못받는 사태가 발생했다. 아이폰으로 다시 옮겨왔는데, 여전히 카톡과 연락처가 동기화 되지 않았다.

그래서... 연락처와 몇몇 정보를 적당히 iCloud에 백업하고, 폰을 초기화 했다.
( 설정 -> 일반 -> 재설정 -> 모든 콘텐츠 및 설정 지우기 )

아아.. 완전 초기화를 하니 5분 정도 되자 드디어 폰이 활성화 되었다. 부랴 부랴 iCloud 계정을 연결하고, 주소록 다운 받고, 필수 어플 몇 개를 다운 받자, 주소록도 모두 내려 받았다. 그리고 난 뒤, 카카오톡을 받아 설치했다.

그리고 띄워서 인증하고 연결해보니....

뭔가 궁지렁 거리는 알림 메시지 창이 뜨면서 주소록 접근의 활성화 여부에 대한 확인 창이 떴다.

즉 "개인 정보 보호 기능" 덕에 카카오톡이 주소록에 접근이 안된거였고,  결론 적으로는 카카오톡에게 주소록 접근
권한을 주면 되는 것이였다. 최초 설치할 때, 앵간한건 승인해줘야 정상적으로 동작했다.

만일 설치시 제대로 하지 못했다면 설정 -> 개인정보 보호 -> 주소록에 들어가서 꼭 "카카오톡"에게 권한을 할당했는지 체크해봐야 한다.

보안을 강화했으니, 그 규칙에 맞추는 것은 당연한데, 카카오톡에서도 그에 대한 대비를 좀 잘 해주었으면 좋았을 뻔했다는 생각이다. 일단 오늘 중에 카카오톡의 답변을 받아보고, 그들의 초동 대처는 어떤지 - 물론 내가 제시한 시점보다 더 일찍 이런 저런 사람들의 의견이 있을테니 초동까지는 아닐지도 모르겠다. - 보려고 한다.

 PS. 

요근래 잠시 안드로이드 폰으로 갔다가, 다시 아이폰으로 돌아올 때, 인증된 기계가 변경되었다고, 다시 설치하게 하더군요. 더욱이 갑자기 폰 자체가 다운까지 되어 다시 복구하는 사태까지...

그러다 보니, 카카오톡을 다시 지우고 새로 설치했습니다. 그러자, 이번에도 주소록이 동기화가 안되었는데요..
제가 한 방법이 이렇습니다.

1. 위의 설정 -> 개인정보 보호 -> 주소록 에 들어가서, 권한 할당을 끄세요.

2. 다시 켜세요.

3. 카카오톡을 켜놓고, 기다려 보세요... 되더군요. ㅋ

 (그냥 시간차 일수도 있겠지만, 아무리 기다려도 안되면 저처럼 해보세요)


관련 뉴스 :

http://www.betanews.net/article/562791

http://ddaily.co.kr/news/news_view.php?uid=91801

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

스마트 폰을 어떻게 사용해야 하나? - 1

기술자료/모바일 2012. 10. 4. 15:10

내 친구가 드디어 스마트폰을 샀다.

여기까지는 좋다. 그러나 자신의 라이프 스타일을 알 수 없고, 모르기에 스마트폰의 가치는 완전 평가 절하 상태. 그래서 스마트 폰 = 피처폰 + 카카오톡 정도로 파악하고 사용하고 있다. 그것도 평소 2만원 안으로 나오는 전화요금을 3만원 넘게 내면서 말이다.

이런 친구에게 스마트폰 처음 사용자라고 간주하고 하나씩 스마트 라이프에 적용해보았으면 하는 부분들을 정리한다.이 내용은 안드로이드 폰을 기준으로 설명하도록 한다.

1. 일정

예전 부터 스마트폰의 전신인 PDA/PDA 폰을 사용해와서 인지, 이런 부분이 제일 민감하다. 특히 일정관리는 정말 중요한 부분 같다. 뭐든지 잘 기억하는 사람이면 모르겠지만, 가족부터 업무까지 다양한 분야의 일정들을 세세히 기억하는건 정말 무리수이다.

늘 가지고 다니면서 해당 일의 하루나 이틀 전에 그 사실을 누군가가 미리 알려주면 어떨까라는 생각을 해왔고, 그 답을 바로 이 스마트폰의 일정이 해결해 준다. 물론 피처폰 내에도 일정 관리하는 도구는 있다. 하지만, 그것은 오로지 폰 내에서만 되고, 실제 외부에서 참조하기는 어렵다. 더욱이 피처폰이 망가져 버리면 영원히 그 일정은 알 길이 없어진다.

스마트폰의 강점은 바로 이런 정보를 서버에 저장해 두고 외부에서 장비와 관계없이 확인이 가능하다는 것이다. 국내 서비스에는 다음이나 네이버등 다양하게 있지만, 기본적으로 안드로이드 폰에 연결하는 계정이 구글 계정이기에 그 구글 계정을 연결해서 쓰면 자동으로 체크가 된다.

폰에서 사용하는 방법은 폰의 설정마다 틀리니 알아서 사용하면 큰 문제가 없다. 다만 일정 내용과 구글 서버와의 동기화만 잘 맞추면 된다.

서버에서 보자. 아래의 URL을 입력하면 아이디와 암호를 묻는데, 여기에 자신의 구글 계정을 입력한다.

https://www.google.com/calendar

그러면 다음 그림과 같은 화면이 뜬다.

 

직접 서버에 추가/삭제/편집을 할 수 있다. 일정시간이 지나면 자동으로 자신의 폰으로 데이터가 내려온다. 역으로 스마트폰 내에서 추가/삭제/편집을 하면 그 내용이 이 서버로 올라온다. 집에서는 일일히 스마트폰의 작은 자판으로 입력하지 않고, 웹 브라우저를 띄워 일정을 관리한다. 그리고 밖에서는 관리된 일정 내용을 확인하고, 급하게 잡힌 일정들을 입력해 놓는다.

최소한 자신이 관리하는 일정들이 등록이 되고, 굳이 비서가 없어도 스스로 일정 관리가 수월하게 된다. 최소한 자주 보는 스마트폰을 통해 관리되는 일정을 통해 겹치기 약속 방지하고, 놓치지 않고 일정에 참여 할 수 있다.

 

2. 카카오톡.

사실 스마트폰을 쓰는 이유 1순위가 바로 이 카카오톡이다. 앞서도 말했듯이 실제 대부분 어르신 급의 스마트폰 사용 유형을 보면 대부분 피처폰 + 카카오톡 정도로 사용하는게 일반적이다. 당연하듯이 말이다.

그래서 카카오톡의 설정이 걸림돌이지 그 외에 한번 연결되면 그 다음은 일사천리다. 사용이 어려운 것도 아니고, 주변에 물어볼데도 많다.

다만 주의 할 점은 있다.

이 카카오톡은 인터넷 기반으로 동작한다. 즉, 3G 나 WIFI를 통해 인터넷이 연결되어야 메시지를 주고 받을 수 있다. 만일 WIFI가 없거나 3G가 안터진다면, 메시지를 송수신이 안되기 때문에, 이 카카오톡을 보냈다고, 100% 상대방이 받는다는 장담은 할 수 없다.

그래서 상대방이 이 메시지를 봤는지 아닌지 여부는 대화에 있는 "1" 이라는 표시를 본다. 지금 메시지를 읽지 않는 사람 숫자를 나타내는 것이다.

저게 계속 1이라는 것은 상대방이 아직 카카오톡을 띄우지 않았던가, 인터넷이 연결되지 않아서 이다. 읽고 난 뒤 씹었다고 간주하지는 말아야 한다. 만일 급하게 전달해야 되는 메시지가 있다면, 반드시 80자 글자 안으로 문자 메시지를 보내도록 한다. 이건 최소한 전화기가 연결된 지역이라면 무조건 전달 된다.

그리고 앞서 말했듯이 WIFI나, 3G 연결이 필요했다고 말했는데, 만일 WIFI가 안되고 3G만 되는 환경이라면, 결국 3G로 인터넷 연결을 한다는 것이다. 물론 요즘은 패킷당 가격이 많이 저렴해져서 큰 부담은 안된다고 하지만, 3G 인터넷 정액제가 아니거나, 데이터 통신 쪽에 비용이 비싸게 먹히는 요금제 인 경우 3G 요금을 물게 된다. 대부분 데이터 정액제라 큰 문제는 없지만, 만일 보유한 무료 데이터 용량을 초과했다면, 그대로 요금은 나간다. 그래서 무조건 무료구나 싶어서 마구 날리는 것은 답이 아니다.

하여간 꽁짜는 없다.

 

3. 인터넷 뱅킹.

요즘 제 1 금융권의 경우 대부분 스마트폰과의 연결을 위한 앱을 제공한다. 이 앱들을 사용하면, 스마트폰을 이용해 통장 조회에서 이체까지 다양한 서비스를 받을 수 있다. 또, 앱 사용 활성화 작업이 진행 중인 은행의 경우 이벤트 등 다양한 혜택이 있다.

제 2 금융권 이상의 경우에는 앱을 별도로 만들어 출시한 경우는 없기 때문에, 패스.

PC는 없고, 당장 송금이 필요하거나, 잔액이 얼마 남았는지를 체크할 때 정말 유용하다.

 

4. 증권

개미 투자자의 경우 대개 직장을 다니게 되는데, 증권 확인이 일상이 되신 분들이 많다. 그나마 HTS가 대부분의 증권사들이 지원하기 때문에, 업무용 PC에 설치해서 몰래 몰래 보는 경우도 많다.

하지만, 사내 보안이다 뭐다 하는 경우 사내 공인 응용 프로그램외 다른 응용 프로그램을 설치못하는 경우도 있고, 상사의 눈치도 있어서 그리 쉬운일은 아닐 것이다. 이 경우 스마트 폰이 있다면 스마트 폰에 해당 앱을 설치해서 볼 수 있다.

단순 증시 확인에서부터 주문까지 대부분 앱 내에서 확인/처리가 가능하다.
화장실에서까지 들고가는데 전혀 부담안되기 때문에, 많이들 하시는 것 같다.

 

5. 지도 서비스

지도 서비스가 없어도 그냥 그냥 원하는 곳을 다 찾아가시는 분들은 별 상관 없지만, 간혹 전혀 모르는 곳을 방문할 때, 주소만 가지고 찾아가기란 그리 쉽지 않다. 그렇다고 종이 지도를 사본다고 해도, 해당 지역을 상세하게 표시하는 지도는 비싸기도 하고, 자주 방문 하는 것이 아니라면 해당 위치 주변 지도를 사서 본다는 것도 어불 성설이다.

스마트폰이 있다면 "구글 지도", "다음 지도", "네이버 지도" 와 같은 앱을 설치해서 즉시 해당 위치를 확인해 볼 수 있다. 지금 자신이 어디 즈음 있는지, 해당 위치는 어디 있는지 등을 바로 바로 지도상에서 확인이 가능하다.

또, 구글이나, 다음의 경우 Street View를 제공한다. 그래서 특정 위치의 주변 경관 역시 확인해 볼 수 있다. 처음 가본 길도 주변 경관이 어떻게 생겼는지를 알 수 있어, 단순히 지도를 볼 때 보다 훨씬 쉽게 갈 수 있지 않을까?

거기에 더불어, 이 지도 서비스도 발전해서 자동차로 가는 길에서부터, 대중교통 및 도보까지 원하는 형태로 길을 찾아달라고 하면, 원하는 형태의 길을 알아서 경로를 만들어 나열해준다. 대중교통이면 지하철로 어떻게 가고, 버스면 몇번 버스를 타야 되는지 언제 출발하는지 등을 나열해준다.

생뚱맞은 길을 찾고 있다면, 이런 지도 관련 앱들을 사용해서 한번 접근해보면 정말 편리하고 쉽게 원하는 곳을 찾아 갈 수 있을 것이다. 그 덩치 큰 자동차용 네비와는 성능은 조금 다를 수 있겠지만,말이다.

 

6. 에버 노트

사실 스마트 폰 내에는 특별한 메모장은 존재하지 않는다. 그래도 이런 저런 다양한 제품들을 찾아보면 몇몇 간단한 정보 입력할 수 있는 앱들이 있으며 그 앱들을 사용해 저장이 가능하다. 하지만, 기록해 놓는 메모를 별도 pc나 다른 장치에서 확인하려면, 메모 내용을 별도로 백업하거나, 전달하거나, 눈으로 직접 보고 해당 내용을 메모해야 한다.

에버노트는 그런 귀찮은 이 기종간의 메모 기록 보관 및 전달에서 탁월한 도구다.

단순한 글 부터 사진까지 다양한 포맷의 정보들을 묶어서 올려 볼 수 있다. 또 이 정보는 모두 에버노트 클라우드 서버에 저장되기 때문에, 자신의 pc에 에버노트 응용 프로그램만 깔면 언제든 해당 내용을 볼 수 있다.

 

7. MP3 플레이어 및 동영상 플레이어

1장비 1가지 기능을 추구하는 필자의 경우 별도의 MP3플레이어를 들고다니곤 하지만, 가끔 MP3를 두고 오거나, 그냥 간단히 듣고 싶을 때, 스마트폰은 정말 도움되는 도구다.

물론 미리 음악을 넣어두고 동기화를 해놓아야 하지만, 2~3G 정도의 음악을 자신만의 정렬법으로 넣어둔다면 가끔 볼 만하다.

또 PMP 만큼의 화면 사이즈를 가지고 있기 때문에, 동영상을 잘 인코딩 했다면, 동영상 파일을 담고 다녀 볼만 하다.  붐비는 곳에서는 인터넷이 오락가락하는 경우가 많은데, 이 경우 시간 죽이기에는 이런 음악이나 동영상 만큼 훌륭한 것도 없다.

폰 성능이 받혀준다면, 유무료 동영상 플레이어를 다운 받으면, 별도 인코딩 없이, 자막 파일까지 그대로 폰에 넣어서 볼 수 있다.

 

8. 클라우드 저장 서비스

앞서 말한 에버노트도 일종의 클라우드 서비스지만, 이 클라우드 서비스는 본격적으로 파일을 저장/보관하기 위한 서비스이다. 대부분 모든 클라우드 서비스들은 웹을 통해 접근이 가능하며, 필요시 해당 플랫폼 위의 응용 프로그램만 깔면 공유가 가능하다. 스마트폰 역시 앱을 통해 접근이 가능하다.

그래서 스마트폰과 PC사이에서 별도 USB 없이 파일을 송수신 할 수 있다.

해외에서는 Dropbox, Skydrive, Google Drive 등이 있으며, 국내에는 Daum Cloud, Naver N Drive 등, 여러가지 서비스를 제공한다. 제공 용량은 제공 서비스 회사마다 틀린데, 원하는 서비스 업체 회원 가입하면, 무료로 2G 부터 50G까지 다양하게 제공된다.

 

9. 긴급 메모 도구

갑자기 메모를 해야 할 때, 종이와 연필을 떠올리는데, 이 스마트폰도 훌륭한 메모 도구다. 물론 키보드 열어 메모장이나, 에버노트에 기록할 수 있지만, 다른 이와 대화하면서 띄우기도 애매하고, 실제 말하는 속도를 따라가긴 어렵다. 스마트폰을 이용한다면, 녹음기능을 이용해 저장할 수 있다.

또, 그림이나 글 경우 일일히 받아쓰기 귀찮다면, 그냥 카메라로 사진 찍는다.

이 내용은 USB로 연결하거나, 별도 클라우드 서비스를 사용하면 언제든지 공유가 가능하다.

 

 

정리

스마트폰을 가지고 할 수 있는 일은 상상한 만큼 할 수 있다. 물론 그 뒷받침이 될 하드웨어 스팩이나, 개발된 앱에 달려 있긴 하지만, 그래도 의외적인 생산적인 작업을 수행할 수 있다.

가끔 검색어를 통해 "XXX 추천 안드로이드 앱" 형식으로 검색하다보면, 의외로 무료지만 상당히 유용한 앱들을 구경할 수 있다. 필요하다면, 1~2천원만 주고 훌륭한 제품 건져 사용할 수 있다.지금 장모님도 스마트폰을 사용하면서 혼자 이렇게 저렇게 만져보시고 있다. 물론 나이의 제약으로 인해 젊은 친구들 처럼 매우 적극적으로 파지는 못해도 스스로의 쓸모를 찾아보시고 있다.

혹시 이런것도 될까? 라는 질문을 스스로에게 던지면서 자신의 라이프 스타일에 얼마큼 맞는지를 확인해보고, 사용해 보면 의외의 편리성을 얻게 된다. 물론 피처폰 + 카카오톡에 만족한다면, 그렇게 사용하는 것도 답일 수 도 있다. ㅋ

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

내 친구가 드디어 스마트폰을 샀다. 그런데...

잡글 2012. 10. 4. 11:14

일주일 전 즈음 친구에게서 문득 메시지가 왔다.

“널 주소록에 저장했는데 카톡에는 너가 안드뜬다 뭐또해야하는게있는거니?”

이 친구가 그동안 피처폰을 사용해왔었기 때문에, 이번에 스마트폰으로 바꾸게 되어 카카오톡을 나와 연결하려는데 그게 잘 안되는 모양이였다. 일단 어떤 폰으로 바꿨는지를 물어봤는데, 답이 넥서스 갤럭시로 바꿨다고 한다. 그러자 그 친구는 카카오톡에 대한 질문 대신 자신의 폰이 저렴하게 잘 샀는지에 대해 나에게 질문을 던졌다. 나야 휴대폰 장사하는건 아니라, 잘은 모르겠지만, 일반적으로 내가 조사해왔던 내용보다는 저렴한것 같아 이상한 마음에 조건에 대해서 이런 저런 역 질문을 했다. 잘 모르겠다는 답변과 함께, Gmarket에서 보고 구매했다는…

유심, 가입비, 보증비 모두 무료이고, 보상 기변을 통해서 변경했다고 나에게 말했다. 이 친구는 KT였는데, 그 보상으로 구매한거라고 했다.

그래서 일단 GMarket에서 해당 조건을 검색해보니, 요즘 이 조건이 시즌인듯..

처음엔 나도 보고 놀랐다. 부가세 까지 해서 3만 4천원. 물론 i슬림 조건이긴 하지만, 저렴해 보였다. 잘 샀구나 싶은 마음에 다시 보니 왠걸.. 3년이였다.

3년동안 부으면 되는 가격. 이거 이상한데 싶어서 기계 가격을 보니 51만원. 사실 이러면 최신폰과 금액적인 차이가 별로 나지 않았다. 완전 홈쇼핑 느낌이 난다. 한달에 9,900 원이면 전기 장판 쓰십니다! 라는 라벨을 붙이고, 20개월 하는거랑 별 차이 나지 않는다고나 할까?

그러나 친구는 이미 질렀고, 구매했고, 물건을 받았고, 이를 이용해 카톡을 연결하니 뭐라 할말은 없고.

다만, 이제 스마트 폰을 쓰니, 그에 상응하는 만큼 써보라는 마음에 내 카톡과 연결하는 작업을 했다. 왜 안됐는지는 모르겠지만, 데이터 통신 오류나 서버 문제였는지, 잠시 후 연결이 되었다. 그리고 카톡으로 이런 저런 말을 나눴다. 싸게 산건 아니지만, 뭐 나쁘진 않다.. 정도... 51만원 기계 값에 36개월 할부 노예라는 점은 계속 내 목에서 아른 아른 거렸지만, 자신이 감당하는 무게라 생각하기에 그냥 두었다.

그러다가 추석 연휴 중 다시 연락이 왔다.

“아 진짜 이거 쓰레기다. 너무 어려워 못쓰겠다...."

이건 또...  사실 내가 스마트폰 대열에 오면 좋겠다는 말은 했지만, 이 스마트폰을 사라고는 하지 않았다. 하지만, 확실하게 내가 끌고 들어온 진흙 늪 세계는 맞기에 그래도 연휴 끝자락에 잠시 만났다.

만나서 처음 꺼낸 이야기는 다른게 아니였다.

“다른 사람들은 대부분 갤럭시 S2 쓰는데, 메뉴도 틀리고 조작도 틀리고, 들어있는 앱도 틀리고, 화면도 틀려서 다른 사람들에게 스마트 폰에 대해서 묻기가 어렵다!. 그리고 매달 32,000원을 내야 하는 점이 마음에 안든다! 예전 폰은 1~2만원만 내면 됐는데..,"

이게 첫 이야기 였고, 이 점 때문에, 나에게 저런 이야기를 한 것이다.

“아 진짜 이거 쓰레기다. 너무 어려워서 못쓰겠다….”

내가 받은 느낌은

“ 헐 ~~~~ “

 

진짜, 대세가 스마트폰 이니 나도 스마트폰 이라는 느낌이 너무도 강렬해서 뭐라 할말을 잊게 만들었다. 내 생활 중에 도우미의 역할로써의 스마트폰이 아닌 것이였다. 다만 뒤쳐지는 느낌에 당혹스러워 마련했다는 말.

다른 이들 대부분이 갤럭시 S 쓰니(이 때 그들 대부분이 문과라고 강조했으나.. ㅋ) 이 폰이 마이너 쪽에 가까운 폰임은 확실하지만, 그렇다고 성능이 좋지 않거나, 나쁜 폰이 아니라는 점. 또 OS 업그레이드나, 통신사에 얽매인 부분이 없어, 실제 사용에 있어 걸림돌이 적다는 점 등등...

결국 자신의 도우미로써의 스마트폰을 원한게 아니였다. 다만 유행에 뒤쳐지기 싫은 점, 단순한 소유욕, 있어보이고 싶은 점.. 이런 아주 단순한 욕구 해소용으로 찾았다는 점이다. 그러다 보니, 평소보다 많은 금액(내 생각에는 역시 기계값이 문제다.)을 내야 된다는 구조에 불만을 갖고, 사용방법이 어렵다고 쉽게 포기하게 된다는 것이다.

해결책은 없었다. 이렇게 선택을 한 것은 너 자신이고, 너 스스로가 감당해야 한다고 말해줄 뿐이였다. 말해 주고는 내 스스로도 어이가 없었다. 이건 마치 물건을 팔고, 그 물건을 괜히 샀다고 불만을 늘어놓는 손님에게, 손님의 책임이라고 떠 넘기는 업주 같은 느낌... 집에와서 이런 저런 생각해 보니, 그냥 피처폰이나 잘써! 라고 말할 것을 그랬나 보다 싶긴 하다.

이 친구를 어떻게 해야 할까?????? ㅋ

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

DataRow 유틸-Util 함수를 만들자

기술자료/.NET 2012. 9. 25. 09:34

서두

System.Data.DataRow

데이터베이스 기반의 CS나 Web 관련 개발을 하면 DataTable을 많이 활용하는데, 이 때 데이터들은 DataRow를 통해서 전달 받게 된다. 그런데, 이 DataRow에 담긴 값들은 모두 Object 형식으로 담겨 있는데, 이 때 데이터를 끄집어 내는데, 그냥 ASP 시절의 웹 프로그래밍 방식을 따르게 되면 오류 발생율이 높다. 물론 의도적으로 try ~ catch 문에서 끄집어 내기 위해서 만들기도 하지만, 단순히 데이터를 끄집어 오는데, try ~ catch로 잡아야 될 정도면 개인적으로는 아니다 싶을 때가 많다.

 

본문

예를 들면, Person 이라는 테이블이 있는데, Name - varchar(50), Age – int, Address – varchar(100) 의 형태의 테이블이 있다고 하자.

Name Age Address
Goshe Mack 12 Gangnam
Park Sung-ook 23 [NULL]
Sonia Aka 22 Mapo

데이터테이블이 dtResult 라는 변수에 담겨 있다고 한다면,

   
string sName = dtResult.Rows[0]["Name"].ToSting();

하면 그 해당하는 값인 “Goshe Mack” 이라는 데이터가 나온다.

여기서 발생할 수 있는 오류의 형태는 2가지.

첫번째로는 데이터가 없을 때다. 즉 dtResult 안에 DataRow가 하나도 없으면 저기서 에러가 난다. [0] 부분은 0번째 Row를 가져오겠다는 말인데, 그 안에 앖이 없으면 Null 이고 Null에 대한 [Name]은 없으므로 에러다.

두번째로는 Name 부분이 DbNull 인 경우다. 이 경우 [0][Name] 결과가 null 이 되므로, null의 ToString 에서 오류가 발생하게 된다.

그렇다면 이제 Null을 피해보도록 하자.

첫번째의 경우.

foreach(DataRow row in dtResult.Rows)
{
       string sName = row["Name"].ToString();
}

라고 하면 일단 Data가 없는 경우에 발생되는 문제는 피할 수 있다. 왜냐면 foreach를 할 때, dtResult 안에 Row가 없으면 더 이상 안의 내용을 처리하지 않기 때문이다.

두번째의 경우는 어떻게 할까?

위의 경우 처럼 직관적으로 표현하자면 이렇게 할 수 있을 것이다.

foreach(DataRow row in dtResult.Rows)
{
    if(row["Name"] != null || row["Name"] != DBNull.Value)
    {
        string sName = row["Name"].ToString();
    }
}

조금 더 다듬어 보자.

row["Name"]
이 너무 자주 나온다!  이것을 조금 더 개선 시키는 방향은 아예 값을 밖으로 빼서 하나의 변수에 넣고, 그 값을 돌려 쓰는 방식을 취한다. 이러면 딱 한번만 row[“Name”] 을 부를 뿐 실제 값은 변수에서 직접 가져와 쓰게 된다.
foreach(DataRow row in dtResult.Rows)
{
    object value = row["Name"];
    if(value != null || value != DBNull.Value)
    {
        string sName = value.ToString();
    }
}

만일 Null 일 때 Default 값을 설정하고 싶다면? 더 간단하다. 이번에는 sName 부분을 위로 끄집어 올린다.

foreach(DataRow row in dtResult.Rows)
{
    string sName = "DEFAULT";
    object value = row["Name"];
    if(value != null || value != DBNull.Value)
    {
        sName = value.ToString();
    }
}

여기까지는 좋다고 생각된다. 그런데, 만일, 여러 개의 필드일 때는 어떻게 할까? 더욱이 String도 아닌 Int 같은 필드 인 경우 ToString 으로 해결도 안된다. 한번 위의 방식대로 코드를 짜보자

foreach(DataRow row in dtResult.Rows)
{
    string sName = "DEFAULT";
    int nAge = 0;
    string sAddress = "DEFAULT";

    object value = row["Name"];
    if(value != null || value != DBNull.Value)
    {
        sName = value.ToString();
    }

    object value = row["Address"];
    if(value != null || value != DBNull.Value)
    {
        sAddress = value.ToString();
    }

    object value = row["Age"];
    if(value != null || value != DBNull.Value)
    {
        string sTemp = value.ToString();
        try
        {
            nAge = int.Parse(sTemp);
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

}

갑자기 길어지는 코드!!!!

지금은 값이 세 개니까, 저렇지 만일 필드수가 10개 이상된다고 하면, 값 한번 조회하는 코드만 100라인 넘게 된다. 까잇거 Copy&Paste 신공이 있는데! 라고 외치며 무식하게 짜시는 분이 계신다면, 나중에 그 코드를 유지보수해야 할 때 참여하는 자신 혹은 남을 위해 자제해주셨으면 한다. 제발 ㅋ

그래서 아예 값을 별도로 처리하기 위한 Util 형태의 Static 클래스를 만들어 사용하는 방법을 추천한다.

/// 
/// System.Data.DataRow의 데이터를 쉽게 접근하기 위해서 사용되는 함수 모음
/// 
static public class DBUtils
{

    /// 
    /// DataRow 상에서 특정 Coloumn 이름에 해당하는 문자열을 읽어온다.
    /// 별도 기본값을 제공하여 읽어오는데 실패한 경우 입력받은 기본값으로 돌려준다.
    /// 
    /// 읽어올 데이터가 담긴 DataRow
    /// 읽어올 데이터의 Column 이름
    /// 읽어오는 것을 실패한 경우 돌려줄 기본값
    /// 읽어온 문자열 값
    public static string ReadString(DataRow row, string sColumnName, string sDefaultValue)
    {
        string sResult = sDefaultValue;
        if (row.Table.Columns.Contains(sColumnName))
        {
            object value = row[sColumnName];
            if ((value is DBNull) == false && value != null)
            {
                sResult = value.ToString();
                    
            }
        }
        sResult = sResult.Trim();
        return sResult;
    }

    /// 
    /// DataRow 상에서 특정 Coloumn 이름에 해당하는 문자열을 읽어온다.
    /// 
    /// 읽어올 데이터가 담긴 DataRow
    /// 읽어올 데이터의 Column 이름    
    /// 읽어온 문자열 값
    public static string ReadString(DataRow row, string sColumnName)
    {
        return ReadString(row, sColumnName, string.Empty);
    }


    /// 
    /// DataRow 상에서 특정 Coloumn 이름에 해당하는 숫자값을 읽어온다.
    /// 별도 기본값을 제공하여 읽어오는데 실패한 경우 입력받은 기본값으로 돌려준다.
    /// 
    /// 읽어올 데이터가 담긴 DataRow
    /// 읽어올 데이터의 Column 이름
    /// 읽어오는 것을 실패한 경우 돌려줄 기본값
    /// 읽어온 숫자 값
    public static int ReadInteger(DataRow row, string sColumnName, int nDefaultValue)
    {
        int nResult = nDefaultValue;
        if (row.Table.Columns.Contains(sColumnName))
        {
            object value = row[sColumnName];
            if ((value is DBNull) == false && value != null)
            {
                string sValue = value.ToString();
                if (int.TryParse(sValue, out nResult) == false)
                    nResult = nDefaultValue;
            }
        }
        return nResult;
    }

    /// 
    /// DataRow 상에서 특정 Coloumn 이름에 해당하는 숫자값을 읽어온다.
    /// 
    /// 읽어올 데이터가 담긴 DataRow
    /// 읽어올 데이터의 Column 이름
    /// 읽어온 숫자 값
    public static int ReadInteger(DataRow row, string sColumnName)
    {
        return ReadInteger(row, sColumnName, 0);
    }

    /// 
    /// DataRow 상에서 특정 Coloumn 이름에 해당하는 DateTime값을 읽어온다.
    /// 별도 기본값을 제공하여 읽어오는데 실패한 경우 입력받은 기본값으로 돌려준다.
    /// 
    /// 읽어올 데이터가 담긴 DataRow
    /// 읽어올 데이터의 Column 이름
    /// 읽어오는 것을 실패한 경우 돌려줄 기본값
    /// 읽어온 DateTime 값
    public static DateTime ReadDateTime(DataRow row, string sColumnName, DateTime defaultTime)
    {
        DateTime result = defaultTime;
            
        if (row.Table.Columns.Contains(sColumnName))
        {
            object value = row[sColumnName];
            if ((value is DBNull) == false && value != null)
            {
                try
                {
                    result = (DateTime)value;
                }
                catch (Exception ex)
                {
                    Core.LogWriter.Current.Write(ex);
                }
                //try
                //{
                //    result = DateTime.Parse(sValue);
                //}
                //catch
                //{
                //}
            }
        }
        return result;
    }


    /// 
    /// DataRow 상에서 특정 Coloumn 이름에 해당하는 DateTime값을 읽어온다.
    /// 
    /// 읽어올 데이터가 담긴 DataRow
    /// 읽어올 데이터의 Column 이름
    /// 읽어온 DateTime 값
    public static DateTime ReadDateTime(DataRow row, string sColumnName)
    {
        return ReadDateTime(row, sColumnName, DateTime.MinValue);
    }

    public static System.Data.SqlTypes.SqlBinary ReadSQLBinary(DataRow row, string sColumnName)
    {
        System.Data.SqlTypes.SqlBinary result = System.Data.SqlTypes.SqlBinary.Null;

        if (row.Table.Columns.Contains(sColumnName))
        {
            object value = row[sColumnName];
            if ((value is DBNull) == false && value != null)
            {
                try
                {
                    result = new System.Data.SqlTypes.SqlBinary((byte[])value);                        
                }
                catch (Exception ex)
                {
                    Core.LogWriter.Current.Write(ex);
                }
                //try
                //{
                //    result = DateTime.Parse(sValue);
                //}
                //catch
                //{
                //}
            }
        }
        return result;

    }
}

저런 클래스를 만들면 위에서 제시한 예제 코드는 다음 형태로 변하게 된다.

foreach(DataRow row in dtResult.Rows)
{
    string sName = DBUtils.ReadString(row,"Name","DEFAULT");
    int nAge = DBUtils.ReadInteger(row,"Age",0);
    string sAddress = DBUtils.ReadString(row,"Address","DEFAULT");
}

 

정리

반복적인 작업을 보다 효율적으로 빠르게 처리하라고 있는 컴퓨터에서 노가다하고 있는 우리네 현실을 보면 조금 답답한 것 같다. 사실 C#에는 프로그래머에게 보다 더 편리하고 간단하게 짜라는 장치가 많다. 하지만, 100% 현실에 맞는 것은 아닌 것 같다.

하나씩 자신만의 Util을 만들어 자신의 코드 내에 있는 노가다의 요소들을 정리해보는 것은 어떨까?

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

MVNO ( mobile virtual network operator )-TPlus 가입!

잡글 2012. 9. 24. 16:34

장모님 휴대폰을 스마트폰으로 바꾸기 위해서 이곳 저곳을 기웃거렸다. 최초에는 갤럭시S3 대란 때 부흥하여 타려고 했다가, 결국 내 Nexus S로 교체하려고 마음을 먹었다.

그래서 기존의 스마트폰에 싣게 될 USIM만으로 가입하려고 했다. 기왕이면 온가족 할인 끼기 위해 SKT로 하려고 했는데, 왠걸 가입비만 3만 9천원인가 되고, USIM은 9000원. 대략 4만원돈이 든다고 한다. 더욱이 주말밖에 시간이 안되서 어려운 발걸음 해줬는데, 주말에는 발급이 안된다고 했다. 결국 SKT든, KT든 처리가 힘들어졌다.

그런데 뽐뿌갔다가, MVNO 관련 프로모션이 있다고 해서 찾았다.
    “[옥션 - SK MVNO] 신규, 6개월 약정시 연아햅틱 무료증정”

image

image

image

처음에는 폰 팔이인줄 알았는데, MVNO 신규 가입 및 번호 이동에 대한 프로모션이였다.

그레이트 한점이 25000원 요금제라는게 있는데 SKT의 34요금제와 같은 형태, 150분/150건/100M 이게 25인데다가, 약정 걸면 할인 되서 2만원! 자율 요금제도 괜찮은것 같았다.

그래서 오늘 오전에 연락했고, 가입신청을 했다.

지금 행사를 이곳저곳에서 연계해서 하는지 옥션에서 구매하면, 일단 옥션에서 주문 완료 한 뒤에 나오는 신청서를 작성하라고 떴다. 그래서 배송지 처리만 하고, 가입 신청을 시작했다. SKT 에서 하는 웹 기반의 본인 인증이라서 생각보다 간단하게 일처리가 되었다.

USIM 칩이 배달 갈 주소 및 연락처, 핸드폰 명의, 신청 방식(신규가입 또는 번호이동), 지불 방식 , 휴대폰의 시리얼 번호등을 최종적으로 본인 인증 방식을 택해서 넣으라고 되어 있어. 휴대폰을 택해서 처리했다.

모두 완료되자, 2~3시간 후 본인 확인차 콜이 들어왔다. 간단한 확인 후 일사 천리.

배송지로 택배를 통해 USIM을 발송한다고 했다. – 다만 추석있는 주다 보니, 즉시 배송은 어렵고, 약간의 지연은 있을 예정이라고 한다. -

미개통 상태로 보내고, USIM 연결 후 직접 개통하는 형태로 발송해준다고 했다.

 

한달 요금 2만2천원이면 괜찮을듯.

일단 USIM 와서 연결한 뒤에 봐야 겠다.

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

iOS6 업그레이드

기술자료/모바일 2012. 9. 20. 09:53

10년치 생일선물을 한 큐에 받는 센스로 New IPAD를 받았다! 행복 행복..
그러다가, 갑자기 무슨생각이 들었는지 장모님께 효도폰 만들어 드린다고, 뜬금 넥서스 S 받고 IPhone 3GS를 받는 기묘한 일을 벌였다.

내 Mobile 체계는 Apple계로 돌아서게 되었다.
그 덕에 이번 iOS6 업그레이드에 눈독을 들이게 되었다.

그래서 어제 9월 19일 부터 전 장비를 백업했다. 미국 태평양 표준시 기준으로 9월 19일이라고 해서 어제 오후 6~7시까지 기다려 봤지만, 역시 출근한 뒤에 배포할 요량인지, 최소한 회사에 있는 동안에는 업그레이드를 시행하지 못했다. 그냥, 장비의 전체 백업만 한채 집으로 발길을 돌렸다.

그러다 오전에 뉴스를 하나 봤는데, 미국 태평양시 기준으로 9월 19일 오전 10시에 배포되었다고 한다. 한국 시간으로는 한밤 새벽 2시에 배포된 것이다.

iOS6, 국내서 어떻게 달라졌나

이야 하는 마음으로 Apple 홈페이지에 가보니, 예전에 달려있던 Comming Soon은 없어졌고!

드디어 ITunes를 이용해 IPAD를 연결했고, 업데이트를 눌렀다! 그러자 다운로드.

최초 10분이였지만, 역시 High Traffic으로 거의 1시간 정도의 시간이 소요되었다.

생각 보다 업그레이드 방법은 어렵지 않았고, 그냥 연결해놓고 가만히 있으니 알아서 업그레이드가 완료되었다.

완료된 IPAD는 늘 띄워놓은 잠금화면에서 멈추었다. 그래서 슬쩍 잠금 화면을 푸니까, 최초 운영체제 설치했던 것 처럼 업그레이 완료를 위한 화면이 떴다.

 

계속~ 터치!

위치 정보 공유 작업인데, 뭐 특별히 숨길것도 없어 “위치 서비스 활성화”를 터치하고 상단의 다음을 터치!

이제 iCloud, iMessage, FaceTime 등의 서비스를 이용하기 위해서는 Apple 계정이 필요한데, 이 계정에 대한 암호를 새로 입력해야 한다. 업그레이드다 보니, 이전에 설정된 정보는 그대로 남아 있고, 다만 암호만 새로 입력해야 한다. 입력하고 다음을 터치한다.

다음으로 넘어가면 자동으로 iCloud 서비스에 대한 설정화면이 잠깐 나왔다 사라진다. 워낙 순식간에 벌어져서 캡쳐 불가 ㅋ

이제 iMessage와 FaceTime 연결에 사용할 계정을 선택한다. 미리 다 선택은 되어 있으니, 그냥 기본값으로 두면 될 듯. 물론 받기 싫으면 체크를 꺼주면 된다.

두둥! 드디어 나오다. “Siri”!!!  당연 사용 사용! 물론 한국내에서는 미국에서 처럼 다양한 분야에서는 활용이 불가능하다고는 하지만, 그래도 ㅋㅋ 사용 사용!

드디어 끝! 이제 모든 설정은 완료되었고! 이제 늘 쓰던 그 IPAD로 사용하면 된다.

업그레이드 인증 샷! 버전은 6.0 / 롬 번호는 10A403.

최초 시작을 들어가면 홈 키를 오래 누르면 시리가 뜬다고 나온다.

그래서 길게 눌러봤더니 뭔 예제가 “용빈이에게 FaceTime 걸어줘” ㅋㅋ

 

이제 더 써보고 난 뒤 이런 저런 포스팅 예정이다. 조금 두근 거린다

대체 뭐가 좋아졌을라나?

 

PS. 지금 iPhone 3GS 업그레이드를 위해 업데이트 시도하려고 연결하니 77분 남았다고 뜬다 ㄷㄷㄷ ;;;;

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

  • «
  • 1
  • ···
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • ···
  • 157
  • »
250x250

블로그 내에 소스 코드 삽입 이사온 기념 스킨도... RSS 전문 기능 비활성화 관련. 스킨 바꾸어 보았습니다. 서버 파일 정리 좀 했습니다.

«   2025/12   »
일 월 화 수 목 금 토
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

me2sms SharePoint Google Apps Engine Tutorial 친구 MOSS 2007 좀 협업 블로그 windows 불만 2010 Azure 개발환경 오류 twi2me moss Buscuit 인터파크 지름신 java 비스킷 me2photo WSS 수 e-book me2dayzm 매뉴얼 Visual Studio 것

  • Total :
  • Today :
  • Yesterday :

Copyright © 2015-2025 Socialdev. All Rights Reserved.

Copyright © 2015-2025 Socialdev. All Rights Reserved.

티스토리툴바