Sorry. for koreans only. I'll add english short description. or just visit http://wtfjs.com
아오 썅.
정정사항입니다.
객체 동일비교는 항상 valueOf 결과물로 나온 비교로 하는 데다가,
객체와 배열은 valueOf 해봐야 객체로 나오기 때문에
객체와 배열은 == 하나 === 하나 같은 비용으로 비교합니다.
[1,2,3]==[1,2,3] 은 false가 되므로
[1,,,2]==[1,undefined,undefuned,2] 는 무조건 false로 나옵니다.
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기Chris Ohk
기존에 작성해 놓은 C++ 코드에 모던 C++를 적용하기는 쉽지 않습니다. 막상 개선하려고 마음먹었다고 해도, 어디서부터 바꿔야 할 지 막막하기만 합니다. 이 세션에서는 기존 C++ 코드에서 모던 C++를 적용해 프로그램의 구조와 성능을 개선하는 방법에 대해서 설명합니다. 그리고 기존 C++ 코드에 모던 C++를 적용할 때 주의해야 될 점에 대해서도 살펴봅니다.
Sorry. for koreans only. I'll add english short description. or just visit http://wtfjs.com
아오 썅.
정정사항입니다.
객체 동일비교는 항상 valueOf 결과물로 나온 비교로 하는 데다가,
객체와 배열은 valueOf 해봐야 객체로 나오기 때문에
객체와 배열은 == 하나 === 하나 같은 비용으로 비교합니다.
[1,2,3]==[1,2,3] 은 false가 되므로
[1,,,2]==[1,undefined,undefuned,2] 는 무조건 false로 나옵니다.
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기Chris Ohk
기존에 작성해 놓은 C++ 코드에 모던 C++를 적용하기는 쉽지 않습니다. 막상 개선하려고 마음먹었다고 해도, 어디서부터 바꿔야 할 지 막막하기만 합니다. 이 세션에서는 기존 C++ 코드에서 모던 C++를 적용해 프로그램의 구조와 성능을 개선하는 방법에 대해서 설명합니다. 그리고 기존 C++ 코드에 모던 C++를 적용할 때 주의해야 될 점에 대해서도 살펴봅니다.
[C++ Korea] Effective Modern C++ Study item14 16 +신촌Seok-joon Yun
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
Item 14 : Declare functions noexcept if they won't emit exceptions. +윤석준
Item 15 : Use constexpr whenever possible. +이동우
Item 16 : Make const member functions thread safe. +제한재
자바스크립트로 라즈베리파이 제어 및 리모콘을 만들어 IoT를 실습하는 방법을 다루고 있습니다. 관련 목차는 다음과 같습니다.
0. 시작하기 앞서 (4p)
1. 파이를 동작시켜 보자 - 초기설정 (17p)
2. 파이의 운영체제 - Linux 속성실습 (33p)
3. JavaScript로 하드웨어 제어를 - Node.JS (57p)
4. 거리 측정하고 정보 표시 하기 - GPIO (81p)
5. 스마트폰으로 리모콘을 - jQueryMobile (119p)
6. 인터넷으로 음악과 날씨를 - OpenAPI & RSS (137p)
7. 오디오 소프트웨어 개발하기 - (153p)
8. 외관을 생각대로 만들기 - 3D 프린팅 (189p)
9. 언제 어디서나 동작하는 IoT- Circulus (192p)
10. 마무리(256p)
JavaScript Everywhere from Mobile and RobotCirculus
Build own idea using javascript from mobile and robot!
서큘러스 팀은 IoT 교육/개발 플랫폼과 데이터 수집 및 분석 시스템, 그리고 모바일과 봇 형 제품군까지 모든것을 JavaScript 하나만으로 제작및 통합하였습니다. 하나의 언어로 통합하여 얻게 되는 장점에 대해 살펴봅니다.
Personal intelligent robot as friend & assistant. Also pibo can support programming (Blockly, JavaScript) & making education. We will launch end of this year.
KICT 디바이스랩의 파워유저 활동의 종료보고회 자료입니다.
개인용 지능형 로봇 piBo 의 개선과 더불어, 웨어러블 디바이스(Gear S2) 를 통해 로봇을 제어하는 내용이 추가되었습니다.
아울러, Circulus 에서 기존엔 모바일 부터 하드웨어까지 클라우드상에서 개발할 수 있었던 상황에서, 이제는 웨어러블도 역시 JavaScript 만으로 개발 가능하게 업그레이드 되었습니다.
IoT EDU/MAKE 플랫폼인 Circulus 를 이용하여,
라즈베리파이를 개발할 때 제공되는 API 가이드라인입니다.
이 가이드에서는
LED, 초음파센서, 7세그먼트, 온습도 센서, 조도 센서, SW/HW PWM, TTS, 카메라, 사운드인식, 위치파악, 모니터링, 광학문자인식(OCR) 등에 대해 단 몇줄의 자바스크립트만으로 제어하는 예제를 다루고 있습니다. 앞으로도 지속적으로 추가될 예정입니다.
3. 조건문
조건에 따라 처리를 분기하는 상황에서 사용하는 구조
JavaScript 에서는 if 와 switch 문을 사용함
둘 중 하나를 선택하는 If 명령 복수 중에 하나를 선택하는 Switch 명령
4. If 문 실습
if 문은 명령 이름대로 “만일~ 라면 .., 아니면 ..” 라는 구조를 표현
주어진 조건식이 true/false 어느 쪽 인지에 따라 대응하는 명령 실행
var x = 15;
// if
if(x >= 10){
console.log('a bigger than 10');
}
// if, else
if(x >= 10){
console.log('b bigger than 10');
} else {
console.log('b smaller than 10');
}
var y = 30;
// if, else if, else
if(y >=20){
console.log('c bigger than 20');
} else if(x >= 10){
console.log('c bigger than 10');
} else {
console.log('c smaller than 10');
}
// nested
if(y >= 10){
if(x >= 20){
console.log('d x bigger than 20')
} else {
console.log('d x smaller than 20')
}
} else {
console.log('d y smaller than 10')
}
5. If 문 유의 사항
처음 조건 식을 만족하면 그 이후의 조건식이 실행되지 않으므로,
else if 블록을 사용하는 경우 조건식을 기술하는 순서에 유의해야 함.
If 명령으로 복수 분기 시 유의 점 If문의 중첩
X = 30
변수x 는 10 미만
임을 표시
If의 종료
변수x 는 10 이상
임을 표시
변수x 는 20 이상
임을 표시
X >= 10
X >= 20
X = 30
변수x 는 10 미만
임을 표시
If의 종료
변수x 는 20 이상
임을 표시
X >= 10
X >= 20
조건 만족시
처음에 조건 만족한
블록 한개만 실행
N
N
Y
Y
Y
Y
N
N
6. Switch 문
switch 문은 선두 식이 평가되고, 그것에 만족하는 case 블록을 실행,
만족하는 case 가 없는 경우 default 블록을 호출하는 직관적인 구조임
var rank = 'B';
switch(rank){
case 'A':
console.log('A rank');
break;
case 'B':
console.log('B rank');
break;
case 'C':
console.log('C rank');
break;
default:
console.log('Not ranked');
}
//fall though
switch(rank){
case 'A':
case 'B':
case 'C':
console.log('success');
break;
case 'D':
console.log('fail')
default:
console.log('Not ranked');
}
7. Switch 문
의도적으로 break를 생략하여 복수의 블록을 계속 실행하는 조건 통과
(fall though)라는 작성 방식도 가능하지만, 코드의 흐름을 이해하기가 어려움
연산자 A B C 그 외
case ‘A’:
처리
break;
case ‘B’:
처리
break;
case ‘C’:
처리
break;
default:
처리
break 가 있는 경우 break 가 없는 경우
연산자 A B C 그 외
case ‘A’:
처리
case ‘B’:
처리
case ‘C’:
처리
default:
처리
9. 반복문
while/do while 명령은 미리 부여된 조건식이 true인 동안 루프를 반복함.
미리 정해진 횟수만큼 반복 처리를 행하기 위해서는 for 명령을 사용하며
while
임의의 처리
조건식
do while
for infor
임의의 처리
조건식
초기화 처리
Start
End
임의의 처리
조건식
Start
End
증분식
Start
End
임의의 처리
요소가 남았나?
Start
End
Y N
Y
N
N
Y NY
10. While/do while
while 명령은 루프의 시작시에 조건식을 판정(전치판정)하는데 반해, do
while 명령은 루프의 마지막에서 조건식을 판정(후치판정)함
do while
while
while (x < 10){
.. code...
}
do {
.. code...
} while (x < 10);
x = 10
break
break
조건에 따라서는 한번도 loop 를 실행하지 않음
조건에 상관없이 최소 1회는 루프를 실행
var x = 10;
var y = 10;
// not executed!
while(x < 10){
console.log('x is : ' + x);
x++;
}
// executed once anyway
do {
console.log('y is : ' + y);
} while(y < 10);
11. For/for in
For in loop는 배열에서는 상황에 따라 인덱스가 오 동작하는 경우가 발생.
Object 의 key 값을 조회하는 경우에 사용하는 것을 권장
// for loop
for(var x = 0 ; x < 5 ; x++){
console.log('x is : ' + x);
}
// comma with for loop
for(var i = 0, j = 1; i < 5; i++, j++){
console.log(' i * j = ' + i * j);
}
// array with for & for in
var arr = ['Banana','Apple','Orange'];
for(var i = 0 ; i < arr.length ; i++){
console.log('for : ' + arr[i]);
}
for(var idx in arr){
console.log('for in : ' + arr[i]);
}
// object with for in
var obj = { x : 100, y : 200 };
obj.z = 'Hello!';
for(var key in obj){
console.log(key + ' : ' + obj[key]);
}
12. For/for in
for 명령은 초기화식, 루프 조건, 증감식의 세가지 식으로 loop를 제어한다.
for in loop는 배열의 인덱스 번호를 취하기만 하므로 코드가 심플하지 않음
Array ‘fruits’ Object ‘book’
0 1 2
Banana Tomato Apple
title publish price
JavaScript Hello 3000
for(var i in fruits){ for(var i in book){
[0]
[1]
[2]
[title]
[publish]
[price]
for loop 초기화 식/증감식 x 값 수행 조건 (x < 10) 실행
1회째 변수 x를 8로 초기화 한다 8 x는 10보다 작다 O
2회째 변수 x에 1을 더한다 9 x는 10보다 작다 O
3회째 변수 x에 1을 더한다 10 x는 10보다 작다 X
for in
for
13. break/continue/label
중첩된 loop 안에서 break/continue 명령을 사용하여 벗어날 수 있음.
완전히 빠져나오고자 할 때는 label 명령을 사용함
// break
for(var i = 0; i < 5; i++){
console.log('i : ' + i);
if(i == 3){
break;
}
}
// continue
for(var j = 0 ; j < 5 ; j++){
if(j % 2 == 0){
continue;
}
console.log('j : ' + j);
}
// label
for(var k = 1 ; k < 5 ; k++){
for(var l = 1 ; l < 5 ; l++){
console.log('k * l = ' + k*l)
if(l > 3){
break;
}
}
}
main:
for(var k = 1 ; k < 5 ; k++){
for(var l = 1 ; l < 5 ; l++){
console.log('label k * l = ' + k*l)
if(l > 3){
break main;
}
}
}
14. break/continue/label
특정 조건을 만족할 때 강제 종료를 위해서는 break 명령을 이용함.
현재의 loop만 건너뛰고 다음 loop실행을 위해서는 continue 이용
break 명령은 루프 전체를 완전히 빠져나옴 continue 명령은 현재의 루프를 스킵한다
result = 0
변수 result에
i를 더함
i = 1.. 100
breakresult > 1000
loop
result = 0
continue
변수 i가 2로
나뉘는가?
루프
변수 result에
i를 더함
i = 1.. 99
Start
End
Start
End
N
Y
N
Y
16. Try/catch/finally
숫자에 문자가, 없는 변수를 참조하는 등 예상치 못하게 정지될 수 있음.
스크립트 전체가 정지 않게 하는 것이 try/catch/finally 문의 역할임
// try, catch, finally
var i = 0;
try {
i = i * j;
} catch(e){
console.log(e.message);
} finally {
console.log('Complete');
}
// throw Exception
var x = 10;
var y = 0;
try {
if(y == 0){
throw new Error('divide 0!');
}
var z = x / y;
} catch(e){
console.log(e.message);
17. Try/catch/finally
성능 저하가 크므로, try/catch/finally 는 최소화 하여 사용해야 함
Throw 를 이용하여 예외 사항을 강제로 발생할 수 있음
catch(e){
예외가 발생했을 경우 실행되는 처리
}
try {
예외가 발생할지 모르는 처리
...
}
finally {
예외의 유무에 상관없이 실행하는 처리
}
예외 발생
예외없음 예외없음
예외 처리는 Overhead 가 크므로, try/catch block 구현하는 것을 최소화 해야 함
18. W www.circul.us G group.circul.us
S social.circul.us C cafe.circul.us
CONTACT.US circulus@circul.us
THINKER TO MAKER
ANY
QUESTION?
x
Editor's Notes
Circulus 팀 박종건입니다. 위 사진은 작년 창조경제박람회때 포스터 운반하던 파이보의 모습입니다.
파이보와 함께 펼쳐가는 미래를 이야기 하겠습니다.