분류 전체보기488 자외선(UV), 자외선 차단제, 선글라스에 대해서 자외선이란? 전자기파에서 그 파장의 길이가 10~400nm 사이에 있는 것을 자외선이라고 하는데 사람이 눈으로 볼 수 있는 가시광선의 영역에서 가장 파장이 짧은 빛이 약 400nm의 보라색이고 이 보라색보다 더 바깥에 있는 빛이라서 자외선이라고 합니다. 10nm보다 파장이 더 짧아지면 X선의 영역이 됩니다. 그래서 자외선은 X선과 가시광선의 영역 사이에 있는 보이지 않는 전자기파를 지칭하는 겁니다. 자외선의 종류와 특징 자외선의 파장의 길이에 따라 그 종류를 더 세분화하여 A, B, C 세 가지로 구분을 하는데요. 각 구간별 특징은 다음과 같습니다. UV-A 400~315nm 파장의 자외선이며 근자외선이라고도 얘기합니다. 자외선 중에서 가장 약하지만 대기에서 잘 흡수되지 않아서 태양이 떠 있는 날이면 언.. 2023. 6. 5. Meta Quest2용 적외선 조명(KKCOBVR i2) - Quest2가 야시경이 되는 마술 배경 Meta Quest2는 VR계에서 가성비로 오랜 시간 동안 인기를 끌고 있는 핫템이죠. 그런데 VR이라는 게 단점이 오래 착용하면 눈이 피곤하기도 하고 안면압박도 있고 게다가 인터페이스가 충분히 자연스럽지 못한 부분들이 있어서 상당히 오래 처박아 두었습니다. 그런데 최근에 Immersed, Meta Quest Remote Desktop이라는 프로그램들을 접하게 되면서 다시 Quest2를 꺼내게 되었습니다. 자체 펌웨어의 개선과도 시너지가 발휘되어 이제 VR을 생산성 업무에도 활용할 수 있겠다 싶은 생각이 들었거든요. 오늘은 여전히 현역으로도 손색없는 Quest2의 활용도를 한층 더 끌어올릴 수 있는 신박한 액세서리의 소개와 사용기입니다. VR 현실적으로 불편한 점이 여러 가지가 있습니다. 그중에서 .. 2023. 5. 11. 다기능 오실로스코프 DSO-TC2 리뷰 소개 저처럼 취미 수준에서 메이커 활동(?)을 하는 사람은 장비에 관해서 딜레마에 종종 빠지게 됩니다. 뭐든 좀 편하게 하려면 장비빨을 세워야 하는데, 반면 취미로 하는데 이런 장비까지는 좀 오버인가? 하는 마음이 서로 상충되는 거죠. 저 같은 경우 오실로스코프가 그런 아이템이었습니다. 어떤 프로젝트든 한 번에 맘먹은 대로 돌아가는 경우는 흔치 않아서 디버깅 단계에서 단자의 신호를 확인해 보고 싶은 경우가 종종 있습니다. 그런데 오실로스코프는 아무리 허접한 거라도 최소 몇만 원씩 하는 장비라서 어떤 걸 사야 하나 고민만 해 왔던 거죠. 싼 건 디자인이 너무 안 이쁘고, 그렇다고 좀 좋아 보이는 건 10만 원을 훌쩍 넘어갑니다. 그렇게 이 없이 잇몸으로만 버텨오다가 눈에 쏙 들어오는 제품을 발견했습니다. .. 2023. 4. 16. ESPHome - OSError: [Errno 105] No buffer space available 아주 오래전에 ESPHome에서 발생한 에러와 그 해결방법에 대한 기록입니다. 아무 문제 없이 잘 사용하고 있었는데 OS업데이트가 변수인지, 언제부터인가 갑자기 ESPHome 노드들의 원격 로그 보기에서 에러가 발생했습니다. OSError: [Errno 105] No buffer space available 에러번호 105에 버퍼(?)가 부족?? 다행히 간단한 해결방법이 있었습니다. 해결방밥은 "/etc/sysctl.conf" 파일에 다음 설정을 추가해 줍니다. net.ipv4.igmp_max_memberships=50 파일 수정 후 적용하기 위해서는 아래와 같이 "sysctl -p" 명령을 실행한다. 조치를 마치고 나서 다시 ESPHome 로그를 열어보면 문제없이 로그를 잘 확인할 수 있습니다. 끝! 2023. 4. 11. SM-T530 삼성 갤럭시 탭4 10.1 배터리 교체 배경 오늘은 얼마 전에 커스텀펌으로 업그레이드를 해서 새로운 인생을 시작한 삼성 갤럭시 탭 4 SM-T530의 배터리를 교체하는 작업입니다. 사촌 언니 오빠로부터 물려받아서 사용한 지 벌써 4~5년은 된 거 같은데, 전 주인의 사용기간까지 모두 고려한다면 실 사용기간은 거의 10년이 다 되어가는 골동품입니다. 들고 다니면서 배터리를 주로 사용하는 사용 패턴이 아니다 보니 배터리 성능이 많이 떨어졌음에도 어떻게 잘 사용을 해왔었는데요. 그런데 최근에는 사용을 하지 않는데도 대기 중에 배터리 부족으로 기기가 꺼져버리는 상황까지 왔습니다. 배터리가 에너지를 저장하는 그런 본질적인 기능을 전~혀 못하는 거죠. 그래서 이제 노인학대 그만하고 보내줘야 하나 했는데, 혹시나 해서 찾아보니 교체 배처리를 너무나도 합리.. 2023. 4. 3. 삼성 갤럭시 탭4 10.1 SM-T530 안드로이드 9(LineageOS 16) 업그레이드 배경 딸아이 유튜브 머신으로 겨우 목숨만 부지하고 있는 갤럭시 탭 4 SM-T530 모델의 생명연장 프로젝트입니다. 원래 친척이 사용하던 웅진씽크빅용 태블릿이었는데 본분을 다하고 폐기를 기다리는 신세였으나 우리 딸이 너무 어려서 이 정도면 유튜브 보여주는 용도로는 충분하겠다 싶어서 데려왔습니다. 그런데 그렇게 새 인생을 시작하고도 5년이 더 지나서 이제는 정말 한계에 온 것 같습니다. 순정 상태에서 안드로이드 버전은 4.4.2입니다. 이 안드로이드로는 유튜브 키즈는 사용가능한데 그냥 유튜브 앱은 실행/설치 모두 안되고, 게다가 원래 깔려있던 기본 앱들도 일부 업데이트가 불가능한 지경에 이르렀습니다. 그런데 커스텀 펌웨어를 통해서 안드로이 10, 11까지도 설치가능하고 그렇게 되면 또 5년 정도는 거뜬히 .. 2023. 3. 24. 전역변수 없이 속성으로 자식 컴포넌트에 데이터 전달하기 전역변수를 사용하지 않고 컴포넌트 속성으로 데이터를 자식 컴포넌트로 전달하는 방법입니다. 다음과 같은 예가 있습니다. 드롭다운에서 선택한 값에 따라서 하위 컴포넌트가 변경됩니다. 이런 기능을 구현하는 방법은 가장 먼저 떠오르는 것이 드롭다운의 선택값을 저장하는 변수를 useState로 정의하고 이 값의 변화에 따라 랜더링 되는 컴포넌트를 구별해서 작성하는 겁니다. import { useState } from "react"; const Result = ({ type }) => { return {type}; }; export default function App() { const [state, setState] = useState(""); const Type = () => { return ( 선택: setS.. 2023. 2. 27. JavaScript, 파일에 데이터(문자열, 바이너리) 저장하기 데이터를 로컬디스크에 파일로 저장하는 방법을 알아보겠습니다. 지난 포스팅(JavaScript, 파일에서 데이터(문자열, 바이너리) 불러오기)에서는 로컬디스크에 저장된 데이터를 가져와서 JS에서 다루는 방법에 대해서 공부했었는데 오늘은 그 반대입니다. JS에서 직접 파일에 저장하는데 문자열을 저장하는 방법 및 바이너리 데이터로 저장하는 방법입니다. 파일에 문자열 저장하기 먼저 문자열을 저장해 보겠습니다. 다음과 같이 Textarea에 문자를 입력하고 하단에 버튼을 누르면 입력된 문자가 파일로 입력되는 예제입니다. 로컬 저장장치에 접근하기 위해서 윈도 파일시스템을 다루는 showSaveFilePicker(), createWritable() 두 가지 메서드를 사용했습니다. export default funct.. 2023. 2. 21. github에서 비밀번호 숨기는 팁(--assume-unchanged) github에 코드를 올릴 때 비밀번호 등 개인정보를 숨기고 업로드하는 팁입니다. 와이파이 모듈을 사용한 아두이노 프로젝트나 API를 사용하는 웹 프로젝트 등을 하다 보면 비밀번호나 API 토큰 등을 하드코딩 할 때가 있습니다. 그런데 이런 정보를 숨기지 않고 github에 그대로 푸시하면 내 개인정보가 만천하에 노출되게 됩니다. 그래서 저는 그동안 코드 푸시하기 전에 비민번호를 지우거나 다른 임의의 문자로 교체한 뒤에 업로드하기도 했는데, 그런데 이렇게 해 놓으면 다음 작업을 위해서는 또다시 원래 비번으로 돌려야 하고 푸시할 때는 또다시 임의 문자로 교체해야 하고... 그러다가 가끔 까먹고 그냥 올려서 비밀번호가 올라가 버리기도 하고. 정말 환장할 노릇입니다. 컴파일러에서 환경변수를 별도로 지원하는 경.. 2023. 2. 15. JavaScript, 파일에서 데이터(문자열, 바이너리) 불러오기 파일에서 데이터를 불러오는 방법입니다. 한번 해보면 어렵지 않은데 처음에는 비동기에 대한 개념도 부족해서 한참 헤맸던 부분이라서 정리해 봅니다. 바로 코드부터 보겠습니다. 파일에서 문자열 읽기 파일에서 문자열을 읽어오는 코드입니다. import { useState } from "react"; export default function App() { const [data, setData] = useState([]); const readFileData = (e) => { const reader = new FileReader(); try { reader.onload = (result) => { setData(result.target.result); }; reader.readAsText(e.target.file.. 2023. 2. 10. JavaScript에서 바이너리 데이터 처리 - (ArrayBuffer, TypedArray) 고성능의 데이터 처리를 위해서는 데이터를 바이너리로 다루어야 한다고 합니다. 바이너리란 말 그대로 컴퓨터가 이해하는 이진수라는 건데 코딩을 하다 보면 자주 접하는 개념인데 기초를 좀 다져야 할 필요가 있을 것 같아서 정리해 봤습니다. ArrayBuffer JS에서 바이너리를 다루는 기본적인 객체는 "ArrayBuffer"입니다. ArrayBuffer는 메모리상의 고정된 영역을 참조하는 객체입니다. const buf = new ArrayBuffer(32); 위와 같은 표현으로 객체를 생성할 수 있는데요. 'buf' 변수는 메모리상에 32바이트 크기로 할당된 메모리 영역을 가리키게 됩니다. 할당된 메모리는 모두 "0"으로 초기화됩니다. "ArrayBuffer"는 그냥 메모리의 어떤 영역이며 그 안에는 0과 .. 2023. 2. 5. ESPHome 커스텀 컴포넌트 추가해서 Home Assistant에 설치 ESPHome 커스텀 컴포넌트가 필요했던 이유 ESPHome 처음 접했을 때가 한 3년 전인가 그랬던 거 같은데 그때도 참 대단한 프로젝트라고 생각을 했었습니다. 그런데 쉬지 않고 업데이트가 거듭되면서 시간이 지난 지금도 개선되는 내용을 보면서 놀라움을 금치 못하고 있습니다. 지원되는 컴포넌트만 해도 400가지가 넘고 사용성도 좋아져서 범용 솔루션이라고 할 수 있을 것 같습니다. ESPHome에 대한 경험이 많지는 않지만 그중에서도 유용하게 사용하는 프로젝트가 바로 ESP8266 모듈에 RS485 변환모듈을 연결해서 아파트 월패드 컨트롤러로 사용하는 건데요. 한동안 뭣도 모르면서 따라 하느라 고생 좀 했던 거라서 블로그에도 시리즈로 3편이나 포스팅을 했었더랬죠. (Home Assistant, 더샵 아파트.. 2023. 1. 29. UART 시리얼 통신의 기본 아두이노에서 여러 기기들 간의 통신에 시리얼 통신(Serial Communication)을 많이 사용합니다. 저도 시리얼(Serial or UART)로 정보를 주고받는 기기들을 종종 사용하긴 하지만 대부분의 경우 라이브러리를 사용하기 때문에 깊이 있는 이해가 부족했습니다. 그러다 보니 문제가 생기면 어디서부터 접근해야 할지 막막한 경우가 생기더군요. 저도 이번에 시리얼 포트로 연속적으로 수신되는 데이터를 처리해야 하는데 생각처럼 잘 되지 않았고 그래서 시리얼에 대해서 되도록이면 기초부터 공부를 해야 할 필요를 느껴서 정리를 좀 했습니다. 시리얼 통신은 직렬 통신 시리얼(Serial) 통신이라는 건 전달해야 할 데이터를 직렬로 전달하는 방법을 지칭하는데요. 직렬이라는 건 데이터를 순서대로 차례차례 주고받는.. 2023. 1. 25. JS를 배우고 있다면 꼭 알아야 "모던 JavaScript 튜토리얼" 코딩 공부 할 때 웬만해선 인터넷에 공개된 자료들이 많아서 책을 사지 않고도 공부할 수 있는데, 특히나 JavaScript같이 인기 있는 언어는 더 그렇죠. 저도 JS 공부 처음 시작할 때는 무료 온라인 코딩 코스부터 수강하고 시작했고 그 후로는 막히는 게 생기면 모질라 재단의 MDN web docs를 검색해서 답을 찾고 있습니다. 그런데 최근에 "모던 JavaScript 튜토리얼(https://ko.javascript.info/)"이라는 프로젝트를 알게 되었는데 JS 공부한다면 필수적으로 알고 있으면 좋을만한 사이트라고 생각해서 소개합니다. 모던 JavaScript 튜토리얼 ko.javascript.info 문법이나 예제 등을 검색하다 보면 자주는 아니지만 종종 "The Modern JavaScript.. 2023. 1. 19. SSH Tunneling으로 방화벽 우회하기 방화벽 때문에 접근을 할 수 없는 사이트가 있을 때 살짝 우회해서 사용할 수 있는 팁입니다. 만약, 기업이나 기관 등의 네트워크에서 사용할 경우 정보보안 정책을 위반할 수 있다는 점은 유의하셔야 합니다. SSH 터널링(Tunneling)이란 SSH Tunneling이라는 것은 다른 말로 SSH Port Forwarding 이라고도 하는데요. SSH가 연결되는 암호화 채널을 이용해서 여타 다른 연결을 우회하는 방법입니다. 그래서 말 그대로 마치 막혀있는 벽에 터널을 뚫는듯한 효과가 있는 거죠. 예를 들어 방화벽에서 네이버 서버로 접속하는 "https://www.naver.com" 도메인을 막고 있다거나 아니면 특정 서비스 포트가 막혀 있을 때 통신 채널을 강제로 SSH 터널을 통과하도록 하는 겁니다. 이렇.. 2023. 1. 16. 이전 1 2 3 4 5 ··· 33 다음