PHP 모듈 작성 시 다음과 같은 오류 메세지가 나오는 경우가 있다.

error: 'PHP_FE_END' undeclared here (not in a function)


1. 

내 상황은 서버가 centos6.3 으로 php 는 rpm으로 설치되어있다.


php-devel 패키지도 설치해놨지만 ext_skel 은 없었고 구글링하다보니 src.rpm 을 던져주는 링크만 나오더라.

https://www.centos.org/forums/viewtopic.php?t=28478


2.

굳이 src.rpm으로 작업하고 싶은 생각은 없어 그냥 php-5.3.3 의 소스를 찾았지만 나오질 않는다.

그냥 php-5.3.28 을 받아 타르볼을 풀고

ext로 들어가 알려진대로


./ext_skel --extname=test_mod


cd test_mod


vi config.m4

10라인, PHP_ARG_WITH(test_mod, for test_mod support,

12라인, [  --with-test_mod             Include test_mod support])

에서 dnl 주석 해제


phpize

./configure

make


3.

뭐 이런 수순으로 스켈레톤을 빌드 해보는데 정의되지 않았다고 오류가 발생한다.

libtool: compile:  cc -I. -I/ ~~~~ :43: error: 'PHP_FE_END' undeclared here (not in a function)

make: *** [test_mod.lo] Error 1


4.

구글링해보니 PHP_FE_END는 php-5.3.10 부터 등장했단다. https://github.com/sqmk/pecl-jsmin/issues/23

이하버전에 호환되는 모듈을 뒤져보니 

{NULL, NULL, NULL}

다행히도 PHP_FE_END 대신 쓰이는 놈이 있다.

덜 게으르면 버전 확인해서 #if 하겠지만 한두개 뒤져봤을 때 PHP 버전 정의가 잘 안뵌다.

여러버전에서 자주 컴파일 할일이 있을 때 까진 그냥 이리 써야겠다.

test_mod.c :

const zend_function_entry test_mod_functions[] = {

PHP_FE(confirm_test_mod_compiled, NULL) /* For testing, remove later. */

//PHP_FE_END /* Must be the last line in test_mod_functions[] */ // PHP 5.3.10 ~

{NULL, NULL, NULL} /* Must be the last line in test_mod_functions[] */ // PHP 5.3.10 under

};


Posted by freezn

IDC에 넣기전에 초기 인스톨에서만 필요하니 iLO4 트라이얼라이센스를 받아 설치했다.


몇몇작업을 끝내고 다음날 나머지 작업을 하려하니 트라이얼라이센스가 증발해있고 다시 입력하면 이미 사용했다고 나온다.


구글링 결과 이유는 NTP 동기화로 트라이얼라이센스 설치 후 시간이 뒤늦게 갱신된 경우 트라이얼 라이센스 사용기간인 60일 이상이 점프되어 그럴 수 있다는 글이 몇몇 보인다.


iLO를 리셋하면 된다는 말이 있지만 효과가 없다.


트라이얼 같은 기간한정라이센스 설치 시 iLO시간도 확인이 필요해보인다.

Posted by freezn

먼저 간단한 z410 후기를 쓰면


1600*900 이상 해상도,

키보드 배열이 나쁘지 않고 (page up, page down, home, end 증발 혹은 fn 키를 눌러야 하는 놈들 패스),

i5 이상이지만 저전력 모델은 패스,

후 가격 오름차순 정렬 하니 Z410 이 나왔습니다.


직전까지 쓰던 Thinkpad x201i 나 울트라나브 키보드로 너무 익숙해진 빨콩과 키감, 키배열을 너무 원했지만 Thinkpad 후속 모델들은 키보드 배열이 너무 끔찍해졌네요..

e440도 저렴하고 마음에 들지만 안타깝게도 키배열이 너무 싫은 배열이라..

Z410은 내장 그래픽으로 HD4600, 추가 그래픽으로 GT740m 이 달려있다지만 64bit라 그리 큰 성능을 기대하긴 어렵다고 합니다.

디아블로3 확장팩을 돌려보니 해상도를 1366으로 낮추고 조금 낮추니 그럭저럭 돌아갑니다.

액정은 저가 노트북에 들어가는 TN이 다 그렇듯 그저그런 시야각을 보여줍니다.

성능도 괜찮고 소음도 괜찮고

뭐 그럭저럭 저렴하고 마음에 드는 노트북을 산 것 같네요.


Thinkpad edge E440이랑은 거의 사양이 같은 모델인데

E440이랑 비교해서 장점은

- Home, End, Page Up, Page Down 버튼이 오른쪽에 모두 따로 있다는 점 (기존 울트라나브형태였으면 무조금 e440을 샀을거예요ㅠㅠ)

- 우측 Shift키가 작아 쌍욕 방지 (는 농담이고 적응할 필요도 없이 잘 타이핑되네요 ㅎㅎ)

- 흰색에 매끈한 디자인으로 때끼는 게 눈에 띄어서 청소를 열심히 하게 만들어줍니다. (사실 때끼는 재질은 아녜요 ㅎㅎ)

- Thinkpad에만 제공되는 원링크독이 제공되지 않아 원링크독 뽐뿌 방지

- Thinkpad에만 제공되는 하드디스크 및 메모리의 쉬운 교체 구조가 제공되지 않아 하드디스크 및 메모리 뽐뿌 방지

...아...... 증말 새 tp키보드 레이아웃에서 home end 를 fn이랑 같이 누르게 만든 인간은 누구일까요 -_-;


상판 로고 l자의 얼룩 같은건 대인배니까 그냥 넘어갑니다 ㅎㅎㅎㅎㅎ


---


그런데 문제는 디스크.

뭔가 반응이 이상하고 느립니다.

미세하게 끼릭끼릭하는 소리도 나는 것 같았는데 이건 디스크는 아니고 온도가 낮아져 팬이 멈췄을 때 나는 소리였나보네요.

hdtune 정보를 보면 경고도 좀 들어와있습니다. (crc)


내장 디스크가 악명 높은 ST1000LM024.. 삼성 스핀포인트->시게이트로 인수 후 이상하게 굴러가는 그놈입니다.

( 관련 링크 : http://blog.naver.com/yeongjoon890?Redirect=Log&logNo=70157261362 )


아아.. 절대 이 노트북에서도 SSD가 쓰고 싶어서 그런건 아니구요.

어쨌든 ...

usb 2.0 외장하드케이스에 끼우고 복사했더니 무지막지 오래 걸리네요.


아래쪽에 첨부한 혹성 베지터님 글을 먼저 봤으면 좋았겠지만 아쉽게도 하드웨어 메뉴얼만 보고 도전했습니다.

thinkpad 에서 배웠는지 메뉴얼이 잘되어있...(다고 생각했는데....orz) 거든요.


웬만하면 서비스센터로 가시길 권합니다. 분해에 함정이 몇가지 있는데

1. 키보드 빼다가 자칫하면 날아가는 키캡을 볼 수 있어요 ㅜㅜ

2. 베이스커버 뜯기가 어려워요..ㅜㅜ

3. 배터리팩이 내장인데 베이스커버 뜯기전까진 배터리팩을 뺄 수 없어요.. 분해하는 내내 불안해요..


---


46p 에 1050 Hard Disk drive 부분을 보면

먼저

1010 Keyboard (p33)

1020 Optical drive (p37)

1030 Base cover (p39)

1040 Battery Pack (p44)

를 분리하라고 나오는데요. (헐............. X201i 는 디스크만 딱 뺄 수 있었는데............)


준비물은 작은 드라이버, 클립, 안쓰는 카드, 그리고 이왕이면 아이폰 등 분해도구(주걱) 입니다.


1. 키보드 분해

키보드 분해는 아랫면(베이스커버) 나사 3개 를 빼고 나사구멍을 찌르라고 되어있는데,

이때 클립을 펴서 사용하면 됩니다.

푹 찌르면 키보드가 밀려서 빠지게 되는데 절대 중앙 나사구멍은 찌르지마세요. 

(사진은 혹성베지터님 글에서 발췌)


아래쪽 구멍을 쑤시게 되면 이런 상황이 일어날 수 있습니다.

K자 인데요. 왼쪽 위 구멍 보이시나요? 저 자리가 아래쪽 구멍이라 키캡이 가출해버릴 수 있습니다. 끼우느라 생고생.

플랫 케이블은 고정해주는 놈(검은색)을 제껴주면 바로 빠집니다.


2. ODD 분해

간단합니다.

37p 를 보시면 odd를 고정하는 나사는 하나구요.

나사를 빼고 드라이버로 나사 뺀 자리를 살짝 밀고 바깥에서 당기면 쑥 빠집니다.

멀티부스트나 웨이트세이버를 장착하려면 여기까지만 하면 되지요.



3. 베이스 커버(뒷면 커버) 분해

각종 분해 도구들을 동원할 차례입니다.

솔직히 서비스센터에 가시길 권장합니다.


3-1. 나사 빼기야 뭐 쉽죠.

그림 왼쪽에서 2번째.. 쿨러에 있는 나사는 분해 확인용 스티커를 제거해야 뺄 수 있습니다. 스티커를 제거하면 보증이 어떻게 되는지 모르겠네요.


3-2. 뒷면 나사도 쉽습니다.

발받침은 양면테이프로 붙어있는게 아니고 끼워있는거라 1자 드라이버 같은걸로 밀면서 들어올리면 빠지고, 다시 끼우기도 좋습니다.

3-3. 그런데 이거. 베이스커버를 들어올리라는데..

나사를 다 빼도 베이스커버는 빈틈없이 끼워져있습니다.

분해 좀 해보신 분은 능숙하고 손상없이 분해하실테지만 저같은 곰손은 어쩔줄을 모릅니다.

손톱.. 이왕이면 분해도구(주걱)로 벌리고 안쓰는 카드를 끼워넣어 돌리면서 벌려주면 두둑두둑 하면서 빠집니다.

하판과 상판을 고정해주는 약해보이는 플라스틱걸쇠들이 많아요.

평면인 놈도 아니고 군데군데 모양이 들어가있고 얇아서 정말 빼기 무섭습니다.

분해 초보라 여기서는 사진 찍을 생각도 못했어요. 


4. 배터리팩 분리

어렵지 않아요.

커넥터 빼고 나사 2개 빼면 되요.

배터리가 끼워져있다보니 분해하다가 전원을 켜더라도 당황하지 말고 도로 꺼주세요 ㄷㄷㄷㄷ


5. 대망의 하드 디스크 드라이브

어려울건 없는데 스피커 망가뜨리지 않게 조심하세요.


분해 끝..!!

분해할 때 나사들은 순서대로 분류해서 두면 조립은 분해의 역순이니 도움이 되죠!! 

램은 하이닉스가 꽂혀있네요.



X110 256GB인데 용량이 차있어서 그런지 성능은 그냥저냥 나왔습니다.


..램을 더 달고 싶은데 미리 사놓고 분해할 걸 그랬나봐요. orz



관련 자료 :

혹성 베지터 님 리뷰 및 분해기 :

http://bbs.danawa.com/view.php?board=28&site=5&seq=2573715&snb=comm


레노버  z410 하드웨어관리 메뉴얼

http://download.lenovo.com/consumer/mobiles_pub/lenovo_z410z510z510touch_hmm.pdf

링크 끊길 까봐 첨부 :

lenovo_z410z510z510touch_hmm.7z.001

lenovo_z410z510z510touch_hmm.7z.002


Posted by freezn

환경

CentOS 6.x, Apache, PHP

MATLAB 2011a 로 컴파일된 바이너리, MCR 설치

참고사항

- x64 빌드는 당연히 x86 에서 실행 불가

- 실행 방법은 단순히 exec()

- 당연히 실행 디렉토리와 파일에 실행권한(execute permission) 추가

- 실행디렉토리에는 쓰기권한(write permission) 필요

- mcc build option에 -C 사용 (예: $MATLAB/bin/mcc -m -C -R '-nojvm,-nodisplay' ./mymatlabcode.m)
-- 안하면 다음 에러를 아파치 로그에서 볼 수 있음 : Could not access the MCR component cache.

- 그러고도 보면 안된다. 이유는 아파치 로그 보면 락파일 생성 실패

Could not access preferences directory: '/.matlab/mcr_v715/wave_spec_59B08FCA175BF328CA63A32591F61785'. System error: 'Tried to obtain a lock on a non-existent directory: /.matlab/mcr_v715/.deploy_lock.0'

-- centos 에서 rpm으로 설치한 apache 는 웹에서 접속 시 home directory가 / (root) 로 되어있나보다. (passwd 파일에 있는 경로와 다르다.)

-- 컴파일시 같이 생성된 run_mymatlabcode.sh 파일에 홈경로변수($HOME)를 쓰기 가능한 경로로 지정해버렸다.

-- $HOME=write enabled path

-- .ctf 파일 빼먹으면 안된다


웹에서 실행해보면 지정한 홈경로에 mymablabcode_mcr 디렉토리가 생성(복사?)되고 실행되는걸 볼 수 있다. -_-;;;;;








Posted by freezn

상황 : centos + mono + c# + postgresql
(postgresql 은 utf-8 로 db 및 테이블 생성했음)


euc-kr(cp949 ?) 데이터를 받을 일이 있어서 출력했는데 한글 부분 깨짐.
아마도 euc-kr 데이터라 유니코드 (혹은 utf-8)로 변환이 필요할 것으로 생각됨. 

그래서 코드변환하게 C# 프로그램에서 조금 수정

기존 :

System.Text.Encoding.Default.GetString(bytes);


변경 :

System.Text.Encoding.GetEncoding(51949).GetString(bytes); // 51949 대신 "euc-kr" 을 써도 되는 듯



그랬더니 오류 발생

Unhandled Exception: System.NotSupportedException: CodePage 51949 not supported


뭥미? 싶어서 구글링해보니 우분투 포럼에 있다. (http://ubuntuforums.org/showthread.php?t=831409)
대충 정리하면 mono용 i18n  깔아라~

음... 난 centos 니까
yum search mono
쭉 훑어보니
mono-locale-extras.i386 : Extra locale information for Mono
요놈이구나 !
yum install mono-locale-extras

오류 안남.

끝.

이면 좋으련만 그래도 db에 저장하는 한글은 깨져있음.
접속하는데 사용한 라이브러리는 mono용 npgsql 인데, 혹시 커넥션 파라미터(dsn)에 인코딩 지정하는 것 있나??

찾아보니 있다. 기본이 유니코드일 줄 알았는데 아니다.
ASCII가 기본이란다. UTF-8 쓰는데 지장있으면 UNICODE 지정하란다. (http://www.mono-project.com/PostgreSQL)

C# 코드의 npgsql 커넥션파라미터에 다음을 추가

Encoding=UNICODE


깔꼼하게 해결 ~ 쿼리 툴 따로 쓰기 귀찮아서 깔아놓은 phpPgAdmin 에도 한글이 잘 나온다.
 


참고한 페이지 :

http://funnism.com/11


http://msdn.microsoft.com/ko-kr/library/system.text.encoding.aspx
Posted by freezn
- 상황
1. HP DL120G7 모델을 납품용으로 구매
2. 250GB SATA * 2 을 레이드용으로 같이 구매
3. centos 5.X 를 설치하기로 마음 먹음

- 1차 시도 및 문제 발생
0. 공식 미러들에는 5.X 는 현재(2011-10-06) 최신 버전인 5.7만 제공되어 별 생각 없이 5.7 x86_64 netinstall 버전을 CD로 구움
1. F9 로 CMOS 들어가서 Advanced ~~ 에서 SATA RAID Controller ? 를 RAID 로 설정
2. 패키지에 제공된 Smart Setup CD로 250GB *2 를 RAID 1 설정 (부팅 중 F8로 해도 똑같음)

아나콘다에서 레이드를 인식 못하고 2개로 떠버림 ...?!?!?!? 

 황당해서 찾아보니 HP DL120G7 에 내장된 RAID 컨트롤러(B110i)는 이름만 컨트롤러(fake controller?)고 사실상 소프트웨어 레이드라고 함. 충돌도 많음(su*ks?) !?

- 2차 시도 및 다시 문제 발생
1. F9 로 CMOS 들어가서 Advanced ~~ 에서 SATA RAID Controller ? 를 RAID 로 설정
2. 패키지에 제공된 Smart Setup CD로 250GB *2 를 RAID 1 설정 (부팅 중 F8로 해도 똑같음)
3. CD 에 들어있던 hpahcisr-1.2.6-7.rhel5.x86_64.dd.gz 파일을 압출풀어서 usb에 넣고 다시 시도
3. 아나콘다 호출 전에  [enter]로 호출하지 않고 linux dd 로 호출해서 드라이버 설정창 띄움
4. /dev/sda4 식으로 잡히는데 여기서 저 파일(hpahcisr-1.2.6-7.rhel5.x86_64.dd)을 선택 (드라이버 로딩상황이 어째 좀 멜랑꼴리함)
5. 똑같음

- 3차 시도 및 다시 문제 발생
1. RAID 세팅해놓고 인스톨전에 전원꺼서 두번째 하드 빼고 os인스톨하고 hp 툴들 설치 후 다시 하드 꽂는 신공을 보고 따라해봄
2. hpahcisr-1.2.6-7.rhel5.x86_64.rpm 설치 안됨. 지원하지 않는 커널 버전이라고.
3. HP 홈페이지 뒤져서 5.7 에 해당하는 패치 버전(1.2.6-9) 찾아내서 설치 후 리부팅 (슬슬 원인을 알았지만 인정할 수 없었음)
4. 이상태까지에서 혹시 하고 확인해보니 hpacucli 에서 아예 컨트롤러 없다고 나옴
5. 부팅 중 커널패닉

 - 성공
1. hpahcisr-1.2.6-7.rhel5.x86_64.rpm 웹 설명 읽어보니 RHEL 5 updates 6 까지. (그럼 CD에 써놓던가...)
2. http://vault.centos.org 가서 centos 5.5 이미지 받아다 CD 구움
3. usb 에 넣어놓은  hpahcisr-1.2.6-7.rhel5.x86_64.dd 파일 이용해서 아나콘다 호출할 때 linux dd 해서 드라이버 로딩 (잘됨)
4. 굳이 하드 안빼고도 os 설치과정 다 정상
5. os 설치 후  부팅하고나서 hpahcisr-1.2.6-7.rhel5.x86_64.rpm 설치, hpacucli 도 설치 (둘다 smart setup cd에 들어있음. compaq/csp/linux에 rpm들, punchout에 dd 파일)

hpacucli 로 정상여부 확인
hpacucli ctrl slot=0 show config detail 
hpacucli ctrl slot=0 show status

ok.

커널패치 필요한건지 확인코자 다시해볼 엄두가 안들어서
그냥 yum 업데이트 꺼버림. -_-;;

-----------------

. HP 버럭!!!
. 홈페이지 검색엔진 안고칠래? !?!?!
. CD에 RHEL 몇용인지 안써놓냐!? (그냥 linux support)
. RHEL 5 update 7 대응 하는 hpahcisr-1.2.6-9.rhel5.x86_64.rpm 는  왜 커널패치만 있고 드라이버(dd)는 따로 없는거냐 대체..........................
Posted by freezn

# 커멘드 포트를 21말고 다른거 쓰려할 경우
listen_port=9021
 
# Passive Mode 활성화
pasv_enable=YES

# 가변 포트 범위.. 내맘..
pasv_min_port=40000
pasv_max_port=40010 

pasv_address= 서버IP주소

#유동아이피일때 이 옵션을 추가하면 도메인으로 대신 가능
pasv_addr_resolve=yes

 


Posted by freezn
웹서버에 올려둔 파일이 아이폰에서는 스트리밍되는데,
안드로이드에서는 안되는 경우

헤더의 위치가 문제라고 합니다.

많이 사용되는 인코더들이 파일정보(..헤더라며..왜 끝에..)를 끝에 붙여주는데 안드로이드는 이걸 인식하지 못한다고하네요.



mp4box 라는 툴로 mp4box -hint xxx.mp4 식으로 한번 헤더를 세팅해주니 해결됩니다..
Posted by freezn
이럴수가.

어째서 TouchCalibrate()를 호출해도 이 망할 프로그램이 실행되지 않으면서 바로 false를 리턴하는지에 대하여 고민 했는데

내가 작성한 내용은 SD로부터 캘값을 가져오는데 실패한다면 이 함수를 호출하는 것 이었고

당연하게도 캘값을 적용하기 위한 시점이니 터치 드라이버의 initial시점 전 이었다.

맙소사, 이걸 3일간 고민했단 말인가.

SD로부터 터치 캘리브레이션 값을 읽어오려 할 때 SD bus를 먼저 로딩시켜놨음에도 터치트라이버 init 단계에서 아직 sd가 인식되지 않은 문제는 터치 드라이버에 sleep 걸어서 대기 시켜놓은 방법으로 해결 ..ㅡㅡ;;

iPhone 에서 작성된 글입니다.
Posted by freezn

Visual Studio 2005에서 DLL을 확인하기 위해 dumpbin을 사용하려 했더니 mspdb80.dll을 찾을 수 없다는 아래와 같은 에러메세지가 나온다.


PATH가 안잡혀서 나는 에러겠지? 싶어서 찾아보니 답이 나왔다.
"C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat"
을 실행해주면 환경변수를 다 잡아준다 (편리해~)



아무거나 잡고 테스트


이거 뭐야.. 무서워..
Posted by freezn