달력

11

« 2017/11 »

  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  
  •  
2012.11.26 13:03

스탠딩 데스크에 대한 생각 2012/Temporary2012.11.26 13:03

앉아만 있는 것이 건강에 안 좋은 것 같아 서서 쓰는 책상을 진지하게 고려중이다..

일단 집에서는 책상위에 임시로 작은 상을 올려 놓아서 쓰고 있는데... 음 괜찮다. 아직 적응이 안되서인지

다리가 좀 아프지만... 확실히 딴 짓 안하고 집중하게 만드는 효과가 있다.

근데 책상이 좀 지저분해지고, 공간을 많이 차지하는 것 같아 차후에는 정식으로 구매를 하나 해야 할 것 같다.

문제는 아직까지 우리 나라에서 이런 스탠딩 데스크를 파는 곳이 많지 않고, 제품도 단순한 것 들로 제한되어 있다는게 

아쉽다. 아무래도 눈을 외국으로 돌려야 하는게 아닌 가 싶다.



Ninja Standing Desk

<source : http://www.ninjastandingdesk.com/>

구글링중에 나온 것 중에 특이한게 바로 닌자스탠딩 이란 제품인데, 보기에도 좋을 뿐더러 설치를 어느 한 군데에 고정하는 것이

아니라서 유동성이 좋은 것 같다. 제품 가격은 저렴한 모델이 $159 정도인데, 그렇게 비싼 가격은 아니지만 해외 배송이 안되는 것 같다.


그 다음 후보로는 IKEA의 Jerker 란 모델인데... 조만간 우리나라에 이케아가 들어온다고 하니 직접 보고 판단하면 괜찮을 것 같다.


마지막으론 GeekDesk 란 제품.. 뭔가 이름부터 포스가 남다르다. 높이를 자유자재로 조절할 수 있는 장점이 있지만, 가격이

너무 비싸다. 기본이 거의 100만원부터 시작하는데... 직접 써보고 감동이라도 하지 않는한 구매까지 이어지기 힘든 제품은 아닐까.


<source : http://www.geekdesk.com>



일단은 임시로 꾸민 스탠딩 데스크가 정말로 효과적인지 몇일정도 테스트 후에 어떤 것을 구매할 것인지를 좀 고민해봐야 할 것 같다. 그 사이에 이런저런 제품들도 좀 더 알아보는 것도 좋고.





저작자 표시
신고
Posted by 에어림
2012.11.12 20:17

WebGL - Drawing ConvexHull 2012/OpenGL2012.11.12 20:17

임의의 점 10개를 생성하여, convexthull을 그려주는 webgl 예제.


아래는 정점 버퍼 초기화 함수. viewport의 크기는 640x480이다.


function initBuffers() {


var maxPoints = 10;
var i = 0
var vertices=[];
var points = [];

while(i!= maxPoints)
{
var vertexElement = [];
vertexElement.push(getRandomInt(0,640));
vertexElement.push(getRandomInt(0,480));
vertexElement.push(0);

points.push(vertexElement[0]);
points.push(vertexElement[1]);
points.push(0);

vertices.push(vertexElement);
i++;
}

var convexVertcies = [];
convexVertcies = getConvexHull(vertices);


var newVertices = [];
for (var idx in convexVertcies) {
var temp = convexVertcies[idx];

for (var i in temp) {
newVertices.push(temp[i][0]);
newVertices.push(temp[i][1]);
newVertices.push(temp[i][2]);
}

}

console.log(newVertices);
console.log(points);

lineBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, lineBuffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(newVertices), gl.STATIC_DRAW);

lineBuffer.itemSize = 3;
lineBuffer.numItems = newVertices.length / lineBuffer.itemSize;

pointsBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, pointsBuffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(points), gl.STATIC_DRAW);

pointsBuffer.itemSize = 3;
pointsBuffer.numItems = maxPoints;

}

아래는 convexhull을 만드는 함수. x좌표의 최소값과 최대값을 찾고, 두 개를 기준으로 상단 convexhull과 하단을
만든 후 결합한다. 알고리즘은 quickhull이라 불리는 것을 가져옴. 근데 이게 진짜 정확한 방식인지는 모르겠으나, 
여러번 테스트 결과는 이상없이 결과 나옴.

function getDistant(cpt, bl) {
var Vy = bl[1][0] - bl[0][0];
var Vx = bl[0][1] - bl[1][1];
return (Vx * (cpt[0] - bl[0][0]) + Vy * (cpt[1] -bl[0][1]))
}


function findMostDistantPointFromBaseLine(baseLine, points) {
var maxD = 0;
var maxPt = new Array();
var newPoints = new Array();
for (var idx in points) {
var pt = points[idx];
var d = getDistant(pt, baseLine);

if ( d > 0) {
newPoints.push(pt);
} else {
continue;
}

if ( d > maxD ) {
maxD = d;
maxPt = pt;
}

}
return {'maxPoint':maxPt, 'newPoints':newPoints}
}

var allBaseLines = new Array();
function buildConvexHull(baseLine, points) {

allBaseLines.push(baseLine)
var convexHullBaseLines = new Array();
var t = findMostDistantPointFromBaseLine(baseLine, points);
if (t.maxPoint.length) { // if there is still a point "outside" the base line
convexHullBaseLines =
convexHullBaseLines.concat(
buildConvexHull( [baseLine[0],t.maxPoint], t.newPoints)
);
convexHullBaseLines =
convexHullBaseLines.concat(
buildConvexHull( [t.maxPoint,baseLine[1]], t.newPoints)
);
return convexHullBaseLines;
} else { // if there is no more point "outside" the base line, the current base line is part of the convex hull
return [baseLine];
}
}

function getConvexHull(points) {
//find first baseline
var maxX, minX;
var maxPt, minPt;
for (var idx in points) {
var pt = points[idx];
if (pt[0] > maxX || !maxX) {
maxPt = pt;
maxX = pt[0];
}
if (pt[0] < minX || !minX) {
minPt = pt;
minX = pt[0];
}
}
var ch = [].concat(buildConvexHull([minPt, maxPt], points),
buildConvexHull([maxPt, minPt], points))
return ch;
}

결과는 다음과 같다.


전체 소스 코드는 아래에서 확인~

https://github.com/airyym/webgl/blob/master/triangulation.html




저작자 표시
신고
TAG webgl
Posted by 에어림
2012.10.31 00:49

IT 혁신에 대한 생각 2012/Temporary2012.10.31 00:49

아이폰 이후로 세상이 참 많이 변했다.

불과 몇년 전만 해도 이렇게 어디에서나 인터넷에 접속하고 친구들과 얘기를 나눌 수 있을지는 상상도 못했다.

아니, 물론 상상은 했었지. 다만 이렇게 빨리 될줄이야.


소프트웨어를 개발하는 입장이지만 최근에 드는 생각은, 역시 유형의 하드웨어의 혁신이 선행되야 소프트웨어도

따라가는 게 아닐까 하는 짧은 생각이 든다. 컴퓨터의 등장이 있었으며, 전용선이 땅 밑에 깔리고, 무선 네트워크가 

사방팔방을 날아다니며, 우리 손에 작은 전자기기가 쥐어졌을 때, 우리의 삶은 다른 어떤 것보다 극적으로 변했던 것 같다.


하지만 벌써 혁신의 충격이 가시기 시작했다. 스마트폰은 대부분의 사람들에게 없어서는 안될 중요한 도구지만, 또한 흔해졌다. 

너무 빠르다 이 속도는. 스마트폰이라는 프레임에 미처 적응하기도 전에, 사회는 무언의 압박을 다시 시작한 것 같다.

"혁신하라!"


분명히 혁신은 다가올 것이다. 우리가 컴퓨터라는 책상 위의 커다란 틀에 갖혀 있는 동안, 스마트폰이 다가와 새로운 세상을 보여줬고, 우리는 또다시 스마트폰의 기준으로 모든 것을 바라보고 있다. 무엇이 스마트폰의 세상을 깨고 멋지게 등장할까?

나는 "구글 글래스"와 같은 디바이스가 다음 세대의 혁신을 이끌어갈 것이라 생각한다. 구글은 대단하다. 분명히 나와 비슷한 생각을 한, 훨씬 더 똑똑한 사람들이 벌써 혁신을 이끌 준비를 하고 있다. 구글 글래스가 부르짖는 혁신의 키워드는 "당신 자체가 똑똑해져라!" 가 아닐까? 이 멋진 디바이스와 함께 분명 우리는 더 똑똑해질 수 있을 것 같다.




저작자 표시
신고
Posted by 에어림
2012.10.06 21:09

골목사장 분투기 2012/Books2012.10.06 21:09

Zen Developer
골목 사장 분투기
강도현 저
예스24 | 애드온2


억대 연봉의 트레이더가 자영업으로써 소셜 카페를 운영하면서 겪게 되는 자영업자의 실태를 밝히는 책이다.

막연하게 알고 있던 권리금이 "바닥 권리", "영업 권리", "시설 권리" 등으로 나뉘어진다는 사실도 알 수 있었고,

대기업이 지역 시장에 진출하면서 붕괴되는 지역 경제의 현실에 대해서도 간접적으로 체험할 수 있는 책이었다.

책에서 반복적으로 소개하는 자영업의 현실은 작금의 자영업자들의 고통이, 내 주변의 지인 친척의 문제일 수 있고, 더 나아가서는 자신의 문제가 되는 것임을 일깨워주고 있었다. 

더불어 자영업의 문제는 더 이상 개인적인 차원에서 해결할 수 있는 성질의 것이 아닌, 대한민국의 총체적인 사회적 합의가 

필요하다고 역설하고 있다.  

저작자 표시
신고
Posted by 에어림
2012.10.03 18:08

Shader 코드 내부 변수의 Precision 2012/OpenGL2012.10.03 18:08

갤럭시 s2에서 OpenGL ES 2.0으로 영상처리 코드 구현중에 gl_FragCoord와 Viewport 사이즈를 이용해서 처리할 일이 생겼는데, 쉐이더 코드 내에서 대용량의 이미지를 처리할 경우에 연산 결과를 임시로 저장해야 할 필요가 있었다. 


근데 스펙상 precision을 mediump로 할 경우, float 의 크기가 고작 2^15 까지밖에 저장을 못하게 되어있다. 물론 highp로 precision을 높여도 되지만 여러가지 실험 결과, 갤럭시 s2의 OpenGL ES 의 스펙이 highp를 지원하지 않는 걸로 생각된다. 

크로노스의 스펙 문서에서도 highp 의 구현은 optional 로 지정되어 있으니 아마도 highp가 자동으로 downsizing 이 된게 아닌가 싶다.

 

문제는 컴파일은 이상없이 된다는 점이다. 그러다가 다른 오류 때문에 컴파일이 안될 경우 나오는 오류 메시지에

highp가 지원되지 않는다는 문구가 떡하니 포함되게 된다... 참으로 골때리는 NDK..


그러나 정작 해결은 전혀 엉뚱한 곳에서 됐으니.... 무려 2주간을 삽질로 날리는 결과 ㅠ 



저작자 표시
신고
TAG OpenGL ES
Posted by 에어림
2012.06.12 14:47

아이고 고민이 많다. 2012/Chat2012.06.12 14:47

공부해야할 건 산더미 같다.


현재 회사에서 필요한 기술에 대한 숙련도도 높여야 하고,

앞으로의 커리어를 위해서 새로운 기술들도 틈틈이 익혀놔야 하고,

단순 코더가 되지 않기 위해 이론적인 지식도 쌓아야 할 것 같다.


그래서 머신러닝이니, 빅 데이터니, 영상처리니, 새로운 프로그래밍 언어나 프레임웤들을 잡다하게 손대보고 있다.

근데 시간도 의지도 부족하다. 내가 정말 재밌어서 공부하기 보다는 필요하다는 압박감을 가지고 공부하다 보니 

쉽게 질리고, 계속 공부하고자 하는 의지도 막상 불타오르지도 않게 된다.


선택과 집중을 해야 하는데 뭔가 알아야 선택을 할 것 아닌가. 지도해줄 멘토도 없고, 스스로에 대한 자신감도 없다 보니

그냥 이거저거 간만 보다가 그만두는게 한 두가지가 아니다. 더 걱정되는 것은 지금이야 아직 젊어서 이거저거 건드려보더라도

나름 학습 효과가 있는 편이라고 생각하지만 40대만 되도 학습능력이 크게 저하된다고 하는데 그전까지는 전문가가 될 수 있을까 하는 점이다. 


"T"자 형 인재가 아니고 "ㅡ"자형 바보가 되가고 있다. 어느하나에도 깊이를 갖지 못하는 그냥 평범한 사람.


어떻게 화면 좋을까.


저작자 표시
신고
TAG 공부, 미래
Posted by 에어림
2012.05.31 00:09

2012년 하반기 목표 2012/Goal2012.05.31 00:09


1. 책 번역 

2. Flask 문서 번역 및 Flask를 이용한 사이드 프로젝트 1개 완성

3. Ray tracing 관련 책 1권 읽기

4. 오픈소스 프로젝트 참여


저작자 표시
신고
Posted by 에어림

올해 하반기는 Flask를 이용하여 간단한 웹 프로젝트를 만들어보려고 한다. 

이름은  English10thReading이라는 명칭이다..(물론 가칭)


독해의 기술이란 책에서 감명을 받은 영어 공부방법을 웹으로 구현하려 한다.

그 방법에 대해 간단히 설명하자면.


200자 내외의 영어 지문을 10번 읽으면서 점점 읽는 속도를 단축해나가는게 목표다.

이 때 모르는 단어가 나온다고 바로 사전을 찾아보는 것이 아니라, 일단 형광펜등을 이용해서 체크만 한다.

이러한 단어는 횟수가 늘어나면서 문맥으로 파악될 수 있는데, 만약 파악이 되지 않는다면 다시 다른색의 형광펜을 통해서

누적 표시를 해준다. 10번을 읽는 동안 계속 표시할 필요는 없으며 4~5번 읽어도 뜻이 짐작이 안된다면 그냥 사전을 찾아봐도 된다.


저자의 주장은 이렇다. 우리나라 사람의 영어 공부는 input이 너무도 부족하다. 따라서 input을 늘려야 하는데, 이를 위한 최선의

방법은 바로 읽기라는 것이다. 읽으면서도 뜻을 알 수 없는 단어나 문장은 들어서도 결코 이해할 수 없다는 것이 요지.

또한 미국인이 1분동안 말하는 단어의 수가 대략 200자 내외인데 읽으면서도 이 정도 속도를 낼 수 없다면 결코 들어서도 그들의 

말을 이해할 수 없다는 것. 따라서 이 방법을 사용하면서 얻어야 될 성취는 바로 어떠한 텍스트도 1분내에 200자 단어의 속도로 읽어낼 정도로 영어 읽기에 숙달되는 것이겠다.



위와 같은 방법을 위해 웹프로젝트는 아래와 같이 구현하고자 한다.



사용자가 텍스트를 등록한 텍스트를 읽는다고 가정했을 때, 읽는 순간부터 페이지의 오른쪽 상단에 현재 흘러가는 시간을 보여준다. 그 아래의 Done버튼을 누른 순간의 시간이 현재 읽은 차수에 대응하는 시간으로 기록될 것이다. 또한 현재 화면에는 4번째의 읽기 라는 것이 보여지는데, 이전의 3번째의 기록도 함께 화면에 보여줄 것이다. 그리고 사용자가 읽다가 모르는 단어라고 체크한 것은 최초의 한번을 클릭했을때는 초록색, 두번째는 주황, 세번째는 빨강색으로 표시할 것이다.


위의 글을 정리하여 프로젝트에 필요한 기능을 나열해보겠다.


1. 사용자가 읽을 텍스트 등록 및 목록 조회

2. 텍스트 읽을 시, 소요시간을 측정하여 저장

3. 텍스트 읽을 시, 모르는 단어는 체크 횟수에 따라 차등하여 하이라이트 색상 부여

4. 이전에 읽었던 차수에 대해서 측정 시간 표시



몇 가지 추가됐으면 좋겠다는 기능도 있지만, 일단 최대한 빨리 초기 버전을 완성한다는 목표로 정말 필요한 기능을 우선 구현하는 방향으로 진행하고자 한다. 또한 구현시에 공부 겸 TDD를 적용하여 진행할 것이다.




저작자 표시
신고
Posted by 에어림
2012.05.30 11:24

Flask Installation 2012/Flask2012.05.30 11:24

출처 : http://flask.pocoo.org/docs/installation/#installation

설치

Flask는 두 개의 외부 라이브러리 WerkzeugJinja2에 의존적이다. WerkzeugWSGI를 위한 툴킷이며,  웹 서버와 웹 애플리케이션을 잇는 개발 및 배포에 쓰이는 표준 파이썬 인터페이스다. Jinja2는 템플릿 엔진이다.

 

Flask 개발에 필요한 모든 것을 재빠르게 설치하기  위해서 virtualenv를 살펴보겠다.

설치를 위해서는 파이썬 2.5 이상이 필요하다. 이 글이 작성된 시점에, 아직 파이썬 3를 위해 WSGI 스펙이 확정되지 않았으며 따라서 Flask(0.8)도 파이썬 3 이상을 지원하지 않는다.

 

Virtualenv

여러 프로젝트를 개발할 때 각각 다른 버전의 파이썬이나 외부 라이브러리 사용으로 인해 충돌이 일어나는 경우가 많다. 이로 인해 프로젝트의 의존성이 꼬이는 경우가 발생한다. 이런 문제를 해결하기 위해 virtualenv는 각각의 프로젝트마다 별개의 설정을 적용할 수 있도록 지원한다.

 

OS X나 리눅스를 사용한다면 아래와 같은 명령어를 통해 virtualenv를 설치할 수 있다.

 

$sudo easy_install virtualenv

$sudo pip install virtualenv

 

우분투에서는

$sudo apt-get install python-virtualenv

 

 윈도우 시스템에서는 easy_install이 없으므로 이를 먼저 설치해야 한다. 링(http://flask.pocoo.org/docs/installation/#windows-easy-install)를 통해 어떻게 설치하는지 알아보자. 설치후에는 위와 같은 커맨드를 sudo 명령 없이 실행하면 된다.

 

설치가 완료되면, 쉘을 실행하여 당신만의 환경을 만들어보자.

나는 보통 프로젝트 폴더안에 venv란 이름으로 설정 폴더를 만든다.

$ mkdir myproject

$ cd myproject

$ virtualenv venv

New python executable in venv/bin/python

Installing distribute............done.

 

앞으로 이 프로젝트에서 작업할때면 아래와 명령을 통해 상응하는 환경설정을 사용할 수 있다.

맥이나 리눅스는 아래의 명령을 실행하고

$ . venv/bin/activate

윈도우는 아래 명령을 실행한다.

$ venv\scripts\activate

 

환경선택이 끝나면, 아래 명령을 통해 Flask를 설치하자.

$ pip install Flask

 Flask 최신버전을 설치하는 방법(0.9)은 출처에서 확인하도록 하자. 본 블로그에서는... 정식 버전인 0.8을 사용할 예정이다.



© Copyright 2012, Armin Ronacher.


저작자 표시
신고
TAG flask
Posted by 에어림
2012.05.29 01:32

Flask에 대하여 2012/Flask2012.05.29 01:32

Flask는 일단 파이선 기반의 마이크로 웹프레임워크다.

마이크로 프레임워크의 정확한 정의는 알 수 없지만, 기본의 RoR이나 Django등의 풀스택 프레임워크와 달리

ORM이나 Admin page 지원 혹은 scaffolding등의 기능이 빠진 프레임워크의 유형이라 추측된다. 

복잡한 설정없이 규약에 따라 코딩하는 것은 요즘 유행하는 프레임워크의 추세를 따라가는 것 같다.


Flask를 써보기로 한 것은 일단 파이선을 제대로 배우고 공부해나가는 목적과 함께, 사이드 프로젝트용 웹 프레임워크(원래는 Play! 프레임워크를 쓰려고 했으나 2.0부터 Scala로 바뀌고 나서는 급선회..)를 하나쯤 익혀보고 싶어서이다. 


Flask 개발자에게 도큐먼트 해석해서 블로그 포스팅을 해도 되냐고 메일을 보내놨으니, 그의 답변 여하에 따라 본격적으로

Flask 개발 및 번역 작업을 시작할 예정이다. 


개발은 아마 지지부진하게 묵혀두고 있는 영어 공부 관련(가칭 : English10thReading) 웹 프로젝트를 제작해 볼것이다. 

그리고 제작 과정은 블로그에 연재할 예정이다. 소스는 아마 Githup으로 해야겠지?






저작자 표시
신고
TAG flask, Python
Posted by 에어림