2021년 03주차 기록
2021.01.18
lego translation free-asset tour
01/18 (월) ~ 01/24 (일)
- Lego 파트 넘버 이해하기 (번역)
- 파이썬 코딩의 기술 - 책정리
- 무료 이미지 소스 Unsplash
- Windows 배경화면중 강 옆의 성의 정체
- Javascript 에서 비밀 정보 관리하는 법
- Cloud Foundry
Lego 파트 넘버 이해하기 (번역)
- LEGO 바닥에 보면 4자리 ~ 5자리 숫자가 보인다.
- 이것이 디자인 넘버다
- 제품 매뉴얼 뒤쪽에 보면 이 숫자는 없고 6자리 ~ 7자리의 숫자가 나열되어있다
- 이것은 부품 넘버(element number)다
- 이 두가지 숫자의 차이는 무었이고,
- 두 숫자는 어떻게 연결되어 있는가?
- 또한 어떤 방식으로 (숫자가) 할당되는가?
- 내가 전문가라고 주장할순 없지만, 수년의 경험에서 얻은 지식을 공유하고 싶다
- 여기에 적은 정보가 모든 가능성을 포함하거나 확정적인 것은 아니다
- 다만 새롭게 취미를 가지게 된 사람들에게 관심있는 주제이다
So. What’s a design number?
- 디자인 넘버는 파트의 형태를 구분한다
- 1985년에 처음으로 부품 밑면에 등장했지만,
- 1968년부터 내부적으로 사용되기 시작했다.
- 번호 매기기는 3001 부터 시작했는데 2x4 브릭이었다.
- 처음에는 번호할당에 일종의 로직이 있었다
- 일정 범위의 숫자가 1968년에 생산된 서로 다른 형태의 파트에 할당되었다.
- 3001-3009 Bricks
- 3010 Duplo 2x4 brick
- 3020-3036 Plates (위 섹션에 내가 사진찍은, 4x6 plate 3032를 포함한다)
- 3037-3050 45도 각도 slope
- 3068-3070 Tiles
- 일정 범위의 숫자가 1968년에 생산된 서로 다른 형태의 파트에 할당되었다.
- 하지만 부품 가짓수가 증가하면서 번호는 무질서하게 할당되기 시작했다.
- 아마도 새로운 디자인들에 숫자가 차례대로 할당되었을 것이다
- 처음에는 장식이 없는 일반적인 부품에는 4자리 숫자가 할당되었다.
- 1990년 중반부터 30000에서 시작하는 5자리 숫자가 할당되기 시작했다.
- 요즘에는 할당에 대한 명확한 로직이 보이지 않고있다.
- 올해(2020년)까지 1400개의 새로운 디자인에 할당된 숫자가 12029에서 79371까지임
- 우리 데이타 베이스에는 18000개의 디자인 넘버가 등록되어있다
- 수년동안 더 많은 번호가 할당되었지만 현재는 사용되지 않으며
파이썬 코딩의 기술 - 책정리
1장 파이썬답게 생각하기
Better way 1 - 사용 중인 파이썬의 버전을 알아두라
- 내장 모듈 sys 사용하기
1 2 3
import sys print(sys.version_info) print(sys.version)
Better way 2 - PEP 8 스타일 가이드를 따르라
공백문자
- 탭 대신 스페이스를 사용해 들여쓰기하라
- 문법적으로 중요한 들여쓰기에는 4칸 스페이스를 사용하라
- 라인 길이는 79개 문자 ( 한글은 1자가 2자 넓이)
- 긴 식을 다음 줄에 이어서 쓸 경우에는 일반적인 들여쓰기보다 4 스페이스를 더 들여써야 한다.
- 파일 안에서 각 함수와 클래스 사이에는 빈 줄을 두 줄 넣어라.
- 클래스 안에서 메서드와 메서드 사이에는 빈 줄을 한 줄 넣어라.
- dictionary 에서 키와 콜론 사이에는 공백을 넣지 않고, 한 줄 안에 키와 값을 같이 넣는 경우에는 콜론 다음에 스페이스를 하나 넣는다.
- 변수 대입에서 = 전후에는 스페이스를 하나씩만 넣는다
- 타입 표기를 덧붙이는 경우에는 변수 이름과 콜론 사이에 공백을 넣지 않도록 주의하고, 콜론과 타입 정보 사이에는 스페이스를 하나 넣어라
명명 규약
- 함수, 변수, attribute는 lowercase_underscore처럼 소문자와 밑줄을 사용한다 (snake case)
- 보호돼야 하는 인스턴스 애트리뷰트는 일반적인 애트리뷰트 이름 규칙을 따르되, _leading_underscore처럼 밑줄로 시작한다.
- private(클래스내에서만 사용) 인스턴스 attribute는 일반적인 attribute 이름 규칙을 따르되, __leading_underscore처럼 밑줄 두 개로 시작한다.
- 클래스(예외도 포함)는 CapitalizeWord처럼 여러 단어를 이어 붙이되, 각 단어의 첫 글자를 대문자로 만든다. (Camel Case)
- 모듈 수준의 상수는 ALL_CAPS처럼 모든 글자를 대문자로 하고 단어와 단어 사이를 밑줄로 연결한 형태를 사용한다.
- 클래스에 들어 있는 인스턴스 메서드는 호출 대상 객체를 가리키는 첫 번째 인자의 이름으로 반드시 self를 사용해야 한다.
- 클래스 메서드는 클래스를 가리키는 첫 번째 인자의 이름으로 반드시 cls를 사용해야 한다.
식과 문
- 긍정적인 식을 부정하지 말고(if not a is b) 부정을 내부에 넣어라 (if a is not b)
- 빈 container나 sequence ( []나 ‘‘등)를 검사할 때는 길이를 0과 비교(if len(something) == 0)하지 말라. 빈 컨테이너나 시퀀스 값이 암묵적으로 False로 취급된다는 사실을 활용해 ‘if not 컨테이너’라는 조건문을 써라.
- 마찬가지로 비어 있지 않은 컨테이너나 시퀀스([1]이나 ‘hi’ 등)를 검사할 때도 길이가 0보다 큰지 비교하지 말라. 대신 if 컨테이너가 비어 있지 않은 경우 암묵적으로 True로 평가된다는 사실을 활용하라.
- 한 줄짜리 if 문이나 한 줄짜리 for, while 루프, 한 줄짜리 except 복합문을 사용하지 말라. 명확성을 위해 각 부분을 여러 줄에 나눠 배치하라.
- 식을 한 줄 안에 다 쓸 수 없는 경우, 식을 괄호로 둘러싸고 줄바꿈과 들여쓰기를 추가해서 읽기 쉽게 만들라.
- 여러 줄에 걸쳐 식을 쓸 때는 줄이 계속된다는 표시를 하는 \ 문자보다는 괄호를 사용하라.
임포트
- import 문(from x import y도 포함)을 항상 파일 맨 앞에 위치시켜라
- 모듈을 임포트할 때는 절대적인 이름(absoute name)을 사용하고, 현 모듈의 경로에 상대적인 이름은 사용하지 말라. 예를 들어 bar 패키지로부터 foo 모듈을 임포트한다면
from bar import foo
라고 해야 하며, 단지 import foo라고 하면 안 된다. - 반드시 상대적인 경로로 임포트해야 하는 경우에는
from . import foo
처럼 명시적인 구문을 사용하라. -
임포트를 적을 때는 표준 라이브러리 모듈, 서드 파티 모듈, 여러분이 만든 모듈 순서로 섹션을 나눠라. 각 섹션에서는 알파벳 순서로 모듈을 임포트하라.
- Pylint 도구
Better way 8 - 여러 이터레이터에 대해 나란히 루프를 수행하려면 zip을 사용하라
- 사전준비 - 가장 긴이름 고르기
1 2 3 4 5 6
names = ['Cecilia', '남궁민수', '毛泽东'] counts = [len(n) for n in names] prints(counts) >>> [7, 4, 3]
- Worst - 배열 인덱스의 사용으로 시각적으로 복잡
1 2 3 4 5 6 7 8
longest_name = None max_count = 0 for i in range(len(names)): count = counts[i] if count > max_count: longest_name = names[i] max_count = count
- almost same - BW7 적용으로 좀 낫지만 마찬가지
1 2 3 4 5
for i, name in enumerate(names): count = counts[i] if count > max_count: longest_name = name max_count = count
- Better way - zip을 사용
1 2 3 4
for name, count in zip(names, counts): if count > max_count: longest_name = name max_count = count
- 긴 입력시 메모리 고갈 걱정 없음 - zip은 자신의 원소를 소비하면서 진행
- 예외 처리 방법
- 예외 상황 - 두 개의 이터레이터가 서로 길이가 다를 경우
- zip 은 짧은 이터레이터에 맞춰 긴쪽의 원소를 버림
- 긴쪽에 맞추고 싶다면
itertools
의zip_longest
를 사용한다1 2 3 4 5 6 7 8 9 10
import itertools for name, count in itertoos.zip_longest(names, counts): print(f'{name}: {count}') >>> Cecilia: 7 남궁민수: 4 毛泽东: 3 Rosalind: None
무료 이미지 소스 Unsplash
- #free-asset
- Unsplash.com, Photos for everyone
Windows 배경화면중 강 옆의 성의 정체
- #tour
- 오른쪽 사진은 windows 10 배경화면에 쓰인 이미지다.
- 성의 정체가 궁금하여 캡춰해서 Google Image 검색으로 찾아보았다.
- 성의 이름은
Kylemore Abbey
, 아일랜드에서 유명한 관광지이다. - 알고보니 강이 아니라 호수였다.
폴라카팔 Lough
라고 적혀있다.Lough
(로크)는 아일랜드어로 호수라는 뜻.
- 성의 지도 - (2021-01-24 현재
임시 휴업
이라고 나옴)
- 성을 투어하는 영상이 유튜브에 있어 링크한다
- 위의 구글지도에서는
킬레모어
로 번역했는데 유튜브에서는카일모어
라고 발음하고 있다.
- 위의 구글지도에서는
Javascript 에서 비밀 정보 관리하는 법
Keeping secrests
- 원제및 링크 : Keeping secrets - how your cloud application should access credentials and other private data
- 다른분 번역본 : 9.5 Node.js에서 비밀 설정 정보 관리
config.js
- config.js, npm
- nopt, npm - command-line 인자로 처리하는 방식
Cloud Foundry
- 위의 Keeping secrets 에서 소개된 방법중 Cloud Foundry 에서 제공하는 User-Provided Service를 이용하는 방법이 있었다.
- Cloud Foundry를 좀 더 알아보기로 함