2010년 4월 29일 목요일

Visual Studio 2008에서 난데 없이 mfc90d.dll을 못찾는다며 죽을때

파일 검색해도 안나올꺼임.

원인은...

매니페스트를 disable시켰기 때문임.

근데 매니페스트를 포함시키면 링킹시에 에러뜨면서 진행이 안될꺼임.

그래도 허고싶다면..


일단 '링커'의 '매니페스트 파일'의 '매니페스트 생성'은 enable해주고... '매니페스트 도구'의 '입력 및 출력'의 '매니페스트 포함'을 아니오로 하면 됨.

난 도저히 용서가 안된다.

노무현 대통령을 죽음으로 내몬 사람들..

결코 잊지 않을꺼다.

개떡껌. 개좆나라당. 개조중동.

개독교. 개상도.

수장된 불쌍한 장병들마저 정치적으로 이용하는 개색히들..

지 자리 지킬려고 구라쳐대는 해참총장, 장교들..

니들이 사람이냐?

불쌍하게 불귀의 객이 된 애들이 밤마다 니 꿈에 나타날거다.

잠 잘도 오겠다.

2010년 4월 28일 수요일

자바스크립트, Ajax 추천 21선

http://resources.savedelete.com/21-awesome-javascript-ajax-effects-every-web-developer-should-know.html#utm_source=faqpal.com

아.... 자바스크립트도 공부해볼까...

할거많다..

애니웨이, 올해는 뭔가 잘 안풀리는 해..

2010년 4월 26일 월요일

fopen, fclose 시에 뜬금없는 SIGABRT

multithreaded 상에서 그냥 fopen/fclose한것 뿐인데..

SIGABRT 띄우면서 갑자기 돌아가실때....

0x00007ffff6ec34e5 in raise () from /lib64/libc.so.6
(gdb) up
#1 0x00007ffff6ec49b0 in abort () from /lib64/libc.so.6
(gdb)
#2 0x00007ffff6efe66d in ?? () from /lib64/libc.so.6
(gdb)
#3 0x00007ffff6f03c76 in ?? () from /lib64/libc.so.6
(gdb)
#4 0x00007ffff6f06d0e in ?? () from /lib64/libc.so.6
(gdb)
#5 0x00007ffff6f08a59 in malloc () from /lib64/libc.so.6
(gdb)
#6 0x00007ffff6ef4b6b in ?? () from /lib64/libc.so.6
(gdb)
#7 0x0000000000403d53 in PrepBuffer_SendFragment (param=...) at libPrepBuffer/src/PrepBuffer.c:259
259 fp=fopen((char *)PrepBuffer->fname, "rb");



원인을 못찾겠음. 당연히 PrepBuffer->fname의 값은 정상임.


http://valgrind.org/
http://perens.com/FreeSoftware/ElectricFence/

을 써서 찾아보라고는 하는데... 번거로버서리...에잇!!

2010년 4월 25일 일요일

난 제대로 가고 있나?

너무 정체되어 살아간지 오래된것 같다.


뭔가를 해야할텐데...


음...황지 한번 돌아보고 싶다...

인요한 박사...

이런 분들이....이런 가족들이 진정한 크리스챤인것 같다.

말을 섞어보면 느껴지는 큰 그릇...

그런 그릇을 가진 사람이 부럽다..

그런 그릇을 가진 사람들이 배출될수 있는 사회분위기... 교육시스템도 부럽다..


개독교는 수백번 까여도 할말 없음.

왜 같은 종교를 믿는것 같은데 하는 짓들은 천지차이일까? 민족성인가?

2010년 4월 23일 금요일

textmate 이거 물건인것 같다.

윈도우용 텍스터 에디터가 ultra edit 라면..

맥용으로는 textmate가 있음.

이게 꽤 쓸만해서 windows용으로 '카피'한 애들이 있음...

두군데정도에서 카피 프로젝트하는 듯함. 어느정도 안정적으로 돌아가는지는 확인요망.

http://www.e-texteditor.com/
==> 요놈은 돈받고 팜.

http://intype.info
==> 아마츄어?

루비, 개발 툴

1. 그냥 툴 없이 에디터로 하기..
--> textmate 가 최고인듯. 울트라에디트만 썼었는데 이녀석도 좀 써줘야 할듯.
--> 맥에서는 쵝오

2. locomotive 설치
--> 2007년정도까지 개발되고 지금은 거의 놀고 있는듯... 아님 다 개발된건가?
--> http://sourceforge.net/projects/locomotive/files/

거기서 locomotive2.0 먼저 깔고, bundle을 깔면 됨.
나중에 좀 써보고 어떤지 재 포스팅 예정.



@루비 인기가 2006년~2007년을 정점으로 좀 시들한듯....
@성능측면에서는 그리 나쁘진 않은듯 한데.. 음... 루비의 단점이라기보다는 루비의 진화에 있어서 몇가지 실수가 있지 않나 싶다. 몇가지 보이긴 하는데.. 좀 치명적일수도 있는... 좀더 공부한 담에 다시 썰을 풀어봐야겠다.

TCP 전송 속도 조절하기

당연히 단순한 거여야 하는데 뜻밖에 찾기 어려웠음.

그동안 TCP의 성능을 높이려는 노력은 많았으나, 전송속도를 조절하는 것은 네트웍 레벨에서는 거의 불가능함.

근데 대부분의 P2P 사이트/프로그램등에서 전송속도를 제한해서 쓰고 있음.

당연히.

흔한 방법이고 좀더 나이스한 방법이 제시되어 있을거라 생각했는데..

걍 시간값 잡아서 통계낸 담에 sleep 주고 있었음.

while(!feof(fp) && sent_len < fragment_size)
{
int size;
size=fread(&ch, 1, 1, fp);
ret=send(sockfd, &ch, size, 0);

if(ret<=0)
{
break;
}

if((sent_len % 512)==0) usleep(100);//nanosleep(&rate_timer, NULL);
sent_len+=size;

}

이건 그냥 예제일 뿐이고..

시간값 계산하는건 나중에 따로 만들어서 올리덩가 하겠음.

그냥 아이디어 차원에서 보기바람.

2010년 4월 20일 화요일

루비, 닥치고 달려보기

0. 디렉토리 생성
% rails -d mysql mugame

1. 일단 db 만들기
% ./script/generate migration create_user_table

2. 생성된 파일 열고 에디트

class CreateUserTable < ActiveRecord::Migration
def self.up
create_table :userTBL do |t|
t.string :user_id
t.string :password
t.string :email

t.timestamps
end
end

def self.down
drop_table :userTBL
end
end

3. DB 실제 테이블 생성
% rake db:migrate

4. app/model/users.rb 생성

5. app/controller/users_controller.rb 만들고 edit
==> 파일명 주의
def index
end
추가

6. app/view/users/index.html.erb 생성

'Ruby Sucks' 추가

7. script/server start

2010년 4월 19일 월요일

Socket Pogramming중에 SIGPIPE로 서버 돌아가실때..

코드를 일부 수정해서 돌렸더니 갑자기 서버가 돌아가신다..

SIGPIPE, Broken Pipe 하는건데..

아래 참조.

http://gkoh.ft.co.kr/numz/section/club.php?slid=csdev&bno=1594

핵심은..

SIGPIPE를 ignore하도록 처리해주는 거임.

흠... 어떻게 보면 기본적인건데 여지껏 모르고 살았다니..원..

2010년 4월 18일 일요일

Ruby.. Rails... session (cookie)

이거 책 (agile rails~~ 3rd edition)보고 따라 했는데도 안된다 싶으면...

브라우저의 쿠키 함 다 날려봐라..

그럼 된다.

머...이유는 대충 알겠는데 주저리 설명하기도 싫고...

Rails....Ruby.... It sucks..

일단... 루비... 레일즈..


너무 규격이 자꾸 바뀐다. 그것도 휙휙~

backward compatibilty가 매우 빈약하다...
--> 개발자의 의지를 매우 꺾어버린다.

코드...
결코 쉽지 않다.

PHP는 공부하지 않고 그냥 API보고 바로 개발이 가능한데...

레일즈...루비... 기본 문법 설명조차 부실하다..

나름 바이블이라 볼수 있는 agile~ 어쩌구하는 책도 ... 주저리주저리 말은 많은데 바뀐게 많아서리 그닥 쓸모없다.

너무 정보도 부실하고....

쩝..

괜히 공부하나 싶기도 하다..

2010년 4월 17일 토요일

Ruby on Rails 2.x.x & Scaffold && ActiveScaffold

최종 정리....이길 바란다..


루비온 레일즈... 과연 이 랭기지가 앞으로도 계속 성공할지 의문스럽다.. 이건 다른 글에서 얘기하기로 하고....


일단 정리를 하자면

Rails 1.x 와 Rails 2.x 대는 많은 변화가 있었음(뭔진 모르지만 REST 기법 적용했다는데...)
근데 이썩을 넘들이 Rails 3.x 만들고 있음.
backward compatibility라는건 애시당초 생각을 안한건지..

아..또 얘기가 엄한데로 흘렀다.



최종정리!!

1. Rails 2.x 대에서는 scaffold 는 'generator' 이다. 즉, 한번 생성된 이후에 자동으로 수정된 데이터베이스에 맞춰서 코드가 생성되는 기능 없다.

2. 그래서 나온게 activescaffold 이다. 이 넘은 'plugin'이다. 즉, 데이터베이스의 변화에 맞춰 코드가 생성된다는 말. 이게 좀더 이쁘고 깔끔한 모양으로 표현가능하다고 한다. 근데 사용하기가 좀 귀찮고 어렵다는 군.. 콜롬부스의 달걀이겠지.


참고한 곳


http://www.viget.com/extend/rails-3-generators-scaffolding/
http://www.ibm.com/developerworks/kr/library/l-activescaffold/ (요기 강추)
http://earlruby.org/2009/06/getting-activescaffold-to-work-under-ruby-on-rails-23/ (요기도)

2010년 4월 16일 금요일

이번 천안함 사태에 대한 언론들의 문제점....

머 말할 필요도 없이 기자들 접시물에 코박고 잠시 반성들좀 해야 겠다.


특히.. 조중동 쓰레기는 말할것도 없고.. 너네 기사는 제목만 봐두 쓰레기야..


새로이 쓰레기 대열에 합류하신 세계일보, 문화일보...

잘 들어라..



기사는 말이다...


팩트를 가지고 말해야 하는거야.. 그렇게 얘기하는 근거가 있어야 해.

근거가 뭐냐고? 증거나 논거지...

소설을 쓰는게 아니고... 니가 사람들 선동하고자 하는 방향이 아니고...

알아?

밑도끝도없이 누가 그랬다. 그 근거는? "누가 그러는걸 들었는데 걔가 예전에 그랬을것 같다는 생각을 했다는 걸 들었대더라~" 가 근거면.. 그게 기사냐..

야~ 이 개나리들아.

밥은 니돈주고 먹고 다니냐?

가서 오늘 마누라하고 니 새끼들한테 잘못했다고 하고 자라. 니 새끼가 자랄 나라 개떡같이 만드는게 니 애비라고.

Ruby; 입력 필드 체크

입력 필드가 유효한지 점검하는 방법..


이번엔 app/mode/ 밑에 있는 rb 파일을 가지고 놈..

validates_presence_of :field명

이거만 써줌됨.

만일 field명에 해당되는 곳에 값을 안 넣은 경우 사용자에게 에러를 띄워서 다시 제대로 할때까지 꼬장침.

mysql; show tables, desc table_name

mysql prompt 상에서....

이 database내에 어떤 테이블이 있고... 그 테이블내엔 어떤 컬럼들이 있는지 확인하는 방법..


mysql> show tables;

테이블들 보여준다.


mysql> desc table_name;

컬럼들과 각 속성들을 보여준다..


@이건 tip도 아니고 설명도 아녀...
@이건 tip도 아니고 설명도 아녀...
@이건 tip도 아니고 설명도 아녀...
@이건 tip도 아니고 설명도 아녀...
@이건 tip도 아니고 설명도 아녀...

Ruby; DB alter

음.. 요 루비 마음에 들라고는 하는데... 성능이 어쩔랑가는 조금 의심스럽긴 하군..

암튼...

개발하는 도중에 db table을 변경하고자 할때 유용한 기법...
물론 SQL문의 ALTER 등으로 할순 있겠지만.... 쉽게 갈수 있으면 쉽게가는게 순리!

%ruby script/generate migration addprice

물론 뒤의 addprice는 임의로 쓰고싶은거 쓰면 됨. 그럼 db/migrate/2010xxxx_addprice.rb 생김.
아래와 같이 에디팅해바.

classAddPricedefself.up
add_column:products,:price,:integer,:default=>0
# 요건 내가 이걸 추가하겠다는 의미..
# products TABLE에 price를 integer로 넣을꺼구... 기본값은 0(빵)으로 채워돌라는 얘기임.

end
defself.down
remove_column:products,:price
# 요건 나중에 roll-back 할때... 이렇게 하면 된다는 의미임. 지금 바로 동작하는건 아님.
end
end


% rake db:migration

하면 위 내용대로 반영됨...


근데....

generate ~~ 어쩌구 해서 새로운 파일을 db/migrate밑에 생성하게 했으면..
전 버전의 파일들은 반영안되는듯...
--> 확인안된 루머임. 확인할라면 금방인데...머...굳이...꼭 필요한것도 아니고... 내가 책쓰자는 것도 아니고... 알지요? 귀차니즘...

루비 온 레인즈 중 scaffold 사용시...


도대체 이놈이 뭐하는 녀석인가..

scaffold !!

웹프로그래밍을 일반적으로(또는 무식하게 ^^;;) 표현하자면.... 데이터(글, 파일등)를 등록하고 이를 데이터베이스에 저장하는 것으로 본다고 하자..

그렇다고 했을때....

저너마가 하는 일은...

그냥 데이터베이스 생김새만 정해주면... 쫘악~ 관련 기능이 한방에 나오도록 만들어 놓은것으로 보면된다.

말이 필요없다. 해보자..


$ ruby script/generate scaffold Movie title:string description:text one_sheet_url:string

위 명령대로 치면, Movie라는 app가 생기고 그 밑에 title, desc... 등을 column으로 가지고 이를 핸들링 할 수 있는 페이지가 쭉 뜬다.

만일.. 아래처럼 뒤에 암껏도 안써준 경우에는 어떻할까?
$ ruby script/generate scaffold Movie

에러는 없으나 어떤 것들을 입력받아야 할지 모르므로 입력할 수 있는 공간이 없다.
이왕이면 위위가 더 편하지 아니한가.. 물론 이렇게 시작해서 db/migrate/xxxxx.db 파일 수정해가면서 일일이 할수도 있다. 맨땅에 헤딩하겠다는데 말릴수야 없지..

어쨌든..

아래 링크는 꼭 한번 읽어보길. 선배들이 고생한 기록은 헛된것이 아니더라능...
http://winchild.egloos.com/6778585

@링크 거는것도 일일이 허락 받아야 하는건 아니겠지..


추가...

근데 db의 내용을 바꾸면 어떻게 되나???

% ruby script/generate migration addprice

하고 난 다음에 db/migrate/xxxx_addprice.rb 파일을 수정하고...

%rake db:migration 을 하면...

데이터베이스내에 반영은 된다..

문제는 scaffold에서 자동으로 제공한 코드들이 동작안한다.

왜냐? db는 업뎃되었으나 scaffold 관련 코드는 업뎃 안되었으니까?

그래서 방법은?

아직 없다. 찾고 있다. 현재로서는 아직 손댄게 없으므로 아래처럼 삭 날렸다(전혀 해결책 아님)

%ruby script/destroy scaffold Movie

웹질을 해보니 딴 넘들도 많이 고생하고 있다...
루비....이거 잘 되면 편한거긴 한데..
과대포장된 감이 없지않다..


아직 안정화가 안된 모양이다.



루비 관련 읽어보면 분명 도움되는 사이트들

애자일 어쩌구 하는 루비책 보는 사람은 꼭 방문할것.
http://winchild.egloos.com/6778585

VLC UDP 스트리밍

UDP로 수신한 데이터를 VLC를 통해 Play되게 하기..

1. VLC 의 미디어->네트워크 스트림열기->UDP 선택
주소는 VLC 플레이어가 설치된 PC의 주소임(스트리밍 서버의 주소가 아님)
포트는 UDP 데이터를 수신하고자 하는 포트를 기재

시작~ 하고 기다림.


2. 스트리밍 서버가 될 녀석이 아래와 같은 코드로 전송토록 함.

#include
#include
#include

#include
#include
#include

main()
{
char ch[1025];
FILE *fp;
int len;
int sockfd;
int ret;

struct sockaddr_in servaddr;

fp=fopen("media.avi","r");
if(!fp) exit(0);

memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(1234);
inet_pton(AF_INET, "아이피 ㅋㅋ", &servaddr.sin_addr);

sockfd=socket(AF_INET, SOCK_DGRAM, 0);

while(!feof(fp))
{
len=fread(ch, 1, 1024, fp);
ret=sendto(sockfd, ch, len, 0, &servaddr, sizeof(servaddr));
printf("%d:sending %d byte\n", ret, len);
usleep(1000*10);
}
fclose(fp);

}


3. 결과

- 화면에서 플레이가 이뤄지나, UDP 로 데이터가 전달되고 있는 동안은 말소리 엄청 빠름.
- 화면도 정지영상에 가까움.
- 로그를 띄워보니 'header damaged' 라고 나옴.
- 너무 빨라서 그러나 싶어 usleep값을 조절했으나 동일.

4. 그래서..

- MPEG 잘하는 후배녀석(서미)에게 급 도움 요청
- 일반 MPEG파일은 안되고 TS 포맷으로 변환해서 전달해 줘야 한다고 함.

5. 그래서리..

- 다음팟 플레이어로 스트리밍용으로 변환(WMV 변환이라고 해놓고 파일은 AVI로 나옴)
- 암튼, 변환해서리 재시도

6. 그랬더니..

- 안됨. 아예 화면 뜨지도 않음.
- 로그를 보니, "avi demux error: avi module discarded (invalied file)" 이라고 함.

7. 그래가지구서리..

- 파일 변환이 잘못된듯 싶어 파일 변환 다른 툴로 다시 시도..하려다가...
- 그냥 DVD의 VOB 파일을 냅다 열어서 시도..

8. 그랬더니..

- 플레이 되고 음성도 잘 나옴...
- 다만, 패킷을 받는 도중에는 화면 딕딕딕 멈추고 점프하고 음성이 쪼오끔 빨리 진행되는 경향이 아직 있음.
- 정리하면, 플레이는 가능하나 서비스했다간 욕얻어먹기 십상...

9. 결론

- 좀더 알아보자.

10. 그래도 한번더....

- 한번에 보내는 UDP의 크기를 10배(10240)로 올렸더니... 일단 패킷은 잘 간다...
- 근데, 화면이 훅 날라간다. 즉, 네트워크 전송속도에 맞춰 플레이된다는 말..
- 아마 VLC의 버퍼링(캐싱) 설정에 따라서 그런것인듯...

2010년 4월 15일 목요일

Hello Ruby !!

아무 디렉토리에서

% rails -d demo

라고 하면.. 현재 디렉토리에 demo라는 디렉토리가 생김. 그 안엔 여러 샘플이나 기본 템플릿들이들어 있음.

% ruby script/server
라고 하면 웹서버가 뜸.

그리고 웹브라우저로 http://localhost:3000 하면 해당 페이지에 들어가긴 하는데 뭔가를 누르면 에러가 뜰꺼임.

db 설정 문제임. (http://ethanjoh.tistory.com/763)

% rails -d mysql demo
라고 해줌 됨. 자세한 이유는 위 링크 참조.


아... 헬로우 찍어보기로 했지..

% ruby script/generate controller say

하면 기본 템플릿들이 주루룩 생김. 의미는 say라는 controller를 맹글어라~는 뜻임.

app/controller/say_controller.rb 파일 생김. 요거 에디팅
그 안에
def hello
end
넣어줌.. 요 hello가 나중에 view를 위한 rhtml의 이름이 되야함..(아래 참조)

app/view/hello.rhtml 파일 만들어서 에디팅..(UI 만드는 거임)

그 다음은 책 참조..


@@@ rails는 그냥 하라는대로 따라오면 된다는 말에서 만든 말이라고 함.

2010년 4월 14일 수요일

Ruby & Ruby on Rails 설치

여기저기 기웃대다가 루비가 꽤 괜찮다는 얘기를 들어 며칠 시간내어서 공부해 봄.
아직 우리나라에서는 그닥 유명하지 않음.
외국(미국, 일본)에서 좀 유명한듯 하고... 루비 온 레일즈의 경우 꽤 유용할 듯 해 보임.

단, 맥에 설치하려는데.... 참 설치하기 어렵네... 이틀을 닭샷을 날려서야 겨우 설치함.
내 맥북이 쓰레기가 된 듯 함. 설치 코드들이 엮이고 섞여서리..

암튼, 설치에 관련되어서는 아래의 링크대로 하는게 제일 편함.
특히 mysql 설치할때... 꼭 소스코드 받아서 컴팔해 쓸것.. DMG 는 절대 안됨.

http://hivelogic.com/articles/ruby-rails-leopard
http://www.icoretech.org/2009/08/install-mysql-and-mysql-ruby-gem-on-snow-leopard-64-bit/
http://ethanjoh.tistory.com/763



루비온 레일즈 공식 사이트 : http://rubyonrails.org/download