728x90

과제를 위해 Django 공부중인데... 한글도 포함 가능하게 slug 를 만들고 그걸로 url 을 지정하려니까 헷갈리는 부분이있어서 검색해봄

 

path() , re_path() 역할 

urlpatterns 에 들어갈 요소를 리턴

 

arguments for path()

path(route, view, kwargs=None, name=None)

 

1) route

자료형 :string 또는 gettext_lazy()

내용 : URL pattern

<> : URL 일부를 캡쳐해서 keyword argument로 view 에 전달

 

ex)

path('bio/<username>/', views.bio, name='bio'),

converter specification 을 포함할 수 있다. 이를테면 <int:section> 요렇게..

 

2) view

자료형: view function 또는 as_view() 의 리턴(class-based view 의 경우) 또는 django.urls.include()

 

 

3) kwargs

view function 이나 method 에 추가적인 argument 를 넘길 수 있게 해준다.

 

 

arguments for re_path()

re_path(route, view, kwargs=None, name=None)

1) route

자료형 : Python 의 re 모듈 정규식을 포함하는 string / gettext_lay()

string 은 raw string syntax (r'') 을 사용하며 이때는 \문자의 escape 를 위한 \ 가 추가로 필요하지 않음

route 가 $로 끝나는 경우, 전체 요청 URL은 regular expression pattern 과 일치해야한다.

>> 사실 이 말이 이해가 잘 안됐는데 아래는 이해하도록 도와준 링크...

 

2), 3) 은 path()의 설명과 동일함..

 

 

출처 :https://docs.djangoproject.com/en/4.0/ref/urls/#module-django.urls.conf

 

Django

The web framework for perfectionists with deadlines.

docs.djangoproject.com

 

728x90
728x90

현재 플라스크를 공부하다가

SQL 개념을 안다고 가정하고 진행하는 부분이 있어 생활코딩 강의를 틈틈히끝까지들었다

 

졸릴때마다 멍멍이들이 깨워주었다....

 

암튼 음

 

파이썬을 터미널로 실행 시 가상환경 쓰는법은 알겠는데

파이참으로 코딩할 때 가상환경에 있는 패키지들이 자동으로 불러오기가 안돼서..?

 

실행환경을 그 가상환경으로 고정하고 불러와서 쓰는방법이있을거같은데... 해서 검색해보니

 

1. file > settings > Project > Python Interpreter  

에서 톱니 모양을 누르고..

 

2. 사용할 가상환경 경로를 선택해준다...

../[venv]/bin/python

 

 

원했던대로 가상환경에 인스톨한 패키지가 자동완성이 된당 ㅎㅎㅎ 만족

728x90
728x90

오늘은 지난번에 적어본 코드 실행해보기부터 시작...

 

1. 가상환경 on

 

$ source ./[venv이름]/bin/activate

 

2. 환경변수 설정 (실행할 파이썬 파일 지정)

 

$ export FLASK_APP = [파이썬 파일명 .py 빼고 or 프로젝트 디렉터리명]

 

3. 실행

 

$ flask run

 

오늘 새로 해본 내용

 

개발자모드로 실행하기 > 경고 안뜨고 디버깅모드 온..

export FLASK_ENV=development

( = 앞뒤로 띄어쓰기 넣었더니 에러났음...ㅜ)

 

프로젝트 구조

 

 

728x90
728x90

혼자 공부하면서 메모한 내용...

 

 

1. 가상환경설정

python3 -m venv [venv이름]

./[venv이름]/bin/activate

 

가상환경 실행

source . [venv이름]/bin/activate

 

2.Flask 설치

 

pip install Flask

 

3.예제1 - helloworld

 

# python 코드 내부


from flask import Flask


app = Flask(__name__)


@app.route("/")

def hello_world():

return "<p>Hello, World!</p>"

 

4.routing

root : "/"

project는 "/project/"

/project 입력시에도 자동으로 변환 됨

end point는 "/point"

자동변환 x

 

5.실행 (debugging only)

 

export FLASK_APP=[python 파일이름, 확장자없이]

flask run

 

6. Port

default port  : 5000

포트변경

export FLASK_RUN_PORT=8000

 

포트에러(다른 프로그램이 사용중)

  • OSError: [Errno 98] Address already in use
  • OSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions

해당 포트 사용중인 프로세스 찾아내기

$ netstat -nlp | grep 5000

 

7.배포(나중을위해 링크만..)

https://flask.palletsprojects.com/en/2.0.x/deploying/

1. 디버깅모드 해제

2. 옵션 --host=0.0.0.0

(listen to all public IPs)

 

 

 

8.developement features 사용하기

export FLASK_ENV=development

 

9.변수

<var_name>

 

</post/int:var_name>

 

자료형을 추가하면 convert 해줌

 

string / int / float / path(accept '/' ) / uuid

 

 

10. POST/GET

@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return "post"
else:
return "get"

 

11.Response

string : response body = string, status = 200 OK

 

dictionary : jsonift 호출

 

make_response() 함수 ok

 

 

 

 

728x90
728x90

문제 링크 : https://leetcode.com/problems/first-bad-version/

 

First Bad Version - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

 

기본적인 바이너리 서치 문제이나

오버플로우를 주의해야한다...

 

기본적으로 풀이는,

1. 검색 범위의 맨 앞(min 또는 left) 맨뒤(max 또는 right) 인덱스를 저장하는 변수를 설정하고

각각 1과 n으로 초기화 한다.

min은 항상 Not bad version,  max 는 항상 bad version 이라고 가정하고 풀었기 때문에

양 끝값 확인하는 절차로 버전1이 배드버전인지 확인하는 코드를 추가로 넣었다.

 

2. 그 가운데인덱스를 API호출로 확인 후

가운데가 Bad version 이면 max 인덱스를 mid로 옮기고, Bad version 이 아닌 경우 min을 mid로 옮긴다.

여기서 중요한것은 중간값을 구할 때

mid = (min + max) / 2 로 구하면 overflow 가 일어날 수 있으므로

mid = min + (max - min)/2 라고 써줘야한다는 것이다.

 

두 수식은 사람눈에는 비슷하지만 컴퓨터가 볼 때는... 두 수의 합이 자료형 사이즈를 넘어버리면 완전히 다른 식이 된다.

 

3. 이렇게 반복하다가 min 과 max 가 만나면

첫번째 Bad version 은 max 이므로 max를 리턴해주면 된다.

 

 

아래는 내 해답

/* The isBadVersion API is defined in the parent class VersionControl.
      def isBadVersion(version: Int): Boolean = {} */

class Solution: VersionControl() {
    override fun firstBadVersion(n: Int) : Int {
        var min = 1
        var max = n
        var mid : Int
        if(isBadVersion(min)) return 1
        
        while(min+1 < max) {
            mid = min + (max-min)/ 2
            if(isBadVersion(mid)) 
            {
                max = mid
            } else {
                min = mid
            }
        }
        return max
	}
}

 

 

isBadVersion API 가 구현이 안 된 상태로 코딩을하려니 디버깅이 어려워서 힘들었다....

오래걸릴줄 알았으면 isBadVersion 구현해서 IDE 디버거를 썼을텐데

흠 개쉽군 하고 그냥 릿코드 사이트에서 풀다가 1시간은 족히걸렸다.... 힝힝

 

프로그래밍 첫 강의에서 배운 자료형의 사이즈..... 역시 기본이 중요한 것이다....

728x90
728x90

팀플하느라 강제로 깃을 써본적은있는데..

 

공부한 내용들을 정리해야지 하며 미루고 미루다 오늘은 해본다...

 

찔금찔금 깃을 배우고 써봐서 뭔가 다 해보긴 한것들인데 막상 하려니 뭐부터 할지 혼란스러워서 미뤄왔기에 과정을 정리해본다.

엄청엄청 쉽게쓸생각이니까 나의 미천한 글이 처음하시는 분들에게 도움이 되길 바람

물론 첫술에 배부를 수 없으니 더 좋은 글들도 찾아보시긜....

 

 

1. GITHUB 회원가입 : 은 패스

구글 네이버 가입하는거랑 비슷허다

 

2. Repository 생성

들어가면 메인부터 만들기가 잘 보이는곳에있다..

만들기를 누르고

저장소이름 / 내용을 간단히 적으면 된다

부끄러우면 프라이빗 해도 되지만 뭐... 난 그냥 다 퍼블릭으로 했다 하하

열심히 해보고 싶은 프로젝트는 프로젝트 단위로 만들었고 

자잔한 공부는 비슷한 주제끼리 묶기로 했다(오늘 만드는 레포지토리 : 운영체제와 리눅스 시스템콜)

 

로컬에서 git init을 하고 그걸 올려도 되긴 하나 나는 repository 생성 후 clone 이 왠지 더 좋당

Add a ReadMe 나 .gitignore 는 선택하던말던 상관없는데

리드미만 추가하는걸 선호한다

.gitignore 는 아래에서 작성할거고

Readme는 개대충 깃허브가 자동으로 한두줄이라도 써주기때문에 체크하면 편하다고 갠적으로 생각(찐 프로젝트는 리드미가 엄청 중요하지만.... 일단은 올리는게 중요하니까 그건 나중에 생각하자)

 

3. git clone

로컬에서 입력하는 명령어. 방금 위에서 생성한 레포의 링크를 넣으면

깃이 들어있는..?폴더를 통째 생성해준다.

명령어는

git clone [레포지토리URL] 이다.

 

 

 

누르면 URL이 복사되고..

ssh 를 쓰고싶으면 ssh 키를 받아야하는데 그건 다음에 글을 또 써봐야겠담...

난 저번에 받아둔게 있어서 그냥 고고

일단 HTTPS해도 갠춘하다

 

terminal 로 해당 폴더를 놓을 경로에 가서

명령어를 치면 된당

(윈도우 쓰는 사람이면 깃 설치했으면 아마...폴더에서 우클릭하면 GIT Bash 라는게 있고

그거 누르면 CLI창이 뜰것이당 거기서 명령어 치면 되고,

맥의 경우는 파인더에서 맨밑에 조그맣게 경로가 나오는데 거기서 폴더 우클릭하면 Open in terminal 이 있다.

리눅스쓰는사람은....뭐 내가 설명을...할필요가있나....?ㅋㅋㅋ)

 

그러면 짜잔! .git 디렉토리가 있는 reposirtory 와 동일한 디렉토리가 만들어진당

이거 열면 .git 이랑 리드미 뭐 고런거 그대로 들어있음~

 

 

3. 소스코드 업로드 / 코딩

 나는 이미 작성해둔 코드가 있었으므로 복붙(원래 경로에는 오만게 다있어서 복잡하고... 깃허브에는 내가 다시 참고하고플것 같은거... 좀 깔끔하게 올려보려한다...)

또, 약간 레포지토리 안에서도 주제별로 나누려고 디렉토리를 하나 더 만들었다

Makefile 은 요 디렉토리 안에 작성할 것이다

 

 

 

4. .gitignore 와 Makefile 작성(패스해도 ㄱㅊ)

 

.gitignore : github에 올리지 않는 파일이나 디렉토리, 확장자를 설정한다. API key같은것도 이그노어 해주어야한다.

걍 파일명을 .gitignore로 하고 아무 에디터나 써서 내용을 적으면 된다.

메모장 ㅇㅋ

 

나는 오늘은.. 확장자 .a 와 .o 를 일단 제외해 주었다.

본인이 쓰는 언어등에 따라 git ignore를 적절히 생성해주는 사이트들도 있다

>> https://www.toptal.com/developers/gitignore

 

gitignore.io

Create useful .gitignore files for your project

www.toptal.com

안드 프로젝트 이그노어는 여기서 도움을 받을 것이다.... 그런 프로젝트들은 구조가 너무 복잡시럽기땜시....

 

내가 작성한 파일은 다음과 같다(꼴랑두줄)

.gitignore 사용법을 좀 기억해두고자 주석으로 메모를 조금 해뒀다

# Just file name 그냥 파일 이름
# /[filename] : file on certain route
# [dir name]/ : ends with / means it's a directory /로 끝나면 디렉토리
# ![file not to ignore or exception] 
# [route]/**/[all the files have this name]
# *.txt : all txt files

*.o
*.a

 

그리고 Makefile..

이건 빌드할때의 규칙을 설정해둔것으로..

나중에 다른사람이 다운받거나 내가 코드를 조금씩 고치고 계속 새로 빌드해서 실행할 때

해당 디렉토리에서 make 만 치면 설정대로 빌드가 되도록 해둔 것이다.

 

이건 나중에 결국은 알아야겠지만 뭐라는건지 싶으면 몰라도될거같다... 왜냐면 저거 공부하는데만도 나는 시간이 좀 걸렷엇기떄문 ㅠ  걍 이거 없으면 매번 통합개발툴로 빌드하던지 뭐 그렇게하면된다... 배포하는거 아니고 공부하는거니깜...

파일명은 Makefile (확장자x)

 

나는 아래와 같이 작성해주었다

쓰레드를 쓰는 코드라 옵션으로 -lpthread 추가..

 

CC = gcc
CFLAGS =
LDFLAGS = -lpthread

.SUFFIXES : .c .o
.c.o :
	$(CC) -c $(CFLAGS) $<
	
ALL = shm sipc1 sipc2 sipc_sem sipc_m

all : $(ALL)

shm : shm.o
	$(CC) -o $@ $< $(LDFLAGS)
	
sipc1 : sipc1.o
	$(CC) -o $@ $< $(LDFLAGS)

sipc2 : sipc.o
	$(CC) -o $@ $< $(LDFLAGS)

sipc_sem : sipc_sem.o
	$(CC) -o $@ $< $(LDFLAGS)

sipc_m : sipc_m
	$(CC) -o $@ $< $(LDFLAGS)

clean :
	rm -rf *.o $(ALL)

 

 

 

 

4. git add / git commit

add는 스테이지..(앞으로 깃에 올라갈애들이 대기하는 곳..)에 올리는 것이고 (깃이 기억할 상태를 조성?하는것)

commit 은 깃에게 이상태를 기억해! 하는것이다

push 는 기억한 상태를 온라인에도 동기화시키는 것이다..

 

스테이지에 착착올리고 하나둘셋~ 하고 사진 촥 찍는다고 생각하면 된다 하하하

 

git add . << 에서 . 은 전부라는 뜻이당

git status 는 상태를 볼 수 있다

지금 다 새파일들이라서 newfile로 뜸

 

이제 커밋을 해보자

git commit

을 하면 현재 스테이지에 있는 애들이 다 저장되는데

보통 -m "커밋메시지"

옵션을 넣는다...

뭔커밋인지 요량껏 쓰면된다.

 

그리고 git status 로 확인하면

당신의 브랜치가 origin/main 으로부터 1개 앞선다고 나오는데

원격 레포지토리(깃허브) 보다 내가 1개 커밋을 많이했다는 뜻이당

 

고로 지금 한 커밋을 깃허브에도 업데이트 해주어야한당

 

5. git push

git push [원격저장소이름] [푸시하려는브랜치]

젤 기본값은 origin 과 main 이다

(원래 master 였는데 main으로 바꼈네...몰랐네...)

 

이렇게 하면

 

짜잔!

 

 

오늘 새로 올린 IPC_Synchronization 폴더와 내용물들이 깃허브에 잘올라갔당

 

 

 

엄청 많은 내용들이 생략되었으나

세상에 좋은 책도 글도 너무 많으니 참고할 수 있을거라고 생각한다.

 

나는 그저 처음할때 너무 막막하고 자세한 설명들이 더 어렵게 느껴졌었기에 허접하지만 이렇게 글을 남겨본다

 

 

그럼 굿나잇 나자신!!

728x90
728x90

1.안드 프로그래밍 실습과제

 

프로젝트만 13개...

레이아웃...이 과제라서 금방할줄알았는데 이게 머선일이고.....

노가다를 거듭해 결국 과제를 마쳤다 3시간은 걸린거같당

 

저 프로젝트들 깃에 올려볼까했는데 .ignore를 저기 보이는 디렉토리에 놨더니 인터넷서 주워온 .ignore는 경로가 적절하지않아서......

고민하다가 일단은 말기로했다

그래도 시간날때 .gitignore 연습해서 올려봐야지

 

예전에 오픈소스 플밍 들을때 깃 배우고 시험봐도 하나도 모르겠는데 이게 무슨 쓸모인고..생각했는데

 

여전히 깃 초보지만 그래도 찾아보면 쪼금 알아들을 배경지식은 그 수업때 잘 얻은거같다....

 

2. 리눅스 프로그래밍

 

vi랑 많이 데면데면한데 좀 친해지는 중이다

오늘 원래 c프로그래밍 실습하는 날였는데 cli에서 코딩하고 빌드하고 하는게 하나도 이해가 안되고있었는데 왠지 gcc로 컴파일하고 실행하고 요런 흐름들이 조각조각나있던게 사라락 합쳐졌다....

쪽팔림을 무시해버리고 궁굼한거 맘대로 교수님께 다 물어본 효과가 나오는거같당

앞으로도 교수님을 많이 괴롭혀서 많이 배워야징 얌얌

 

슬슬 바빠진다 키보드 치는 시간이 많아진다 거북목이 되어간다 으윽.... 왜 2시반이냐구

 

728x90
728x90
더보기

수업과 과제를 하기위해 리눅스(우분투20.04)에 새로 VS code 를 설치했다..
C/C++ Extension 을 설치하고

그리고 시험삼아 Hello world 를 실행해봤는데 요런 오류가났당

 

Error: The cppbuild task detection didn't contribute a task for the following configuration

 

게에엑...

그리고 구글링해보니 익스텐션 최신버전에서 컴파일 오류가 났었다는 사람이 있어서

대충 최신인 1.6.0 에서 1.3.0으로 다운그레이드 시키니 컴파일이 잘 된당

 

1,2,3 순서대로 찾아가서 다운그레이드하기!

 

 

 

참고한 글 :

https://www.python2.net/questions-1284162.htm

728x90

+ Recent posts