블록체인 요약

Dev 2018.01.03 16:52

블록체인 요약

기초개념
    블록체인은
        모두에게 공유/공개된, 변조 불가능한 거래장부/DB
    비트코인 블록체인 현황
        10분에 1블록 생성
        1초에 최대 7건 거래
            하루 최대 60만건
            한국 중견 은행 1곳의 처리 능력과 비슷
            https://blockchain.info
        2009년 1월 최초 블록 생성이후 장애 없이 운영중

usecase
    국제송금서비스
        송금절차 간소화
        낮은 수수료
        투명한 처리과정
    클라우드펀딩
        스마트계약 이용
        중개인 개입 없이 개인과 개인을 직접 연결
    저작권, 소유권 증명
        중앙기관의 개입 없이
        언제 누가 만들었는지, 누구 소유인지 관리

블록체인 핵심기술
    본인인증
    부인방지
    이력공유
        모든 참여자가 거래이력(블록체인)을 공유
        제삼자 기관이 담당하던 일을 모든 참여자가 담당

블록체인 비교
    비트코인 코어
        Bitcoin Foundation 개발
        데이터 모델
            블록체인
        P2P 통신
            pure p2p
                별도의 index 서버 없음
            비구조적 오버레이
                모든 node의 역할이 동등
        합의 알고리즘
            PoW
                작업증명을 통해 합의
                    가장 빠르게 생성된 작업결과를 승인
                    가장 긴 블록체인을 채택
                수천개의 노드 수용 가능


    이더리움
        Ehtereum Foundation 개발
        데이터 모델
            블록체인
        P2P 통신
            pure p2p
            비구조적 오버레이
        합의 알고리즘
            PoS
                PoW와 비슷, 지분이 많은 노드의 작업증명 난이도를 낮춤
                    신속성
                    전체 노드의 계산 부하 감소
                수천개의 노드 수용 가능


    Hyperledger Fabric
        Linux Foundation 개발
        데이터 모델
            블록체인
            월드 스테이트
                글로벌하게 공유되는 key-value 저장소
        P2P 통신
            네트워크 형태
                hybrid p2p
                    별도의 index 서버 이용
                구조적 오버레이
                    노드별로 역할이 다름
                    슈퍼노드 존재
            기반 기술
                노드간 통신에 gRPC 이용
                데이터 직렬화에 Protocol Buffer 이용
        합의 알고리즘
            PBFT
                Practical Byzantine Fault Tolerance
                마스터 노드 과반이 인정해야 합의
                     => 나중에 무효화되는 블록이 없음 (장점)
                모든 노드들 사이의 통신이 필수
                    대규모 노드들의 네트워크에 부적합
                    수십개의 노드가 한계 (단점)

(이상)

Posted by ingee

댓글을 달아 주세요

TFRecord

개요

  1. TFRecord 파일은 텐서플로의 표준 데이터 파일 포맷 (본질적으로 Protocol Buffer 파일)

  2. TFRecord 파일은 데이터를 시퀀셜하게 저장

    • 랜덤 억세스에 적합하지 않음
    • 대용량 데이터를 스트리밍 하는 데 적합
  3. 파일 하나에 모든 dataset과 label을 묶어 놓으면 파일 처리 시간이 단축됨 (권장!)

 

TFRecord 파일 구조

  1. TFRecord 파일은 record 들의 반복

  2. TFRecords > examples > features 형태로 구성

 

TF Input Pipeline

개요

  1. TF Computation-graph에 데이터를 공급하는 방법들 중 하나

    • TF 프로그램에 데이터를 공급하는 방법 3가지

      • feeding
        . 매 스텝을 실행할 때 마다 python 코드가 데이터를 공급

          with tf.Session():
            input = tf.placeholder(tf.float32)
            classifier = ...
            classifier.eval(feed_dict={input: my_python_fn()}))
        

        . 연산 과정에서 TF 그래프와 Python 사이의 context switch 필요 ==> 성능저하

      • input pipeline
        . TF 그래프 첫머리의 input pipeline이 데이터를 가져옴 ==> 추천!

      • preloaded data
        . TF 그래프의 variable이나 constant에 데이터를 미리 적재
        ==> dataset 이 작을 때만 가능

  2. TF Input Pipeline은 모든 포맷의 파일을 사용 가능하나, TFRecord 포맷의 파일 사용을 추천

  3. TF Input Pipeline이 하는 일

    • 파일 목록 가져오기
    • 파일 목록 섞기 (옵션)
    • 파일 큐 생성하기
    • 데이터 읽기, 데이터 디코딩 하기
  4. 이후 소개하는 "Queue based Input Pipeline"은 "Dataset API based Input Pipeline"으로 깔끔하게 대체 가능

    • 하지만, Dataset API는 TF 1.4+에서만 사용 가능
    • TF 1.4는 2017-11-03 출시 (약 1달전), 아직 샘플 코드가 부족함

 

TF Input Pipeline의 전형적인 구성
(TFRecord 파일 읽기 프로세스)


Queue based Input Pipeline 동작양식

  1. Filename Queue 생성

    • Filename 목록으로 Queue 생성 (파일이 1개라도 OK)
    • tf.train.string_input_producer() 함수 이용
      . filename 목록 shuffle 옵션 제공
      . filename queue 반복횟수(epoch) 설정 옵션 제공
    • string_input_producer() 함수는 TF 그래프에 QueueRunner 객체를 추가함
    • string_input_producer() 함수가 추가하는 QueueRunner는 filename queue를 구동하는 역할을 하며 Computation-graph 연산을 구동하는 QueueRunner와 별도의 스레드에서 실행되어 서로 블록되지 않는다
  2. Reader, Decoder 정의 (또는 선택)

    • 파일 포맷 별로 적절한 Reder를 선택하고 적절한 Decoder를 정의/선택해야 함
    • 파일 포맷 별로 다양한 Reader 와 Decoder 제공

      • CSV 파일
        . Reader: tf.TextLineReader
        . Decoder: tf.decode_csv()
      • Fixed Length Record 파일
        . Reader: tf.FixedLengthRecordReader
        . Decoder: tf.decode_raw()
        . 각 record 가 고정된 길이인 파일을 읽을 때
      • TF 표준 파일 (즉, TFRecord 파일) ==> TF 권장 포맷
        . Reader: tf.TFRecordReader
        . Decoder: tf.parse_single_example()
        . 어떤 데이터이든 TFRecord 파일로 변환해서 사용할 것을 권장
  3. Preprocessing (optional, 뭐라도 처리할 일이 있으면 실행)

  4. Example Queue 생성/구동

    • pipeline 마지막 단계에서 학습/평가/추론에 batch 데이터를 공급하는 별도의 큐를 생성/운영
    • tf.train.shuffle_batch() 함수를 이용
      . example들의 순서 난수화 가능
      . batch size 설정 옵션 제공
    • suffle_batch() 함수는 TF Computation-graph에 QueueRunner 객체를 추가함 이 때문에 학습/추론 등을 시작할 때 tf.train.start_queue_runners()를 호출해서 input pipeline을 구동하는 스래드를 생성/실행시켜야 함.
      또, 학습/추론 등이 끝날 때에는 tf.train.Coordinator 를 이용해서 관련 스래드를 모두 종료시켜야 함.

 

TFRecord 파일 저장 프로세스

  1. TFRecord 파일 오픈

    • tf.python_io.TFRecordWriter
  2. 데이터를 적절한 타입으로 변환

    • TFRecord 파일에 저장 가능한 feature 타입의 종류

      • tf.train.Int64List
      • tf.train.BytesList
      • tf.train.FloatList
  3. feature 생성

    • tf.train.Feature
  4. example 생성

    • tf.train.Example
  5. example을 시리얼라이즈

    • example.SerializeToString()
  6. 시리얼라이즈한 example을 TFRecord 파일에 기록

    • writer.write

 

Ref.


Posted by ingee

댓글을 달아 주세요

구글 프로토콜 버퍼 (Protocol Buffer)

 

개요

  1. <프토토콜 버퍼>는 랭귀지 중립적, 플랫폼 중립적인 데이터 시리얼라이즈 포맷

    • 서로 다른 종류의 머신, 서로 다른 종류의 플랫폼에서 동일한 의미를 갖도록 데이터의 포맷을 정의한다는 점에서 <프로토콜 버퍼>라는 이름은 (구글의 저질 작명 센스를 고려할 때, 의외로) 적절
      --> 프로토콜(통신)을 위한 버퍼(데이터)
  2. <프로토콜 버퍼>는 이제 구글의 데이터 공용어 (gRPC의 디폴트 데이터 포맷)

    • What is gRPC?
      . 구글이 정의한 RPC
      . 구글의 최신 API는 이제 REST API 뿐 아니라 gRPC API도 함께 제공함
      . gRPC는 <프로토콜 버퍼>를 기본 데이터 시리얼라이즈 포맷으로 사용
        (but, JSON 등 다른 포맷도 사용 가능)
      . 다양한 랭귀지 지원: C++, Java, Python, Go, Ruby, C#, Node.js, PHP, ...
  3. JSON을 <프로토콜 버퍼>로 <프로토콜 버퍼>를 JSON으로 변환 가능

  4. XML보다 작고, 빠르고, 간단

 

XML 대비 <프로토콜 버퍼>의 장단점

  1. XML 대비 장점

    • 더 간단함
    • 더 작음: 3배~10배
    • 더 빠름: 20~100배
    • 더 명료함
    • 컴파일러 등 도구를 제공함
  2. XML 대비 단점

    • 본질적으로 바이너리 포맷
      . HTML과의 호환성이 약함
      . human readable 특성이 약함
    • 데이터 포맷을 완전히 파악하려면 .proto 파일이 필요
      . XML은 어느 정도는 자기 완결성을 가짐

 

proto 파일

  1. <프로토콜 버퍼>의 데이터 포맷을 정의하는 소스파일

  2. proto 파일 고유의 문법 존재

  3. proto 파일 안에서 다른 proto 파일 참조 가능

  4. proto 파일을 컴파일하면 각 랭귀지별 라이브러리가 생성됨

    • 지원 랭귀지
      . proto2: C++, Java, Python, Go
      . proto3: C++, Java, Python, Go, Ruby, Objective-C, C#, JavaScript

 

Ref.


Posted by ingee

댓글을 달아 주세요

에일리언웨어(Alienware) 노트북에서 GPU를 이용, 텐서플로우(TensorFlow) 실행하기



알파고 때문에 어디선가 누군가 나와 같은 삽질을 하고 있을지도 모르겠다. 누구에게라도, 다만 한 삽이라도, 도움이 되기를 바래본다.

+ 우분투 16.04 설치:
  - USB로 우분투 설치후 부팅 => WiFi 안잡힘
  - alienware WiFi 활성화
    . $ sudo service network-manager restart 실행
    . $ cd /lib/firmware/ath10k/QCA6174/hw3.0/ && sudo wget https://github.com/kvalo/ath10k-firmware/raw/master/QCA6174/hw3.0/board-2.bin
    ...리부트...
    . WiFi AP 설정
    * 참고 :  http://askubuntu.com/questions/765838/cannot-enable-wifi-of-alienware-r2-on-ubuntu-16-04-lts
  - gpu 존재 확인
    $ lspci
   
+ NVIDIA driver & CUDA 설치
  ! CMOS 설정에서 Secure Boot 해제 (즉, disable로 설정) ==> 정말 중요!!!
  - Install the NVidia 367.35 Driver
    $] sudo add-apt-repository ppa:graphics-drivers/ppa
    $] sudo apt-get update
    $] sudo apt-get install nvidia-367
    ...리부트...
  - Download the CUDA SDK from NVidia
    . https://developer.nvidia.com/cuda-toolkit
    . cuda_8.0.61_375.26_linux.run 파일 다운로드
  - Install the CUDA SDK
    $] cd ~/Downloads
    $] sudo chmod +x cuda_8.0.27*
    $] sudo ./cuda_8.0.61_375.26_linux.run --override
    $] cd /usr/local/cuda/samples
    $] sudo make
    $] 1_Utilities/deviceQuery/deviceQuery
    $] cd ~ 
  * 참고 : https://github.com/ftlml/user-guides/wiki/Installing-TensorFlow-w-GPU-Support-on-Ubuntu-16.04-for-Pascal-architecture

+ TensorFlow 설치
  ! Python 2.7 또는 Python 3.3+ 필요 (2.7 기준으로 요약)
  - pip 설치
    $ sudo apt-get install python-pip python-dev
  - TensorFlow 설치
    $ pip install tensorflow-gpu
  - TensorFlow 설치 검증
    $ python
    >>> import tensorflow as tf
    >>> hello = tf.constant('Hello, TensorFlow!')
    >>> sess = tf.Session()
    >>> print(sess.run(hello))
    ..."Hello, TensorFlow!" 메시지가 출력되는지 확인...
  * 참고: https://www.tensorflow.org/install/install_linux#InstallingNativePip

+ (옵션) TensorFlow with docker 설치
  - docker 설치: https://docs.docker.com/engine/installation/
  - nvidia-docker 설치: https://github.com/NVIDIA/nvidia-docker
  - TensorFlow 컨테이너 실행 (1)
    $ sudo nvidia-docker run nvidia/cuda nvidia-smi
  - TensorFlow 컨테이너 실행 (2)
    $ sudo nvidia-docker run -it gcr.io/tensorflow/tensorflow:latest-gpu bash
  * 참고: https://www.tensorflow.org/install/install_linux#InstallingDocker


+ 결과 확인: nvidia GPU driver 동작 잘함

acc@acc-Alienware-17-R3:~$ nvidia-smi
Wed Mar 22 16:07:10 2017       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.39                 Driver Version: 375.39                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 980M    Off  | 0000:01:00.0     Off |                  N/A |
| N/A   53C    P8     7W /  N/A |    335MiB /  4038MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0      1236    G   /usr/lib/xorg/Xorg                             159MiB |
|    0      2160    G   compiz                                         114MiB |
|    0      7885    C   python2                                         58MiB |
+-----------------------------------------------------------------------------+


+ 결과 확인: TensorFlow에서 GPU 인식 잘함

acc@acc-Alienware-17-R3:~$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcublas.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcudnn.so.5 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcufft.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcurand.so.8.0 locally
>>> tf.Session().run()
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE3 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:910] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties:
name: GeForce GTX 980M
major: 5 minor: 2 memoryClockRate (GHz) 1.1265
pciBusID 0000:01:00.0
Total memory: 3.94GiB
Free memory: 3.56GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0:   Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 980M, pci bus id: 0000:01:00.0)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: run() takes at least 2 arguments (1 given)
>>> 

(이상)

Posted by ingee

댓글을 달아 주세요

YouTube 동영상


2016년 9월22일에 업로드된 동영상이다. C++ 랭귀지를 만든 Bjarne Stroustrup(베야네 스트로스트룹)이 C++의 과거와 미래에 대해 설명한다. 한번 들으면 좋은데 너무 길다 (1시간43분). 내용을 간단히 요약한다.


- C++ 성공은 운이 아니다. C++ 성공에는 분명한 이유가 있다.
+ 랭귀지 저자가 생각하는 C++
  - 하드웨어를 직접 다루는
  - 오버헤드가 전혀 없는
  - 산업계 현장에서 사용하는
  - 좋은 프로그래머에게 더욱 유용한 랭귀지

- 랭귀지는 조그만 변해도 짐스럽다(구현, 도구제작, 학습이 필요). 변화 방향을 신중하게 결정해야 한다.
+ C++ 변화 방향
  - zero-overhead
  - 메모리 leak 등이 없는 안전한 코드를 만들게 할 것이다
  - 가비지컬렉션 등으로 인한 성능저하는 없을 것이다 (피할 것이다)

+ C++17 출시 임박
  - 아직도 C++98에 머물고 있다면 C++11, C++14로 업그레이드하라.
  - 적어도 현재에 머물러 미래를 준비하라
+ 깃허브에 C++ core guideline 문서가 존재한다
  - 한국어 번역에 참여한 사람들에게 감사한다
- 우리가 매일 사용하는 SW를 보존하기 위해서라도 C++은 계속 발전해야 한다



(이상)

Posted by ingee
TAG C++만세

댓글을 달아 주세요

ES6 in Depth 번역글

Dev 2016.07.12 08:47

어쩌다보니 혼자 하게 된, ES6에 대한 아주 알찬 소개. 정성을 다해 번역했습니다.


ES6 in depth

http://hacks.mozilla.or.kr/category/es6-in-depth/


Posted by ingee

댓글을 달아 주세요

  1. 웹 개발자 2016.08.23 14:19 신고  댓글주소  수정/삭제  댓글쓰기

    감사합니다.

    덕분에 유익한 시간이 되었습니다.

  2. 지나가다가 2017.03.15 08:44 신고  댓글주소  수정/삭제  댓글쓰기

    감사합니다. 덕분에 좋은 내용을 읽을 수 있었습니다.

  3. 정말로감사 2017.07.19 14:15 신고  댓글주소  수정/삭제  댓글쓰기

    정말로 감사합니다.

  4. 웹개발공부하는사람 2018.03.13 16:09 신고  댓글주소  수정/삭제  댓글쓰기

    프로토타입에 관한 개념 보고 갑니다! 아주 설명이 잘 되어 있는 것 같아요 :) 감사합니다.

Karma 개발자가 직접 쓴 Karama 에 대한 소개 <논문>

을 요약한다. TDD(Test Driven Development)에 대한 저자의 확고한 신념을 느낄 수 있었다.


TDD

  • TDD는 고품질의 SW를 개발할 수 있는 효과적인 방법
  • TDD는 문서화 측면에서도 이득, 테스트 코드는 항상 up-to-date한 (개발) 코드의 사용법을 알려준다(알려줄 수밖에 없다)
  • 테스트 가능한 코드(testable code)는 재사용성(reusable)이 더 높다


TDD를 위해서는 두가지 전제 조건이 필요

  • Testable Code: 느슨하게 결합된 모듈 구조로 코드를 개발, AngularJS 같은 프레임워크가 해결
  • Testing Environment: Karma 같은 테스트 자동화 도구가 해결


Karma는

  • JavaScript를 위한 Test Runner
  • Jasmine 같은 Test Framework 이 아님. 어떤 Test Framework도 사용 가능(Karma의 장점)
  • 웹앱 테스트의 가장 어려운 점은 코드를 테스트하기 위해 에디터를 떠나 브라우저를 실행시켜 결과를 확인해야 하는 워크플로우의 단절 (context switching), Karma는 이를 해결하기 위한 도구


Karma 모듈 구성도 (Figure 4.1: The high level architecture)


왜 클라이언트-서버 구조를 선택했나?
웹앱은 다양한 기기와 다양한 브라우저에서 실행, 디바이스와 브라우저의 편차를 테스트하기 위해 클라이언트를 분리했음


(이상)

Posted by ingee
TAG Karma, TDD

댓글을 달아 주세요

정갈하게 편집된 Grunt 소개 글을 봤다. 글쓴이가 디자이너라고 한다.
Grunt for People Who Think Things Like Grunt are Weird and Hard
http://24ways.org/2013/grunt-is-not-weird-and-hard/?utm_content=buffer4bb0b

Grunt는 Task Runner이다. C/C++ 개발자에게 친숙한 make와 똑같은 역할을 한다.


Grunt에만 관심을 가질게 아니라 Yeoman을 보는 것이 좋다.
Yeoman (http://yeoman.io/)은,
  • yo : 스캐폴딩(Scaffolding : 골격, 뼈대) 자동 생성 도구
  • grunt : 타스크 실행 도구
  • bower : 패키지(라이브러리) 관리 도구
  • ...들을 잘 묶어 놓은 개발도구이다.
한시간 정도 투자하면 사용법을 익힐 수 있는 튜토리얼을 제공한다 (http://yeoman.io/codelab.html).
웹 개발자에게 축복과도 같은 도구다. Node.js 가 세상을 많이 바꿔놓는 것 같다.

Posted by ingee

댓글을 달아 주세요

Backbone.js를 써서 프론트엔드 웹앱을 만들 때 폴더 구조와 파일 이름을 어떻게 정할까 고민스러웠는데, 비슷한 고민을 담고 있는 블로그 기사가 있어 요약한다.

  • JavaScript는 폴더/파일의 구조 및 이름에 대해 규정하는 바가 전혀 없다.
  • 그러니 당신이 어떻게 하고 있더라도 "당신은 옳다".
  • 개인적으로 Backbone 등 MVC framework을 사용하는 경우 models, collections, views 등 타입별로 폴더 구조를 가져가는 것에 반대한다.
  • contact, mail 등 업무나 역할 별로 폴더 구조를 만들고,
  • person.js (model), persons.js (collection), personview.js, personrouter.js 처럼 파일 이름에 타입을 명시하는 방식을 선호한다.
  • 하지만, 다시 한번 말하지만 당신이 어떤 결정을 하더라도 "당신은 옳다"


JavaScript File & Folder Structures: Just Pick One

Posted by ingee

댓글을 달아 주세요

CppCon 2014, C++ 개발자대회 요약

  • 구글을 비롯 많은 회사들이 C++ 코드에서 exception을 사용하지 않고 있음. exception은 아직 "solved problem"이 아님.
  • 페북, 0.4% 속도 개선을 위한 cheating도 불사. 대규모 서버 프로그램에서는 중요한 이슈. 0.4% 성능개선을 통해 수 $million에 달하는 비용(전기요금)을 절감할 수 있음.
  • std::vector<>는 CPU의 명령어 캐시 관련 문제로부터 안전. 다른 std::container<> 류는 안전을 장담 못함.
  • 전세계적으로 기술서적 판매는 3% 줄었지만 C++ 서적 판매는 4% 증가. C++ 개발자 저변이 넓다는 증거.
  • Bjarne이 "A Tour Of C++" (2013년 9월)을 출간했으며, 책에 대해 진심으로 자랑스러워 하고 있음.
  • C++ 언어 표준화는 현재 진행형. parallel/concurrent 처리에 대해 논의하고 있음. 많은 참여 바람.
  • 올해가 첫 컨퍼런스로 600 여명 참여. 매해 개최 예정.
Posted by ingee
TAG C++만세

댓글을 달아 주세요