질문/답변 페이지 많이 이용해 주세요.

블록체인을 자료를 찾아 읽어본다.

발단 : https://twitter.com/IBMSecurity/status/874960273957892098

나는 블록체인을 이미 몇 년 전에 접하긴 했으나, 깊이 있게 들어가보지는 않았다.
집에 PC에서 비트코인 월랫을 운영하기도 했었다, … 그런데, 데이터 용량이 너무 늘어나서 중단했다.

그리고, 얼마전, iOS용 비트코인 월랫을 하나 다시 받아서 시작해 보려고 했다.
아직까지, 거래는 없어서 0 BTC … 누군가 보내주면 감사할텐데, 보내줄리가, …

어쨌든, 기본 설명만 들어보면, 그런갑다 싶은 부분들을 해소하고, 실제 기술을 좀 익혀 보고자 자료를 찾아보고 있다.

알아가고자 하는 것 : 비트코인의 블록체인 실체 구현에 대한 설명?, 그리고 iOS에 비트코인 월랫이 있으나, P2P 거래의 모든 내역이 내려 받아지지 않는 이유? 그리고, 다른 분야에 활용한다는데, 어떻게 활용할 수 있는가?


우선, P2P에 대한 것도 자세하게 알지 못한다. P2P 소프트웨어를 사용해 봤었지만, P2P 노드들이 발견하는 과정을 잘 모른다. P2P라고 하더라도, 발견?하는 방법이 있을텐데, …


그리고, 해시함수를 사용한다고 한다, … 해시 함수가 단방향 함수이고, digest? 함수라는 것까지만 알고 있는데, 수학적으로 계산하는 공식도 알아야 할까?


한 시간 인터넷을 살펴 보았으나, 아직 안개속이다. 잘 모르겠다.

블록체인 기술이 백업이나 클라우드에 활용하면 좋을 것이다 생각했는데, 이미 그걸 활용한 곳도 있는 것 같다.

헐, 나의 네이버 해킹 당했네

네이버를 몇 년간 사용하지 않고, 아이디만 살려 두었는데, …
내 자료 정리하다가, 내 네이버 블로그를 들어갔더니, 스팸이 게시되어 있네, …

지금 당장 네이버 탈퇴합니다.

국내 포털 아이디만 유지하던 것들 정리할 때가 온 듯.

ps. fetchmail도 왜인지 모르나 내려가 있었고, … 그래서, 내 편지함이 많이 깨끗했구나 … 이걸 발견한 것이 5개월?

ps2. 생각난 김에 포털을 3개 탈퇴함.

개발을 취미로 하면 좋겠다는 생각이다.

non IT 업종에 취업하면서, 개발을 취미로 하게 되면 좋지도 않을까? 생각했었다.
그런데, 막상, 취미로 하려고 해도, 평일에는 시간을 잘 못 내고, 오늘 같은 쉬는 날에도 잘 손이 안간다.
(원래부터, 개발에 손이 잘 안가는 것도 있었지만, 바뀐 것이 없네. …)

지금 하는 업무에서도, IT의 도움이 있으면, 5% 정도의 도움이 될 것이 보이긴 하는데, 지금 당장 손 댈 생각은 없다.

지금 내가 하는 업무는, SQL, Reporting툴, 도면이 도입되면, 신입 사원이 좀 더 쉽게 업무 파악이 가능한 것이 있는데, …

다음 주에는 도면을 한 번 손 대 볼까 생각하는 중. … 아직 직원 목록도 제대로 받지 못했고, …

기존에 하던, 회사 업무용 시스템 만들기에 대한 관심으로, 끄적끄적 블로그에 기록해 본다.

ps. 요즘 SNS를 안 하고, 블로그에 글 쓰는데, 방문자도 있고, 긍정적인 피드백도 있으면 좋겠는데, … 글만 쓴다고 늘어나진 않겠지만, … 돈 되는 글을 좀 올려야 할텐데…

감기 로그

헐…

3일간 중노동을 했더니 오늘 오후부터 콧물을 시작으로 감기 증세가 시작됨. 아침에도 잠깐 목이 마른 느낌이 있더만…

위스키 한잔 해야하나?

첫 출근을 했습니다 

non IT 업종으로 이직하여 몸 쓰는 일을 하게 되었습니다.
하루 일해 본 뿐이지만, 참 쉽지 않네요.

씨티 후불 교통카드 신청 후기

요즘 버스를 탈일이 생겨 후불 교통카드를 다시 만들러 갔다.

옛날에는 국민카드 교통카드를 사용했었으나, 지금 나는 씨티만 쓰기 때문에 씨티은행에서 다시 만들고자 했다.

바로 발급되면 참 좋겠다 생각했다.

그런데, 그게 아니라 지금 사용중인 신용카드에 교통기능을 추가하는 형태라고 한다.

그래서, 바로 발급이 안 되고, 일주일 후 집으로 배송된다고 한다.

그런 형태라서 지점에서 발급하지 않고 센터에서 하는 것이다.

그래서, 지점을 시간내어 방문했으나 거기서 전화 연결해주고, 전화로 모두 처리했다.
이런 경험을 하면서, 씨티는 센터에서 하는 것이 많고 지점에서 하는 업무가 많이 적다고 생각한다.(얼마전 펀드 해지도 했는데, 마찬가지로 지점에 방문 했으나 스마트폰으로 모두 처리했었다.)

다른 은행 사정은 모르겠으나, 이런 형태로 가다간 얼마 없는 지점도 축소되어 불편해지는 것은 아닐까 걱정한다.

다만, 씨티은행 업무일부?를 우체국에서 처리할 수 있다는데, 아직 이용해본적은 없다.

대한민국에 비주류로 사는 것이 불편하지만 내 소신대로 지켜나가리라.

POS 업체 기록

조금 전에 google adsense로 POS 업체가 하나 뜨길래, POS 업체 목록을 기록해 본다.

나이스포스 : https://www.nicepos.co.kr/index.jsp
나이스포스시스템 : http://www.nicecard.kr/
신한포스** : http://shinhanpos.com/ 특이하게, 온라인마케팅, 웹에이전시? 사업을 같이 하는 듯 하다.
포스텍 : http://www.daegupostec.co.kr/

POS가 그렇게 연구 개발이 많이 필요한 것도 아니다보니, 많이들 만들어 낸다.
기존 카드 결제 업체들이 POS로 전환 한 것도 많을 것이고, 요근래 3-5년에는 먹지 사용하는 카드 결제기는 잘 못 본듯.

포스 하드웨어 업체도 레퍼런스 모델 제공하는 업체가 몇 군데는 있지 싶은데, …

코스트코나 테스코 같은 대형 업체에서 사용하는 포스와 자영업용 POS는 차이가 있겠지?
대형 업체에서는 IBM 같은 곳에서 만드는 장비를 사용하고, 포스는 자체 개발이겠지?

대형마트 -> 편의점 -> 프랜차이즈 -> 일반 자영업 순서로 포스가 전개되어 왔겠지?
프랜차이즈나 일반 자영업 포스의 경우, 내 느낌으로는 5년도 안 된 것 같다.

MS 태블릿 제품에 대한 짧은 생각.

( 비난 하는 것은 아니고, 좀 더 개선하면 좋지 않을까 하는 의견에서 … )

Apple의 맥북은 초기 랩톱을 따라 만들어서, 하판에 본체, 상판을 책 펴듯 여는 것으로 만들었고,

MS의 그것은, 아이패드의 판을 따라하면서, 키보드는 탈착 가능하게 하겠다라는 생각이었고, 하판(키보드 부분)의 모양은 기존의 랩탑을 거의 따라했고, 상판을 세우는 방식을 생각하다 보니, 새로운(?) 방식이 나오긴 했는데, …

스타일이 살지 않고 기계적인 느낌이 있다보니 …

아예 지갑형 폰 케이스 방식을 따라해 보던가? ( 예전에 보니 폰을 세울 수 있는 것이 있더만 )
각 잡아 세워주는 부분과 키보드를 일체형으로 어떻게 잘 붙여 보고,
자연스러운 세움이 가능하게…
그리고, 키보드가 너무 장난감 같은 플라스틱인 것은 퀀텀 점프 수준의 개선이 필요함.

애플의 키보드나 터치 패드도 개인적으로는 퀀텀 점프가 필요하다고 생각하지만,

그나저나, 윈도우에서 터치 패드를 사용하는 사람은 거의 장인 정신 혹은 인내심의 한계를 많이 가지고 계실 듯.

조직도 JavaScript 실험. recursive function. 연습.

커뮤니티에 javascript를 사용하여, 조직도를 구현하는 것에 대한 질문이 올라왔다.
그래서, 나는 프로그래밍 연습을 하기 위해서, 한 번 만들어보기로 결심하고, 답변을 올렸다.

https://okky.kr/article/389606

올리자마자 다시 봐도, 코드 상에 잘못된 부분은 보이지만, 그런 것들은 나중에 시간날지 고칠지 하고, 우선 코드를 내 블로그에 복사해 놓는다.

var depth1 = [];
var depth2 = [];
var depth3 = [];
var depth4 = [];

depth1.push(
    {
        GROUP_ID: 1,
        GROUPNAME: '본사',
	children: []
    },
    {
        GROUP_ID: 2,
        GROUPNAME: '지사',
	children: []
    }
);

depth2.push(
    {
        GROUP_ID: 10,
        GROUP_ID_P: 1,
        GROUPNAME: '기술지원본부',
	children: []
    },
    {
        GROUP_ID: 20,
        GROUP_ID_P: 1,
        GROUPNAME: '연구소',
	children: []
    },
    {
        GROUP_ID: 30,
        GROUP_ID_P: 2,
        GROUPNAME: '영업부',
	children: []
    }
);

console.log(depth1);
console.log("========================================");
console.log(depth2);
console.log("========================================");

/*
var datasource = { children: [] };

for(var i=0; i < depth1.length; i++){
	datasource['children'].push({'name': depth1[i]['GROUPNAME'], 'gid': depth1[i]['GROUP_ID'],'children': []});
	for(var j=0; j < depth2.length; j++){
		if(depth1[i]['GROUP_ID'] == depth2[j]['GROUP_ID_P']){
			datasource['children'][i]['children'].push({'name': depth2[j]['GROUPNAME'], 'gid': depth2[j]['GROUP_ID'], 'children':[]});
			for(var k=0; k < depth3.length; k++){
				if(depth2[j]['GROUP_ID'] == depth3[k]['GROUP_ID_P']){
					for(var l=0; l < datasource['children'][i]['children'].length; l++){
						if(depth2[j]['GROUP_ID'] == datasource['children'][i]['children'][l]['gid']){
							datasource['children'][i]['children'][l]['children'].push({'name': depth3[k]['GROUPNAME'], 'gid': depth3[k]['GROUP_ID'], 'children':[]});
							for(var m=0; m < depth4.length; m++){
								if(depth3[k]['GROUP_ID'] == depth4[m]['GROUP_ID_P']){
									for(var n=0; n < datasource['children'][i]['children'][l]['children'].length; n++){
										if(depth3[k]['GROUP_ID'] == datasource['children'][i]['children'][l]['children'][n]['gid']){
											datasource['children'][i]['children'][l]['children'][n]['children'].push({'name': depth4[m]['GROUPNAME'], 'gid': depth4[m]['GROUP_ID'], 'children':[]});
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}

console.log("===== FINAL =====");
console.log(JSON.stringify(datasource));
*/

/**
 * tree에서 gid를 가지는 객체를 반환한다.
 * 못 찾으면 undefined를 반환한다.
 */
function findById(tree, gid) {

	//console.log("========================================");
	//console.log(new Error().stack);
	//console.log("========================================");

	if ( tree['GROUP_ID'] == gid ) {
		return tree;
	} else if ( tree.children.length == 0 ) {
		return undefined;
	} else {
		for ( var i = 0 ; i < tree.children.length ; i ++ ) {
			var found = findById(tree.children[i], gid);
			if ( found !== undefined ) {
				return found;
			}
		}
		return undefined;
	}
}

var ROOT = {
	'GROUP_ID': 0,
	'GROUPNAME': 'ROOT',
	'children': []
}

depth1 = depth1.concat(depth2);
for ( var i = 0 ; i < depth1.length ; i ++ ) {
	if ( depth1[i]['GROUP_ID_P'] === undefined ) {
		ROOT.children.push(depth1[i]);
	} else {
		var parent = findById(ROOT, depth1[i]['GROUP_ID_P']);
		if ( parent !== undefined ) {
			parent.children.push(depth1[i]);
		}
	}
}

console.log("FINAL");

console.log(JSON.stringify(ROOT));

심심한데 챗봇 같은 걸 만들어 볼까?

얼마전에 converse.js 사용해서 웹에다가 XMPP 채팅을 올렸었지요.
그리고, … 많은 사람들이 블로그를 오긴 오던데, 말을 걸어주는이 없더만요.

어쨌든, 그걸 확장해 보고자 chatbot 챗봇을 한번 만들어 볼까 싶습니다.

요즘 python 연습하고 있으니 언어는 python, 맨땅에서 시작할 수 없으니,
google 검색에 ‘chatbot python xmpp’ 넣고 검색을 합니다.

나왔습니다.
https://github.com/QuickBlox/sample-chatbot-python
이걸로 시작해 봅니다.


바로 시작이 안 됩니다. 의존성으로 sleekxmpp가 있습니다.
또 찾습니다.
https://github.com/fritzy/SleekXMPP/


잠시 환경을 준비해서 테스트를 시작하고, …


아래 dnspython도 받아서 준비하고,
http://www.dnspython.org/kits/1.15.0/

ps. 테스트는 했습니다. 기본 기능이란 것이 로그인 및 MUC에 들어가 있다가, 멘션이 오면 반응하는 것이었는데, … 그것 말고 ECHO 같이 말걸면 반응하는 것까지만 테스트해보았습니다. 이런 걸로 number guessing 게임 정도는 만들 수 있을 것 같은데, … 혼자 노니 심심해서, 위 기록만 남겨두고, 그만 둡니다.