전체 글(29)
-
Open Google Chrome Specific Profile From Command Line Mac
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --args --profile-directory=profile1
2021.04.29 -
slug 필드에 넣을 값을 만들어보자
objs = {} p_han = re.compile('[가-힣]+') match_iter = re.finditer(p_han, title) for match_obj in match_iter: objs[match_obj.start()] = match_obj.group() p_eng = re.compile('[a-zA-Z]+') match_iter = re.finditer(p_eng, title) for match_obj in match_iter: objs[match_obj.start()] = match_obj.group() p_num = re.compile('[0-9]+') match_iter = re.finditer(p_num, title) for match_obj in match_iter: objs[m..
2021.04.16 -
[Django] 변경 항목이 있음에도 migrate 했을때 'No migrations to apply'일 경우
DB의 django_migrations 테이블을 확인해보면 지금까지 migrate를 하면서 생성된 migration 파일 목록이 기록되어 있다. 동일한 App에 대해 migrate를 진행하면서 생성된 파일명이 이미 DB에 기록되어 있다면 Django는 해당 파일을 무시하고 아무 작업도 수행하지 않는다. 예를 들어 P1 프로젝트에서 A라는 이름으로 앱을 만들어서 migrate를 실행했었다면 0001_initial.py라는 파일이 생성됐을 것이고 이미 DB에는 A앱에 대한 0001_initial 파일명이 기록되어 있을 것이다. 이후에 P2 프로젝트를 새로 생성하고 앱 이름을 A라고 만든 후 새로운 모델들을 추가한 다음 migrate를 실행하게 된다면 0001_initial.py라는 파일만 생성되고 아무일도 ..
2021.03.22 -
Python Keyboard Hook Example
Windows 10, Python 3.8.3 LWIN + Shift + Key_S 막기 (스크린캡쳐 단축키)
2020.11.13 -
CSRF 적용된 Django 서버에 axios 이용하여 POST 요청하기
1. 2. axios.interceptors.request.use(request => { request.headers.delete['Content-Type'] = "application/x-www-form-urlencoded" request.headers.delete['X-CSRFToken'] = getCookie('csrftoken') return request }) data = {} var url = document.location.origin + '/' + APPNAME + '/site/' + this.site.uid axios.delete(url, data) .then(res => { console.log(res) })
2020.11.04 -
mss 초고속 파이썬 스크린샷 모듈
pypi.org/project/mss/ mss An ultra fast cross-platform multiple screenshots module in pure python using ctypes. pypi.org 크로스 플랫폼, 멀티 스크린 지원
2020.11.04 -
Python 로깅
import logging logging.basicConfig( level=logging.INFO, format='%(asctime)s [%(name)s] %(levelname)s: %(message)s (%(filename)s:%(lineno)s)', ) logger = logging.getLogger('root') logger.info('hello')
2020.10.29 -
[Javascript] 사용자가 타이핑을 쉬는 시간에 DB에 저장하기
var timeoutId; $('#the-textarea').on('input propertychange change', function() { console.log('Textarea Change'); clearTimeout(timeoutId); timeoutId = setTimeout(function() { // Runs 1 second (1000 ms) after the last change saveToDB(); }, 1000); }); function saveToDB() { console.log('Saving to the db'); } stackoverflow.com/questions/19910843/autosave-input-boxs-to-database-during-pause-in-typing
2020.10.27 -
generate_series in PostgreSQL
https://blog.kesuskim.com/2019/03/fun-with-sql-generate-sql/ [번역] Fun with SQL: generate_series in Postgres | Psalm 31:16 이 글의 원본은 여기에서 보실 수 있습니다. 혹시 더 나은 번역을 제안해주신다면 감사하게 수용하겠습니다. Postgres 를 쓰다보면 샘플 데이터를 만들어내거나 리포트를 만들기 위해 필요한 조인을 하기 위한 일련의 레코드가 필요한 경우가 있다. 간단하면서 잘 사용할 수 있는, 집합을 반환하는 generate_series 라는 Postgres 의 함수를 사용하자. generate_series 라는 이름이 의미하듯, 이 함수는 어느 한 지점으로부터 다른 지점 blog.kesuskim.com
2020.04.26 -
Python3.7 이상에서 requests.get의 매개변수로 프록시를 사용할때 주의사항
Python3.6까지는 requests.get에서 프록시를 사용할때 아래와 같이 매개변수 값을 넣어주었지만 proxy_dict = { "http": "127.0.0.1:8080", "https": "127.0.0.1:8080" } response = requests.get(url=url, proxies=proxy_dict)python3.7부터는 아래와 같이 앞에 scheme(프로토콜)을 추가해줘야한다. proxy_dict = { "http": "http://127.0.0.1:8080", "https": "https://127.0.0.1:8080" } response = requests.get(url=url, proxies=proxy_dict)만약 python3.7이상을 사용하면서 scheme가 추가되지 ..
2020.04.26 -
[SQL] Postgresql, 정렬하고 중복제거하기 #DISTINCT ON
created 컬럼에 대한 정렬이 필요하고 channel_id 컬럼을 중복제거 하고 싶다면 SELECT DISTINCT ON (channel_id) * FROM channelstat ORDER BY channel_id, created DESC 위와 같이 order by 구문에 중복제거에 대상이 되는 channel_id 컬럼을 먼저 넣어주어야 한다. 만약 channel_id가 먼저 나오지 않는다면 다음과 같은 ERROR 메세지를 만나게 될 것이다. postgresql ERROR: SELECT DISTINCT ON expressions must match initial ORDER BY expressions
2020.04.04 -
라즈베리파이상에 파이어폭스 설치하기
$ sudo apt update $ sudo apt install firefox-esr
2020.03.30 -
LetsEncrypt로 무료 SSL 인증서 발급받기 #LetsEncrypt #SSL #Ubuntu
Letsencrypt를 이용하면 무료로 SSL 인증서를 발급 받아서 웹서버에서 사용할 수 있다. Ubuntu상에서 설치 sudo apt-get update && sudo apt-get install -y letsencrypt SSL 인증서 발급 80번 포트가 사용중일때는 인증서 발급이 안된다. 웹서버를 내리고 시도하라. sudo letsencrypt certonly --standalone -d www.example.com Nginx 설정 다음과 같은 형식으로 nginx 설정 파일의 server 블록에 추가해서 사용한다. listen 443; server_name example.com www.example.com; ssl on; ssl_certificate /etc/letsencrypt/live/www.e..
2020.03.17 -
[SQL] A컬럼에 대한 중복 제거 후 B컬럼까지 가져오기 #Postgresql #DISTINCT ON
Postgresql에는 DISTINCT ON이라는 syntax가 존재한다. 보통 DISTINCT를 사용하게 되면 정의된 컬럼에 대해서만 조회가 되는데 DISTINCT ON을 사용할 경우 DISTINCT로 정의된 컬럼 이외의 컬럼 값에 대한 조회가 가능하다. ORDER BY를 사용해서 가져오는 값을 조절할 수 있다. SELECT DISTINCT ON(column_A), column_B FROM table ORDER BY column_B DESC;
2020.03.17 -
[SQL] CONCAT, 문자열 결합하기 #Postgresql #SQL #CONCAT
값과 값을 결합한다. SELECT절과 WHERE절에서 사용 가능하다.
2020.03.10 -
[SQL] WERER절에 IN 연산자 사용하기 #Postgresql #psycopg2 #Python
DB에 데이터를 삽입할때 중복이 자주 발생하는 상황이라면 하나하나 이미 존재하는 데이터인지 SELECT를 하는 것 보다는 IN 연산자를 활용해서 한번의 쿼리로 다수의 데이터에 대한 중복 여부를 확인하는 것이 효율적이다. 예) 더보기 USER_TABLE의 id 컬럼이 문자 형식일때는 위와 같이 사용하고 id 컬럼이 숫자 형식이라면 id_list_s를 만들때 작은따옴표(Single quotes)를 제거하고 사용하면 된다.
2020.03.09 -
PyTorch로 Numpy를 대체하여 성능을 끌어올려보자 #pytorch #numpy #gpu #cuda #python #colab
PyTorch의 Tensor와 Numpy의 ndarray는 유사한 형태를 가지고 있고 PyTorch의 경우 GPU를 사용한 연산이 가능하기 때문에 Numpy로 작업시 연산 부분을 PyTorch대체해서 처리 속도를 끌어 올릴 수 있다. 다음과 같이 Numpy로 배열을 만들고 10000번의 연산을 했을때 소요 시간은 5.11초이다. %%time import numpy as np x = np.ones(1024000) for i in range(10000): x += 1 print (type(x)) print (x) [10001. 10001. 10001. ... 10001. 10001. 10001.] CPU times: user 5.11 s, sys: 2.45 ms, total: 5.11 s Wall time:..
2020.03.08 -
웹툰 이미지에서 대사만 지워보자 #OCR #GCP #Python #OpenCV
업무중에 웹툰 이미지에 그려져있는 대사를 추출하고 해당 대사를 지우는 작업이 필요했다. 기본적인 아이디어는 다음과 같다. 다른 클라우드 서비스들도 비슷하지만 Google Vision API에서 지원하는 OCR API는 문자와 문자가 적혀있는 영역의 좌표를 함께 알려준다. 그래서 OCR을 통해서 얻은 글자의 영역(좌표)을 OpenCV를 이용해서 주변색으로 칠해버리면 된다는 생각이다. 구현하는 것은 어렵지 않았다. 그런데 결과는 좀 실망스러웠다. 말 풍선안에 있는 대사들은 어느정도 깔끔하게 지우는데 성공했지만 감탄사나 효과음을 글자로 적어 놓은 것들은 OCR로 찾아내지 못하거나 찾아내더라도 영역을 나타내는 좌표가 맞지 않고 배경이 단일 색이 아닌 경우도 있어서 주변색으로 채워넣는 것도 쉽지가 않았다.
2020.03.05 -
'레드옥션' 개발 후기 #Python #Flask #Chartjs #경매
'레드옥션'이라는 이름의 경매 물건 추이를 차트로 보여주는 사이트를 만들었다. 부동산 시장에 크게 관심은 없지만 폭락, 폭등 거기다가 경매 대란 이야기까지 나오고 있어서 호기심에 한번 만들어봤다. 개발하는데 몇일이 걸렸지만 대부분의 시간은 자료를 수집하는데 소비되었다. 물론, 자료 수집은 내가 한 것은 아니고 프로그램이 했다. Python Flask를 기반으로 만들었고 메인 페이지 1개와 raw 데이터를 조회하기 위한 API 1개를 가지고 웹으로 서비스 중이다. 반응형에 크게 신경쓰지는 않았고 화면 크기에 따라서 요소들이 적당히 배치되도록은 만들어놨다. 차트는 chartjs를 사용했다. 백엔드는 Nginx + uWSGI + Flask로 구성되어 있다.
2020.03.05 -
Microsoft Azure OCR 사용하기 #Python #OCR #Azure
업무중에 이미지에서 문자를 추출할 일이 생겼다. Python으로 작업중이고 tesseract라는 오픈소스 OCR 모듈이 존재하지만 테스트를 해보니 결과물이 만족스럽지 않아서 상용 클라우드 서비스를 이용하기로 했다. 메이저 클라우드 서비스들은 모두 OCR 기능을 제공하고 있지만 무료 크레딧이 남아있는 Microsoft Azure를 사용하게 됐다. 사용법은 비교적 단순하다. Azure 서비스에서 API_KEY를 할당받고 requests를 이용해서 API를 호출해주면 끝이다.
2020.03.05