Programming
-
한개의 소켓을 사용할 때는 당연히 작성자가 포트를 지정했으니 포트값이 지정된 변수를 가져오면 쉽게 알 수 있습니다. 다만, 여러 개의 포트를 열었을 경우 반복문 등을 통해 실행하면 어떤 포트로 들어온 것인지 확인해야 하는 경우가 있습니다. getsockname() 함수를 사용해서 현재 소켓에 bind 된 ip와 포트 정보를 확인할 수 있습니다. import socket import select sockets = [] for port in [555, 777]: server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server_socket.bind(("0.0.0.0", port)) sockets.append(server_socket) empty ..
[python] 소켓이 사용중인 포트 확인하기한개의 소켓을 사용할 때는 당연히 작성자가 포트를 지정했으니 포트값이 지정된 변수를 가져오면 쉽게 알 수 있습니다. 다만, 여러 개의 포트를 열었을 경우 반복문 등을 통해 실행하면 어떤 포트로 들어온 것인지 확인해야 하는 경우가 있습니다. getsockname() 함수를 사용해서 현재 소켓에 bind 된 ip와 포트 정보를 확인할 수 있습니다. import socket import select sockets = [] for port in [555, 777]: server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server_socket.bind(("0.0.0.0", port)) sockets.append(server_socket) empty ..
2021.02.09 -
참고:git-scm.com/docs/git-fsck Git - git-fsck Documentation git-fsck tests SHA-1 and general object sanity, and it does full tracking of the resulting reachability and everything else. It prints out any corruption it finds (missing or bad objects), and if you use the --unreachable flag it will also print out object git-scm.com 특정 태그를 삭제했는데 새로 태그를 달려고 보니 삭제한 태그의 내용을 또 수집하기가 귀찮고 힘이 들었습니다. 방법이 없나 하고 ..
[git] 삭제된 태그 복원하기참고:git-scm.com/docs/git-fsck Git - git-fsck Documentation git-fsck tests SHA-1 and general object sanity, and it does full tracking of the resulting reachability and everything else. It prints out any corruption it finds (missing or bad objects), and if you use the --unreachable flag it will also print out object git-scm.com 특정 태그를 삭제했는데 새로 태그를 달려고 보니 삭제한 태그의 내용을 또 수집하기가 귀찮고 힘이 들었습니다. 방법이 없나 하고 ..
2021.01.29 -
아직 push 하지 않은 커밋이라는 기준으로 설명합니다. 이미 push 한 커밋을(혼자 쓰는 저장소라면 상관없다고 생각합니다..) 변경시키는 것은 다른 참여자 저장소를 꼬이게 할 수 있으니 자제하시기 바랍니다. git log 에서 원하는 커밋 해시명을 맨 처음에서부터 7자 이상 복사합니다. 예를 들면, commit 7a8b9c1..... 라고 시작하면 7a8b9c1 을 복사합니다. git rebase -i 7a8b9c1 vim 또는 nano 형태 또는 이미 시스템에서 기본값으로 지정한 편집기에 pick 해시값 커밋로그 형태로 목록이 떠 있을 것입니다. 이제 7a8b9c1 가 있는 줄을 찾아 pick 이라고 되어 있는 것을 지우고 edit 로 바꿉니다. 참고로 vim 에서는 p로 커서를 이동한 다음 cw ..
[git] 한 개의 커밋을 둘 이상으로 분리하기아직 push 하지 않은 커밋이라는 기준으로 설명합니다. 이미 push 한 커밋을(혼자 쓰는 저장소라면 상관없다고 생각합니다..) 변경시키는 것은 다른 참여자 저장소를 꼬이게 할 수 있으니 자제하시기 바랍니다. git log 에서 원하는 커밋 해시명을 맨 처음에서부터 7자 이상 복사합니다. 예를 들면, commit 7a8b9c1..... 라고 시작하면 7a8b9c1 을 복사합니다. git rebase -i 7a8b9c1 vim 또는 nano 형태 또는 이미 시스템에서 기본값으로 지정한 편집기에 pick 해시값 커밋로그 형태로 목록이 떠 있을 것입니다. 이제 7a8b9c1 가 있는 줄을 찾아 pick 이라고 되어 있는 것을 지우고 edit 로 바꿉니다. 참고로 vim 에서는 p로 커서를 이동한 다음 cw ..
2021.01.14 -
문자열에 특정 문자가 존재하는지 찾을 때 인터넷 검색해서 str_contains() 를 호출했더니 다음 오류가 발생했습니다. Fatal error: Uncaught Error: Call to undefined function str_contains() in /www/cgi-bin/css_topnav/emailsave.php:23 Stack trace: #0 {main} thrown in /www/cgi-bin/css_topnav/emailsave.php on line 23 인터넷을 뒤져보니 php8 에서 처음 소개되었습니다. 그럼 비슷한 일을 하는게 없을까 찾아보니 strpos 가 있습니다. 이녀석은 php 4, 5, 7에서 소개되었습니다. 제 환경에서 버전을 확인해봤습니다. # php-cgi --ver..
[php] 문자열에서 특정 문자 포함하는지 찾기문자열에 특정 문자가 존재하는지 찾을 때 인터넷 검색해서 str_contains() 를 호출했더니 다음 오류가 발생했습니다. Fatal error: Uncaught Error: Call to undefined function str_contains() in /www/cgi-bin/css_topnav/emailsave.php:23 Stack trace: #0 {main} thrown in /www/cgi-bin/css_topnav/emailsave.php on line 23 인터넷을 뒤져보니 php8 에서 처음 소개되었습니다. 그럼 비슷한 일을 하는게 없을까 찾아보니 strpos 가 있습니다. 이녀석은 php 4, 5, 7에서 소개되었습니다. 제 환경에서 버전을 확인해봤습니다. # php-cgi --ver..
2020.12.29 -
부끄럽지만 동일한 실수를 반복하지 않기 위해 기록용으로 남깁니다. Parse error: syntax error, unexpected 'if' (T_IF) in /www/cgi-bin/css_topnav/emailsave.php on line 23 syntax error 는 해당 문장 주변을 살펴보면 뭔가 빼먹은게 반드시 보입니다. 제 경우에는 세미콜론(;)을 빼먹었습니다. 파이썬을 자꾸 쓰다 보니 문장 끝에 부호를 붙이는 C 와 유사한 문법 언어에서 계속 실수하네요..
[php] Parse error: syntax error, unexpected 'if' (T_IF) in abc.php on line 23부끄럽지만 동일한 실수를 반복하지 않기 위해 기록용으로 남깁니다. Parse error: syntax error, unexpected 'if' (T_IF) in /www/cgi-bin/css_topnav/emailsave.php on line 23 syntax error 는 해당 문장 주변을 살펴보면 뭔가 빼먹은게 반드시 보입니다. 제 경우에는 세미콜론(;)을 빼먹었습니다. 파이썬을 자꾸 쓰다 보니 문장 끝에 부호를 붙이는 C 와 유사한 문법 언어에서 계속 실수하네요..
2020.12.22 -
기록용으로 남깁니다. dict 자료형으로 패킷 교환을 통해 ipc 를 잘 수행해왔는데 코드를 조금 수정하니 제목처럼 dumps 는 byte 자료형으로는 json 직렬화를 못한다는 오류를 보게 되었습니다. 뭘까 하며 코드를 보다 보니 기존 dict 에 bytes 값을 추가한 것이 눈에 띄었습니다. 감사하게도 순수 이진값이 아니라 base64로 인코딩된 byte 문자열이라서 해당 값을 decode 를 사용해서 문제를 쉽게 해결했습니다.
[python] json.dumps object of type bytes is not json serializable기록용으로 남깁니다. dict 자료형으로 패킷 교환을 통해 ipc 를 잘 수행해왔는데 코드를 조금 수정하니 제목처럼 dumps 는 byte 자료형으로는 json 직렬화를 못한다는 오류를 보게 되었습니다. 뭘까 하며 코드를 보다 보니 기존 dict 에 bytes 값을 추가한 것이 눈에 띄었습니다. 감사하게도 순수 이진값이 아니라 base64로 인코딩된 byte 문자열이라서 해당 값을 decode 를 사용해서 문제를 쉽게 해결했습니다.
2020.12.22 -
삽질을 거듭하다가 기록용으로 남깁니다. def smtphandler(self): smtp = None mailconfig = self.config['primaryServer'] if not mailconfig['server'] or not mailconfig['port'] or not mailconfig['uid'] or not mailconfig['pw'] or not mailconfig['sender']: mailconfig = self.config['secondaryServer'] if 'smtp/starttls': smtp = smtplib.SMTP('smtp.gmail.com', 587) elif 'ssl/tls': smtp = smtplib.SMTP_SSL('smtp.gmail.com', 46..
[python3] smtp 로 여러명에게 이메일 보내기삽질을 거듭하다가 기록용으로 남깁니다. def smtphandler(self): smtp = None mailconfig = self.config['primaryServer'] if not mailconfig['server'] or not mailconfig['port'] or not mailconfig['uid'] or not mailconfig['pw'] or not mailconfig['sender']: mailconfig = self.config['secondaryServer'] if 'smtp/starttls': smtp = smtplib.SMTP('smtp.gmail.com', 587) elif 'ssl/tls': smtp = smtplib.SMTP_SSL('smtp.gmail.com', 46..
2020.12.14 -
아래와 같이 a 값에 따라서 서로 다른 값을 갖는 dict 를 만들고 싶었습니다. def sendAlert(self, a, b, c, d): msg = {} data = {} content = None subject = None if a == 1: content = 'abc' subject = 'test' else: content = 'ddd' subject = 'test2' data['content'] = content data['subject'] = subject print(f'data={data}') 그런데 data = {} 만 나오네요... 같은 scope 일텐데... 이를 해결해보고자 content = 'abc' 바로 위에 global content 라고 넣으면 "content" is assig..
변수 범위 이해가 안감..아래와 같이 a 값에 따라서 서로 다른 값을 갖는 dict 를 만들고 싶었습니다. def sendAlert(self, a, b, c, d): msg = {} data = {} content = None subject = None if a == 1: content = 'abc' subject = 'test' else: content = 'ddd' subject = 'test2' data['content'] = content data['subject'] = subject print(f'data={data}') 그런데 data = {} 만 나오네요... 같은 scope 일텐데... 이를 해결해보고자 content = 'abc' 바로 위에 global content 라고 넣으면 "content" is assig..
2020.11.27