성공적...인지는 모르겠지만 나름 안착해서 매주 실습, 그리고 매달 과제를 github classroom 통해서 자동채점 하고 있답니다. 출제 과정이 너무 복잡한게 큰 단점인데, Kaggle에서 수업용 competition을 만들 수 있는것처럼, 온라인저지 사이트에서 수업용 문제 그룹을 관리 할 수 있게되면 좋을것 같아요. 비슷한건 있다고 알고 있긴 하지만... Stepik이 이걸 참 잘해줬는데, 채점 결과는 유료고, 러시아인이 아니면 결제가 무척 힘들더라구요.

제이미
@theeluwin@hackers.pub · 67 following · 58 followers
스콜라아이돌교수버튜버
멋진 제안을 하나 하지. 너는 버튜버가 되지 않겠나?
GitHub Classroom을 사용해서 온라인 저지 시스템을 구축해본 후기입니다.
https://theeluwin.github.io/article/online-judge-with-github-classroom/
실제로 사용하고 싶었으나, 제 결론은... 안쓰는쪽으로 났습니다. 이유는 결국, 문제 출제하는 UI/UX가 좋지 않다는 것입니다. 제가 고생을 덜 해야만 하니까요(,,,,) 암튼 GitHub Classroom이 문서도 제대로 안되어있기도 하고, 기능이 아직 좀 오락가락 합니다. 없는 기능도 너무 많구요. 제 검토를 참고해주십시오, , ,
GitHub Classroom을 사용해서 온라인 저지 시스템을 구축해본 후기입니다.
https://theeluwin.github.io/article/online-judge-with-github-classroom/
실제로 사용하고 싶었으나, 제 결론은... 안쓰는쪽으로 났습니다. 이유는 결국, 문제 출제하는 UI/UX가 좋지 않다는 것입니다. 제가 고생을 덜 해야만 하니까요(,,,,) 암튼 GitHub Classroom이 문서도 제대로 안되어있기도 하고, 기능이 아직 좀 오락가락 합니다. 없는 기능도 너무 많구요. 제 검토를 참고해주십시오, , ,
CV 겸 개인 홈페이지였던 사이트를 아예 커스텀 블로그로 바꾸면서... 어제 슬쩍 홍보를 올렸는데요
Pelican으로 만들고 GitHub Pages로 배포를 했는데, 급하게 수정할게 있어서 추가 commit을 했더니 갑자기 README를 기반으로 한 디폴트 페이지로 바뀌었습니다;;;
그러니까 기존 배포 A, 리뉴얼 배포 B, hot-fix 배포 C 이렇게 세개가 있으면, C를 했는데 실패해서 (실패 원인: GitHub Action이 새벽에 일시적으로 불안정했음) 당연히 B가 나올줄 알았는데, A도 B도 아닌 README 기반의 만든적도 없는 배포 X가 나왔습니다... 왜였을까요...? Action 사용하기 이전 시절의 (Jekyll 등을 지원하던) GitHub Pages 빌드 방식이 남아있어서 뭔가 꼬였는지...
암튼 블로그 많이 놀러와주세요,,, 게임 추천으로 시작합니다 (포스트도 아니고 인덱스 페이지에서)
@jafffyJaewon Choi 방금 따끈따끈하게 교수님이 되신
@theeluwin제이미 선생님의 의견이 궁금해지네요(?)
@kodingwarriorJaeyeol Lee
@jafffyJaewon Choi 반갑습니다. 마침 저는 DB 수업을 위해서 DBMS를 페이지기반으로 파일시스템을 다루는 모듈부터 SQL parsing까지, 그야말로 모든 레이어를 전부 구현시키는 과제를 만들기 위해 DBMS를 직접 하나 만들고 있습니다... 무척 공감이 됩니다.
Python 기반의 교육용 DBMS인 BlueBase라는걸 만들고 있습니다. 언젠가... 언젠가 공개하겠습니다. 제 과목 수강생이 아니더라도 누구나 해볼 수 있게, GitHub Classroom 기능을 이용해볼 예정입니다.
좋은 질문 감사합니다. 실험 결과 4096의 배수인게 유의미한것 같습니다.
DBMS 같은 데에서 파일을 관리 할 때엔 항상 4096 바이트 단위의 페이지 형태로 관리합니다. 왜그럴까요? 여러가지 이유가 있는데, 보통은 OS도 4096 바이트 단위로 파일 시스템을 관리하기 때문입니다. 그래서 캐시 같은 OS의 여러 가속 장치들의 도움을 받을 수 있죠.
근데 정말로 그럴까요?
그게 궁금해서 직접 한번 페이지 파일 매니저를 구현해서 실험해봤습니다. 통계적으로 유의하게 빠르네요.
TIL: 빈 파일을 만들어서 열고, seek로 적당히 건너뛴 다음 거기서부터 write를 하면, 건너 뛴 부분은 전부 0으로 알아서 채워주고 파일 크기도 자연스럽게 늘어난다.
이걸 왜 제가 몰랐는지 설명해주실분
RedBase라고 혹시 아시나요. Stanford에서 교육용으로 학생들이 직접 만들게끔 하는 DBMS인데요, 이걸 Python 버전으로 만들어보고 있습니다. 이름하야 BlueBase. 완성되면 과제용 구현부만 비워둔채로 공유할게요. 많은 기대 바람(?)
논문요약기 리팩토링을 좀 했습니다 https://github.com/theeluwin/summarxiv 오픈소스지만 세팅하기 귀찮으신 분들을 위해서 제가 연1만원에 매일 아침 메일로 보내드립니다 https://forms.gle/xiLPNyEqsLEH5BLH9 많관부
지난 한달간 열심히 개발한 실시간 퀴즈 사이트입니다. django, django drf, jwt 기반 인증, websocket, ticket으로 받아오는 jwt websocket 인증, celery, 등을 모두 사용한 예시이기도 합니다. 구경와주세요~
django에서 test를 할 때, async/await 처리를 성공적(?)으로 하려면 TransactionTestCase를 사용해야하는데 이러면 classmethod인 setUpTestData를 사용하지 못합니다. 그래서 매 테스트 함수마다 데이터를 넣어주는 setUp으로 도로 바꿔야했고... 2분 걸리던 테스트를 최적화해서 10초로 줄여놨다가 다시 30초로 늘어났네요 뭔가... 하루종일 뭐한거지 싶지만,,, 꼭 한번 알고 갔어야하는 느낌이기도 합니다. 요컨대, 추상화/최적화는 정말 해봐야만 보이는 문제점이라는게 있고 제가 아직 경험이 부족해서 예측이 잘 안되네요(
@theeluwin제이미 보일러플레이트는 원래...... 충분히 성숙기까지 만들고 나서 그때 생각해야하는...
@kodingwarriorJaeyeol Lee 를 배웠네요 이번 기회에...
서비스 A를 개발하기 위해 boilerplate B를 만들기 위한 boilerplate C를 만들고 시작했더니 A에서 뭐 하나 바꾸면 B, C까지 전부 다 바꾸고 있는 상황... 이게 실제로 운영을 해봐야만 발견할수 있는게 너무 많네요 하 당연한 얘기긴 한데ㅠ
간만에 SSL 다는 작업을 했는데 (그동안은? 그동안은 로컬에서만 개발했죠) 곳곳에 제가 'http'나 'ws'로 박아둔 string들이 도처에... 하...
@theeluwin제이미 돈은 모든 것을 해결해줍니다
빌드용 서버를 구매하시면...
@akastoot악하 어찌어찌 로컬에서 빌드하고 빠르게 업로드 하는 스크립트를 열심히 짜서 해결 했습니다,,,
아니 멀티 아키텍처 빌드라는게 있었네요
잘 해결 되었습니다
서버에서 도커 빌드가 안됨 (메모리 부족)
로컬과 서버 CPU 아키텍처가 다름 (호환 안됨)
쉬운 해결책: 메모리를 돈 주고 늘린다
귀찮은 해결책: 빌드용 서버를 잠시 빌려서... 하ㅠ...
아니 멀티 아키텍처 빌드라는게 있었네요
서버에서 도커 빌드가 안됨 (메모리 부족)
로컬과 서버 CPU 아키텍처가 다름 (호환 안됨)
쉬운 해결책: 메모리를 돈 주고 늘린다
귀찮은 해결책: 빌드용 서버를 잠시 빌려서... 하ㅠ...
무겁고 큰 메인 기능 구현 착수하기가 겁나서 가볍고 작은 서브 기능부터 구현하면서 차일피일 미루다가 더이상 서브 기능 남은게 없어서 드디어 메인 기능 구현을 했는데, 소요된 노력이 서브와 유사한 수준이라 뭔가... 알 수 없는 불안감이 느껴지는 이 기분... 아시나요... 중요한걸 미루지 맙시다(?
@theeluwin제이미 실례지만 어떤 요구사항이 있어서 이것을 구현하는지 알 수 있을까요?
@akastoot악하 어떤 링크로 갈 수 있는 버튼을 사용할수 있는 상태인지 아닌지 (사용할수 없는 상태면 링크로 들어가도 무효화 처리까지) 입니다. 사실 누가 요구한건 아니고 제가 이렇게 한번 구현해보고 싶어서... 입니다.
요즘 웹을 많이 하고 있는데 정말 단순한 기능 하나도 뭐 이리 구현할게 많은지요...
- 버튼 하나 누르면 어떠한 상태 변경이 전파 되는 기능임
- 버튼을 누르는 유저는 그걸 누를 수 있는 권한이 있는지 체크
- 모든 유저가 websocket으로 전파 받을 수 있도록 해야함
- 로그에 JWT가 남으면 싫으니까 ticket을 발행해서 연결
- 해주는 API를 짜고 ticket에서 user 알아내서 컨텍스트에 붙여주는 미들웨어 구현
- 을 하기 위해 이제 redis로 캐시를 붙이고
- 백엔드 다 했으면 프론트에서 이제 어떤 component가 websocket에 연결 되어 있을지
- 이걸 받아서 또 다른 component한테 어떻게 뿌리지 (event emit으로...
- 등등등...
- 따라서 일단 야크 털을 깎아야한다 라는
클로드 데스크탑에서 사용할 수 있는 알라딘 MCP 서버를 DXT 파일로 공유합니다. 베스트셀러나 신간 정보, 도서 정보를 조회할 수 있습니다. 알라딘 API만 발급 받으면 편하게 쓰실 수 있습니다.
드디어 야크 털을 다 깎았습니다. 이번엔 진짜 진짜 pocket-galaxy
라는 이름에 걸맞는 boilerplate입니다. 온갖 기능을 다 집어 넣어봤습니다. 실제 서비스에서 쓰는 용도라기보단, 내부 툴이나 간단한 1회용 서비스 개발용에 가깝습니다.
하 근데 정말 이거 문서 쓰기가 어렵네요. 이 많은 기능과 설정 방법과 응용 방법을 언제 다...
드디어 야크 털을 다 깎았습니다. 이번엔 진짜 진짜 pocket-galaxy
라는 이름에 걸맞는 boilerplate입니다. 온갖 기능을 다 집어 넣어봤습니다. 실제 서비스에서 쓰는 용도라기보단, 내부 툴이나 간단한 1회용 서비스 개발용에 가깝습니다.
@theeluwin제이미 거기에 x100 정도 해서 ARPAnet 개발자들이 느꼈을 감동을 시뮬레이션해봅시다
@bglbgl gwyng 오..... 그러게요 wao....
아마 다들 비슷한 경험이 있으실겁니다. 태어나서 처음으로 쌍방향 연결에 성공해서 두 클라이언트가 대화할 수 있게 했을때의 기쁨... 저는 딱 15년만에 하는거라(...) 처음 해본것처럼 기쁘네요
디버깅할게 정말 많고 복잡한 뭐시기인것 같습니다. 참고로 가장 마지막 실패 원인은 django가 ASGI로 실행되지 않았기 때문이었습니다. test 환경에서는 이런 문제가 발생하지 않죠...
아마 다들 비슷한 경험이 있으실겁니다. 태어나서 처음으로 쌍방향 연결에 성공해서 두 클라이언트가 대화할 수 있게 했을때의 기쁨... 저는 딱 15년만에 하는거라(...) 처음 해본것처럼 기쁘네요
오늘 한것: 웹소켓 써서 채팅방 구현하기. . . . . . . 대체 왜였을까. . . (재밌기 때문
잘 동작합니다! 드디어 야크 털을 좀 얻었어요
(이미 저 멀리 와버린 야크 털 깎기 - 어디서 출발했는지도 이젠 잊어버림)
django에서 django rest framework에서 jwt로 authentication을 하기 위해 simple jwt를 쓸 때 (아이고 길다) access, refresh token을 cookie에 두고 사용하고 싶다면 약간의 수제(?) 코드가 필요합니다. 누군가 구현 해놨을까 싶었는데 있네요!
https://velog.io/@kimjihong/simple-jwt-login
https://velog.io/@kimjihong/issue-drf-jwt-header#solution---custom-middleware
하... 하려던건 이게 아닌데 이걸 적용 할지말지 또 고민... (결국 하겠죠
사-도파티
구체적으로 내가 원하는 스펙이 따로 있어서 직접 구현하기로 했습니다... 근데 이거를 다시 오픈소스로 만들면 또 관리 안되는 오픈소스C가 탄생하는 것일까요?
django channels에서 jwt authentication을 쓰고 싶은데
- 직접 만들긴 뭔가 싫다
- 오픈소스A는 5년 전에 마지막 커밋이 있다...
- 오픈소스B는 2년 전이 마지막이긴 한데 .DS_Store가 같이 커밋 되어있어서 불안하다...
어카지
야크 털 깎기 안하기가 쉽지 않습니다.
- 지금 필요한것: 일정 시간 동안만 설문을 수집하여 결과 확인하기
- 올바른 구현: 구글 폼
- 실제로 하고 있는것: 일정 시간만 공개되는 설문을 실시간 퀴즈 풀기 사이트와 유사하므로 웹소켓으로 퀴즈 내용을 알려주는 풀스택 웹서비스를 구현하기 위한 boilerplate에 혹시 모를 task 관리를 위해 redis 붙이고 celery 붙이고 모니터링 붙일지 말지 고민하기
- 설문을 -> 설문은
야크 털 깎기 안하기가 쉽지 않습니다.
- 지금 필요한것: 일정 시간 동안만 설문을 수집하여 결과 확인하기
- 올바른 구현: 구글 폼
- 실제로 하고 있는것: 일정 시간만 공개되는 설문을 실시간 퀴즈 풀기 사이트와 유사하므로 웹소켓으로 퀴즈 내용을 알려주는 풀스택 웹서비스를 구현하기 위한 boilerplate에 혹시 모를 task 관리를 위해 redis 붙이고 celery 붙이고 모니터링 붙일지 말지 고민하기
코딩 할 거 없어서 심심하신 분들
@theeluwin제이미 어쩔 수 없습니다 너무 편해서 돌이킬 수 없어요
@kodingwarriorJaeyeol Lee 진짜... 거의 이거 때문에 django를 포기 못하는 느낌입니다
django admin 그만 쓰는 법
Pelican을 기준으로,
- docker 개발(hot-reload), 프로덕션(nginx) 환경 구축
- jinja2 tag, filter, macro 사용하기 (+ context)
- GitHub Action으로 build 테스트 + PR merge시 GitHub Pages로 deploy하기
하는 내용이 동봉되어있습니다. 약간 튜토리얼을 겸한달까요...
이왕 이렇게 된거 후기 글도 쓰고 정말로 튜토리얼도 만들고 할까 싶었지만... 코딩 하느라 좀 지쳐버린ㅠ
대학원 연구실 홈페이지 생성기를 만들었습니다. Jekyll은 Ruby니까, 이번엔 Python을 좀 써보자 싶어서 Pelican으로 구현했습니다. Article을 일종의 DB처럼 사용해서 멤버나 논문, 뉴스, 강의 등의 데이터를 관리하는 방식입니다.
솔직히는 하루이틀이면 끝날줄 알았는데 만드는데 거의 full-time으로 일주일이 걸렸네요. macro에서 왜 context가 전달이 안되는지, filter에서는 왜 안되는지, GitHub Action은 왜 맨날 뻑이 나는지... branch 규칙도 여러번 수정하고 github pages로 내보낼때만 fork me 리본 달아주고 등등... 왤케 자잘하게 할게 많은지ㅠ
Pelican 자체는 쓸만하더라구요. 필요한 기능이 거의 다 있습니다. 근데 없는것처럼 보여요. 근데 다 있긴 합니다.
암튼... 구경와주세요
GitHub에서 PR 할 때 Copilot한테 리뷰 부탁하는거 나쁘지 않네요. 자명한 오타나 실수를 AI로 체크 한다는 느낌.
웹코딩 왤케 재밌는지, 약간 게임에 빠져있는것과 같은 경험임
- 현재 내게 중요하지 않은 작업 (즉, 딴짓)
- 책임을 지지 않아도 되는 서비스 (상업용이 아님)
- 오랜만에 함
- 원래 좀 재밌긴 함
이렇게 네가지가 겹침.
방금은 최적화도 좀 했다. 대충 O(n^3)쯤 되는 코드를 O(n)으로 바꿈. 근데 n은 대충 10쯤 되고, 기존 0.01초 걸리던게 이제는 0.01초 걸림.
@hongminhee洪 民憙 (Hong Minhee) 오ㅋㅋㅋㅋ 바로 한번 써보겠습니다 감사합니다ㅎㅎ
연구실 홈페이지를 쉽게 만들고 관리 할 수 있는 pelican 기반 bolierplate를 만들고 있습니다...만, 이건 말이 bolierplate지 사실상 theme도 포함인거라 디자인이 좀 들어가있어야하는데... 여기서 막혔습니다,,, 다른 부분은 완전 완성인데ㅜㅜ
테스트 작성 할 때 마다 약간 테스트 자체를 자꾸 디버깅 하고 있느라 시간을 다 쓴다는 느낌이었는데... 오늘은 그래도 Cursor의 도움으로 94개나 되는 테스트를 순식간에 작성했고 (엄청난 디버깅이 있었지만) 그래도 딱 한개, 정말로 테스트에 의해서만 잡을 수 있는 문제를 발견해서 올바르게 수정 할 수 있었다.
어제~오늘의 잡도리 일기