[mac] 맥 잠자기에서 깨어날 때 키 입력 반복되는 문제

맥을 사용하다보면 겪게 되는 몇 가지 문제 중 하나는 잠자기에서 깨어날 때
키 입력이 반복되는 것입니다. 이럴 경우 키 입력이 계속 반복되어 로그인도
하지못하고, 어쩔 수 없이 맥을 강제종료 시키게 됩니다.

Karabiner를 설치한 후 위에서 언급한 문제가 간헐적으로 발생하기
시작했는데, 한영전환 키를 오른쪽 command키로 사용하는 저로서는
Karabiner를 대체할 방안이 없네요.

그러던 어느날 위의 키 입력이 반복되는 문제를 다시 겪게 되었고, 해결책이
없을까 생각하던 중 계정 옆에 있는 방문 사용자라는 것이 눈에 들어왔고
별 생각없이 클릭하게 되었습니다.

Guest user

방문 사용자 계정으로 쉽게 로그인 되었고, 키 입력이 반복되는 문제가
말끔히 사라졌습니다. 다시 방문 사용자 계정으로 로그아웃 하니 정상적인
로그인 화면을 볼 수 있었습니다. 🙂

추가1) 얼마전 Karabiner Elements 12.4.0 버전으로 업데이트 되었는데,
업데이트 내용 중에 키를 누르고 있는 문제를 해결했다고 하니 두고봐야
될 듯 합니다. (2019년 5월 16일)

추가2) Karabiner Elements 12.4.0 버전 이상으로 업데이트하면
키 입력 반복되는 문제가 발생하지 않습니다. (2019년 8월 5일)

[mac] 맥에서 한영전환 딜레이(delay) 없애기

맥으로 한영전환을 하다보면 전환 딜레이(delay)로 인해 영어와 한글이 섞이거나 한글 자음, 모음이 분리되는 문제를 종종 경험하게 됩니다.

이전에 포스팅했던 맥에서 한영전환하는 다양한 방법들에서 case.3의 설정(오른쪽 command키로 한영전환)을 완료했다고 가정합니다.

텍스트 편집기를 열어서 오른쪽 command키(한영전환)를 누르고 있는 상태에서 a키를 누른 후 모든 키를 뗍니다. 다시 오른쪽 command키를 누르고 있는 상태에서 a키를 누른 후 모든 키를 뗍니다.

Before

이 과정을 몇 번 반복해 보시면 한영전환 키를 누르고 있는 상태에서는 한영전환이 되지 않는 것을 알 수 있습니다.

한영전환 키인 오른쪽 command키를 눌렀을 때(press) 즉시 한영전환이 되지 않고, 오른쪽 command키를 누른 후 키에서 손가락을 뗄 때(release) 한영전환이 일어나기 때문에 딜레이(delay)가 발생하게 됩니다.

이런 설정에서는 한영전환 키를 떼는 시간이 약간 길어지게 되면 한영전환이 무시될 수 있습니다. 한영전환 키 눌렀다 떼는 시간을 조정해 가면서 오른쪽 상단 바에 있는 한영전환 상태를 확인해 보세요.

빠른 속도로 타이핑을 하다보면 영어와 한글이 섞이거나 한글 자음, 모음이 분리되는 문제를 겪게 되며, 사용자의 타이핑 속도에 비례하여 자주 이런 문제가 재현 됩니다.

그러면 한영전환 딜레이를 해결하기 위해 한영전환 키를 떼는 것(release)과 상관없이 눌렀을 때(press) 바로 전환이 되도록 설정해 봅시다.

시스템 환경설정 > 키보드 > 단축키탭에서 입력소스를 선택한 다음, 이전 입력 소스 선택의 단축키와 입력 메뉴에서 다음 소스 선택 단축키를 서로 맞바꿔 주세요.

  • 변경 전
    스크린샷 2018 12 29 오후 10 11 49

  • 변경 후
    스크린샷 2018 12 29 오후 10 20 32

다시 텍스트 편집기를 열어서 한영전환 키를 누른 상태에서 a키를 누르고 모든 키를 뗍니다. 이것을 반복적으로 테스트 해보시면 누르고 있는 상태에서도 정상적으로 한영전환이 되는 것을 아래와 같이 확인하실 수 있습니다.

After

[python] pandas에서 csv 파일 읽기, 쓰기

파이썬에서 제공하는 기본 csv 라이브러리보다 pandas를 이용하면 데이터를 효율적으로 다룰 수 있게 된다.

pip를 이용해서 pandas를 설치하자.

$ pip install pandas

output.csv 파일은 아래와 같이 데이터가 입력되어 있다.
Output

pandas를 이용해서 csv 파일을 읽은 후 데이터를 추가하고 다른 이름의 csv 파일로 저장해 보자.

import pandas

# read csv file
df = pandas.read_csv('output.csv', names=['id', 'name', 'age']) # df is pandas.DataFrame
print("##### data #####")
print(df)
'''
##### data #####
   id name  age
0   1  홍길동   27
1   2  임꺽정   33
2   3  장보고   38
'''

print("##### df.loc[0:1] #####")
print(df.loc[0:1])
'''
##### df.loc[0:1] #####
   id name  age
0   1  홍길동   27
1   2  임꺽정   33
'''

print("##### df.loc[:, 'name':'age'] #####")
print(df.loc[:, 'name':'age'])
'''
##### df.loc[:, 'name':'age'] #####
  name  age
0  홍길동   27
1  임꺽정   33
2  장보고   38
'''

print("##### df.loc[[0, 2], 'name':'age'] #####")
print(df.loc[[0, 2], 'name':'age'])
'''
##### df.loc[[0, 2], 'name':'age'] #####
  name  age
0  홍길동   27
2  장보고   38
'''

print("##### df.loc[:, 'name'] #####")
print(df.loc[:, 'name'])
'''
##### df.loc[:, 'name'] #####
0    홍길동
1    임꺽정
2    장보고
'''

# final_df = df.append({'id': 4, 'name': '마루치', 'age': 14}, ignore_index=True) # 아래 두 줄과 동일한 결과를 가짐
new_df = pandas.DataFrame([{'id': 4, 'name': '마루치', 'age': 12}])
final_df = pandas.concat([df, new_df], ignore_index=True)
print(final_df)
'''
   age  id name
0   27   1  홍길동
1   33   2  임꺽정
2   38   3  장보고
3   12   4  마루치
'''

# write csv file
final_df.to_csv('new_output.csv', index=False, header=False, columns=['id', 'name', 'age'])

[python] csv 파일 읽기, 쓰기

파이썬에서 csv 파일은 아래와 같이 사용가능하다.

import csv

# write csv file
with open("output.csv", "w", encoding="utf-8") as f:
    w = csv.writer(f)
    w.writerow([1, "홍길동", 27])
    w.writerow([2, "임꺽정", 33])
    w.writerow([3, "장보고", 38])

# read csv file
with open("output.csv", "r", encoding="utf-8") as f:
    r = csv.reader(f)
    for items in r:
        print(items)

[python] 클래스

파이썬에서 클래스를 사용하는 방법은 아래와 같다.

class Person:
    count = 0 # static class variable
 
    # initialize method
    def __init__(self, name, age):
        self.name = name # instance variable
        self.age = age   # instance variable
        Person.count += 1
 
    # instance method
    def get_name(self):
        return self.name
 
    # instance method
    def get_age(self):
        return self.age
 
    # static method
    @staticmethod
    def get_count():
        return Person.count
 
    # class method
    @classmethod
    def new_instance(cls, name, age):
        return cls(name=name, age=age)
 
class AniPerson(Person): # class inheritance
    def __init__(self, name, age):
        super().__init__(name, age)
 
p1 = Person(name="홍길동", age=27)
p2 = Person(name="임꺽정", age=33)
p3 = Person.new_instance(name="장보고", age=38)
ap1 = AniPerson.new_instance(name="마루치", age=12)
 
print("count:", Person.get_count()) # count: 4
print("p3 name:", p3.get_name())    # p3 name: 장보고
print("p3 age:", p3.get_age())      # p3 age: 38
print("p3 type:", type(p3))         # p3 type: 
print(isinstance(p3, Person))       # True
print("ap1 name:", ap1.get_name())  # ap1 name: 마루치
print(isinstance(ap1, Person))      # True

추상클래스를 만들기 위해서는 ABCMeta 클래스를 상속해야 한다. 추상클래스의 추상메서드를 만들기 위해서는 @abstractmethod 데코레이터를 붙이면 된다.

from abc import *

# abstract class
class AbsPerson(metaclass = ABCMeta):
    @abstractmethod
    def get_name(self):
        pass

    @abstractmethod
    def get_age(self):
        pass

class Person(AbsPerson):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def get_name(self):
        return  self.name

    def get_age(self):
        return self.age

p = Person(name="홍길동", age=27)
print(p.get_name()) # 홍길동
print(p.get_age())  # 27

[mac] 맥에서 윈도우 키보드 사용하기

윈도우(Windows)에서 사용하는 키보드를 맥(Mac)에서도 사용하고 싶은 경우 Windows 로고키와 command키의 배열이 서로 달라 맥용 키보드만 사용하게 됩니다. 그리고 한/영키나 한자키를 눌러도 아무런 반응이 없어서 우리를 더 좌절하게 만들죠.

윈도우(Windows)에서 사용하던 키보드를 맥(Mac)에서도 사용하는 방법을 알아보겠습니다.

  1. Karabiner Elements 프로그램이 필요한데, 이전에 포스팅했던 맥에서 한영전환하는 다양한 방법들에서 case.3의 설정(오른쪽 command키로 한영전환)을 완료했다고 가정합니다.

  2. 윈도우 키보드를 맥(Mac)에 연결하신 후 Karabiner Elements를 실행하시고 Simple Modifications를 선택합니다. Target Device에서 맥(Mac)에 연결된 윈도우 키보드를 선택해 주세요.(저의 윈도우 키보드는 Wired Keyboard 600 (Microsoft)입니다.)
    Windows keyboard 1

  3. Add item 버튼을 클릭한 후 From keyleft_command를 선택하고 To keyleft_option을 선택합니다. 다시 Add item 버튼을 클릭한 후 From keyleft_option을 선택하고 To keyleft_command를 선택합니다. 이렇게 설정하면 왼쪽 alt키와 왼쪽 Windows 로고키의 위치가 서로 뒤바뀝니다.
    Windows keyboard 2

  4. 한/영키가 있는 윈도우 키보드라면 Add item 버튼을 클릭한 후 From keylang1을 선택하고 To keyf18을 선택하면 한/영키로 한영전환을 할 수 있습니다.

  5. Complex Modifications탭에서 Add rule 버튼을 클릭합니다.
    스크린샷 2018 04 10 오후 9 32 23

  6. Import more rules from the Internet (open a web browser)를 클릭합니다.
    스크린샷 2018 04 10 오후 9 32 32

  7. 인터넷 브라우저가 열리면 korean을 검색해서 For Korean PC Keyboard를 찾아서 Import 버튼을 클릭한 후 Karabiner Elements에 허용하도록 합니다.
    Windows keyboard 3

  8. Change Hanja key to option+returnEnable 버튼을 클릭하면 Enabled rules에 추가된 것을 확인할 수 있습니다. 이제 한자키로 한자변환을 할 수 있습니다.
    Windows keyboard 4
    Windows keyboard 5

[mac] 맥에서 특수문자 입력하기

맥(Mac)에서 특수문자를 입력하려면 command + control + space를 누르면 문자 뷰어 윈도우가 나옵니다.
Symbol char 1

여기서 특수문자를 쉽게 찾기 위해서는 관련된 단어로 특수문자 검색이 가능합니다. 아래 예제는 숫자 1을 입력해서 검색한 결과입니다.
Symbol char 2

상세한 분류를 보고 싶다면 오른쪽 상단의 ⌘ 모양의 윈도우 아이콘을 선택하시면 문자 뷰어 윈도우가 아래와 같은 형태로 확장됩니다.
Symbol char 3

원하는 특수문자가 없는 경우 ⚙︎(톱니바퀴)아이콘을 선택하신 다음 목록 사용자화...를 선택하세요.
Symbol char 4

그런 다음 관심있는 카테고리를 선택하시면 해당 카테고리의 특수문자를 추가적으로 이용할 수 있습니다.
Symbol char 5

만약 command + control + space를 눌러도 아무 반응이 없다면, 상단 메뉴바에 있는 한영전환 부분을 클릭한 후 이모티콘 및 기호 보기를 선택하여 문자 뷰어 윈도우를 실행할 수 있습니다.
Symbol char 7

[mac] 맥에서 한자 입력하기

윈도우(Windows)에는 한자(漢子) 변환키가 있어 한자변환을 손쉽게 할 수 있습니다. 맥(Mac)에서는 한자 변환키 자체가 존재하지 않기 때문에 아래와 같은 방법으로 한자를 입력하셔야 합니다.

case.1 – 한 글자씩 입력

한글 한 글자를 입력하고 option + enter키를 누르면 한자 선택기가 나옵니다. 원하는 한자를 선택해 주세요.

Hanja 1

case.2 – 단어로 입력

단어를 입력하고 option + enter키를 누르면 한자단어 선택기가 나옵니다. 원하는 한자를 선택하시면 됩니다.

Hanja 2

[mac] 맥에서 마우스 뒤로 가기, 앞으로 가기

맥(Mac)에서 마우스를 사용한다면 매직마우스를 사용하는 것이 가장 이상적이지만, 매직마우스의 그립감이나 제스처 적응이 쉽지 않아서 일반 마우스를 사용하시는 분들이 꽤 많습니다.

일반 마우스 중에 뒤로 가기 버튼이나 앞으로 가기 버튼이 포함된 것들이 있는데, 윈도우(Windows)에서는 이 버튼들이 바로 사용가능하지만 아쉽게도 맥(Mac)에서는 그렇지 않습니다.

애플의 매직마우스는 손가락 제스처로 뒤로 가기앞으로 가기를 별다른 설정없이 즉시 사용할 수 있지만, 일반 마우스에서의 뒤로 가기, 앞으로 가기 버튼 동작은 아래와 같은 설정을 해야 사용가능합니다.

  1. 링크에서 Karabiner Elements를 다운로드 한 후 설치합니다.
    Install karabiner

  2. 이 글을 포스팅 하는 시점의 Karabiner Elements의 버전은 11.6.0입니다. 안정화 버전에서는 마우스 설정을 해도 동작하지 않아 beta 버전으로 업그레이드 해야합니다. 응용 프로그램에서 Karabiner Elements를 실행한 후, Misc를 선택합니다. Check for beta updates 버튼을 클릭하여 최신버전의 Karabiner Elements로 업데이트 합니다.
    스크린샷 2018 04 11 오후 10 06 22
    스크린샷 2018 04 11 오후 10 12 12

  3. Complex Modifications에서 Add rule 버튼을 클릭합니다.
    스크린샷 2018 04 10 오후 9 32 23

  4. Import more rules from the Internet (open a web browser)를 클릭합니다.
    스크린샷 2018 04 10 오후 9 32 32

  5. 인터넷 브라우저가 열리면 mouse를 검색해서 Change mouse buttons를 찾아서 Import 버튼을 클릭한 후 Karabiner Elements에 허용하도록 합니다.
    스크린샷 2018 04 10 오후 9 36 48

  6. Change button4,5 to back,forward (rev 1)Enable 버튼을 클릭하면 Enabled rules에 추가된 것을 확인할 수 있습니다.
    스크린샷 2018 04 10 오후 9 37 43
    스크린샷 2018 04 10 오후 9 46 24

  7. Devices 탭에서 현재 연결된 5 Button 마우스 장치 앞의 체크박스를 선택해 줍니다. (연결된 마우스마다 이름이 다르니 아래 스크린샷은 참고만 하세요.)
    스크린샷 2018 04 11 오후 10 23 20

이제 인터넷 브라우저를 열고, 마우스 뒤로 가기 버튼과 앞으로 가기 버튼을 사용해보세요.

[mac] 맥에서 한영전환하는 다양한 방법들

국내에서 아이폰(iPhone) 사용자가 많아지면서 주위에 맥(Mac) 컴퓨터를 사용하시는 분들이 많아졌습니다. 윈도우(Windows)만 사용하시다가 처음 맥(Mac)을 접했을 때 대부분 사용자가 겪게 되는 문제가 바로 한영전환인데요, 아래와 같이 다양한 방법으로 한영전환이 가능합니다.

case.1 – caps lock

macOS Sierra 이상부터는 caps lock 키로 한영전환을 손쉽게 할 수 있습니다.
시스템 환경설정 > 키보드 > 입력 소스 탭의 하단에 Caps Lock 키로 ABC 입력 소스 전환을 체크하시면 됩니다.
Toggle kor eng with caps lock

caps lock 본연의 키로 동작되게 하려면 아래의 방법 중 하나를 선택하세요.
option + caps lock
shift + caps lock
caps lock키를 길게 누르기

case.2 – command + space (또는 control + space)

macOS Sierra 이전부터 한영전환으로 많이 사용해왔던 방법입니다. command + space 또는 contrl + space로 한영전환을 하실 수 있습니다.
Command+space highlight

case.3 – 오른쪽 command

space 키의 바로 오른쪽에 있는 command 키로 한영전환 하는 방법입니다. 제 경우 윈도우(Windows)와 동일한 방법으로 한영전환을 하기위해 이 방법을 사용합니다.

오른쪽 command키로 한영전환을 하기 위해서는 karabiner라는 프로그램이 필요하고, 아래와 같은 설정을 해야합니다.

  1. 링크에서 Karabiner Elements를 다운로드 한 후 설치합니다.
    Install karabiner

  2. 응용 프로그램에서 Karabiner Elements를 실행한 후, Simple Modifications를 선택합니다. 아래쪽에 Add item 버튼을 클릭한 후 From keyright_command를 선택, To keyf18을 선택합니다. 이렇게 설정되면 오른쪽 command키를 눌렀을 때 f18키를 누른 것과 동일합니다.
    Setting karabiner

  3. 시스템 환경설정 > 키보드 > 단축키탭에서 입력소스를 선택한 다음, 이전 입력 소스 선택의 단축키를 오른쪽 command로 변경합니다. (오른쪽 command키를 누르면 F18키가 할당됩니다.)
    Right command to f18

설정을 위와 같이 하셨다면 오른쪽 command키로 한영전환이 됩니다.