이번 1월에도 진행중인 델파이 초급 개발자 취업과정에 대해, 2월에 진행할 2차 교육에 지원할 수강생을 추가 모집합니다. 물론 2차 교육도 마찬가지로 전액 무료입니다.

이번에는 다음과 같이 수강생의 자격 기준을 더 완화합니다.

1. 지난번 1월 과정에서는 2010년 대학 졸업 예정자만 가능했으나, 2008년 졸업자까지 졸업연도 기준을 더 확대합니다. (2007년 이전 졸업자는 역시 불가합니다)

2. 또한 전산 관련 전공자가 아니더라도, 기본적인 프로그래밍 학습을 했음을 증명할 수 있는 경우 신청이 가능합니다. (수강 승인 전에 서류 심사를 거칩니다)

이와 같이 대상을 확대하는 이유는, 터놓고 말하자면 지원자가 너무 적었기 때문입니다. 물론 공지가 늦었던 점도 있지만, 수강생들에게 직접 물어본 결과 SW개발 업종이 어렵고 힘들다는 인식 때문에 기피하는 경향이 너무나 강했습니다. 예상은 했었지만, 생각보다 더 심각했던 것 같습니다.

이번 교육을 정상적으로 수료하는 수강생은 전원 델파이 개발자로 취업 알선을 하며, 대상 기업은 일정 수준 이상의 우수 기업에 최우선적으로 알선할 것입니다.

지원하실 분들은 이번 금요일까지 이메일 seminar 골뱅이 embarcadero.kr 로 접수하시면 됩니다. 위와 같이 대상자 자격 기준이 완화된 것을 제외하면 다른 내용들은 1차때의 요강과 같습니다. 제출 서류가 있으니 아래 페이지를 읽어주시기 바랍니다.
http://www.devgear.co.kr/impboard/impboard.dll?action=read&db=news&no=23

개발자 인력 소개에 대한 정식 공지도 하지 않았는데도 이미 여러 기업에서 인력 소개 요청이 들어와있는데요. 선착순이 아니기 때문에 미리 신청을 하실 필요가 없습니다. 2월 3주차 월요일에 관련 공지 이메일을 저희 데브기어의 델파이/C++빌더 메일링 리스트를 통해 발송할 예정이라는 점을 미리 알려드립니다.
2010/01/28 15:17 2010/01/28 15:17

trackback :: http://blog.devgear.co.kr/imp/trackback/133

델파이 2005 / C++빌더 6 이하 버전에 대한 업그레이드 할인 종료가 이달 말로 종료됩니다. 다시 말해서, 2월 1일부터는 기존에 델파이 7이나 C++빌더 6 등의 버전을 구입해서 사용해왔다고 하더라도 업그레이드로서 구입할 수 없고, 신규사용자용(New User)를 구입해야 합니다.

이미 메일링 등을 통해서 수차례 공지되었던 내용이고, 원래 지난 12월말까지 기한이었던 것이 한달 연장된 것이구요. 본사에서 더 이상 연장되지 않는다고 못을 박은 상황입니다.

저희는 토요일 근무를 하지 않으므로 내일까지 주문된 분량에 대해서만 적용되므로, 사실상 하루 남은 거구요. 본사의 지침이기 때문에, 2월 이후로 넘어가서 저희 데브기어로 요청해도 저희도 별 수가 없습니다.

또, 지금 업그레이드 구입을 하실 수 있는 분들이 혹 올 하반기에 출시될 델파이나 C++빌더의 다음 버전을 기다리려고 마음먹으신 분이 있다면, 그때 신규 사용자용을 구입하시나 지금 업그레이드에다 1년간 SA를 더해서 구입하나 가격이 같다는 것도 알아두시기 바랍니다.
http://blog.devgear.co.kr/imp/entry/DelphiCBuilder의-다음-버전으로-업그레이드할-계획이라면
(정확하게는, 지금 업그레이드하면서 SA를 더해 구입하는 가격이 5만원 정도 더 저렴합니다.)

이런 판매와 관련된 건으로는 가급적 글을 쓰고 싶지 않습니다만, 이런 행사가 지나가고 나면 뒤늦게 적용해달라고 사정하시는 분들이 너무 많아서... 회사 전체로도 그렇지만 저 개인적으로도 업무에 지장이 많습니다. 각별히 부탁드리건대, 기간이 종료된 건에 대해 제게 따로 요청하지 말아주시기 바랍니다. 괜히 제 입장만 난처할 뿐 저도 방법이 전혀 없답니다.

2010/01/28 13:15 2010/01/28 13:15

trackback :: http://blog.devgear.co.kr/imp/trackback/132

터치 인터페이스로 어떤 기발한 상상을 하고 구현할 수 있는지를, 너무나 기발하고, 또 너무나 적나라하게 보여주는 디지털 기타입니다.
사용자 삽입 이미지
사용자 삽입 이미지
기타 줄 대신에 터치스크린으로 손의 터치를 인식해서 연주할 수 있게 한 건데요.
아직 실제 판매를 시작하지는 않았지만, 미사라는 회사의 홈페이지에 찾아가보면 곧 출시할 건가봅니다. http://www.misadigital.com/

아래 실제 연주 장면을 한번 감상해보시죠.
 

이 미사라는 회사는 이걸 리눅스에다 완전 삽질로 터치를 다 개발해서 올렸네요. 델파이 2010이나 C++빌더 2010을 사용하면 이런 정도는 껌 씹듯이 쉽고 간단하게 개발할 수 있습니다. (물론 음향 관련 개발 지식과 경험은 있어야겠지만요) 사실 이 기타 정도의 크기라면, 넷북 하드웨어 부품을 기타 안에 충분히 다 내장할 수 있고, 거기다 윈도우7 깔고 델파이로 개발한 터치 애플리케이션 올려서 쉽게 구현할 수도 있겠죠.

이 동영상을 가만히 보고 있으면, 여러분도 터치 인터페이스를 활용하는 뭔가 멋진 아이디어가 떠오를 것 같지 않습니까? ^^
2010/01/21 05:11 2010/01/21 05:11
TAG ,

trackback :: http://blog.devgear.co.kr/imp/trackback/131

지난 밤 사이에 Delphi/C++Builder 2009에 대한 핫픽스 3가 올라왔는데...
http://edn.embarcadero.com/article/40331

이건 사실 제가 이미 올렸던 인트라웹 관련 글 두개의 내용과 반복된 내용입니다.
핫픽스 자체는 아래 주소에서 다운로드 받을 수 있습니다.
http://cc.embarcadero.com/item/27563

위 핫픽스를 다운로드 해보시면 아시겠지만, 인트라웹의 한글 문제에 대해 처음 썼던 글(아래 주소)에서 첨부했던 UTF8ContentParser.pas 파일 하나만 달랑 들어있습니다. 이 파일 자체가 핫픽스인 거죠.
http://blog.devgear.co.kr/imp/entry/VCL-for-the-Web에서-한글-깨짐-문제

이 UTF8ContentParser 유닛은 2010 버전에는 dcu, hpp, pas 모두 기본으로 들어있기 때문에 2010에는 필요가 없는 핫픽스이구요. 어쨌든, 이 UTF8ContentParser를 적용하기 위해서는 인트라웹의 최신 업데이트를 설치해야 합니다. 아래 링크의 글을 참고하세요.

http://blog.devgear.co.kr/imp/entry/VCL-for-the-Web-업데이트-한글-문제-해결
2010/01/19 10:38 2010/01/19 10:38

trackback :: http://blog.devgear.co.kr/imp/trackback/130

델파이의 최근 버전에 추가되었지만 개발자들이 잘 모르고 있는 기능들이 꽤 많은데요. 숙련된 델파이 개발자들까지도 델파이 7 이하까지의 문법에만 익숙한 경향이 있습니다. 하지만 구버전 문법으로 구버전처럼 사용한다면 최신 버전을 사용하는 장점이 반감되지 않겠습니까. 그래서, 델파이 개발자들이 잘 모르고 있는 아주 유용한 기능들을 시간이 되는 대로 하나씩 소개해볼까 합니다.

이번에 소개하는 클래스 헬퍼는 델파이 2006에서 추가된 언어 기능으로, 기존의 클래스를 수정하지도 상속하지도 않고 클래스의 기능을 확장할 수 있게 해줍니다. 클래스를 많이 다루는 경력 개발자분들은 이 말만 듣고도 우와~ 할 것 같습니다. 이런 필요가 있는 경우가 꽤 흔하거든요.

클래스 헬퍼 자체도 하나의 클래스입니다. 클래스 헬퍼 클래스(말이 좀 헷갈리네요)에서 선언한 멤버들은 마치 원래의 클래스의 멤버인 것처럼 액세스할 수 있게 됩니다.

실제로도 아주 유용한 아래의 샘플 코드를 살펴봅시다. (delphi.about.com에서 소개된 코드입니다)

interface

uses Classes;

type
  TStringsHelper = class helper for TStrings
  public
    function Add(const V: Variant): Integer; overload;
    function Add(const Args: array of Variant): Integer; overload;
  end;

implementation

uses Variants;

function TStringsHelper.Add(const Args: array of variant): Integer;
var
  tmp: string;
  cnt: Integer;
begin
  tmp := '';
  for cnt := Low(Args) to High(Args) do
    tmp := tmp + VarToStr(Args[cnt]) ;
  result := Add(tmp) ;
end;

function TStringsHelper.Add(const V: Variant): Integer;
begin
  Result := Add([V]) ;
end;

end.

이 클래스 헬퍼를 이용하면, 이제 TStrings (그리고 TStringList 등 상속받은 모든 클래스들)에서 TStrings에 원래 존재하는 기본 Add() 함수 외에 오버로드된 Variant 및 Variant 배열 버전의 Add() 함수들을 호출할 수 있게 됩니다. Variant가 되니까 당연히 정수나 실수 등 대부분의 델파이 기본 타입들을 직접 TStrings 객체의 문자열 아이템으로 추가할 수 있게 됩니다.

with ListBox1.Items do
begin
  Add('delphi.about.com') ;
  Add(2008) ;
  Add(true) ;
  Add(['Only ', 1, true, ' line']) ;
end;

이와 같이, 클래스 헬퍼를 이용하면 기존의 클래스에 기능을 추가할 수 있습니다. 하지만 자신이 직접 만드는 클래스에 클래스 헬퍼를 사용할 필요는 거의 없을 거고, 주로 위의 TStrings처럼 개발자가 수정하기 곤란한 프레임워크/라이브러리의 클래스들에 기능을 추가해서 사용할 때 많이 활용할 수 있습니다.

클래스 헬퍼로 기존 클래스의 private이나 protected 멤버를 액세스할 수는 없고 오직 public/published 멤버만 액세스할 수 있습니다. 따라서 클래스 헬퍼를 쓴다고 해서 기존에 할 수 없었던 작업을 할 수 있게 되는 것은 아닙니다. 하지만 위의 예제에서 보듯이, 단순 코딩 작업을 많이 줄여주고 코드를 더 간략하게 만들 수 있게 됩니다.

2010/01/13 10:39 2010/01/13 10:39

trackback :: http://blog.devgear.co.kr/imp/trackback/128

지난 11월에, 델파이 및 C++빌더의 2010, 2009 버전의 VCL for the Web에서 한글이 깨지는 문제의 긴급 해결책에 대해 안내해드렸었는데요.
http://blog.devgear.co.kr/imp/entry/VCL-for-the-Web에서-한글-깨짐-문제

바로 며칠 전에 VCL for the Web의 벤더인 Atozed에서 이 문제를 해결한 IntraWeb 10.0.21 버전을 내놓았습니다. 아래의 링크에서 다운로드를 받으실 수 있구요.
http://www.atozed.com/Intraweb/Download/Download.EN.aspx

사용자 삽입 이미지

설치 프로그램을 다운받아 설치하려고 하면 라이선스 키를 입력하라고 나오는데요. 아래의 링크를 참고해서, 메일로 요청해야 합니다. (키를 안넣고도 설치를 할 수 있지만, 그러면 평가판 모드로 설치가 됩니다)
http://www.atozed.com/Intraweb/Download/FreeKeyRequest.EN.aspx

요청하는 데에 특별한 조건이 있는 것은 아니고, 사용중인 델파이/C++빌더의 버전, 회사 이름, 개발자 이름 정도만 써서 키를 요청하면 됩니다. 예를 들면 저는 아래와 같이 무성의하게 메일을 보냈습니다.

제목: IntraWeb 10.0.21 Free Key Request
내용:
Hello,

Would you please send me IntraWeb 10.0.21 key?

Version : RAD Studio 2010 Architect
Developer Name: 개발자이름
Company Name: 회사이름


한가지 주의할 점은, 이렇게 요청해서 받은 키는 모든 델파이/C++빌더 버전에 대한 키가 아니라 요청한 한가지 버전만 적용되는 키라는것입니다. 설치 프로그램에서는 델파이/C++빌더의 모든 버전이 선택되어 있는데, 요청했던 버전 하나만 선택해야 키를 입력했을 때 다음으로 넘어갈 수 있습니다.

그냥 이 업데이트를 설치한 상태로는 그대로 한글이 깨지구요. 지난번에 알려드렸던 대로 UTF8ContentParser 유닛을 uses 해줘야합니다. 다만 이번에는 UTF8ContentParser.pas 유닛이 기본으로 포함되어 있어서 별도로 다운받아 복사해줘야 하는 불편은 덜었네요.

이 업데이트를 설치하고 나면 파일 업로드에 필요한 TIWDBFile 컴포넌트를 사용할 수 없습니다. 아마도 벤더인 Atozed에서 아직 파악을 못하고 있는 듯 한데, 레포트하도록 하겠습니다.

2010/01/12 08:11 2010/01/12 08:11

trackback :: http://blog.devgear.co.kr/imp/trackback/126

일반적으로, DLL에 포함된 루틴을 호출하는 방법은 정적 로딩(Static Loading)과 동적 로딩(Dynamic Loading)이 있습니다.

정적 로딩이란 DLL 내의 루틴을 호출하기 위해 해당 루틴의 임포트 선언을 하고 사용하는 방법이죠.

procedure ProcInDll; external 'DLL입니다용.dll';

이렇게 임포트 선언을 하게 되면, 해당 DLL은 현재 프로그램이 실행되는 즉시 프로세스로 로딩됩니다. 이 방법의 좋은 점은, 코드가 아주 간단하고, 이렇게 dll의 루틴들을 모두 모아 라이브러리 목적의 유닛으로 만들어두면, 해당 유닛을 uses하기만 하면 마치 메인 프로그램 소스 내의 함수인 것처럼 편하게 호출할 수 있다는 거죠. 실제로 VCL의 Windows.pas나 ShellAPI.pas처럼 Win32를 그대로 번역한 유닛들이 이런 파일이어서, 우리는 델파이에서 Win32 API를 껌씹듯이 쉽게 호출해댈 수 있습니다.

하지만 이 정적 로딩 방법에는 중요한 단점이 하나 있는데... 프로그램이 시작될 때 해당 DLL을 로드하기 때문에, 만약 해당 DLL이 없거나 DLL 안에 해당 루틴이 없을 경우 프로그램이 아예 시작되지를 못한다는 것입니다. (이런 경우를 많이 접해보셨을 겁니다) 또, 프로그램이 시작될 때 DLL을 몽땅 다 로드해버리기 때문에 당장 쓰지도 않을(경우에 따라서는 아예 호출하지도 않을 수도 있는) 루틴들을 위해 무시할 수는 없을 정도의 메모리가 소요된다는 거죠.

DLL의 동적 로딩이란, 프로그램이 시작되는 동안이 아닌, 프로그램의 코드 내에서 LoadLibrary/FreeLibrary와 GetProcAddress 등의 함수를 이용해서 코드로 일일이 DLL을 로드하고, 그 DLL에서 해당 함수의 주소를 찾고, 그 주소를 함수 포인터로 해서 해당 함수를 호출하는 절차입니다.

TProcInDll = procedure;

var
  Handle: THandle;
  AProcInDll: TProcInDll;
begin
  Handle := LoadLibrary('DLL입니다용.dll');
  if Handle<>0 then
  begin
    @AProcInDll := GetProcAddress(Handle, 'ProcInDll');
    if @AProcInDll<>nil then
      AProcInDll;
  end;
  FreeLibrary(Handle);
end;


정적 로딩 방법에 비해 동적 로딩 방법의 단점은, 위 코드에서 바로 눈에 보이시죠. 코드가 복잡하고 까다롭다는 겁니다. 대신, 해당 DLL이 없거나 DLL 안의 루틴이 없더라도 당장 프로그램이 아예 뜨지도 않는 경우는 발생하지 않는다는 거죠. 물론 기대했던 DLL이 없다면 난감하겠지만, 위의 코드에서처럼 에러 체크를 통해 적어도 뭔가 대책을 세울 수 있는 가능성이 생깁니다. 또, 필요한 경우에만 DLL을 로드하기 때문에 메모리도 적게 먹습니다.

정적 로딩과 동적 로딩 사이에 장단점이 너무나 명확하죠. 그러면... 동적 로딩과 정적 로딩 사이에서 장점만 취할 수 있는 방법은 없을까요? 정적 로딩에서처럼 간단하게 임포트 선언만 하면서도, 프로그램 실행시에 무조건 바로 DLL을 로드하지는 않고 실제로 필요할 때 DLL을 불러들이면 되겠죠.

별로 알려지지 않았지만, 델파이 2010에서 바로 이 기능이 추가되었습니다. 지연 로딩(Delayed Loading)이라는 것으로, delayed라는 지시어가 추가되어 가능해졌습니다. 위의 정적 로딩에서 임포트 선언의 뒤에 delayed만 추가하면 된다는 거죠.

procedure ProcInDll; external 'DLL입니다용.dll' delayed;

정적 로딩 방식과 똑같은 임포트 선언에 delayed 지시어가 추가되었을 뿐입니다. 이렇게 delayed를 추가해주면, 프로그램 시작시에 바로 로딩되지 않고 실제로 해당 프로시저/함수가 호출될 때 비로소 DLL을 로드하고 루틴을 임포트합니다. 그래서 지연 로딩, delayed인 거죠.

당장 델파이 2010의 Windows.pas나 ShellAPI.pas 등등에는 2009 버전까지는 보이지 않았던 수없이 많은 함수들이 이 delayed 지시어와 함께 임포트 선언으로 추가되어 있는데요. 이 함수들은 윈도우 7, 윈도우 비스타, 윈도우 XP 등 특정 버전 이상에서 추가된 함수들로서, 그보다 낮은 윈도우 버전에서는 존재하지 않았던 함수들입니다. 그래서 API 지원이 훨씬 풍부해졌죠.

그러면, 해당 DLL이나 함수가 존재하지 않을 경우, 어떻게 대응을 해야 할까요? 해당 DLL이나 함수가 존재하지 않아 불러들일 수 없는 경우 EExternalException 예외가 발생합니다. 따라서, 동적 로딩에서 리턴 값을 체크해서 함수의 존재 여부에 따라 처리하는 것과 마찬가지로 try except 블럭으로 EExternalException 예외를 처리하면 깔끔하게 되겠죠.

그렇다고 동적 로딩을 사용하는 모든 경우를 지연 로딩으로 커버할 수는 물론 없습니다. 지연 로딩에서 프로그램 시작 이후 DLL 함수가 호출될 때까지는 DLL이 메모리에 로드되지 않지만, 일단 호출된 후에는 해당 DLL이 언로드되지 않고 계속 메모리에 머무르게 됩니다. 극단적으로 효율적인 메모리 운영이 필요하다면 언제든 DLL을 언로드할 수 있는 동적 로딩을 따라갈 수는 없죠.

또, 동적 로딩의 경우에는 DLL 이름과 함수 이름을 문자열로 취급하므로 메인 프로그램이 사전에 알지 못하는 DLL이나 함수도 호출이 가능하지만 정적 로딩과 지연 로딩에서는 컴파일 시점에 고정되는 이름만 지원할 수 있으므로, 업무 개발 프로젝트에서처럼 사전에 프로그램에서 알 수 없는 많은 DLL들을 쓰는 경우를 지원할 수 없게 됩니다.

성능 면에서는 어떨까요. delayed를 불필요하게 너무 남발하면 정적 로딩에 비해 프로그램의 성능을 떨어뜨릴 수도 있습니다. 반면 한번 호출되어 로딩된 DLL은 메모리에 계속 상주하게 되므로 이런 면에서는 매번 LoadLibrary, GetProcAddress를 호출해야 하는 동적 로딩보다는 속도가 빠르게 되죠. 결국 개발자가 정적 로딩, 지연 로딩, 동적 로딩을 적절히 잘 배합해서 사용하는 것이 좋습니다. 실제 VCL 코드에서도 이 세가지가 잘 배합되어 사용되고 있죠.

지연 로딩에 대한 좀 더 자세한 내용은, 엠바카데로의 앨런 바우어의 블로그에서 보실 수 있습니다.
http://blogs.embarcadero.com/abauer/2009/08/25/38894
http://blogs.embarcadero.com/abauer/2009/08/29/38896
http://blogs.embarcadero.com/chrishesik/2009/11/02/35056

아래 JEDI 블로그에서는 조금 더 테크니컬한 내용들을 보실 수 있습니다.
http://blog.delphi-jedi.net/2009/08/29/version-checking-for-delphi/

2010/01/10 02:17 2010/01/10 02:17

trackback :: http://blog.devgear.co.kr/imp/trackback/127

엊그제 저희가 거래하는 서적도매업체로부터 연락을 받았는데, 작년 4월에 초판을 인쇄한 "델파이 프로그래밍 언어"의 초판분이 거의 매진되고 재고가 겨우 20권 정도 남았다고 합니다. 그래서 이제 재판을 찍어야 하는 기쁜 상황이 되었답니다. ^^

내용을 더 보강해서 개정판을 만들까도 좀 생각했는데, 제가 요즘 도저히 다른 일을 추가로 더 할 수 없을 정도로 바빠져서 내년쯤으로 미루기로 했습니다. 당장은, 기본 제 업무에다가, 매주 두번씩 외부 컨설팅도 나가고 있고, 짬짬이 번역에다 C++빌더 책 집필도 다시 시작했기 때문에... 도저히 일을 더 추가할 수가 없겠네요.

어쨌든, 어제 재판 인쇄를 의뢰했고요. 이 재판 인쇄분이 나오기 전까지 일시적으로 서점 사이트들에서 품절 상황이 올 수도 있으니 혹시라도 사려고 하셨다가 너무 놀래지 마시기 바랍니다. ^^

사용자 삽입 이미지
2010/01/09 00:34 2010/01/09 00:34

trackback :: http://blog.devgear.co.kr/imp/trackback/125