자택경비대

MacOS 기본 bash 쉘 버전 업그레이드 하는법

Programming

우선 Homebrew 를 이용해 최신버전의 bash를 설치한다.

brew install bash

chsh 명령어를 이용해 기본 쉘을 변경할 수 있는데, brew로 설치한 shell은 등록이 되어있지 않기 때문에 오류가 발생한다.

chsh -s $(which bash)
# chsh: /usr/local/bin/bash: non-standard shell

따라서 다음과 같이 설치된 경로를 /etc/shells 파일에 추가하여 등록한 뒤에, chsh 명령어를 사용하면 해결된다.

sudo nano /etc/shells  # which bash 명령어의 결과값을 추가한다
chsh -s $(which bash)

Password: ...

visual studio code 의 VIM extension이 복사/붙여넣기 작업시에 간헐적으로 멈추는 현상(렉) 해결방법

Programming

settings.json에 다음 옵션을 추가해주면 된다.


"vim.experimentalOptimizations": true,

MacOS Mojave 10.14 이상에서 pygame이 정상적으로 작동하지 않는 문제 해결방법

Programming

간단하게 설치하는 아래와 같은 방식으로는 예제 프로그램을 실행해보면 정상적으로 작동되지 않는다.
(화면이 검게 혹은 노이즈가 낀 화면으로 보이거나, 아예 화면이 보이지 않거나, 스프라이트가 깨지거나 보이지 않는 문제 등)


pip install pygame

python -m pygame.examples.aliens  # 비정상적 작동

아래와 같이 버전을 지정해주면 정상적으로 작동하는것을 확인할 수 있다.


pip install 'pygame==2.0.0.dev3'

RE(IEEE Std 1003.2)와 BRE(Basic Regular Expression)

Programming

정규식

RE(Regulare Expression)은 한국어로 정규식이라고 불리며, POSIX.2 IEEE Std 1003.2에 정의되어 있다.

정규식은 atom이라는 주 단위를 사용하는데, 이는 다음과 같다.

()또는 [] 표현식, . (어떠한 한 글자), ^ (글자를 포함하지 않은 줄의 시작점), $ (글자를 포함하지 않은 줄의 끝 지점), \를 포함하는 ^.[$()|*+?{\ 문자, 0 부터 9 까지의 숫자를 포함하지 않은 { 문자, 혹은 다른 식별자를 포함하지 않는 문자.

문법

atom 뒤에 다음과 같은 식별자를 사용하여 표현할 수 있다.

*은 0 혹은, 그 이상의 문자와 일치하는것, +는 1 혹은 그 이상의 문자와 일치, 그리고 ?는 0 혹은 1 문자와 일치하는지를 나타낸다.

범위

{로 시작하여 정수형 숫자를 포함하고, 이후 , 가 사용될 수 있고, 다시 정수형 숫자를 포함할 수 있고, }로 끝나는 표현을 의미한다.

만약 두 숫자가 사용되었다면 , 이전의 값은 , 이후의 값을 넘어갈 수 없다.

, 없이 한 숫자만 사용되었으며 바로 }문자로 닫힌 표현식은 정확히 그 숫자의 갯수만큼이 일치함을 나타낸다.

, 뒤에 어떠한 숫자가 없이 }문자로 닫힌 표현식은 , 이전의 숫자를 i로 정의하고, , 이후의 숫자를 j로 정의할 경우, i부터 j까지의 범위의 어떠한 경우에 일치함을 나타낸다.

Bracket expression

[]로 둘러싸인 표현식을 의미하며, 일반적으로 [] 사이의 나열된 문자열에 일치함을 뜻한다. 만약 첫 글자가 ^로 시작한다면, []사이의 나열된 문자열에 불일치함을 뜻한다.

만약, 두 글자 사이에 - 문자가 사용되었다면, 그것은 두 문자 사이의 ASCII 범위를 포함하는것을 뜻하게 된다.

[::]로 둘러싸인 표현식은 사이에 character class의 이름을 사용하여 미리 정의된 범위의 문자열을 나타낼 수 있다.

character class의 내용들은 C 에서 사용되는 ctype.h의 character classification 정의들과 같다.

     
alnum digit punct
alpha graph space
blank lower upper
cntrl print xdigit

[:class:] 또한 [^로 시작되는 반대되는 개념의 일치에도 사용될 수 있다. 따라서 [^[:class:]]는 해당 character class에 포함되지 않는 문자열의 집합을 의미하게 된다.

단어의 범위를 나타내는 특별한 [[:<:]], [[:>:]] 표현식도 있다. 각각 단어의 시작, 끝부분을 나타내게 된다.

예제는 다음과 같다.

# With out bracket expression
echo 'this is island' | sed 's/is/foo/g'

thfoo foo fooland


# With bracket expression
echo 'this is island' | sed 's/[[:<:]]is[[:>:]]/foo/g'

this foo island

비식별자로서의 특수문자

문자 ]를 리스트, 즉 []에서 사용하기 위해선, 가장 처음의 문자로 두거나, 첫 문자 ^ 뒤에 바로 두면 된다.

문자 -를 리스트내에서 사용하려면, ]와 마찬가지로 가장 처음의 위치에 두거나, 가장 마지막 자리에 두면 된다.

이외에 다른 특수문자를 사용하고 싶다면 백 슬래시 \를 앞에 함께 사용하여 식별자로서의 기능을 잃게 할 수 있다.

Basic Regulare Expresion

BRE또는 Obsolete RE 라고도 불리며 현재는 대부분 하위호환성을 유지하기 위해 존재한다.

BRE에서는 +, |, ?가 일반문자로 사용된다.

향상된 정규식

perl이나 python등에서 사용되는 기능이 추가된 정규식을 뜻한다.

  • \<: 글자를 포함하지 않는 단어의 시작부분을 뜻한다. [[:<:]]와 동일하다.
  • \>: 글자를 포함하지 않는 단어의 끝부분을 뜻한다. [[:>:]]와 동일하다.
  • \b: \<\> 두가지 모두의 의미를 포함한다.
  • \B: \b와 반대되는 표현이다.

아래와 같은 줄임표현도 있다.

  • \d: [[:digit:]]과 같은 표현이다.
  • \D: \d와 반대되는 표현이다.
  • \s: [[:space:]]와 같은 표현이다.
  • \S: \s와 반대되는 표현이다.
  • \w: [[:alnum:]_]과 같은 표현이다.
  • \W: \w와 반대되는 표현이다.

자바스크립트 모듈 개념정리 (AMD, CJS, ESM, UMD)

Programming

AMD

Ansynchronous Module Deifinition

  • 모듈을 비동기적으로 불러옴
  • Front-End 용으로 개발되었음

CJS

Common JS

  • Node.js의 모듈 시스템에 사용됨
  • 모듈을 동기적으로 불러옴
  • Back-End 용으로 개발되었음

ESM

ES Modules

  • 표준 자바스크립트 모듈 시스템으로 기획되었음
  • 최신 브라우저에서 대부분 지원
  • 이전의 모듈 시스템들의 장점들을 채택; CJS의 문법을 차용, AMD의 비동기 로드를 가져옴.
  • Tree-shaking 이 가능하다 (크기최적화 가능)

UMD

Universal Module Definition

  • AMD, CJS 같은 개념과는 다르게, 여러 모듈 시스템을 동작 가능하게 하는 패턴에 가깝다.
  • Front-End, Back-End 양쪽에서 사용가능.
  • Webpack이나 rollup 같은 Bundler의 fallback으로 많이 사용된다.

IOW 뜻

Programming/vernacular

in other words 의 줄임말이다.

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

Ex nihilo  (0) 2020.05.16

2>&-, 2>/dev/null, |&, &>/dev/null and >/dev/null 2>&1 의 차이점에 대해서

stackoverflow

배경지식: 각 fd (file descriptor), 1stdout, 2stderr 그리고 0stdin 을 가리킨다.

N>&-: N에 해당하는 fd를 닫는다.
N>/dev/null: N에 해당하는 fd로 부터의 출력을 /dev/null로 리다이렉팅 한다.
N>&M: N의 출력을 M의 출력과 하나로 합친다.
|&: 2>&1 | 의 축약어이다. (bash4 버전부터 추가)
&>/dev/null: >/dev/null 2>&1 의 축약어이다.

Bash 파일 테스트 연산자

Programming
  • 아래의 조건이 일치할 경우 참을 반환한다.

-e: 파일이 존재할 경우
-a: -e 와 같다. (deprecated)
-f: 일반 적인 파일일 경우 (디렉토리, 디바이스 드라이버 파일의 경우 거짓)
-s: 파일의 크기가 0이 아닐경우
-d: 디렉토리인 경우
-b: 파일이 블록 디바이스인 경우
-c: 파일이 캐릭터 디바이스인 경우
-p: 파일이 파이프인 경우
-h, -L: 파일이 심볼릭링크인 경우
-S: 파일이 소켓인 경우
-t: fd가 터미널 디바이스와 관련이 있는경우
-r: 읽기 권한이 있는경우
-w: 쓰기 권한이 있는경우
-x: 실행 권한이 있는경우
-g: sgid 플래그가 설정되어 있는경우
-u: suid 플래그가 설정되어 있는경우
-k: stickybit가 설정되어 있는경우
-O: 파일의 소유자인 경우
-G: 파일과 같은 그룹인 경우
-N: 파일이 마지막으로 읽은 후에 수정된 경우
f1 -nt f2: f1 파일이 f2 파일보다 새로운 경우
f1 -ot f2: f1 파일이 f2 파일보다 오래된 경우
f1 -ef f2: f1 파일이 f2 파일과 같은경우 (hardlink)
!: not 연산자, 다른 연산자 앞에 쓰여서 반대 효과를 낼 수 있다.

Reference

CSS에서 a, a[href], a:link, a:visited 의 차이

Programming

a: <a ...로 시작하는 모든 태그, 가장 포괄적인 범위를 가르킨다.
a[href]: <a href="..."> 처럼 a 태그에서 href attribute 까지 가지고 있어야한다.
a:link: href attribute가 가리키는 주소를 브라우저가 방문하지 않은 경우에만 활성화 된다.
a:visited: href attribute가 가리키는 주소를 브라우저가 방문한 경우에만 활성화 된다.

'Programming' 카테고리의 다른 글

자바스크립트 모듈 개념정리 (AMD, CJS, ESM, UMD)  (0) 2020.06.02
Bash 파일 테스트 연산자  (0) 2020.05.28
커맨드라인 팁 모음  (0) 2020.05.01
XPath 사용방법  (0) 2020.04.21
Python scrapy 사용법  (0) 2020.04.21

Ex nihilo

Programming/vernacular

Ex nihilo는 "아무것도 없다"를 의미하는 라틴어입니다. 반대로 창조론으로 표현할 때, 그것은 하나님이 아무것도없이 우주를 창조 하셨음을 의미한다.

무에서 객체를 생성할 수 있는 체계는 이미 있던 프로토타입을 복제하지 않고 아무것도 없는 상태에서 새로운 객체를 생성할 수 있게 해 준다. 이런 체계는 새 객체의 특성과 행동을 이미 있던 객체를 참조하지 않고도 지정할 수 있다. 많은 프로토타입기반 언어에서 기본 객체 프로토타입인 Object 프로토타입이 있는데, 여기에 공통적으로 필요한 메서드가 들어있고, 모든 객체의 마스터 프로토타입으로 사용된다. 무에서 객체를 창조하는 방식의 유용한 한 가지는 새 객체의 슬롯 이름이 최상위의 Object 객체와 네임스페이스 충돌이 일어나지 않는다는 것이다. 모질라 자바스크립트는 객체의 __proto__ 프로퍼티를 null로 지정하면 이것이 가능하도록 구현되어 있다.

자바스크립트에서는 {} 형태의 문법을 통해 ex nihilo 객체의 생성이 가능하다.

Reference

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

IOW 뜻  (0) 2020.05.28