kkuzil.own@gmail.com

Posted
Filed under Development/Java & Android
1. 워크스페이스의 문자셋을 UTF-8로 변경
- 한글로 주석을 달기 위해서는 UTF-8 인코딩을 사용하는것이 좋다.
- 배포되는 예제들도 대부분 UTF-8 인코딩 사용
- Windows > Preference > General - Workspace의 Text file encoding을 [Other-UTF8]로 변경해준다.

2. [General-Editors-TextEditors-Spelling-Enable spell checking] 옵션 해제
- 주석의 맞춤법 검사를 해주는 기능인데 컴파일러에겐 사치스런 기능.
- 편집속도를 떨어뜨리는 데다가 한글도 제대로 인식못해서 오타처리되어 보임

3. [Java-Code Style-Organize Imports] 페이지의 "Number of imports needed for .*" 옵션을 1로 변경
-  이클립스는 import문을 자동으로 정리해 주는 편리한 기능을 제공하는데 매 클래스마다 import문이 작성되어 소스가 너무 길어준다. 이 값을 1로 바꿔 놓으면 패키지의 모든 클래스를 한꺼번에 임포트함. 고로 소스가 짧아지는 효과

4. [Java-Compiler-Errors-Warings-Unnecessary code]의 모든 옵션들을 Ignore로 변경
- 잔소리(경고)들을 침묵시킴
- 개인적으로는 비추
2012/01/25 23:31 2012/01/25 23:31
Posted
Filed under Development/Java & Android
01. java SDK(JDK) 설치
- 여기서(http://www.oracle.com/technetwork/java/javase/downloads/) 가장 최신버전 다운로드 받는다.
- 버전은 SE(Standard Edition), EE (Enterprise), ME(Mobile) 세 가지가 있겠지만 보통 안드로이드는 SE, EE를 사용한단다. 그럼 ME(Mobile)? Mobile이라는 약자가 무색하다
- 어쨌든 난 SE 최신버전 설치했다.
- 설치 후 cmd > java -version 치니깐 java version "1.7.0_02"라고 뜬다 (2012.01.25 현재)


02. Eclipse 설치
- 여기서(http://www.eclipse.org/downloads/) 가장 최신버전 다운로드 받는다.
- 버전이 많아서 뭘 깔아야 할까? 잠시 고민...  "Java EE Develop...." 을 받는다. 안드로이드는 엔터프라이즈가 적합하다고 한다.
- 그리고 원하는곳에 압축을 해제하면 "eclipse"라는 폴더가 생긴다. Program files 폴더 밑에 넣어도 되고,, 나는 "C:\" 에 넣었다. 그냥.. 잘보이니까!


03. Android SDK 설치
- 여기서(http://developer.android.com/sdk/index.html) Android SDK Mananger 받아서 설치하면 설치 용이하게 SDK 관리 매니져 뜬다.
- 거기서 필요한 SDK만 선택해서 다운로드 받아도 되고, 몽땅 다 받아도 된다.
- 난 몽땅 다 받게해서 시간 엄청오래걸렸다.. 밥먹고 와도 계속 진행중.. 아놔
- 요즘은 많이 좋아져서 밑에 ADK(Android Develop Kit)설치하면 자동으로 SDK 다운도드까지 연결된다. (근데 속도는 장담못함.)


04. Eclipse에 ADK 설치
- 이클립스에서 Help > Install New Software > Add를 실행 후 대충 Name넣고 주소(http://dl-ssl.google.com/android/eclipse/) 등록
- 그리고 좀 기다리면 설치할거 나오는데 (현재는 4개뜸) 그거 체크하고 다운받아서 설치하면 끝
- 이어서 Android SDK 설치가 뜨는데 03. 에서 이미 설치 했다면 설치 안된거만 찾아서 자동으로 더 설치해 준다.


05. Eclipse에서 설정
- Windows > Preferences > Android 에서 SDK 경로등을 설정해 줄 수 있다.
- Window > Android SDK and AVD Manager 여기서 AVD(Adnroid Virtual Deveice)를 생성해서 돌릴 수 있고 SDK 매니저로 최신 SDK를 받아볼 수 있다.

2012/01/25 23:12 2012/01/25 23:12
Posted
Filed under Development/Delphi
EAbort
메시지 상자를 출력하지 않고 현재의 코드 블록을 취소할때 발생


EOutOfMemory
애플리케이션을 실행하기 위한 메모리 부족시 발생


EAccessViolation
메모리가 할당되지 않은 상황에서 연산을 하거나
메모리 할당 후 해제하지 않고 다시 할당할때 발생


EstackOverflow
현재의 스레드 수행이 더이상 메모리에 할당될 수 없을 경우


ElnOutError
파일 입출력시에 에러가 나는 경우


ElntError
정수 연산시 발생하는 에러


EDeivByZero
정수를 0으로 나누었을 때 발생


ERangeError
정수형의 범위를 벗어나는 값이 할당 됐을 경우


ElnvalidPointer
부적절한 포인터 연산이 수행됐을 경우


ElnvalidCast
as연산자를 이용하여 부적절한 형변환이 발생했을 경우


EConvertError
strtoint 나 inttostr등의 형변환 함수 에러


EControlC
콘솔모드 애플리케이션의 경우에서 발생
ctrl+c가 눌렀을때 발생한다.


EPropReadOnly
OLE 오토매이션이 수행되는 동안 읽기 전용 프로퍼티에 쓰기할 경우 발생


EPropWriteOnly
OLE 오토메이션이 수행되는 동안 쓰기 전용 프로퍼티에 읽기를 할경우 발생


EExternalException
그외 어떠한 코드에도 적용되지 않는 경우 나타나는 에러들


EStreamError
LoadFromStream으로 stream을 읽을때 발생


EFCreateError
파일이 생성될때 예외 상황


EFOpenError 파일이 열리지 않을때 발생


EResNotFound
ReadConponentRes메소드가 리소스파일에서 특정한 리소스를 발견하지 못했을때 발생


EListError
리스트 문자열 문자열 리스트에서 발생 리스트의 범위를 벗어났을 경우


EStringListError
문자열 리스트 지정 범위를 초과했을때 발생


EMathError
실수 연산시 발생하는 예외 상황


ElnvalidOp
실수 연산시 정의되지 않은 다양한 예외 상황이 발생하였을때


EZeroDivide
실수를 0으로 나누었을 때 발생하는 예외 상황


EOverflow
실수연산으로 레지스터에 할당된 값보다 큰값이 할당되었을때


EUnderflow
실수연산으로 실수로 나타내기에 너무 작은값이 할당되었을 때


EPrinter
프린터 인쇄시 발생하는 예외 상황


EMenuError
애플리케이션에서 사용하는 메뉴에서 애러가 발생했을때 나타난다


ElnvalidOperation
비윈도우 컴포넌트가 윈도우 핸들을 필요로 하는 연산을 수행했을때 발생


ElnvalidGraphic
부적절한 그래픽 파일을 로드했을때 발생


ElnvalidGraphicOperation
그래픽상에서 부적절한 연산이 수행될때 발생하는 예외 상황

출처 : 델마당[slypuma님 글]
2010/11/03 10:58 2010/11/03 10:58
Posted
Filed under Development/Delphi

언젠가는 쓸데가 있겠지... 훗

interface
...
...
const
  STATUS_SUCCESS                = $00000000;
  {$EXTERNALSYM STATUS_SUCCESS}

type
  NT_STATUS = LongInt;

  IO_STATUS_BLOCK = record
    case integer of
      0:
       (Status: NT_STATUS);
      1:
       (Pointer: Pointer;
        Information: ULONG); // 'Information' does not belong to the union!
  end;
  PIO_STATUS_BLOCK = ^IO_STATUS_BLOCK;

  _FILE_INTERNAL_INFORMATION = record // Information Class 6
    FileId: LARGE_INTEGER;
  end;
  FILE_INTERNAL_INFORMATION = _FILE_INTERNAL_INFORMATION;
  PFILE_INTERNAL_INFORMATION = ^FILE_INTERNAL_INFORMATION;

  _FILE_NAME_INFORMATION = record
    dwLen: DWORD;
    sFileName: array [0..0] of WideChar;
  end;
  FILE_NAME_INFORMATION = _FILE_NAME_INFORMATION;
  PFILE_NAME_INFORMATION = ^FILE_NAME_INFORMATION;

_FILE_INFORMATION_CLASS = (
    FileFiller0,
    FileDirectoryInformation,     // 1
    FileFullDirectoryInformation, // 2
    FileBothDirectoryInformation, // 3
    FileBasicInformation,         // 4  wdm
    FileStandardInformation,      // 5  wdm
    FileInternalInformation,      // 6
    FileEaInformation,            // 7
    FileAccessInformation,        // 8
    FileNameInformation,          // 9
    FileRenameInformation,        // 10
    FileLinkInformation,          // 11
    FileNamesInformation,         // 12
    FileDispositionInformation,   // 13
    FilePositionInformation,      // 14 wdm
    FileFullEaInformation,        // 15
    FileModeInformation,          // 16
    FileAlignmentInformation,     // 17
    FileAllInformation,           // 18
    FileAllocationInformation,    // 19
    FileEndOfFileInformation,     // 20 wdm
    FileAlternateNameInformation, // 21
    FileStreamInformation,        // 22
    FilePipeInformation,          // 23
    FilePipeLocalInformation,     // 24
    FilePipeRemoteInformation,    // 25
    FileMailslotQueryInformation, // 26
    FileMailslotSetInformation,   // 27
    FileCompressionInformation,   // 28
    FileObjectIdInformation,      // 29
    FileCompletionInformation,    // 30
    FileMoveClusterInformation,   // 31
    FileQuotaInformation,         // 32
    FileReparsePointInformation,  // 33
    FileNetworkOpenInformation,   // 34
    FileAttributeTagInformation,  // 35
    FileTrackingInformation,      // 36
    FileMaximumInformation);
  FILE_INFORMATION_CLASS = _FILE_INFORMATION_CLASS;
  PFILE_INFORMATION_CLASS = ^FILE_INFORMATION_CLASS;

..
..
..

implementation

..
..

procedure TDlgScanMain.sButton2Click(Sender: TObject);
var
  NtQueryInformationFile: function(FileHandle:DWORD;
                                   IoStatusBlock: PIO_STATUS_BLOCK;
                                   FileInformation: Pointer;//PFILE_INTERNAL_INFORMATION;
                                   Length:DWORD;
                                   FileInformationClass:FILE_INFORMATION_CLASS):DWORD; stdcall;
  FileName: string;
  hFile: THandle;
  io: IO_STATUS_BLOCK;
  FileInfo: FILE_INTERNAL_INFORMATION;
  Res: NT_STATUS;
  FileRecInput: TNtfsFileRecordInputBuffer;
  FileRecOutput: PNtfsFileRecordOutputBuffer;
  Read: DWORD;
  hDevice: THandle;
  VolumeDataBuff: NTFS_VOLUME_DATA_BUFFER;
  Size: DWORD;
  rec: PFileRecordHeader;
  pName: PFILE_NAME_INFORMATION;
begin
  FileName:='E:\테스트\DOC';

  NtQueryInformationFile := GetProcAddress(GetModuleHandle('ntdll.dll'), 'NtQueryInformationFile');
  if Assigned(NtQueryInformationFile)=false then
    exit;

  if FileExists(FileName) then
    hFile := CreateFile(PChar(FileName),
                        GENERIC_READ or
                        GENERIC_WRITE,
                        FILE_SHARE_READ or
                        FILE_SHARE_WRITE or
                        FILE_SHARE_DELETE,
                        nil, OPEN_EXISTING, 0, 0)
  else if DirectoryExists(FileName) then
    hFile := CreateFile(PChar(FileName),
                        GENERIC_READ or
                        GENERIC_WRITE,
                        FILE_SHARE_READ or
                        FILE_SHARE_WRITE or
                        FILE_SHARE_DELETE,
                        nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)
  else ASSERT(false);

  if hFile <> INVALID_HANDLE_VALUE then
  begin
    ZeroMemory(@FileInfo, sizeof(FileInfo));
    Res := NtQueryInformationFile(hFile, @io, @FileInfo, sizeof(FileInfo), FileInternalInformation);

    if Res <> STATUS_SUCCESS then Exit;
    hDevice := CreateFile(PChar('\\.\'+FileName[1]+':'), GENERIC_READ or GENERIC_WRITE,
                        FILE_SHARE_READ or
                        FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);

    if not(DeviceIoControl(hDevice, FSCTL_GET_NTFS_VOLUME_DATA, nil, 0,
       @VolumeDataBuff, sizeof(VolumeDataBuff), Read, nil))
          then RaiseLastWin32Error();

    Size := sizeof(TNtfsFileRecordOutputBuffer) + VolumeDataBuff.BytesPerFileRecordSegment-1;
    GetMem(FileRecOutput, Size);
    ZeroMemory(FileRecOutput, Size);

    ZeroMemory(@FileRecInput, sizeof(FileRecInput));
    FileRecInput.FileReferenceNumber:=FileInfo.FileId;

    if not(DeviceIoControl(hFile,
                    FSCTL_GET_NTFS_FILE_RECORD,
                    @FileRecInput,
                    sizeof(FileRecInput),
                    FileRecOutput,
                    Size,
                    Read,
                    nil)) then
    begin
      RaiseLastWin32Error();
    end;

    rec := @FileRecOutput.FileRecordBuffer;
    sMemo1.Lines.Add(IntToStr(rec.SequenceNumber));

    FreeMem(FileRecOutput);
    CloseHandle(hDevice);
  end else
    RaiseLastWin32Error();
end;

2010/07/29 15:56 2010/07/29 15:56
Posted
Filed under Development/C++

프로그램 시작부터 안보이게 하고싶을 경우 WinMain안에서~


ShowWindow(Application->Handle, SW_HIDE);
Application->ShowMainForm = False;


요렇게~


VC에서는 이렇게 하면 안되지.. 아마..

내공이 부족해서 왜 안되는지는 모르겠고.. 폼 위치를 바꿔버려야 한다..안보이게 슝~

함수명이 머드라... SetPosition어쩌군데.. 기억이.. 암튼 여기까지

2010/07/22 15:59 2010/07/22 15:59