투명하게

포장지로 선물을 화장으로 주름을 옷으로 뱃살을 말로 마음을 제물로 죄를 가리고 싶지 않다 

뾰루지

  뾰루지 얼굴에  뾰루지가 났는가? 몸이 건강하다면 곧 저절로 없어질 것이다. 마음에 생긴 뾰루지도 살펴라. 눈에 보이지 않기 때문에 더욱 신경써 관리해야 한다. 얼굴에 난 뾰루지와 마찬가지로 마음이 건강하다면 곧 사라질 것이다. 하지만 건강상태가 좋지 않다면 이 역시 점점 곪아갈 것이다.

Django update vs bulk_update

함수 QuerySet.update() bulk_update() 예시 MyModel.objects.filter(...).update(field=값) MyModel.objects.bulk_update(objs, ['field']) SQL UPDATE table SET field = 값 WHERE 조건 UPDATE table SET field = CASE WHEN id=1 THEN 값1 WHEN id=2 THEN 값2 END WHERE id IN (1,2) 차이 모든 row에 같은 값 row마다 다른 값 공통점 둘 다 save() 안 탐 pre_save / post_save signal 안 탐

Django 트랜젝션으로 동시성 처리

  조건에 맞는 경우만 처리 Check - then - Act 패턴 if 조건: 처리 잔고가 100원 이상이면 출금 여기서, 조건 확인과 처리는 반드시 하나의 트랜젝션으로 동작해야 한다. 위험! 만약 그렇지 않으면, Read - (gap) - Write 요청과 처리 사이(gap)에 다른 요청이 들어오는 경우. 요청1: 잔고가 100원 이상인가? YES 요청2: 잔고가 100원 이상인가? YES 처리1: 출금 100원, 잔고 0원 처리2: 출금 100원, 잔고 -100원? Django에서는 transaction.atomic 을 사용하여 트랜젝션을 임의로 설정한다. with transaction.atomic():             if 조건검사():                 처리() 그리고 select_for_update 를 사용하여 LOCK을 걸어 다른 요청은 대시킨다. qs = WorkTime.objects.select_for_update().filter(조건들) list(qs) # DB hit를 위해서 이렇게 하면 조건들에 해당하는 row들(qs)에만 LOCK이 걸린다. 트랜젝션이 끝날때 까지. 참고, 읽기만 하는건 LOCK과 무관 MVCC; Multi-Version Concurrency Control

우리에게 필요한 것은 우리다

이미지
지난날 우리는 얼마나 많은 땅을 피로 물들였는가 또 아직도 여전히 오늘도 그러고 있다 우리 문명은 과연 발전하고 있는가 지금 우리에게 필요한 것은 무엇일까 ㅇ TV로 보던 코소보 전쟁의 한 장면이 생생하다 전란중의 임시천막 앞에서 천진하게 뛰노는 아이들 모습에 나는 눈물을 멈추지 못했고 옆에 있던 친구는 왜 우냐고 물었다 전쟁은 내가 떠올릴 수 있는 가장 슬픈 것이다 ㅇ 대한민국도 손에 손잡고 88 서울 올림픽을 정점으로 이후에는 잡은 손을 놓는 추세로 가는 것 같다. 이제는 가족도 각자도생이란다. 어쩌다 우리는 이런 병에 걸렸을까 ㅇ 과거에 우리는 생산수단인 영토를 차지하기 위해 싸웠다 지금도 여전히 형태가 바뀐 자본을 손에 넣기위해 싸운다 더 큰 힘에 휩쓸리지 않기 위해서 힘을 기르려 싸우고 내가 천하제일이어도 감히 넘보지 못하게 누르려 싸운다 ㅇ 싸우고 또 싸운다 짖고 또 짖는다 작은 개가 짖는다 왈왈왈 두려움에 계속해서 짖어댄다 경쟁 시스템은 훌륭하다 스포츠 게임은 재미있지만 만약 규칙이 없고 반칙이 난무하다면 우리는 재미를 잃고 TV 채널을 돌린다 ㅇ 원자 단위로 생각해보자 어디까지가 나이고 너인가 지금 우리에게 필요한 것은 우리라는 공동체적 의식이다 ㅇ 끝

python // 연산자는 왜 버림이 아니라 내림인가

  파이썬 에서 // 연산자는 나눗셈의 몫을 구하는 연산자다. 양수에서는 버림과 내림이 같기에 의문이 없다. 음수에서 버림이 아닌 내림(floor)처리를 하는가? 나눗셈에서 아래 등식은 항상 일치해야한다. a == (a // b * b) + (a % b) 피제수 = 몫 * 제수 + 나머지 나머지를 구하는 % 연산과의 일관성을 유지하기 위해서 버림이 아닌 내림 처리를 한다.

갑자기 해방을 맞아 어리둥절한 노예가 되지 말기를

이미지
  환상적인 만능 인공지능; 마케팅 빅데이터 학습과 + 자연어 커뮤니케이션 모두들 이 결합의 결과에 놀란 것 같다. 하지만 브레인과 컴퓨터 인터페이스는 아직 나오지 않았지. 여전히 내 머릿속에 있는걸 전달하려면 언어라는 채널이 필요해. 멋지긴 하지만, 혁명이라 할만한게 있나. 기존 컴퓨팅 로봇과 같은 도구일 뿐. 오래전 업계에서는 프로그래밍과 코딩을 분리하는 개념이 있었다. 통번역으로 보면 코딩은 단순한 직역. =핫바리 개발자 지금도 고수들의 잘 짜여진 코드는 자연어 처럼 읽히고 관리된다. 그럼 차이가 없는가? 아 물론 있지. 하지만 너무 환상에 빠져 도깨비 방망이로 생각하지 않기를. 질문하는 능력을 키울것. 대답은 도구가. 상상하는 능력을 키울것. 현실화는 도구가. 모두가 경영자처럼 살 것이다. 산다. 그래야한다. 노예처럼 살지 말고. 그리고 노동이 필수가 아닐때 어떻게 시간을 보낼지 삶의 의미를 스스로 정립할 것. 갑자기 해방을 맞아 어리둥절한 노예가 되지 말기를.

10년 뒤 내 모습

  10년 뒤 내 모습 3년 뒤 1년 뒤 3개월 1개월 다음 주 내일 한 시간 10분 뒤 내 모습 ... 지난 10분을 돌이켜 보면 10년 뒤 내 모습도 보이지 않을까

SheetJS 기본 자료구조, 좌표계, 그리고 표시형식

이미지
  SheetJS를 사용해서 JavaScript로 엑셀 파일을 만들고 편집할 수 있다. 자료구조 Workbook: 여러 시트의 모음. 엑셀 파일이다. Sheet: 셀들의 객체 모음 (A1, B1, …) Cell: {t, v, f, z} 형태의 단일 데이터 범위 const range = XLSX.utils.decode_range('A1:D10'); {     s: { r: 0, c: 0 },  // start:  A1  (row=0, col=0)     e: { r: 9, c: 3 }   // end:    D10 (row=9, col=3) } 순회 예시 const range = XLSX.utils.decode_range(ws['!ref']); for (let C = range.s.c; C <= range.e.c; C++) {     const headerAddr = XLSX.utils.encode_cell({ r: 0, c: C });     const header = ws[headerAddr]?.v; } !ref 는 시트 내용이 들어있는 범위를 표현하는 특수 표현이다. XLSX.utils.decode_range(ws['!ref']) 셀 구조 { t: 's', v: '홍길동' } t: type ('s': 문자열, 'n': 숫자, 'b': 불린, 'd': 날짜, 'e': 오류) v: value f: formular z: 표시형식 z: '@' 하면 텍스트로 그대로 보여준다 z: '#,##0' 천단위 콤마 z: 'yyyy-mm-dd' 날짜 z를 지정하지 않으면 엑셀이 **타입(t)**을 기준으로 기본 표시 형식을 자동 적용됨.

Django 이미 테이블이 만들어져 있다면 inspectdb

  이미 테이블이 만들어져 있다면 inspectdb 명령을 활용하자 python manage.py inspectdb --database interface > myapp/models_if.py 이렇게 하면 interface DB 를 조사하여 자동으로 models_if.py 파일을 만들어준다. 앞으로  Django ORM 으로 테이블을 관리할거면 managed = True 옵션으로 변경해준다.

별똥별이 떨어지는 그 순간에도 행복을 빌었지

이미지
  어릴 적 내 꿈은 그냥 행복한 거였어 별똥별이 떨어지는 그 순간에도 행복을 빌었지 그 꿈은 정말로 이뤄졌어 나는 불과 20대의 나이에 꿈을 이룬 청년이라고 스스로 생각하며 흐뭇해했지 그런데 그 성공은 오래가지 않았어 나는 다시 고민에 빠졌어 목표 설정이 잘못된 건가 허황된 꿈이었던 것인가 하지만 아무리 찾아 헤매고 다녀도 더 좋은 목표를 만날 순 없었어 그리고 깨달았지 내 꿈은 달성보다 유지가 어려운 목표였던거야 아무리 달콤했던 감정들도 시간이 지나면서 익숙해져 그뿐인가 사회는 내가 만족한 상태로 있는 걸 가만히 두지 않아 끊임없이 조금 더를 외치게 만들지 앞으로도 계속 나아가겠지만 지금까지 나의 결론은 바로 이거야 행복은 선택이고 습관이다

PostgreSQL 접속 성공/실패 로그 남기기

  로그파일 위치: /var/log/postgresql/... 설정파일 위치: /etc/postgresql/버전/main/postgresql.conf 접속실패 로그는 log_destination = 'stderr' 설정이 기본으로 있기 때문에 systemd/rsyslog 가 stderr 출력 내용을 파일에 기록해준다. (접속 실패는 에러다) 접속성공 로그를 남기려면 log_connections = on 설정해줘야한다. (기본은 off) 참고로 logging_collector = off 설정의 의미는 PostgreSQL 자체 로그 수집기를 사용하지 않겠다는 의미다. 서비스 재시작하면 반영됨

django queryset distinct on 은 표준이 아니다

  Model.objects.distinct() -> DISTINCT   : SQL 표준 Model.objects.distinct('field') -> DISTINCT ON ('field')   : PostgreSQL 전용, 다른 DB에서는 에러

선택의 기법 - 가중평균 매트릭스

  가중평균 매트릭스 항목별로 가중치(중요도)를 설정하고 각 요소별 점수를 매긴다 가중치 * 점수 의 총합을 비교하여 높은 쪽을 선택한다 ... 이런! 총합이 똑같이 나왔다 이러니 와리가리 선택을 못하고 몇날며칠을 고민 중인거였다 ... 조금 더 설레는 쪽으로 선택한다 새로운 것 가지 않은 길을 가보기로 선택한다 안녕.

파이썬 pip 늘어만 가는 패키지 정리

  결론을 먼저 말하면 그때그때 수시로 정리해 주는게 좋다. 한방에 알아서 정리해 주는 툴은 없다. 1. pipreqs 현재 프로젝트 기준 필요한 최상위 패키지만 뽑아준다. 소스코드만으로는 파악되지 않는 패키지가 있을 수 있다. 자동으로 불필요 패키지를 제거해 주지는 않는다. 이 패키지 자체가 필요로 하는 하위 패키지가 엄청 많다. (약 70~80개) 궁금하면 한번 설치해서 돌려보는 것도 경험이다. 2. pipdeptree 설치된 패키지를 트리 형태로 보여준다. 현 상황 분석에 매우 편함! (추천) 이거 보면서 하나씩.. 기억 안나면 찾아보고.. 정리하는거다! requirements 파일이 있으면, 가상환경을 삭제하고 다시 만드는게 빠르다. 런타임에 import 시도하다 에러나는 경우도 많으니 테스트환경에서 돌려보고 실서버 반영하면 된다. 끝.

Ego

이미지
  텅 빈 하늘과 같은 마음이 내 본질, 참 나입니다. Ego라고 하는 생각 구름과 감정 구름이 왔다 갔다 하는 것 뿐입니다.

숨차게 운동하는게 싫은 이유

  숨차게 운동하는게 싫은 이유 나는 평상시에도 걷지 않고 막 뛰어다녀. 숨이 차는걸 누구는 좋아하고 누구는 싫어하는데 그 이유를 생각해봤더니, 나는 어릴 때 즐겁게 친구들이랑 뛰어 놀았던 즐거운 기억이 있었던 거야 근데 요즘 애들은 밖에서 뛰어놀지를 않잖아. 언제 뛰어? 체육 실기평가 때? 다이어트? 지각 했을 때? 그러니까 숨 차는게 싫은거야 내가 숨이 차다 그러면  뇌는 결정을 해.  이 신체반응이 좋은 건지 나쁜 건지 어떻게? 자신의 과거 기억에 입각해서 결정하는데, 숨 찬 기억이 과거에 싫은데 억지로 뛰었던 기억이 되살아나면  이건 나쁜게 되는거야 ****** 어떤 자극이 있을 때 그걸 내가 어떻게 해석하느냐에 따라 좋은 감정 또는 싫은 감정이 생긴다. 감정은 내가 선택하는 것이다.

내가 감사하지 않은데 자녀가 감사할 수 있나

  선물을 받으면 감사합니다 라고 말해. 오늘이 마지막 날이니 선생님 감사합니다 라고 말해. 내가 받은 선물에 감사하지 않은데 내가 자녀에게 감사하지 않은데 내가 선생님께 감사하지 않은데 넌 감사하다고 말해.

우리는 어디서 왔는가?

이미지
"나는 내가 가까이 하는 다섯 명의 평균이다" 멀리 갈 필요 없다. 우리는 우리 주변에서 왔다. 생각해보라. 내가 쓰는 말과 행동, 그리고 생각들이 모두 어디서 왔는지?

보이지 않는 신호등

이미지
가고 싶은데 날고 싶은데 신호등으로 막혀있다 보이지 않는 신호등 빨간색인지 초록색인지 언제 서고 언제 가야하는지 도통 알 수가 없다   그냥 내가 알아서 가야한다 멀리보고