본문 바로가기

분류 전체보기53

var, const, let var: 블록 스코프 {} 밖에서도 유효함. const: 블록 스코프 {} 밖에서는 유효하지 않음. 하지만 function 스코프 function a(){} 밖으로는 var, const 모두 유효하지 않다. 따라서 var은 함수 스코프를 따르고, const는 블록 스코프를 따른다고 말한다. const에는 =를 한번만 쓸 수 있다. 따라서 const a=3; 으로 초기화하고 a= '5'; 등으로 값을 바꾸려고 하면 에러가 난다. 하지만 const에 객체를 넣은 경우에는 값 변경이 가능하다. 예를 들어, const b = { name: 'hhk' }; b.name = 'hkhkhk'; 와 같이 const 내의 객체의 값을 변경하는 것이 가능하다. js에서는 const를 처음 정의할 때 =를 무조건 딱 한 번.. 2023. 1. 24.
[Backend] 서버로서의 노드 서버로서의 노드 서버: 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램 클라이언트: 서버에 요청을 보내는 주체(브라우저, 데스크탑 프로그램, 모바일 앱, 다른 서버에 요청을 보내는 서버) 예시 브라우저(클라이언트, 요청)가 웹사이트(서버, 응답)에 접속 핸드폰(클라이언트)을 통해 앱스토어(서버)에서 앱 다운로드 노드 != 서버 But, 노드는 서버를 구성할 수 있게 하는 모듈(4장에서 설명)을 제공한다. cf) 노드 설치 후 버전 확인하는 방법 //node, npm 버전 node -v npm -v //npm 업그레이드 하기 i -g npm 2023. 1. 6.
[Backend] Node.js란? 공식 홈페이지의 설명 Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임이다. 노드 == 서버인가? 서버의 역할도 수행할 수 있는 "런타임"이다. 노드는 자바스크립트(언어)로 작성한 코드를 실행해 서버를 만드는 역할을 한다. 서버 실행을 위해 필요한 http/https/http2 모듈을 제공한다. 노드는 자바스크립트의 런타임이다. 런타임: 특정 언어로 만든 프로그램을 실행할 수 있게 해주는 가상 머신의 상태 노드는 자바스크립트로 만든 프로그램(서버이든 게임이든..)을 실행할 수 있게 해줌 다른 런타임으로는 웹 브라우저(크롬, 엣지, 사파리, 파이어폭스 등)가 있음 노드 이전에도 자바스크립트 런타임을 만들기 위한 많은 시도가 있었으나, 엔진 속도 문제로 실패함 노드는 single t.. 2023. 1. 6.
[Colab] 코랩과 구글 드라이브 연동하기 Google Colab으로 프로젝트를 진행할 때, 로컬 환경에 데이터를 저장하고 불러오는 대신 구글 드라이브에 존재하는 데이터를 Colab에 가져다 쓰고 싶은 경우가 있습니다. 이런 경우 데이터를 코랩에 올리는 행위를 mount한다고 부르는데, 코드 단 두 줄을 사용해 매우 간단히 진행할 수 있습니다. 다음은 사용자의 구글 드라이브를 코랩 내 /content/drive에 mount하는 코드입니다: from google.colab import drive drive.mount('/content/drive') 1. 코랩에서 위 코드 블럭을 실행하면 다음과 같은 팝업이 뜹니다. 'Google Drive에 연결' 버튼을 눌러서 Colab이 Google Drive에 엑세스하는 것을 허용합니다. 2. 그러면 다음과 .. 2023. 1. 2.
Sorting Algorithm [Selection Sort] Idea 왼쪽과 오른쪽 2개의 리스트 생성한 후, 초기 상태에서 모든 숫자를 오른쪽에 넣고, 오른쪽에서 가장 작은 숫자를 왼쪽으로 옮긴다. 이 과정을 오른쪽 리스트가 공백이 될 때까지 반복한다. 하지만 이런 방식으로 구현하면 정렬하려는 리스트와 크기가 같은 리스트를 하나 더 만들어줘야 하므로 메모리가 소비된다. 따라서 추가적인 리스트를 생성하지 않고 정렬하는 방법을 선택하도록 하자. 입력 배열에서 최솟값을 발견한 다음, 이 최솟값을 배열의 첫번째 원소와 교환(swap)한다. 이 절차를 (정렬하고자하는 숫자 개수 - 1)번 반복하면 숫자를 정렬할 수 있다. Psuedo Code selection_sort(A, n); //A는 정렬하고자 하는 리스트, n은 원소의 개수 for i 2022. 12. 11.
[Lecture 12] Joystick - JoyStick JoyStick의 input은 아날로그 시그널이므로 이를 컴퓨터가 이해할 수 있도록 디지털 시그널로 바꿔줘야 한다. ADC(Analog-to-Digital Converters)는 아날로그 시그널로 들어오는 voltage 값을 디지털(bit sequence)로 바꿔준다. 연속적인 analog값을 일정 주기로 sampling해서 디지털로 변환할 수 있다. 이때 sampling의 주기가 짧을수록 더 정교한(원래 아날로그 값과 비슷한) 데이터를 표현할 수 있다. sampling의 주기에 따라 같은 아날로그 시그널도 서로 다른 여러 개의 디지털 시그널로 표현될 수 있다. ADC에 사용 가능한 bit 수에 따라서도 디지털 시그널의 정교함이 달라진다. 0-10 사이의 값을 가지는 아날로그 시그널을.. 2022. 12. 6.
[Lab 10] //Exercise 7 //Goal: Write a program that turns on P2 RED LED at the initial state. //When the S1 button is pressed, turn P2 GREEN LED, and when the S2 button is pressed, //turn BLUE LED #include "msp.h" void PORT1_IRQHandler(void) { //S1 Button if (P1->IFG & BIT1) { P2->OUT = 0x02; //change output color to green P1->IFG &= ~BIT1; //reset: P1의 BIT1번을 disable 하면 interrupt signal이 clear되면서 해당 코드가 .. 2022. 12. 5.
[Lecture 11] LCD - LCD 한 픽셀의 색을 표현하기 위해서는 R,G,B 각각 8bit씩으로 이루어진 총 24bit의 sequence를 사용한다. 그래서 당연하게도 R,G,B 각각에 쓰이는 bit 수를 늘리면 표현할 수 있는 색상의 범위가 넓어진다. 그치만 다채로운 색상을 표현하기 위해서는 소프트웨어 상에서 bit를 늘림과 함께 디스플레이 상에서 그만큼 다양한 색이 표현가능한 하드웨어를 사용해야 한다. 그렇지 않으면 아무리 다양한 색을 출력하는 코드를 작성해도 하드웨어적으로 표현되지 않게 된다. - 보통 LCD와 같이 복잡한 디바이스를 사용하는 경우에는 코드에 initialization, graphic library, driver 등에 대한 설정이 필요하다. 레퍼런스 메뉴얼이 주어지는 경우 이를 따라서 구현하면 된다. 다.. 2022. 12. 5.
[2.6] MIPS Instruction Set Architecture VI - 언어와 MIPS 어셈블리언어 C언어가 MIPS 어셈블리언어로 어떻게 변환되는지 알아본다. 컴파일러에 의해 고급 언어로 작성된 C코드가 MIPS의 어셈블리언어로 바뀐다. 예전에는 어셈블리언어로 프로그램을 작성하는 경우도 있었다. 운영체제와 관련된 작업 중 속도가 중요한 경우는 그렇게 했다. 하지만 어셈블리의 비효율성 등을 극복하기 위해 고급언어인 C언어를 만들어낸 것이다. 이제 C언어를 어셈블리언어로 바꾸는 몇 가지 예시에 대해 알아보자. 배열의 경우 시작 위치만을 저장하고, 이후 원하는 배열의 원소에 접근하기 위해 인덱스 값만큼 떨어진 주소를 찾아간다. 정수의 크기는 4byte이므로 어셈블리어의 첫 두 줄에서 i*4를 진행한다. 이때, 곱셈보다 덧셈의 처리 속도가 훨씬 빠르므로 덧셈 두 번을 한다. 2022. 10. 13.