Making git server

from Programming 2015/12/14 01:16
$ git clone --bare my_project my_project.git
$ scp -r my_project.git user@git.example.com:/directory/to/git
$ git clone user@git.example.com:/directory/to/git/my_project.git
2015/12/14 01:16 2015/12/14 01:16

Vec2 ? Point?

from Programming/cocos2d-x 2015/12/13 17:29
Point was refactored to Vector2 and then Vec2.
However, Point was already wide-spread, it was typedef-ed to Point in Vec2.h


2015/12/13 17:29 2015/12/13 17:29
Using camera
auto s= Director::getInstance()->getWinSize();
auto camera= Camera::createPerspective(60, (GLfloat)s.width/s.height, 1, 1000);

// set parameters for camera
camera->setPosition3D(Vec3(0, 100, 100));
camera->lookAt(Vec3(0, 0, 0), Vec3(0, 1, 0));

addChild(camera); // add camera to the scene
Creating orthogonal camera
auto s= Director::getInstance()->getWinSize();
auto camera= Camera::createOrthographic(s.width, s.height, 1, 1000);
Hide objects from camera
// camera
camera->setCameraFlag(CameraFlag::USER1);

// node
node->setCameraMask(CameraFlag::USER1);
2015/12/10 17:28 2015/12/10 17:28
Polygon Sprite and AutoPolygon
Check performance between normal sprite and polygon sprite (area to draw vs. function call count)
auto pinfo= AutoPolygon::generatePolygon("filename.png");
auto spp= Sprite::create(pinfo);
Touch event handling
Widget::TouchEventType
ui::Widget::TouchEventType::BEGAN
ui::Widget::TouchEventType::ENDED
LoadingBar
#include "ui/CocosGUI.h"

auto loadingBar= LoadingBar::create("LoadingBarFile.png");
// set the direction of the loading bars progress
loadingBar->setDirection(LoadingBar:::Direction::RIGHT);

this->addChild(loadingBar);

// something happened, change the percentage of the loading bar
loadingBar->setPercent(25);

// more things happened, change the percentage again
loadingBar->setPercent(35);
TextField
#include "ui/CocosGUI.h"

auto textField= TextField::create("", "Arial", 30);

textField->addTouchEventListener([&](Ref* sender, Widget::TouchEventType type) {
  std::cout << "editing a TextField" << std::endl;
});

// make this TextField password enabled
textField->setPasswordEnabled(true);

// set the maximum number of characters the user can enter for this TextField
textField->setMaxLength(10);

this->addChild(textField);
ParallaxNode
// create ParallaxNode
auto paraNode= ParallaxNode::create();

// background image is moved at a ratio of 0.4x, 0.5y
paraNode->addChild(background, -1, Vec2(0.4f, 0.5f), Vec2::ZERO);

// tiles are moved at a ratio of 2.2x, 1.0y
paraNode->addChild(middle_layer, 1, Vec2(2.2f, 1.0f), Vec2(0, -200));

// top image is moved at a ratio of 3.0x, 2.5y
paraNode->addChild(top_layer, 2, Vec2(3.0f, 2.5f), Vec2(200, 800));
5 types of event listeners
  1. EventListenerTouch - responds to touch events
  2. EventListenerKeyboard - responds to keyboard events
  3. EventListenerAcceleration - responds to accelerometer events
  4. EventListenerMouse - responds to mouse events
  5. EventListenerCustom - responds to custom events
EventDispatcher
  • A node of a lower value of FixedPriority receives events before nodes with higher values
  • SceneGraphPriority is a pointer to a Node. Event listeners with higher z-order values receives events before event listeners have lower z-order values.
Touch Events
// Create a "one by one" touch event listener
// (processes one touch at a time)
auto listener1= EventListenerTouchOneByOne::create();

// When "swallow touches" is true, then returning 'true' from the
// onTouchBegan method will "swallow" the touch event, preventing
// other listeners from using it
listener1->setSwallowTouches(true);

// trigger when you push down
listener1->onTouchBegan= [](Touch* touch, Event* event) {
  // your code
  return true; // if you are consuming it
});

// trigger when moving touch
listener1->onTouchMoved= [](Touch* touch, Event* event) {
  // your code
});

// trigger when you let up
listener1->onTouchEnded= [=](Touch* touch, Event* event) {
  // your code
});

// Add listener
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, this);
2015/12/07 10:29 2015/12/07 10:29

현재 시간을 millisecond 단위로 가져오기

Linux

struct timeval time;
int res = gettimeofday(&time, 0);
return 1000 * time.tv_sec + (time.tv_usec / 1000);


Windows
FILETIME time;
__int64 msec;
GetSystemTimeAsFileTime(&time);
msec = time.dwHighDateTime;
msec <<= 32;
msec |= time.dwLowDateTime;
msec -= 116444736000000000ULL; // offset to the Linux epoch time
return msec / 10000;

2010/07/10 02:38 2010/07/10 02:38
Tag //

"컴퓨터 프로그램의 구조와 해석" 이라는 책을 추천하는 글을 읽었다. 흥미가 생겨서 아마존에서 찾아봤다.

그런데, 아마존에서 서평을 보니 별 1개와 5개가 88:53의 비율로 갈린다. 재미있는 현상이다.

사용자 삽입 이미지
리뷰를 쓴 사람들 중 왜 이렇게 평가가 갈리는지에 대해 평가한 사람이 있어 잠깐 옮긴다.

I think it is because SICP is a very personal message that works only if the reader is a computer scientist (or willing to become one).

MIT의 교재라더니 역시나 CS 전공자들을 위한 책이었던 셈인가?

아무튼 조금 더 찾아보니 MITPress에서 인터넷으로 책의 원문을 모두 공개하고 있다.

http://mitpress.mit.edu/sicp/

미국의 버클리대학에서는 이 책을 텍스트로 강의한 내용을 동영상으로 만들어 제공하고 있다. 다음 주소를 따라가면 해당 동영상을 모두 볼 수 있다.

http://webcast.berkeley.edu/course_deta ··· 3D2008-d

내용도 궁금해지고, 이렇게 책 원문 전체와 동영상 강의까지 제공되니 보지 않을 수 없구나...ㅋㅋ
2009/04/30 19:04 2009/04/30 19:04
Tag //
Apple Developer Connection에서 제공하는 "The Objective-C 2.0 Programming language"라는 문서를 읽고 있다. 그런데, 사실 이 문서는 그리 잘 읽히는 그런 자습서류의 문서는 아닌 듯하다. 정말 진도가 안나간다. 따로 나오는 Objective-C 관련 서적들이 왜 필요한 지 알 것 같다. 그래서 자꾸만 아마존에서 Objective-C 관련 서적들을 기웃거리게 된다. 요즘 가장 관심 가는 책은 "Learn Objective-C on the Mac"이라는 책이다. Apress에서 나온 책인데, 아마존 별점 5/5(8)를 받은 책이다. 뭐 리뷰어가 8명 밖에 안되지만, 그래도 전부 별 5개를 줬다는 건 그만큼 좋다는 얘기일 터.
사용자 삽입 이미지

그래도 뭐 초보 프로그래머는 아닌 탓에 일단 애플에서 제공하는 문서로 대충 입문만 하고, 실제 iPhone development의 세계로 뛰어들 생각이다. iPhone 어플 개발은 현재 두 가지 책이 가장 인기있는데, "The iPhone Developer's Cookbook"과 "Beginning iPhone Development"가 바로 그 두 책이다. 첫 번째 책은 제목에서도 알 수 있듯이 Cookbook 즉 요리책 처럼 일종의 레퍼런스 역할을 할 수 있는 책이란다. 그래서 아무래도 자습서 역할로는 좀 불친절한 듯. 반면 두 번째 책은 자습서로서 꽤나 좋은 역할을 할 수 있는 책이다. 아마존 별점도 4.5/5(47)로 47명의 리뷰어들의 평점 평균이 4.5에 달할 정도로 괜찮은 평가를 받고 있다.
사용자 삽입 이미지사용자 삽입 이미지

일단 첫 번째 책은 torrent를 통해서 어떻게 구하긴 했고, 두 번째 책은 1books24x7.com에서 읽을 수 있다. 그래도 종이 책에 대한 미련을 버리기 힘드네. ㅡ.ㅡ;; 2오늘도 아마존에 들어가서 주문하려고 했더니, 책 두 권에 $99.9 더라는... 가장 싼 배송비를 선택했는데도 그렇다. 환율 계산해보니 yes24.com에서 주문하는 거나 비슷할 듯하다. yes24.com은 빨리라도 배송해주지...ㅡ.ㅡ;;

빨리 Objective-C를 읽고 다음 단계로 넘어가고 싶다.

참고: 본문의 이미지는 모두 http://amazon.com에서 가져왔다.

  1. 회사가 단체 계정을 갖고 있어서 개인적으로 가입하지 않아도 된다.
  2. 다시 아마존에 들어가보니 이전에 뭔가 잘못 됐었던 것 같다. 현재는 $67.75로 나온다. 그래서 잽싸게 그냥 주문해버렸다.
2009/01/18 19:44 2009/01/18 19:44

GDB - TUI

from Programming 2008/11/18 14:15

회사에서 작업할 때는 putty를 이용해서 서버에 접속한 후 gdb로 작업을 한다. 그런데, 디버깅을 하거나 execution path를 분석할 경우 source code를 확인하기가 귀찮았었다. 매번 list명령을 사용하거나 다른 창에 따로 source를 열어 놓은 후 같이 보면서 작업했는데, TUI (Text User Interface)를 사용하면 gdb 화면에 바로 source 창을 띄워놓고 작업할 수 있다. gdb 프롬프트에서 CTRL-X A를 입력하면 된다.

사용자 삽입 이미지

참조: http://davis.lbl.gov/Manuals/GDB/gdb_21.html

2008/11/18 14:15 2008/11/18 14:15
Tag // ,

C++-style casts

from Programming/C&CPP 2008/10/23 16:15

const_cast<T>(expression)

dynamic_cast<T>(expression)

reinterpret_cast<T>(expression)

static_cast<T>(expression)

  • const_cast is typically used to cast away the constness of objects. It is the only C++-style cast that can do this.
  • dynamic_cast is primarily used to perform "safe downcasting," i.e., to determine whether an object is of a particular type in an inheritance hierarchy. It is the only cast that cannot be performed using the old-style syntax. It is also the only cast that may have a significant runtime cost.
  • reinterpret_cast is intended for low-level casts that yeld implementation-dependent (i.e., unportable) results, e.g., casting a pointer to an int. Such casts should be rare outside low-level code.
  • static_cast can be used to force implicit conversions (e.g., non-const object to const object, int to double, etc.). It can also be used to perform the reverse of many such conversions (e.e., void * pointers to typed pointers, pointer-to-base to pointer-to-derived), though it cannot cast from const to non-const objects. (Only const_cast can do that.)

출처: Effective C++, Third Edition

2008/10/23 16:15 2008/10/23 16:15
Tag //

오늘 밤 주간 회의를 기다리면서 지금 공부하고 있는 "OS 구조와 원리"를 6장 까지 끝냈다. 책을 따라 하나씩 코딩해 가면서 느끼는 점은 재미있다 라는 것과 함께 참 불친절한 책이구나 라는 것이다.

기본적으로 이 책은 책만 봐서는 전혀 따라할 수 없게 되어 있다. 반드시 책에 포함되어 있는 CD에서 해당 소스를 다운 받아서 같이 참조해야 한다. 책은 정말로 그냥 소스에 대한 주해서 정도로 봐야 한다. (저자가 이미 그렇게 밝혀 놨었는데, 대수롭지 않게 생각했다가 뼈저리게 느꼈다.) 한마디로 주요 텍스트는 부록 CD에 들어 있는 소스코드인 셈이고, 책은 소스코드에 대한 설명인 셈이다. 물론 책에 나오지 않는 내용들은 당연시 소스코드만으로도 충분히 알 수 있는 내용들이다.

각 장 별로 하루씩 할당하도록 되어 있는데, 생각보다 하루 치가 많아서 시간이 꽤 많이 걸린다. Teach Yourself 시리즈처럼 하루치에 1~2시간 정도로 생각했다가는 낭패볼 듯. 뭐 내 내공이 부족하기 때문이겠지만...

아무튼, 6장 까지 마무리 한 기념으로 스크린 샷~

사용자 삽입 이미지


2008/09/29 23:30 2008/09/29 23:30