for 키워드를 사용하여 코드를 여러 번 반복 할 수 있다.

마지막 숫자 11은 포함되지 않는다.

결과 값은 1 ~ 10 출력

for i in range(1,11):
    print i


파이썬은 다른 프로그래밍 언어들과 마찬가지로 0부터 계산을 시작 할 수 있다.

결과 값은 0 ~ 9 출력

for i in range(0,10):
    print i


Nested loops

루프는 중첩될 수 있다.

for i in range(0,10):
    for j in range(0,10):
        print i,' ',j


'프로그래밍 > Python' 카테고리의 다른 글

Python Tutorial : Functions [6]  (0) 2016.04.15
Python Tutorial : While loop [5]  (0) 2016.04.15
Python Tutorial : Variables [3]  (0) 2016.04.15
Python Tutorial : If statements [2]  (0) 2016.04.15
Python Tutorial : Text input and output [1]  (0) 2016.04.15

파이썬에서는 변수에 숫자와 텍스트를 넣을 수 있다.

x = 2
price = 2.5
word = 'Hello'


변수에는 공백이나 특수문자를 쓸 수 없다. 변수를 정의하는 3가지 예

word = 'Hello'
word = "Hello"
word = '''Hello'''


변수는 재 정의가 가능하다.

x = 2

# increase x by one
x = x + 1

# replace x
x = 5



파이썬의 조건연산자

>   greater than
<   smaller than
==  equals
!=  is not


조건은 항상 변수와 결합 if 구문

x = int(input("Tell X"))

if x == 4:
    print 'You guessed correctly!'

print 'End of program.'


if else 구문

x = int(input("Tell X"))

if x == 4:
    print 'You guessed correctly!'
else:
    print 'Wrong guess'

print 'End of program.'


'프로그래밍 > Python' 카테고리의 다른 글

Python Tutorial : While loop [5]  (0) 2016.04.15
Python Tutorial : For loops [4]  (0) 2016.04.15
Python Tutorial : Variables [3]  (0) 2016.04.15
Python Tutorial : Text input and output [1]  (0) 2016.04.15
파이썬 기초 - Python이란?  (0) 2016.04.14

Output

화면에 텍스트 출력

print("Hello Python")


여러 줄의 텍스트 출력

print("Hello World\nThis is a message")


변수 출력

x = 3
print(x)


다수의 변수 출력

x = 2
y = 3
print(x, ' ', y)


Input

텍스트 입력

name = raw_input("Enter a name: ")


실수 입력

x = int(input("What is x? "))
x = float(input("Write a number"))


'프로그래밍 > Python' 카테고리의 다른 글

Python Tutorial : While loop [5]  (0) 2016.04.15
Python Tutorial : For loops [4]  (0) 2016.04.15
Python Tutorial : Variables [3]  (0) 2016.04.15
Python Tutorial : If statements [2]  (0) 2016.04.15
파이썬 기초 - Python이란?  (0) 2016.04.14

파이썬은 귀도 반 로썸(Guido van Rossum) 이라는 분이 심심해서(!) 만들었다고 전해지는 프로그래밍 언어의 일종.


현재 최신 버전은 Python3.x 이지만 내가 필요한건 Python2.7 이므로 2.7 기준으로 정리할 예정.

어차피 2to3라는 모듈이 있기 때문에 필요하면 Python3.x로 코드를 변환하는 것은 어렵지 않음.


C언어를 할 줄 알면 배우기 쉽지만, 코드 들여쓰기 등에는 상당히 엄격한 문법 체계를 가지고 있다.

(그런데 Python3.x에서는 한글도 변수명으로 사용할 수 있다는 건 함정. 유니코드를 활용하게 되면서 가능해진 듯.)


iOS MDM 서버를 구축하면서.. 파이썬을 전혀 몰라서 배워야 할 필요가 있다고 느껴 파이썬을 시작하게 되었다.


import this 를 하면 이스터에그로 파이썬의 정신(?) 하여튼.. 추구하는 바라던가 하는것이 나온다.


The ZEN of Python
    Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Special cases are not special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    There should be one-- and preferably only one --obvious way to do it.
    Although that way may not be obvious at first unless you're Dutch.
    Now is better than never.
    Although never is often better than *right* now.
    If the implementation is hard to explain, it's a bad idea.
    If the implementation is easy to explain, it may be a good idea.
   Namespaces are one honking great idea -- let's do more of those!
대충 해석하면 아름답고 간결하며 실용적인 코드를 작성하라는 말씀.


앞으로 포스팅할 파이썬 튜토리얼은 Python.org의 비기너 가이드를 한국어로 번역 하면서 같이 공부 할 예정.


'프로그래밍 > Python' 카테고리의 다른 글

Python Tutorial : While loop [5]  (0) 2016.04.15
Python Tutorial : For loops [4]  (0) 2016.04.15
Python Tutorial : Variables [3]  (0) 2016.04.15
Python Tutorial : If statements [2]  (0) 2016.04.15
Python Tutorial : Text input and output [1]  (0) 2016.04.15




(이번 파이3 모델은 무려 블루투스 v4.0 , 802.11n 탑재!!)


테스트 장비 : Rsapberry Pi 3 Model B  (구매처)

테스트 OS : Ubuntu Mate 15.10 Desktop (다운로드)


**필수 프로그램 : Python 2.7 


1. 우분투 Mate 설치 후 기본 환경 설정


2. Python 2.7이 설치되어 있지 않다면 설치


3. MDM 서버 동작을 위한 파이썬 모듈 설치

  - Web.py : 일반적인 아파치 톰캣 등의 서버 구동 프로그램을 사용하지 않고 파이썬 코드로 작성된 소스파일을 웹서버로 작동하게 해주는 모듈

  - M2Crypto : 파이썬 코드로 된 서버를 SSL 프로토콜을 이용하여 접속할 때 체크하는 인증서 관련 패키지

  - PyOpenSSL : 파이썬 코드로 된 서버를 SSL 프로토콜을 이용하여 접속 할 때 필요한 모듈

  - APNSWrapper : APNS를 통해 MDM 푸시 커맨드를 아이폰/아이패드에 전송할 때 이용되는 모듈


해당 모듈 설치 후 APNSWrapper의 connection.py 파일의 131 line을 수정해 줘야 하는데, 

이유는 애플에서 보안적인 이유로 SSLv3에 대한 지원을 중단하였기 때문에

해당 부분을 TLSv1 으로 수정해 줘야 합니다.

131 line : ssl_version = self.ssl_module.PROTOCOL_TLSv1,


나머지 절차는 https://github.com/project-imas/mdm-server 대로 수행

CA 인증서 및 MDM 프로파일 생성 시 실수가 있으면 서버가 동작하지 않으니 주의해서 인증서 생성


서버의 8080 Inbound 설정 및 2195 포트 Outbound 설정 후 python server.py 커맨드를 통해 서버 동작

커맨드 실행 시 Starting Server  https://0.0.0.0://8080 로그가 찍히고 커맨드라인으로 빠져나오지 않는다면 성공적으로 동작하는 것입니다.


저는 라즈베리파이를 공유기에 물려서 서버를 구축했기 때문에 아이폰에서 같은 와이파이 접속 후

 사파리 브라우저에서 https://ip 또는 host name:8080 으로 접속하였습니다.

서버 메인 페이지에서 CA인증서를 먼저 설치해야 디바이스에 MDM프로파일이 설치됩니다.


만약 서버가 구동되지 않는 다면 server.py 파일의 마지막 부분에서 에러타입 로그를 찍어서 에러를 분석하면 됩니다.

테스트 과정에서 2번의 에러가 있었는데 첫번째는 파이썬 모듈의 비정상적 설치, 

두번째는 Server.crt 인증서 파일 크기가 0byte로 비정상적으로 생성되어 재 생성 하였습니다.


**server.py 에러타입 확인하는 법


try:

print "Debug : try"

app.run()

except TypeError as e:

print "Debug : except"

print('error:',e.args[0])

sys.exit(0)




**서버 정상 동작 시 터미널에서 출력되는 로그




수고하셨습니다 ^^..

Ubuntu에 MySQL을 설치하는 방법은


1. apt-get mysql-server 로 설치, 중간에 root 비밀번호 설정


2. mysql -u root -p  를 통해 로그인


3. GRANT ALL PRIVILEGES ON *.* to ‘계정’@’%’ IDENTIFIED BY ‘비밀번호’; 를 통해 외부접속 설정 후 exit; 를 통해 빠져나온다.


4.  cd /etc/mysql 경로 이동 후 vi my.cnf 로 편집기를 열어서 bind-address 를  주석처리.


iOS MDM 서버를 구축 중 멘붕이 와서  다른 방법을 알아보다 WSO2 MDM을 적용해보기로 결정..


먼저 우분투에 JAVA JRE를 설치한다.


1. 먼저 터미널에서  sudo apt-get install default-jre 실행하여 자바 설치


2. java -version 명령어로 현재 설치 된 버전을 확인하는데 가끔 퍼미션 에러가 날 때가 있다.


이 때는 chmod u+x java 를 통해 권한 설정 후 다시 버전을 확인하면 현재 설치 된 버전 확인이 가능하다.

'프로그래밍 > iOS MDM' 카테고리의 다른 글

MDM 테스트 서버 구축  (2) 2016.04.13
WSO2 Enterprise Mobility Manager 구축 [2] - MySQL 설치  (0) 2016.03.31
MDM 서버 셋업  (8) 2016.03.11
SSH로 접속하여 서버에 SSL 적용하기  (0) 2016.03.09
Apple MDM 이란?  (0) 2016.03.09

iMAS 프로젝트 그룹에서 공개한 소스가 있어서 일단 해당 소스로 서버 구축을 해보기로 하였다.

파이썬으로 개발된 소스인데 파이썬이란 언어를 처음 보는 상황이라 눈앞이 깜깜ㅠㅠ 

찾아보면 JAVA로 개발된 소스도 있기는 하다.


>> MDM 서버 소스 링크 <<


Readme를 보면서 진행 했는데 인증서 생성 부분은 여기에 쓰는 것보다 해당 페이지의 Setup 부분을 보면서 만드는게 나을 듯.

증서가 완료되면  서버 셋업 부분을 보면서 따라한다.


Python 2.7과 함께.. web.py / M2Crypto / PyOpenSSL / APNSWrapper 를 설치하고..

설명에 보면 connections.py 파일의 131번째 줄을 수정해야 하는데 중요한건 해당 파일이 존재하지 않는다(!)

혹시나 해서 connection.py 파일은 있나 찾아보니 이 파일은 있다(뭐지)

수정하라는 코드가 같은 줄에 있는거 보니 이파일 맞긴 맞는듯


여기서부터 멘탈이 흔들리기 시작했는데  일단 find / -name connection.py 명령어를 이용해 해당 파일의 위치를 찾고

/usr/local/lib/python2.7/dist-packages/APNSWrapper/ 경로에 있는 파일을 수정하였다.

파일을 수정하는 이유는 Apple에서 SSLv3에 대한 지원을 중단했기 때문에 TLSv1으로 수정해 줘야 한다.



vi connection.py를 통해 편집기를 열고  131번째 라인을 ssl_version = self.ssl_module.PROTOCOL_TLSv1 으로 수정한다.

그리고 /usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/ 으로 넘어가서 python setup.py 커맨드를 실행한다.


그 다음 시키는대로 포트를 열고.. 접속을 했는데 접속이 되지 않는다 ㅠㅠ..

서버 셋팅이 잘못되었는지 8080포트로 접속이 안되고 프로파일을 서버에 넣고

 사파리에서 설치하려고 해도 문제가 생겼다면서 설치가 되지 않음..


뭐가 문제인지 몰라서 이틀째 헤매는중.. 리눅스를 처음 써봐서 초반에 이것저것 

지저분하게 설치한게 많아서 다시 밀고 시작해야 할듯.


그리고 iPCU로 프로파일을 만들 때 현재 애플에서 제공하는 Apple Configurator2 에서는 MDM관련 부분이 없어졌다 (...) 

아마  MDM부분을 뺀 나머지 페이로드를 만들고 생성된 xml파일을 셀프로 수정해야 하는 듯.

구 버전 iPCU에는 그대로 살아 있으니 구버전 iPCU를 찾아서 설치한 다음에 진행하는 편이 정신건강에 이롭다.


iPhone Configuration Utility-2.dmg


iPCU 3.5버전을 찾아보면 대부분 설치가 안되는 파일들 뿐인데 어찌어쩌 설치가 되는 파일을 구하긴 했다.

그런데 문제는 확실하진 않지만 맥키퍼가 같이 깔리는거 같기도 하다 (...) 

맥키퍼에 대한 평가가 대단히 안좋으니 iPCU 설치가 완료되면 맥키퍼는 바로 삭제하시기를..


설치 된 iPCU는 응용프로그램 -> 유틸리티 -> iPhone 구성 유틸리티를 통해 실행 할 수 있다.



앱을 개발하다 보면 구현하고자 하는 기능에 따라서 위치정보를 이용해야 할 때가 있는데

iOS에서 위치정보를 사용하려고 하면 사용자의 동의를 먼저 받아야 한다.


먼저 프로젝트에 CoreLocation Framework를 추가한다.




이후에 해당 뷰 컨트롤러에서 위치정보 사용 동의를 받는 코드를 추가한다.

.h 헤더 파일
#import <CoreLocation/CoreLocation.h>

@interface ViewController : UIViewController @property (strong, nonatomic) CLLocationManager *locationManager;
.m 구현 파일
if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
        [self.locationManager requestAlwaysAuthorization];
}
self.locationManager.pausesLocationUpdatesAutomatically = NO;


그리고 info.plist의 Custom iOS Target Properties에서 다음과 같이 설정해 준다.


위치정보 사용은 [사용 안함/앱을 사용할 때만/항상]  이렇게 3가지 형태가 있는데 필요한 기능에 따라서

requestAlwaysAuthorization 이나 requestWhenInUseAuthorization을 써주면 된다.

만약 항상 위치정보를 사용하지 않아도 되는데 requestAlwaysAuthorization을 사용한다면 심사 과정에서 리젝이 날 수도있으니 주의한다.

(경험 상 리뷰어한테도 충분히 설명을 해 줘야함)






'프로그래밍 > iOS - OBJC' 카테고리의 다른 글

iOS NSTimer 호출하기  (1) 2016.05.12
맥 OS X PhoneGap 설치  (0) 2016.04.27
iOS 8에서 푸시 알림 동의 받기  (0) 2016.03.10
Singleton 패턴 사용하기  (0) 2016.03.09
iOS 앱 자동로그인  (0) 2016.03.09

+ Recent posts