2019년 10월 24일 목요일

TXMLDocument 이용하여 XML 만들기 연습입니다.

사용법에 대한 이해가 부족하여 정리하였습니다.


그림과 같은 결과를 얻기위한 소스입니다.

procedure TForm1.FormCreate(Sender: TObject);
var LNodeElement, NodeChild, NodeGChild: IXMLNode;
begin
XMLDoc.Active:= True;

XMLDoc.Version:='1.0';
XMLDoc.StandAlone:='yes';

XMLDoc.DocumentElement:= XMLDoc.CreateNode('DATAPACKET', ntElement, '');
XMLDoc.DocumentElement.Attributes['Version']:= '2.0';

LNodeElement:= XMLDoc.DocumentElement.AddChild('METADATA');

NodeChild:= LNodeElement.AddChild('FIELDS');

NodeGChild:= NodeChild.AddChild('FIELD', -1);
NodeGChild.Attributes['attrname']:= 'Name';
NodeGChild.Attributes['fieldtype']:= 'string';
NodeGChild.Attributes['WIDTH']:= '24';

NodeChild:= LNodeElement.AddChild('PARAMS',-1);
NodeChild.Attributes['DEFAULT_ORDER']:= '1';
NodeChild.Attributes['PRIMARY_KEY']:= '1';
NodeChild.Attributes['LCID']:= '2057';

LNodeElement:= XMLDoc.DocumentElement.AddChild('ROWDATA');
NodeChild:= LNodeElement.AddChild('ROW', -1);
NodeChild.Attributes['Name']:= 'Argentina';
NodeChild.Attributes['Capital']:= 'Buenos Aires';
NodeChild.Attributes['Continent']:= 'South America';
NodeChild.Attributes['Area']:= '2777815';
NodeChild.Attributes['Population']:= '32300003';

NodeChild:= LNodeElement.AddChild('ROW', -1);
NodeChild.Attributes['Name']:= 'Bolivia';
NodeChild.Attributes['Capital']:= 'La Paz';
NodeChild.Attributes['Continent']:= 'South America';
NodeChild.Attributes['Area']:= '1098575';
NodeChild.Attributes['Population']:= '7300000';

XMLDoc.SaveToFile('./dest.xml');
Application.ProcessMessages;
memo1.Lines.LoadFromFile('./dest.xml');
end;

2019년 10월 23일 수요일

델파이 실행시 황당한 현상

모처럼 만에 델파이를 깔고 간단한 프로그램을 만들어 실행 했더니 황당한 현상이 발생했습니다.
그림처럼 종료시 Unable to write to .... INI 라는 메세지 박스가 뜸니다.


환경은 Delphi Xe8 에 rxLIB 패키지를 설치하고 
빈폼에 rxFormStorage 컴포넌트 달랑 하나 올려 놓았습니다.

rxLIB에 문제가 있나 아무리 찾아봐도 허당이데요.

이것은 bds 실행시 관리자권한을 획득하지 않아서 이더군요.

으로 지정하였습니다.
최초실행시 UAC 화면 나오면 제일아래로 하면 사용자 확인을 하지 않고 bds.exe 가 곧바로 실행됩니다.


2019년 10월 8일 화요일

MAC 에서 Lazarus 사용이 쉬워졌습니다.

2019. 10 현재 라자루스 새로운 버전을 설치하면 별로 어려움이 없이 사용이 가능합니다.
예전에는 디버거 관련하여 설정이 어려웠는데 이제는 별다는 조치없이 바로 사용이 가능합니다.

이번에는 라자루스에 Qt5 를 사용하도록 해보겠습니다.
일단 Qt5를 설치하여야 겠지요.
QtCreater 가 설치되네요. C++ 을 사용하시는 분은 곧바로 사용이 사능합니다.
QtDesigner도 같이 설치되네요.
파이썬을 사용하여고 하면 sideSpy를 별도로 설치해야 하더군요.

라자루스를 이용하려면 wiki.lazarus.freepascal.org 에서 Qt5를 찾으면 됩니다.

Mac 에서 설치하려면
아랫부분을 참고하셔서 그래로 하면됩니다. 그런데 Qt 5.13.1 을 기준으로 약간 수정사항이 있습니다.

LazarusDir=/Developer/Lazarus
QtDir=~/Qt
cd $LazarusDir/lcl/interfaces/qt5/cbindings
PATH=$QtDir/5.13.1/clang_64/bin:$PATH
qmake

xcode 가 설치되었으니 별문제없이 처리가 되네요.

make
make install

은 시간이 엄청 많이 걸립니다.
결과물로 Qt5pas.frameworks 가 Qt5의 lib 디렉토리에 만들어 집니다.
이것을 라이브러리에 링크하여야 겠지요.

cd /Library/Frameworks/
sudo ln -s $QtDir/5.13.1/clang_64/lib/Qt5pas.framework .

여기까지는 잘되었는데... 64비트용으로 바꾸고

Remember that Qt5 is 64bit, so in Lazarus under Tools - Options - Environment, you need to change Compiler Executable from /usr/local/bin/ppc386 to /usr/local/bin/ppcx64 . With ppc386, you would later get the following errors when compiling your Lazarus projects:

라자루스에서 Tools - Options - Config "Build Lazarus" 했더니

"fpcres" not found, switching to external mode

터미널 창에서 fpcres 하면 버전등이 표시가 되는데 왜그럴까.. 구굴링 했더니.

nothing.
Check out if you have a symbolic link to fpcres utility in /usr/bin.
if you don't you need to create one
Code: [Select]
cd /usr/bin
sudo ln -s path_to_fpcres
you've installed fpc from .dmg file, path_to_fpcres is probably "/usr/local/bin/fpcres".

하라고 합니다. 했더니..
root 인데도 불구하고 Operation not Permitted 오류가 나고 되지 않는다.

또 구굴링 했더니. 이것은 El Capitan 이후에 적용된 Apple SIP (System Integrity Protection; 시스템통합보안) 때문이다고 하네요.
SIP대상 폴더는 /System, /bin, /sbin, /usr 폴더 입니다.

해결방법은 SIP기능을 해제하면됩니다.

1. 재부팅시 cmd + R 누르고 있는다. 복구화면이 것이다.
2. 언어를 선택하고 넘어간다.
3. 유틸리티 > 터미널 선택하여 터미널 창을 연다.
4. 터미널창에서 csrutil disable 입력하고 엔터
SIP기능이 해제되었다고 나온다.
5. 터미널에서 reboot 입력하고 엔터(재부팅한다.)
6. 나중에 다시 보안에 문제가 되면 enable로 원상하여야 겠지요. 


재부팅후에는 root 권한을 얻어 (sudo su - ) 복사, 이동, 삭제가 가능하게 된다.


이젠, 라자루스에서 ide 환경을 수정하여 빌드합니다.
id: framework not found Qt5Pas 에러가 나옵니다. 아래 처럼  Tools - options 에서 수정합니다.

-F/Library/Frameworks

그리고 전체적으로 다시 빌드합니다.
잘끝났네요. 휴. 엄청힘드네요.




2019년 10월 2일 수요일

Mac 에서 스트림 녹음하기

맥에서 내장마이크가 아닌 스피커로 출력되기 전의 스트림을 녹음하는 방법입니다.
우선은 SoundFlower 를 검색하여 설치합니다.
녹음은 QuickTimePlayer를 이용해서 하면됩니다.
스피커 출력기기를  SoundFlower(2ch)로 선택하고
QuickTimePlayer에서 입력소스를 마이크나 SoundFlower(2ch) 중에서 선택하면 됩니다.
그런데 출력을 SoundFlower(2ch)로 출력했기에 스피커에서는 소리가 안들립니다.
이건 아니지요.
소리를 들으면서 녹음해야지요.
하이시에라 이전에는 SoundFlowed 라는 앱이 생성되어 그곳에서 조치해주면 되었는데 하이시에라에서는 설치가안되더군요.
Command + Space (SpotLight)에서 AudioMini 설정을 부릅니다.


화면 죄측하단을 크릭하여 다중 출력 기기를 추가합니다.


그곳에서  내장출력과 , SoundFlower(2ch)로도  출력이 되도록 설정합니다.
스피커 출력기기를  SoundFlower(2ch)가 아닌 방금지정한 다중출력기기로 하면 됩니다.



QuickTimePlayer에서 입력소스를 SoundFlower(2ch) 로 선택하면 됩니다.
그런데 .m4a 로 저장되군요.  iTunes 로 .mp3로 변환하여 저장하면됩니다.


델파이 12.1이냐 11.3이냐?

 델파이가 12.1이 나왔습니다. 혹시 11.3버전의 커뮤니티버전이 필요하시는분이 있을 수 있을 것 같아 https://altd.embarcadero.com/.../RADStudio_11_3_esd_28... 와 이것 찾느랴 엄청고생함.