1. 체크해야 할 서비스를 검사하고 다시 시작해 주는 batch 파일을 만듭니다.

 

파일명 : CSMessengerServer.bat

@echo off

 

rem set /a myStopper=0

 

:LOOP

 

rem Checking... Core Messenger Server

 

for /F "tokens=3 delims=: " %%H in ('sc query "Core Messenger Server" ^| findstr "상태"') do (
  if /I "%%H" NEQ "RUNNING" (
    rem not running
    echo ================ >> CSMessengerStart.log
    date /t >> CSMessengerStart.log
    time /t >> CSMessengerStart.log
    echo Core Messeger Server stopped. now starting... >> CSMessengerStart.log
    net start "Core Messenger Server" > NUL
  ) else (
    rem running
    rem %%H
  )
)


ping -n 30 127.0.0.1 > NUL

rem set /a myStopper+=1
rem echo %myStopper%
rem if %myStopper% GEQ 10 goto QUIT

goto LOOP


:QUIT

 

rem : 주석으로 모두 삭제하셔도 됩니다. 테스트로 쓴 것도 있으니까요.

sc query "서비스명" : 서비스명으로 등록되어 있는 서비스의 정보를 가져옵니다.

findstar "상태" : 위 정보중에서 "상태"라는 단어가 있는 부분만 가져옵니다.

token=3 : 세번째 항목이 RUNNING 이면 실행중, 아니면 정지된 것으로 판단합니다.

실행중이 아니면 로그에 남기고, net start 로 서비스를 시작합니다.

 

 

2. batch 파일을 윈도우즈 서비스에 등록합니다.

 

bat_service_register.zip

MS의 rktools.exe에 있는 툴들이다.

http://www.microsoft.com/en-us/download/details.aspx?id=17657

 

압축파일안에 instsrv.exe, srvany.exe를 c:\windows\system32에 복사합니다.

CSMessengerStart.bat도 system32에 복사합니다.

 

c:\windows\system32\instsrv.exe [추가할 서비스명] c:\windows\system32\srvany.exe

여기선 추가할 서비스명이 "CSMessengerStart"

 

regeidt로 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[추가한 서비스명]에

Parameters키 생성하고 그안에 문자열 Application, AppDirectory, AppParameters을 생성한다.

 

Application에 c:\windows\system32\CSMessengerStart.bat

AppDirectory에 c:\windows\system32

AppParameters는 비워놓는다.

 

서비스 CSMessengerStart를 시작하고, 체크할 서비스를 정지시킨다.

 

체크할 서비스가 재시작하면 로그를 확인한다.

 

c:\windows\system32\CSMessengerStart.log

 

http://bcheul.tistory.com/156

“너는 큰 일을 하기 위해 이 세상에 태어났다.
네가 지금 이렇게 병으로 고통받는 것은
너를 강하고 위대한 사내로 만들기 위한
하느님의 시험이다.”

-시어도어 루스벨트 대통령 어린 시절,
심한 천식으로 불행한 나날을 보내는
아들에게 아버지가 늘 하던 말
(켄 셸턴, ‘성공한 사람들의 10가지 공통법칙’에서)

촌철활인

아래 맹자 말씀과 궤를 같이합니다.
‘하늘이 장차 그 사람에게 큰 사명을 주려할 때는
반드시 먼저 그의 마음과 뜻을 흔들어 고통스럽게 하고,
그 힘줄과 뼈를 굶주리게 하여 궁핍하게 만들어
그가 하고자 하는 일을 흔들고 어지럽게 하나니,
그것은 타고난 작고 못난 성품을 인내로써 담금질하여
하늘의 사명을 능히 감당할만하도록
그 기국과 역량을 키워주기 위함이다.

출처 : http://cafe.naver.com/appforge/811

 

APNS(Apple Push Notification Service) 개발시 유의 사항을 정리해 봅니다.

알고보면 별 시덥잖은 내용인데... 첨 할땐 엄청 삽질합니다. (물론 제가 삽질을 즐거하는 편이기도 하지많서도...)

1. APNS는 두 가지 타입을 제공합니다. (개발용, 배포용)

2. 물론 디바이스에서만 확인 가능합니다.

3. 각 디바이스는 고유의 ID외에 토크값을 가지고 있습니다. 이 토크값을 가지고 애플 APNS 서버에 전달하면 해당 디바이스로
    메시지가 전달됩니다.
   (여기서 유의사항... 배포용으로 빌드 했을 때와 개발용으로 빌드 했을 때의 토큰 값이 다릅니다! 요건 꼭 유의하세요.)

4. APNS 기능을 사용할 때 일반적으로 자체 서버를 이용합니다. 앱을 실행하는 사용자의 토큰 값을 DB에 저장해 두고...
서버의 (웹)프로그램이 DB를 읽어서 보낼 토큰 값을 가져오고 루프를 돌면서 전달할 메시지를 보냅니다.
(메시지를 보내는 대상은 애플 서버랍니다. 요건 주소가 정해져 있어요... 정해진 서버로, 정해진 포맷의 데이터를 쏩니다.)

5. 개발용 APNS 서버 주소 : ssl://gateway.sandbox.push.apple.com:2195
    배포용 APNS 서버 주소 : ssl://gateway.push.apple.com:2195

6. APNS를 처리하기 위한 서버용 코드는 인터넷에 굴러다닙니다. 참고하시고...
   (PHP, Java, ASP.NET 용이 있구요... asp 용은 못 봤습니다.)

7. 처음 할 때 가장 어려운 부분이 인증서 만드는 부분입니다. 이 인증서 역시 개발용, 배포용 두 가지가 있습니다.
   만드는 방법은 추후 정리를 해볼까 합니다. 여기서 주의 사항은 인증서를 새로 만들었다거나 변경했으면...
   반드시 Provisioning Profile을 새로 갱신해야 합니다.
   (요것 때매 삽질 좀 했음...)

8. 그리고!!! 서버단에서는 애플 서버로 데이터를 보낼 때 커넥션을 맺은 후 많은량의 데이터를 한번에 보낼 수 없습니다.
   확실치는 않으나... 테스트를 해본바로는 140명에게 메시지를 보내니깐 연결이 끊겨버립니다.
  (커넥션 타임아웃 등 설정 값의 차이가 있을 수 있습니다...)
  결론은 일정 단위로 끊어서 데이터를 보내고... 다시 접속 해서 보내고... 요런 과정을 거쳐야 합니다.
 
9. 배포용 버전은 AdHoc 버전을 만들어서 확인하시면 됩니다. 개발 버전은 디바이스에 올려서 바로 확인 가능합니다.

10. 마지막으로 웹 프로그램을 직접하지 않는다면... 똑똑한 개발자를 구하십시요!!!

출처 : http://cafe.naver.com/sejonghansolgo.cafe?iframe_url=/ArticleRead.nhn%3Fclubid=24083540%26articleid=14%26menuid=14%26inCafeSearch=true%26searchdate=all%26searchBy=1%26boardtype=%26page=%26userDisplay=%26query=%BD%BA%B8%B6%C6%AE%26includeAll=%26exclude=%26include=%26exact=

 

 

자기주도학습 출발은 ‘꿈’, ‘목표’ 갖기(1)

 

자기주도학습이 지금까지의 교육과 근본적으로 다른 점은 목적의식 없이 교육자가 지시하는 대로 학습하는 것이 아니라 학습자 본인의 꿈을 기반으로 분명한 목표를 설정하고 학습한다는 것이다. 자기주도학습의 정의는 ‘자신의 꿈을 이루기 위해 스스로 학습 목표를 설계하고 실행하는 것’이 다. 여기서 ‘꿈’은 자신이 궁극적으로 되고자 하는 바를, ‘목표’는 꿈 실현을 위한 구체적 도달점을 의미한다. 만약 ‘간호사가 되어 사회 소외계층에 의료봉사활동을 하며 나누는 삶을 사는 것’이 꿈이라면 ‘OO대학 간호학과에 진학하는 것’, ‘관련 도서를 한 달에 3권 이상 읽는 것’, ‘사회복지시설에서 자원봉사를 해보는 것’ 등은 꿈을 이루기 위한 구체적 목표에 해당한다.

아이의 꿈이 명확하다면 위의 사례처럼 가고 싶은 대학, 학과의 설정과 같은 장기적 목표를 세우는 것이 가능하지만 대부분의 아이들이 직업에 대한 정보가 부족하거나, 하고 싶은 몇 가지의 일 중 확실한 마음의 결정을 내리지 못했거나, 진로적성에 대한 분석이 이뤄지지 않았거나, 나이가 어려 인생의 가치관 정립이 되지 않았거나 하는 등의 이유로 아직 꿈을 정하지 못한 상태일 것이다.

이럴 땐 부모가 꿈에 대해 생각해보도록 유도하는 연습을 함께 해주면 도움이 된다. 우선 자신의 5년 후 모습을 글이나 그림으로 묘사해보게 한다. 그 다음 10년, 15년, 20년 등 기간을 늘려가다 보면 아이가 현재 꿈꾸는 미래의 자기 모습이 나올 것이다. 대뜸 ‘커서 뭐 할거냐’고 물어보는 것보다는 훨씬 일관성 있는 가상의 스토리를 얻을 수 있으며 아이의 가치관도 엿볼 수 있다. 뉴욕 타임즈 등 유명 잡지의 표지를 보여주며 “네가 굉장히 유명해져서 너의 얼굴이 이 잡지 표지에 실렸다면 어떤 훌륭한 업적을 이루었기 때문일까” 등을 질문하는 것도 좋은 방법이다. 꿈 찾기 연습을 할 때 주의할 점은 아이들은 한정된 경험과 배경지식을 바탕으로 꿈을 얘기하기 때문에 부모가 도움이 되는 정보를 추가로 제공하는 등 가이드로서의 역할을 해줘야 한다는 것이며, 이 때 꿈 찾기를 가장해 부모가 선호하는 직업을 선택하도록 주입해서는 안 된다는 것이다.(조선일보)

 

 

자기주도학습 출발은 ‘꿈’, ‘목표’ 갖기(2)

 

자신의 꿈이나 비전을 아직 갖지 못했더라도 조바심 낼 것 없이 당장 이루고 싶은 것들 중심으로 단기 목표를 적어보는 것도 좋다. 꿈은 원대할 수록 좋지만 목표는 언젠가는 달성할 수 있어야 한다는 전제가 있기 때문에 되도록 구체적이고 현실적으로 적도록 하며, 실행력을 높이기 위해서는 긍정적 언어로 기술하는 것이 바람직하다.

목표를 정하는 것이 익숙해질 때까지는 부모가 도와준다. 먼저 아이가 좋아하는 것, 갖고 싶은 것, 되고 싶은 것, 가고 싶은 곳 등을 자유롭게 적는다. 그 중에서 해당 항목을 적은 이유와 실행 가능성, 중요도에 따라 우선순위를 정해 실행 계획을 짠다. 혼자 할 수 있는지, 다른 사람의 도움이 필요한지, 준비물이 있어야 하는지, 언제까지 마칠 수 있을지 등 세부 항목까지 적어본다.

목표의 실행은 부모의 도움이 반드시 필요한 경우를 제외하고는 아이가 자율적으로 하도록 하되, 부모는 동기부여를 통해 아이의 실행능력을 키워줄 수 있다. 칭찬 스티커, 승리 일지를 활용하거나, 특별한 노력 또는 새롭게 시도한 행동에 대해서는 조촐한 축하파티를 여는 등 간단한 보상을 제공해 성취감을 맛보게 해준다. 목표에 도달한 성적, 대회에서 받은 트로피, 각종 체험활동을 기록한 사진, 글 등 노력해서 성취한 결과물을 거실에 배치하는 것도 좋은 방법이다. 만약 목표했던 일들이 노력에 비해 성과가 저조하거나 실패했더라도 침착하게 대처하는 법을 알려주고 회복할 수 있는 힘을 주는 것 역시 부모가 해야 할 일이다.

처음에는 쉬운 것, 빠른 시간에 해결할 수 있는 것 위주로 목표를 잡고 실천하다 보면 점점 여러 가지 목표를 단계적, 입체적으로 관리하고 실행할 수 있는 자기주도력을 갖게 된다. 이렇게 갖게 된 자기주도력이 평생 실천해야 하는 자기주도학습의 원동력이 되는 것이다.(조선일보)

 

 

자기주도학습을 위한 학습 계획서 작성법 (1)

 

동갑내기 친구인 승우(15)와 선미는 지난 달 열심히 공부할 것을 다짐하며 각자 계획을 만들었다. 승우는 ‘이제부터 꼭 하루에 세 시간씩 혼자 힘으로 공부하겠다’는 계획을 세웠다. 선미는 ‘점수가 잘 나오지 않는 국어과목의 성적을 끌어올리기 위해 매주 월요일, 수요일은 한 시간씩 교과서를 정리해 내신시험에 대비하고 토요일은 책을 읽어 부족한 어휘력을 키울 것’을 계획했다. 그로부터 한 달이 지난 지금 누구의 계획이 제대로 실천되고 있을까?

 

뚜렷한 목표부터 정해라.짐작했겠지만 계획을 여전히 실천하고 있는 것은 선미다. 선미는 확실한 목표를 바탕으로 그것을 달성하기 위한 방법이 반영된 학습계획을 세운 반면 승우는 공부할 시간만을 정한 막연한 다짐을 했을 뿐이다. 승우의 계획에는 하루 세 시간의 공부를 통해 이루고자 하는 목표가 없다. 목표가 없다는 것은 실행해야 할 이유가 없다는 뜻이기도 하다. 본인이 이유를 모르는데 하루에 세 시간씩이나 혼자 공부하겠다는 다짐이 오래 가지 못하는 것은 당연하다. 선미처럼 확실한 목표를 세우면 그 목표에 도달하기 위한 구체적인 실행 방안을 생각해야 하기 때문에 학습 계획이 훨씬 알차고 현실적이 된다. 이런 계획은 막연한 다짐보다 훨씬 큰 실행력을 갖는다. 이처럼 목표를 세우고 실현하기 위한 구체적 방법을 설계해 순서를 정리한 것을 ‘학습 계획서’라고 한다.

자기주도학습을 실행하기 위해서는 학습 계획서를 반드시 만들어야 한다. 공부할 수 있는 시간은 한정돼 있기 때문에 자신이 가진 시간 자원을 효율적으로 배분해 실행하는 합리적 과정을 미리 정해둬야 성공적인 학습이 가능하기 때문이다. 학습계획서는 목표로 향하는 길이 흔들리지 않게 해주며 그 과정에서 중요한 일들을 놓치지 않게 해준다.(조선일보)

 

 

자기주도학습을 위한 학습 계획서 작성법 (2)

 

동갑내기 친구인 승우와 선미가 열심히 공부할 것을 다짐하며 세운 계획들이 제대로 실천되고 있는지 이어서 살펴보자.가용시간을 찾아라. 학습 계획서를 만들 때 무엇보다 신경 써야 할 부분은 시간을 어떻게 쪼개어 활용할 것인가에 대한 고민이다. 좋은 성적을 내는 학생들은 대부분 시간관리 능력이 탁월하다. 시간관리를 잘 한다는 것은 하루를 공부하는 시간으로 빽빽하게 채운다는 의미가 아니라 휴식은 제대로 취하되 휴식시간으로 정한 시간과 공부하는 시간 외에 낭비되는 시간에 대한 관리가 철저하다는 뜻이다. 낭비하는 시간을 줄이는 첫 걸음은 자신이 어떻게 하루를 보내는지 관찰하고 기록해 보는 것이다.  이 과정을 통해 고정시간과 가용시간을 찾는다. 고정시간이란 하루 중 학교나 학원 등에 가는 시간, 이동하는 시간 등 반드시 소비하게 돼있는 시간을 말하며, 가용시간은 고정시간을 제외하고 남은 시간 중 본인이 계획해서 창의적으로 활용할 수 있는 시간을 말한다.

일주일 치 시간표를 만들어 먼저 고정시간을 적어본다. 요일마다 하교 시간이 다르고 학원에 가는 날, 가지 않는 날 등이 정해져 있기 때문에 반드시 일 단위가 아닌 주 단위로 적어야 한다. 고정시간이 파악됐다면 가용시간을 어떻게 활용할지를 하나하나 정리해본다. 남는 시간이 너무 많지는 않은지 혹은 의욕이 앞서 지나치게 많은 것을 계획하진 않았는지를 다시 한번 검토한다.

 

계획은 반드시 달라진다.1차적인 학습 계획서를 완성했다면 실제로 실천해보면서 계획서에 기재한 시간과 실제 실행시간 사이의 차이를 꼼꼼히 기록한다. 계획시간과 실제 시간에는 반드시 차이가 날 수 밖에 없으므로 제대로 실천하지 못했다고 해서 마음 상할 필요는 없다. 미처 고려하지 못한 사항이나 예기치 못한 변수 등이 있기 때문에 처음부터 완벽한 계획을 만드는 것은 누구에게도 불가능하다. 대신 이전에 세운 계획에 문제점을 발견했다면 이를 제대로 수정하고 보완하는 일은 반드시 꼼꼼하게 해서 2차 계획부터는 시간의 오차를 줄여나간다는 생각을 해야 한다.

 

학습능력에 대한 고민이 있어야 한다. 계획을 제대로 실천하고 있음에도 성적이 만족스럽게 나오지 않는다면 자신의 능력을 점검해봐야 한다. 자신에게 공부를 더 할 역량이 있는데 너무 수월한 계획서를 만들었거나 자신의 역량을 고려하지 않고 시간을 짠 경우라면 시간 계획을 잘 지키고 있더라도 부족한 학습이 될 수 밖에 없다. 가령 수학 문제를 푸는데 시간이 오래 걸리는 학생이 하루 수학공부 시간을 30분으로만 잡는다면 몇 문제 풀어보기도 전에 학습을 마치게 되므로 실력을 향상시키기 힘들다. 자신의 역량을 냉정하게 생각해보고 시간을 안배하는 연습이 필요하다. 시간대 별 자신의 컨디션도 고려해본다. 하루 중 자신의 집중력이 좋은 때는 어려운 과목이나 단번에 이해하기 어려웠던 부분들을 공부하도록 하고 졸음이 쉽게 오거나 피로함을 느끼는 시간에는 공식이나 단어, 한자 등 간단한 암기를 하도록 계획한다. (조선일보)

 

 

수업의 활력소 예습, 어떻게 할까 (1)

 

학생들은 일반적으로 수업을 듣는 것 만으로는 내용 이해를 하지 못하고 어렵다고 느낀다. 수업 시간에 다루는 학습 내용을 대부분 처음 대하기 때문이다. 내용이 낯설면 실제로는 난이도가 높지 않아도 어렵다고 느껴지므로 이해하는데 그만큼의 노력이 필요하며 흥미가 떨어진다. 이해도 안되고 흥미도 없는 수업을 마치고 나면 해당 내용을 복습하는 데는 두 세배의 시간이 걸린다. 이런 학습이 반복될 경우 단순히 외우는 것에만 바빠 사고력과 창의력 등 중요한 학습능력이 발휘되지 못한다. 학습능력이 늘지 않으면 학년을 거듭할수록 어려워지는 교과 내용을 따라가지 못 해 결국 사교육의 도움 없이는 공부할 수 없게 되는 의존적 학습성향이 생긴다.

 

예습, 왜 해야 할까예습은 이런 악순환을 막을 수 있는 가장 간단하면서 확실한 방법이다. 예습이 중요하기 때문에 철저히 해야 한다는 말은 수도 없이 들었겠지만 정작 실천하고 있는 사람은 많지 않다. 예습의 효과를 몸으로 경험해보지 못해서다. 수업 내용을 미리 본 학생과 처음 본 학생의 수업 몰입도는 다를 수 밖에 없다. 내용을 미리 살펴 본 학생은 수업이 낯설지 않다. 익숙한 내용이기 때문에 수업이 재미있고 내용 이해도 처음 듣는 사람보다 월등히 잘된다. 이해를 모두 마쳤기 때문에 복습에 필요한 시간이 현저하게 줄어들어 학습 능률도 높아진다.

자기주도적 학습을 하는 학생일수록, 자신의 학습에 책임을 지려는 성향이 강할수록 예습을 중요하게 생각하며 투자하는 비중이 크다. 내용을 어느 정도 아는 상태에서 수업을 듣는 것이 얼마나 효율적인지 스스로 알기 때문이다. 예습을 잘 하면 수업의 질이 높아지는 등 즉각적인 효과를 볼 수 있다. 예습에는 집중력과 사고력, 의지력, 질문할 내용을 찾아보는데 활용되는 창의력까지 다양한 학습능력이 두루 사용되기 때문에 예습을 반복하면 이러한 능력이 자연히 좋아진다혼자 이해하려고 노력하는 과정에서 큰 성취감도 맛보게 해준다. (조선일보)

 

다양한 방법이 나와있네요.

 

http://blog.naver.com/rs1017?Redirect=Log&logNo=90150373326

출처 : http://itzone.tistory.com/434

 

 

홈페이지 = http://www.easyapns.com/

 

푸시 서비스의 경우 개발 테스팅에서 시뮬레이터로는 테스팅이 불가하므로
꼭! 실 기기가 필요하다.

어제 iOS 푸시 해보느라 오후부터 밤10시까지 시간을 보냈다.
(메뉴얼 대로 잘 따라하면 몇시간 내로 되는데 한가지 빼먹어서 개고생)

몇가지의 라이브러리가 있었는데
이름부터 쉽다고 써 있는 Easy APNs를 쓰기로 생각하고 작업에 돌입하였다.

 

1. 인증서 작업

http://artyst.egloos.com/2652130 글을 보고 인증서 작업을 해야 한다.
여기서 주의 할 점이 있는데 App IDs 서브메뉴 페이지에서 기존 앱을
[ ] Enable for Apple Push Notification service
의 설정(체크) 없이 만들었었다면
Edit 링크를 눌러 Modify 하고 다시 다운받아 실행하여 인증서를 갱신해야 된다.
이 작업을 빼먹어서 개고생했다.

인증서 생성이나 갱신이 완벽히 되었다면

Easy APNs 홈페이지 상단 메뉴의 순서대로 작업을 하면 된다.


2. MySQL 테이블

추가시 웹호스팅 받고 있는 경우 Trigger 생성 권한이 없을 것이므로
기기 이력 테이블이 제외된 alternate database file 의 SQL문만 실행하면 된다.


3. PHP 소스

+ apns.php
최 상단의 쉘 스크립트 사용 선언 #!/usr/bin/php 은 웹호스팅 받을경우 사용이 안되므로
<?PHP 아래로 옮긴다.

+ class_*.php
웹호스팅 업체의 PHP에서 mysqli 확장 설정(php.ini 설정에서 extension="mysqli.so") 되어 있지 않은 경우 다수의 msyql 쿼리 관련 함수들을 수정해야 한다.
대체적으로
$result->num_rows() 에서 mysql_num_rows($result) 로
$return = $result->fetch_array(MYSQLI_ASSOC) 에서 $return = mysql_fetch_array($result, MYSQL_ASSOC) 로
등과 같이 수정해 줘야 한다.

$logpath 등을 사용자 환경에 맞게 절대 경로로 수정하라고 되어 있는데
웹호스팅 받고 있을 경우 루트로부터의 경로를 모르겠다면
apns.php가 위치해 있는곳으로부터의 경로를 입력해주면 잘 동작한다.

$certificate 의 apns.pem 파일 생성법은
http://theeye.pe.kr/511 글을 보면 키체인에서 필요한 파일 추출하고
콘솔에서 명령 줘서 pem 파일 생성하는 방법이 기재되어 있다.


4. AppDelegate 작업

푸시 클라이언트인 앱에서의 작업. Xcode에서 AppDelegate.m 소스파일을 편집해준다.

폰갭으로 포장한 앱은 PhoneGapDelegate.m 파일 편집.


5. Cron 작업

이게 왜 필요하냐면 Easy APNs는 메세지 발송 예제 실행시 (http://.../apns_sample.php)
apns_messages (큐)에 쌓아놓기만 한다.

실제 발송은 http://.../apns.php?task=fetch 를 실행 했을 때 되는 것이다.

웹호스팅 받을경우 cron 이용이 거의 불가하므로
http://cron.io/를 통해 해결한다.


6. Blog 메뉴

Easy APNs 홈페이지의 Cron 메뉴까지가 본론인것 같았지만
중요한 것들이 여기 다 모여 있다.

심지어 처음부터 봤어야 되는 셋업 동영상까지...

지금까지의 과정이 제대로 되었고
앱의 기기 테스팅을 처음 하게 되면

기기 등록정보가 DB의 apns_devices 테이블에 등록되고

푸시 알림 받을것인지 묻는 알림창이 뜨고... 블라블라~

기기 테스팅시의 우리는 apns development 프로파일로 하게 되는데
apns_devices 테이블의 development 필드의 기본값은 'production'이다.

즉, 저 필드값을 그냥 놔두면 개발 테스팅 해도 아무런 푸시알림이 오지 않을것이라는거다.

phpMyAdmin 등에서 해당 필드값은 둘 중 하나로 수정 할 수 있다.
개발시는 'sandbox'로 수정해주고 테스팅하도록 한다.


7. 푸시 알림 테스팅

cron 없이 곧바로 테스팅하는 방법은 5.에서 잠깐 소개했는데
http://.../apns_sample.php 로 메세지를 대기열에 넣어두고
http://.../apns.php?task=fetch 로 발송하면 된다.


마치며

젊은 개발자들이야 빠르게 해 내었겠지만
늦은 나이에 늦게서야 스마트폰 개발의 초보단계를 걷고 있으면서 

과정 중 한가지를 빠트려 개고생을 했지만
푸시 알림이 기기로 왔을때의 기쁨은 개인적으로 너무 좋았다.

좋은 라이브러리 제공, 자신의 노하우를 블로그를 통하여 공유 해주신 모든 분들께 감사드린다. 

출저 : http://developer.apple.com/library/ios/#qa/qa1495/_index.html#//apple_ref/doc/uid/DTS40009340

 

Q:  How do I detect phone numbers and links in an iPhone application?

A: How do I detect phone numbers and links in an iPhone application?

As of iPhone OS 3.0, text views and web views support the detection of phone numbers, email addresses, and HTTP links. iPhone OS 3.0 scans for these types of data, highlights them when found, and renders them into clickable URLs as shown in Figure 1. You can detect phone numbers and links programmatically or by using Interface Builder 3.1.2 or later.

Figure 1  Detecting phone numbers, email addresses, and HTTP links in a text view

Programmatically detecting phone numbers and links

The iPhone OS SDK 3.0 introduces the UIDataDetectorTypes enumeration constant, which defines the types of data that can be found in web views and text views. Table 1 provides a description of these data types.

Table 1  Types of data detected in web views and text views

Constant

Description

UIDataDetectorTypePhoneNumber

Detect strings formatted as phone numbers.

UIDataDetectorTypeLink

Detect strings formatted as URLs.

UIDataDetectorTypeNone

Do not detect any data.

UIDataDetectorTypeAll

Detect all available types of data. This constant is recommended for detecting data.

To programmatically detect phone numbers or links, create an instance of your view and set its dataDetectorTypes property to one of the data types in Table 1. See Listing 1 for an example that scans for phone numbers, emails, and URLs in a text view.

Listing 1  Programmatically detecting phone number and links in a text view

- (void)viewDidLoad {     self.textView.dataDetectorTypes = UIDataDetectorTypeAll; }

Using Interface Builder

Follow these steps to detect phone numbers and links using Interface Builder 3.1.2 or later:

  1. Open the Nib file containing your web view or text view in Interface Builder.

  2. Select your view, then choose Tools > Attributes Inspector. The Attributes Inspector contains the Detect Phone Numbers and Detect Links options, which respectively turn on phone numbers detection and links (email and URLs) detection.

  3. Check one of these options or both of them according to your needs as shown in Figure 2.

Figure 2  Turning on both phone number and links in a text view

 

 

Important Editable text views do not support data detectors.

출처 : http://blog.daum.net/volzh/13390179

 

package
{
 import away3d.cameras.Camera3D;
 import away3d.containers.Scene3D;
 import away3d.containers.View3D;
 import away3d.debug.AwayStats;
 
 import flash.display.Sprite;
 import flash.display.StageAlign;
 import flash.display.StageScaleMode;
 import flash.events.Event;
 
 [SWF(frameRate="60",width="800",height="600")]
  
 public class Hello1 extends Sprite
 {
  private var _scene:Scene3D;
  private var _camera:Camera3D;
  private var _view:View3D;
  
  public function Hello1()
  {
   this.initStage();
   this.init3D();
   this.addEventListener(Event.ENTER_FRAME, render);
  }
  
  private function initStage():void {
   this.stage.scaleMode = StageScaleMode.NO_SCALE;
   this.stage.align = StageAlign.TOP_LEFT;
  }
  
  private function init3D():void {
   this._scene = new Scene3D();
   this._camera = new Camera3D();
   this._view = new View3D(this._scene, this._camera);
   this.addChild(this._view);
   
   var stat:AwayStats = new AwayStats(this._view);
   this.addChild(stat);
  }
  
  private function render(e:Event):void {
   this._view.render();
  }
 }
}

 

http://cafe.naver.com/flashdev/56870

+ Recent posts