PHP에서 json_encode($DB) 형태로 리턴 받은 문자열이 아래와 같은 형식을 취합니다.


[ {JSON #1}, {JSON #2} ... ]

이넘을 분리해서 각각의 JSON 문자열을 TStringList에 하나씩 Add 시켜 줍니다.


소스: https://github.com/ryujt/ryulib4delphi/blob/master/XE7/JsonUtils.pas 


사용법은 간단하니까 생략 ㅡ.ㅡ;;

저작자 표시 비영리 변경 금지
신고

Posted by 류종택

예전에 아이들에게 프로그래밍을 가르치기 위해서 급하게 만들었던 프로그램 소스 코드입니다.  좀 더 개선해서 오픈해야지라고 했는데 이렇게 방치만 하다가 이제서야 오픈합니다.



사용에 대한 예는 아래 동영상을 참고하시기 바랍니다.




소스 코드는 아래의 링크에서 받으시면 됩니다.




예전에 올렸던 포스트는 아래와 같습니다.





저작자 표시 비영리 변경 금지
신고

Posted by 류종택

책의 재고가 없어서, 요즘 저에게 책을 찾는 분들이 계시기에 원고를 공개합니다.


교육 과정을 만들기 위해 급하게 만든 책이라, 이미 나온 책들까지 모두 회수하고 싶은 심정인데,

그래도 필요하시는 분들에게 조금이나마 도움이 되실 듯 하여 공개합니다.


오타 또는 오류를 발견하시면,

ryujt658@hanmail.net 으로 보내주시면 수정해서 업데이트를 하도록 하겠습니다.


출판 원고는 편집 등의 문제로 권리가 출판사에게 있는 모양입니다.

이 원고는 출판 이전에 이미 코드웨이 사이트를 통해서 공개 한 적도 있는 버전 입니다. 


오브젝트 파스칼 입문.doc

오브젝트 파스칼 입문.pdf



  • 츠키님의 원고 오류 메일을 받고, 112페이지에서 정수 나누기 오류를 수정하였습니다.  감사합니다.  워드 문서만 수정해서 올립니다.



저작자 표시 비영리 변경 금지
신고

Posted by 류종택

InterlockedExchangeAdd64 for Delphi


{$IFDEF CPUX86}
function  InterlockedExchangeAdd64(var Addend: Int64; Value: longword): Int64; register;
asm
          PUSH    EDI
          PUSH    ESI
          PUSH    EBX

          MOV     EDI, EAX
          MOV     ESI, EDX

          MOV     EAX, [EDI]
          MOV     EDX, [EDI+4]
@@1:
          MOV     ECX, EDX
          MOV     EBX, EAX

          ADD     EBX, ESI
          ADC     ECX, 0

LOCK      CMPXCHG8B [EDI]
          JNZ     @@1

          POP     EBX
          POP     ESI
          POP     EDI
end;
{$ENDIF}

{$IFDEF CPUX64}
function  InterlockedExchangeAdd64(var Addend: Int64; Value: longword): Int64; register;
asm
          .NOFRAME
          MOV     RAX, RDX
          LOCK    XADD [RCX], RAX
end;
{$ENDIF}


참고자료


저작자 표시 비영리 변경 금지
신고

'프로그래밍 > Delphi' 카테고리의 다른 글

A simple IDE for Java Script programming  (0) 2016.04.16
오브젝트 파스칼 입문서  (0) 2014.12.07
InterlockedExchangeAdd64 for Delphi  (0) 2014.07.01
Snappy for Delphi  (0) 2014.02.27
온라인 강의 - UI 분리 개발  (0) 2013.12.06
온라인 강의 - Multi-thread programming  (0) 2013.11.04

Posted by 류종택

성능 비교

  • Snappy (Build with Visual Studio 2012)
    • SizeOut: 8746 KB, QueryPerformanceCounter: 148012
  • ZLib (Build with Intel c compiler)
    • SizeOut: 6093 KB, QueryPerformanceCounter: 1572292
  • ZLib (Build with Delphi native code)
    • SizeOut: 6093 KB, QueryPerformanceCounter: 1986675

압축 원본은 18메가가 조금 넘는 Bitmap 파일 입니다.  SizeOut이 압축 후의 크기 입니다.


ZLib의 경우에는 가장 빠른 압축 옵션을 통해서 테스트 하였습니다.  여하튼 압축 속도에서 Snappy가 단연 선두입니다.



라이브러리 파일


Snappy.zip


델파이 유닛(Snappy.pas)과 Visual Studio 2012를 통해서 빌드 된 snappy.dll이 포함되어 있습니다.  사용법은 너무 간단하니, 패스합니다 ^^*;  (유닛 안에 코멘트로 간략한 사용법은 작성되어 있습니다)



기타


파일 크기를 작게하면 압축률 차이가 좀 더 심해지는 경향이 있습니다.  한편으로는 압축 속도 차이도 심해집니다.  즉, 압축하는 데이터의 크기가 작아지면, Snappy의 압축률 저하가 ZLib보다 심하지만, 압축 속도는 ZLib에 비해서 더욱 빨라집니다.  아래는 4KB 크기의 바이너리 데이터를 1024번 압축 한 결과 입니다.  역시 ZLib의 경우에는 가장 빠른 압축 옵션을 통해서 테스트 하였습니다.

  • Snappy --> SizeOut: 1905 B (46%), QueryPerformanceCounter: 1396
  • ZLib  --> SizeOut: 1516 B (37%), QueryPerformanceCounter: 281835



저작자 표시 비영리 변경 금지
신고

Posted by 류종택
  • 날짜 및 시간: 2013년 12월 18일 수요일 오후 3시  
  • 연락처: ryujt658@hanmail.net
    • 메일 보내주시면 다음 강의가 있을 때 미리 알려드립니다.


강의내용

  • 사용 언어는 델파이 입니다.
  • UI와 핵심 코드를 분리해서 개발하는 방법을 설명합니다.
  • 예제는 하마티(http://www.himytv.com/)를 가지고 사용합니다.
    • 하마티는 실시간 강의 및 화상회의를 위한 시스템입니다.
    • 화상회의에 대한 주요 코드 및 노하우를 전달하는 강의가 아닙니다.  UI를 분리하여 개발하는 과정에 집중해서 설명 합니다.
    • 회사 솔루션에 보안 문제 때문에 강의에 사용된 자료들은 제공되지 않습니다.  실습은 참고자료를 통해서 하셔야 합니다.
  • UI를 분리하여 개발하는 장점은 다음과 같습니다.
    • UI 변경에 대한 유연한 대응이 가능해 집니다.
    • 코어 기술에 대한 보안을 강화 할 수 있습니다.
    • 작고 중요한 기능에 집중해서 솔루션 개발을 이끌어 가는 것이 편리해 집니다.






참고자료



강의에서 사용 할 Job Flow


다음은 강의에서 사용 할 동영상 플레이어의 코어에 대한 Job Flow 입니다.  강의 목적에서는 벗어나는 것들이 많이 있습니다.  문제는 너무 단순하게 강의에만 적용되는 예제를 만들면 꼭 그렇게 까지 해야 하는가 하는 생각이 들 정도로 허전합니다.  시스템이 복잡하지 않다면, 대충 접근한다고 해도 크게 이상 할 것이 없기 때문입니다.


몇 일을 고심 끝에 코어 개발에 대한 예제를 동영상 플레이어로 정했습니다.  그런데 막상 준비하고 나니, 이것조차 너무 단순해서 강의 전달에 문제가 있는 것이 아닌가 살짝 걱정 됩니다 ^^;


하지만, 제가 동영상 플레이어가 개인적으로도 필요한 상황이 되어서 당장은 아니더라도 꾸준히 업데이트 될 가능성이 많기 때문에, 혹시 관심있는 분들에게는 좋은 예제는 물론, 추후 변화를 통해서 힌트를 얻으 실 수 있지 않을까 하는 기대를 해봅니다.


좀 더 나아가서는 오픈 소스이니 만큼 누군가 조언 및 버그 리포팅도 해주실 거라 믿습니다 ^^*


소스 저장소는 http://goo.gl/KtfvwI 를 참고하시기 바랍니다.








저작자 표시 비영리 변경 금지
신고

Posted by 류종택
  • 날짜 및 시간: 2013년 11월 13일 수요일 오후 3시 30분 
    • 연락처: ryujt658@hanmail.net
    • 메일 보내주시면 다음 강의가 있을 때 미리 알려드립니다.


녹화 자료



강의내용

  • 참고자료에 있는 책의 내용의 대부분을 다룹니다.  설명 방식 및 내용은 다소 차이가 있습니다.  최대한 쉽게 이해 할 수 있도록 노력했고, 지금도 노력 중 입니다.
  • 두 시간 2교시를 생각하고 있으나, 이번에도 시간을 다소 넘길 수 있습니다.
  • 제가 실무에서 사용하는 방식을 함께 설명하고자 했으나, 시간 제약 때문에 다음 기회로 넘길 수 밖에 없었습니다.
  • 지난 강의 녹화를 두 번 들어보니, 시간에 쫓기는 탓인지 다소 진행이 빠르다는 생각이 들었습니다.  수강중에 속도가 너무 빠르면 저를 진정시켜 주시기 바랍니다 ^^;




참고자료




참고자료에 대한 소스


Design Pattern for MultiThread.zip


저작자 표시 비영리 변경 금지
신고

Posted by 류종택

소스: http://goo.gl/KJl4Ee


소스의 링크를 클릭하시면 아시겠지만, 정말 간단합니다!


사용 방법은 아래와 같습니다.

unit _fmMain;

interface

uses
  RichEditPlus, ShellAPI,
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls;

type
  TRichEdit = class (TRichEditPlus);

  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    procedure FormCreate(Sender: TObject);
  private
    procedure on_TURLClick(Sender:TObject; const AURL:string);
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  RichEdit1.OnURLClick := on_TURLClick;

  RichEdit1.Lines.Add( 'http://www.himytv.com/' );
end;

procedure TForm1.on_TURLClick(Sender: TObject; const AURL: string);
begin
  ShellExecute(Handle, 'open', PChar(AURL), 0, 0, SW_SHOWNORMAL);
end;

end.


6: 라인에서 보듯이 uses에 RichEditPlus, ShellAPI 를 추가 합니다.


11: 라인에서 앞으로 사용 할 TRichEdit 클래스는 모두 TRichEditPlus 으로 치환해서 사용 할 것을 선언합니다.  이제 폼 위에 TRichEdit  콤포넌트를 올려 놓아도 실제로는 TRichEditPlus 클래스의 객체가 생성 됩니다.


17: URL 링크가 클릭 되었을 때 처리 할 이벤트 핸들러를 작성 합니다.


37: 실제 이벤트 핸들러에서는 해당 URL을 ShellExecute 함수를 이용해서 실행합니다.  결과적으로 웹 브로우져가 실행 됩니다.


30: 리치 에디터의 이벤트 핸들러를 지정합니다.


32: 테스트 할 URL 링크를 삽입 합니다.



TRichEditPlus 에는 스크롤 이벤트도 추가하였습니다.  채팅 창에서 이용 할 때 스크롤 업이 되면 채팅 내용이 추가로 입력 되어도 스크롤이 되지 않는 락 기능을 만들기 위해서 추가한 것인데, 다른 용도로도 사용 할 수 있을 듯 합니다.


아래는 채팅 창의 스크롤 락을 구현한 예제의 일부입니다.

const
  WM_Lock = WM_USER + 1;
  WM_Unlock = WM_USER + 2;

...

procedure TfrChat.on_Scroll(Sender: TObject);
const
  SCROOL_MARGIN = 10;
var
  iPos, iMin, iMax : integer;
begin
  iPos := GetScrollPos(moChat.Handle, SB_VERT);
  GetScrollRange(moChat.Handle, SB_VERT, iMin, iMax);

  if (iPos + moChat.Height + SCROOL_MARGIN) > iMax then PostMessage(Handle, WM_Unlock, 0, 0)
  else PostMessage(Handle, WM_Lock, 0, 0);
end;

procedure TfrChat.WMLock(var Message: TWMVScroll);
begin
  plChatLocked.Visible := true;  // 자물쇠 이미지를 보여서 락이 걸린 상태임을 알린다.
  moChat.HideSelection := true; // 리치 에디터에 새로운 입력이 생겨도 자동으로 마지막 라인으로 스크롤 되지 않는다.
end;

procedure TfrChat.WMUnlock(var Message: TWMVScroll);
begin
  plChatLocked.Visible := false;
  moChat.HideSelection := false;
end;



[그림 1] 깨알 같은 자물쇠 이미지 ^^;






저작자 표시 비영리 변경 금지
신고

Posted by 류종택

ffmpeg 라이브러리를 델파이에서 이용하여 간단한 동영상 재생기를 만드는 과정을 설명 한 것 입니다.


[소스 자료 1]

2013.01.09.7z



[소스 자료 2]

2013.01.16.7z



[동영상 설명 1]



[동영상 설명 2]


저작자 표시 비영리 변경 금지
신고

Posted by 류종택

http://www.codeway.co.kr/ 

http://www.helloworld.or.kr/ 

위의 두 주소는 현재 작업 중인 입문자용 온라인 가이드 북 입니다. 

입문자의 경우 델파이 설치도 문제가 되서 (방법 및 라이센스) 

dwscript를 이용해서 온라인에서 직접 실습 할 수 있도록 꾸며 봤습니다. 


아직 컨텐트도 준비 안되었지만, 

항상 틈틈히 프로그래밍 관련 글들을 써왔기 때문에, 

조금씩 살을 붙여갈 생각입니다. 

(많은 시간을 쏟아 부을 수는 없지만 ^^;) 

저작자 표시 비영리 변경 금지
신고

Posted by 류종택


티스토리 툴바