Language 129

[pywebview] "X" 버튼 (close) 누르면 webview hide 하도록 구현

Window UI 에서 오른쪽 위 X 버튼을 누르면 창이 사라지고 tray 의 Show 메뉴를 누르면 다시 나타나는 기능을 구현하고자 한다. 이를 위해 링크(API | pywebview (flowrl.com))를 검토해 보니 closing event를 처리하는 on_closing 내에서 False 를 return 하면 close 처리를 하지 않는다는 것을 확인했다. 이에 아래와 같이 on_closing 구문내에 hide 기능을 넣고 False를 return 하면 될 것으로 생각하고 구현하였지만, 해당 구문을 타게 되면 CPU 를 100%를 먹으면서 프로그램이 "응답 없음"이 되버리면서 죽어 버렸다. def webview_subprocess(conn_parent, conn_child): ... window..

Language/Python 2021.09.12

[pywebview] pystray를 이용한 hide/show 제어

pystray 로 Windows tray 를 이용하여 program을 제어할 수 있다. (pytray 아니고 pystray) pystray · PyPI [pystray 를 이용해 tray에서 Hide, Show, Quit 기능 추가] import pystray from pystray import MenuItem from pystray import Menu ... image_path = Image.open(base_path + '/res/tray_icon.png') menu = Menu(MenuItem('Hide', lambda: send_cmd_to_window(parent_pipe, 'hide')), MenuItem('Show', lambda: send_cmd_to_window(parent_pipe, ..

Language/Python 2021.09.12

[pywebview] subprocess 를 이용한 pywebview 분리 실행

pywebview를 실행하면 main thread 내에서 다른 코드 수행이 불가능하다. 이에 별도의 process로 분리하여 pywebview를 수행시키면 별도의 코드를 수행할 수 있다. pywebview using subprocess · TechNoteGit/pywebview_example@540c4c9 (github.com) import webview from multiprocessing import Process, Pipe def webview_subprocess(child_pipe): window = webview.create_window('TechNote', 'https://technote.kr') webview.start(cmd_recv, [window, child_pipe], gui='cef..

Language/Python 2021.09.11

[pyinstaller] TypeError: an integer is required (got type bytes)

pyinstaller 로 작업하다 "TypeError: an integer is required (got type bytes)" 에러가 발생하였다. 이와 같이 에러가 발생할 때는 pyinstaller의 버전을 업그레이드하면 문제가 해결된다. [pyinstaller 업데이트] PS D:\workspace\pywebview_example> pip install --upgrade pyinstaller Requirement already satisfied: pyinstaller in d:\python38\lib\site-packages (3.3.1) Collecting pyinstaller Downloading pyinstaller-4.5.1-py3-none-win_amd64.whl (1.9 MB) |█████..

Language/Python 2021.09.11

Python - pipenv 설정 및 사용

기본 python 환경과 별도로 사용할 수 있는 가상 환경 제공 원하는 python 버전을 설정하여 사용 해당 가상 환경만을 위한 python library 를 설치 Pipfile, Pipfile.lock (pip 설정 파일) 을 기반으로 python library 일괄 설치 pyinstaller 사용하여 변환시 꼭 필요한 library 만으로 최적화 변환 : pipenv 없이 pyinstaller로 exe 실행 환경 생성할 경우 기본 python 환경에서 수행시 설치된 python library 를 기준으로 생성하기 때문에 불필요한 library 들로 인해 변환 용량이 커짐. pipenv 를 사용하여 필요한 library 만 설치한 환경 이용시 최적화하여 변환 가능. pipenv Github : htt..

Language/Python 2021.06.27

[Design Pattern] Singleton 패턴

인스턴스가 하나 뿐인 객체를 만들 수 있게 해주는 패턴 특정 클래스에 대해 객체 인스턴스를 하나만 만들 수 있다. 사용 용도> 자원 관리 Pool, 특정 하드웨어를 Control하는 디바이스 드라이버 등 비슷한 역할을 하는 전역 변수와의 비교> 전역 변수는 애플리케이션 시작될 때 생성 불필요하게 자원을 잡아먹는 경우 발생 Singleton은 필요할 때 객체 생성 [Singleton 기본 구조] public class Singleton { private static Singleton uniqueInstance; private Singleton() {} public static Singleton getInstance() { if(uniqueInstance == null) uniqueInstance = new..

Language/Java 2020.11.26

Python - pywinauto, Microsoft Windows GUI 제어 자동화

pywinauto WebSite : http://pywinauto.github.io/ Github : https://github.com/pywinauto/pywinauto Doc : https://pywinauto.readthedocs.io/en/latest Microsoft Windows GUI 제어를 자동화할 수 있는 Python Module 설치 > pip3 install pywinauto (pywinauto 설치시 six, comtypes, pywin32 또한 의존성에 의해 자동 설치된다.) 사용의 예 1) "메모장" 실행 후 "Sample" 문자열을 입력하는 예제 from pywinauto.application import Application app = Application(backend="u..

Language/Python 2020.02.29

Python - PyInspect 설치 및 실행

1) https://github.com/pywinauto/py_inspect 에 접속하여 code 다운로드 2) python 3.5 이상, pywinauto, PyQt5 설치 3) "python py_inspect.py" 으로 실행 특이사항 1) 실행시 2회 실패 후 3회시 부터 정상 실행됨. 1회 실패시 에러 내용 D:\workspace\py_inspect-master>python py_inspect.py QWindowsContext: OleInitialize() failed: "COM error 0xffffffff80010106 RPC_E_CHANGED_MODE (Unknown error 0x080010106)" Traceback (most recent call last): File "py_inspe..

Language/Python 2020.02.28

Python - reduce(), 인자를 누적적으로 적용하여 결과를 반환

reduce >>> functools.reduce(function, iterable[, initializer]) iterable 한 data를 왼쪽에서 오른쪽으로 누적적으로 fuction 의 인자로 넣어 하나의 결과를 반환하는 함수 python2 에서는 builtin 함수로 바로 사용할 수 있었지만 python3 에서는 functools 모듈의 함수로 포함되어 있다. [Link : iterable 과 iterator, 그리고 반복문] functools.reduce(function, iterable[, initializer]) Apply function of two arguments cumulatively to the items of iterable, from left to right, so as to r..

Language/Python 2020.02.23

[Node.js] libuv 의 Design overview

libuv Node.js 를 위해 작성된 cross-platform 을 지원하는 라이브러리 (Event-driven (이벤트 기반) asynchronous (비동기) I/O (입출력)을 지원하기 위해 설계) libuv 의 전반적인 Design overview I/O (혹은 Event) loop 는 libuv 의 핵심 부분으로 모든 I/O 동작에 대해 Single thread 에서 처리 될 수 있도록 한다. 그리고 loop 가 반복되는 동안 I/O waiting 을 하지 않으므로 별도로 들어온 I/O 작업에 대해 수행할 수 있다. Network I/O libuv의 모든 Network I/O 는 non-blocking socket 위에서 동작하도록 되어 있다. 이를 위해 각 platform 에서 지원하는 방..

Language/Node.js 2020.02.23

Python - filter(), iterable 변수 내 값 중 조건에 맞는 값만 반환

filter >>> filter(function, iterable) iterable 한 data를 function 의 인자로 넣어 False 가 아닌 결과를 반환하는 인자들만 iterator 형태로 반환해 주는 함수 [Link : iterable 과 iterator, 그리고 반복문] filter(function, iterable) Construct an iterator from those elements of iterable for which function returns true. iterable may be either a sequence, a container which supports iteration, or an iterator. If function is None, the identity fu..

Language/Python 2020.02.22

[Node.js] 학습 관련 정보

[Javascript Event Loop 에 대한 이해] What the heck is the event loop anyway? | Philip Roberts | JSConf EU https://www.youtube.com/watch?v=8aGhZQkoFbQ [libuv 에 대한 이해] Node.js 에서 event-driven 비동기 I/O 모델을 지원 가능하게 하는 라이브러리의 Design Overview http://docs.libuv.org/en/v1.x/design.html[libuv 에 대한 이해] https://nodejs.org/ko/docs/guides/event-loop-timers-and-nexttick/ [Node.js 에 대한 이해] https://nodejs.dev/the-nod..

Language/Node.js 2020.02.22

Python - map(), 함수와 iterable 변수를 인자로 받아 iterator 결과를 반환

map >>> map(func, *iterables) iterable 한 data를 func 의 인자로 넣어 나온 결과들을 iterator 형태로 반환해 주는 함수 [Link : iterable 과 iterator, 그리고 반복문] map(function, iterable, ...) Return an iterator that applies function to every item of iterable, yielding the results. If additional iterable arguments are passed, function must take that many arguments and is applied to the items from all iterables in parallel. With ..

Language/Python 2020.02.19

일급 객체 (first-class object)

일급 객체 (first-class object) 는 아래와 같이 불리기도 한다. first-class citizen first-class type first-class entity first-class value 일급 객체의 특징 함수의 인자로 전달 가능 함수의 결과로 반환 가능 Python 에서는 정수, 문자열, list 등과 더불어 함수 또한 일급 객체이다. 이에 따라 아래와 같이 하나의 함수를 다른 함수의 인자로 넘겨줄 수 있다. >>> def reverse(data): ... return data[::-1] ... >>> data = ['zbc', 'tde', 'dcd', 'xfg'] >>> sorted(data, key=reverse) ['zbc', 'dcd', 'tde', 'xfg'] 할당문의..

Language 2020.02.17

Python - iterable 과 iterator, 그리고 반복문

iterable 의 정의 및 이해 iterator 의 정의 및 이해 iterable 의 정의 및 이해 iterable : 한 번에 하나의 member를 반환할 수 있는 object (객체)를 의미. iterator 로 변환이 가능. list, str, tuple 와 같은 모든 Sequence type dict, file object 혹은 sequence semantic 을 가진 __iter__() method 나 __getitem__() method 가 구현된 object iterable 은 for loop 나 sequence 가 필요한 zip(), map() 등에 사용될 수 있다. 일반적으로 iterator 로 변환 후 사용된다. iter() 를 이용해 해당 object의 iterator를 생성하여 사..

Language/Python 2020.01.02

Python - 문자열(str)/바이트(bytes) 시퀀스와 인코딩(encoding)/디코딩(decoding)

문자열(str) : 사람이 인지 가능한 문자의 형태. Python에서는 유니코드 문자를 기반으로 문자열 표시. (유니코드 문자를 나타내는 하나하나의 문자의 단위 원소를 코드 포인트라고 함.) 바이트(bytes) 시퀀스 : 기계가 처리하는 문자의 형태. 문자를 표현하는 실제 바이트. 인코딩(encoding) : 유니코트 문자로 표현되는 문자열을 바이트 시퀀스로 변환 디코딩(decoding) : 바이트 시퀀스를 유니코드 문자로 변환

Language/Python 2019.11.28

Python - Sequence Type을 Slice 하기

Python 은 데이터에 순서를 붙여 나열한 Sequence Type 으로 리스트(list), 튜플(tuple), 범위(range), 문자열(string) 등 여러 가지 형태를 제공한다. Python 은 이렇게 나열된 데이터들을 쪼갤(Slice) 수 있는데, ":" 을 slice notation 으로 하여 아래와 같은 기능을 제공하고 있다. Python Sequence Type 의 Slice Notation 기본 문법 variable[start:stop:step] [slice() 함수를 이용한 sequence type 변수 나누기] start, stop 의 값이 양수 일 경우 인덱스 처음을 기준으로 시작하고, 음수 일 경우 인덱스 끝을 기준으로 시작한다. step 의 양수/음수에 따라 결과의 방향이 바뀌..

Language/Python 2019.11.25

Python - with, context manager에 대한 이해.

특정 구문을 시작 전후 반드시 실행해야 하는 구문이 있다면 Python에서는 어떻게 구현할 것인가. 일반적인 코드로 구현하자면 다음과 같다. print("->> Before routine") routine1() print(" Before routine") routine2() print(" Before routine") routine3() print("> Before routine") try: routine1() finally: print(" Before routine") try: routine2() finally: print(" Before routine") try: routine3() finally: print("> Before routine") def __exit__(self, type, value,..

Language/Python 2019.11.16

Python - configparser, 기본적인 설정파일을 다루는 모듈

configparser.ConfigParser() configparser 모듈은 ConfigParser class 를 제공하고, ConfigParser class 는 Microsoft Windows의 INI 와 같은 형식의 설정파일 구조를 다룰 수 있다. [sample.ini] [KeyList] # Set Key Value Key1 = 10 Key2 = 20 Key3 = 30 Key4 = 40 Key5 = 50 [NameList] # Set Name Value Name1 = abc Name2 = bcd Name3 = cde Name4 = def Name5 = efg 위와 같은 형태의 설정 파일을 읽기 위해서 다음과 같은 코드를 사용할 수 있다. from configparser import ConfigPa..

Language/Python 2019.10.11

Python - 지능형 리스트 (List Comprehension)/제너레이터 표현식 (Generator expression) 의 이해 및 비교

지능형 리스트 (List Comprehension) : Python 에서는 리스트 구성을 위해 항목을 하나하나 나열하는 방식외에 구문을 통해 sequence 형태의 데이터를 가공하여 리스트를 구성하는 방법을 제공하고 있다. 지능형 리스트를 사용하게 되면 코드가 간결해지고 상황에 따라서는 성능이 좋은 코드를 작성할 수 있다. 제너레이터 표현식 (Generator expression) : 지능형 리스트 (List Comprehension) 과 유사하지만 별도의 리스트는 생성하지 않고, iterator 를 생성하여 항목을 하나씩 처리할 수 있도록 한다. 지능형 리스트를 만든 후 하나씩 항목을 처리하여도 되지만 별도의 메모리 공간을 차지하지 않는다는 차이점이 있다. 지능형 리스트의 경우 대괄호 [] 를 사용하는..

Language/Python 2019.09.13

Signed / Unsigned 의 비교

signed 의 경우 양/음수를 표현할 수 있는 변수형으로 알고 있고, unsigned 의 경우 양수만 표현할 수 있는 것으로 막연히 알고 있었는데, 코드로 실제 비교해 보았다. #include int main() { signed char a = 0xFF; unsigned char b = 0xFF; printf("a = %d\n", a); printf("b = %d\n", b); } [결과] a = -1 b = 255 2진수 (16진수) 10진수 (signed char) 10진수 (unsigned char) 1111 1111 (0xFF) -1 255 signed char 의 경우 이진수 1111 1111 중 MSB (Most Significant Bit) 는 부호 표현을 위해 사용된다. 이에 2의 보수법..

Language/C 2019.08.24

Python - random(), 임의의 수(난수)를 구하는 함수

가장 흔히 사용되는 기능으로 random 값을 생성하는 random() 함수가 있다. 해당 함수를 사용하기 위해서는 별도의 random module을 import 하여 사용해야 한다. 직접 난수를 구하는 로직을 작성해 본 사람을 알겠지만 규칙이 없는 난수를 생성하기는 쉽지가 않다. 질 좋은 난수 생성기더라도 경우의 수를 늘려 생성하다 보면 어느 순간 규칙을 가지는 것을 확인하는 경우가 다수이기 때문이다. 이를 극복하기 위해 난수 생성하는 로직이 제안되고 존재하는데 Python 에서는 Mersenne Twister 라는 난수 생성기를 사용한다. 하지만 이 난수 생성 로직도 특정 상황에서 다음 난수를 예측할 수 있기 때문에 암호 관련 목적으로 random 모듈로 부터 생성된 난수 사용은 권장하지 않고 있다...

Language/Python 2019.03.20

Python - Python 2 에서 Python 3 으로의 전환

PYthon을 처음 접한지 몇년이 지났지만 Python 3에 대한 거부감(?), 두려움(?)은 상당했다. 우선 접하고 있던 Python code들은 모두 2.7을 기준으로 작성되어 있었고, 나 또한 그 틀에서 벗어났을 때 코드가 동작하지 않을 수도 있다는 점에서 상호 호환이 되지 않는 Python 3으로의 전환은 어려웠다. 하지만 수년내 python 2.7 의 지원이 종료될 예정임에 따라, 최근 신규로 작성하는 코드를 모두 Python 3로 작성을 시작해 보았다. 내부적으로는 많은 차이가 있겠지만 자체적으로 느꼈던 차이점은 다음과 같았다. 1. print 문 사용의 변화 기존 python 2에서는 print "ABC" 와 같이 사용이 가능하였으나 Python3 에서는 함수사용과 마찬가지로 중괄호를 넣어줘..

Language/Python 2019.03.19

Python - id(), object의 unique 값(memory address)를 보여주는 함수

Python은 C 언어와 달리 포인터라는 개념이 없다. 하지만 컴퓨터 상에서 돌아가는 언어이기 때문에 내부적으로는 메모리를 사용하고, 이에 대한 주소 정보를 가지고 있다. 그렇다면 포인터 개념을 사용하지 않는 Python에서 해당 메모리 주소는 어떤 용도로 사용되는 것일까? Python은 메모리 주소를 변수를 구별하기 위한 용도로 사용하고 있다. python의 built-in 함수 중 id() 를 이용하면 현재 확인하고자 하는 변수의 메모리 주소를 확인할 수 있다. (CPython의 경우 메모리 주소를 반환하지만, 다른 파이썬 인터프리터는 메모리 주소 이외의 다른 값을 반환할 수 있음) id(object)Return the “identity” of an object. This is an integer w..

Language/Python 2019.03.18

Python - if __name__ == __main__ 의 의미

[Python 스크립트 파일의 실행] python은 C언어나 Java 와 달리 main() 함수가 존재하지 않는다.이에 따라 스크립트 파일을 실행하게 되면 들여쓰기가 되지 않은 line들을 파일 상단 부터 순차적으로 읽어 수행하게 된다. [sample.py]a = 1b = 3c = a + b print(c) def temp(): print("abc") ~/python$ python sample.py4 위에서 보듯이 들여쓰여진 코드인 함수 부분은 수행되지 않았음을 볼 수 있다. [다른 Python 스크립트 파일을 모듈로서 실행] python 스크립트 파일은 또 다른 python 스크립트 파일을 하나의 모듈로써 읽어 들일 수 있다. [sample_call.py]import sample ~/python$ py..

Language/Python 2019.02.08

Webfont 의 적용 (Google Fonts)

웹페이지를 작성하다보면 자신이 원하는 형태의 폰트로 글자가 표시되기를 원할 때가 있다. 이 때 좀 더 쉽게 원하는 폰트를 적용시키는 방법은 웹폰트(webfont)를 적용하는 것이다. https://fonts.google.com/ 구글에서는 위 사이트를 통해 다양한 폰트를 제공하고 있고, 쉽게 적용할 수 있도록 가이드를 하고 있다. 크게 원하는 폰트를 고르고, 그 폰트를 자신의 사이트에 적용하는 것이 큰 골자이다. 사이트에 접속하면 2018년 10월 11일 기준으로 900여개의 font를 제공하고 있다. 화면 오른쪽에는 Languages 를 선택하여 해당 언어에 맞는 폰트를 필터링해서 보여준다. 아래 화면은 언어를 Korean으로 필터를 했을 때의 결과로 보여지는 한글 폰트들이다. 폰트를 보면 Senten..

Language/HTML 2018.10.11

Kotlin - Class와 Inheritance(상속)

ClassKotlin은 Java와 마찬가지로 class 를 가지고 있고, class keyword를 통해 선언한다. class Study { ... } class는 class name, header, body로 구성되어 있고, 중괄호 {} 로 둘러 쌓여있다. 단, 만약 optional인 header와 body 중 body가 없을 경우 중괄호 {} 를 다음과 같이 생략해도 된다. class Study 생성자(Constructors) Kotlin의 class는 primary constructor, secondary constructor를 가질 수 있고, primary constructor는 최대 하나, secondary constructor는 복수개로 가질 수 있다. Primary constructor 먼저..

Language/Kotlin 2018.07.25

Kotlin - for/while Loops

for Loops for loop은 iterator를 제공하는 매개체를 통해 반복적으로 무엇인가를 수행할 때 사용된다. C#의 foreach loop와 동일하다. 간단한 사용의 예를 다음과 같다. for (item in collection) print(item) for (item: Int in ints) { // ... } 앞서 말했듯이 일반적으로 iterator() funtion을 member/extension function으로 가지고 있고, next(), hasNext()를 지원하는 매개체를 통해서 반복하게 된다. 반면 iterator가 없어도 사용 가능한 경우가 있는데, range나 array/list를 사용할 때 가능하다. 숫자 범위내에서 반복할 때는 range expression을 아래와 같이..

Language/Kotlin 2018.07.24