본문 바로가기

전체 글109

[Python] 영수증 프린터 가지고 놀기 당근에서 구한 오늘의 장난감입니다. 영수증 프린터예요. 일단 기본적으로 프린터라서, PC에 연결해서 프린트가 됩니다. 친구들한테 텍스트로 덕담하기 완전 가능. 아무튼.. 그냥 프린트만 하면 재미없으니까 뭔가 해보기 위해 파이썬을 켭니다. PySide6, PIL, OpenCV를 활용해서 웹캠으로 사진을 찍은 후, 영수증으로 뽑아볼 거예요. import sys import cv2 import numpy as np import time from default_frame import image_frame from print_file import print_file from PySide6.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QVBoxLayo.. 2023. 11. 13.
[발표] 해커톤 200% 즐기기: 해커톤이 처음인 사람들을 위한 진입장벽 낮추기 HTML 삽입미리보기할 수 없는 소스고려대학교 중앙 컴퓨터동아리 KUCC에서 세미나를 진행했습니다. 조금 부끄럽군요.. 블로그에는 발표에서 어떤 이야기를 했는지 텍스트로 간단하게 남겨보려고 합니다..^♡^해커톤이란 무엇인가?해커톤이 어떤 식으로 진행되는지에 대한 간단한 설명입니다. 팀 빌딩 및 주제 공개 ▶ 아이디에이션 ▶ 개발 ▶ (중간 스피치) ▶ 개발 ▶ (멘토링) ▶ 발표 ▶ 시상으로 진행되는데, 해커톤마다 당연히 차이는 있겠지만 큰 틀은 비슷하게 진행돼요.발표 전에 설문조사를 받고 간단히 정리해보았는데요, 해커톤에 참여하기 꺼려지는 이유 중 가장 큰 것이 '실력이 부족하다고 생각해서', '다른 팀원에게 폐를 끼칠까봐'였습니다. '진입장벽이 높아서'와 함께 결국 본인의 실력이 부족한 것 같다는 이.. 2023. 10. 29.
[리뷰] 현실에서는 학생인 내가 SW 교육봉사단에서는 선생님? 고려대학교 SW교육봉사단에서 진행하는 에 보조강사로 참여했습니다. SW교육봉사단은 SW중심대학에서 진행하는 프로그램으로, 찾아가는 캠프나 찾아오는 캠프, 모두의 캠프 등을 개최하고 있어요. 찾아가는 캠프는, 도서벽지 지역의 학교에 직접 찾아가서 진행하는 소프트웨어 교육 캠프입니다. 이번 캠프는 강화도에서 진행되었고, 저는 강화고등학교에서 강의를 진행하게 되었어요. 이런 강의에 강사로 참여하는 것이 처음이다 보니 걱정도 많고, 어떻게 진행해야 할지 감도 잘 안 왔는데요. 가치확산팀 선생님들이 수업 자료에 대해 피드백도 주시고, 수업에 자율권도 주셔서 많이 도움받았어요. 제가 강의를 맡은 부분은 파이썬 기초였습니다. 수업 자료는 기존 PPT와 파이썬 기초 책들을 활용해서 제작하였고, 강의 참고자료도 마크다운.. 2023. 10. 24.
[리뷰] 카카오브레인 패스파인더 2기 회고 '카카오브레인 패스파인더'는 카카오브레인에서 진행한 AI 관련 인턴십 프로그램입니다. 이번 2기에서는 몰입, 성장, 노마드 등의 키워드 하에서 서비스를 기획하고 개발하는 경험을 할 수 있었습니다. '자사 언어 모델의 새로운 활용 기회를 모색하면서 참가자에게 서비스 및 제품 개발에 참여할 수 있는 기회를 제공해 인재들의 성장을 돕겠다'는 카카오브레인의 목표에 맞게, LLM을 활용한 제품을 직접 기획부터 개발까지 해내는 과제를 받았습니다. 모집 모집은 모바일 앱 개발, 웹 프론트엔드 개발, 서비스 백엔드 개발의 세 분야로 나누어서 진행되었습니다. (저는 이 프로그램에 참여하면서 굳이 분야를 나누어서 뽑지 않아도 될 것 같다는 생각을 했어요.) [모바일 앱 개발] - 모바일 앱개발에 관심이 많으신분 - And.. 2023. 10. 4.
[인증] JWT로 로그인 인증 2. Access Token과 Refresh Token 사용하기 (Koa, next-auth) 3년 전 글에서 추가적으로, 보안 문제 개선을 위해 Access Token과 Refresh Token을 사용하는 방법을 백엔드(Koa)와 프론트엔드(Next, next-auth)에서 다루어보려고 합니다. 우선 Access Token과 Refresh Token의 개념은 다음과 같습니다. Access Token: 인증이 필요한 요청마다, 요청에 포함하여 인증을 위해 사용하는 토큰 Refresh Token: Access Token이 만료되면, 새로운 Access Token 발급을 위해 사용하는 토큰 토큰을 두 가지로 나누어 사용하는 이유는, 이미 널리 알려져 있지만 간단히 이야기하면 다음과 같습니다. Access Token이 탈취될 경우를 대비해 Access Token의 유효기간을 짧게 설정합니다. 이러면 A.. 2023. 6. 9.
[Koa] Koa에서 apidoc 사용하기 Swagger보다 가볍고, 설치가 쉬운 apidoc을 Koa에서 사용해보겠습니다. 직접 API와 응답을 기재해야 하기 때문에, 작은 프로젝트에서 적합할 것으로 생각됩니다. npm install apidoc -g 우선 전역으로 apidoc을 설치해준 후, 프로젝트 루트 디렉토리에 apidoc.json이라는 설정 파일을 만들어 다음 내용을 작성해줍니다. { "name": "이름", "version": "1.0.0", "description": "페이지 설명", "title": "페이지 제목", "url": "http://localhost:4000/apidoc" } 그 후 apidoc이 읽어올 파일에 /** * @api {get} /api/user/:id Request User by ID * * @apiVer.. 2023. 6. 5.
[Network] HTTP에 대해서 HTTP란? 웹 상에서 데이터를 교환하기 위해 사용되는 프로토콜로, 웹 브라우저와 웹 서버 간의 통신에 이용됩니다. 클라이언트가 서버에 요청을 보내고 서버가 그에 대한 응답을 제공하는 방식으로 동작합니다. GET: 리소스의 조회를 요청합니다. 주로 웹 페이지나 이미지 등의 데이터를 가져오는 데 사용됩니다. POST: 서버에 데이터를 제출하거나 처리를 요청합니다. 주로 폼 데이터의 전송이나 파일 업로드 등에 사용된다. 요청에 body를 포함할 수 있습니다. PUT: 리소스의 교체를 요청합니다. PATCH: 리소스의 수정을 요청합니다. DELETE: 리소스의 삭제를 요청합니다. HEAD: 메세지 헤더(문서 정보)를 요청하는 메서드입니다. GET과 유사한 방식이지만, 실제 문서를 요청하는 것이 아니라, 문서 .. 2023. 6. 1.
[리뷰] 제3회 KUCC 게임잼 참가 후기 게임 개발을 좋아하는 웹 개발자로써, 이번에 벌써 세 번째 동아리 게임잼에 웹으로 참가하였습니다. 이번 게임잼 주제는 가정, 스승, 어린이 (5월이니까요.) 중 랜덤이었고, 저희 조는 '스승'이 선택되었습니다. 그래서 '스승'이라는 주제로 이번에 개발한 게임은 난 선생이고 넌 학생이야! 입니다. 난 선생이고 넌 학생이야! sensei-nu.vercel.app 사실 게임잼 참가 전날에 웹으로 만들었을 때 더 효율적으로 개발할 수 있는 게임이 뭐가 있을까 생각해보다가, 포인트 앤 클릭 방식으로 진행되는 육성 시뮬레이션 게임을 고민해보았습니다. 아무래도 배경 지식이 있는 분야의 게임을 만들고 싶어서, 3년동안 학생에게 공부를 시키고 내신이나 수능 성적으로 대학을 보내는 유머성이 가미된 게임을 만들고 싶다는 생.. 2023. 5. 29.
[알고리즘] 모스 알고리즘 모스 알고리즘(Mo's algorithm)은 오프라인(쿼리의 순서가 상관 없는) 구간 쿼리를 처리할 때 유용한 알고리즘으로, 간단히 소개하면 길이 N인 구간을 √N개 구간으로 쪼개고, 미리 쿼리들을 정렬해서 O(n√n)의 시간복잡도로 쿼리를 처리하는 알고리즘입니다. 우선 길이 N인 구간을 각 √N개의 원소를 가진 버킷(bucket)으로 쪼갭니다. 각 쿼리들은 시작점이 더 앞쪽의 버킷에 속하고, 끝점이 더 앞쪽에 있는 쿼리부터 처리해주면 됩니다. 간단히 쿼리의 정렬 함수를 수도코드로 표기하면 이렇게 될 것입니다. bool cmp(query a, query b) { if (a.start/sqrt(n) < b.start/sqrt(n)) return true; else if (a.start/sqrt(n) == .. 2023. 5. 18.
[자료구조] 트라이(Trie) 트라이(Trie)는 문자열을 저장하고 빠르게 탐색하기 위해 사용되는 트리 형태의 자료구조입니다. 각 노드는 문자를 나타내며, 문자열의 접두사를 공통으로 가지는 경로를 형성합니다. 구현 저는 다음과 같이 구현하였습니다. #include using namespace std; typedef struct node { char c = '\0'; bool is_word; vector children; }; struct Trie { node root; node *_insert(node *rt, const char *s) { if (s[0] == '\0') { rt->is_word = true; return rt; } for (node *child : rt->children) { if (child->c == s[0]).. 2023. 5. 18.
[리뷰] 제1회 SKYCC 연합 해커톤: 페어링 후기 고려대학교, 서울대학교, 연세대학교의 컴퓨터 동아리들이 연합하여 주최한 제1회 SKYCC 해커톤. 동아리에서 모집글을 보고 개인참가(팀 랜덤배정)로 지원했습니다. 대회 1주일 전에 공개된 주제는 🤝. 연합과 화합을 상징하는 악수 이모티콘인데, 창의성을 제한하지 않는 선에서 SKYCC: Pairing의 개최 취지를 보일 수 있어 선정되었다고 합니다. 랜덤으로 구성된 팀도 발표되었는데, 저희 팀은 최초에는 기획 1, 앱 개발자 1, 웹 개발자 1, 기타 1로 구성되어있었는데 이래저래 팀원 변동이 생겨 최종적으로는 앱 개발자 1, 웹 개발자 1, 서버 개발자 1, 기타 → 기획 1, 총 4명으로 구성되었습니다. 팀명은 chatGPT한테 여러 키워드(호랑이, 화합, 개발, 프로그래밍, 해커톤 등)를 주고 만들어.. 2023. 5. 17.
[BOJ] 1629. 곱셈 https://www.acmicpc.net/problem/1629 1629번: 곱셈 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. www.acmicpc.net 간단하게, A의 B제곱을 구하는 문제입니다. B의 값이 매우 클 수 있으므로, DP를 이용합니다. A의 n제곱을 모두 저장하여 사용하기에는, 계산값을 저장하는 배열의 크기가 2,147,483,647이 될 수는 없으므로 다른 방법을 생각해봅니다. B를 2진수로 바꾸어서, 예를 들어 29라면 11101(2)를 생각해봅니다. A29 = A16*A8*A4*A1로 표현할 수 있고, 이는 다시 A24*A23*A22*A20으로 생각할 수 있습니다. 함수 func(num)은 .. 2023. 4. 30.