현재 내가 사용하고 있는 맥북 버전은 맥북 에어 mid 13년 버전이다. + 아이패드는 에어 3세대

따라서 카탈리나 os 업데이트를 하고 난 이후에 sidecar 기능은 사용할 수 없었다.

다양한 방법을 통해 강제로 sidecar 기능을 이용하려고 시도하다가 실패를 거듭한 끝에 다음과 같은 방법으로 성공했다.

 

방법
  • 먼저 혹시나 모를 상황을 대비해 /System/Library/PrivateFrameworks/SidecarCore.framework/Versions/A/SidecarCore 파일을 백업해둔다.
  • 시스템 무결성 보호(SIP) 상태를 다음과 같은 방법으로 해제한다.
    1. 먼저 터미널에서 $ csrutil status 를 통해 SIP 상태를 확인한다.
    2. enble 이라고 뜬다면 해제해야한다.
    3. 컴퓨터를 재시동 하면서 command + R 키를 눌러 복구 모드로 들어간다.
    4. 복구 모드에서 상단바에 있는 유틸리티-터미널을 통해 터미널을 킨다.
    5. 터미널에서 $ csrrutil disable 이라고 친다.
    6. 재시동
  • 터미널을 킨 후에 $ git clone http://dev.zeppel.eu/luca/SidecarCorePatch.git 를 통헤 깃 저장소를 클론한다.
  • $ cd SidecarCorePatch 를 통해 클론한 저장소로 이동한다
  • $ sudo swift patch.swift 를 통해 패치 실행
  • 재시동

시스템 환경 설정에 가면 사이드카 아이콘이 생긴 것을 확인할 수 있다.

 

연결 기기 없음

처음에 사이드카 기능이 생기고 난 후에 연결 기기 목록에 아이패드가 뜨지 않았다.

아이패드의 블루투스 기능과 맥북의 블루투스 기능을 모두 켠 후에 기기 목록에 아이패드가 떴다.

 

기기의 시간이 초과되었습니다

무선으로 사이드카를 연결하려고 시도했을 때, 기기의 시간이 초과 되었다고 하면서 계속 연결에 실패했다.

한번도 아이패드와 맥북을 유선으로 연결했던 적이 없었기에 유선으로 연결한 후에 신뢰할 수 있는 기기 연결을 하고 나니 연결에 성공했다.

USB선을 뽑으면 더 이상 연결이 가능하지 않아 연결을 해제 한다고 메세지가 뜨지만 선을 제거한 후에 무선 연결을 시도하니 연결이 무사히 되었다.

 

후기

정식 사용이 불가능한 데에는 다 이유가 있다.

화면이 엄청나게 깨지면서 가만히 있어도 지지직 거린다.

그래도 막혀있던 기능을 사용할 수 있게 된 데에 만족한다.

 

참고
 

Sidecar 기능을 이용하여 iPad를 Mac의 보조 디스플레이로 사용하기

Sidecar 기능을 이용해 iPad를 디스플레이처럼 사용하여 Mac 데스크탑을 확장하거나 미러링할 수 있습니다.

support.apple.com

 

luca/SidecarCorePatch

Enables Sidecar support on MacOS Catalina 10.15 Beta on non Apple supported devices.

dev.zeppel.eu

 

'Record' 카테고리의 다른 글

[Git] 깃 저장소 연결: git remote  (0) 2020.11.02
[방법] 위키백과 이미지 블로그에 업로드  (1) 2019.10.14
로고 이미지와 영상  (0) 2019.08.31
세부내용

아래의 Python으로 작성한 이전의 엑셀 양식 작성 프로그램을 웹사이트로 배포하였다.

( ※ 프로그램을 작동시킨 날짜가 양식의 작성일자에 들어갔으나 ERP의 수금일자가 작성일자가 되도록 수정하였음)

 

[개발] 전자세금계산서 엑셀 양식 작성 프로그램: Python

전자세금계산서 엑셀 양식 작성 프로그램 ERP 시스템(전사적 자원 관리 시스템)을 통해 다운로드한 엑셀 파일을 가지고 전자세금계산서 발급을 위한 엑셀 양식 파일을 채우는 프로그램을 만들기로 했다. 기존에 사..

codingslime.tistory.com

 

사이트
 

전자세금계산서 발행

 

mighty-cove-94866.herokuapp.com

 

코드
 

hynjin/runForHeroku

using flask web server. Contribute to hynjin/runForHeroku development by creating an account on GitHub.

github.com

 

사용방법

위의 주소로 접속하면 위와 같은 단순한 UI의 사이트에 접속할 수 있다.

전자세금계산서 발행을 위한 웹 사이트로 ERP 프로그램에서 다운로드 받은 엑셀 파일에서 [사업자번호, 수금날짜, 법인명, 대표자, 업태, 종목, 사업장주소, 공급가액, 세액] 항목과 별도의 이메일 파일에서 [사업자번호, 이메일주소]를 사용하여 전자세금계산서 양식을 채운 엑셀 파일을 다운할 수 있다.

 

  • 모든 파일은 xlsx 파일로 업로드 해야하며 xlsx 파일로 다운로드한다. (xls 파일 불가능)
  • ERP 파일 (업로드)
    - [사업자번호, 수금날짜, 법인명, 대표자, 업태, 종목, 사업장주소, 공급가액, 세액] 항목이 반드시 포함되어 있어야함
    - 사업자명이나 수금액이 공란일 경우 세금계산서에 작성하지 않음

    - 첫번째 행은 공란이어야함(두번째 행에서부터 파일 시작해야함)
  • 이메일 파일 (업로드)
    -
    [사업자번호, 이메일주소] 항목이 필요하나 필수는 아님
    - 이메일 파일에 정보가 없을 경우 세금계산서 항목에 공란으로 작성
  • 전자세금계산서 파일 (다운로드)
    - ERP 파일와 이메일 파일을 모두 업로드 한 후 [다운로드] 버튼을 눌러 다운로드 할 수 있음
    - 필수 작성 항목인 [전자(세금)계산서 종류, 작성일자, 공급받는자 등록번호, 공급받는자 상호, 공급받는자 성명, 공급가액, 세액, 일자1, 공급가액1, 세액1, 영수(01)청구(02)] 항목을 각각 ERP 파일에서 ["01(영수)", 수금일자, 사업자번호, 법인명, 대표자, 공급가액, 세액, 수금일자의 일자, 공급가액, 세액, "01(영수)"] 항목으로 작성
    - 필수 작성 항목 이외에도 [공급받는자 사업장주소, 공급받는자 업태, 공급받는자 종목] 항목을 각각 ERP 파일의
    - [공급받는자 이메일1] 항목은 별도의 이메일 파일에서 사업자번호와 ERP 파일의 사업자번호가 일치하는 이메일 주소로 작성
    - [품목1] 항목은 세금계산서 작성 "월(다운로드한 월) + CCTV 용역료"으로 작성
  • 파일이나 파일 내의 항목이 잘못 된 경우 'Internal Server Error'가 발생할 수 있다. 이 경우 새로고침하여 웹사이트에 재접속 한 후에 파일의 상태를 확인한 후 다시 시도하면 된다.
  • 이 프로그램은 특정 회사의 요청으로 개발 되었으며 그로 인해 [전자(세금)계산서 종류, 품목1, 영수(01)청구(02)] 항목은 특정 회사의 요구사항에 맞게 자동 작성함
Syntex

- 실행 전에 명령이 화면에 출력되고 명령이 실행

- 실행 전 명령 출력을 막으려면 명령어 앞에 @

- 변수는 대문자로, 변수를 사용하려면 $(변수)형태

- 별도의 명령어 없이 makefile만 호출한다면 첫번째 명령어 실행

 

NAME = prog //NAME 변수에 prog 내용 선언
SRC = source.c //SRC 변수에 파일 명, 여러 파일 명 선언 가능
all : &(NAME) //all 명령
$(NAME): //변수 이름으로 명령어 실행
gcc -o $(NAME) $(SRC) //name 변수 값 이름으로 컴파일 (object(*.o)파일 생성)
fclean: //빌드 과정에서 생성된 파일을 삭제
/bin/rm -f $(NAME)
re: fclean all //파일 삭제 후 다시 all 명령 실행

 

실행

make (명령어) 통해 실행 가능

response.headers["Content-Disposition"] = "attachment; filename=%s.xlsx" % date

현재의 날짜를 받아와서 날짜를 포함한 파일이름을 저장하려고 하니 다음과 같은 에러가 계속 떴다.

UnicodeEncodeError: 'latin-1' codec can't encode characters

 

dt = datetime.datetime.now()
date = dt.strftime("%m월세금계산서").encode('utf-8')

아무리 변수 타입을 확인해봐도 dt는 str 타입이었고, encode('utf-8')을 했더니 바이트 타입이 되어 그대로 파일명이 'b'12_xec_x9b_x94_xec_x84_xb8_xea_xb8_x88_xea_xb3_x84_xec_x82_xb0_xec_x84_x9c''이 되어버렸다.

 

dt = datetime.datetime.now()
date = dt.strftime("%m월세금계산서").encode('utf-8').decode('iso-8859-1')

encode('utf-8').decode('iso-8859-1') 했더니 문제가 해결되었다.

 

/upload url을 통해서 엑셀 파일을 업로드 한 다음 별도의 파일 저장없이 바로 html 화면에 보여줌

from flask import Flask, render_template, request, Response
from werkzeug import secure_filename
import pandas as pd
app = Flask(__name__)
@app.route("/upload", methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
print(request.files['file'])
f = request.files['file']
data_xls = pd.read_excel(f)
return data_xls.to_html()
return '''
<!doctype html>
<title>Upload an excel file</title>
<h1>Excel file upload</h1>
<form action="" method=post enctype=multipart/form-data>
<p><input type=file name=file><input type=submit value=Upload>
</form>
'''

 

flask @app.route('/')
def index():
    return render_template('index.html')

 

위와 같이 render_template을 사용하였는데 500 internal server error가 뜬다면

index.html 파일이 templates 폴더 안에 있는지 확인

OSError: [Errno 48] Address already in use

 

-> ps -fA | grep python

 

-> kill 36041

 

-> flask run 재실행

웹 프로그램을 개발하고 테스트하는 데는 아무런 문제없지만 다른 사람이 쓸 수 있도록 배포하고자 할 경우에 웹서버를 운영하는 것에 어려움이 있다. 직접 서버를 운영하려면 항상 서버용 컴퓨터가 켜져 있어야 하기 때문에 부담스러운 일이다. 다행히 깃허브를 이용하면 무료로 웹호스팅 기능을 사용할 수 있다는 걸 알게 되었다.

 

방법

우선 Repositories를 새로 만들어야한다. 'New' 버튼을 눌러 새로운 저장소를 만든다.

다음과 같이 저장소 이름을 정한 다음 'Create repository' 버튼을 눌러 저장소를 생성한다.

웹 서버가 클라이언트에게 보여줄 페이지가 필요하니 html 파일을 저장소에 업로드하기 위해 'Upload files' 버튼을 누른다.

다음과 같은 내용의 index.html 파일을 업로드 한다.

<html>
<head>
<meta charset="utf-8">
</head>
<body>
<h1>
Hello
</h1>
</body>
</html>

 깃허브에서 변경된 사항을 업로드하기 위해서는 변경 사항을 설명하는 comment를 쓰고 'Commit Changes' 버튼을 눌러 변경 사항을 저장한다.

html 파일을 업로드한 후에 'Settings' 버튼을 누른다.

세팅 페이지에서 스크롤을 아래로 내리면 다음과 같이 GitHub Pages라는 부분을 볼 수 있다. None이라고 쓰인 부분을 누른다.

master branch 부분을 누른다.

성공적으로 등록이 된 경우 다음과 같이 주소가 나타난다.

주소를 통해 내가 올린 index.html 파일의 내용을 확인할 수 있다. 

 

https://hynjin.github.io/testForWebHosting/

 

hynjin.github.io

 

 

 

 

도메인 이름 변경

도메인을 <username>.github.io 외에 다른 것으로 하고자 할 경우 아래와 같은 방법이 있다.

생활코딩에서 이에 대한 자세한 설명을 제공하고 있다.

 

github pages에 도메인 연결하기 - 생활코딩

수업소개 나의 서버가 아닌 타사의 서비스를 이용하는 경우에 그 서비스에 도메인 이름을 연결시키는 방법을 알아봅니다. 티스토리나 카페 24 쇼핑몰과 같은 서비스에도 적용되는 방법입니다.  강의

opentutorials.org

 

깃허브 도메인 이름 변경 방법 설명

 

Managing a custom domain for your GitHub Pages site - GitHub Help

GitHub.com GitHub Pages Configuring a custom domain for your GitHub Pages site Managing a custom domain for your GitHub Pages site Managing a custom domain for your GitHub Pages site You can set up or update certain DNS records and your repository settings

help.github.com

깃허브 도메인 이름 변경에 문제가 생겼을 경우

 

Troubleshooting custom domains and GitHub Pages - GitHub Help

GitHub.com GitHub Pages Configuring a custom domain for your GitHub Pages site Troubleshooting custom domains and GitHub Pages Troubleshooting custom domains and GitHub Pages You can check for common errors to resolve issues with custom domains or HTTPS fo

help.github.com

단점

기본적으로 깃허브의 웹호스팅은 정적(static) 사이트만을 지원한다. 즉, php나 python 같은 언어로 웹사이트를 구현한 경우 '405 Not Allowed'와 같은 에러를 마주하게 된다.

이러한 문제를 해결하기 위해 깃허브는 지킬(Jekyll)을 built-in support를 추천한다. 이는 Ruby로 된 웹사이트에 특히 적합하다.

 

About GitHub Pages and Jekyll - GitHub Help

GitHub.com GitHub Pages Setting up a GitHub Pages site with Jekyll About GitHub Pages and Jekyll About GitHub Pages and Jekyll Jekyll is a static site generator with built-in support for GitHub Pages. GitHub Pages is available in public repositories with G

help.github.com

파이썬의 경우에는 펠리칸(Pelican)이 적합한 편이라고 한다. 다음 사이트에서 펠리칸의 설치과 사용 방법에 대해 자세히 알 수 있다.

 

Run your blog on GitHub Pages with Python

Create a blog with Pelican, a Python-based blogging platform that works well with GitHub.

opensource.com

 

참고

생활코딩, 웹호스팅(github pages), https://opentutorials.org/course/3084/18891

+ Recent posts