장고 채팅방

박제권
장고에서 채팅방 구현하기가 엄청 쉬워졌습니다. 장고에 통합된 기능이니까, 이런 식으로 user 객체를 사용할 수 있어서 행복합니다. class ChatConsumer(AsyncWebsocketConsumer): async def connect(self): self.user = self.scope["user"] if self.user.is_anonymous: raise Exception('go away!') 튜토리얼만 쫓아가면 구현가능합니다. https://channels.readthedocs.io/en/latest/tutorial/index.html 저는 튜토리얼 따라한 시간보다 서버 배포에서 더 오래 고생했습니다. 채널 서버로 daphne 라는 놈을 선택했는데, daphne 는 백엔드로 redis 5 이상을 요구하고, 테스트 서버에 설치된 ubuntu 18 에서 그걸 설치하는건 너무 험난했습니다. (이번 기회에 ubuntu 20 으로 올렸습니다.

블로그 이전

박제권
작년 연말에 워드프레스에서 Jekyll로 이전했었는데, 지난 주말에 다시 hugo로 이전했습니다. 둘다 정적 사이트 생성기로 분류할 수 있는 것들입니다만… 처음 블로그 시작하던 2003년의 MovableType에서부터, 지금까지 이런 저런 블로그 프로그램들을 이용했습니다. 한동안은 대강 만든 루비 스크립트로 돌리기도 했었고요. 작년에 선택했던 Jekyll은 데이터베이스 대신 마크다운 파일들을 쓰는 점이나, 깃헙에서 서비스하기 쉽다는 점이 좋았습니다. 하지만, 어디 한군데 살짝 수정하고나면 브라우저에 반영되기까지 몇십초까지도 걸리는 큰 단점이 있었습니다. 처음엔 견디면서 썼는데, 시간이 갈수록 포스팅을 안하게 될 정도였습니다.

초보자용 웹팩 서버 설정

박제권
자바스크립트에 재미가 들려서 한발한발 나아가고 있습니다. 순서가 조금 뒤죽박죽인데, jQuery 나 jQueryUI 는 오래전부터 쓰고 있고, 회사에서 작업중인 소스에는 이미 Vue 가 들어있어서 남이 만들어놓은 소스의 수정 정도는 하고 있는 정도입니다. 공부시작 하지만, 조금 어려운 문법같은게 나오면 (this 라던가, this 라던가.) 자바스크립트 문법을 비난하며 회피하곤 했습니다. 자바스크립트라는 것은 UI 다듬을 때나 ajax 를 써야할 때만 억지로 쓰는 언어라고 단정하곤 했습니다. 아래는 자바스크립트의 또 다른 약점인 더하기 빼기입니다. 얼마전부터 온라인 스터디에 참여하고 있는데, 다행히, 이번에는 진도가 조금씩 나가고 있습니다.

Java8의 람다를 이용해서 JDBC 쿼리 간단하게 만들기

박제권
JDBC 코딩을 하다보면 전처리 후처리 코드를 매번 넣어줘야 합니다. public class NormalJDBC { public static Dict select_query(String userid) throws SQLException { Connection conn = null; PreparedStatement stmt = null; ResultSet rset = null; Dict map = null; try { conn = DataSrc.getConnection(); stmt = conn.prepareStatement("SELECT * FROM TABLE_NAME WHERE TYP in (?, ?, ?) and ID = ?"); stmt.setString(1, "1"); stmt.setString(2, "2"); stmt.setString(3, userid); rset = stmt.executeQuery(); ResultSetMetaData md = rset.

파이참에서 도커 연결

박제권
회사에 젊은 피가 수혈되었다. 며칠 전 젊은 동료께서 “도커에 파이참 연결해서 코딩하고 있어요.” 라고 하시는데, 난 이거.. 전에 시도하다 잘 안되서 중단했었는데? 그래서, 여태 virtualenv 만 쓰고 있었는데? 한밤중에 윈도우즈 시스템 폴더에 DLL들을 하나씩 까보던 아이는 어디로 갔단 말인가. 먼 옛날을 생각하며, 다시한번 시도했고 성공했다. 이제 인터프리터는 서버랑 동일하게 도커에서 실행하고, 디버깅은 파이참에서 해주고 있다. 역시 이런거 할 때가 제일 재미있다. 작업 내용을 정리해둔다. 아래에 소스들은 깃헙에 있다. 1. 장고앱을 만든다.

애자일 체험 2

박제권
나의 업무방식은 2년전 애자일 코칭을 받고나서 꽤 많이 바뀌었다. 가끔 당시 적어둔 글을 보면, 무언가 할 말이 있긴한데 정리가 덜 된 느낌이 있었다. 다행히 최근에 일을 하다가 이게 중요했구나 싶은 몇가지 기억이 떠올라 적어둔다. 1. 문제 해결 나를 코칭해준 이가 제일 처음 했던 질문은 이 프로젝트를 하면서 얻고자 하는것, 개선하고 싶은 것이 무엇입니까였다. 그때 나의 대답은 하루에 5시간만 일하고 싶습니다였다. 나는, 밤새지 않고도 고객을 만족시키기, 그걸 해보고 싶었다. 옆에서 하루 5시간이라는 나의 말을 들은 팀장은 하루 4뽀모(2시간)도 하기 힘들다면서 5시간은 길어보인다는 조언을 해주셨고, 우리는 하루 6뽀모(3시간) 작업하기를 목표로 정했었다.

장고 페어코딩 후

박제권
(문서 아래 쪽에 django annoying 관련 사항이 추가되었습니다. 2016.11.30) 어제 회사의 장고 전문가와 페어코딩을 했습니다. 어제 배운 것 중에 모델 매니저 관련 사항을 공유합니다. 장고에서 ORM 으로부터 레코드 하나를 가져오는 방법에는 get()과 filter().first()가 있습니다. 저는 아이디를 주고 레코드를 하나 가져오는 경우에는 get()을 부르는 것이 맞다고 생각해서 이런 식으로 코딩을 했습니다. class SomeView(View): def def(self, req, **kwargs): try: obj = MyObject.objects.get(key=key) except: obj = None 안타깝게도 get()은 해당키의 레코드가 없으면 exception을 올려주시네요.

오픈소스에 기여 - python mysql driver

박제권
한줄짜리 코드이지만, 장고에서도 추천하는 파이썬 mysql 드라이버에 기여했다. 파이썬 3.5에서 제대로 동작하는 mysql 드라이버가 없어서 한참동안이나 문제였는데, 2.7에서도 많이 쓰이던 pymysql 이 언젠가부터 3.5를 지원하기 시작했다. 프로덕션에도 도입하기로 하고 잘 사용하고 있었는데, stored procedure 에서 문자열을 인자로 주는 경우, 이 문자열에 한글을 넣으면 surrogates not allowed 라는 익셉션이 발생했다. 처음에는 def literal(self, o): s = self.escape(o, self.encoders) if not PY2 and isinstance(s, bytes): return s.decode('ascii', 'surrogateescape') return s 를

근무시간을 늘리는 것은 답이 아니다

박제권
성공하고 싶다면 근무시간을 늘리라는 아웃스탠딩의 글을 읽었다. 초보자가 숙련공이 되려면 많은 시간을 수련에 쏟아야 한다. 밥먹는 시간에도 계속 생각날 정도로 나를 끌어당기는 일을 찾아야하고, 그리고, 많은 시간을 들여야한다. 하지만, 그것은 초보가 숙련공이 되기위해 많은 시간이 필요하다는 것이지, “노동자의 주당 90시간 근무”를 주장의 근거로 쓰여서는 안된다. 개발자의 의견과는 상관없이 결정된 일정, 그로 인한 밤샘, 그리고, 프로젝트 드롭. 우리주변에는 이미 개발환경을 건강하게 만들고 싶어하는 분들이 많이 있고, 성과도 있다. 회고도 하고, 전략도 제대로 만들어야한다.

파이썬으로 풀어보는 수학 2 그래프

박제권
책은 뉴욕 기후 변화를 예제 데이터로 사용하네요. 우리는 서울에 사니까, 조금 바꿔보았습니다. 다음 그래프는 2000년 부터 2016년까지 매년 7월1일의 기온을 표시한 것입니다. 데이터는 기상자료개방포털에서 받았습니다. 나머지는 책을 참고해서 이리저리 바꿔보면 되는데, 그래프에 한글 표시를 위해서는 다음 코드가 필요했습니다. from matplotlib.pyplot import rc, plot, show, imshow, title, xlabel, ylabel, legend # 이걸해야 그래프에 한글이 잘나옵니다. rc('font',family='AppleGothic')</pre> 이어지는 코드는 다음과 같습니다. # 책에는 뉴욕의 평균온도가 예제로 나온다. 나는 서울로 해보았다. # # 소스 : https://data.