GitHub investierte sehr stark im Bereich Security und hat als weltweit grösste Open-Source-Plattform auch die ideale Basis, um Abhängigkeiten und Schwachstellen viel genutzter Bibliotheken zu analysieren und zu notifizieren. In öffentlichen wie auch in privaten Repositories in GitHub Enterprise Cloud und GitHub Enterprise Server stehen einem unter dem Betriff "GitHub Advanced Security" eine Vielzahl von Sicherheitsfunktionen zur Verfügung.
Dieser Vortrag zeigt die Funktionsweise der Features Code Scanning, Secret Scanning und Dependency Review auf. GitHub Actions und Pull Requests runden die Werkzeugkiste für einen erfolgreichen DevSecOps-Prozess ab.
spark 1.6을 기준으로 spark sql에 대해서 개략적으로 설명한 자료입니다. 발표 자료가 친절하지 않으나 한글로 된 자료가 없길래 혹시나 도움 되시는 분들이 있을까 하여 공유합니다.
발표자료 보다는 마지막 페이지의 참고자료들을 읽어보시기를 권장 드립니다.
출처만 남겨주시면 자유롭게 가져가셔서 사용하셔도 무방합니다.
GitHub investierte sehr stark im Bereich Security und hat als weltweit grösste Open-Source-Plattform auch die ideale Basis, um Abhängigkeiten und Schwachstellen viel genutzter Bibliotheken zu analysieren und zu notifizieren. In öffentlichen wie auch in privaten Repositories in GitHub Enterprise Cloud und GitHub Enterprise Server stehen einem unter dem Betriff "GitHub Advanced Security" eine Vielzahl von Sicherheitsfunktionen zur Verfügung.
Dieser Vortrag zeigt die Funktionsweise der Features Code Scanning, Secret Scanning und Dependency Review auf. GitHub Actions und Pull Requests runden die Werkzeugkiste für einen erfolgreichen DevSecOps-Prozess ab.
spark 1.6을 기준으로 spark sql에 대해서 개략적으로 설명한 자료입니다. 발표 자료가 친절하지 않으나 한글로 된 자료가 없길래 혹시나 도움 되시는 분들이 있을까 하여 공유합니다.
발표자료 보다는 마지막 페이지의 참고자료들을 읽어보시기를 권장 드립니다.
출처만 남겨주시면 자유롭게 가져가셔서 사용하셔도 무방합니다.
[ 2018 컨테이너 기술의 모든 것 ] NBP 박기은 CTO 세션에서 소개된 네이버 클라우드 플랫폼의 컨테이너 기술 관련 서비스 및 향후 로드맵을 공유합니다.
[ 2018 All About Container ] Presentation about container technology & service roadmap of NAVER CLOUD PLATFORM by NBP cloud solution CTO "Park Ki Eun"
본 장표는 인프콘 2022 / 코틀린 멀티플랫폼, 미지와의 조우 세션에 대한 강연 자료입니다.
코틀린은 멀티플랫폼을 지원하는 언어로 Server-side와 Android뿐만이 아니라 JavaScript 엔진이 있는 브라우저나 Node.js도 지원하며, Native 등 다양한 플랫폼에서 쓸 수 있습니다. 이를 이용해 코틀린 코드를 공유하는 단일 코드베이스로 모바일부터 웹과 데스크톱, 서버에 이르기까지 다중 플랫폼 애플리케이션을 작성할 수 있습니다.
본 핸즈온 세션을 통해 코틀린 멀티플랫폼과 함께 리액트, 스프링부트로 웹 애플리케이션의 프론트엔드부터 백엔드까지 직접 개발하며 친해져 보는 시간을 가져보세요. 참가자는 코틀린 멀티플랫폼 프로젝트를 이해하고, 더 나아가 프론트엔드와 백엔드 간의 공유 로직 작성, Kotlin/JS 기반 리액트 및 스프링 웹 프로그래밍을 경험할 수 있습니다.
https://github.com/arawn/building-fullstack-webapp-with-kotlin-multiplatform
https://infcon.day/speaker/박용권-김지헌-코틀린-멀티플랫폼/
AWS 클라우드를 활용하면 사용자의 트래픽에 따라 IT 인프라 아키텍처를 확장할 수 있습니다. 이번 강연에서는 서비스 초기의 작은 트래픽에 대응할 수 있는 단순한 아키텍처로 시작해 사업 성장 후의 수백만 사용자에 달하는 대규모 트래픽을 지탱할 수 있는 고확장성 아키텍처에 이르기까지의 단계별 아키텍처 구성 방법에 대해 소개해 드리고 컴퓨팅 및 데이터베이스 선택 및 사용자 증가에 따른 트래픽 경감 방법, 오토스케일링 및 모니터링과 자동화, DB 부하 분산, 고가용성 확보 등에 대한 다양한 모범사례를 알려드릴 예정입니다.
자프링(자바 + 스프링) 외길 12년차 서버 개발자가 코프링(코틀린 + 스프링)을 만난 후 코틀린의 특징과 스프링의 코틀린 지원을 알아가며 코프링 월드에서 살아남은 이야기…
코드 저장소: https://github.com/arawn/kotlin-support-in-spring
A quick overview of tips, tricks and code snippets for developers using Symfony and all its ecosystem, from Monolog to Doctrine. Learn how to become more productive and discover some rarely used options and features.
Run tests at scale with on-demand Selenium Grid using AWS FargateMegha Mehta
Blog: https://meghamehta.tech/2020/07/13/run-selenium-tests-in-containers-using-aws-ecs-fargate/
Youtube link of the talk: https://www.youtube.com/watch?v=npSlm1YUp-Q
This presentation is from my talk at DSTC 2019, showcasing a cloud-native container solution to run 1000s of tests in an on-demand, scalable Selenium Grid.
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017Carol Smith
What is machine learning? Is UX relevant in the age of artificial intelligence (AI)? How can I take advantage of cognitive computing? Get answers to these questions and learn about the implications for your work in this session. Carol will help you understand at a basic level how these systems are built and what is required to get insights from them. Carol will present examples of how machine learning is already being used and explore the ethical challenges inherent in creating AI. You will walk away with an awareness of the weaknesses of AI and the knowledge of how these systems work.
[ 2018 컨테이너 기술의 모든 것 ] NBP 박기은 CTO 세션에서 소개된 네이버 클라우드 플랫폼의 컨테이너 기술 관련 서비스 및 향후 로드맵을 공유합니다.
[ 2018 All About Container ] Presentation about container technology & service roadmap of NAVER CLOUD PLATFORM by NBP cloud solution CTO "Park Ki Eun"
본 장표는 인프콘 2022 / 코틀린 멀티플랫폼, 미지와의 조우 세션에 대한 강연 자료입니다.
코틀린은 멀티플랫폼을 지원하는 언어로 Server-side와 Android뿐만이 아니라 JavaScript 엔진이 있는 브라우저나 Node.js도 지원하며, Native 등 다양한 플랫폼에서 쓸 수 있습니다. 이를 이용해 코틀린 코드를 공유하는 단일 코드베이스로 모바일부터 웹과 데스크톱, 서버에 이르기까지 다중 플랫폼 애플리케이션을 작성할 수 있습니다.
본 핸즈온 세션을 통해 코틀린 멀티플랫폼과 함께 리액트, 스프링부트로 웹 애플리케이션의 프론트엔드부터 백엔드까지 직접 개발하며 친해져 보는 시간을 가져보세요. 참가자는 코틀린 멀티플랫폼 프로젝트를 이해하고, 더 나아가 프론트엔드와 백엔드 간의 공유 로직 작성, Kotlin/JS 기반 리액트 및 스프링 웹 프로그래밍을 경험할 수 있습니다.
https://github.com/arawn/building-fullstack-webapp-with-kotlin-multiplatform
https://infcon.day/speaker/박용권-김지헌-코틀린-멀티플랫폼/
AWS 클라우드를 활용하면 사용자의 트래픽에 따라 IT 인프라 아키텍처를 확장할 수 있습니다. 이번 강연에서는 서비스 초기의 작은 트래픽에 대응할 수 있는 단순한 아키텍처로 시작해 사업 성장 후의 수백만 사용자에 달하는 대규모 트래픽을 지탱할 수 있는 고확장성 아키텍처에 이르기까지의 단계별 아키텍처 구성 방법에 대해 소개해 드리고 컴퓨팅 및 데이터베이스 선택 및 사용자 증가에 따른 트래픽 경감 방법, 오토스케일링 및 모니터링과 자동화, DB 부하 분산, 고가용성 확보 등에 대한 다양한 모범사례를 알려드릴 예정입니다.
자프링(자바 + 스프링) 외길 12년차 서버 개발자가 코프링(코틀린 + 스프링)을 만난 후 코틀린의 특징과 스프링의 코틀린 지원을 알아가며 코프링 월드에서 살아남은 이야기…
코드 저장소: https://github.com/arawn/kotlin-support-in-spring
A quick overview of tips, tricks and code snippets for developers using Symfony and all its ecosystem, from Monolog to Doctrine. Learn how to become more productive and discover some rarely used options and features.
Run tests at scale with on-demand Selenium Grid using AWS FargateMegha Mehta
Blog: https://meghamehta.tech/2020/07/13/run-selenium-tests-in-containers-using-aws-ecs-fargate/
Youtube link of the talk: https://www.youtube.com/watch?v=npSlm1YUp-Q
This presentation is from my talk at DSTC 2019, showcasing a cloud-native container solution to run 1000s of tests in an on-demand, scalable Selenium Grid.
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017Carol Smith
What is machine learning? Is UX relevant in the age of artificial intelligence (AI)? How can I take advantage of cognitive computing? Get answers to these questions and learn about the implications for your work in this session. Carol will help you understand at a basic level how these systems are built and what is required to get insights from them. Carol will present examples of how machine learning is already being used and explore the ethical challenges inherent in creating AI. You will walk away with an awareness of the weaknesses of AI and the knowledge of how these systems work.
NDC Python 게임서버 안녕하십니까? : 몬스터 슈퍼리그 게임 서버 편의 후속으로 기획된 발표입니다. 사내 준비 도중 "너굴" 님의 질문에서 시작되었습니다.
이 발표는 잘 알려진 RPC Framework 인 Thrift, gRPC를 살펴보고 예시로 오델로 게임을 만들어보면서 기존 RPC framework 들이 게임의 서버/클라 구조에 잘 어울리지는 살펴보고 왜 몬스터 슈퍼리그에서 그런 선택을 했는지 살펴봅니다.
그리고 게임에 맞게 RPC 를 설계하고 이를 이용하여 온라인 오델로 게임을 완성해봅니다.
아마존 에코를 활용한 음성 인식 에어컨 제어 A to zJueun Seo
회사 사무실에는 에어컨이 3대 설치되어 있습니다. 출퇴근시 에어컨 세대를 끄고 켜는데 불편한 점이 많습니다. 특히 3대중에 한대만 다른 모델이라 각각의 리모컨 찾는데 시간이 걸리는 경우가 많습니다. 이번 발표에서는 3대의 에어컨을 음성으로 동시에 제어할 수 있는 시스템을 구축하기 위한 A부터 Z까지 세세한 과정을 소개합니다. 요즘에는 아마존 에코와 라즈베리파이라는 훌륭한 제품들이 나와있어 음성 인식으로 하드웨어를 제어하기가 매우 쉬워졌습니다. 에코의 명령을 처리하기위한 서버로 django/celery를 이용하였습니다. 하드웨어 지식이 없어도 이해할 수 있는 수준이며 django와 도커가 무엇인지는 알면 좋지만 모르더라도 최대한 쉽게 이해할 수 있도록 발표를 진행할 예정입니다. 소스코드까지 모두 공개했기 때문에 발표를 듣고나서 똑같은 시스템을 구축하거나 다른 방식으로 응용하는데에 도움이 되었으면 좋겠습니다.
발표 순서는 다음과 같습니다.
적외선 신호 송수신을 위한 라즈베리파이 회로 설계
LIRC를 이용한 적외선 회로 제어
아마존 에코와 Django 서버 연동하기
ngrok 무료 버전을 활용한 고정 public url 생성하기 - celery 활용
Docker/Ansible로 Django/Celery 패키징하기
진행중인 프로젝트는 아래 github repository에 공개되어 있습니다
https://github.com/Buzzvil/hardware-lab
C++은 10년 만에 C++11/14를 발표하면서 '모던 C++'이라는 이름으로 발전했습니다. 그만큼 새로운 기능들이 많이 추가되었습니다. 그리고 2017년, C++은 C++17이라는 이름으로 또 한 번의 발전을 준비하고 있습니다. 3년 주기로 빠르게 변화하는 모던 C++에 대비하기 위해, C++17에 추가될 주요 기능들을 살펴보고자 합니다.
이 발표는 이전에 발표했던 내용에서 일부 사례 추가 및 최신 내용으로 갱신한 버전입니다.
## 4. Python을 서브언어로 편하게 PS해보자!
PS의 주류는 C++이고, 문제의 제한 또한 보통 C++ 기준으로 만들어지기 때문에, Python 등의 C++이 아닌 기타 언어가 PS의 세계에서 주인공이 되기는 힘듭니다. 저 또한 대부분의 PS 문제를 C++로 풉니다.
하지만 Python 은 간결한 코드에서 나오는 강력한 생산성과 특정 편의 기능들을 바탕으로 PS의 특수한 상황에서는 굉장히 빠르게 코드를 짤 수 있어 쓸 만한 가치가 있기도 합니다.
이번 발표에서는 특수한 상황의 PS에서 Python을 유용하게 해 주는 다음과 같은 몇 가지 특징들을 소개하며, Python을 서브언어로 쓰기 좋은 문제들을 알아 볼 것입니다:
1. int: 내장된 integer 임의 정밀도 큰 수 연산의 편리함
2. Decimal, Fraction: floating number의 임의 정밀도를 처리하기 편한 모듈
3. itertools: C++의 next_permutation의 강화판, 다양한 순열과 조합을 구하는 함수들이 들어있는 모듈
4. 기타: operator 모듈의 itemgetter를 이용한 sort의 key 정하기, pow(n,mod-2,mod)를 통해 modular inverse 편하게 하기, list comprehension[ f(a) for a in lis ]등
### 슥삭 (BOJ ban4861)
Python과 PS를 향유하는 것을 좋아하는 PS 향유회의 코포 블루/솔브드 다이아 PS러입니다.
모던 C++의 시초인 C++11은 C++ 코드 전반에 많은 변화를 가져왔습니다. 그리고 최근 C++20의 표준위원회 회의가 마무리되었습니다. 내년에 C++20이 도입되면 C++11이 처음 도입되었을 때와 비슷한 규모, 또는 그 이상의 변화가 있을 것이라고 예상하고 있습니다. C++20에는 Concepts, Contract, Ranges, Coroutine, Module 등 굵직한 기능 외에도 많은 기능들이 추가될 예정입니다. 이번 세션에서는 C++20에 추가될 주요 기능들을 살펴보고자 합니다.
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Ki-Hwan Kim
PYCON Korea 2015
Python은 과학 계산 분야에서도 이미 널리 사용되고 있습니다. numpy와 scipy 기반으로 만들어진 많은 모듈들이 휼륭한 생태계를 이루고 있기 때문입니다. 그러나 극한의 계산 성능을 요구하는 분야(HPC, High Performance Computing)에서는 여전히 C와 Fortran으로만으로 짜여진 코드들이 선호되고 있습니다. 이런 분야에서 Python에 대한 일반적인 견해는 전처리/후처리에는 유용하지만 메인 코드에 적용하기에는 느리다라는 것입니다.
이번 발표에서는 HPC 분야에서도 Python의 유용함을 보여줍니다. 계산이 집중된 부분만을 Fortran, C로 구현하여 Python 메인 코드에 접합하면, Python의 장점은 충분히 활용하면서도 계산 성능에 큰 손해는 보지 않을 수 있습니다. 게다가 CUDA-C, OpenCL-C와 연동하면 GPU, MIC와 같은 가속 프로세서들도 비교적 쉽게 활용할 수 있습니다. 이번 발표에서는 간단한 시뮬레이션 코드를 예제로 사용하여 Python 코드로부터 시작하여 Fortran, C, CUDA-C, OpenCL-C 등을 단계적으로 접합해 나가는 것을 보여줄 것입니다.
애플사의 새로운 프로그래밍 언어인 Swift 언어에 대해 개발자들의 관심이 커지고 있습니다. 본 발표에서는 실제 예제를 통해서 Swift의 함수와 메소드에 대해 알아보고, 튜플을 이용한 다중 변수 리턴기능과 제너릭등에 대한 재미있는 기능도 알아보겠습니다.
2014년 7월 19일 모바일 앱 개발자 포럼 발표자료를 공유합니다.
9. 레시피
파이썬 코드 파싱 ast
C언어 변환 cython
컴파일 distutils
모듈 동적 로드 importlib
10. Cython
파이썬 문법을 기반
파이썬 코드를 C 언어로 변환
변환된 소스코드(C 언어)를 컴파일
컴파일된 모듈을 파이썬과 연동
Cython 코드
def integrate_f(double a, double b, int N):
cdef int i
cdef double s, dx
s = 0
dx = (b - a)/N
for i in range(N):
s += f(a + I * dx)
return s * dx
11. Cython
차이점은 변수 타입을 선언
선언하지 않아도 문제 없습니다
변수 타입을 지정하면 속도 증가
Cython 코드
def integrate_f(double a, double b, int N):
cdef int i
cdef double s, dx
s = 0
dx = (b - a)/N
for i in range(N):
s += f(a + I * dx)
return s * dx
13. JIT 컴파일 과정
JIT 함수 선언
JIT 함수 실행
Cython 코드 생성
C 코드 생성
컴파일
모듈 로드
실행
14. JIT 컴파일 과정
JIT 함수 선언
JIT 함수 실행(런타임)
Cython 코드 생성(런타임)
C 코드 생성(런타임)
컴파일(런타임)
모듈 로드(런타임)
실행
15. JIT 함수 선언
@jit
def f(I, J):
res = 0.0
for i in range(I):
for j in range (J * I):
res += 1
return res
데코레이터로 표시
이 함수가 실행되면 JIT 컴파일
16. JIT 함수 호출
result = f(1, 500) 호출 시 인자의 타입 정보를 가지고 JIT 컴파일 시작
1은 정수형
500도 정수형
17. Cython 코드 생성
def f(I, J):
res = 0.0
for i in range(I):
for j in range (J * I):
res += 1
return res
함수 내부의 변수 타입을 찾자(코드를 파싱)
import ast
import inspect
node = ast.parse(inspect.getsource(f))
18. Cython 코드 생성
def f(I, J):
res = 0.0
for i in range(I):
for j in range (J * I):
res += 1
return res
함수 코드의 AST(Abstract Syntax Tree) 추출
19. Cython 코드 생성
def f(I, J):
res = 0.0
for i in range(I):
for j in range (J * I):
res += 1
return res
변수 res 는 실수형
20. Cython 코드 생성
def f(I, J):
res = 0.0
for i in range(I):
for j in range (J * I):
res += 1
return res
변수 i, j 는 정수형
21. Cython 코드 생성
AST를 다시 코드로 변환하여 Cython 코드 생성 def jit_f(I, J):
res = 0.0
for i in range(I):
for j in range(J * I):
res += 1
return res
22. Cython 코드 생성
변수 타입 정보를 가지고 Cython 변수 선언
def jit_f(long I, long J):
cdef long j
cdef long i
cdef double res
res = 0.0
for i in range(I):
for j in range(J * I):
res += 1
return res
23. C 코드 생성
def jit_f(long I, long J):
cdef long j
cdef long i
cdef double res
res = 0.0
for i in range(I):
for j in range(J * I):
res += 1
return res
from Cython.Build.Dependencies import Cythonize
.....
Cythonize(.....)
.....
26. import imp
Cython_module = imp.load_dynamic(name, path)
f = Cython_module.jit_f
모듈 동적 로드
함수 f는 컴파일 된 함수(jit_f)로 교체
27. 실행
result = f(1, 500)
result = jit_f(1, 500)
def jit(func):
def wrapper(*args, **kwargs):
func 코드를 Cython 코드로 변환
Cython 코드, C 코드 컴파일
모듈 동적 로드
return jit_func(*args, **kwargs)
return wrapper
28. 실행
result = f(1, 500)
result = jit_f(1, 500)
컴파일 된 함수 jit_f(1, 500) 실행
1000000000.0 을 반환하여 result 에 저장
만약 또 f 함수가 실행 된다면?
이미 준비 된 jit_f를 바로 실행
29. 성능
소수 찾기
def primes(kmax):
result = list()
p = [0 for i in range(1000)]
k = 0
n = 2
while k < kmax:
i = 0
while i < k and n % p[i] != 0:
i = i + 1
if i == k:
p[k] = n
k = k + 1
result.append(n)
n = n + 1
return result
30. def primes(kmax):
result = list()
p = [0 for i in range(1000)]
k = 0
n = 2
while k < kmax:
i = 0
while i < k and n % p[i] != 0:
i = i + 1
if i == k:
p[k] = n
k = k + 1
result.append(n)
n = n + 1
return result
성능
소수 찾기
2.7 배 증가
31. 성능
예제 코드 def f(I, J):
res = 0.0
for i in range(I):
for j in range (J * I):
res += 1
return res
32. def f(I, J):
res = 0.0
for i in range(I):
for j in range (J * I):
res += 1
return res
성능
예제 코드
36 배 증가
33. 결론
Python 코드를 기계어로 컴파일
컴파일 된 기계어를 로딩하여 실행
같은 코드가 반복 실행되면 캐싱 된 기계어를 직접 실행
위 과정을 런타임에 수행하는 JIT 컴파일러 구현
34. 그러나
간단한 JIT 컴파일러의 제약
함수가 최초로 실행될 때 컴파일 시간이 필요합니다
Python Cython C Binary Run
자주 반복되지 않으면 직접 실행보다 느릴 수 있습니다
자주 반복되는 코드에 효과적
메모리 누수 발생 가능성?! 예외 처리?!
35. 그래도
프로토타입은 Python 코드 LLVM 중간코드 생성
복잡한 과정 없이 단순하게 LLVM 중간코드 생성
성숙된 LLVM 기술 사용 가능
36. LLVM 중간코드 생성
@llvm.jit
def f(I, J):
res = 0.0
for i in range(I):
for j in range (J * I):
res += 1
return res
37. LLVM 중간코드 생성
@llvm.jit
def f(I, J):
res = 0.0
for i in range(I):
for j in range (J * I):
res += 1
return res
38. 마지막으로
LLVM 을 사용하면 효과적인 JIT 컴파일러 제작
LLVM 을 설명하기에는 여백이 부족…
휼륭한 LLVM 기반 JIT 컴파일러가 존재?!
https://numba.pydata.org/