#please first open a folder in order to do advanced debug configuration 해결방법

 

Python을 하시다 보면 위의 메시지를 확인하실 수 있습니다. 

 

이는 디버깅할때 문제가 나오는데 맨땅에 시작하다 보니 저도 구글링을 해서 알았네요. 

 

 

먼저 폴더로 열지 않은것이고 두번째 하셔야 할 것이  launch.json을 만드시는 일입니다. 

 

 

 

 

'Programming > Python' 카테고리의 다른 글

Python 개발시작 2일차  (0) 2019.06.20
Python 개발 공부 1일차  (0) 2019.06.19
개발을 처음 시작하려고 합니다.  (0) 2019.06.18
Python '_'(언더스코어) 의미  (0) 2019.06.17
Visual studio 2019 - Python  (0) 2019.05.29

파이썬 개발공부를 시작한지 2일차.. 

 

오늘은 뭔가 업무가 많네요.ㅠㅠ 업무 처리하느라 틈틈히 개발 생각을 계속하면서 한줄 한줄 시작해 보고 있습니다. 

 

먼저 google calendar의 소스를 다운 받았어요. 

 

from __future__ import print_function
import datetime
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

# If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://www.googleapis.com/auth/calendar.readonly']

def main():
    """Shows basic usage of the Google Calendar API.
    Prints the start and name of the next 10 events on the user's calendar.
    """
    creds = None
    # The file token.pickle stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server()
        # Save the credentials for the next run
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)

    service = build('calendar', 'v3', credentials=creds)

    # Call the Calendar API
    now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time
    print('Getting the upcoming 10 events')
    events_result = service.events().list(calendarId='primary', timeMin=now,
                                        maxResults=10, singleEvents=True,
                                        orderBy='startTime').execute()
    events = events_result.get('items', [])

    if not events:
        print('No upcoming events found.')
    for event in events:
        start = event['start'].get('dateTime', event['start'].get('date'))
        print(start, event['summary'])

if __name__ == '__main__':
    main()
# [END calendar_quickstart]

 

 

위의 소스에 토큰은 없어서 일단 복사해보았습니다. 

 

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, qApp
from PyQt5.QtGui import QIcon



class MyApp(QMainWindow):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        exitAction = QAction(QIcon('exit.png'), 'Exit', self)   # 아이콘 exit.png와 'Exit' 라벨을 갖는 하나의 동작 action을 만듬
        exitAction.setShortcut('Ctrl+Q')                        # 단축키를 정할때 사용함
        exitAction.setStatusTip('Exit application')             # 상태바에 나타날 상태팁을 setStatusTip() 메서드를 사용하여 설정
        exitAction.triggered.connect(qApp.quit)                 # 동작을 선택했을때 QApplication위젯의 quit() 메서드에 연결 -> 종료

        self.statusBar()

        menubar = self.menuBar()
        menubar.setNativeMenuBar(False)
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(exitAction)

        self.setWindowTitle("Hwan's Application")         # 메뉴툴바 타이틀
        self.move(300, 0)                                 # 위치를 나타냄 (x축, y축)
        self.resize(1500, 1000)                           # 위젯의 크기 단위는 px  
        self.show()                                       # 위젯을 스크린에 보여주는 것임 


    

if __name__ == '__main__':          # __name__ :현재 모듈의 이름이 저장되는 내장 변수 (만약 다른 모듈을 import해서 실행하면 name변수는 다른 모듈이 됨)

    app = QApplication(sys.argv)    # Application 객체생성     
    ex = MyApp()
    sys.exit(app.exec_())
    

 

제 소스는 이렇게 적어 나가고 있어요. 주석을 달면서 ㅎㅎ 뭔가 확실하게 한줄 한줄 알아야 할 것 같아서요. 

 

일단은 이렇게 시작하면서 python designer.exe.를 사용하지 않고, 직접 UI를 하나씩 짜보면서 문제마다 하나씩 해결해 봐야겠습니다. 

 

 

현재까지는 여기까지 진행되었습니다. 

너무 프로그래밍 못한다고 욕하시면 안되요!! ㅠㅠ

 

오늘 저녁에는 다른거라도 업데이트 시켜 나가야겠습니다. ㅎㅎ 

 

이상 투투아빠였습니다. ㅎ

어제 개발 다짐을 하고 뭘 할까~ 뭘 만들어 볼까? 계속 고민을 하던 중 제가 필요한 어플을 만들어보자 하고 생각했습니다. 

그래서 생각했던 어플은 구글 캘린더를 PC application으로 편하게 사용하며, 연동도 되고, 메모도 사용할 수 있는 걸 만들어 보자!!!

 

(뭔가 생각만...)

 

가장 먼저 UI를 디자인 하고 기능을 생각할지? 기능을 먼저 생각하고? UI를 생각할지?

UI는 어떻게 만들지? design application은 있을까?

이런 고민들을 엄청 많이 했어요. 

 

기능들이 복잡해서 일단은 심플하게 UI를 생각했습니다. 

 

 

이렇 구성으로 UI를 만들 예정이예요.. 그리고 calendar와 task와 메모가 연동이 되면 좋겠더라구요. (뭔가 어려울듯 싶지만요..ㅎㅎ)

 

처음부터 너무 어려운 프로젝트를 하는건 아닌지 고민도 되었습니다. 

하지만 일단은 시작했으니 무라도 썰어야죠?! ㅎㅎ

 

고민을 하면서 기능 부분을 생각 했어요!

 

  • Google calendar
    • Google API 호출
    • 등록 수정 / 삭제 기능 추가
    • Sync 시간 설정 /  수동 Sync 기능 추가
    • 프로세스 바를 이용한 진행상태 확인
    • Task 및 메모로 연동 (메모도 task 및 calendar와 연동)
  • Google Task
    • Google calendar와 연동(버튼을 이용하여 calendar와 메모에 집어 넣기)
    • 완료된 일정 아래 부분에 표시하기 (월/주/일)
    • Dead-line 쉽게 설정할 수 있도록 고민해서 개발해보기
  • Memo
    • Memo history 확인할 수 있도록 설정
    • 설정 시간별 자동 저장할 수 있는 tread 개발(DB를 무엇으로 사용할 것인지 고민 중입니다.)
    • Google calendar 및 Task에 연동하기

이렇게 기능들을 고민해 보았습니다. 

기능들을 고민한 뒤 어떻게 구글 캘린더 api를 사용할 것인가? 검색을 해 보았죠~

 

https://developers.google.com/calendar/quickstart/python

 

이곳에 들어가셔서 구글 아이디로 로그인하시고 python api를 사용하는 방법을 확인하시면 될것 같습니다. 

자!! 그럼 UI를 만드는 방법을 찾아보았습니다. 

 

python UI를 쉽게 만드는 방법으로는 anaconda를 설치하실때 이미 설치되어 있는 designer.exe파일을 실행 시켜서 사용하시면 쉽게 UI를 제작하실 수 있어요. 

 

anaconda python GUI designer.exe 파일

저도 한번 사용을 해보 았습니다.  그런데 저는 시간이 걸리더라도 뭔가 기초를 탄탄하게 하고 싶다는 생각이 들었어요.

그래서 저는 GUI도 내가 직접 코딩해서 만들어보자 생각이 들었습니다. 

그래서 GUI를 담당하는 PyQt5 라이브러리를 검색하다가 좋은 사이트를 발견했어요. 

 

https://wikidocs.net/21849

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

이곳에 들어가시면 PyQt5를 이용해서 UI를 만들 수 있도록 한글로 쉽게 작성되어 있습니다. 

 

삽질의 시작이 이곳에서부터 시작할 것 같습니다. ㅎ

 

열정은 많은데 머리가 안따라가네요....

저는 개발을 대학교 2학년때 처음 시작했어요. 

 

당시 Extjs라는 웹페이지 내에 윈도우 xp가 있던 신기한 프로그램을 따라 했었죠.. 

 

당시에는 아무런 생각도 없이 무조건 오픈소스를 찾고 복사해서 짜맞춰보고 실행 되게 하고.. 오류 제거하고.. 

 

이것만 주구장창 했던것 같습니다. 프로젝트를 맞치고 한동안 네트워크 공부에 전념했습니다. 

 

그리고 다시 찾아온 프로그래밍.. 무조건 일이 닥치는데로 오픈 소스를 이용해서 프로그램을 다시 짜 맞추기 시작했고 .. 

 

당시에는 C#을 통해 개발을 했습니다.  

 

나이가 지긋하신 사수분이 계셨는데 C#그래프 그릴때 framework를 사용하지 않고.. 단순 점으로만 프로그래밍 하느라.. 상당히 애를 먹었습니다. 

 

하지만.. 그걸로 또 끝이 나버렸습니다... 뭔가 확실하게 하지 못하고 DB쪽도 뭔가 애매하게... (지금은 기억도 나지 않음)

 

소켓 통신(당시에는 serial 통신)도 기억에 가물가물하고.. 그러네요.. 

 

지금은 Deep learning을 공부하고 있습니다. 일단 책을 보면서 기본 개념을 익히고.. 인터넷에서도 자료를 찾아 읽고 있습니다. 

 

프로그래밍 언어는 python을 사용해보려고 하구요.. 

 

예전에 포스팅을 많이 했었는데.. 다 삭제한게 너무너무 아쉽네요... 

 

혹시나 같이 공부하시거나.. 제 사수가 되어주시거나.. 같이 프로젝트를 해보실 분이 있으시면 

 

heatolab@naver.com 으로 언제든지 메일 부탁드립니다. 

 

참고로 저는 서울에서 현재 직장생활 중이며, 퇴근후 시간이 프리한 상태입니다. 

 


 

그럼 제가 공부하는 방법을 생각했는데 이 길이 맞을지 모르겠네요. 

 

1. 일단 프로그램 공부를 위해 프로젝트 하나를 기획한다. 

2. 프로젝트에 대한 오픈 소스를 조합하면서 무작정 코딩을 시도해본다. 

3. 함수들을 onenote에 정리하며, 사용방법에 대해 정리한다. 현재 노트는 원노트를 사용하고 있습니다. 

4. 프로젝트 진행 중 소스에 대한 내용을 기술 문서와 같이 정리한다. 

5. 시간이 걸리겠지만 나만의 결과보고서를 작성해본다. 

 

저는 현재 국책기획 담당을 하고 있어서.. 문서 작성에도 나중에 도움이 될만한게 있을거 같아 함께 시도해보려고 합니다. 

 

이 블로그에 저만의 프로젝트를 한번 진행해보며 날마다 포스팅을 하도록 노력해봐야겠네요. 

 

 

그럼 연락도 기다리고!! 한번 시작해보겠습니다.. 먼저 프로젝트 하나 정해야겠네요. ㅎㅎ 

 

뭐가 좋을까요? 의견도 달아주세용~~

파이썬 ' _ ' 이 특수문자를 많이 보셨을 겁니다. 

underscore, _ 이렇게 표현하죠~

 

타 언어에서 언더스코는 스네이크 표기법 & 변수나 함수명에서 많이 사용 되었습니다. 

 

파이썬에서는 for _ in range() 에서 많이 사용되 코딩하시는 분들은 많이 익숙하시라 생각됩니다. 

 

언더스코어에는 5가지 경우가 있습니다. 

 

1. 인터프리터에서 마지막 값을 저장할때

2. 값을 무시하고 싶을때

3. 변수나 함수명에 특별한 의미 또는 기능을 부여할때

4. 국제화 / 지역화 함수로써 사용할 때

5. 숫자 리터럴값의 자릿수 구분을 위한 구분자로 쓸때

 

 

Cookiecutter 사용

 

먼저 자세한 설명은 아래의 링크에 있어요. 

 

https://docs.microsoft.com/ko-kr/visualstudio/python/using-python-cookiecutter-templates?view=vs-2019

 

Python과 함께 CookieCutter 템플릿 사용 - Visual Studio

Visual Studio는 Python 코드용 템플릿을 검색하고 해당 템플릿으로 프로젝트를 만들기 위한 그래픽 Cookiecutter 확장을 지원합니다.

docs.microsoft.com

 

일단 cookiecuttersms visaul studio 2017이상에 설치되어 있답니다. 

저도 이번에 처음본거라서 그동안 몰랐네요. (저는 2015만 사용했었거든요.)

2019가 나온지 오랜 시간이 지나고 프로그래밍좀 다시 공부해볼까 하고 2019를 설치했습니다. 

 

cookiecutter 사용시 요구사항

1. python 3.3이상(32비트 or 64비트)

2. Anaconda3 4.2이상 (32비트 or 64비트)

3. python 인터프리터 사용하지 못하는 경우 새로운 인터프리터를 설치해줘야 합니다. 

 

 

JSON 예제

{
    "site_name": "web-app",
    "python_version": ["3.5.2", "2.7.12"],
    "use_azure": "y",

    "_visual_studio": {
        "site_name": {
            "label": "Site name",
            "description": "E.g. <site-name>.azurewebsites.net (can only contain alphanumeric characters and `-`)"
        },
        "python_version": {
            "label": "Python version",
            "description": "The version of Python to run the site on"
        },
        "use_azure" : {
            "label": "Use Azure",
            "description": "Include Azure deployment files",
            "selector": "yesno",
            "url": "https://azure.microsoft.com"
        }
    }
}

 

+ Recent posts