기본 콘텐츠로 건너뛰기

html에서 자바스크립트 파일 불러 오기

웹페이지를 만들기 위해서 html css javascript를 사용한다. 웹의 프레임을 만들기 위해서html을 디자인을 하기 위해서 css 웹의 동작을 정의 하기 위해서 javascript를 사용하는데 javascript를 html에 넣어서 실행하는 것도 가능하지만 html파일이 길어진다는 단점이 있다 이러한 단점을 해결하기 위해서 .js파일에 자바스크립트를 넣어서 사용하는 것이다. 다음과 같은 html파일이 있다. <!DOCTYPE html> <html> <script type="text/javascript"> console.log("Hello world!"); </script> <body> </body> </html> 이 경우의 출력은  이렇게 된다. 하지만 복잡한 페이지를 만들게 되면 코드와 html이 나눠져 있어야 가독성이 좋아 진다. 따라서 분리를 해보겠다. first.js파일에 원레 script테그 안에 있느 코드를 적고 이를 <script type="text/javascript" src="first.js"></script>로 로드하면 된다.  결과는 같다.
최근 글

프로시저와 순수함수

프로시저(procedure)  vs 순수함수(pure function) c/c++로 시작한 입장에서 둘다 생소한 개념이다.  프로시저는 c/c++에서의 함수와 동일 하지만 이름이 다르기 때문에 혼동이 되었다. c/c++을 공부/개발 해본 사람이라면 우리가  return_type function_name (argument)로 만들었던 함수 이다. 물론 c언어의 함수에서 순수함수를 구현할수 있다. 단지 c언어에서는 프로시저와 순수함수를 구분하지 않고 둘다 함수라는 큰 단위로 이해한다. 순수함수(pure function)은 수학의미하는 함수 이다. 정의역과 치역이 있고 일대일 대응하는 경우 우리는 함수하고 할수 있다. 이제부터 c언어의 함수를 프로시저로 순수함수를 함수 라고 표기하겠다. 프로시저는 항상 같은 값을 리턴하지 않는다. (side effect가 존재할 가능성이 있다)  예를 들어서  프로시저 a에서 글로벌 변수의 값을 변경하는 경우가 있다. 이를 다른 곳에서 a가 값을 변경하지 안았을 것이라고 가정하고 프로그램을 짠다면 문제가 생길수 있다. ex) global var g_var = original; void a() {     g_var = something; }  main() {     print(g_var); // original     a();     print(g_var); // something  } 사용자가 원하는 값이 original인데 프로시저a를 실행한 이후에는 something이라는 값이 들어가게 된다.   반면에 순수 함수에서는 side effect가 없다. 그리고 무조건 리턴 값이 있어야 한다. 때문에  어떤 함수a를 정의하고 아무리 호출해서 함수a가 리턴하는 값을 인자에 의해서만 결정된다. 그리고 다른 부분에 영향을 주지도 않는다. 그렇기 때문에  버그를 줄이는 것이 가능하다....

first class citizen ( object , type)함수형 언어

과연 first class citizen이란 무엇일까? 함수형 언어를 공부하면서 first class citizen에 대한 궁금증이 생겼다. 그래서 영문 위키를 검색해 보았다. 결론적으로 first class citizen은 기본 연산을 모두 적용할수 있는 객체를 말한다.  여기에서 객체란 class, function, method, datatype ... etc이다. 보통 가장 처음 접하는 c언어로 예를 들어 보자. ex) int char float과 같은 기본 데이터 타입을 first class citizen으로 기본 연산을 모두 수행이 가능 하다. 하지만 c언어에서는 function은 대입연산 등이 불가능하다. 따라서  ----------------------------------------------- c언어에서의 first class citizen   ----------------------------------------------- datatype                  O ----------------------------------------------- function                   X  ----------------------------------------------- ex) 반면에 함수형언어는 function이 first class citizen이다. 따라서  변수에 함수를 대입하는 것이 가능하다. 간단히 설명해서 함수형 언어에서는  var a = {} ; // 함수형 언어에서는 가능 var b = {} ; // 함수형 언어가 아닌 경우 불가능 앞서서 함수형 언어를 공부하면서 이것 저것 찾아본 것 중에는 함수형언어에 대한 요구 사항들이 있다. 클로저, higher-or...

SIMD(single intsturction multi data)

SIMD란 ? 이전에 알아 보아야 하는 것이 바로 SISD이라는 방식이다. 원래 컴퓨터는 OP라는 연산을 하는 경우 하나 이상의 피연산자와 연산 결과를 가지다. 이것이 SISD(single instruction single data)라는 것이다. 덧셈을 예를 들자면  a + b = c 라는 연산을 +라는 하나의 명령어를 통해서 얻어내는 것이다. 하지만 SIMD(Single instruction multi data)는 같은 연산 여러 개를 한번에 진행 하는것이다. 따라서 CPU명령어에 따라서 덧셈을 명령으로 2개 이상 할수 있다는 것이다. 이런 경우 같은 연산이 필요한 선형대수에서 컴퓨팅 성능을 끌어 올려낼수 있다. 대표적으로 intel의 SSE명령어 셋이 있고 다른 회사에서 만들어 내는 것도 있다.  따라서 각 회사에서 제공해주는 라이브러리를 사용하면 각각의 컴퓨터 아키텍쳐 마다 따로 코드를 짜줘야 한다. 그래서 LLVM등에서는 중간코드를 생성하고 이것을 해석하는 경우 VM에서 각 아키텍쳐에 맞는 SIMD로 변경 해준다.

계란찜 레시피

계란찜 만들기 이모가 알려준것을 기반으로 계란찜의 거품이 꺼지지 않게 하는 레시피이다. 준비물 필수 : 뚝배기 , 계란, 물(쌀뜬물이 면좋다) 준비물 부가적 : 소금, 후추, 설탕, 다진 야체(당근, 양파, 쪽파등), 참기름 위에 부가적인 것이 없다면 굳이 넣을 필요는 없다. 0. 알류미늄 호일을 이용하여 뚝배기 뚜껑을 제작한다. 1. 계란을 볼에 깨서 풀어준다. 2. 볼에 물 넣어준다 비율은 4:1 내외로 한다. 3. 소금, 후추, 설탕, 다진 야체(쪽파 제외)를 넣어 섞는다. 3. 뚝배기를 레인지 위에 올린다. 4. 레인지의 불을 붙인다. 5. 볼에 있는 것을 뚝배기에 넣는다. 6. 끓이면서 저어 준다 7. 어느정도 응고가 되면 0번에서의 알류미늄 호일을 덮어 준다. 8. 살짝 탈것 같은 냄새가 날때까지 조리한다. 9. 끝

avrdude와 gcc를 이용한 avr 프로그래밍

1. 준비물  isp프로그래머 , avr mcu , gcc , avrdude' 2. 설치 $  sudo apt-get install gcc-avr $  sudo apt-get install avrdude $  sudo apt-get install avr-libc 2. 활용 $  avr-gcc  -mmcu=<mcu>  <input_file> 이 명령어를 입력하면 코드를 컴파일한다. a.out 생성 $  avrdude -p <avr> -c <programmer> -U flash:w:<bin file>