PowerPoint 프레젠테이션

Size: px
Start display at page:

Download "PowerPoint 프레젠테이션"

Transcription

1 Bacardi Project: Node.js 네이티브모듈을위한 오픈소스바인딩제네레이터 방진호

2 Bacardi Project 란?

3 Bacardi Project 란..

4 Node.js 에서 Native Module 을바인딩하는방법에대한오픈소스이다.

5 그런데이미기존 Node.js 에는바인딩을위한방법들이제공되고있다.

6 그러나그방법이아름답지않았다.

7 Bacardi Project 는그러한문제를분석하고

8 아름답게해결하는방안을모색한다.

9 다음과같은순서로진행됩니다. JS에서왜 Native Module을사용하는가? 예제를통해알아보는기존의 Native Module 연동방식기존의문제점파헤치기 Chromium에서 Blink와 V8은어떻게연결되나? Node.js에서 Native Module과 V8은어떻게연결되나? WebIDL Auto Binding 구현하기 (Bacardi의구현원리 ) Bacardi Project 활용하기

10 JS 에서왜 Native Module 을 사용하는가?

11 성능 (Performance)

12 Low Level APIs

13 기존에잘만들어진코드가 Native 일때

14 어쨌든 Node.js 를사용한다면사용중인패키지의 30% 는 Native 이다.

15 예제를통해알아보는 기존의 Native Module 연동방식

16 sum() 함수를구현해보자 (JS 호출 ) JS let s = sum([1, 2, 3, 4, 5, 6, 7, 8, 9]); JS function sum(elements) { let s = 0; elements.foreach(element => { s += element; }); return s; }

17 sum() 함수를구현해보자 (Native 호출 ) JS let s = sum([1, 2, 3, 4, 5, 6, 7, 8, 9]); Native int sum(std::vector<int> elements) { int s = 0; for (int i = 0; i < elements.size(); i++) s += elements[i]; return s; }?

18 그런데 Javascript 에서어떻게호출할까?

19 기존의 Native Module 연동방식 아마우리가원했던게이런것은아니지말입니다.. var spawn = require('child_process').spawn; var sum = spawn('sum', [...]); sum.stdout.on('data', result => { process(result);... });

20 기존의 Native Module 연동방식 Node.js C++ Addon NAN(Native Abstraction for Node) Node.js C++ Addon 이 V8 Public API 를사용하기때문에 V8 변화에민감하다. Node.js 를업데이트할때마다문제가발생하는것을해결. N-API Latest! Node.js 8.0 이후부터지원, 8.6 에서 Stable Release NAN 과유사한방식이지만, ABI-Stable 을보장. ( 즉, 재컴파일불필요 ) V8 Public API 가아닌 Node.js 에서한번 Wrapping 하여제공하므로다른엔진으로교체도가능.

21 N-API 에이르기까지많은개선이있었지만, Binding 코드를작성하는것을위한개선은없었다.

22 N-API 를사용하여 Binding 해보자 다음의예제는 N-API 를사용하여 Native Binding 을하고있다. napi_value Sum(napi_env, napi_callback_info info) { napi_status status; size_t args = 1; napi_value args[1]; napi_status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); if (argc < 1) { napi_throw_type_error(env, nullptr, " "); return nullptr; } uint32_t length = 0; napi_get_array_length(env, args[0], &length); double sum = 0; for (int i = 0; i < length; i++) { napi_value element; napi_get_element(env, i, &element); napi_valuetype valuetype; napi_typeof(env, element, &valuetype); if (napi_valuetype!= napi_number) { napi_throw_type_error(env, nullptr, " "); return nullptr; } 그러나.. 6 줄짜리 sum() 함수가 35 줄이된다. double value; napi_get_value_double(env, element, &value); sum += value; } napi_value js_sum; napi_create_double(env, sum, &js_sum); return js_sum; }

23 N-API 를사용하여 Binding 해보자 N-API 를사용하여 Binding 을하면 Javascript 에서호출할수있다. const sum = require( sum ); let s = sum([1, 2, 3, 4, 5, 6, 7, 8, 9]);

24 기존의문제점파헤치기

25 지금부터코드가많이나오는데.. 굳이그코드들을이해하실필요는없습니다!

26 문제점 1: Argument Check napi_value Sum(napi_env, napi_callback_info info) { napi_status status; size_t args = 1; napi_value args[1]; napi_status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); // 문제점1. JS argument는 Runtime에결정되므로개발자가직접체크해야한다. if (argc < 1) { napi_throw_type_error(env, nullptr, " "); return nullptr; }

27 문제점 2: Type Checking for (int i = 0; i < length; i++) { napi_value element; napi_get_element(env, i, &element); // 문제점2. 각 Array Element의 Type Checking도직접해야한다. napi_valuetype valuetype; napi_typeof(env, element, &valuetype); if (napi_valuetype!= napi_number) { napi_throw_type_error(env, nullptr, " "); return nullptr; }

28 문제점 3: Type Converting } // 문제점3. JS에서 Native Type Converting을직접해야한다. double value; napi_get_value_double(env, element, &value); sum += value; // 문제점3. Native에서 JS Type Converting을직접해야한다. napi_value js_sum; napi_create_double(env, sum, &js_sum); return js_sum;

29 문제점 4: Memory Management uint32_t length = 10000; for (int i = 0; i < length; i++) { napi_value element; napi_get_element(env, i, &element); Push 내가아는 Stack napi_value length }... Pop...

30 문제점 4: Memory Management uint32_t length = 10000; HandleScopeStack Heap for (int i = 0; i < length; i++) { // napi_get_element() 를호출할때마다 // 새로운 object를생성하고 HandleScope에 // 쌓이게됨. napi_value element; napi_get_element(env, i, &element);... } i = 9999 i = 9998 i = 4 i = 3 i = 2 i = 1 i = 0 napi_value napi_value napi_value napi_value napi_value napi_value napi_value

31 문제점 4: Memory Management for (int i = 0; i < length; i++) { napi_handle_scope scope; napi_status status = napi_open_handle_scope(env, &scope); napi_value element; napi_get_element(env, i, &element);... } napi_close_handle_scope(env, scope);

32 문제점 5: Readability // 문제점5. Binding 코드가많이삽입되면서가독성이떨어진다. int sum(std::vector<int> elements) { int s = 0; for (int i = 0; i < elements.size(); i++) s += elements[i]; return s; } napi_value Sum(napi_env, napi_callback_info info) { napi_status status; size_t args = 1; napi_value args[1]; napi_status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); if (argc < 1) { napi_throw_type_error(env, nullptr, " "); return nullptr; } uint32_t length = 0; napi_get_array_length(env, args[0], &length); double sum = 0; for (int i = 0; i < length; i++) { napi_value element; napi_get_element(env, i, &element); napi_valuetype valuetype; napi_typeof(env, element, &valuetype); if (napi_valuetype!= napi_number) { napi_throw_type_error(env, nullptr, " "); return nullptr; } double value; napi_get_value_double(env, element, &value); sum += value; } napi_value js_sum; napi_create_double(env, sum, &js_sum); return js_sum; }

33 요약 기존의방법은 TypeChecking/Converting 과같은노가다를반복해야한다. Memory 관리 Mechanism 이다르고 Binding 을위해사용되는 API 를다룰줄알아야하므로 V8, N-API, JS, C++ 과같은지식모두를필요로한다. 전체적인코드의복잡도가증가한다.

34 Chromium 에서 Blink 와 V8 은 어떻게연결되나?

35 왜 Chromium 을살펴보나?

36 Chromium 은 V8 의또다른 Embedder 이다.

37 V8 (Javascript Engine) Blink (Rendering Engine) V8 (Javascript Engine) Node.js Native Module

38 document.getelementbyid();

39 <div id="hello"></div> <script> let div = document.getelementbyid( hello ); </script>

40 V8 Engine 과 Blink Engine 의관계 <div id="hello"></div> <script> let div = document.getelementbyid( hello ); </script> Chromium V8 Loader Engine

41 V8 Engine 과 Blink Engine 의관계 <div id="hello"></div> <script> let div = document.getelementbyid( hello ); </script> Chromium V8 Loader Engine DOM Parsing V8 Engine Blink Engine

42 V8 Engine 과 Blink Engine 의관계 <div id="hello"></div> <script> let div = document.getelementbyid( hello ); </script> Chromium V8 Loader Engine V8 Engine JS Evaluate <script> document.getelementbyid( hello ); </script> DOM Parsing V8 Engine Blink Engine

43 V8 Engine 과 Blink Engine 의관계 <div id="hello"></div> <script> let div = document.getelementbyid( hello ); </script> Chromium V8 Loader Engine V8 Engine JS Evaluate <script> document.getelementbyid( hello ); </script> DOM Parsing V8 Engine Blink Engine Actually, called document.getelementbyid();

44 V8 Engine 과 Blink Engine 의관계 <div id="hello"></div> <script> let div = document.getelementbyid( hello ); </script> Chromium V8 Loader Engine V8 Engine JS Evaluate <script> document.getelementbyid( hello ); </script> DOM Parsing V8 Engine Blink Engine Return JS Wrapper Object let div = document.getelementbyid( hello ); Actually, called document.getelementbyid();

45 V8 Engine 과 Blink Engine 의관계 <div id="hello"></div> <script> let div = document.getelementbyid( hello ); </script> Chromium V8 Loader Engine V8 Engine JS Evaluate <script> document.getelementbyid( hello ); </script> V8 Binding DOM Parsing V8 Engine Blink Engine Return JS Wrapper Object let div = document.getelementbyid( hello ); Type Checking/Converting Manage Isolate and Context Actually, called document.getelementbyid();

46 V8 Engine 과 Blink Engine 의관계 <div id="hello"></div> <script> let div = document.getelementbyid( hello ); </script> Chromium V8 Loader Engine V8 Engine JS Evaluate <script> document.getelementbyid( hello ); </script> WebIDL Binding DOM Parsing V8 Engine Blink Engine Return JS Wrapper Object let div = document.getelementbyid( hello ); Auto-generated!! Actually, called document.getelementbyid();

47 V8 Binding 이란? Chromium에서 V8과 Blink를연결하는코드이다. 사용자가직접짜지않고 WebIDL으로부터자동생성 (auto-generation) 된다. WebIDL은 JS Engine과 Web Engine을연결하는 Web 표준에의해정의된다.

48 코드레벨로살펴보는 WebIDL // WebIDL [Constructor] interface Calculator { double sum(sequence<long> elements); };

49 코드레벨로살펴보는 WebIDL // WebIDL [Constructor] interface Calculator { double sum(sequence<long> elements); }; VS napi_value Sum(napi_env, napi_callback_info info) { napi_status status; size_t args = 1; napi_value args[1]; napi_status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); if (argc < 1) { napi_throw_type_error(env, nullptr, " "); return nullptr; } uint32_t length = 0; napi_get_array_length(env, args[0], &length); double sum = 0; for (int i = 0; i < length; i++) { napi_value element; napi_get_element(env, i, &element); napi_valuetype valuetype; napi_typeof(env, element, &valuetype); if (napi_valuetype!= napi_number) { napi_throw_type_error(env, nullptr, " "); return nullptr; } double value; napi_get_value_double(env, element, &value); sum += value; } napi_value js_sum; napi_create_double(env, sum, &js_sum); return js_sum; }

50 코드레벨로살펴보는 WebIDL // User s Native Code class Calculator { public: double Sum(std::vector<int> elements) { int sum = 0; for (int i = 0; i < elements.size(); i++) sum += elements[i]; return sum; } };

51 코드레벨로살펴보는 WebIDL // User s JS code var calculator = new Calculator(); console.log(calculator.sum([1, 2, 3, 4, 5, 6, 7, 8, 9]));

52 요약 Chromium 에서 V8 과 Blink 의관계는 Node.js 에서 V8 과 Native Module 의관계와동등하다. V8 과 Blink 를연결하는 Layer 를 V8 Binding(WebIDL Binding) 이라고부른다. V8 Binding(WebIDL Binding) 은 WebIDL 을이용해 Auto-generated 된다.

53 Node.js Native Module 과 V8 은어떻게연결되나?

54 const fs = require('fs'); let contents = fs.readfilesync('temp.txt', 'utf8');

55 V8 Engine 과 Native Module 의관계 Node Runtime const fs = require('fs'); let contents = fs.readfilesync('temp.txt', 'utf8'); V8 Engine

56 V8 Engine 과 Native Module 의관계 Node Runtime const fs = require('fs'); let contents = fs.readfilesync('temp.txt', 'utf8'); V8 Engine JS Evaluate V8 Engine

57 V8 Engine 과 Native Module 의관계 Node Runtime const fs = require('fs'); let contents = fs.readfilesync('temp.txt', 'utf8'); V8 Engine JS Evaluate V8 Engine V8 Engine Native Module Actually, called open() and read()

58 V8 Engine 과 Native Module 의관계 Node Runtime const fs = require('fs'); let contents = fs.readfilesync('temp.txt', 'utf8'); V8 Engine JS Evaluate V8 Engine V8 Engine Native Module Return JS Wrapper Object Actually, called open() and read()

59 V8 Engine 과 Native Module 의관계 Node Runtime const fs = require('fs'); let contents = fs.readfilesync('temp.txt', 'utf8'); V8 Engine JS Evaluate V8 Engine V8 Binding V8 Engine Native Module Return JS Wrapper Object Type Checking/Converting Manage Isolate and Context Actually, called open() and read()

60 복습 : N-API 를사용하여 Binding 해보자 이미우리가여러번말했듯이이러한과정을반복한다. napi_value Sum(napi_env, napi_callback_info info) { napi_status status; size_t args = 1; napi_value args[1]; napi_status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); if (argc < 1) { napi_throw_type_error(env, nullptr, " "); return nullptr; } uint32_t length = 0; napi_get_array_length(env, args[0], &length); double sum = 0; for (int i = 0; i < length; i++) { napi_value element; napi_get_element(env, i, &element); napi_valuetype valuetype; napi_typeof(env, element, &valuetype); if (napi_valuetype!= napi_number) { napi_throw_type_error(env, nullptr, " "); return nullptr; } 이런식으로장인정신을발휘하면 잘만들수있다! double value; napi_get_value_double(env, element, &value); sum += value; } napi_value js_sum; napi_create_double(env, sum, &js_sum); return js_sum; }

61 복습 : V8 Engine 과 Blink Engine 의관계 <div id="hello"></div> <script> let div = document.getelementbyid( hello ); </script> Chromium V8 Loader Engine V8 Engine JS Evaluate <script> document.getelementbyid( hello ); </script> WebIDL Binding DOM Parsing V8 Engine Blink Engine Return JS Wrapper Object let div = document.getelementbyid( hello ); Auto-generated!! Actually, called document.getelementbyid();

62 Node.js 에 Auto Binding 을적용한다면.. IDL을제외하고는추가적인 Binding 코드를직접작성하지않아도된다. 바인딩코드와실제 User Implementation이완벽히분리된다. V8( 또는 N-API) 을이해하지않아도된다. 안전하고빠르게바인딩할수있다.

63 실제사례 : Open CV Binding // Open CV Matrix를생성하는 5개의함수오버로딩.. let m1 = new Matrix(); let m2 = new Matrix(rows, cols); let m3 = new Matrix(10, 20, CV_32F); let m4 = new Matrix(10, 20, CV_32F, [1, 2, 3]); let m5 = new Matrix(m4, 10, 20, 30, 40);

64 실제사례 : Open CV Binding // 이 Matrix 의실제 Binding 구현은다음과유사하다. // Matrix* mat; if (info.length() == 0) { mat = new Matrix; } else if (info.length() == 2 && info[0]->isint32() && info[1]->isint32()) { mat = new Matrix(info[0]->IntegerValue(), info[1]->integervalue()); } else if (info.length() == 3 && info[0]->isint32() && info[1]->isint32() && info[2]->isint32()) { mat = new Matrix(info[0]->IntegerValue(), info[1]->integervalue(), info[2]->integervalue()); } else if (info.length() == 4 && info[0]->isint32() && info[1]->isint32() && info[2]->isint32() && info[3]->isarray()) { mat = new Matrix(info[0]->IntegerValue(), info[1]->integervalue(), info[2]->integervalue(), info[3]->toobject()); else { // if (info.length() == 5) {... }

65 실제사례 : Open CV Binding // 만약 WebIDL Binding을사용했다면.. [ Constructor(), Constructor(long rows, long cols), Constructor(long rows, long cols, long type), Constructor(long rows, long cols, long type, sequence<long> scalar), Constructor(Matrix m, long x, long y, long z, long w) ] interface Matrix {... };

66 실제사례 : Open CV Binding // 만약당신이 WebIDL 고수였다면.. [ Constructor(), Constructor(long rows, long cols, optional long type, optional sequence<long> scalar), Constructor(Matrix m, long x, long y, long z, long w) ] interface Matrix {... };

67 요약 Node.js 에서 V8 과 Native Module 사이의 Binding 은개발자가직접한땀한땀개발해야만했다. Chromium 에서사용되는 WebIDL Binding 을도입한다면, 그러한장인정신을발휘하지않고도쉽고빠르게개발할수있다.

68 Node.js를위한 WebIDL Auto Binding 구현하기 (Bacardi의구현원리 )

69 What should we do? WebIDL 을해석한후 N-API 를사용하는적절한 Binding 코드를생성한다.

70 Blink 에서 WebIDL 이처리되는과정 WebIDL User Native Implementation

71 Blink 에서 WebIDL 이처리되는과정 WebIDL Input IDL Parser User Native Implementation

72 Blink 에서 WebIDL 이처리되는과정 WebIDL Input IDL Parser Binding Code Generator User Native Implementation

73 Blink 에서 WebIDL 이처리되는과정 WebIDL Input IDL Parser Binding Code Generator Input Code Template User Native Implementation

74 Blink 에서 WebIDL 이처리되는과정 WebIDL Input IDL Parser Binding Code Generator Input Code Template Build User Native Implementation Generated Code Based on V8

75 Blink 에서 WebIDL 이처리되는과정 WebIDL Input IDL Parser Binding Code Generator Input Code Template Build User Native Implementation Reference Generated Code Based on V8

76 Blink 에서 WebIDL 이처리되는과정 WebIDL Input IDL Parser Binding Code Generator Input Code Template Build User Native Implementation Reference Generated Code Based on V8 Build Build Output Binary

77 What should we do? IDL Parser 를구현한다. (Front End) Code Generator 를구현한다. (Back End)

78 How to implement IDL Parser 를구현한다. (Front End) 이미잘구현된 WebIDL Parser 가있다 : 우리는 AST(Abstract Syntax Tree) 를 IDL Definitions 로만들어주는것만하면된다. Code Generator 를구현한다. (Back End)

79 How to implement IDL Parser 를구현한다. (Front End) 이미잘구현된 WebIDL Parser 가있다 : 우리는 AST(Abstract Syntax Tree) 를 IDL Definitions 로만들어주는것만하면된다. Code Generator 를구현한다. (Back End) Python 의 Jinja2 를 JS 로포팅한 Nunjucks 가있다 : 우리는 C++ Binding Code (N-API 를사용한 ) 를잘생성해주는로직을짜기만하면된다.

80 IDL Parser (Front End) Compiler의 FrontEnd의역할. IR(Intermediate Representation) 을생성. Constructing 단계에서다음의두가지요소가추가적으로필요함. Extended attribute validation Dependency resolution. IDL Tokens AST (Abstract Syntax Tree) IR (IDL Definitions) Lexing Parsing Constructing

81 IDL Parser (Front End) [Constructor] interface Hello { double test(world world); }; [{ type: 'interface', name: 'Hello', partial: false, members: [ [...] ], inheritance: null, extattrs: [ [...] ] }] Parsing Dependency Resolution [{... name: 'Hello', members: [ [{ idltype: 'World,... }] ], }] Constructing [Constructor] interface World { readonly attribute value; };

82 Code Generator (Back End) Compiler 의 BackEnd 의역할. IR 을 Input 으로최종결과물 (binding code) 생성. 코드생성을위해 Nunjucks Template Engine 을사용. Code Template IR (IDL Definitions) Contexts Native Binding Code V8 Engine Logic Processing Template Processing

83 Code Generator (Back End) {% for argument in member.arguments %} auto {{argument.name}} = NativeTypeTraits<IDL{{argument.type camelcase-}} >::NativeValue(info.Env(), info[{{loop.index - 1}}]); {% endfor %} {% if member.type!= "void" %}auto return_value = {% endif %} {% if member.is_static -%} {{name}}::{% else %} impl_->{% endif %} {{member.name camelcase}}({{-member.arguments[0].name-}} {%- for i in range(1, member.arguments.length) -%}, {{member.arguments[i].name-}} {% endfor %}); return JSTypeTraits(info.Env(), return_value);

84 Code Generator (Back End) {% for argument in member.arguments %} auto {{argument.name}} = NativeTypeTraits<IDL{{argument.type camelcase-}} >::NativeValue(info.Env(), info[{{loop.index - 1}}]); {% endfor %} {% if member.type!= "void" %}auto return_value = {% endif %} {% if member.is_static -%} {{name}}::{% else %} impl_->{% endif %} {{member.name camelcase}}({{-member.arguments[0].name-}} {%- for i in range(1, member.arguments.length) -%}, {{member.arguments[i].name-}} {% endfor %}); return JSTypeTraits(info.Env(), return_value);

85 Code Generator (Back End) if (info.length()!= 2) { Napi::RangeError::New(info.Env(), "Invalid").ThrowAsJavaScriptException(); return Napi::Value(); } // 복잡한 Type Mapping 및 Converting 은개발자에게노출하지않는다. double number1 = NativeTypeTraits<IDLDouble>::NativeValue(info.Env(), info[0]); double number2 = NativeTypeTraits<IDLDouble>::NativeValue(info.Env(), info[1]); // 사용자가작성한 User Native Implementation 을여기서호출한다. auto return_value = impl_->add(number1, number2); return JSTypeTraits(info.Env(), return_value);

86 Code Generator (Back End) class Calculator { public: Calculator() {} } // 개발자는 JS Engine의 public API가어떻게동작하는지알필요가없다. // WebIDL Spec에따라 IDL type이정확한 platform object type과 mapping된다. double Add(double number1, double number2) { return number1 + number2; }

87 요약 Node.js 에 WebIDL Binding 을구현하기위해서는 IDL Parser 와 Code Generator 두가지를구현해야한다.

88 Bacardi Project 활용하기

89 Introduce Bacardi Project Node.js 에서 Chromium 이사용하는 WebIDL Auto Binding 을적용하기위한오픈소스프로젝트입니다. Chromium Committer 들이주축으로만들어갑니다.

90 How to test Bacardi # Git clone repository $ git clone

91 How to test Bacardi # Git clone repository $ git clone # If you are using MacOS $ xcode-select install # If you are using Linux $ sudo apt-get install g++ git make python wget

92 How to test Bacardi # Git clone repository $ git clone # If you are using MacOS $ xcode-select install # If you are using Linux $ sudo apt-get install g++ git make python wget # Build & Test $./bacardi build &&./bacardi test

93 Details 자세한것은 Repository 를참조. 테스트가아닌간단한예제는 examples 디렉토리를참조.

94 Bacardi with Electron # Build for Electron & Run Electron app $./bacardi build_electron &&./bacardi electron

95 Bacardi with Electron - SimRank 두객체의유사도를구하는알고리즘.

96 Bacardi with Electron - SimRank 만약여러분이사용하고싶은구현이 Node.js 에존재하지않는다면..

97 Bacardi with Electron - SimRank 구글링 (Googling) 을해보니 SimRank 의 C++ 구현은존재한다.

98 Bacardi with Electron - SimRank

99 Bacardi with Electron - SimRank 이것을그대로 Javascript 로 binding 하여 Electron app 에출력해보자. [ Constructor(), Constructor(long k, double c) ] interface ElectronNative { void addedge(string head, string tail); void calculatesimrank(); double similarity(string node1, string node2); };

100 Bacardi with Electron - SimRank

101 Bacardi with Electron - SimRank

102 Bacardi 의향후계획 2017년 4분기까지 C++ Binding 구현완료 - NPM 배포 OpenCV & Tensor Flow Binding Bacardi로옮기기 Cross Platform Build 지원 Welcome to contribution (

103 요약 Node.js 에 WebIDL Binding 을구현하기위해서는 IDL Parser 와 Code Generator 두가지를구현해야한다. 모두가같은노력을할필요없으므로오픈소스프로젝트 (Bacardi Project) 로진행중이며, 이를 Node.js Native Module 개발에활용할수있다.

104 Q & A zino@chromium.org

105 THANK YOU Copyright c 2017 SAMSUNG ELECTRONICS. ALL RIGHTS RESERVED

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 4 (Object) (Class) (Instance) (Method) (Constructor) Memory 1 UML 1 @ & 1 (Real World) (Software World) @ &.. () () @ & 2 (Real World) (Software World) OOA/ Modeling Abstraction Instantiation

More information

1

1 1 1....6 1.1...6 2. Java Architecture...7 2.1 2SDK(Software Development Kit)...8 2.2 JRE(Java Runtime Environment)...9 2.3 (Java Virtual Machine, JVM)...10 2.4 JVM...11 2.5 (runtime)jvm...12 2.5.1 2.5.2

More information

Interstage5 SOAP서비스 설정 가이드

Interstage5 SOAP서비스 설정 가이드 Interstage 5 Application Server ( Solaris ) SOAP Service Internet Sample Test SOAP Server Application SOAP Client Application CORBA/SOAP Server Gateway CORBA/SOAP Gateway Client INTERSTAGE SOAP Service

More information

untitled

untitled Step Motor Device Driver Embedded System Lab. II Step Motor Step Motor Step Motor source Embedded System Lab. II 2 open loop, : : Pulse, 1 Pulse,, -, 1 +5%, step Step Motor (2),, Embedded System Lab. II

More information

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일 Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 Introduce Me!!! Job Jeju National University Student Ubuntu Korean Jeju Community Owner E-Mail: ned3y2k@hanmail.net Blog: http://ned3y2k.wo.tc Facebook: http://www.facebook.com/gyeongdae

More information

playnode.key

playnode.key Electron React Webpack! Junyoung Choi github.com/rokt33r Speaker / Junyoung Choi (2017.3 ) Node.js. MAISIN&CO. Boostnote 2015.11~2016.10 2! Agenda. / HMR, Electron Github Atom Node.js Chromium Javascript

More information

Modern Javascript

Modern Javascript ES6 - Arrow Function Class Template String Destructuring Default, Rest, Spread let, const for..of Promises Module System Map, Set * Generator * Symbol * * https://babeljs.io/ Babel is a JavaScript compiler.

More information

KT AI MAKERS KIT 사용설명서 (Node JS 편).indd

KT AI MAKERS KIT 사용설명서 (Node JS 편).indd KT AI MAKERS KIT 03 51 20 133 3 4 5 6 7 8 9 1 2 3 5 4 11 10 6 7 8 9 12 1 6 2 7 3 8 11 12 4 9 5 10 10 1 4 2 3 5 6 1 4 2 5 3 6 12 01 13 02 03 15 04 16 05 17 06 18 07 19 08 20 21 22 23 24 25 26 27 28 29

More information

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V Mobile Service > IAP > Android SDK IAP SDK TOAST SDK. IAP SDK. Android Studio IDE 2.3.3 Android SDK Version 2.3.3 (API Level 10). Name Reference Version License okhttp http://square.github.io/okhttp/ 1.5.4

More information

11강-힙정렬.ppt

11강-힙정렬.ppt 11 (Heap ort) leejaku@shinbiro.com Topics? Heap Heap Opeations UpHeap/Insert, DownHeap/Extract Binary Tree / Index Heap ort Heap ort 11.1 (Priority Queue) Operations ? Priority Queue? Priority Queue tack

More information

Orcad Capture 9.x

Orcad Capture 9.x OrCAD Capture Workbook (Ver 10.xx) 0 Capture 1 2 3 Capture for window 4.opj ( OrCAD Project file) Design file Programe link file..dsn (OrCAD Design file) Design file..olb (OrCAD Library file) file..upd

More information

Microsoft Word - FunctionCall

Microsoft Word - FunctionCall Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack

More information

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Crash Unity SDK... Log & Crash Search. - Unity3D v4.0 ios

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 1,..... @ 1 Green Project 1991 Oak Java 1995. 5 December '90 by Patrick Naughton, Mike Sheridan and James Gosling Embedded in various consumer electronic device 1992. 9. 3 Star 7 1993 www portability

More information

02 C h a p t e r Java

02 C h a p t e r Java 02 C h a p t e r Java Bioinformatics in J a va,, 2 1,,,, C++, Python, (Java),,, (http://wwwbiojavaorg),, 13, 3D GUI,,, (Java programming language) (Sun Microsystems) 1995 1990 (green project) TV 22 CHAPTER

More information

example code are examined in this stage The low pressure pressurizer reactor trip module of the Plant Protection System was programmed as subject for

example code are examined in this stage The low pressure pressurizer reactor trip module of the Plant Protection System was programmed as subject for 2003 Development of the Software Generation Method using Model Driven Software Engineering Tool,,,,, Hoon-Seon Chang, Jae-Cheon Jung, Jae-Hack Kim Hee-Hwan Han, Do-Yeon Kim, Young-Woo Chang Wang Sik, Moon

More information

Javascript.pages

Javascript.pages JQuery jquery part1 JavaScript : e-mail:leseraphina@naver.com http://www.webhard.co.kr I.? 2 ......,,. : : html5 ; ; .

More information

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Spring Boot/JDBC JdbcTemplate/CRUD 예제 Spring Boot/JDBC JdbcTemplate/CRUD 예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) Spring Boot, Gradle 과오픈소스인 MariaDB 를이용해서 EMP 테이블을만들고 JdbcTemplate, SimpleJdbcTemplate 을이용하여 CRUD 기능을구현해보자. 마리아 DB 설치는다음 URL 에서확인하자.

More information

thesis

thesis ( Design and Implementation of a Generalized Management Information Repository Service for Network and System Management ) ssp@nile nile.postech.ac..ac.kr DPE Lab. 1997 12 16 GMIRS GMIRS GMIRS prototype

More information

DE1-SoC Board

DE1-SoC Board 실습 1 개발환경 DE1-SoC Board Design Tools - Installation Download & Install Quartus Prime Lite Edition http://www.altera.com/ Quartus Prime (includes Nios II EDS) Nios II Embedded Design Suite (EDS) is automatically

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 3 if, if else, if else if, switch case for, while, do while break, continue : System.in, args, JOptionPane for (,, ) @ vs. logic data method variable Data Data Flow (Type), ( ) @ Member field

More information

05-class.key

05-class.key 5 : 2 (method) (public) (private) (interface) 5.1 (Method), (public method) (private method) (constructor), 3 4 5.2 (client). (receiver)., System.out.println("Hello"); (client object) (receiver object)

More information

untitled

untitled - -, (insert) (delete) - - (insert) (delete) (top ) - - (insert) (rear) (delete) (front) A A B top A B C top push(a) push(b) push(c) A B top pop() top A B D push(d) top #define MAX_STACK_SIZE 100 int

More information

DIY 챗봇 - LangCon

DIY 챗봇 - LangCon without Chatbot Builder & Deep Learning bage79@gmail.com Chatbot Builder (=Dialogue Manager),. We need different chatbot builders for various chatbot services. Chatbot builders can t call some external

More information

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호 제이쿼리 () 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호 CSS와마찬가지로, 문서에존재하는여러엘리먼트를접근할수있다. 엘리먼트접근방법 $( 엘리먼트 ) : 일반적인접근방법

More information

6주차.key

6주차.key 6, Process concept A program in execution Program code PCB (process control block) Program counter, registers, etc. Stack Heap Data section => global variable Process in memory Process state New Running

More information

Microsoft PowerPoint - web-part03-ch19-node.js기본.pptx

Microsoft PowerPoint - web-part03-ch19-node.js기본.pptx 과목명: 웹프로그래밍응용 교재: 모던웹을 위한 JavaScript Jquery 입문, 한빛미디어 Part3. Ajax Ch19. node.js 기본 2014년 1학기 Professor Seung-Hoon Choi 19 node.js 기본 이 책에서는 서버 구현 시 node.js 를 사용함 자바스크립트로 서버를 개발 다른서버구현기술 ASP.NET, ASP.NET

More information

OCaml

OCaml OCaml 2009.. (khheo@ropas.snu.ac.kr) 1 ML 2 ML OCaml INRIA, France SML Bell lab. & Princeton, USA nml SNU/KAIST, KOREA 3 4 (let) (* ex1.ml *) let a = 10 let add x y = x + y (* ex2.ml *) let sumofsquare

More information

AMP는 어떻게 빠른 성능을 내나.key

AMP는 어떻게 빠른 성능을 내나.key AMP는 어떻게 빠른 성능을 내나? AU개발 김태훈 kishu@navercorp.com AMP 란무엇인가? AMP 방식으로 HTML을 만들고 AMP JS를 로딩하고 AMP 컴포넌트만 사용하면 웹페이지의 빠른 렌더링을 보장 + 구글 검색 결과에서 즉시 로딩(빠르고 멋있게) AMPs are just Web Pages! AMPs are just Web Pages!

More information

PowerPoint Template

PowerPoint Template JavaScript 회원정보 입력양식만들기 HTML & JavaScript Contents 1. Form 객체 2. 일반적인입력양식 3. 선택입력양식 4. 회원정보입력양식만들기 2 Form 객체 Form 객체 입력양식의틀이되는 태그에접근할수있도록지원 Document 객체의하위에위치 속성들은모두 태그의속성들의정보에관련된것

More information

자바 프로그래밍

자바 프로그래밍 5 (kkman@mail.sangji.ac.kr) (Class), (template) (Object) public, final, abstract [modifier] class ClassName { // // (, ) Class Circle { int radius, color ; int x, y ; float getarea() { return 3.14159

More information

chap10.PDF

chap10.PDF 10 C++ Hello!! C C C++ C++ C++ 2 C++ 1980 Bell Bjarne Stroustrup C++ C C++ C, C++ C C 3 C C++ (prototype) (type checking) C C++ : C++ 4 C C++ (prototype) (type checking) [ 10-1] #include extern

More information

서현수

서현수 Introduction to TIZEN SDK UI Builder S-Core 서현수 2015.10.28 CONTENTS TIZEN APP 이란? TIZEN SDK UI Builder 소개 TIZEN APP 개발방법 UI Builder 기능 UI Builder 사용방법 실전, TIZEN APP 개발시작하기 마침 TIZEN APP? TIZEN APP 이란? Mobile,

More information

- 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager clas

- 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager clas 플랫폼사용을위한 ios Native Guide - 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager class 개발. - Native Controller에서

More information

final_thesis

final_thesis CORBA/SNMP DPNM Lab. POSTECH email : ymkang@postech.ac.kr Motivation CORBA/SNMP CORBA/SNMP 2 Motivation CMIP, SNMP and CORBA high cost, low efficiency, complexity 3 Goal (Information Model) (Operation)

More information

No Slide Title

No Slide Title Copyright, 2001 Multimedia Lab., CH 3. COM object (In-process server) Eun-sung Lee twoss@mmlab.net Multimedia Lab. Dept. of Electrical and Computer Eng. University of Seoul Seoul, Korea 0. Contents 1.

More information

2002년 2학기 자료구조

2002년 2학기 자료구조 자료구조 (Data Structures) Chapter 1 Basic Concepts Overview : Data (1) Data vs Information (2) Data Linear list( 선형리스트 ) - Sequential list : - Linked list : Nonlinear list( 비선형리스트 ) - Tree : - Graph : (3)

More information

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf(hihi\n); } warning: conflicting types for functiona 이름 : 학번 : A. True or False: 각각항목마다 True 인지 False 인지적으세요. 1. (Python:) randint 함수를사용하려면, random 모듈을 import 해야한다. 2. (Python:) '' (single quote) 는한글자를표현할때, (double quote) 는문자열을표현할때사용한다. B. 다음에러를수정하는방법을적으세요.

More information

Secure Programming Lecture1 : Introduction

Secure Programming Lecture1 : Introduction Malware and Vulnerability Analysis Lecture3-2 Malware Analysis #3-2 Agenda 안드로이드악성코드분석 악성코드분석 안드로이드악성코드정적분석 APK 추출 #1 adb 명령 안드로이드에설치된패키지리스트추출 adb shell pm list packages v0nui-macbook-pro-2:lecture3 v0n$

More information

쿠폰형_상품소개서

쿠폰형_상품소개서 브랜드이모티콘 쿠폰형 상품 소개서 카카오톡 브랜드이모티콘 잘 만든 브랜드이모티콘 하나, 열 마케팅 부럽지 않다! 카카오톡 브랜드이모티콘은 2012년 출시 이후 강력한 마케팅 도구로 꾸준히 사랑 받고 있습니다. 브랜드 아이덴티티를 잘 반영하여 카카오톡 사용자의 적극적인 호응과 브랜딩 지표 향상을 얻고 있는 강력한 브랜드 아이템입니다. Open

More information

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

The Self-Managing Database : Automatic Health Monitoring and Alerting

The Self-Managing Database : Automatic Health Monitoring and Alerting The Self-Managing Database : Automatic Health Monitoring and Alerting Agenda Oracle 10g Enterpirse Manager Oracle 10g 3 rd Party PL/SQL API Summary (Self-Managing Database) ? 6% 6% 12% 55% 6% Source: IOUG

More information

Microsoft Word - ExecutionStack

Microsoft Word - ExecutionStack Lecture 15: LM code from high level language /* Simple Program */ external int get_int(); external void put_int(); int sum; clear_sum() { sum=0; int step=2; main() { register int i; static int count; clear_sum();

More information

chap01_time_complexity.key

chap01_time_complexity.key 1 : (resource),,, 2 (time complexity),,, (worst-case analysis) (average-case analysis) 3 (Asymptotic) n growth rate Θ-, Ο- ( ) 4 : n data, n/2. int sample( int data[], int n ) { int k = n/2 ; return data[k]

More information

2007_2_project4

2007_2_project4 Programming Methodology Instructor: Kyuseok Shim Project #4: external sort with template Due Date: 0:0 a.m. between 2007-12-2 & 2007-12-3 Introduction 이프로젝트는 C++ 의 template을이용한 sorting algorithm과정렬해야할데이터의크기가

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 2012.11.23 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Document Distribution Copy Number Name(Role, Title) Date

More information

본책- 부속물

본책- 부속물 PROGRAMMING RUBY PROGRAMMING RUBY : THE PRAGMATIC PROGRAMMER S GUIDE, 2nd Ed. Copyright c 2005 Published in the original in the English language by The Pragmatic Programmers, LLC, Lewisville. All rights

More information

MAX+plus II Getting Started - 무작정따라하기

MAX+plus II Getting Started - 무작정따라하기 무작정 따라하기 2001 10 4 / Version 20-2 0 MAX+plus II Digital, Schematic Capture MAX+plus II, IC, CPLD FPGA (Logic) ALTERA PLD FLEX10K Series EPF10K10QC208-4 MAX+plus II Project, Schematic, Design Compilation,

More information

USER GUIDE

USER GUIDE Solution Package Volume II DATABASE MIGRATION 2010. 1. 9. U.Tu System 1 U.Tu System SeeMAGMA SYSTEM 차 례 1. INPUT & OUTPUT DATABASE LAYOUT...2 2. IPO 중 VB DATA DEFINE 자동작성...4 3. DATABASE UNLOAD...6 4.

More information

rmi_박준용_final.PDF

rmi_박준용_final.PDF (RMI) - JSTORM http://wwwjstormpekr (RMI)- Document title: Document file name: Revision number: Issued by: Document Information (RMI)- rmi finaldoc Issue Date: Status:

More information

Microsoft PowerPoint - PL_03-04.pptx

Microsoft PowerPoint - PL_03-04.pptx Copyright, 2011 H. Y. Kwak, Jeju National University. Kwak, Ho-Young http://cybertec.cheju.ac.kr Contents 1 프로그래밍 언어 소개 2 언어의 변천 3 프로그래밍 언어 설계 4 프로그래밍 언어의 구문과 구현 기법 5 6 7 컴파일러 개요 변수, 바인딩, 식 및 제어문 자료형 8

More information

07 자바의 다양한 클래스.key

07 자바의 다양한 클래스.key [ 07 ] . java.lang Object, Math, String, StringBuffer Byte, Short, Integer, Long, Float, Double, Boolean, Character. java.util Random, StringTokenizer Calendar, GregorianCalendar, Date. Collection, List,

More information

Special Theme _ 모바일웹과 스마트폰 본 고에서는 모바일웹에서의 단말 API인 W3C DAP (Device API and Policy) 의 표준 개발 현황에 대해서 살펴보고 관 련하여 개발 중인 사례를 통하여 이해를 돕고자 한다. 2. 웹 애플리케이션과 네이

Special Theme _ 모바일웹과 스마트폰 본 고에서는 모바일웹에서의 단말 API인 W3C DAP (Device API and Policy) 의 표준 개발 현황에 대해서 살펴보고 관 련하여 개발 중인 사례를 통하여 이해를 돕고자 한다. 2. 웹 애플리케이션과 네이 모바일웹 플랫폼과 Device API 표준 이강찬 TTA 유비쿼터스 웹 응용 실무반(WG6052)의장, ETRI 선임연구원 1. 머리말 현재 소개되어 이용되는 모바일 플랫폼은 아이폰, 윈 도 모바일, 안드로이드, 심비안, 모조, 리모, 팜 WebOS, 바다 등이 있으며, 플랫폼별로 버전을 고려하면 그 수 를 열거하기 힘들 정도로 다양하게 이용되고 있다. 이

More information

K&R2 Reference Manual 번역본

K&R2 Reference Manual 번역본 typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct

More information

13주-14주proc.PDF

13주-14주proc.PDF 12 : Pro*C/C++ 1 2 Embeded SQL 3 PRO *C 31 C/C++ PRO *C NOT! NOT AND && AND OR OR EQUAL == = SQL,,, Embeded SQL SQL 32 Pro*C C SQL Pro*C C, C Pro*C, C C 321, C char : char[n] : n int, short, long : float

More information

Design Issues

Design Issues 11 COMPUTER PROGRAMMING INHERIATANCE CONTENTS OVERVIEW OF INHERITANCE INHERITANCE OF MEMBER VARIABLE RESERVED WORD SUPER METHOD INHERITANCE and OVERRIDING INHERITANCE and CONSTRUCTOR 2 Overview of Inheritance

More information

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조 q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3 q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4 q 객체지향프로그래밍의이해 v 객체란무엇인가

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

Deok9_Exploit Technique

Deok9_Exploit Technique Exploit Technique CodeEngn Co-Administrator!!! and Team Sur3x5F Member Nick : Deok9 E-mail : DDeok9@gmail.com HomePage : http://deok9.sur3x5f.org Twitter :@DDeok9 > 1. Shell Code 2. Security

More information

Data structure: Assignment 1 Seung-Hoon Na October 1, Assignment 1 Binary search 주어진 정렬된 입력 파일이 있다고 가정하자. 단, 파일내의 숫자는 공백으로 구 분, file내에 숫자들은

Data structure: Assignment 1 Seung-Hoon Na October 1, Assignment 1 Binary search 주어진 정렬된 입력 파일이 있다고 가정하자. 단, 파일내의 숫자는 공백으로 구 분, file내에 숫자들은 Data structure: Assignment 1 Seung-Hoon Na October 1, 018 1 1.1 Assignment 1 Binary search 주어진 정렬된 입력 파일이 있다고 가정하자. 단, 파일내의 숫자는 공백으로 구 분, file내에 숫자들은 multiline으로 구성될 수 있으며, 한 라인에는 임의의 갯수의 숫자가 순서대로 나열될

More information

2017 년 6 월한국소프트웨어감정평가학회논문지제 13 권제 1 호 Abstract

2017 년 6 월한국소프트웨어감정평가학회논문지제 13 권제 1 호 Abstract 2017 년 6 월한국소프트웨어감정평가학회논문지제 13 권제 1 호 Abstract - 31 - 소스코드유사도측정도구의성능에관한비교연구 1. 서론 1) Revulytics, Top 20 Countries for Software Piracy and Licence Misuse (2017), March 21, 2017. www.revulytics.com/blog/top-20-countries-software

More information

OOP 소개

OOP 소개 OOP : @madvirus, : madvirus@madvirus.net : @madvirus : madvirus@madvirus.net ) ) ) 7, 3, JSP 2 ? 3 case R.id.txt_all: switch (menu_type) { case GROUP_ALL: showrecommend("month"); case GROUP_MY: type =

More information

신림프로그래머_클린코드.key

신림프로그래머_클린코드.key CLEAN CODE 6 11st Front Dev. Team 6 1. 2. 3. checked exception 4. 5. 6. 11 : 2 4 : java (50%), javascript (35%), SQL/PL-SQL (15%) : Spring, ibatis, Oracle, jquery ? , (, ) ( ) 클린코드를 무시한다면 . 6 1. ,,,!

More information

PCServerMgmt7

PCServerMgmt7 Web Windows NT/2000 Server DP&NM Lab 1 Contents 2 Windows NT Service Provider Management Application Web UI 3 . PC,, Client/Server Network 4 (1),,, PC Mainframe PC Backbone Server TCP/IP DCS PLC Network

More information

<31332DB9E9C6AEB7A2C7D8C5B72D3131C0E528BACEB7CF292E687770>

<31332DB9E9C6AEB7A2C7D8C5B72D3131C0E528BACEB7CF292E687770> 보자. 이제 v4.6.2-1 로업데이트됐다. 그림 F-15의하단처럼 msfupdate를입력해 root @bt:~# msfudpate 그림 F-16 과같이정상적으로업데이트가진행되는것을볼수있다. 이후에는 msfupdate를입력하면최신업데이트모듈과공격코드를쉽게유지할수있다. 그림 F-16 msfupdate의진행확인 G. SET 업데이트문제해결 백트랙을기본설치로운영을할때에는

More information

Something that can be seen, touched or otherwise sensed

Something that can be seen, touched or otherwise sensed Something that can be seen, touched or otherwise sensed Things about an object Weight Height Material Things an object does Pen writes Book stores words Water have Fresh water Rivers Oceans have

More information

1217 WebTrafMon II

1217 WebTrafMon II (1/28) (2/28) (10 Mbps ) Video, Audio. (3/28) 10 ~ 15 ( : telnet, ftp ),, (4/28) UDP/TCP (5/28) centralized environment packet header information analysis network traffic data, capture presentation network

More information

1. 안드로이드개발환경설정 안드로이드개발을위해선툴체인을비롯한다양한소프트웨어패키지가필요합니다 툴체인 (Cross-Compiler) 설치 안드로이드 2.2 프로요부터는소스에기본툴체인이 prebuilt 라는이름으로포함되어있지만, 리눅스 나부트로더 (U-boot)

1. 안드로이드개발환경설정 안드로이드개발을위해선툴체인을비롯한다양한소프트웨어패키지가필요합니다 툴체인 (Cross-Compiler) 설치 안드로이드 2.2 프로요부터는소스에기본툴체인이 prebuilt 라는이름으로포함되어있지만, 리눅스 나부트로더 (U-boot) 1. 안드로이드개발환경설정 안드로이드개발을위해선툴체인을비롯한다양한소프트웨어패키지가필요합니다. 1.1. 툴체인 (Cross-Compiler) 설치 안드로이드 2.2 프로요부터는소스에기본툴체인이 prebuilt 라는이름으로포함되어있지만, 리눅스 나부트로더 (U-boot) 만별도로필요한경우도있어툴체인설치및설정에대해알아봅니다. 1.1.1. 툴체인설치 다음링크에서다운받을수있습니다.

More information

DocsPin_Korean.pages

DocsPin_Korean.pages Unity Localize Script Service, Page 1 Unity Localize Script Service Introduction Application Game. Unity. Google Drive Unity.. Application Game. -? ( ) -? -?.. 준비사항 Google Drive. Google Drive.,.. - Google

More information

09-interface.key

09-interface.key 9 Database insert(record r): boolean find(key k): Record 1 Record getkey(): Key * Record Key Database.? Key equals(key y): boolean Database insert(record r): boolean find(key k): Record * Database OK 1

More information

JAVA PROGRAMMING 실습 08.다형성

JAVA PROGRAMMING 실습 08.다형성 2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스

More information

BACK TO THE BASIC C++ 버그 헌팅: 버그를 예방하는 11가지 코딩 습관

BACK TO THE BASIC C++ 버그 헌팅: 버그를 예방하는 11가지 코딩 습관 Hanbit ebook Realtime 30 C++ 버그 헌팅 버그를 예방하는 11가지 코딩 습관 Safe C++ 블라디미르 쿠스퀴니르 지음 / 정원천 옮김 이 도서는 O REILLY의 Safe C++의 번역서입니다. BACK TO THE BASIC C++ 버그 헌팅 버그를 예방하는 11가지 코딩 습관 BACK TO THE BASIC C++ 버그 헌팅 버그를

More information

HTML5* Web Development to the next level HTML5 ~= HTML + CSS + JS API

HTML5* Web Development to the next level HTML5 ~= HTML + CSS + JS API WAC 2.0 & Hybrid Web App 권정혁 ( @xguru ) 1 HTML5* Web Development to the next level HTML5 ~= HTML + CSS + JS API Mobile Web App needs Device APIs Camera Filesystem Acclerometer Web Browser Contacts Messaging

More information

DataBinding

DataBinding DataBinding lifeisforu@naver.com 최도경 이문서는 MSDN 의내용에대한요약을중심으로작성되었습니다. Data Binding Overview. Markup Extensions and WPF XAML. What Is Data Binding UI 와 business logic 사이의연결을설정하는 process 이다. Binding 이올바르게설정되면

More information

thesis

thesis CORBA TMN 1 2 CORBA, CORBA CORBA TMN CORBA 3 - IN Intelligent Network (Call) SMS : Service Management System SCP : Service Control Point SSP : Service Switching Point SCP SMS CMIP Signaling System No.7

More information

[Brochure] KOR_TunA

[Brochure] KOR_TunA LG CNS LG CNS APM (TunA) LG CNS APM (TunA) 어플리케이션의 성능 개선을 위한 직관적이고 심플한 APM 솔루션 APM 이란? Application Performance Management 란? 사용자 관점 그리고 비즈니스 관점에서 실제 서비스되고 있는 어플리케이션의 성능 관리 체계입니다. 이를 위해서는 신속한 장애 지점 파악 /

More information

Observational Determinism for Concurrent Program Security

Observational Determinism for  Concurrent Program Security 웹응용프로그램보안취약성 분석기구현 소프트웨어무결점센터 Workshop 2010. 8. 25 한국항공대학교, 안준선 1 소개 관련연구 Outline Input Validation Vulnerability 연구내용 Abstract Domain for Input Validation Implementation of Vulnerability Analyzer 기존연구

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Programming Languages 모듈과펑터 2016 년봄학기 손시운 (ssw5176@kangwon.ac.kr) 담당교수 : 임현승교수님 모듈 (module) 관련있는정의 ( 변수또는함수 ) 를하나로묶은패키지 예약어 module과 struct end를사용하여정의 아래는모듈의예시 ( 우선순위큐, priority queue) # module PrioQueue

More information

5장.key

5장.key JAVA Programming 1 (inheritance) 2!,!! 4 3 4!!!! 5 public class Person {... public class Student extends Person { // Person Student... public class StudentWorker extends Student { // Student StudentWorker...!

More information

HTML5가 웹 환경에 미치는 영향 고 있어 웹 플랫폼 환경과는 차이가 있다. HTML5는 기존 HTML 기반 웹 브라우저와의 호환성을 유지하면서도, 구조적인 마크업(mark-up) 및 편리한 웹 폼(web form) 기능을 제공하고, 리치웹 애플리케이 션(RIA)을

HTML5가 웹 환경에 미치는 영향 고 있어 웹 플랫폼 환경과는 차이가 있다. HTML5는 기존 HTML 기반 웹 브라우저와의 호환성을 유지하면서도, 구조적인 마크업(mark-up) 및 편리한 웹 폼(web form) 기능을 제공하고, 리치웹 애플리케이 션(RIA)을 동 향 제 23 권 5호 통권 504호 HTML5가 웹 환경에 미치는 영향 이 은 민 * 16) 1. 개 요 구글(Google)은 2010년 5월 구글 I/O 개발자 컨퍼런스에서 HTML5를 통해 플러 그인의 사용이 줄어들고 프로그램 다운로드 및 설치가 필요 없는 브라우저 기반 웹 플랫폼 환경이 점차 구현되고 있다고 강조했다. 그리고 애플(Apple)은 2010년

More information

11 템플릿적용 - Java Program Performance Tuning (김명호기술이사)

11 템플릿적용 - Java Program Performance Tuning (김명호기술이사) Java Program Performance Tuning ( ) n (Primes0) static List primes(int n) { List primes = new ArrayList(n); outer: for (int candidate = 2; n > 0; candidate++) { Iterator iter = primes.iterator(); while

More information

Chap 6: Graphs

Chap 6: Graphs 그래프표현법 인접행렬 (Adjacency Matrix) 인접리스트 (Adjacency List) 인접다중리스트 (Adjacency Multilist) 6 장. 그래프 (Page ) 인접행렬 (Adjacency Matrix) n 개의 vertex 를갖는그래프 G 의인접행렬의구성 A[n][n] (u, v) E(G) 이면, A[u][v] = Otherwise, A[u][v]

More information

MasoJava4_Dongbin.PDF

MasoJava4_Dongbin.PDF JSTORM http://wwwjstormpekr Issued by: < > Revision: Document Information Document title: Document file name: MasoJava4_Dongbindoc Revision number: Issued by: < > SI, dbin@handysoftcokr

More information

HW5 Exercise 1 (60pts) M interpreter with a simple type system M. M. M.., M (simple type system). M, M. M., M.

HW5 Exercise 1 (60pts) M interpreter with a simple type system M. M. M.., M (simple type system). M, M. M., M. 오늘할것 5 6 HW5 Exercise 1 (60pts) M interpreter with a simple type system M. M. M.., M (simple type system). M, M. M., M. Review: 5-2 7 7 17 5 4 3 4 OR 0 2 1 2 ~20 ~40 ~60 ~80 ~100 M 언어 e ::= const constant

More information

3장

3장 C H A P T E R 03 CHAPTER 03 03-01 03-01-01 Win m1 f1 e4 e5 e6 o8 Mac m1 f1 s1.2 o8 Linux m1 f1 k3 o8 AJAX

More information

Chap7.PDF

Chap7.PDF Chapter 7 The SUN Intranet Data Warehouse: Architecture and Tools All rights reserved 1 Intranet Data Warehouse : Distributed Networking Computing Peer-to-peer Peer-to-peer:,. C/S Microsoft ActiveX DCOM(Distributed

More information

FreeBSD Handbook

FreeBSD Handbook FreeBSD Korea FreeBSD Users Group http://www.kr.freebsd.org/ Linux Binary Compatibility: . 2004 8 7. 1.1 Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 The FreeBSD

More information

유니티 변수-함수.key

유니티 변수-함수.key C# 1 or 16 (Binary or Hex) 1:1 C# C# (Java, Python, Go ) (0101010 ). (Variable) : (Value) (Variable) : (Value) ( ) (Variable) : (Value) ( ) ; (Variable) : (Value) ( ) ; = ; (Variable) : (Value) (Variable)

More information

JVM 메모리구조

JVM 메모리구조 조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.

More information

중간고사

중간고사 중간고사 예제 1 사용자로부터받은두개의숫자 x, y 중에서큰수를찾는알고리즘을의사코드로작성하시오. Step 1: Input x, y Step 2: if (x > y) then MAX

More information

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

More information

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout <<  양수입력 : ; cin >> *p; if (*p <= 0) cout <<  양수를입력해야합니다  << endl; return; 동적할 15 장기타주제들 auto_ptr 변환함수 cast 연산자에의한명시적형변환실행시간타입정보알아내기 (RTTI) C++ 프로그래밍입문 1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout > *p; if (*p

More information

61 62 63 64 234 235 p r i n t f ( % 5 d :, i+1); g e t s ( s t u d e n t _ n a m e [ i ] ) ; if (student_name[i][0] == \ 0 ) i = MAX; p r i n t f (\ n :\ n ); 6 1 for (i = 0; student_name[i][0]!= \ 0&&

More information

Week13

Week13 Week 13 Social Data Mining 02 Joonhwan Lee human-computer interaction + design lab. Crawling Twitter Data OAuth Crawling Data using OpenAPI Advanced Web Crawling 1. Crawling Twitter Data Twitter API API

More information

Spring Data JPA Many To Many 양방향 관계 예제

Spring Data JPA Many To Many 양방향 관계 예제 Spring Data JPA Many To Many 양방향관계예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) 엔티티매핑 (Entity Mapping) M : N 연관관계 사원 (Sawon), 취미 (Hobby) 는다 : 다관계이다. 사원은여러취미를가질수있고, 하나의취미역시여러사원에할당될수있기때문이다. 보통관계형 DB 에서는다 : 다관계는 1

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 1 Tizen 실습예제 : Remote Key Framework 시스템소프트웨어특론 (2014 년 2 학기 ) Sungkyunkwan University Contents 2 Motivation and Concept Requirements Design Implementation Virtual Input Device Driver 제작 Tizen Service 개발절차

More information