통합환경(IDE)을 볼 때마다, Turbo C가 생각난다. 내가 기억하기로 고등학교 때 버전 2.0으로 처음 접했다. 이 툴은 최소한의 통합환경을 제공했는데, 그 통합이라는 것은, 에디터, 컴파일러, 링커, 디버거였다. 말그대로 각 프로그램을 필요할 때마다 실행했어야했던 것을, 메뉴에서 선택하는 것만으로 하나로 묶어줬으니, 생산성이 얼마나 높아졌겠는가? 그 처음을 기억하건데, 사실 어리둥절했다. 배움에도 순서라는 것이 있고, 빌드에도 순서가 있다. 그리고 그런 것들은 어느정도 1차원적으로 되어 있는데, 이 IDE는 메뉴라는 익숙한 것에 그 것들을 2차원적으로 나열을 해 놓았으니, 한꺼번에 여러 개념에 동시에 노출되는 것에서 오는 당혹감이 있었으리라. 그리고 정규적인 C 언어를 배운 것이 아닌 상황에서 디버깅같은 것은 고급 과정이었으므로, 한동안 몰라서 사용을 못했던 것 같다.


IDE가 주는 정보의 양에 대해 생각해 보건데, 지금 나오는 모든 개발툴로서의 IDE들은 그 메뉴에 너무너무 많은 것이 노출되어 있다. 그래서 처음 어떤 새로운 언어에 특정 IDE를 접하는 순간, 그것이 일로서 주어진 것이 아니라면, 몇번 보다가 접는 것이 대부분 취하는 행동아닐까? 일로써 사용해야했다면, 그 때부터 호기심은 100% 왕성해져서 그 많은 기능을 이것저것 살펴보며, 상당한 정보량을 머리 주억거리며 습득하게 된다. 욕도하고, 감탄도하고 몰랐던 개념을 익히기도하고 행복하(?)고 화도나는(!) 그런 시기가 프로젝트 기간 동안 지나게 된다.


IDE는 자체로는 전혀 교육적이지 않다. 메뉴의 순서도 친절하지 않으며, 그 어느 누군가의 학습곡선에 맞춰있는것 같지도 않다. 스스로 교육하며 커다란 프로젝트도 마무리 할 수 있는 IDE가 있을 수 있을까? 사실 어떤 프로젝트에 들어가는 개념들은 그 사용되는 상황이 전혀 순차적이지 않으며, 일관성이 없다. 개인의 능력에 따라 IDE를 사용하게 되는 것이다. 늦게 시작하는 모든 개발자들에게 건배!




저작자 표시 동일 조건 변경 허락
신고

페이스북도, Line messenger도, 발표를 계속 해대는 Chat api.

선도 개발 그룹에서 Chat bot에 대한 관심이 계속 올라가고 있는 즈음, 내 작업도 빨라져야겠다는 생각이 든다.

그러나 현실은 여기저기 손을 빌려달라한다.

Show me the money!

저작자 표시 동일 조건 변경 허락
신고

더는 늦어지지 말자고, 공유기 새로 업그레이드 함. 802.11ac 는 대략 3,4년전에 시작했던거 같은데, 

별 무리 없이 쓰다가, 집안의 모바일 접속이 동시에 사용하는 경우가 많아지면서, 현저하게 느려지는 현상(?)이 발생.

사실, USB 3.0 기반의 NAS 장비가 필요 하기도 해서, 802.11ac + USB 3.0 외장하드 지원하는 모델로 새로 구매함.


저작자 표시 동일 조건 변경 허락
신고

맥북을 한동안 업그레이드 하지 않고 살다가 어제 시간을 들여 업그레이드를 했다. 작년 10월에 나왔으니 6개월이 지났네.

뭔가 프로젝트를 진행하고 있을 땐, OS 업그레이드같은 걸로는 안건드리는게 상책인지라. 늑장 업그레이드.

저작자 표시 동일 조건 변경 허락
신고

King's Legion, Dungeon Poker 서버를 내리다.


2015년, 3월, 5월에 각각 오픈한 Dungeon Mason (a.k.a Gitul) 팀의 게임을 내렸다. 대략 5000명, 500명의 가입자가 있었으며, 지난 10개월정도는 DAU 1~2 를 꾸준히(!) 유지하고 있었다. (아무도 안쓴다는 이야기). 대략 매월 서버 비용으로 10만원정도가 나가고 있었으며,아마존의  m3.medium 한 대와 Redis 서비스하나로 운영되고 있었다.


나조차 실로 작년 6월 이후로는 접속조차하지 않았으나, 어떤 레퍼런스가 필요할지 몰라 유지하고 있었던 것을 더 이상 의미 없어 내리게 됐다.

마지막으로 들어가 소스들을 확인 한 바로는 내가 이 코드를 작성했었나 싶을 정도로 잘 기억나지 않는 것도 있었다. 그래도 기억을 위해서라도 기록을 하자면,


* Node.js 로 만들어진 Game API Server 데몬 하나, 이용자간 게임을 중계하기 위한 실시간 게임 데몬 두 개, A.I 로봇 데몬 한 개.


위 조합으로 한 개의 King's Legion을 담당하고, 같은 조합 하나를 더 두어 Dungeon Poker를 담당시켰다. 이 모든 데몬들을 m3.medium에서 운영했다.

그리고, Leader board 운영을 위해 Redis 서비스를 하나 돌렸으며, DB로는 MySQL 5.6을 사용했다. t2.micro 사이즈로 운영서버를 돌렸다.

서버는 접속자가 너~무 없는 관계로 펑펑 놀고 있었으며, 적절한 메모리가 필요했기에 m3.medium은 필요로 했었다.


* 로그인과 인벤토리 관리 Daily present는 모두 일반 웹서버로 동작하는 api 서버로 구현하였으며, 최대 4인이 하나의 방에서 실시간으로 하는 게임을 위해서는 Node.js + Websocket 기반으로 만들어졌다. 실시간 게임 데이터는 단지 메모리를 사용했을 뿐이며, 게임 서버와 api 서버간 메시지 교환은 Redis의 Publish/Subscribe 기반으로 중계하였다.


* 또한 Redis 서버는 ZRANK를 이용하여 각 리그당 주별 리더보드를 계산하기 위해 사용하였다.


* 로봇 서버는 일반 사용자가 접근하는 것과 똑같은 프로토콜로 게임서버에 Websocket으로 접속하여 운영되었으며, 동시에 30기가 운영되었다. 초반 붐업을 위해 도입하였으나, 오픈빨이후 하락하여서 내릴 여유(?)가 없었다. (로봇임이 너무 드러나는지라 아마 더 안되었으려나?)


서버들이여. 비록 그대들은 세상에 물리적으로 존재하는 가상의 서버였음에도, 우리의 사업을 오픈하는데 충분하였노라.

다시 그대들을 깨운다면, 그 때는 아마 과거에 대한 회상 때문이리라.

고이 잠에 드시기를....



저작자 표시 동일 조건 변경 허락
신고
  1. 이성연 2016.04.15 20:30 신고

    고이 잠드소서

  2. june8th 2016.04.15 23:57 신고

    평생 서비스 하는거 아니었나요? 약관 좀 봅시다. 환불! 환불! 환불!

회상, recall. 반사행동.

자극이 들어 오면, 자극에 대한 반응이 일어난다.

인간을 신경의 다발이라고 가정한다면, 그 수준은 신경의 물리적인 자극에서부터 신경계의 2차, 3차 층위에 해당하는 추상적인 층위까지 모두 회상이라는 반응이 일어난다.

여기에는 측정되지 않은 무작위성(randomness)가 자극과 섞이면서 비슷하지만 조금씩 다른 결과를 만들어낸다.

그 결과는 다시 신경계의 연결 강도(weight)를 조절하거나, 혹은 기억이라는 과정으로 다음 회상의 재료가 된다.


그 신경다발 구조체가 얼마나 복잡해야 인간다운 수준이 될까?

혹은 어느 수준이 되어야 인간과 무리없는 상호작용을 할 수 있을까?

혹은 인간이 집중한다면 어느정도 상호작용은 할 수 있는 수준은 이뤄낼 최소 값은 존재할까?


염두에서 떠나지 않는다.

저작자 표시 동일 조건 변경 허락
신고

그 여름 가장 조용한 바다.

시게루(마키 쿠로우도 분). 주인공으로 쓸만한 이름이다. 머리가 곱슬이다. 황정민을 닯았다.

서핑을 한다.

여주는 박..모씨를 닯았다.

개연성 없는 오바. 일본 영화의 애니메이션 스러움.

서핑은 초속5cm에서 나오는 에피소드 3번이 인상 갚었는데...

영화는 2004년 개봉인데, 여기나오는 복장은 거의 써니 수준이다.

서핑보드 8600엔 대략 90만원

12000불짜리 서핑 보드를 산다.

일본 버스의 자동문이나, 내림버튼, 뒷문에 붙어 있는 백미러, 한국것과 비슷하구나. 출구는 반대겠지만.


그렇게 열심히 달렸는데, 땀 좀 내주지.

여자는 벙어리인가...

둘 다 청각장애인인가?

...



음악감독 히사이시 조. 바로 그~! 감독이라고!



저작자 표시 동일 조건 변경 허락
신고

bash 에서 yaml 파일을 해석해서, 환경변수로 설정해주는 간단한 코드입니다.


예를 들어, setting.yaml 이라는 파일이 있을 때

default:

    mysql:

        host: localhost

        port: 3306

        username: test

    redis:

        host: localhost

        port: 1122

test:

    mysql:

        host: remote.example.net

        port: 3306

        username: test


위와 같은 파일을 해석하고 싶을 때, 다음과 같은 방식으로 사용합니다.

#!/bin/bash


YAML=settings.yaml ENV=default source parse_yaml.sh


echo $mysql_host

echo $mysql_port

echo $mysql_username

최상위 객체를 ENV에 넘겨주면, 각 객체를 "_"로 연결하여 환경변수로 만들어 줍니다. 자세한 내용은 코드를 보시기 바랍니다. 끝!

$ cat parse_yaml.sh

# Copyright 2016 By Hojin Choi
# You should source this file as "YAML=../config/settings.yaml source parse_yaml.sh"

if test -z "YAML"; then
	echo "YAML is not set"
	exit 1
fi

if test -z "$LEADSPACE"; then
	LEADSPACE="    "
fi
if test -z "$FIELDSP"; then
	FIELDSP="_"
fi

if test -z "$ENV"; then
	ENV="default"
fi

TMPSH="/tmp/tmp.$$.sh"

#Remove white space from IFS, we use only new line character
lastdepth="0"
while IFS="\n" read line
do
	depth=`echo "$line" | sed -e "s;$LEADSPACE;@;g" | sed -r -e 's;^(@*).*;\\1;' | wc -c`
	read k v <<<"$line"
	k=$(echo $k| tr -d ':')
	keys[$depth]="$k"
	if test "$lastdepth" -ne "$depth"; then
		lastdepth=$depth
	fi
	unset keys[$(($lastdepth+1))]
	unset keys[$(($lastdepth+2))]
	unset keys[$(($lastdepth+3))]
	unset keys[$(($lastdepth+4))]
	unset keys[$(($lastdepth+5))]
	unset keys[$(($lastdepth+6))]
	unset keys[$(($lastdepth+7))]
	unset keys[$(($lastdepth+8))]

	if test "$ENV" != "${keys[1]}"; then
		continue
	fi

	if test -z "$v"; then
		continue
	fi

	v=$(echo $v| tr -d '"')
	read key <<<"$(echo ${keys[@]:2} | tr ' ' $FIELDSP)"
	echo $key=$v
done < "$YAML" > "$TMPSH"

. "$TMPSH"

rm -f "$TMPSH"


저작자 표시 동일 조건 변경 허락
신고

젊은(?)친구들은 공공연하게 저는 긴 글을 잘 못읽어요라는 말을 한다. 가끔 내 글 읽기 생활에서도 그러함을 느낄 때가 있는데, 요즘이 그렇다. 너무 분주하게 살다보면 긴 글 집중력 게이지가 떨어진다. 마음이 급하면 긴 시간 확보가 어렵기 때문이다.


이걸 기회로 측정할 수 있는게 있다는 사실을 발견하게 된 것 같다. 긴 글을 집중해서 읽어보기를 시도하면, 내 생활이 얼마나 뭔가에 몰입되어 사는 지 알 수 있는 것이다. 약간 아이러니인데, 그렇게 긴 글에 집중할 수 있으면, 사실 여유로운 생활을 한다는 것이고, 집중할 수 없다면 분주한 삶을 사는 것이다. 둘 다 잡는 것이 불가능할지라도 잡아야지.

저작자 표시 동일 조건 변경 허락
신고

"나는 옳다"라고 종종 되뇌인다. 내가 옳은 것은 마치 이것과 같다. 식물에 물을 주면 자란다. 그건 식물이라는 생명이 작동하는 방식이 그러하기 때문이다. 식물이 자라는 방식은 옳고 그름의 문제가 아니라 그냥 그 자체로 옳은 것이다. 미묘한 뉘앙스라 생각되기는 하지만, 나는 다른 적절한 표현을 찾지 못했다. 아니, 옳다라고 표현하는 것이 그리 나쁜 표현이 아니며, 내가 느끼는 느낌을 잘 표현한다고 생각한다.


내가 옳다는 것을 전제하지 않으면, 지금의 나를 살아갈 수가 없다. 중요한 것은 "지금" 이 시점에서의 내가 사는 방식이 그러하다는 것이다. 지금 내가 옳지 않으면, 그릇작동한다면, 그것은 내 존재의 작동방식이 부정되는 것이며, 그것은 이미 내가 아니다.


옳다는 전제, 제대로 작동하고 있다는 전제하에 단지 스스로를 해석할 뿐이다. 그것이 도덕적으로는 그를지라도, 생물학적, 자연적으로는 옳다. 그렇게 형성되어온 가치관 대로 판단하는 것이 지극히 자연스러운 것이기 때문이다.



저작자 표시 동일 조건 변경 허락
신고

+ Recent posts