전체 글 386

여러 교육기관 수료증을 관리해주는 서비스는 어떨까?

수료증의 번거로움 IT 교육을 들으면 수료증을 준다. 대부분 수료증을 종이로 준다. 또 그걸 우편 등기로 보낸다. 굳이 그럴 필요가 있을까? 수료증 발급 비용 수료증 케이스 추정 1000원 수료증 종이 및 인쇄비 추정 500원 수료증 등기 추정 2000원 적어도 1명당 3~4천원은 발생할 거 같다. 거기에 그걸 담당하는 직원의 인건비다. 30~40명 수료증을 인쇄 출력, 수료증 케이스에 집어 넣고, 봉투에 넣고, 각 주소를 출력해서 붙이고, 우체국에 가서 등기 우편을 붙이는 비용은 얼마로 계산해야 할까? 물리적 시간이 필요하기 때문에 최소 4~5시간은 필요할 거 같다. 수료증 발급 비용을 수강생 1명당 4천원으로 잡고 40명이 수업을 들었다면 16만원, 거기에 담당 직원 인건비를 시간당 1만원으로 잡을 ..

두 데이터프레임 df1, df2를 비교해서 df2 새로운 칼럼에 df1의 값을 입력하기 예제

학생 이름과 반 정보가 있는 테이블A가 있고 이름 정보만 있는 테이블B가 있다. 테이블B에 있는 이름 중 테이블A에 있는 이름과 같은 이름일 경우에는 반 정보를 입력하고, 없을 경우에는 '미정'이란 정보를 입력하자. import pandas as pd df1 = pd.DataFrame(data= {'이름': ['이서연', '김민준', '박지우'], '반': ['1-1', '2-1', '3-2']}) print(df1) print() df2 = pd.DataFrame(data= {'이름': ['박지우', '김소연']}) print(df2) print() df2['반'] = df2['이름'].map(lambda x : df1.query("이름 == '" + x + "' ").반.iloc[0] if len(d..

장고django API 서버 개발 - 안드로이드Android retrofit2 이용 시 request body 처리

가끔 아무 것도 아닌 걸로 긴 시간을 보내게 된다. retrofit2에서 이런 식으로 구현했다면 @Headers("Content-type: application/json") @POST("test") Call postTest(@Body TestData testData); 당연히 post로 body로 보내지는 데이터 형태도 json 형태다. request.body.decode('utf-8')을 로그 찍어보면 데이터가 {"name"="ted", "age"=40} 이런 형태로 들어온다. django에서는 따라서 import json body = json.loads(request.body.decode('utf-8')) 이렇게 데이터를 받아야 한다. 하지만 이렇게 받고 있었다. from urllib.parse im..

Q. 장고django 같은 네트워크 상의 다른 기기 접속 허용하는 방법은?

A. 현재 실행 컴퓨터 IP address 나 0.0.0.0를 적어줘야 한다. 그래야 같은 네트워크 상의 다른 기기에서 접속 가능하다. python manage.py runserver 그냥 이렇게만 실행할 경우에는 같은 네트워크 상의 다른 기기에서 접속이 안 된다. 예를 들어 로컬에서 장고 실행시, 같은 네트워크 상의 모바일 기기에서는 장고를 실행한 로컬 컴퓨터의 ip 주소를 192.168.0.3:8000 이런 식으로 넣어도 접속이 안 된다. python manage.py runserver 0.0.0.0:8000 또는 python manage.py runserver 192.168.0.3:8000 로 실행하면 외부에서 접속 가능하다. 이 때 반드시 포트 번호를 적어줘야 한다. 포트 번호는 다른 번호로도 가..

Q. nltk의 PorterStemmer, LancasterStemmer로 eat, ate, eaten을 어간 추출하면 어떻게 될까?

A. 잘 안 된다. - eat - eating - ate - eaten - eats 을 어간 추출 해보자. from nltk.stem.porter import PorterStemmer stemmer = PorterStemmer() print(stemmer.stem('eat')) print(stemmer.stem('eating')) print(stemmer.stem('ate')) print(stemmer.stem('eaten')) print(stemmer.stem('eats')) 결과는? eat eat ate eaten eat 이다. eat, eating, eats는 똑같이 eat으로 되지만, ate과 eaten은 되지 않는다. LancasterStemmer을 활용하면 좀 더 낫다. from nltk.st..

.gcloudignore에 .gitignore가 포함되도록 하는 방법

구글 앱엔진에 배포할 때 쓸데 없는 파일이 너무 많이 올라갔다. .gitignore에 있는 내용을 다시 또 적자니 삽질처럼 느껴졌다. 이럴 때 .gcloudignore에 그냥 한줄만 추가하면 된다. #!include:.gitignore 물론 조심해야 한다. .gitignore git에서는 무시해야하지만 gcloud에는 반드시 올라가야할 파일도 있으니까.

좋은 커밋, 좋은 커밋 메시지Git commit message는 어떤 것일까?

깃Git을 쓰고 커밋commit을 할 때 메시지를 적는다. 메시지를 어떻게 적어야 할까? 커밋 메시지는 훌륭한 협업자를 판단하는 기준 "a commit message shows whether a developer is a good collaborator." - Peter Hutterer. (출처: On commit messages) "커밋 메시지는 개발자가 훌륭한 협업자인지 여부를 보여준다." 말로 훌륭한 협업자라고 주장해봤자 의미는 없다. 언제나 말보다 실제가 중요하니까. 결국 커밋 메시지를 잘 적어야 다른 사람들에게 훌륭한 협업자로 인정받을 수 있게 된다. Peter Hutterer의 주장을 좀 더 살펴보자. (출처: On commit messages) A good commit message shou..

개발 Dev/깃 Git 2021.03.11

애드센스 광고수익을 얻으려면 미국 세금 정보를 입력해야 한다

애드센스 메뉴 중 지급을 누르고 설정에 들어가면 결제 프로필에 미국 세금 정보가 있다. 이 정보를 입력해야 광고수익을 지급받을 수 있다고 한다. 법인이 아닌 경우, 개인으로 입력할 경우에는 감면 세율을 받을 수 없다. 감면을 받기 위해서는 개인 TIN(Taxpayer Identification Numbers)을 반드시 입력하라고 나온다. 개인 TIN은 주민등록번호는 아니라는 설명도 나온다. 따라서 개인 사업자가 아닌 개인의 경우에는 감면 세율을 받을 길이 없다. 모두 입력하고 나면 세금 정보가 나오고, 감면 세율이 미 적용되어 모두 30% 세율이 적용된 내용이 나온다. 진짜로 애드센스 광고 수익도 100$를 벌면 30$ 원천징수하고 70$만 지급해주는지는 아직 모르겠다. "미국에서 발생한 특정 소득 유형..

파이썬python 싱글턴singleton 예제 코드

파이썬으로 싱글턴 예제 코드를 만들었다. class SingletonExample: text = None def __new__(cls, *args, **kwargs): print('__new__') if not hasattr(cls, 'instance_'): print('not hasattr instance_') cls.instance_ = super().__new__(cls) return cls.instance_ def __init__(self, *args, **kwargs): print('__init__') if not hasattr(self, "init_"): print('not hasattr init_') self.init_ = True self.text = args[0] s1 = Singleto..

구글 앱엔진Google appengine에서 python으로 cloud sql 접속시 sqlalchemy를 써야 하는 거 같다

그냥 pymysql로 접속했을 때 로컬에서는 잘 작동했다. 하지만 앱엔진에 올리고 나면 연결 오류가 났다. 1. 장고Django 내 settings.py에서 설정할 경우 정상 접속되었다. MYSQL_HOST: "/cloudsql/::" 로 해서 app.yaml에 추가했다. if os.getenv('GAE_APPLICATION', None): # Running on production App Engine, so connect to Google Cloud SQL using # the unix socket at /cloudsql/ DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': os.getenv('MYSQL_HOST'), 'US..

Q. 인공지능Artificial Intelligence, 머신러닝Machine Learning, 딥러닝Deep Learning의 관계는?

A. 인공지능 ⊃ 머신러닝 ⊃ 딥러닝 인공지능이 가장 큰 개념으로 머신러닝을 포함하고, 딥러닝은 머신러닝의 한 분야로 머신러닝이 딥러닝을 포함한다. 지금은 딥러닝이 인기가 많아 마치 인공지능 = 딥러닝처럼 느껴지지만, 인공지능 ≠ 머신러닝 ≠ 딥러닝이다. 인공지능에는 머신러닝(기계학습) 말고도 여러가지 것들이 있다. 퍼지 논리, 전문가 시스템 등. 머신러닝에도 딥러닝 알고리즘뿐만 아니라 결정트리, 클러스터링, 강화 학습 등 다양한 알고리즘이 있다.

인공지능 AI 2021.03.03

구글 앱 엔진 장고 Nginx 502 Bad gateway 뜨는 이유

구글 앱 엔진에 장고 앱을 배포했다. 사이트로 들어갔는데 "502 Bad gateway"가 떴다. 여기서 알 수 있는 건 구글 앱 엔진은 nginx를 쓴다는 점이다. 이유는 main.py 설정 오류였다. from mysite.wsgi import application # App Engine by default looks for a main.py file at the root of the app # directory with a WSGI-compatible object called app. # This file imports the WSGI-compatible object of your Django app, # application from mysite/wsgi.py and renames it app so..

Q. Colab에서 GPU 쓰는 법은?

A. 런타임 설정에서 GPU로 설정을 바꿔줘야 한다. 기본은 None이다. 런타임 메뉴를 누른다. 아래쪽에 런타임 유형 변경이 있다. 유형 변경을 누르면 노트 설정이 뜬다. 여기서 GPU로 설정해줘야 한다. 머신러닝 모델을 만들어서 학습 시킬 때, 속도가 GPU 쓰는 것과 안 쓰는 것 차이가 10배 이상이다. 꼭 GPU 설정을 해야 한다.

Q. 구글 Colab을 쓰면서 로컬local에서 주피터 노트북에서 작업할 수 있을까?

A. 데스크탑용 Google 드라이브를 설치하면 된다. 구글 드라이브 다운로드 및 설치하기 윈도우와 맥만 지원된다. 리눅스는 아쉽게 안 된다. 설치하기 설치가 끝나면 맥의 경우 위와 같은 아이콘이 생긴다. 아이콘을 클릭하면 아래처럼 구글 드라이브 디렉터리가 보인다. 데스크탑 구글 드라이브는 별개 아니라 클라우드 드라이브를 로컬 디렉터리처럼 접근할 수 있게 해준다. 따라서 로컬 내 맥에 설치된 주피터 노트북에서 구글 드라이브에 있는 주피터 노트북 파일에 접근할 수 있게 된다. 로컬에서 My Drive 디렉터리 안에 들어가서 주피터 노트북 파일 만들기 로컬에서 My Drive 디렉터리 안에 들어가서 Google Drive Test 주피터 노트북 파일을 만들었다. 그리고 hello world를 출력했다. 구글..