반응형

젠하이저 모멘텀 3를 쓰며 꽤 재밌는 경험을 했고, 
혹시 나와 같은 문제를 겪는 사람이 있을지도 몰라서 내용 공유차원에서 글을 남긴다.



문제 현상

오른쪽 buds에서 특정 조건(사실 일상 생활에서 거의 대부분이라고 할 수 있는 환경)에서 반복적으로 '삑' 하는 beep 사운드의 반복

아래의 글은 문제 발생부터 해결까지의 일화를 적어둔 것이다.
내가 무슨 과정을 거쳤고 무슨 생각을 했었는지는 관심 없이 해결 방법이 궁금하다면,
스크롤을 쭉 내려서 해결 이라고 되어있는 부분만 읽어도 될 것이다.

내가 이 이어폰을 산 시점은 22년 10/29 이다. 
대충 2년 가까이 되어가는 중에 특이한 현상이 발생했다.

최초 발생

처음 이 현상은 랩탑과 이 이어폰을 연결했을 때 발생했다.
신기한 점은 이 이어폰을 그때 처음 페어링 한 것이 아니라, 페어링은 이미 진작에 해두었고 어느때와 같이 사용을 하다 발생한 것이다.
현상 또한 특이했는데 고개를 가만히 두면 괜찮다가도 고개를 획 돌리거나 하면 '삑' 하는 소리가 오른쪽 buds 에서 나는 것이었다.
지속적으로 발생하는 것이 아니었기에 뭔가 연결 과정에서 개입을 했거나, 당시의 환경에 노이즈가 꼈을 것이라 짐작하였다.
그리고 그 후로 한 2주 정도는 현상이 발생하지 않았다.

만성적 발생 #1

2주 정도 흐른 뒤, 집에서 음악을 들으며 설겆이를 하려고 이어폰을 꼈다.
그리고 설겆이를 시작한지 한 30초 정도 지났을까, '삑' 하는 소리가 또 났다.
하지만 이번에는 내가 고개를 어떻게 하던가와는 상관없이 '삑' .. '삑' .. 계속해서 반복되며 소리가 나고 있었다.
체감 상 대충 1200 ms 정도의 주기정도로 반복되었다. 
처음엔 하드웨어를 의심하였다. 내가 이어폰을 떨어뜨린 적이 있었나..?
어찌 되었건 이 현상은 나아질 기미를 보이지 않았고, 그냥 왼쪽 buds로만 들으며 설겆이를 하기로 하였고 그렇게 넘어갔다.

만성적 발생 #2

현상을 설명하는 것에 있어 추가적인 패턴을 찾게되었다. 
나는 설겆이, 내 아내는 청소기를 돌리며 청소를 하던 때였다.
아내가 가까이 오면 이어폰이 '삑삑삑' 소리를 내는 것이었다.
추가적으로 발견한 현상은 싱크대의 물을 틀면 또 소리를 내는 것이었다.
그래서 원인을 치찰음과 같은 고주파의 음이 buds의 동작에 영향을 주는 것으로 짐작하였다.
모멘텀 3는 ANC, Ambient 같은 기능이 있기에 일종의 DSP 같은 것이 있을 것이고, 이 쪽에서 동작에 오류가 생겼다고 판단하였다.

해결 시도 

우선 하드웨어의 문제가 아닌 소프트웨어의 문제로 방향을 잡았다.
주변의 소음을 없앤 환경에서 이어폰을 켜면 현상이 나타나지 않았다. 
뭔가 잡음 환경이 생기면 현상이 나타났다. 
확실히 소프트웨어의 문제일 것이라 생각하였다. 
제일 먼저 이어폰 전용 앱을 설치해서 이것저것 factor를 조절해보았지만 소용 없었다.
그 다음으로 공장 초기화를 3번이나 반복해보았으나 해결되지 않았다.
각 buds의 펌웨어 버전을 확인해도 최신이었다.
구글링을 해도 딱히 나와 같은 현상은 검색되지 않았다.

해결 (아마도?)

계속된 구글링을 하던 중, reddit에서 비슷한 현상을 겪는 사람을 찾았다.
ANC 모드를 켜면 이상한 소리가 난다는 것이다. (내 경우엔 어떤 모드던 동일하게 발생했지만)
일단 그 글을 계속 일어내려갔고 여러 댓글들이 있었다.
나와 같이 오른쪽에서만 문제가 나오는 사람도 있고,
수리를 맡겼더니 새걸로 교환해줬다는 사람도 있었다.
아.. 수리를 맡겨야 하나.. 하던 차에 바로 아래에 이상한 글이 있었다.

얘들아, 이거 고치는 방법 알아냈어. 이게 왜 효과가 있는지는 모르겠지만 밀이야.

 

그 방법은 정말 이상했다. 
방법은 다음과 같았다.

1. 케이스에서 이어폰을 꺼낸다.
2. 귀에 착용하고 폰과 이어폰을 연결
3. 연결 직후 다시 케이스에 이어폰을 넣기
4. 다시 케이스에서 이어폰 꺼내기
5. 고쳐짐

 

실제 내용 첨부 wtf it actually wokred ㅋㅋ



그러니까, 한줄로 요약하자면 '한번 귀에 꼈다가 다시 케이스에 넣고 다시 귀에 껴' 라는 해결 방법인 것인데,
그래도 나름 임베디드 개발로 밥 벌어먹고 살고 있는 내가 받아들이기엔 너무 이상한 해결 방법이라고 생각했다.
그런데 또 한편으론, 개발하면서 별 이상한 상황들을 많이 마주치기도 하기 때문에 '오...?' 하는 마음도 생겼다.

일단 해보지 뭐.. 라는 마음으로..
그대로 이어폰을 꺼내 귀에 끼고서 연결이 되었다는 소리가 나자마자 다시 케이스에 넣고 그대로 다시 귀에 이어폰을 껴봤는데..
이게 되네..? 어이가 없이 더이상의 '삑' 소리는 나지 않았다.

 

후기

짧게 생각해보기론, 
케이스에서 이어폰을 꺼낼때 buds가 각각 부팅이 된다고 가정해보았을 때,
드라이버의 초기화가 제대로 되지 않아서 재부팅을 하는 방식으로 문제를 해결했다는건 아닌가 싶었다.

하지만 이것도 역시 이상한게, 그렇다면 왜 매번 최초에 케이스에서 꺼낼때 현상이 시작되고
위의 해결방법을 따르면 왜 해결 되는것인가..?
드라이버 초기화의 문제라면 간헐적으로 나와야 할 현상이 왜 매번 발생하는가..? 
이러한 궁금증이 생기긴 했지만 내가 뭐 이쪽 코드를 확인해볼수도 없는 것이고...
당장 오른쪽 귀를 괴롭히던 이상한 소리가 없어졌으니 이걸로 만족하기로 하였다.

아직 몇번 해보지 않았으나 당장은 '삑' 소리가 없어졌기에 일단은 고쳐진 걸로 생각하기로 했다.
언젠가 펌웨어 업데이트를 해주겠지라는 마음으로...

 

출처 : https://www.reddit.com/r/sennheiser/comments/wcvv5s/my_mtw3_keeps_making_a_weird_sound/

반응형
반응형

임신 준비를 시작했다.

우리 부부는 파워 J라 결혼하고 지난 몇 년간은 계획하에 아기를 가지지 않았었다.

그러다 이제는 각자의 직장에서도 안정적으로 자리를 잡았고, 모든 여건이 때가 되었다고 생각하고 아기 준비를 시작하였다.

 

1. 산전검사

우리가 많은 나이는 아니었지만, 적은 나이도 아니었기에 산전검사를 우선적으로 받았다.

사실 여자들은 임신준비가 아니어도 산부인과를 가본 경험이 있을 것이고, 그 과정에서 본인의 건강에대해 대강은 알고있을 것이다.

반면에 남자들은 한번도 검사를 안해본 사람이 대부분일 것이다. 그래서 나는 남자들도 꼭 검사를 같이 받아보는 것을 추천한다.

여자들은 어느 산부인과에서든 산전검사가 가능하지만, 남자는 분만병원에서만 검사가 가능하다.

그렇게 검사를 받은 결과, 나와 남편은 모두 비타민 D 결핍이었고, 나는 A형 간염, B형 간염 항체가 없었다.

그리고 다행히 나머지는 이상이 없었다 👍

비타민 D는 착상에 중요한 역할을 하므로 주사를 맞아서 보충하였다. 3개월 정도 간다고 하였고, 약국에서 비타민도 사서 꾸준히 복용하였다.

그리고 간염 주사도 추가로 맞았다.

A형은 1,2 차 B형은 1,2,3 차 까지 맞아야한다.

나는 A형 1차, B형 2차까지 맞고 병원을 옮겨서 맞았다.

전에 다니던 병원에 전화해서 내가 맞은 주사 종류를 물어보고 현재 다니던 병원도 다행히 같은 종류여서 이어서 맞을 수 있었다.

 

 

 

2. 여행

아기를 가지기 전 우리는 마지막 여행일 것을 직감하며 해외여행 계획을 짜게 되었다.

처음에는 베트남 다낭을 여행하기로 결정하고 비행기와 숙소까지 모두 예약해버렸다.

평소에 비행기와 숙소를 예약하면 어떻게든 가게되진다는 생각을 갖고있었어서 여행지를 결정하자마자 쭉쭉 진행해버렸던 것이다...!

그렇게 몇 일이 지나고 직장동료와 얘기하던중 베트남이 지카 바이러스 위험국인것을 알게되었다 ㅠㅠ....

지카 바이러스는 태아가 소두증에 걸릴 수 있는 바이러스이다.

지카바이러스 위험국을 다녀오면 최소 6개월 정도는 피임을 하는 것을 권장 하는 것 같았다.

우리 부부에게는 너무너무나 피해야하는 국가였던 것이다 ㅠㅠ...

아쉽지만 우리는 가기전에 알게 된 것에 안도하며 멍청비용을 지불한셈치고 비행기와 숙소 예약을 취소했다 😢

 

하지만 포기하지 않고 우리는 후보 2위였던 괌 으로 여행지를 변경하였다 😄

지카바이러스도 피하고 가보고 싶었던 휴양지도 가보고 이런게 바로 러키비키 아닐까....🍀

ㅋㅋㅋㅋㅋ

 

 

 

3. 배란 테스트기

우연히 약국에 들렀다가 정말 우연하게도 배란 테스트기를 발견하였다.

그것도 남편이 임신 테스트기랑 배란 테스트기가 다른건가 ....? 하며 물어서 인지하게 되었다 ㅎㅎ

내가 구매한 것은 원포 배란테스트기이다.

이전에 직장 동료로부터 배란 테스트기가 있다는 얘기를 들었던 기억이 있어서 아 맞다!! 저거 사야해!! 하고 바로 집어들었다.

그때는 원포가 유명한건지 몰랐는데, 후에 맘카페 들어가서 보니까 유명한 브랜드였다ㅎㅎ

 

 

원포 배란테스트기는 소변에 담궈서 확인을 해야하는데 별도의 컵은 들어있지 않으므로 편의점에서 종이컵까지 같이 구매해서 집으로 돌아왔다ㅎㅎ

 

 

박스에 20개가 들어있고, 각 테스트기 포장 껍질에 테스트방법과 결과판독이 또 프린팅되어있어서 편리했다.

 

두 줄일 때 음성일수도, 양성일수도 있어서 좀 헷갈렸다.

보통 임신테스트기면 두줄이면 양성이어서 😅...

그래서 양성일때도 내 눈을 믿지 못하고 남편과 같이 판독했다 ㅎㅎㅎㅎㅎ

 

이렇게 우리 부부는 조금 얻어걸린 부분이 있지만 ㅎㅎ 아기를 가질 준비를 시작하게 되었다 !!

반응형
반응형
개발 중에 귀찮은 일들을 스크립트로 만들어두고 공유하려는 목적입니다.
만약 더 좋은 방법을 알고 계신다면면 댓글 달아주세요 !

 

script

import subprocess
from concurrent.futures import ThreadPoolExecutor
import argparse
import ipaddress
import os
import time

# Function to clear the console
def clear_console():
    # Use 'cls' for Windows and 'clear' for Unix-like systems
    os.system('cls' if os.name == 'nt' else 'clear')

# Function to ping an IP address
def ping_ip(ip):
    result = subprocess.run(['ping', '-c', '1', '-W', '0.5', ip], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
    if result.returncode == 0:
        return ip
    return None

# Function to ping multiple IPs and return the alive ones
def ping_ips(ips):
    alive_ips = []
    with ThreadPoolExecutor(max_workers=100) as executor:
        results = executor.map(ping_ip, ips)
    
    for ip in results:
        if ip:
            alive_ips.append(ip)
    
    return alive_ips

# Function to format the output
def format_output(start_ip, end_ip, alive_ips):
    clear_console()  # Clear the console before printing
    print(f"Scanning Range\n{start_ip} ~ {end_ip}")
    
    if alive_ips:
        print("\nAlive")
        for ip in alive_ips:
            print(f"- {ip}")
    else:
        print("\nAlive\n- None")

# Function to generate IP range from start to end IP
def generate_ip_range(start_ip, end_ip):
    start = ipaddress.IPv4Address(start_ip)
    end = ipaddress.IPv4Address(end_ip)
    return [str(ipaddress.IPv4Address(ip)) for ip in range(int(start), int(end) + 1)]

# Main function
def main():
    parser = argparse.ArgumentParser(description="Ping IP addresses within a specified range.")
    parser.add_argument('--start', required=True, help="Start IP address")
    parser.add_argument('--end', required=True, help="End IP address")
    parser.add_argument('-r', '--repeat', action='store_true', help="Repeat indefinitely until stopped")
    args = parser.parse_args()

    ips = generate_ip_range(args.start, args.end)

    try:
        if args.repeat:
            # Infinite loop until stopped manually (e.g., with Ctrl+C)
            while True:
                alive_ips = ping_ips(ips)
                format_output(args.start, args.end, alive_ips)
                time.sleep(1)  # Optional: Add a short delay between repetitions if needed
        else:
            # Single execution
            alive_ips = ping_ips(ips)
            format_output(args.start, args.end, alive_ips)
    except KeyboardInterrupt:
        print("\nExecution stopped by user. Exiting gracefully...")

if __name__ == "__main__":
    main()

 

example (w/o repeat)

  • start : 시작 IP
  • end : 끝 IP
  • repeat : 반복 여부 (마지막에 --repeat을 추가)

생각해보니 이 스크립트는 IP의 가장 마지막 자리만 변경해가면서 scan하고 있네요.
따라서 처음의 AAA.BBB.CCC 는 동일해야 하고, 만약 이 AAA,BBB,CCC가 다른 경우에 대해서는 고려되어있지 않습니다.

python3 scan.py --start 192.168.13.100 --end 192.168.13.150 

Scanning Range
192.168.13.100 ~ 192.168.13.255

Alive
- 192.168.13.101
- 192.168.13.105
- 192.168.13.126​

 

 

스크립트 작성 배경

 

여러 디바이스들의 상호작용이 필요한 분산 시스템을 개발하는 경우,
각 디바이스의 네트워크 상태가 정상인지 확인하는 것은 아주 중요한 일이다.

한쪽의 시스템을 완벽히 구성하고 전부 정상적으로 동작중이더라도,

어느 한쪽의 디바이스가 정상적으로 동작하지 못하면

테스트 결과가 이상하던지 아니면 테스트 자체가 불가능할 수도 있다.

 

최근 진행 중인 프로젝트에서는 어떤 SoC를 쓰냐, 시스템을 어떻게 구성하느냐에 따라 디바이스의 네트워크가 불능에 빠지는 경우를 꽤 자주 보게 되기도 하는데, 이로 인해 시간을 낭비하게 되는 경우가 많았다.

아직은 이 프로젝트의 진척이나 시스템의 성숙도가 낮아서 번거롭지만 이러한 fault들을 직접 모니터링해야 하는 필요성이 생겼고 간단하게 스크립트를 만들어 사용하게 되었다.

 

 

반응형

+ Recent posts