본문 바로가기

프로그래밍153

node.js, express 파일 업로드 처리하기 보통 node.js 로 파일 업로드를 처리할 때, bodyParser 를 많이 사용합니다. 하지만, 아래 포스팅을 읽어보면 별 생각없이 사용한 이 방법에 문제가 있다는 것을 알 수 있습니다. http://andrewkelley.me/post/do-not-use-bodyparser-with-express-js.html 실제~ 서버 임시 디렉토리에 모든 POST 요청에 대하여 쓰레기 파일들이 생성되어있음을 확인할 수 있습니다. 하여, 기존 소스를 변경해보았습니다. 이전app.use(express.bodyParser()); 이후app.use(express.json());app.use(express.urlencoded()); 그리고, multipart 처리를 위하여 formidable 을 사용하였습니다. npm.. 2014. 6. 30.
Ghost 블로그에 댓글 기능을 추가하기 node.js 를 사용한 블로그 Ghost 를 설치(2014/05/01 - [프로그래밍/서버관리] - CentOS, node.js - Ghost 설치하기)한 후, disqus 의 댓글 기능을 추가해보았습니다. http://disqus.com 초기화면에서 "Add Disqus to Your Site" 버튼을 클릭합니다. 아직 가입을 하지 않은 상태라 회원 가입을 하였습니다. 중간에 가입 확인을 위한 이메일이 전송됩니다. 인증을 위해 수신받은 메일의 링크를 클릭합니다. 다시 disqus 홈페이지로 돌아와서 댓글을 사용할 사이트의 정보를 입력합니다. 카테고리의 경우 애매하면 Auto 를 선택하면 됩니다. 등록이 끝나면 플랫폼을 선택하게 되는데... 댓글을 달 홈페이지 혹은 블로그의 종류를 선택합니다. Ghos.. 2014. 5. 16.
FPC 로 OS 커널 만들기... - 3 - 다른분들처럼 저 또한 세월호 참사로 인해 대부분 작업이 중지된 상황입니다. 지금 시점에서 무언가 집중해서 한다는 것이 많이 힘드네요. 부디 삼가 고인의 명복을 빌며... 일단, 지난 커널 작업에서 조금 개선되거나 수정된 내용이 있어 정리해봅니다. 먼저, GRUB 이랑 연동하는 부분인데... 부팅이 완료된 후의 시스템 상태는 다음과 같습니다. CS : 코드 세그먼트 디스크립터를 가리킴. Base Address 0, Limit 4G - 1 DS, SS, ES, FS, GS : 데이터 세그먼트 디스크립터를 가리킴. Base Address 0, Limit 4 G - 1 A20 : 활성화 됨. Paging : 사용안함. 인터럽트 : 중지. IDT : 등록되지 않음. GDT : 크기 및 위치, 셀렉터의 값이 정해지.. 2014. 4. 30.
A20 게이트 포트 I/O(2014/04/18 - [프로그래밍/OS] - 포트 I/O)에 이어 A20 게이트 또한 인텔 프로세스의 특징입니다. 사실, 지저분한 유산이지요. 인텔의 8086 CPU 핀을 보시면, A0 부터 A19 까지 어드레스(주소) 핀이 존재합니다. 즉, 20비트 주소 체계를 가지고 있다는 얘기입니다. 2진수 11111111111111111111 => 2^20 = 1048576 즉, 1048576 번지까지 주소 지정이 가능하며, 이를 KB 로 환산하면 1024KB 즉 1MB 가 됩니다. 하지만, 다들 아다시피 8086, 8088, 80286 은 16비트 CPU 입니다. 레지스터에 담을 수 있는 것은 16비트이며 이 레지스터를 통하여 주소 접근을 하여야합니다. 4 비트가 모자란 셈이죠. 그래서 나온 개념.. 2014. 4. 20.
포트 I/O 포트 I/O 에 대한 내용이 자세하지 않아 여기저기 자료를 찾아보았습니다. 아래는 시스템 버스(어드레스 버스, 컨트롤 버스, 데이터 버스) 를 나타낸 그림입니다. 보시면 아시겠지만 I/O 어드레스가 별도 존재합니다. 입출력 장치의 컨트롤러는 시스템 버스와 연결되는데 이때 메모리 영역처럼 고유한 주소를 가지게되며 이를 I/O 어드레스라 부릅니다.(메모리 어드레스와 구분해야합니다.) 예를 들어 Port I/O 에서 0x60, 0x64 번지의 경우 키보드와 관련되지만... 메모리(램) 에서 해당 번지는 전혀 다른 공간에 위치하고 있습니다. 이와 같이 분리된 형태를 Port I/O 라고 부르며 인텔 프로세서들이 주로 사용하는 방식입니다. 반면, 메모리의 특정 공간에 I/O 주소를 매핑하여 사용하는 방식(I/O .. 2014. 4. 18.
x86 CPU 메모리맵 참고 http://wiki.osdev.org/Memory_Map_(x86) Low Memory (1MB 미만) 아래의 설명 중 사용할 수 없다는 뜻은 코드를 배치하거나 임의의 데이터를 배치하는 등의 용도로 사용할 수 없다는 뜻입니다. 0x00000000 부터 0x0009FFFF 까지의 640KB 는 Conventional Memory 라고 불립니다. 앞 부분의 0x00000000 부터 0x000003FF 까지의 1 KB 의 영역에는 IVT 가 존재하며, 0x00000400 부터 0x000004FFh 까지의 256 바이트는 BDA 로서 사용할 수 없습니다.(리얼모드에서 IRQ가 활성화된 경우, BDA 영역의 일부 값들을 overwrite 하기 때문. 하지만 보호 모드로 넘어간 후~ IVT 와 BDA 영역을.. 2014. 4. 17.
FPC 오브젝트(object) 형 최초 객체지향 프로그래밍(OOP)이 소개되었을 때, 터보 파스칼(TP)은 record 를 확장한 object 형을 사용하였습니다. 현재 델파이의 경우 class 를 주로 사용하지만 여전히 object 형을 지원하고 있으며 이는 프리 파스칼(FPC) 도 마찬가지입니다. 다음은 레퍼런스 문서에 있는 내용을 제 개인적 기준으로 요약 정리해 보았습니다.^^ 매뉴얼에서는 멤버 변수를 field 로 지칭하고 있습니다. 1. Declaration type TObj = object private Caption: ShortString; public constructor Init; destructor done; procedure SetCaption(AValue: String); function GetCaption: Str.. 2014. 4. 17.
FPC 로 OS 커널 만들기... - 2 - 오늘 포스팅은 작업 일지에 가까울 거 같습니다. 아무래도 제게 주어진 시간이 많지 않은 관계로 최대한 빨리 작업을 진행하고 있거든요. 말 그대로 닥치는대로 하고있습니다. ^^ 정석대로라면 부트로더를 통해 보호 모드로 진입하고 이후, 인터럽트, 디바이스, 태스크 스위칭, 페이징 등 거의 정해진 절차처럼 커널 개발을 하게 됩니다. 수많은 OS 개발자들이 해왔던 일이고 저도 그 중 한명이 되는 겁니다. 하지만 기왕지사 조금 무리를 하며 일을 진행하는 것인만큼 뭔가 의미가 있어야하지 않을까란 생각이 들었습니다. 즉, 이 일을 해야하는 이유 혹은 가치를 정할 필요가 생겼습니다.(코딩을 하며 멀티 태스킹으로 고민했습니다. ㅋㅋ) 유산의 발굴 2년전 파스칼과 관련한 글을 포스팅한 적이 있습니다. 2012/09/07 .. 2014. 4. 11.
FPC 2.6 지원 CPU 및 OS user.pdf 문서 앞부분 1.2 About the compiler 의 내용입니다. 자꾸 찾아보게 되서... ^^ CPUIntel i386 및 i486, 펜티엄 계열과 상위 버전AMD64/x86_64PowerPCPowerPC64SPARCARMm68k OSDOSLINUXAMIGA (0.99.5 버전만)WINDOWSMac OS XOS/2FREEBSDBEOSSOLARISNETBSDNETWAREOPENBSDMorphOSSymbian 다음은 rtl 소스 디렉토리의 서브 디렉토리 입니다. 정말 다양합니다.ㅎㅎ 일단 당분간 목표는 여기에 개인적으로 작업하고있는 자작 OS 를 추가하는 겁니다. FPC 아니었다면, 컴파일러까지 만들겠다고 생난리를 쳤을텐데 그나마 다행이네요. 아직은 아이디어 단계이긴하지만 자바의 조상이.. 2014. 4. 10.
FPC 로 OS 커널 만들기... - 1 - 예전부터 파스칼 OS 제작을 꿈꿔오고 있었는데요. 현실적인 제약 때문에 그냥 은퇴하면 해야겠거니...하고 생각했습니다. 그러다 최근 시간적 여유가 생겨 미뤘던 작업을 하나 둘 해보고 있습니다.(얼마나 갈런지요? ㅠㅠ 먹고 살아야하니...) 일단, Intel 계열 CPU 의 경우~ 처음 부팅시 리얼 모드에서 동작하다 보호 모드로 전환하는 과정을 거쳐야하는데... 리얼 모드는 16비트 기계어로 동작합니다. 따라서 부팅의 시작을 담당하는 부트로더의 경우, 16비트 기계어 코드가 필요한 것이죠. 약간의 결벽증이 있던 저는 2006년경 TP(Turbo Pascal)로 관련 작업을 해보았습니다. 2012/04/09 - [프로그래밍/OS] - 파스칼로 만든 부트로더... - 1 - 당시에는 TP 와 델파이로만 OS .. 2014. 4. 9.
CodeTyphon 으로 FPC 크로스 컴파일러 생성하기... 수동으로 크로스 컴파일러를 생성하는 방법은 2014/04/04 - [프로그래밍/OS] - FPC 64비트(x86_64) 리눅스에서 32비트(i386) 크로스 컴파일러 생성하기... 를 참고해 주세요. 먼저, CodeTyphon 을 다운로드합니다. http://www.pilotlogic.com/sitejoom/index.php/downloads/finish/30-codetyphon/123-codetyphonins-zip 윈도우, 리눅스 모두 상기 파일을 다운로드하면 됩니다. 아울러 Vista 이후 윈도우의 경우 관리자 권한을 사용하여 설치 과정을 진행하면 되겠습니다. 다운로드한 압축파일을 적당한 곳에 해제한 후, install.bat 를 실행합니다. 아참 아래 스샷에서처럼 CodeTyphon 이라는 디렉토.. 2014. 4. 8.
FPC 64비트(x86_64) 리눅스에서 32비트(i386) 크로스 컴파일러 생성하기... CentOS 에서 라자루스를 설치하였다면, /usr/share/fpcsrc/2.6.2 와 같은 디렉토리에 fpc 의 소스가 설치되어있을 겁니다. 해당 디렉토리 아래 compile 디렉토리로 이동한 후, 아래의 명령어를 입력합니다. cd /usr/share/fpcsrc/2.6.2/compiler make cycle CPU_TARGET="i386" 어차피 리눅스에서 실행하고 32비트 리눅스 컴파일러이기 때문에 OS_TARGET 은 생략하였습니다. 끝에 오류 메시지가 나오는데, compile 디렉토리에 ppcross386 이 무사히 생성되어있길래 그냥 무시하였습니다.(ㅡㅡㅋ) 심볼링 링크를 생성해줍니다. ln -s /usr/share/fpcsrc/2.6.2/compiler/ppcross386 /usr/bin .. 2014. 4. 4.
GRUB Legacy 를 이용한 부팅가능한 CD 이미지 만들기 GRUB 2 와 달리 기존의 GRUB 1 의 경우 GRUB Legacy 로 칭합니다. 먼저, CentOS 에서 관련 패키지들을 설치합니다. 저 같은 경우에는 그냥 설치되어있더군요. yum install genisoimage grub 작업 디렉토리(여기서는 isofiles)를 생성한 후, boot/grub 디렉토리도 생성합니다. mkdir -p isofiles/boot/grub 생성한 grub 디렉토리에 기설치된 grub 패키지의 El Torito 파일들을 복사합니다. 참고로 El Torito 는 CD-ROM 부팅 관련 표준으로 이해하면 되겠습니다.(64비트 CentOS 인 관계로 경로가 x86_64-redhat 이 붙습니다.) cp /usr/share/grub/x86_64-redhat/stage2_elt.. 2014. 4. 3.
라자루스(Lazarus) 한글 주석 입력하기...(뻘팁) 아시다시피 현재 라자루스 IDE 상에서 한글 입력이 직접적으로 되지 않습니다. 특히 주석을 작성할 때, 여러모로 곤란한데요. 이를 극복할 수 있는 방법으로 뭐가 있을까요? 어차피 코딩의 95%는 영문이니까... 기왕지사 100% 로 만들어버린다. 아울러 영문작문법 서적을 구입한다.소스가 제공되니까 라자루스 IDE 를 아주 손쉽게 수정해 버린다.(설마 저한테 이런 걸 기대한 건 아니죠? ㅡㅡa)주석은 필요없다. 코드가 이야기를 한다.다른 에디터에서 한글 주석을 작성한 후 복사하고 이를 붙여넣는다. 저는 인간적인 사람이라 4 의 방식을 선호하는 편인데요. 저처럼 4 에 해당하는 분들을 위한 꼼수입니다. 그냥... Ctrl + Shift + T 를 뙇~ 하고 누르십시요. 네네~ ToDo 입력창이 뜹니다. 후후.. 2014. 3. 24.
라자루스(Lazarus) 자동 완성 기능, 대입 연산자(:=) 앞 뒤 공백 삽입하기.. 라자루스 사용 관련 팁을 짧더라도 그때 그때 포스팅하도록 하겠습니다. ^^ 라자루스에서 코딩을 하다보면 IDE 의 자동 완성 기능이 기존 사용하던 습관과 조금 맞지 않을 때가 있습니다. 물론 사람들 마다 차이가 있을 텐데요. 저는 대입 연산자가 항상 거슬리더군요. 앞 뒤를 꼭 띄어 써야 뭔가 불안(?)하지 않다고 할까요? 다행히 라자루스에는 관련 세부 옵션들이 존재합니다. 먼저, Tools > Options... 메뉴를 실행합니다. 그리고 Codetools 의 Space 항목으로 이동합니다. 그리고 아래 이미지처럼 Symobol 항목을 체크하고 적용합니다. Preview 에 해당 옵션 반영시 나타나는 코드가 샘플로 나오니 꼭 확인하시기 바랍니다. 사실 Codetools 의 옵션값들만 잘 통일 시켜도 프로.. 2014. 3. 24.