프로그래밍 156

아두이노 조도 센서

가지고 있는 센서가 몇개 안되서, 그중에 간단한 조도 센서를 테스트해봤다. 5V와 아날로그 INPUT 단자를 이용하면, 쉽게 값을 받을 수 있다. 코드는 #include void setup() { Serial.begin(115200); } void loop() { int light = analogRead(A0); Serial.println(light); delay(500); } 특별한 부분은 없고, analogRead 함수를 써서, 읽고자 하는 아날로그 포트를 지정해주면 된다.노트북 빼고 연결 가능하게, 외부 전원 설치방법과, WIFI 연결, HTTP REST API 호출, LCD 출력등을 좀 더 테스트 해봐야겠다.SERVO 모터를 이용해서, 조정하는 것도 해보고. 이걸 하면 로보트팔을 만들 수 있지 않..

Hello 아두이노

잠깐 아두이노를 만져보고 단상 노트 우연한 기회에 아두이노를 보게 되서, 예전에 딸 학습용으로 사놨던 아두이노 키트를 꺼내서 이리저리 만져보았다.요즘 아이들이 아두이노로 메이커를 많이 한다고 해서, 난이도가 높지 않을것이라고는 예상 했지만, 직접 해보니, 상당히 심플하다.개발 환경 설정에서 부터, 코드를 올리는 과정까지 IDE에서 손쉽게 접근이 가능하고, 브래드보드 덕분인지, 회로 구현도 편하고, 부품 수급도 편리하다.더군다나, 시장에 많이 풀린 덕분인지 컨텐츠도 무궁무진해서, 손쉽게 접근이 가능하다. 13개의 핀을 IN/OUT으로 설정하고 단순하게 신호를 보내거나 받아서 처리하는 구조인데...저항이나 콘덴서와 같은 전자 부품을 어떻게 다룰지 약간 걱정은 되지만, 아이들도 한다고 하니, 크게 문제는 없을..

구글 프로토콜 버퍼 (Protocol buffer)

구글 프로토콜 버퍼조대협 (http://bcho.tistory.com) 텐서 플로우로 모델을 개발하다가 학습이 끝난 모델을 저장하여, 예측하는 데 사용하려고 하니, 모델을 저장하는 부분이 꽤나 복잡하여 찾아보니, 텐서플로우는 파일 저장 포맷을 프로토콜 버퍼를 사용한다는 것을 알았다. 그래서, 오래전에 살펴보았던 프로토콜 버퍼를 다시 살펴보았다.개요 및 특징프로토토콜 버퍼는 구글에서 개발하고 오픈소스로 공개한, 직렬화 데이타 구조 (Serialized Data Structure)이다. C++,C#, Go, Java, Python, Object C, Javascript, Ruby 등 다양한 언어를 지원하며 특히 직렬화 속도가 빠르고 직렬화된 파일의 크기도 작아서 Apache Avro 파일 포맷과 함께 많이 ..

프로그래밍 2017.06.25

파이썬 전역 변수

파이썬에서 전역변수 사용하기 (2.7X 버전) 조대협 (http://bcho.tistory.com) 파이썬에서 전역 변수를 사용하려고 하니 "Unbound Local Error"가 나더라.파이썬은 로컬 변수를 자바처럼 쓸수가 없다. 잘못된 코드 global_value = 1 def myfunction(): global_value=global_value + 1 올바른 코드 global_value = 1 def myfunction(): global global_value global_value=global_value + 1 글로벌 변수로 쓰려면, 글로벌 변수를 쓰려는 곳에서 global 이라는 키워드로 선언을 해줘야 그 전역 변수를 불러다가 쓸 수 있다.

Hashtable의 이해와 구현 #1

해쉬 테이블의 이해와 구현 (Hashtable) 조대협 (http://bcho.tistory.com) 기본적인 해쉬 테이블에 대한 이해 해쉬 테이블은 Key에 Value를 저장하는 데이타 구조로, value := get(key)에 대한 기능이 매우매우 빠르게 작동한다. 개발자라면 자주 쓰는 데이타 구조지만, 실제로 어떻게 작동하는지에 대해서 정확하게 알고 있지는 모르는 경우가 많다. 이 글에서는 해쉬 테이블에 대한 기본적인 구조와, 구현 방식에 대해서 설명 하도록 한다. 해쉬 테이블의 기본적인 개념은 다음과 같다.이름을 키로, 전화 번호를 저장하는 해쉬 테이블 구조를 만든다고 하자. 전체 데이타 양을 16명이라고 가정하면 John Smith의 데이타를 저장할때, index = hash_function(“..

dynamic array resizing에 대해서.

알고리즘쪽을 파다보니 재미있는게, 예전에 알았던 자료 구조도 구현 방식등에 대해서 다시 되짚어 볼 수 있는게 좋은데. (그간 생각하던 구현 방식과 다른 방식도 종종 나와서.) 보통 메모리 문제 때문에 불확실한 데이타 크기를 가지는 데이타 구조는 LinkedList를 사용하는게 유리하다고 생각했는데, 내용중에, 배열을 사용하고, 배열이 다 차면 그크기를 늘리는 (새롭게 더 큰 배열을 만들어서 기존 배열 내용을 복사해서 대처 하는것) 방식 (Array Resize)를 봤다. 일반적인 방식이기는 하지만 메모리 소모량이나 배열 복사 속도 때문에 그다지 바람직하다고 생각 안하고 있었는데, JDK내의 Map 클래스의 구현 부분을 보니, 실제로 Map 클래스에서도 array resize를 사용하고 있다. (출처 : ..

알고리즘 관련 유용한 사이트 모음

튜토리얼 포인트자료 구조에 대한 설명과 코드들을 간략하게 잘 정리해 놓음http://www.tutorialspoint.com/data_structures_algorithms/binary_search_tree.htm 코세라 프린스턴 알고리즘 강의https://class.coursera.org/algs4partI-010 코세라 데이타 구조에 대한 강의 (그래프 구조에 대한 문제가 잘 정리되어 있음)https://class.coursera.org/algs4partI-010 알고리즘에 대한 일반적인 설명 (Algorithm 4th edition)http://algs4.cs.princeton.edu/ Octree와 QuadTree에 대한 설명 (게임에서의 응용)http://www.gamedev.net/page/r..

그래프 노드간 연결 파악을 위한 Dynamic Connectivity 알고리즘

동적 연결 알고리즘 (Dynamic Connectivity) 조대협 (http://bcho.tistory.com) 요즘 알고리즘이 대세라 기초를 다지는 차원에서 다시 알고리즘을 보고 있는데, 오늘은 동적 연결 알고리즘에 대해서 공부한 내용을 간략하게 정리해본다. 동적 연결 알고리즘은 노드끼리 연결이 되어 있는지를 찾는 알고리즘이다.각 도시간에 연결이 되어 있는지, SNS에서 친구끼리 서로 연결이 되어 있는지와 같은 연결성만을 판단한다. 예전에 이러한 문제를 그래프 형태의 자료구조를 이용해서 풀려고 했는데, 여기서 문제의 핵심은 노드 A와 B가 연결되었는지만 판단하면 된다. 즉 자료 구조상에서, 어떤 노드가 어떤 노드와 인접해 있는지등은 표시할 필요가 없다. 아래 그림을 보자, 아래 그림에서 1과 5는 연..

안드로이드 채팅 UI 만들기 #2 - 나인패치 이미지를 이용한 채팅 버블

안드로이드 채팅 UI 만들기 #2 나인패치 이미지를 이용한 채팅 버블 조대협 (http://bcho.tistory.com) 지난 글에서는 ListView를 이용하여 스크롤이 가능한 텍스트 기반의 간단한 채팅창을 만들어보았다.이번글에는 채팅 메세지에 이미지로 채팅 버블을 입히는 방법을 알아보도록 한다. 채팅 버블 이미지를 입히는 방법이나 원리는 간단한데, 채팅 메세지를 출력하는 TextView에 백그라운드이미지를 입혀서 출력하면 된다. 그런데 여기서 문제가 생기는데, 채팅 메세지 버블의 크기는 메세지의 글자수에 따라 가변적으로 변경되기 때문에, 일반적인 이미지를 백그라운드로 넣어서 가로로 늘이거나 줄이게 되면 채팅창이 이상하게 가로로 늘어날 수 가 있다.. (아래 그림에서 가로로 늘렸을때 말꼬리 부분 삼각..

안드로이드 채팅 UI 만들기 #1 - ListView를 이용한 채팅창 만들기

안드로이드에서 ListView를 이용한 채팅 UI 만들기 조대협 (http://bcho.tistory.com) 안드로이드 프로그래밍 기본 개념이 어느정도 잡혀가기 시작하니, 몬가 만들어봐야겠다는 생각이 들어서 생각하던중에 결론 낸것이, 간단한 채팅 서비스, 기존에 node.js 하면서 웹용 채팅을 만들어보기도 했고, 찾아보니, 안드로이드용 SocketIO 라이브러리도 잘되어 있어서 서버 연계도 어려울것이 없을것 같고, 또한 메세지가 왔을때 푸쉬 알림을 써야 하는 등 이것저것 실습이 될것 같아서, 결국은 채팅으로 정했다. 서버나 연계 코드 구현보다, 가장 어려운게 역시나 UI 디자인과 프로그래밍인데, 가장 쉬운 방법으로는 ListView를 사용하는 방법이 무난하다. (결국 코딩을 하고 나니 여러가지 한계를..