SlideShare a Scribd company logo
1 of 28
Java와 Python의 만남:
Jython과 Sikuli
정보기술 시대에 유익한 파이썬 프로그래밍 – 제 10 강 (1)
동양미래대학교
2015.7
최용 <sk8er.choi@gmail.com>
주제
• Jython
• SikuliX
Jython
• Java 플랫폼을 위한 Python
• Java 바이트코드에 대한 정적 컴파일 및 동적 컴파일
• Java 클래스를 Jython에서 확장 가능
• Java의 설계에 부합하는 완전한 객체 지향 프로그래밍을 지원
• Python 언어 및 그 레퍼런스 구현인 CPython을 따름
• Jython 2.7은 CPython 2.7에 대응
Python & Jython
Python 2.7
• C
• Multi-platform
• .pyc로 컴파일
• C 확장
• GIL
• Python 가비지 컬렉션(참조 횟수 세기)
Jython 2.7
• Java(Java Native Runtime for C 사용)
• Java 7 또는 8
• $py.class 파일로 컴파일
• JFFI를 사용하여 Java 또는 C 확장
• 완전한 멀티 쓰레드
• Java 가비지 컬렉션 또는 Python 2.7
과 같은 GC API도 제공
https://wiki.python.org/jython/WhyJython
Jython의 근황
https://speakerdeck.com/wolevertest/jim-baker-getting-to-jython-2-dot-7-and-beyond
https://www.youtube.com/watch?v=hLm3garVQFo
Jython 2.7 – 추가적 지원
• six – 단일 소스 코드로 Python 2와 3 지원
• socket/select/ssl, requests
• pip, setuptools
• 실행 가능한 zip 아카이브
• 지역화된 플랫폼, CJK 인코딩
https://speakerdeck.com/wolevertest/jim-baker-getting-to-jython-2-dot-7-and-beyond?slide=50
Jython 적용 사례 – WLST
• Oracle WebLogic: Java EE 표준 준수 웹 애플리케이션 서버
• WLST(WebLogic Scripting Tool):
WebLogic 서버 인스턴스와 도메인을 관리하는 명령행 스크립팅 인터페이스
from weblogic.management.security.authentication import GroupEditorMBean
user = "my_user"
print "Checking if "+user+ " is a Member of a group ... "
atnr=cmo.getSecurityConfiguration().getDefaultRealm().lookupAuthenticationProvider("DefaultAuthenticator")
if atnr.isMember('Administrators',user,true) == 0:
print user+ " is not member of Administrators"
else:
print user+ " is a member of Administrators"
Example 6-8 Verifying Whether a User is a Member of a Group
https://docs.oracle.com/cd/E29542_01/web.1111/e13715/config_wls.htm#WLSTG210
Jython 적용 사례 – HP Universal CMDB
• CMDB(Configuration Management
Database, 구성관리 데이터베이스)
• 변경, 릴리스, 인시던트, 서비스 요청, 문제점,
구성 관리 프로세스에 사용할 구성 품목(CI)
에 대한 정보를 저장하는 데이터베이스
• IT 프로세스들이 정확성 및 일관성을 유지할
수 있도록 단일 정보소스를 제공
• HP Universal CMDB는 Jython을 이용하여
CI를 갱신할 수 있도록 adapter를 제공
http://dade.co.za/2015/06/17/example-script-to-update-a-ci-in-hp-ucmdb-using-python-and-suds/
Jython 적용 사례 – nGrinder
• 네이버의 성능 테스트 도구
• http://deview.kr/2013/detail.nhn?topicSeq=2
Java 설치
• http://www.oracle.com/technetwork/java/javase/downloads/index.html
• JDK 다운로드
• 설치
• 설치 확인
> java -version
Jython 다운로드와 설치
• http://www.jython.org/downloads.html
• Download Jython 2.7.0 – Installer
• java -jar jython-installer-2.7.0.jar
• Installation type: standard
• 시스템 속성 – 고급 – 환경 변수
• JYTHON_PATH=C:jython2.7.0
• PATH=%PATH%;%JYTHON_PATH%bin
Jython 실행
대화식
> jython
>>> print("Hello, Jython!")
Hello, Jython!
스크립트
hello.py
print("Hello, Jython!")
> jython hello.py
Hello, Jython!
Jython – list
>>> my_string_list = ['Hello', 'Jython', 'Lists']
>>> multi_list = [1, 2, 'three', 4, 'five', 'six']
>>> combo_list = [1, my_string_list, multi_list]
>>> my_string_list[2]
'Lists'
>>> my_string_list_copy = my_string_list[:]
>>> my_string_list_copy
['Hello', 'Jython', 'Lists']
>>> new_list = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
>>> new_list[0:10:2]
[2, 6, 10, 14, 18]
>>> new_list[::2]
[2, 6, 10, 14, 18]
http://jythonbook-ko.readthedocs.org/en/latest/DataTypes.html
Jython – list
>>> ourList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> for elem in ourList[:5]:
... print(elem)
...
1
2
3
4
5
>>> num_list = [1, 2, 3, 4]
>>> [num * 2 for num in num_list]
[2, 4, 6, 8]
Jython – tuple
>>> myTuple = ()
>>> myTuple2 = (1, 'two', 3, 'four')
>>> myTuple2
(1, 'two', 3, 'four')
>>> myteam = 'Bears',
>>> myteam
('Bears',)
Jython – dict
>>> mydict = {}
>>> 'firstkey' in mydict
False
>>> mydict['firstkey'] = 'firstval'
>>> mydict.values()
['firstval']
>>> mydict.keys()
['firstkey']
>>> len(mydict)
1
>>> mydict
{'firstkey': 'firstval'}
Jython – set
>>> s1 = set(['jython', 'cpython'])
>>> s1.add('ironpython')
>>> s1
set(['ironpython', 'jython', 'cpython'])
>>> s2 = set(['jython', 'ironpython', 'pypy'])
>>> s3 = s1.copy()
>>> s3
set(['ironpython', 'jython', 'cpython'])
>>> s1.difference(s2)
set(['cpython'])
>>> s1.union(s2)
set(['ironpython', 'jython', 'pypy', 'cpython'])
>>> s1.symmetric_difference(s2)
set(['pypy', 'cpython'])
Jython – java.lang.Math
>>> from java.lang import Math
>>> Math.max(4, 7)
7L
>>> Math.pow(10,5)
100000.0
>>> Math.round(8.75)
9L
>>> Math.abs(-9.765)
9.765
>>> from java.lang import System as javasystem
>>> javasystem.out.println("Hello")
Hello
http://jythonbook-ko.readthedocs.org/en/latest/JythonAndJavaIntegration.html
Jython – java.swing
swing_test.py
from javax.swing import JButton, JFrame
frame = JFrame('Hello, Jython!',
defaultCloseOperation = JFrame.EXIT_ON_CLOSE,
size = (300, 300)
)
def change_text(event):
print 'Clicked!'
button = JButton('Click Me!', actionPerformed=change_text)
frame.add(button)
frame.visible = True
> jython swing_test.py
http://jythonbook-ko.readthedocs.org/en/latest/GUIApplications.html
Jython – HelloWorld.java
public class HelloWorld {
public void hello() {
System.out.println("Hello World!");
}
public void hello(String name) {
System.out.printf("Hello %s!", name);
}
}
> javac HelloWorld.java
> jython
>>> import HelloWorld
>>> h = HelloWorld()
>>> h.hello()
Hello World!
>>> h.hello("frank")
Hello frank!
http://jythonbook-ko.readthedocs.org/en/latest/ModulesPackages.html
Jython 참고자료
• The Definitive Guide to Jython
• 원문 http://www.jython.org/jythonbook/en/1.0/
• 번역 http://jythonbook-ko.readthedocs.org/
SikuliX
AutoHotKey vs. Selenium vs. SikuliX
• AutoHotKey
• 스크립팅 언어를 통해 Windows 매크로 생성과 실행을 자동화
• 핫 키, 클립보드 접근, 데이터 입력 양식 GUI 생성, 정규 표현식
• DLL 호출, 윈도우 메시지
• Selenium
• 브라우저 자동화, 웹 애플리케이션 테스트
• WebDriver: 브라우저 기반 테스트, Java로 작성, 여러 환경에 배포
• IDE: 버그 재현, 파이어폭스 애드온
• Sikuli
• 스크린 캡처를 이용
• Jython 기반
Sikuli with Selenium & AHK
• Selenium에서 Sikuli 사용
https://youtu.be/i6oGa9xU_VY
• Sikuli 스크립트를 실행시키는 Autohotkey 스크립트
http://ahkscript.org/forum/viewtopic.php?t=76601&sid=50962
73991c2722bc17580b36133ace4
SikuliX 다운로드와 설치, 실행
• http://www.sikulix.com/download.html
• SikuliX 1.1.0 설치 파일 다운로드 (sikulixsetup....jar)
• 설치에 사용할 폴더를 생성하고, 설치 파일(jar)을 이동
• CMD에서 설치 실행
> java -jar sikulixsetup-1.1.0-…-forsetup.jar
• 설치 옵션 지정하고 진행
• runsikulix.cmd 실행하여 SikuliX 시작
SikuliX 스크립트 – 웹브라우저 열기
SikuliX 스크립트
– 무료 Wi-Fi 사용
$ /Applications/SikuliX.app/run -r ~/Repos/sikuli-scripts/starbucks_wifi.sikuli
Sikuli 예제
• http://www.sikuli.org/videos.html
• Sikuli for Mobile Testing https://youtu.be/01jFl8KrEMY
• 지뢰 찾기 게임 자동 플레이
• 아이튠즈 볼륨 조절
• 시티빌 게임 자동 플레이

More Related Content

What's hot

Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Ki-Hwan Kim
 
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영Tae Young Lee
 
딥러닝(Deep Learing) using DeepDetect
딥러닝(Deep Learing) using DeepDetect딥러닝(Deep Learing) using DeepDetect
딥러닝(Deep Learing) using DeepDetectJunyi Song
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발Jeongkyu Shin
 
제 5회 Lisp 세미나 - 클로저 개발팀을 위한 지속적인 통합
제 5회 Lisp 세미나 - 클로저 개발팀을 위한 지속적인 통합제 5회 Lisp 세미나 - 클로저 개발팀을 위한 지속적인 통합
제 5회 Lisp 세미나 - 클로저 개발팀을 위한 지속적인 통합NAVER D2
 
[244] 분산 환경에서 스트림과 배치 처리 통합 모델
[244] 분산 환경에서 스트림과 배치 처리 통합 모델[244] 분산 환경에서 스트림과 배치 처리 통합 모델
[244] 분산 환경에서 스트림과 배치 처리 통합 모델NAVER D2
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성NAVER D2
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅NAVER D2
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Esun Kim
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규ChangKyu Song
 
12. Application - Python + Pandas
12. Application - Python + Pandas12. Application - Python + Pandas
12. Application - Python + Pandasmerry7
 
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기Jaeseung Ha
 
파이썬 스터디 15장
파이썬 스터디 15장파이썬 스터디 15장
파이썬 스터디 15장SeongHyun Ahn
 
영상 데이터의 처리와 정보의 추출
영상 데이터의 처리와 정보의 추출영상 데이터의 처리와 정보의 추출
영상 데이터의 처리와 정보의 추출동윤 이
 
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) 파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) Tae Young Lee
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine LearningJEEHYUN PAIK
 
[241] 하나의 cpu 에 운영제체 두 개 김성민
[241] 하나의 cpu 에 운영제체 두 개 김성민[241] 하나의 cpu 에 운영제체 두 개 김성민
[241] 하나의 cpu 에 운영제체 두 개 김성민NAVER D2
 
Theano 와 Caffe 실습
Theano 와 Caffe 실습 Theano 와 Caffe 실습
Theano 와 Caffe 실습 정주 김
 

What's hot (20)

Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
 
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
 
딥러닝(Deep Learing) using DeepDetect
딥러닝(Deep Learing) using DeepDetect딥러닝(Deep Learing) using DeepDetect
딥러닝(Deep Learing) using DeepDetect
 
Openface
OpenfaceOpenface
Openface
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
 
제 5회 Lisp 세미나 - 클로저 개발팀을 위한 지속적인 통합
제 5회 Lisp 세미나 - 클로저 개발팀을 위한 지속적인 통합제 5회 Lisp 세미나 - 클로저 개발팀을 위한 지속적인 통합
제 5회 Lisp 세미나 - 클로저 개발팀을 위한 지속적인 통합
 
[244] 분산 환경에서 스트림과 배치 처리 통합 모델
[244] 분산 환경에서 스트림과 배치 처리 통합 모델[244] 분산 환경에서 스트림과 배치 처리 통합 모델
[244] 분산 환경에서 스트림과 배치 처리 통합 모델
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규
 
12. Application - Python + Pandas
12. Application - Python + Pandas12. Application - Python + Pandas
12. Application - Python + Pandas
 
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
 
Openface
OpenfaceOpenface
Openface
 
파이썬 스터디 15장
파이썬 스터디 15장파이썬 스터디 15장
파이썬 스터디 15장
 
영상 데이터의 처리와 정보의 추출
영상 데이터의 처리와 정보의 추출영상 데이터의 처리와 정보의 추출
영상 데이터의 처리와 정보의 추출
 
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) 파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
 
Tensorflow service & Machine Learning
Tensorflow service & Machine LearningTensorflow service & Machine Learning
Tensorflow service & Machine Learning
 
[241] 하나의 cpu 에 운영제체 두 개 김성민
[241] 하나의 cpu 에 운영제체 두 개 김성민[241] 하나의 cpu 에 운영제체 두 개 김성민
[241] 하나의 cpu 에 운영제체 두 개 김성민
 
Theano 와 Caffe 실습
Theano 와 Caffe 실습 Theano 와 Caffe 실습
Theano 와 Caffe 실습
 

Similar to Java와 Python의 만남: Jython과 Sikuli

Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발지수 윤
 
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링OpenStack Korea Community
 
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912Yooseok Choi
 
V8 add on with middleware modules
V8 add on with middleware modulesV8 add on with middleware modules
V8 add on with middleware modulesJay Kim
 
Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.장현 한
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초Kwangyoun Jung
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재Hankyo
 
Lablupconf session8 "Paving the road to AI-powered world"
Lablupconf session8 "Paving the road to AI-powered world"Lablupconf session8 "Paving the road to AI-powered world"
Lablupconf session8 "Paving the road to AI-powered world"Lablup Inc.
 
김종욱 포트폴리오
김종욱 포트폴리오김종욱 포트폴리오
김종욱 포트폴리오Jonguk Kim
 
Python packaging
Python packagingPython packaging
Python packagingJi Hun Kim
 
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기SeungYong Baek
 
JBoss EAP on Azure Workshop
JBoss EAP on Azure Workshop JBoss EAP on Azure Workshop
JBoss EAP on Azure Workshop rockplace
 
구글 앱 엔진의 활용(Google App Engine) 2부
구글 앱 엔진의 활용(Google App Engine) 2부구글 앱 엔진의 활용(Google App Engine) 2부
구글 앱 엔진의 활용(Google App Engine) 2부mosaicnet
 
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발현승 배
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기현철 조
 
Netty 세미나
Netty 세미나Netty 세미나
Netty 세미나Jang Hoon
 

Similar to Java와 Python의 만남: Jython과 Sikuli (20)

Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발
 
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링
[OpenInfra Days Korea 2018] (Track 4) - Grafana를 이용한 OpenStack 클라우드 성능 모니터링
 
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
 
V8 add on with middleware modules
V8 add on with middleware modulesV8 add on with middleware modules
V8 add on with middleware modules
 
Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재
 
Lablupconf session8 "Paving the road to AI-powered world"
Lablupconf session8 "Paving the road to AI-powered world"Lablupconf session8 "Paving the road to AI-powered world"
Lablupconf session8 "Paving the road to AI-powered world"
 
김종욱 포트폴리오
김종욱 포트폴리오김종욱 포트폴리오
김종욱 포트폴리오
 
Python packaging
Python packagingPython packaging
Python packaging
 
okspring3x
okspring3xokspring3x
okspring3x
 
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기
 
Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
JBoss EAP on Azure Workshop
JBoss EAP on Azure Workshop JBoss EAP on Azure Workshop
JBoss EAP on Azure Workshop
 
Spring boot DI
Spring boot DISpring boot DI
Spring boot DI
 
구글 앱 엔진의 활용(Google App Engine) 2부
구글 앱 엔진의 활용(Google App Engine) 2부구글 앱 엔진의 활용(Google App Engine) 2부
구글 앱 엔진의 활용(Google App Engine) 2부
 
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 
파이썬으로 익히는 딥러닝
파이썬으로 익히는 딥러닝파이썬으로 익히는 딥러닝
파이썬으로 익히는 딥러닝
 
Netty 세미나
Netty 세미나Netty 세미나
Netty 세미나
 

Java와 Python의 만남: Jython과 Sikuli

  • 1. Java와 Python의 만남: Jython과 Sikuli 정보기술 시대에 유익한 파이썬 프로그래밍 – 제 10 강 (1) 동양미래대학교 2015.7 최용 <sk8er.choi@gmail.com>
  • 3. Jython • Java 플랫폼을 위한 Python • Java 바이트코드에 대한 정적 컴파일 및 동적 컴파일 • Java 클래스를 Jython에서 확장 가능 • Java의 설계에 부합하는 완전한 객체 지향 프로그래밍을 지원 • Python 언어 및 그 레퍼런스 구현인 CPython을 따름 • Jython 2.7은 CPython 2.7에 대응
  • 4. Python & Jython Python 2.7 • C • Multi-platform • .pyc로 컴파일 • C 확장 • GIL • Python 가비지 컬렉션(참조 횟수 세기) Jython 2.7 • Java(Java Native Runtime for C 사용) • Java 7 또는 8 • $py.class 파일로 컴파일 • JFFI를 사용하여 Java 또는 C 확장 • 완전한 멀티 쓰레드 • Java 가비지 컬렉션 또는 Python 2.7 과 같은 GC API도 제공 https://wiki.python.org/jython/WhyJython
  • 6. Jython 2.7 – 추가적 지원 • six – 단일 소스 코드로 Python 2와 3 지원 • socket/select/ssl, requests • pip, setuptools • 실행 가능한 zip 아카이브 • 지역화된 플랫폼, CJK 인코딩 https://speakerdeck.com/wolevertest/jim-baker-getting-to-jython-2-dot-7-and-beyond?slide=50
  • 7. Jython 적용 사례 – WLST • Oracle WebLogic: Java EE 표준 준수 웹 애플리케이션 서버 • WLST(WebLogic Scripting Tool): WebLogic 서버 인스턴스와 도메인을 관리하는 명령행 스크립팅 인터페이스 from weblogic.management.security.authentication import GroupEditorMBean user = "my_user" print "Checking if "+user+ " is a Member of a group ... " atnr=cmo.getSecurityConfiguration().getDefaultRealm().lookupAuthenticationProvider("DefaultAuthenticator") if atnr.isMember('Administrators',user,true) == 0: print user+ " is not member of Administrators" else: print user+ " is a member of Administrators" Example 6-8 Verifying Whether a User is a Member of a Group https://docs.oracle.com/cd/E29542_01/web.1111/e13715/config_wls.htm#WLSTG210
  • 8. Jython 적용 사례 – HP Universal CMDB • CMDB(Configuration Management Database, 구성관리 데이터베이스) • 변경, 릴리스, 인시던트, 서비스 요청, 문제점, 구성 관리 프로세스에 사용할 구성 품목(CI) 에 대한 정보를 저장하는 데이터베이스 • IT 프로세스들이 정확성 및 일관성을 유지할 수 있도록 단일 정보소스를 제공 • HP Universal CMDB는 Jython을 이용하여 CI를 갱신할 수 있도록 adapter를 제공 http://dade.co.za/2015/06/17/example-script-to-update-a-ci-in-hp-ucmdb-using-python-and-suds/
  • 9. Jython 적용 사례 – nGrinder • 네이버의 성능 테스트 도구 • http://deview.kr/2013/detail.nhn?topicSeq=2
  • 10. Java 설치 • http://www.oracle.com/technetwork/java/javase/downloads/index.html • JDK 다운로드 • 설치 • 설치 확인 > java -version
  • 11. Jython 다운로드와 설치 • http://www.jython.org/downloads.html • Download Jython 2.7.0 – Installer • java -jar jython-installer-2.7.0.jar • Installation type: standard • 시스템 속성 – 고급 – 환경 변수 • JYTHON_PATH=C:jython2.7.0 • PATH=%PATH%;%JYTHON_PATH%bin
  • 12. Jython 실행 대화식 > jython >>> print("Hello, Jython!") Hello, Jython! 스크립트 hello.py print("Hello, Jython!") > jython hello.py Hello, Jython!
  • 13. Jython – list >>> my_string_list = ['Hello', 'Jython', 'Lists'] >>> multi_list = [1, 2, 'three', 4, 'five', 'six'] >>> combo_list = [1, my_string_list, multi_list] >>> my_string_list[2] 'Lists' >>> my_string_list_copy = my_string_list[:] >>> my_string_list_copy ['Hello', 'Jython', 'Lists'] >>> new_list = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] >>> new_list[0:10:2] [2, 6, 10, 14, 18] >>> new_list[::2] [2, 6, 10, 14, 18] http://jythonbook-ko.readthedocs.org/en/latest/DataTypes.html
  • 14. Jython – list >>> ourList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> for elem in ourList[:5]: ... print(elem) ... 1 2 3 4 5 >>> num_list = [1, 2, 3, 4] >>> [num * 2 for num in num_list] [2, 4, 6, 8]
  • 15. Jython – tuple >>> myTuple = () >>> myTuple2 = (1, 'two', 3, 'four') >>> myTuple2 (1, 'two', 3, 'four') >>> myteam = 'Bears', >>> myteam ('Bears',)
  • 16. Jython – dict >>> mydict = {} >>> 'firstkey' in mydict False >>> mydict['firstkey'] = 'firstval' >>> mydict.values() ['firstval'] >>> mydict.keys() ['firstkey'] >>> len(mydict) 1 >>> mydict {'firstkey': 'firstval'}
  • 17. Jython – set >>> s1 = set(['jython', 'cpython']) >>> s1.add('ironpython') >>> s1 set(['ironpython', 'jython', 'cpython']) >>> s2 = set(['jython', 'ironpython', 'pypy']) >>> s3 = s1.copy() >>> s3 set(['ironpython', 'jython', 'cpython']) >>> s1.difference(s2) set(['cpython']) >>> s1.union(s2) set(['ironpython', 'jython', 'pypy', 'cpython']) >>> s1.symmetric_difference(s2) set(['pypy', 'cpython'])
  • 18. Jython – java.lang.Math >>> from java.lang import Math >>> Math.max(4, 7) 7L >>> Math.pow(10,5) 100000.0 >>> Math.round(8.75) 9L >>> Math.abs(-9.765) 9.765 >>> from java.lang import System as javasystem >>> javasystem.out.println("Hello") Hello http://jythonbook-ko.readthedocs.org/en/latest/JythonAndJavaIntegration.html
  • 19. Jython – java.swing swing_test.py from javax.swing import JButton, JFrame frame = JFrame('Hello, Jython!', defaultCloseOperation = JFrame.EXIT_ON_CLOSE, size = (300, 300) ) def change_text(event): print 'Clicked!' button = JButton('Click Me!', actionPerformed=change_text) frame.add(button) frame.visible = True > jython swing_test.py http://jythonbook-ko.readthedocs.org/en/latest/GUIApplications.html
  • 20. Jython – HelloWorld.java public class HelloWorld { public void hello() { System.out.println("Hello World!"); } public void hello(String name) { System.out.printf("Hello %s!", name); } } > javac HelloWorld.java > jython >>> import HelloWorld >>> h = HelloWorld() >>> h.hello() Hello World! >>> h.hello("frank") Hello frank! http://jythonbook-ko.readthedocs.org/en/latest/ModulesPackages.html
  • 21. Jython 참고자료 • The Definitive Guide to Jython • 원문 http://www.jython.org/jythonbook/en/1.0/ • 번역 http://jythonbook-ko.readthedocs.org/
  • 23. AutoHotKey vs. Selenium vs. SikuliX • AutoHotKey • 스크립팅 언어를 통해 Windows 매크로 생성과 실행을 자동화 • 핫 키, 클립보드 접근, 데이터 입력 양식 GUI 생성, 정규 표현식 • DLL 호출, 윈도우 메시지 • Selenium • 브라우저 자동화, 웹 애플리케이션 테스트 • WebDriver: 브라우저 기반 테스트, Java로 작성, 여러 환경에 배포 • IDE: 버그 재현, 파이어폭스 애드온 • Sikuli • 스크린 캡처를 이용 • Jython 기반
  • 24. Sikuli with Selenium & AHK • Selenium에서 Sikuli 사용 https://youtu.be/i6oGa9xU_VY • Sikuli 스크립트를 실행시키는 Autohotkey 스크립트 http://ahkscript.org/forum/viewtopic.php?t=76601&sid=50962 73991c2722bc17580b36133ace4
  • 25. SikuliX 다운로드와 설치, 실행 • http://www.sikulix.com/download.html • SikuliX 1.1.0 설치 파일 다운로드 (sikulixsetup....jar) • 설치에 사용할 폴더를 생성하고, 설치 파일(jar)을 이동 • CMD에서 설치 실행 > java -jar sikulixsetup-1.1.0-…-forsetup.jar • 설치 옵션 지정하고 진행 • runsikulix.cmd 실행하여 SikuliX 시작
  • 26. SikuliX 스크립트 – 웹브라우저 열기
  • 27. SikuliX 스크립트 – 무료 Wi-Fi 사용 $ /Applications/SikuliX.app/run -r ~/Repos/sikuli-scripts/starbucks_wifi.sikuli
  • 28. Sikuli 예제 • http://www.sikuli.org/videos.html • Sikuli for Mobile Testing https://youtu.be/01jFl8KrEMY • 지뢰 찾기 게임 자동 플레이 • 아이튠즈 볼륨 조절 • 시티빌 게임 자동 플레이