크론탭(crontab)을 활용해서 파이썬 파일이 설정한 스케줄대로 자동 실행되도록 만들어보자!이 글은 정말 간단한 예제를 통해 사용 방법을 익혀보는 것을 목표로 한다.크론탭(crontab)으로 파이썬 파일 실행 자동화 Let's get started!1. 가상 환경 설정가상환경 이름은 .venv로 하는 것이 관례이나, 나는 식별을 위해 .venv_schedule 로 이름지었다.# 1, 가상환경 생성하기# python -m venv [가상환경 이름]python -m venv .venv_schedule# 2. 가상환경 활성화# source [가상환경 이름]/bin/activatesource .venv_schedule/bin/activate2. 실행할 파이썬 파일 생성가상환경 폴더 아래 schedule.py를..
From WebGL 컨텍스트 에러 해결 to 그래픽 가속 설정, CPU와 GPU, 디바이스에 따른 GPU 대응하기!Three.js를 이용하여 간단한 돌다리 건너기 랜덤 게임을 개발중이였고, 문제없이 잘 돌아가고 있었다.그런데 갑자기 아래와 같은 WebGL 관련 에러가 발생했다. 하루종일 로컬 서버를 켜놓고 (아무것도 건드리지 않았는데..갑자기 왜 이런일이..! ㅜㅜ) 구글링을 했고, 검색했던 글 중에는 그래픽 카드의 손상일 수도 있다는 글을 보고 엄청 식겁했다.식은땀+좌절하며 제발 다른 이유이기를 간절히 바라면서 찾아본 결과!다행히 간단한 해결 방법으로 문제를 해결할 수 있었다.ㅎ발생한 에러THREE.WebGLRenderer: A WebGL context could not be created. Reaso..
구성요소설명Scene3D 객체, 조명, 카메라 등을 포함하는 컨테이너. 3D 공간을 나타냄Mesh3D 객체를 나타내며, Geometry(형상)와 Material(재질)로 구성됨Geometry객체의 형태와 구조를 정의(예: 크기, 위치)Material객체의 외관을 결정하는 속성 정의(예: 색상, 텍스처)Camera사용자의 시점을 정의하며, 렌더링될 내용을 결정Light장면에 조명을 추가하여 객체의 가시성과 음영을 조절RendererScene과 Camera를 기반으로 3D 그래픽을 2D 화면에 출력1. Renderer화면을 그리는 역할Renderer 작성방법1 - 동적으로 Canvas 조립하는 방법const renderer = new THREE.WebGLRenderer();renderer.setSize(wi..
위와 같은 파티클을 생성하기 위해서 아래와 같은 순서로 파티클을 생성해보자!1. 랜덤으로 파티클 생성하기2. 별 파티클 이미지 사용하기3. 여러가지 색상 랜덤으로 사용하기 1 . 랜덤으로 파티클 생성하기const geometry = new THREE.BufferGeometry(1, 32); const count = 1000; // 랜덤으로 생성할 파티클 개수 const positions = new Float32Array(count * 3); // 하나의 정점이 가지는 값은 x, y, z이므로 x3을 해줌 for (let i = 0; i 2. 별 파티클 이미지 사용하기 const geometry = new THREE.BufferGeometry(1, 32); const count = 1000; /..
즉 파티클 이란?입자이며, 별,연기, 비, 먼지, 불 등 다양한 효과를 얻는 데 사용할 수 있다.파티클은 Mesh가 아닌 Points를 사용해서 만들어야 한다. MeshStandardMaterial에 wireframe 속성을 true로 주면 아래와 같이 노드로 이루어진 Geometry를 확인할 수 있는데,이러한 노드들을 매우 작은 입자로 표현한 것이 파티클이다. 기본 지오메트리 파티클 생성하기import * as THREE from 'three';import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';// ----- 주제: 기본 Geometry 파티클export default function example() { // Re..
1. 첫번째 시도!초기 코드는 아래와 같았다!배포까지 해서 아이폰 safari에서 테스트를 해보니, imageCapture를 찾을 수 없다는 에러가 계속 났다.문제 원인을 계속 찾아서 시도해봤지만, 그런데 정말 간과하고 있던게 있었다.아이폰 사파리에서는 브라우저 호환이 안되었던거였다..이것도 모르고 시간을 엄청 할애했다 ㅜㅜ 2. 두번째 시도!모바일에서 이용할 수 있도록,react-webcam을 이용해서 만들었다! 먼저 Can I use를 통해서 모바일 대응이 가능한지 확인했다! 설치npm install react-webcam 코드가 한결 간결하고 쉽다!첫번째 시도에서는 canvas를 통해 이미지를 그리다보니 프레임에 그려지는데 좀 시간이 걸렸다.그러나 수정한 코드는 느리지 않았다! 사진 촬영..
Lighthouse의 측정 지표들로 성능을 분석하고, 메인 페이지의 성능을 직접 개선하는 과정을 담아보았다!빌드도구 : Vite 4.2프레임워크 : Vue3 시작하기 앞서, 3가지를 먼저 알고 가자! # 알고가기1. 측정시에는 시크릿모드에서 측정하는 것을 권장한다.크롬 브라우저 플러그인, extension이 있는 경우 성능을 측정하는데 지연이 될 수 있다. 2. Lighthouse의 측정 결과는 시시각각 다를 수 있다.이런저런 시도를 할때마다 결과에 편차가 있어서, 내가 시도한 과정들이 정말 유효한지 헷갈렸었다.아래 이미지를 보면, 실제 같은 날, 같은 코드로 돌린 결과에 이렇게 차이가 있었다. 시시각각 결과에 차이가 있다는 것을 모르고 테스트한다면, 일시적인 결과나 우연에 의존한 결정을 내릴수도 있으니..
돋보기 기능 구현하기!! 귀여운건 크게 볼 수 있도록 돋보기 기능을 구현해보자! 1. CSS 설정! class="target"인 이미지를 감싸는 class="warp"을 만들고 둘 사이를 position absolute-relative 관계로 설정한다. 2. 마우스 hover 시 확대 될 class="photo"이미지를 스크립트로 추가한다. 나는 img 내부에 를 추가했다. 여기서 ref는 DOM에 접근하기 위해 추가한 속성이다. DOM에 접근하는 방법은 2가지가 있다. onMounted 내에서 아래 사용한 것 처럼 getElementByClassName, querySelctor 등등 바닐라 자바스크립트 처럼 접근할 수 있고, ref로 접근할 수도 있다. 나는 연습하기 위해서 2가지 방식으로 모두 접근해..
# 그리디(Greedy) 알고리즘 정의 그리디 기법(Greedy method)은 탐욕적 기법이라고도 한다. 모든 경우를 고려해 보고 가장 좋은 답을 찾는 것이 아니라 '그 순간에 최적'이라고 생각되는 답을 선택한다. 미래를 고려하지 않고, 현재 가장 저렴한 선택 or 현재 가장 가치있는 선택 or 가장 빠른 선택을 하는 것이다. 예를 들어, 아래 그림에서 시작 지점에서 가장 큰 수를 구하는 문제일 경우 가장 좋은 path는 6-128이지만, 그리디 알고리즘을 사용하면 17-23을 서택하게 된다. 이런 결과가 나오는 이유는 그리디 알고리즘은 현재 상황에서 가장 좋은 것을 선택하기에 이런 path가 나온다 # 그리디(Greedy) 조건 그리디 알고리즘은 항상 최적의 해를 찾는 것은 아니다. 현재의 최적 해 ..
그래프 순회는 하나의 정점에서 시작해 그래프의 모든 정점을 한 번씩 방문하는 작업을 말한다. 그래프의 정점들을 순회하는 체계적인 방법에는 깊이 우선 탐색과 너비 우선 탐색이 있다. # 깊이 우선 탐색(DFS: Depth First Search) 시작 정점에서 한 방향으로 계속 가다가 더 이상 갈 수 없으면 가장 가까운 갈림길로 다시 돌아와 다른 방향을 다시 탐색한다. 이것은 이진 트리의 전위순회와 비슷한데, 위 그림처럼 A-B-D-E-C-F의 순서대로 탐색이 진행된다. # 깊이 우선 탐색 진행 방법 시작 정점에서 한 방향으로 갈 수 있는 곳까지 깊이 탐색을 진행하다가, 더 이상 갈 곳이 없으면 가장 최근에 만났던 갈림길 정점으로 되돌아온다. 갈림길로 돌아와서는 가 보지 않은 다른 방향의 간선으로 탐색을 ..