반응형

처음 도둑게를 들여 오고 몇 개월은 집도 바꾸고 위치도 바꾸고, 내부 구조도 바꾸느라 애들이 정신이 없어서인지 인기척을 느끼는 순간 후다닥 숨기 바쁘더니, 요즘은 가끔 무심코 사육장 앞을 지나가도 도둑게 형제는 신경쓰지 않고 자기들 볼일 마저 보는 경우가 생겼다.

사육장 앞을 지나가는데, 웬일로 마시멜로 녀석이 밝은 곳에 나와서 멍때리고 있다.

먹다 남긴 새우 물에 내버려 두고, 나와서 뭐하게?

유리창 너머로 내가 보이는데도 가만히 있길래 더 가까이 다가갔다.

오잉? 손가락을 가까이 가져가도 가만히 있네?

집사 뭐하게?
나랑 교감하는 것이게?

말은 못 알아듣지만 주인을 무서워하지 않을 정도의 기억력이 있는 것만으로도 고맙군 ㅋㅋ

 

반응형
블로그 이미지

Bryan_

,
반응형

아쉽게도 도둑게 세 마리 중에서 제일 작은 녀석이 중간에 죽고, 나머지 두 마리 형제를 계속 키우고 있다.

세 마리 중에서 제일 활동적이던 녀석이 없어서 사육장이 괜히 헛헛한 느낌이 들지만, 오랜만에 이벤트가 생겼으니...

탈피 직후의 모습

기특하게도 큰 녀석(애플파이)이 기다리고 기다리던 탈피를 했다.

그런데 탈피하면서 부절된 2개의 다리는 재생이 되었는데도 다리가 9개밖에 없어서 자세히 살펴 보니, 탈피하는 과정에서 다리 1개는 빼지 못해서 부절시키고 나왔다. 처음 우리 가족과 만날 때부터 다리가 9개였고, 중간에 또 부절돼서 다리 8개로 살고 있었는데, 다리 10개가 되는 게 쉽지 않구만...

탈피각은 내버려 두면 본인이 다 먹는다고 해서 물 속에 내버려 뒀더니...

뜯어먹다가 물 밖에 내다 놓기도 하고,

물 속에서도 탈피각에서 남긴 다리 한쪽 뜯어 먹고,

물 속에서 탈피각 다리 먹는 애플파이

먹다 남긴 집게발 탈피각은 전리품처럼 유목에 걸어 두더니,

애플파이 형이 남긴 탈피각 조각을 노리는 쪼꼬미 마시멜로

결국 일주일 정도 걸려서 남김없이 다 먹어치웠다. 대단해~

무엇보다 탈피하고 나서는 상처나고 깨진 자국이 있던 집게발이 깨끗해졌고 발색도 좋아졌다.

탈피 전(왼쪽)과 탈피 후(오른쪽). 집게발이 깨끗해졌다.

다음 번 탈피 때는 꼭 다리 10개 다 재생하길~

반응형
블로그 이미지

Bryan_

,
반응형

OS: Ubuntu 18.04
Simulator: ns-3.30

 

ns-3에서 무선 채널을 통해 두 노드가 서로 unicast로 패킷을 보낼 때, 시뮬레이션 타임을 기준으로 완전히 똑같은 시간에 패킷을 보내면 (즉, ns3::Socket::Send 함수를 똑같은 시간에 사용하면) 충돌이 발생한다.
이것을 방지하려면 패킷을 보낼 때 의도적으로 약간의 지터(jitter)를 부여하면 되는데, 예를 들면 두 노드가 ns3::Socket::Send를 call할 때, 수십~수백 마이크로초(microseconds) 정도의 차이만 있어도 무선 채널에서 충돌로 인한 패킷 유실을 피할 수 있다.

이를 위해 각 노드에서 Socket::Send 함수를 call 하는 부분 앞에 매번 지터를 아래와 같이 넣어 주었다.

Ptr<UniformRandomVariable> rng = CreateObject<UniformRandomVariable> ();
uint32_t jitter = rng->GetInteger(0, 1000);
Simulator::Schedule(jitter, &패킷_보내는_함수, 함수 파라미터, ...);

문제는 위와 같이 지터를 넣어 주는데도 영문도 모르게 패킷이 전달이 안되는 것이다.

분명히 동일한 시간에 패킷을 보내지만 않으면 서로 모두 전달이 되는데도 불구하고, bootstrap처럼 자동으로 주기적으로 heartbeat 메세지를 보내도록 설정하면, 패킷이 이유 없이 사라지는 것이었다. 보내는 노드에서 Socket::Send 함수를 call 한 기록만 있고 패킷을 받은 노드가 하나도 없는 상황...

 

UniformRandomVariable 클래스를 다시 확인해 보니, GetInteger 함수는 "다음(next)" 랜덤 값을 반환한다고 되어 있다. 그 말은, 랜덤 숫자의 배열을 미리 생성해 놓고, 맨 첫번째 인덱스부터 시작해서 GetInteger 함수를 call할 때마다 순서대로 하나씩 반환한다는 뜻이다.

내가 동시에 모든 노드가 시뮬레이션 시작 시간에 동시에 heartbeat 메세지를 생성해서 broadcast하도록 스케줄링을 걸었고, 그 스케줄링 함수 안에 Socket::Send 함수 앞에 GetInteger를 썼다. 내가 랜덤에 시드 값을 지정하지 않았기 때문에, 모든 노드가 같은 타이밍에 GetInteger를 맨 처음 불러왔다면, 모두가 똑같은 jitter 숫자를 가져온다는 뜻이므로, 랜덤을 잘못 적용한 셈이다. ㅠㅠ

 

각 노드별로 노드 ID 숫자를 seed로 입력해 주었더니, 모두가 처음으로 받아 오는 GetInteger 값이 다 다른 숫자가 되었다. 이제서야 진짜 랜덤으로 작동한 것이다.

#include "ns3/random-variable-stream.h"

// ...(중략)

SeedManager::SetSeed(node_id + 1); // ns-3에서 node id는 0부터 시작하고, 

                                                                            // Seed 값에 0이 들어가면 런타임 에러가 나서 1을 더해 줬다.

Ptr<UniformRandomVariable> rng = CreateObject<UniformRandomVariable> ();

 

 

반응형
블로그 이미지

Bryan_

,
반응형

2020년 마지막 날에 연차를 쓰고
그 뒤로 연휴 3일 동안 어디 안 가고 집에서 잘 쉬었는데,
오히려 대상포진 진단을 받고 새해 첫 working day에도 출근을 못 하고 있다.

처음에는 등의 오른쪽 부분 날개뼈 있는 근육이 아파서 담이 걸린줄 알았는데,
일요일이 되어서야 오른쪽 옆구리에 붉은 반점이 올라오고
그 부위가 닿을 때마다 아픈 것을 발견하고 대상포진인 줄 알게 되었다.

내과 병원에 갔더니 의사가 묻는다.
"최근에 무슨 일 있었나요?"

 - "아니요. 그냥 두달 전부터 초과근무를 많이 하긴 했지만..."

"그럴 때 걸리는 거에요."

 - "......"

그도 그럴 것이, 지난 2개월 간 매주 거의 주 52시간 다 채우고,
연속 7일 출근만 아니면 주말에도 나가서 밀린 일처리 하고,
그렇게 월 217시간씩 일했더니 누적된 피로가 지금 온 것으로 보인다.

과거에 한창 박사과정 막바지에 힘들 때에 비하면
최근까지 회사 일은 힘든 축에도 안 든다고 생각했는데,
몸이 다르게 반응하는 것을 보면 스트레스를 받긴 받는가 보다.

 

일주일 치 약을 처방받고 와서 식후마다 약을 먹고 있지만,
아직도 연휴 때와 통증에 유의미한 차이는 없다. ㅠㅠ
걱정되는 것은, 대상포진이 발현되면 신경을 파괴(...)해서
증상은 약으로 호전이 되더라도 통증이 장기간 남는 경우다.
인터넷에 찾아보니 대상포진 발현 후 72시간 내로 약을 먹으면 괜찮다는데,
문제는 내가 수포를 발견한 시점이 대상포진 발현 후 몇 시간 뒤인지 모른다는 것...

오늘 푹 쉬고, 내일은 출근할 수 있을 정도만이라도 통증이 가시면 좋겠다.

반응형
블로그 이미지

Bryan_

,
반응형

도둑게는 산속 생활에 적응한 육지게라서 물은 필요할 때에만 들어가는데,
가끔 물만 먹고 싶을때 집게로 물을 떠먹기도 한다.

양발 집게로 열심히 물떠먹는 애플파이.
물그릇에 매달려서 한손으로 물떠먹는 허니마시멜로.
애플망고는 물 대신 바닥재(...)를 먹어보고 맛없어서 버린다.

 

반응형
블로그 이미지

Bryan_

,