안경잡이개발자

728x90
반응형

대회 링크: atcoder.jp/contests/abc178

A번 문제: atcoder.jp/contests/abc178/tasks/abc178_a

 

  이 문제는 입력으로 1이 들어왔을 때 0을 출력하고, 입력으로 0이 들어왔을 때 1을 출력하면 되는 문제다.

 

[ 문제 해설 ]

 

  단순히 하라는 대로 구현하면 된다.

 

[ 정답 코드 ]

 

x = int(input())
 
if x == 0:
    print(1)
else:
    print(0)

 

B번 문제: atcoder.jp/contests/abc178/tasks/abc178_b

 

  a, b, c, d가 입력으로 들어왔을 때 a <= x <= b와 c <= y <= d가 성립하도록 x랑 y를 하나씩 뽑을 수 있다. 이때 만들 수 있는 x * y 중에서 가장 큰 값이 무엇인지 구하면 되는 문제다.

 

  단, a, b, c, d는 -10억부터 +10억 사이의 정수다.

 

[ 문제 해설 ]

 

  다음의 4가지 경우 중에서 가장 큰 값을 출력하면 된다.

 

  1) a * c

  2) a * d

  3) b * c

  4) b * d

 

[ 정답 코드 ]

 

a, b, c, d = map(int, input().split())
 
print(max(a * c, a * d, b * c, b * d))

 

C번 문제: atcoder.jp/contests/abc178/tasks/abc178_c

 

  길이가 n인 수열 {A1, A2, A3, ..., An}이 있을 때, 다음의 조건을 만족하는 수열의 개수를 세면 되는 문제다.

 

  ▶ 0 <= Ai <= 9

   값이 0인 원소가 하나 이상 존재한다.

   값이 9인 원소가 하나 이상 존재한다.

 

[ 문제 해설 ]

 

  이 문제는 N이 최대 1,000,000일 수 있으므로 O(N) 안쪽으로 해결해야 한다. 따라서 전형적인 DP를 이용해 문제를 해결할 수 있다.

 

  DP[n][0]: 길이가 N이면서 조건을 만족하는 수열의 개수 (단, 0의 개수: 0, 9의 개수: 0)

  DP[n][1]: 길이가 N이면서 조건을 만족하는 수열의 개수 (단, 0의 개수: 1 이상, 9의 개수: 0)

  DP[n][2]: 길이가 N이면서 조건을 만족하는 수열의 개수 (단, 0의 개수: 0, 9의 개수: 1 이상)

  DP[n][3]: 길이가 N이면서 조건을 만족하는 수열의 개수 (단, 0의 개수: 1 이상, 9의 개수: 1 이상)

 

  위와 같이 정의하여 해결할 수 있다.

 

  ... 그냥 더 쉽게 수학 공식으로 해결하자.

 

  ▶ 모든 경우의 수: 10^n

  ▶ 9를 제외한 경우의 수: 9^n

  ▶ 0을 제외한 경우의 수: 9^n

  ▶ 0과 9 둘 다 없을 때의 경우의 수: 8^n

 

  따라서 전체 경우의 수는 10^n - 9^n - 9^n + 8^n이다. 이를 포함배제의 원리(Principle of inclusion-exclusion)라고도 한다.

 

[ 정답 코드 ]

 

  참고로 값이 매우 매우 커질 수 있으나 파이썬(Python)의 경우 이를 효과적으로 처리한다.

 

n = int(input())
mod = int(1e9) + 7

result = ((10 ** n) - 2 * (9 ** n) + (8 ** n)) % mod
print(result)

 

D번 문제: atcoder.jp/contests/abc178/tasks/abc178_d

 

  하나의 자연수 S가 있을 때, 다음의 조건을 만족하는 수열의 개수를 구하고자 한다.

 

  ▶ 모든 원소가 3 이상의 정수

  ▶ 모든 원소의 합이 S

 

  예를 들어 S = 7이라고 하면 {7], {3, 4}, {4, 3}이 있으므로 답은 3이다.

 

[ 문제 해설 ]

 

  이 문제는 S가 최대 2,000이므로 이차 시간 안에 동작하는 알고리즘을 고안해야 한다. 또한 최적 부분 구조(Optimal Substructure)가 성립하므로 DP를 이용해 문제를 해결할 수 있다. 예를 들어 S = 7의 모든 경우의 수는 다음의 모든 경우를 고려한 것과같다.

 

  ▶ {7}

  ▶ {3}에 DP[4]의 모든 수열을 이어 붙인 것들

  ▶ {4}에 DP[3]의 모든 수열을 이어 붙인 것들

  ▶ {5}에 DP[2]의 모든 수열을 이어 붙인 것들

  ▶ {6}에 DP[1]의 모든 수열을 이어 붙인 것들

 

  이런 아이디어를 고려하면 다음과 같은 코드로 문제를 해결할 수 있다.

 

[ 정답 코드 ]

 

s = int(input())
d = [0] * 2001

# 일단 기본적인 초기 값들 계산해보기
d[0] = 0
d[1] = 0
d[2] = 0
d[3] = 1 # {3}
d[4] = 1 # {4}
d[5] = 1 # {5}
d[6] = 2 # {6}, {3, 3}
d[7] = 3 # {6}, {3, 4}, {4, 3}
d[8] = 4 # {8}, {3, 5}, {4, 4}, {5, 3}
d[9] = 6 # {9}, {3, 6}, {4, 5}, {5, 4}, {6, 3}, {3, 3, 3}
 
for i in range(10, 2001):
    summary = 1 # 일단 자기 자신 하나를 원소로 삼는 경우
    for j in range(3, i):
        summary += d[i - j]
        summary = summary % (int(1e9) + 7)
    d[i] = summary
 
print(d[s])

 

E번 문제: atcoder.jp/contests/abc178/tasks/abc178_e

 

  2D 공간에 N개의 점(Point)이 존재한다. 이때 맨해튼 거리(Manhattan Distance)가장 먼 두 개의 점을 찾는 문제다. 예를 들어 i와 j 두 점이 있으면 맨해튼 거리는 |Xi - Xj| + |Yi - Yj|를 의미한다.

 

[ 문제 해설 ]

 

  먼저 Xi <= Xj라고 했을 때 다음의 두 경우로 나눌 수 있다.

 

  ▶ 만약 Yi <= Yj라면 거리는 (Xj + Yj) - (Xi + Yi)이다.

  ▶ 만약 Yi > Yj라면 거리는 (Xj - Yj) - (Xi - Yi)이다.

 

  이 문제는 잘 알려진 문제로, 맨해튼 거리이기 때문에 이러한 조건이 성립한다. 참고로 맨해튼 거리가 아니라 유클리드 거리라면 컨벡스 헐(Convex Hull)을 활용해야 제한 시간 안에 문제를 해결할 수 있다.

 

  첫 번째 경우를 보면 X + Y만 구하면 된다는 것을 알 수 있다.

  두 번째 경우를 보면 X - Y만 구하면 된다는 것을 알 수 있다.

 

  결과적으로 max(max(x + y) - min(x + y), max(x - y) - min(x - y))를 출력하면 된다.

 

[ 정답 코드 ]

 

n = int(input())
plus = []
minus = []
 
for i in range(n):
    x, y = map(int, input().split())
    plus.append(x + y)
    minus.append(x - y)
 
result = max(max(plus) - min(plus), max(minus) - min(minus))
print(result)
728x90
반응형

728x90
반응형

  윈도우(Windows) 운영체제를 제공하는 삼성 노트북은 별도로 Samsung Settings라는 이름의 앱을 제공하고 있습니다. 말 그대로 설정(Setting) 목적의 앱이라고 보시면 됩니다. 이 앱에서는 노트북의 기본적인 설정 기능을 제공하고 있습니다. 사실 이 앱의 존재 여부조차 모르는 경우가 많은데요. 다음과 같이 Samsung Settings 앱을 검색해서 실행해 볼 수 있습니다.

 

  참고로 삼성 노트북에서는 이 Samsung Settings는 일종의 통합 설정 프로그램으로 하드웨어 및 시스템 설정에 영향을 미칠 수 있기 때문에, 이 앱의 설정에 따라서 웹캠을 사용할 수 없는 등의 현상이 발생할 수 있는 것입니다.

 

 

  이 앱에서는 다양한 기능을 제공합니다.

 

  ▶ 시스템: 자동 부팅(절전 모드에서 덮개만 열어도 자동으로 부팅), 저소음 모드(팬 소음 줄이기)

  ▶ 전원 관리: 배터리 수명 연장을 위한 Battery Life Extender 기능

  ▶ 네트워크: 다양한 WiFi가 있을 때 최적의 무선 네트워크를 우선적으로 표시

  ▶ 디스플레이: 화면 밝기 조절(아웃도어 모드 등), 색감 설정 기능

  ▶ 음향 효과: 사용자의 환경에 적절한 음향 효과(표준 모드, 영화 모드 등) 설정 기능

  ▶ 입력 장치: 키보드 백라이트(어둡게, 밝게 등) 설정 기능

  ▶ 사생활 보호: 보안 레벨(카메라/마이크 전원 강제 차단 등) 설정 기능

 

  이 중에서 사생활 보호 기능이 바로 카메라와 마이크를 강제로 저지할 수 있습니다.

 

 

  위 그림을 보시면 녹화/녹음 방지 기능높음으로 설정되어 있는 것을 확인할 수 있습니다. 이 경우 하드웨어적으로 카메라와 마이크의 전원을 차단하기 때문에 다음과 같이 장치 관리자에 가도 이 하드웨어 장치가 현재 컴퓨터에 연결되어 있지 않다고 출력이 됩니다. 말 그대로 연결이 안 되어 있다는 거죠.

 

  그래서 장치에 오류가 있다고 오해를 할 수도 있습니다. '아니 내 노트북에 버젓이 카메라가 있는데 왜 없다는 거지?'라는 생각이 들 수 있어요.

 

 

  다음과 같이 방지 수준을 중간으로 설정하면 다시 장치 관리자에 카메라가 잡힙니다.

 

 

  장치 관리자에서 확인해보아도 다음과 같이 정상적으로 동작하는 것을 알 수 있습니다.

 

728x90
반응형

728x90
반응형

대회 링크: codeforces.com/contest/1407

A번 문제: codeforces.com/contest/1407/problem/A

 

  이 문제는 0 혹은 1로만 구성된 수열이 주어졌을 때, 순서를 유지한 상태로 최대 N / 2개의 원소를 삭제해서 다음의 식이 성립하도록 만들어야 한다. (N은 항상 2의 배수)

 

  a1 - a2 + a3 - a4 + ... = 0

 

[ 문제 해설 ]

 

  이 문제의 해결 아이디어는 꽤 간단하다. 먼저 수열에 들어 있는 0과 1의 개수를 각각 계산한다.

 

  ① 만약 0의 개수가 더 많거나 같다면 0의 개수만큼 출력하면 된다. ② 만약 1의 개수가 더 많다면 1의 개수만큼 출력해야 한다. 단, 1의 개수가 홀수인 경우에는 1개 적은 만큼 출력해야 한다.

 

  예를 들어 [1, 0, 1, 0, 0, 0]이 들어왔을 때에는 [0, 0, 0, 0]을 출력하면 된다. [1, 0, 1, 1, 1, 0]이 들어왔을 때에는 [1, 1, 1, 1]을 출력하면 된다.

 

[ 정답 코드 ]

 

for _ in range(int(input())):
    n = int(input())
    data = list(map(int, input().split()))
    zero = 0
    one = 0
    for x in data:
        if x == 0:
            zero += 1
        else:
            one += 1
    if zero >= one:
        print(zero)
        for i in range(zero):
            print(0, end=' ')
    else:
        print(one // 2 * 2) # 홀수인 경우 1이 더 작은 수를 이용
        for i in range(one // 2 * 2):
            print(1, end=' ')
    print()

 

B번 문제: codeforces.com/contest/1407/problem/B


  이 문제는 N개의 양의 정수를 담은 수열 a1, a2, a3, ..., an이 있을 때, 원소를 하나씩만 사용해서 수열 b1, b2, b3, ..., bn를 만드는 문제다. 이때 ci = GCD(b1, ..., bi)라고 하자. 우리는 수열 c1, c2, c3, ..., cn이 사전적으로 최댓값을 가지도록 하고 싶다.

 

  예를 들어 수열 A = {64, 25, 75, 100, 50}라고 하면, 정답 수열 B = {100, 50, 25, 75, 64}를 찾을 수 있다.

 

[ 문제 해설 ]

 

  이 문제는 완전 탐색으로 해결할 수 있다. 그냥 이중 반복문을 돌리면서 Maximum을 찾으면 된다. 다만, GCD(x, y, z) = GCD(GCD(x, y), z)라는 점을 알고 있어야 한다. 또한 0은 모든 정수의 배수라는 점에서 GCD(0, x) = x라는 점을 기억하자. 사실 이는 잘 알려진 공식이므로 이를 이용하여 쉽게 문제를 해결할 수 있다. 참고로 GCD 함수는 로그 복잡도를 가지므로 빠르게 동작한다.

 

[ 정답 코드 ]

 

import math
 
for _ in range(int(input())):
    n = int(input())
    data = list(map(int, input().split()))
    gcd_value = 0
    for i in range(n):
        max_value = (0, 0) # (현재 GCD 값, index)를 한꺼번에 묶어서 저장
        for j in range(n):
            if data[j] != -1: # 아직 출력하지 않은 데이터 중에 GCD 값을 가장 크게 만드는 데이터 찾기
                max_value = max(max_value, (math.gcd(gcd_value, data[j]), j))
        gcd_value = max_value[0] # GCD 값 갱신
        print(data[max_value[1]], end=' ') # 해당 데이터 출력
        data[max_value[1]] = -1 # 해당 데이터 처리 완료
    print()

 

C번 문제: codeforces.com/contest/1407/problem/C


  이 문제는 1부터 N까지의 값을 하나씩 가지고 있는 하나의 순열(Permutation)을 찾는 문제다. 우리는 최대 2 * N만큼의 쿼리를 날려서 정보를 얻어올 수 있다.

 

  이때 ? i j라고 쿼리를 날리면, pi mod pj의 값을 알려준다.

 

[ 문제 해설 ]

 

  나도 이 문제를 풀면서 떠올리게 된 사실인데, 두 양의 정수가 있을 때 쿼리를 두 번 날리면 누가 더 큰 지를 알 수 있다. 예를 들어 서로 다른 양의 정수 x와 y가 있을 때 다음의 명제가 성립한다.

 

  x mod y > y mod x라면, ① x보다 y가 더 크며 ② x mod y = x이다.

 

  따라서 앞에서부터 두 수씩 묶어서 쿼리를 날려 본다. 쿼리를 날리면서 항상 몇 번째 수가 가장 큰 지를 저장하면서, 우리는 더 작은 수의 값을 매번 확실히 찾을 수 있다.

 

import sys
 
n = int(input())
 
answers = [-1] * (n + 1)
 
max_index = 1
next_index = 2
 
for i in range(n - 1):
    print("?", max_index, next_index)
    sys.stdout.flush()
    one = int(input())
    print("?", next_index, max_index)
    sys.stdout.flush()
    two = int(input())
    if one < two:
        answers[next_index] = two
    else:
        answers[max_index] = one
        max_index = next_index
    next_index += 1
 
answers[max_index] = n
 
print("!", end=' ')
for i in range(1, n + 1):
    print(answers[i], end=' ')
728x90
반응형

728x90
반응형

  제가 최근에 참여하고 있는 프로젝트에서 USB 디바이스 개발을 요구하고 있습니다. 그래서 USB 관련 장치(Device)를 직접 개발하기 위한 목적으로 사용할 수 있는 보드를 정리하고자 합니다. USB 디바이스 개발에 있어서 더 편리한 보드가 있을 수도 있습니다. 혹시 다른 좋은 보드를 아시는 분이 있다면 댓글로 남겨주시면 감사하겠습니다.

 

1. Teensy

 

  ▶ 링크: https://www.pjrc.com/store/teensy41.html

 

  Teensy는 USB 기반의 마이크로컨트롤러 개발 시스템입니다. 나만의 USB 장치를 새롭게 만들어 보거나 할 때 좋습니다. 최신 버전의 Teensy는 Teensy 4.1 (가격: $26.85)인데요. 이 보드(Board)의 특징은 다음과 같습니다.

 

 

  - USB 2.0 High Speed (최대 480Mbit/sec)
  - ARM Cortex-M7 processor at 600MHz
  - SD Socket
  - 8Mbyte Flash Memory
  - 아두이노 개발 환경과 연동 가능
  - 외부 센서 연동에 유리

 

  최신 Teensy 버전인 Teensy 4.1에서는 SD 소켓(Socket)을 포함하고 있어서, 간단히 Micro SD 카드만 있으면 이를 부착하여 사용할 수 있습니다. Native SDIO 프로토콜을 이용할 수 있어 SPI를 이용했을 때보다 훨씬 빠릅니다.

  이러한 SD 카드를 활용하면 더욱 다양한 예시를 만들 수 있습니다. 예를 들어 Teensy를 활용하여 임시 저장소, 키보드, 마우스 등의 USB 장치를 만들 수 있는데, 그와 동시에 사용자가 입력한 모든 정보를 Teensy에 부착된 SD 카드에 기록하거나 할 수도 있을 것입니다.

 

 

  참고로 Teensy 4.1은 USB 호스트 포트 또한 지원합니다. 다시 말해 Teensy를 호스트 PC처럼 사용할 수 있습니니다. 예를 들어 Teensy와 키보드를 서로 연결하여 키보드에 입력한 정보가 Teensy에 임시적으로 기록되었다가, Teensy에서 다시 실제 호스트(Host) PC로 데이터를 넘겨 주는 것도 가능할 것입니다. 이를 위해서는 별도로 USB 호스트 케이블이 필요하다고 하네요. 다음과 같은 케이블을 산 뒤에 Teensy 4.1의 5핀에 꽂아서 사용할 수 있습니다. 실제로 USB 호스트 포트를 이용하는 경우는 다음의 그림과 같습니다.

 

 

  그리고 Teensy의 가장 큰 특징은 아두이노(Arduino) 개발 환경을 그대로 이용할 수 있다는 점입니다. Teensy 공식 홈페이지에서 제공하는 Teensyduino를 설치하면 다음과 같이 아두이노 개발 환경에서 사용 가능한 보드로 Teensy가 보이게 됩니다. 이 경우 아두이노 개발 환경을 이용하되 코어 라이브러리의 코드는 Teensy 전용 코드로 이용할 수 있습니다.

 

 

2. ODROID

 

  ▶ 링크: https://www.hardkernel.com/ko/shop/odroid-c2/

 

  오드로이드(ODROID)하드커널(Hardkernel) 회사에서 만든 개발용 보드입니다. 라즈베리파이처럼 유사하게 사실상 소형 컴퓨터나 다름 없습니다. 그러면서도 성능이 좋은 편입니다. 실제로 성능을 확인해 보시면 기가비트 속도의 이더넷(Ethernet), 2기가 바이트 DDR3 SDRAM, HDMI 포트 또한 있으며 USB 포트도 5개나 있습니다. 그리고 우분투 16.04가 올라갈 수 있습니다.

 

  참고로 라즈베리파이나 틴시(Teensy) 같은 보드는 마이크로 USB를 통해서 전원을 공급 받지만, 오드로이드의 경우 별도의 2.5mm 어댑터를 이용해 전원을 공급해야 합니다.

 

  오드로이드 제품군 중에서 ODROID-C2 (가격: $52,900)는 2020년 기준으로 가장 인기 있는 제품 중 하나입니다.

 

 

  - USB OTG 지원: USB 2.0 High Speed (최대 480Mbit/sec) 
  - Amlogic ARM® Cortex®-A53(ARMv8) 1.5GHz quad-core CPUs 
  - 2Gbyte DDR3 SDRAM 
  - Ubuntu 16.04 설치 가능
  - Devier Driver (Gadget)를 활용한 Mass Storage Device 등으로도 활용 가능

 

  가장 일반적인 사용 형태는 다음과 같을 것입니다. 아래 이미지는 ODROID 사에서 제공하는 동영상을 캡처한 것입니다. 확인해 보시면 전원은 별도로 연결해 주고 HDMI에 모니터를 연결하여 사용하는 것을 알 수 있습니다.

 

 

  이후에 동작 과정은 일반적인 리눅스 기반 컴퓨터와 같습니다. 예를 들어 우분투 OS를 설치했다면 미니 서버용 컴퓨터로 사용할 수도 있을 것입니다. 예를 들어 단순히 나만의 파일 저장용 서버로 사용할 수도 있을 것이고, 사용 예시는 매우 다양합니다.

 

  ODROID-C2의 또 다른 큰 장점은 USB 포트를 매우 많이 제공한다는 점입니다. 이는 USB 디바이스 개발 목적으로도 활용도가 높습니다. 특히 USB OTG(USB On-The-Go)를 제공한다는 점에서 ODROID-C2를 마우스나 키보드와 같이 동작하도록 만들 수도 있습니다.

 

  참고로 ODROID-C2는 잘 팔리는 제품이라서 품절이 발생할 수 있습니다. 만약 품절이라면 입고 알림 메시지를 받도록 할 수 있습니다.

 

 

  만약 ODROID-C2가 품절 상태라면 ODROID-C1+를 구매할 수도 있습니다. ODROID-C1+ 또한 USB OTG 포트와, 4개의 USB Host 포트를 가지고 있기 때문에 USB Device 개발 목적으로 적합합니다. 다만 컴퓨팅 파워는 ODROID-C2에 비해서 떨어지는 편이고 가격은 조금 더 저렴합니다.

 

  성능을 비교하면 다음과 같습니다.

 

 

  참고로 주문하실 때에는 배송지를 [대한민국]으로 설정하시지 않으면 아주 큰 요금으로 설정될 수 있습니다. 그러므로 처음에 배송비가 너무 크게 찍혀 있다고 놀라지 마세요. ODROID는 국내 기업 제품이라서, 배송지를 국내로 변경하면 일반적인 배송비가 나옵니다.

 

3. Raspberry Pi

 

  ▶ 링크: https://www.raspberrypi.org/products/raspberry-pi-zero-w/

 

  라즈베리파이(Raspberry Pi)는 아두이노(Arduino)와 더불어 매우 유명한 보드 중 하나입니다. 일종의 소형 컴퓨터로 볼 수 있으며, 매우 저렴한 가격으로도 좋은 컴퓨팅 파워를 제공합니다. 작은 웹 서버를 운용하는 프로젝트 등에서 자주 나오는 보드이기도 합니다. 실제 보드 크기는 학생증 카드보다 조금 더 큰 크기입니다.

 

  라즈베리파이 보드 중에서도 가성비가 매우 높은 것으로 알려진 보드는 Raspberry Pi Zero W입니다.  이 Raspberry Pi Zero W (가격: $10)는 가격이 매우 저렴하고, 해외 주문을 고려해도 굉장히 쌉니다. 특히 크기가 매우 작아서 휴대성이 뛰어납니다. 학생증보다도 훨씬 작아요. 원래 Raspberry Pi Zero 모델이 출시가 되었는데, 여기에 Wireless LAN과 Bluetooth를 추가하여 Raspberry Pi Zero W라는 이름으로 출시가 되었습니다.

 

  - 1GHz single-core ARMv6 CPU (BCM2835)
  - SD Socket
  - 512MB RAM
  - Linux, Windows 등 다양한 OS 설치 가능
  - USB OTG 지원: 단, 사용 예시를 찾아보니 Mass Storage Class로 5~6MB/s 정도의 속도만 나온다고 함

  - Micro USB로 전원 공급
  - Devier Driver (Gadget)를 활용한 Mass Storage Device 등으로도 활용 가능

  - 802.11 b/g/n wireless LAN

 

  그래서 라즈베리파이 제로 W 버전 또한 사실상 운영체제(OS)를 올릴 수 있는 소형 컴퓨터와 마찬가지입니다. SD 카드를 부착할 수 있기 때문에 SD 카드에 우분투와 같은 운영체제(OS)를 설치해 놓고, 이를 라즈베리파이 제로 W에 연결하여 SD 카드로부터 바로 부팅을 진행할 수 있습니다. 당연히 미니 HDMI 케이블도 있기 때문에 모니터와 연결하여 화면을 볼 수도 있습니다.

 

  또한 라즈베리파이 제로 W는 USB OTG 기능을 지원하기 때문에 USB 디바이스를 개발할 때에도 유용합니다. 아래와 같이 라즈베리파이 제로 W가 있으면 USB 포트 하나로 전원을 공급하고, 다른 USB 포트 하나를 더 써서 호스트(Host) PC와 데이터를 주고 받는 목적으로도 쓸 수 있습니다.

 

 

  참고로 Raspberry Pi Zero W는 원래 $10의 저렴한 가격이지만, 국내에서 구매하려고 하면 굉장히 비쌉니다. 따라서 일반적으로 해외에서 직구하는 경우가 많습니다. (다만, 배송하는 물품의 개수가 많지 않다면 배송비 때문에 오히려 더 비싸질 수 있습니다.) 캐나다 기업인 CanaKit에서 구매할 수 있는데, 여기에서 주문하면 통상 3주 안에는 도착한다고 합니다. 저도 여기에서 구매를 해보았습니다.

 

   ▶ CanaKit 라즈베리파이 구매 경로: www.canakit.com/raspberry-pi-zero-wireless.html

 

Raspberry Pi Zero W (Wireless)

 

www.canakit.com

 

  CanaKit에 접속하면 다음과 같이 Raspberry Pi Zero W를 찾으실 수 있습니다. 일반적으로 Basic Kit이나 Starter Kit을 이용하는 편입니다. Starter Kit을 이용하면 Power Supply, USB OTG Cable 등의 구성을 함께 받으실 수 있습니다.

 

 

  상세한 물품 구성은 다음과 같습니다. Raspberry Pi Zero W 단품만 구매하는 경우에는 사람당 1개씩으로 개수를 한정하는 것 같습니다. 온전한 하나의 미니 컴퓨터 형태를 원한다면 Start Kit을 이용하시면 됩니다.

 

 

  최종적으로 다음과 같이 장바구니에 담은 물품을 구매하실 수 있습니다.

 

 

  다만, 실제로 구매할 때는 배송비가 상당히 비싸네요.

 

 

  아무튼 결제 카드를 이용하여 구매하게 되면 결제 정보가 이메일로 도착하여, 이를 확인하실 수 있습니다.

728x90
반응형

728x90
반응형

  어딘가에 정확히 송금을 했는지 확인하기 위해 요구하는 대표적인 문서로는 이체증(이체 확인증)이 있습니다. 다만 토스(Toss)와 같이 간편 이체 서비스를 제공하는 앱을 이용하는 경우에는 어떻게 이체증을 받을 수 있을까요? 토스의 경우에는 별도로 "입금확인증"을 문서 형태로 발급해주는 기능을 가지고 있습니다.

 

  가장 먼저 바로 앱에서 [고객센터] 탭으로 이동합니다.

 

 

  이후에 [입금확인증 요청] 탭에 들어갑니다.

 

 

  이제 자신이 입금한 내역 중에서 문서로 출력하고자 하는 내용을 선택합니다.

 

 

  결과적으로 다음과 같이 PDF 파일 형태로 이체 확인증을 발급 받으실 수 있습니다. 발급 요청을 하자마자 바로 파일로 받아보실 수 있어서 간편합니다.

 

 

728x90
반응형

728x90
반응형

  컴퓨터 공학을 전공하는 학생들은 공부 목적으로 잘 알려진 악성 코드를 분석해보고 싶은 경우가 많습니다. 이때 유용하게 사용할 수 있는 사이트 중 하나가 바로 Hybrid Analysis입니다. 다양한 악성코드에 대해서 샘플 파일을 제공하고 각 악성코드에 대한 분석 결과를 알려줍니다.

 

  ▶ Hybrid Analysis 웹 사이트: https://www.hybrid-analysis.com/

 

  웹 사이트에 방문하면 바로 악성 코드 파일을 올려 볼 수 있도록 UI가 등장합니다.

 

 

※ 회원가입 ※

 

  참고로 해당 사이트를 제대로 이용하기 위해서는 회원가입을 진행해야 합니다. 특히 공개된 악성 코드를 다운로드 하기 위해서는 회원가입 과정이 필수입니다. 만약 아무나 악성 코드를 쉽게 다운로드 할 수 있다면, 악용하는 경우도 많을 것입니다. 본 사이트는 그러한 악용 사례를 미연에 방지하기 위하여 회원가입 및 인증(심사) 제도를 채택하고 있습니다.

 

 

  다음과 같이 상세한 정보를 기입하여 회원가입을 진행할 수 있습니다. 단순히 네이버나 구글 이메일이 아니라 자신의 소속을 정확히 알릴 수 있는 이메일 계정(학교나 기업 계정)을 사용하시는 것이 좋습니다.

 

 

  회원가입을 진행하면 계정 활성화 관련 이메일이 도착합니다.

 

 

※ 악성코드 검색 및 내용 확인 (다운로드) ※

 

  또한 직접 악성 코드를 검색해 볼 수 있는 기능도 제공합니다. 기본적으로 악성 코드 이름, 웹 사이트 도메인, 프로그램 해시 값 등으로 검색이 가능합니다. 저는 랜섬웨어(Ransomware)의 일종인 Mamba를 검색해 보았습니다.

 

 

  검색 이후에 실제로 하나의 악성 코드를 클릭해 보시면 다음과 같이 분석 결과가 나옵니다. 오른쪽에는 [Sample] 다운로드 버튼이 있는데요. 이걸 클릭해서 다운로드 하실 수 있습니다.

 

 

  다만 다운로드를 진행하기에 앞서 심사(Vetting) 과정이 필요합니다. Hybrid Analysis는 철저히 연구 목적으로 악성 코드 파일을 공유하는 서비스이므로, 악의적인 목적으로 서비스가 악용되지 않아야 할 것입니다. 따라서 웹 사이트 단에서 기본적인 심사 과정을 거치고 있습니다.

 

 

  이때 자신을 소개할 수 있는 상세한 내용을 기입하여 요청해야 합니다. 적법한 보안 연구 관련 기관에 소속되어 있는지를 잘 드러낼 수 있다면 심사 과정에 큰 어려움이 없습니다. 이때 단순히 네이버나 구글 계정을 기입하는 것으로는 부족합니다. 예를 들어 정보를 간략하게 넣는 경우 다음과 같이 Rejected 판정을 받을 수 있습니다.

 

 

  그래서 상세한 정보를 제공하기 위해 연구 기관 이메일을 이용하면 좋습니다. 저는 다음과 같이 학교 이메일, 링크드 인, 깃 허브 주소 등을 적어 넣었습니다.

 

 

  심사가 완료되면 악성 코드를 다운로드 할 수 있으며, 당연한 이야기이지만 악성 코드를 분석할 때는 안전한 가상 환경에서 실험을 진행하도록 합니다.

728x90
반응형

728x90
반응형

  건강보험자격득실확인서는 기관/직장에서 자주 요청하는 서류 중 하나입니다. 특히 건강보험 자격 득실 여부를 통해 어디에서 일을 했는지에 대한 내용이 모두 나오기 때문에 근무 이력 등을 확인하기 위해서 많이 요청합니다. 가장 먼저 국민건강보험 사이버민원센터로 이동합니다.

 

  ▶ 링크: https://minwon.nhis.or.kr/

 

  접속한 이후에 바로 [자격득실확인서 발급] 페이지로 이동하면 됩니다.

 

 

  건강보험 자격 득실 확인서를 발급받기 위해서는 공인인증 로그인이 필요합니다.

 

 

  그래서 가장 먼저 공인인증서를 이용해 로그인을 해주세요.

 

 

  이후에 [프린트발급] 버튼을 눌러서 발급을 하실 수 있습니다.

 

728x90
반응형

728x90
반응형

  개인적으로 영어 발표를 해야 할 때는 혹시나 내가 잘못 알고 있는 발음이 있는지 확인해보는 것이 좋습니다. 이럴 때는 TTS 서비스를 사용해볼 수 있습니다. TTS는 말 그대로 영어 문장(Text)이 입력으로 들어왔을 때 이를 말(Speech)로 바꾸어주는 기능을 제공합니다. 제가 개인적으로 사용하는 TTS 서비스로는 다음과 같은 것들이 있습니다.

 

  ▶ NaturalReader

 

text to speech online

text to speech online

www.naturalreaders.com

 

  먼저 NaturalReader 사이트에 접속하면 인터넷으로 간단히 TTS 데모를 실행해 볼 수 있습니다. TTS 퀄리티 자체는 다른 사이트와 유사한 성능이지만, 데모를 실행해 볼 때 글자 길이 제한이 넉넉한 편이라는 장점이 있습니다. 다만 단순히 듣는 것은 공짜(무료)이지만 MP3를 다운로드 받기 위해서는 Premium Plan(유료)을 이용해야 합니다. 다음과 같이 텍스트를 입력하고, 성우를 설정한 뒤에 [Play] 버튼을 누르면 음성이 나옵니다.

 

 

  ▶ Nuance Text-to-Speech (TTS)

 

Text-to-Speech (TTS) Engine in 119 Voices | Nuance

Learn how the Text-to-Speech (TTS) engine allows you to establish your brand's voice and maintain consistent delivery across customer service channels.

www.nuance.com

 

  NuanceTTS 서비스 또한 인터넷에 접속하여 바로 데모를 실행해 볼 수 있습니다. 마찬가지로 이 사이트도 데모를 실행할 때의 글자 길이 제한이 넉넉한 편이라서 많이 테스트를 해볼 수 있습니다. 다시 말해 데모인데도 불구하고 많은 텍스트를 넣을 수 있기 때문에 사실상 무료처럼 느끼고 사용하고 있습니다. TTS 성능은 다른 서비스에 비해서 준수한 편입니다. 다음과 같이 성우를 선택한 뒤에, 텍스트를 입력하고 [Play] 버튼을 누르시면 됩니다.

 

728x90
반응형

728x90
반응형

  무료 동영상 녹화 프로그램 중에서 가장 많이 사용되고 있는 프로그램 중 하나인 OBS Studio에서 자주 등장하는 오류로는 검은 화면 오류가 있습니다. 말 그대로 화면이 캡처되지 않고 검은 화면만 나오는 것을 의미합니다.

 

 

  [디스플레이 캡처] 화면을 더블 클릭하여 속성을 확인해도 다음과 같이 캡처가 이루어지지 않는 것을 확인할 수 있습니다.

 

 

※ NVIDIA 제어판 설정으로 해결하기 ※

 

  일반적으로 이 문제는 그래픽 카드 설정 때문에 발생합니다. 기본적으로 NVIDIA 제어판에서 OBS를 NVIDIA 그래픽이 아닌 통합 그래픽 카드를 이용하도록 하면 문제가 해결되는 경우가 많습니다. 따라서 먼저 OBS가 설치된 경로를 확인해야 합니다. 제가 설치한 OBS는 obs64.exe라는 실행 파일 형태로 존재합니다.

 

 

  먼저 OBS를 끈 뒤에 [NVIDIA 제어판]에 들어갑니다.

 

 

  NVIDIA에서 OBS 프로그램의 기본 그래픽 프로세서를 [통합 그래픽]으로 설정하면 됩니다. (만약에 프로그램이 보이지 않는다면 아까전에 확인한 OBS가 설치된 경로에서 실행 파일을 선택하여 추가하면 됩니다.)

 

 

  이제 다시 OBS를 실행하면 검은 화면이 아니라 정상적으로 디스플레이가 출력됩니다.

 

※ 아직도 해결되지 않는다면 ※

 

  위와 같이 NVIDIA 제어판에서 OBS를 [통합 그래픽]으로 설정을 해주었음에도 불구하고 여전히 해결이 되지 않았다면 [디스플레이 설정]에 들어가서 [그래픽 설정] 탭으로 이동합니다.

 

 

  이후에 그래픽 설정 탭에서 [찾아보기] 버튼을 누르고 설정을 하기 위한 OBS 앱을 찾습니다.

 

 

  다음과 같이 OBS 앱을 선택한 뒤에 [옵션] 버튼을 누를 수 있습니다.

 

 

  그래픽 기본 설정으로 [절전]을 선택합니다. 일반적인 노트북 환경에서 [절전] 모드는 통합 그래픽을 의미합니다.

 

 

  이제 [저장]을 누르고 다시 OBS를 실행해 주면 정상적으로 디스플레이가 출력됩니다. 사실 OBS의 검은 화면 오류는 그래픽 카드 설정 말고도 다양한 이유로도 발생할 수 있으므로, 문제가 발생한다면 원인을 찾기 위해 많이 검색해보셔야 합니다.

728x90
반응형

728x90
반응형

  프로그램을 개발할 때는 테스트를 위해 다양한 종류의 데이터가 사용될 수 있습니다. 예를 들어 임의의 JSON 값이나 MAC 주소 값 등이 사용될 수 있습니다. 다만, 이때 매번 랜덤한 데이터를 생성하는 것은 귀찮은 작업이 될 수 있습니다. 따라서 다음과 같은 사이트를 이용하면 좋습니다.

 

  ▶ 랜덤 MAC 주소 생성기: https://onlinerandomtools.com/generate-random-mac

 

  랜덤 MAC 주소는 다음과 같이 생성할 수 있습니다.

 

 

  ▶ 랜덤 JSON 데이터 생성기: https://onlinerandomtools.com/generate-random-json

 

 

  ▶ 랜덤 UUID 데이터 생성기: https://onlinerandomtools.com/generate-random-uuid

 

728x90
반응형