[2012 CodeEngn Conference 07] nesk - Defcon 20th : 본선 CTF 문제풀이GangSeok Lee
2012 CodeEngn Conference 07
데프콘은 매년 라스베이거스에서 열리는 세계적으로 가장 권위 있는 보안 컨퍼런스 중 하나로 CTF 대회를 진행하고 있다. 올해 데프콘은 특히 20주년을 맞아서 20개팀이 본선에 참가하였으며, 다양한 문제들이 출제되었다. 보통 해킹대회에서의 예선전 풀이는 많지만 본선문제에 관한 정보는 많이 부족하기 때문에 CTF에 출제된 문제중 몇문제를 선정하여 풀이한다.
http://codeengn.com/conference/07
Steered response power phase transform(SRP-PHAT)은 음원 방향 추정을 위해 널리 사용되는 알고리즘이다. SRP-PHAT는 매우 많은 수의 후보 좌표를 조사해야만 하므로 기존 SRP-PHAT들은 실시간에 실행되지 못할 수도 있었다. 이 문제를 극복하기 위해, SRP-PHAT를 graphics processing units(GPUs) 기반으로 병렬화하는 시도가 있었다. 그러나, 그 방법들은 on-chip 메모리를 모두 쓰지 못하여 GPUs의 최대 연산 능력을 활용할 수 없었다. 이 발표에서 우리는 SRP-PHAT의 GPU 기반 병렬 알고리즘들을 주파수 영역과 시간 영역의 두 버전으로 제안한다. 제안된 알고리즘들은 SRP-PHAT의 메모리 접근 패턴을 최적화하고 on-chip 메모리를 공격적으로 사용한다. 결과적으로 제안된 방법들은 CPU 기반 알고리즘들에 비해 주파수 영역에서 1,276 배 그리고 시간 영역에서 80 배의 속도 향상을, 그리고 기존 GPU 기반 알고리즘들에 비해 주파수 영역에서 1.5 배 그리고 시간 영역에서 6 배의 속도 향상을 보였다.
[2012 CodeEngn Conference 07] nesk - Defcon 20th : 본선 CTF 문제풀이GangSeok Lee
2012 CodeEngn Conference 07
데프콘은 매년 라스베이거스에서 열리는 세계적으로 가장 권위 있는 보안 컨퍼런스 중 하나로 CTF 대회를 진행하고 있다. 올해 데프콘은 특히 20주년을 맞아서 20개팀이 본선에 참가하였으며, 다양한 문제들이 출제되었다. 보통 해킹대회에서의 예선전 풀이는 많지만 본선문제에 관한 정보는 많이 부족하기 때문에 CTF에 출제된 문제중 몇문제를 선정하여 풀이한다.
http://codeengn.com/conference/07
Steered response power phase transform(SRP-PHAT)은 음원 방향 추정을 위해 널리 사용되는 알고리즘이다. SRP-PHAT는 매우 많은 수의 후보 좌표를 조사해야만 하므로 기존 SRP-PHAT들은 실시간에 실행되지 못할 수도 있었다. 이 문제를 극복하기 위해, SRP-PHAT를 graphics processing units(GPUs) 기반으로 병렬화하는 시도가 있었다. 그러나, 그 방법들은 on-chip 메모리를 모두 쓰지 못하여 GPUs의 최대 연산 능력을 활용할 수 없었다. 이 발표에서 우리는 SRP-PHAT의 GPU 기반 병렬 알고리즘들을 주파수 영역과 시간 영역의 두 버전으로 제안한다. 제안된 알고리즘들은 SRP-PHAT의 메모리 접근 패턴을 최적화하고 on-chip 메모리를 공격적으로 사용한다. 결과적으로 제안된 방법들은 CPU 기반 알고리즘들에 비해 주파수 영역에서 1,276 배 그리고 시간 영역에서 80 배의 속도 향상을, 그리고 기존 GPU 기반 알고리즘들에 비해 주파수 영역에서 1.5 배 그리고 시간 영역에서 6 배의 속도 향상을 보였다.
"R을 이용한 데이터 처리 & 분석 실무 - 서민구 지음" 정리 자료 #3
- https://thebook.io/006723/
- 첫번째 : goo.gl/FJjOlq
- 두번째 : goo.gl/Wdb90g
- 세번째 : goo.gl/80VGcn
- 네번째 : goo.gl/lblUsR
2009 CodeEngn Conference 03
새로운 CTF 운영 단체로 인하여 전체적으로 변화된 스타일 등을 간략히 알아보고 DEFCON CTF 2009 Binary Leetness 분야의 100부터 500까지의 문제를 풀이해본다.
http://codeengn.com/conference/03
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 등을 단계적으로 접합해 나가는 것을 보여줄 것입니다.
"R을 이용한 데이터 처리 & 분석 실무 - 서민구 지음" 정리 자료 #1
- https://thebook.io/006723/
- 첫번째 : goo.gl/FJjOlq
- 두번째 : goo.gl/Wdb90g
- 세번째 : goo.gl/80VGcn
- 네번째 : goo.gl/lblUsR
"R을 이용한 데이터 처리 & 분석 실무 - 서민구 지음" 정리 자료 #2
- https://thebook.io/006723/
- 첫번째 : goo.gl/FJjOlq
- 두번째 : goo.gl/Wdb90g
- 세번째 : goo.gl/80VGcn
- 네번째 : goo.gl/lblUsR
"R을 이용한 데이터 처리 & 분석 실무 - 서민구 지음" 정리 자료 #3
- https://thebook.io/006723/
- 첫번째 : goo.gl/FJjOlq
- 두번째 : goo.gl/Wdb90g
- 세번째 : goo.gl/80VGcn
- 네번째 : goo.gl/lblUsR
2009 CodeEngn Conference 03
새로운 CTF 운영 단체로 인하여 전체적으로 변화된 스타일 등을 간략히 알아보고 DEFCON CTF 2009 Binary Leetness 분야의 100부터 500까지의 문제를 풀이해본다.
http://codeengn.com/conference/03
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 등을 단계적으로 접합해 나가는 것을 보여줄 것입니다.
"R을 이용한 데이터 처리 & 분석 실무 - 서민구 지음" 정리 자료 #1
- https://thebook.io/006723/
- 첫번째 : goo.gl/FJjOlq
- 두번째 : goo.gl/Wdb90g
- 세번째 : goo.gl/80VGcn
- 네번째 : goo.gl/lblUsR
"R을 이용한 데이터 처리 & 분석 실무 - 서민구 지음" 정리 자료 #2
- https://thebook.io/006723/
- 첫번째 : goo.gl/FJjOlq
- 두번째 : goo.gl/Wdb90g
- 세번째 : goo.gl/80VGcn
- 네번째 : goo.gl/lblUsR
“DigCompOrg: Europako markoa arlo digitalean gai diren hezkuntza erakundeentzat” Easo Politeknikoa (Donostia)
TKNIKA: Agustin Agirre (Ikaskuntza metodo eta Prozesuen Ikerketa arloko Koord.) eta Iñaki Telleria (e-Tresnak Ikaskuntzarako saileko koord.)
“DigCompOrg: Europako markoa arlo digitalean gai diren hezkuntza erakundeentzat” Easo Politeknikoa (Donostia)
Karmele García. IKT sustatzailea (Arantzabela Ikastola. Gasteiz)
Nasıl Fikirci Olunur?Fikirci olabilmek için neler yapılabilir?fikir üretebilmek için hangi özelliklerinizi geliştirebileceğiniz üzerine pratik bir sunum.
http://github.com/ipkn/crow
Crow 프로젝트에서 사용한 C++11 기법들을 실제 구현에 대한 설명을 포함하여 자세히 설명한 발표자료입니다.
C++11 features used in Crow
video:
http://youtu.be/MixS9c3mE6U
https://vimeo.com/119627253
Let's make APM by instrumenting Nodejs through the knowledge gained through tracing. Creating clues that facilitate tracking becomes a milestone for latecomers, like a snow-footprint.
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
1. MapReduce 샘플 코드 및 실행 방법 정리
(Bioinformatics lab 대상 2차 세미나)
작성자 : 송주영(bt22dr@gmail.com)
1. K-mer Counting
- K-mer
길이가 k인 염기서열 내의 연속된 염기
염기서열 ACGTACGTACGTA
K-mer (length = 6) ACGTAC
CGTACG
GTACGT
TACGTA
ACGTAC
CGTACG
GTACGT
TACGTA
- 실행 방법
Usage: KmerCounting <in><out><k-mer length>
- 상세 실행 과정
[hadoop@cudatest hadoop]$ cd $HADOOP_HOME
[hadoop@cudatest hadoop]$ bin/hadoop dfs -ls Bio/input
Found 1 items
-rw-r--r-- 1 hadoop supergroup 33 2012-07-10 11:27 /user/hadoop/Bio/input/kmer_counting.txt
[hadoop@cudatest hadoop]$
[hadoop@cudatest hadoop]$ bin/hadoop dfs -cat Bio/input/kmer_counting.txt
ATGAACCTTA
GAACAACTTA
TTTAGGCAAC
[hadoop@cudatest hadoop]$ bin/hadoop jar example.jar KmerCounting Bio/input Bio/output 3
****hdfs://cudatest:9000/user/hadoop/Bio/input
12/07/10 18:08:55 INFO input.FileInputFormat: Total input paths to process : 1
12/07/10 18:08:55 INFO util.NativeCodeLoader: Loaded the native-hadoop library
12/07/10 18:08:55 WARN snappy.LoadSnappy: Snappy native library not loaded
12/07/10 18:08:55 INFO mapred.JobClient: Running job: job_201207051452_0021
12/07/10 18:08:56 INFO mapred.JobClient: map 0% reduce 0%
12/07/10 18:09:09 INFO mapred.JobClient: map 100% reduce 0%
12/07/10 18:09:21 INFO mapred.JobClient: map 100% reduce 100%
12/07/10 18:09:27 INFO mapred.JobClient: Job complete: job_201207051452_0021
12/07/10 18:09:27 INFO mapred.JobClient: Counters: 29
… 중략 …
12/07/10 18:09:27 INFO mapred.JobClient: Combine output records=0
12/07/10 18:09:27 INFO mapred.JobClient: Physical memory (bytes) snapshot=275869696
2. 12/07/10 18:09:27 INFO mapred.JobClient: Reduce output records=16
12/07/10 18:09:27 INFO mapred.JobClient: Virtual memory (bytes) snapshot=1186914304
12/07/10 18:09:27 INFO mapred.JobClient: Map output records=24
[hadoop@cudatest hadoop]$ bin/hadoop dfs -cat Bio/output/part-r-00000
AAC 4
ACA 1
ACC 1
ACT 1
AGG 1
ATG 1
CAA 2
CCT 1
CTT 2
GAA 2
GCA 1
GGC 1
TAG 1
TGA 1
TTA 3
TTT 1
- 비교 및 확인
<출처 : http://schatzlab.cshl.edu/presentations/2010-03-15.XGen-Scalable%20Solutions.pdf>
※ 위 원문 자료 오류: [CTT : 1]과 [GAA : 1]을 [CTT : 2]과 [GAA : 2]로 수정해야 함.
3.
4. K-means Clustering
주어진 데이터를 k개의 클러스터로 묶는 알고리즘. 주어진 데이터를 가장 거리가 가까운 것들끼
리 k개의 클러스터로 군집하여 모든 데이터와 해당 클러스터의 centroid와의 거리합이 최소가 되
도록 반복연산을 수행한다.
- 실행 방법
Usage: KmeansClustering <in><out><k: # of cluster><x: maximum iteration>
- 상세 실행 과정
1. 입력 데이터 생성
[hadoop@cudatest hadoop]$ R
>library(rhdfs)
>library(rmr)
>x <- rbind(matrix(rnorm(10, sd = 0.3), ncol = 2),
+ matrix(rnorm(10, mean = 1, sd = 0.3), ncol = 2))
>to.dfs(x, "/user/hadoop/Kmeans/input/kmeans_data_10.txt", format="text")
[1] "/user/hadoop/Kmeans/input/kmeans_test.txt"
>plot(x, col = cl$cluster)
2. Clustering 수행
[hadoop@cudatest hadoop]$ bin/hadoop dfs -ls Kmeans
Found 1 items
drwxr-xr-x - hadoop supergroup 0 2012-07-13 17:42 /user/hadoop/Kmeans/input
[hadoop@cudatest hadoop]$ bin/hadoop dfs -ls Kmeans/input
Found 1 items
-rw-r--r-- 1…2012-07-13 17:41 /user/hadoop/Kmeans/input/kmeans_data_10.txt
[hadoop@cudatest hadoop]$ bin/hadoop jar BQR.jar com.skcc.services.BQR.KmeansClustering
Kmeans/input Kmeans/output 2 5
12/07/13 17:55:29 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications
should implement Tool for the same.
****hdfs://cudatest:9000/user/hadoop/Kmeans/input
12/07/13 17:55:29 INFO input.FileInputFormat: Total input paths to process : 1
12/07/13 17:55:29 INFO util.NativeCodeLoader: Loaded the native-hadoop library
12/07/13 17:55:29 WARN snappy.LoadSnappy: Snappy native library not loaded
12/07/13 17:55:29 INFO mapred.JobClient: Running job: job_201207131700_0019
12/07/13 17:55:30 INFO mapred.JobClient: map 0% reduce 0%
…생략…
[hadoop@cudatest hadoop]$ bin/hadoop dfs -cat Kmeans/output/5/part-r-00000
0 -0.220571493559915 0.0174640983069702 0.191775203854135 -0.0324478456055529
0.30730078757325 -0.446549547688165 0.12718989634021 0.133229105022227
1 0.635665082648627 0.466306965120643 1.24647562794383 1.08065598756178 0.841377542119699
1.04601249480335 1.28393866595644 1.6448881770345 0.987943522251124 0.619578600258074
0.57360383756511 1.38138384087598
5. - 소스코드 설명
코드는 총 4개의 Mapper, Reducer 클래스로 구성되어 있으며,
Clustering 과정은 크게 3가지 MapReduce 작업으로 이루어진다.
generateSeed( ) : 최초 seed로 사용할 centroid를 생성
kmeansIter( ) : centroid를 갱신하며 clustering. 반복 수행함
resultKmeans( ) : 최종 결과 생성
전체 구조도
Key-Value 설계
map : (k1, v1) -> list(k2, v2)
reduce : (k2, list(v2)) -> list(v3)
GenSeedMapper
- 입력 : [ 키: 라인 offset, 값: <x y> ]
- 출력 : [ 키: center ID, 값: <x y>]
KmeansReducer
- 입력 : [ 키: center ID, 값: list(<x y>) ]
- 출력 : [ 키: center ID, 값: 해당 클러스터의 mean값 <x y>]
KmeansMapper
- Setup: [ 이전 단계 Reducer의 결과 읽기 ]
- 입력 : [ 키: 라인 offset, 값: <x y> ]
- 출력 : [ 키: <x y>에 제일 가까운 center ID, 값: x y ]
ResultReducer
6. - 입력 : [ 키: center ID, 값: list(<x y>) ]
- 출력 : [ 키: center ID, 값: 해당 ID에 포함된 <x y> list ]
- 입/출력
입력 출력
-0.220571493559915 0.0174640983069702 0 -0.220571493559915 0.0174640983069702
0.191775203854135 -0.0324478456055529 0.191775203854135 -0.0324478456055529 0.30730078757325
0.30730078757325 -0.446549547688165 -0.446549547688165 0.12718989634021 0.133229105022227
0.12718989634021 0.133229105022227 1 0.635665082648627 0.466306965120643
0.635665082648627 0.466306965120643 1.24647562794383 1.08065598756178 0.841377542119699
1.24647562794383 1.08065598756178 1.04601249480335 1.28393866595644 1.6448881770345
0.841377542119699 1.04601249480335 0.987943522251124 0.619578600258074 0.57360383756511
1.28393866595644 1.6448881770345 1.38138384087598
0.987943522251124 0.619578600258074
0.57360383756511 1.38138384087598
- 비교 및 확인