• 카테고리
    • 전체 글

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

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

  • 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 업그레이드
  • 2012.09.18 자기 주도성 Paradox
  • 2012.09.12 사용자 암호 관리
  • 2012.09.06 아이폰 3GS로 변경 4

스마트 폰을 어떻게 사용해야 하나? - 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

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

자기 주도성 Paradox

잡글 2012. 9. 18. 08:52

Xper 메일링 리스트를 보면 참 좋은 글이 많다.

이번에도 좋은글!

주넥님이 쓰신 "자기 주도성"에 대한 이야기.

Agile이기에 단순히 전산 업무에서만 사용된다고 생각하겠지만, 실제로는 직장 동료간의 관계, 부부와의 관계 등등 인간과 인간이 만나 소통하는 모든 분야에서도 충분히 응용된다고 생각된다.

특히 다음 글 중에서 I-Message 라는 방법의 화법이 있는데, 다시 읽어 보고 또 읽어보면서 스스로를 생각하면서 다듬어 나가야 겠다.

그래서 나중에 다시 읽어볼 수 있도록 블로그에 게시한다. (원본 글 그대로)




2012년 8월 16일 목요일 오후 3시 50분 1초 UTC+9, 주넥 님의 말:

안녕하세요.

그간 눈팅만 하다 정말 오랫만에 글 올리네요.

Agile 을 처음 접한 이후,

팀에 Agile Practice들을 도입할려고 시도 했었는데 쉽지 않은 것 같습니다.

특히 시스템적으로 지원될 수 있는

지속적 통합(Continous Integration) 과 같은 부분은 그나마 쉬운 편이구요.

개개인의 습관과 관련된 TDD는 어려워 지고,

나아가 Agile의 여러 Pratice들에 근간이 되는 자기 주도성은

조직 문화와 관련되어 더 더욱 어렵습니다.

습관이나 문화와 관련된 부분이 내재화에 성공하자면 적지 않은 시간이 걸리는데,

이 시간동안 Agile 도입에 대한 열정을 점점 사그라 들게 되지요.

오늘 최근에 받은 Agile과 전혀 상관없는 경영 교육에서

자기 주도성 Paradox라는 내용이 있었는데 가슴에 와 닿는 부분이 있어서 공유할 까 해서 글 적습니다.

Agile의 Scrum활동 중 팀내에서 이번 주기내에서 해야할 Story 들에 대해서 정하고

Task를 나누고 계획하고 하는 주기 계획 활동에서 자기 주도성은 굉장히 중요한 부분입니다.

이러한 주기 계획 활동이 조직 문화가 뒷받침 해주지 않으면

팀장이 주기에 할 모든 Story를 꺼집어 내고 task로 나누고 선정하는 식으로

상명하복식으로 흐르게 될 가능성이 아주 큽니다.

주도성 Paradox는

미국 Bowling Green State University의 D. J. Campbell 교수의 2000년 논문에 정의된 것으로

자기 주도성을 헤치는 환경이나 상황을 일컫는 말입니다.

통상 기업환경에서는 아래와 같은 상황들이 있다고 합니다.

1. 주도적으로 일할 여유를 주기는 했는가?

회사에서 시키는 일 하기도 바쁜데 어떻게 주도적으로 일을 계획할 수 있는가? 하는 부분입니다.

제가 팀내에서 회고를 진행해보니 회고에서 많은 팀 운영관련 혹은 업무 효율성을 높일 좋은 아이디어들이 나와도

팀원들이 우려하는 것이 바쁜 업무들이 있는데, 언제 아이디어들을 적용해보지? 라는 부분들이 있었습니다.

마치, 코드 리패토링을 해야하는 데 주어진 업무들이 바빠서 리팩토링을 못하고 계속 가게 되는...

    (결국에는 더 큰 문제를 야기할 손 치더라도... 당장은 여유가 없다는 것이지요.)

이를 극복하자면 결국 팀장급들, 매니저급들이 의도적으로 팀원들이

자기 주도성을 보호하기 위해 의도적으로 시간을 할애해 주는 수밖에 없는데... 쉽지 않은 일인듯 합니다.

2. 기회를 주고도 끊임없이 개입하지는 않았나?

개입성 상사보다는 격려성 상사가 성과를 내는 것은 여러 경영 사례에서 밝혀졌다고 합니다.

    Agile에서도 팀리더들이 경우 일을 시키는 사람이라기보다 Coach가 되라고 하지요.

    Scrum practice가 성공하자면 결국 팀리더들이 Coach가 되기 위해서

제대로 된 Coaching 교육을 받아 훈련되어야 합니다.

연공서열형의 우리나라의 조직 문화에서 쉽지 않은 부분인 듯 합니다.

3. 결과에 대한 책임을 묻지 않았나?

자기 주도적으로 계획해서 실천했는데,

결과에 대해서 자꾸 위에서 뭐라하면 더이상 자기 주도적으로 되기 쉽지 않습니다.

그렇다고 팀리더 입장에서 잘못된 결과나 실수를 눈감고 그냥 지나칠 수도 없지요.

우선 자기 주도적 계획과 수행 과정에 대해서 칭찬하고 격려를 하고,

결과에 대해서는 개선이 될 수 있도록 기분 나쁘지 않게 지적하는 것이 필요하다고 합니다.

결국 여기서도 코칭을 잘해서 팀원들을 비난이 아닌 격려로 나쁜 결과가 반복되지 않도록

지도하는 것이 필요합니다.

흔히 직장 상급자가 직장 하급자를 야단 치는

    "너가 XXX 하면 어쩌자구, 정신이 있니 없니?" 식의

비난성의 YOU-message보다

    "나는 이번에 XXX결과가 나와서, 외적으로 YYY하고 ZZZ상황들이 초래될까 상당히 걱정이 된다."는 식의

    I-message를 통한 지적이 경영학적으로 코칭에 좋다고 합니다.

최근에 최초 올림픽 동메달을 획득한 홍명보 감독의 리더쉽에 대한 이야기들이 많은데요.

홍감독이 이런말을 했다고 합니다.

    "너희들은 팀을 위해서 죽어라!"

    "나는 너희들을 위해서 죽겠다.!"

결국 팀원들의 실수에 대한 책임은 팀리더가 지겠다는 각오와 행동으로 팀원들을 코칭해야

자기 주도성이 지속될 수 있겠지요.

주도성 Paradox 참고글

IGM (세계경영연구원) 이계평 교수님의 주도성 Paradox에 대한 글

http://s.hankyung.com/news/app/newsview.php?aid=2012050307041&sid=01102013&nid=291&type=0

LG 경제연구원 주도성 Paradox에 대한 글

http://www.lgeri.com/management/organization/article.asp?grouping=01020200&seq=489

I-message 참고글

구글링해보면 많은 글들이 나옵니다. 그중 하나...

http://blog.daum.net/ilovechina/11349722

728x90
블로그 이미지

하인도1

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

사용자 암호 관리

기술자료/.NET 2012. 9. 12. 09:51

원본 : http://msdn.microsoft.com/ko-kr/library/ms180915(VS.80).aspx

(즐겨찾기에 있는 정보로 링크 변경이나, 사이트 변경에 따라 정보가 유실될 것 같아 홈페이지에 등록합니다. 아래의 문건의 권리는 모두 Microsoft 에 귀속됩니다.)


이 항목에는 사용자 암호 관리에 대한 정보 및 코드 예가 들어 있습니다.

다음 C# 코드 예에서는 IADsUser::SetPasswordadsi.iadsuser_setpassword 메서드를 호출하여 사용자 암호를 설정하는 방법을 보여 줍니다. IADsUser::SetPassword에 대한 자세한 내용은 MSDN Library(http://msdn.microsoft.com/library)의 "IADsUser::SetPassword"를 참조하십시오.

 
usr.Invoke("SetPassword", SecurelyStoredPassword);

다음 C# 코드 예에서는 IADsUser::ChangePasswordadsi.iadsuser_changepassword 메서드를 호출하여 사용자 암호를 변경하는 방법을 보여 줍니다. IADsUser::ChangePassword에 대한 자세한 내용은 MSDN Library(http://msdn.microsoft.com/library)의 "IADsUser::ChangePassword"를 참조하십시오.

 
usr.Invoke("ChangePassword", OldSecurelyStoredPassword, NewSecurelyStoredPassword);

다음 C# 코드 예에서는 다음 로그온 시 사용자 암호를 변경할 수 있도록 설정하는 방법을 보여 줍니다. 이 경우 pwdLastSetadschema.a_pwdlastset 속성을 off(-1)로 설정합니다. adschema pwdLastSet 특성에 대한 자세한 내용은 MSDN Library(http://msdn.microsoft.com/library)의 "pwdLastSet" 또는 "Pwd-Last-Set attribute"를 참조하십시오.

 
usr.Properties["pwdLastSet"].Value = -1; // To turn on, set this value to 0.
usr.CommitChanges();

 

다음 C# 코드 예에서는 암호를 변경하는 사용자 권한을 거부하도록 ACE를 설정하는 기능을 보여 줍니다. 이 경우 ntSecurityDescriptor 속성을 가져올 수 있도록 IADsSecurityDescriptor에 액세스하는 데 ADSI 액세스에 COM 상호 운용성 사용를 사용합니다. 그런 다음 IADsAccessControlList를 사용하여 보안 설명자의 DACL을 가져오고 IADsAccessControlEntry를 사용하여 AceType, AceFlags, Trustee, Flags, ObjectType 및 AccessMask 속성을 가져옵니다. AceType 플래그는 ADS_ACETYPE_ENUM에 정의되어 있습니다. AceFlags는 ADS_FLAGTYPE_ENUM에 정의되어 있습니다. AccessMask 플래그는 ADS_RIGHTS_ENUM에 정의되어 있습니다.

 
using System;
using System.DirectoryServices;
using ActiveDs;

static void DenyChangePassword(DirectoryEntry User)
{

	const string PASSWORD_GUID = "{ab721a53-1e2f-11d0-9819-00aa0040529b}";
	const int ADS_UF_PASSWORD_EXPIRED=0x800000;
	const int ADS_UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION=0x1000000;

	string[] trustees = new string[]{@"NT AUTHORITY\SELF","EVERYONE"};
	

	ActiveDs.IADsSecurityDescriptor sd = (ActiveDs.IADsSecurityDescriptor)

	User.Properties["ntSecurityDescriptor"].Value;

	ActiveDs.IADsAccessControlList acl = (ActiveDs.IADsAccessControlList) sd.DiscretionaryAcl;

	ActiveDs.IADsAccessControlEntry ace = new ActiveDs.AccessControlEntry();

	foreach(string trustee in trustees)
	{
		ace.Trustee = trustee;
		ace.AceFlags = 0;
		ace.AceType = (int)ActiveDs.ADS_ACETYPE_ENUM.ADS_ACETYPE_ACCESS_DENIED_OBJECT;
		ace.Flags = (int)ActiveDs.ADS_FLAGTYPE_ENUM.ADS_FLAG_OBJECT_TYPE_PRESENT;
		ace.ObjectType = PASSWORD_GUID;
		ace.AccessMask = (int)ActiveDs.ADS_RIGHTS_ENUM.ADS_RIGHT_DS_CONTROL_ACCESS;
		acl.AddAce(ace);
	}

	sd.DiscretionaryAcl = acl;
	User.Properties["ntSecurityDescriptor"].Value = sd;
	User.CommitChanges();
}

다음 C# 예에서는 암호를 변경하는 사용자 권한을 거부하도록 ACE를 설정하는 기능을 보여 줍니다. 이 예에서는 .NET Framework 2.0에서 사용할 수 있는 관리되는 ACL 기능을 사용합니다.

using System;
using System.DirectoryServices;
using System.Security.Principal;
using System.Security.AccessControl;

static void DenyChangePassword(DirectoryEntry user)
{
    // Create a Guid that identifies the Change Password right.
    Guid changePasswordGuid = 
        new Guid("{AB721A53-1E2F-11D0-9819-00AA0040529B}");

    // Get the ActiveDirectorySecurity for the user.
    ActiveDirectorySecurity userSecurity = user.ObjectSecurity;

    // Create a SecurityIdentifier object for "everyone".
    SecurityIdentifier everyoneSid = 
        new SecurityIdentifier(WellKnownSidType.WorldSid, null);

    // Create a SecurityIdentifier object for "self".
    SecurityIdentifier selfSid = 
        new SecurityIdentifier(WellKnownSidType.SelfSid, null);

    // Create an access rule to allow everyone the change password 
    // right. 
    // This is used to remove any existing access rules.
    ActiveDirectoryAccessRule allowEveryone = 
        new ActiveDirectoryAccessRule(
            everyoneSid,
            ActiveDirectoryRights.ExtendedRight, 
            AccessControlType.Allow, 
            changePasswordGuid);

    // Create an access rule to deny everyone the change password right.
    ActiveDirectoryAccessRule denyEveryone =
        new ActiveDirectoryAccessRule(
            everyoneSid,
            ActiveDirectoryRights.ExtendedRight,
            AccessControlType.Deny,
            changePasswordGuid);

    // Create an access rule to allow self the change password right.
    // This is used to remove any existing access rules.
    ActiveDirectoryAccessRule allowSelf =
        new ActiveDirectoryAccessRule(
            selfSid,
            ActiveDirectoryRights.ExtendedRight,
            AccessControlType.Allow,
            changePasswordGuid);

    // Create an access rule to deny self the change password right.
    ActiveDirectoryAccessRule denySelf =
        new ActiveDirectoryAccessRule(
            selfSid,
            ActiveDirectoryRights.ExtendedRight,
            AccessControlType.Deny,
            changePasswordGuid);

    // Remove any existing rule that gives "everyone" the change 
    // password right.
    userSecurity.RemoveAccessRuleSpecific(allowEveryone);

    // Add a new access rule to deny "everyone" the change password 
    // right.
    userSecurity.AddAccessRule(denyEveryone);

    // Remove any existing rule that gives "self" the change password 
    // right.
    userSecurity.RemoveAccessRuleSpecific(allowSelf);

    // Add a new access rule to deny "self" the change password right.
    userSecurity.AddAccessRule(denySelf);

    // Commit the changes.
    user.CommitChanges();
}

다음 코드 예에서는 암호가 만료되지 않도록 설정하는 방법을 보여 줍니다. 이 경우 ADS_USER_FLAG_ENUM에 정의되어 있는 ADS_UF_DONT_EXPIRE_PASSWD 플래그를 설정할 수 있도록 userAccountControl 속성에 액세스하기 위해 Properties 메서드를 사용합니다.

using System;
using System.DirectoryServices;
using ActiveDs;

static void DontExpirePassword(DirectoryEntry User)
{
    int val;
    const int ADS_UF_DONT_EXPIRE_PASSWD =0x10000;
    val = (int) User.Properties["userAccountControl"].Value;
    User.Properties["userAccountControl"].Value = val | 
        ADS_UF_DONT_EXPIRE_PASSWD;
    User.CommitChanges();
}


728x90
블로그 이미지

하인도1

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

아이폰 3GS로 변경

잡글 2012. 9. 6. 14:29

장모님 핸드폰을 스마트 폰으로 변경해드리고 싶은 마음에 8월 말에 기계값 1000원 대란에 동참하려는 찰나, 여러가지 문제로 인해 결국 실패했고 9월이 넘어가자 모든 정책들은 종료하게 되고 결국 대란은 잠들어 지금은 잠잠한 시기.
( 뽐뿌 휴대폰 게시판 기준 : 2012/09/06 )

별 매리트 없어 보이는 기계 할부 원가가 10여만원이 넘거나 해서 그렇게 매력적이지 않은 물건만 가득차 결국 중고폰을 마련해서 하나 해드려야 겠다는 생각이 들었다.

 

뽐뿌와 함께 클리앙 중고사이트를 들락 거리던 중, 이런 저런 중고 핸드폰들을 보고 있는데, 요 근래 아이폰 물건이 많이들 쏟아지고 있었다. 원래는 갤럭시 노트 정도로 생각하고 뒤지고 있었는데, 대략 가격이 25~45만원 선에 걸쳐 있어 고민을 무척했다. 사실 그 정도 금액이면 옥션 중고로 해서 구매하면, 카드 결제와 같은 부분도 있어 차라리 옥션 중고로 넘어갈까도 생각했다.

그러다 어느날 아이폰 3GS 중고가 9만원에 올라와 있었다. 설마 했다. 뭔가 큰 하자가... 심한 전투형이거나, 아니면 부품용 아닐까? 했는데, 사진을 보니 그리 나빠보이진 않았다. 그리고 저녁에 결심하고 문자를 보냈다.

다행이 답변은 도착했고, 긍정적인 흐름이였다. 그런데, 갑자기 판매자에게서 다양한 사진들이 올라오면서 "이래도 사실래요?" 라는 .... 문자가...

C139917e1e0fC139917e1e4aC139917e1e30C1399168db35C13991773665Untitled

"엥 뭐가?" 라는 느낌으로 바라보는데, 의외로 좀 문제가...

첫번째로는 전원 버튼이 없었다. 뭐 게시물에도 언급되어 있지만, 막상 없으니...

두번째로는 액정 한가운데에 짧게 긁힌 상처가... 저 여자 사진 부분인데, 크게 보면 무슨 흉터 처럼 위에서 아래로 길게 상처가 있는데, 그 부분이다. 대충 보면 모르는데, 동영상이나 사진등을 보면 해당 위치가 마치 액정 나간거 처럼 여러가지 빛깔로...

세번째는 여기저기 스크래치도 있고, 약간의 크랙과 특유의 기름과 먼지가 뭉쳐진 곳도 많았다.

사실 고민이 되었다. 어떻게 할까... 생각해보니, 저것들 외에도 배터리나 기타 미처 발견하지 못한 하자부분을 A/S 맡길 예정인데, 견적이 쎄게 나올까 걱정이 들었다. 그렇다면, 9 + 10여만원(미정) 해도 20만원 찍는거 아닌가?

갑작스레 후회가....

그리고 다음날... 일단 구매하는걸로 문자를 때리고, 대신 가격을 8만원으로 낮추었다. 개인적인 욕심으로는 5만원까지 떨굴까도 했지만, 뭐....능력 밖.

결국 저녁에 만나 물건을 받았다. 처음 내 USIM 칩을 박았는데 ,잘 안되는데, 알고 봤더니, 꼽고 한번 켠 뒤에 다시 재 부팅을 하면 인식을 했던 것이다. 간신히 재부팅해서 이것 저것을 해보았다.

집사람 폰이 아이폰4 라서 몇 번 만져본 경험에 따르면, 일단 해상도가 꽝. 진짜 보기가 영 아니올씨다 였다. 심지어 지금 내가 들고다니는 폰인 넥서스S에 비하면 한참이 떨어지는.. 그런 해상도

제일 중요한 부분. 어르신을 위한 편의 장치를 찾아보았다. 조금 기대를 했는데, 생각했던 것과는 전혀 달랐다. 일단 키보드 부분. 이건 애플에서 완전 Lock을 걸어 놓았는지, 조그만한 기본 쿼티 키보드만 나온다. 물론 나를 포함한 3~40대 전 세대에게는 익숙한 자판이고, 어렵지는 않지만, 나이드신 장모님에게는 GG.

게다가 화면의 전반적인 Text를 키우고 싶어도 방법이 전혀 없었다. 화면 자체를 Zoom In/Out 하는 기능은 있지만, 손가락 세개를 가지고 여기저기를 누비는 것도 한계가 있고 여러가지로 마음에 많이 걸렸다.

이런 저런 편의성 도구들을 찾아보다가, 결국 포기했다. 도무지 답이 없었다.

그러다 문득... 안드로이드 폰이면? 이라는 생각으로 내 폰을 이용해서 이런저런 작업을 해보았고, 결론을 내릴 수 밖에 없었다.

"내 폰은 장모님께, 나는 아이폰 3GS"

 

의도하지도 생각치도 않았는데, 아이폰을 쓸 수 밖에 없었다.

 

IMG_20120906_130218IMG_20120906_130227IMG_20120906_130303IMG_20120906_130323IMG_20120906_130339

하얀색... 마음에는 들지만, 제대로 쓸려면.. 일단 A/S 부터 해야 하겠다. ㄷㄷㄷ

728x90
블로그 이미지

하인도1

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

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

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

«   2025/06   »
일 월 화 수 목 금 토
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

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

  • Total :
  • Today :
  • Yesterday :

Copyright © 2015-2025 Socialdev. All Rights Reserved.

Copyright © 2015-2025 Socialdev. All Rights Reserved.

티스토리툴바