«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28

C#을 배우기에 앞서 내가 왜 C#을 배우게 되었는지에 대해 먼저 포스팅해보려고 한다. 많은 학생분들이나 선배 개발자님들도 C#을 많이 학습하고 있는데 이러한 흐름에 몸을 실으면서 학습을 하게 된 것은 아니다. 먼저 델파이와 C#의 차이를 먼저 비교해야한다. 먼저 난 델파이가 싫어져서 C#을 배우기 시작한 것이 아니다. C#에 그렇게 큰 비중을 두고 학습하는 것도 아니고 여전히 내 주력 언어는 델파이일지도 모른다. 하지만 한 우물만 파면 더 좋은 것이 있어도 보질 못하고 생각또한 갇히게 된다. 나는 C#을 통해 델파이에서의 불편했던 점을 찾고, 하일스베르 등이 델파이에서는 이렇게 생각하고 구현한 것을 C#에서는 어떻게 처리했는지, C#에서 더 매끄럽거나 더 뛰어난 컨트롤이 있다면 보고 배워 델파이의 컴포넌트로 포팅해 보기까지 다양한 호기심을 충족하고자 학습을 시작한다.


이 글을 적는 이유는 먼저 C#은 델파이가 아니다. 델파이의 많은 철학이 그대로 녹아있지만 동일하게 봐서는 안된다. 오히려 나는 이것을 배우면서 현재까지는 자바와 드림위버같은 느낌을 더 크게 받았다. 게다가 계속 개발되어지고 있는 언어이다. 너무 델파이만 신봉하여선 안된다는 소리다. MS 닷넷 특성상 델파이처럼 코드 단일화가 되기는 조금 힘들겠지만. (MS의 Object-C 같다는 소리도 한다고 한다) 


최근들어 델파이를 잘 사용하지 못하게 되었고, 간간히 내가 찾은 팁이나 국내 책에서 알려주지 않는 소소한 기능 설명을 위해 업로드하던 포스팅도 겨우 4건에서 그쳤다.

가만 고민해보면 우선 델파이의 지원 범위가 아직은 내가 원하는 범위까지 지원되지 못하는 탓이 클 것이다. 

라자루스를 통해 오브젝트 파스칼을 쓸 수 있다지만 라자루스 또한 다양한 리눅스 제품군을 커버하지는 못하고 있고 나의 경우 임베디드 리눅스와 TUI 환경의 프로그램을 주로 접하다보니( 그러고보니 요 몇년간 리눅스에서 GUI를 쓴 적은 X11 포워딩을 통한 gedit 밖에 없다.) 더욱 델파이와 거리를 두게 되었다고 할까.

사실상 델파이는 내게 있어서 아직은 임베디드의 제어를 위한 서브 도구에 지나지 않는다고 하면 되겠다.


그렇다고 델파이가 별로 좋지 않다는 것은 아니다. 오히려 내가 비록 보잘것없으나 이 정도의 언어 실력까지 올라올 수 있었던 것은 델파이의 단순함과 직관적인 UI를 통해 빠른 생산성을 얻을 수 있음은 부정할 수 없다. 네이티브이기 때문에 자바나 닷넷보다 빠를 수 있음은 두말할 것 없고. 델파이는 여전히 훌륭한 도구이고 훌륭한 개발자들의 손을 통해 오늘날에도 철학을 지키며 만들어져 오고 있다. 많은 개발자들이 많은 훌륭한 프로그램을 만들어 내고 있으며 때로는 기존의 많은 프로그래머들이 찬양하던 자바 언어로 된 프로그램이 하나 둘 델파이로 대체되는 경향도 없잖아 보이고 있다. 


많은 사람들이 델파이는 너무 마이너적인 언어라고 한다. 인정할 수 밖에 없다. 마이너라는 것은 아무리 훌륭한 언어라도 비주류라면 어디에나 붙을 수 있는 칭호고 델파이는 여전히 마이너라고 생각한다. 많은 프로젝트가 여전히 자바와 닷넷 위에서 진행되고 있고 임베디드 또한 C와 C++로 작성되어지고 있다. 한때 빠른 취직을 위해 찾아볼 때도 구인 구직 또한 자바가 압도적이었으니까. (물론 대부분 제값 받을 수 있는 일은 아니었다.) 하지만 나는 이 부분이 한창 IDE 플랫폼 시장이 격화될 때 인재 유출로 인해 많은 개발자와 고객사를 잃어버린 탓이 크다고 생각한다. 만약 당시에 MS가 Delphi, Turbo Pascal의 개발자들을 전원 스카웃하지 않았다면 어땠을지는 개개인의 의견차가 크니 별다로 언급하지 않겠다.


내가 이런 좋은 언어를 배웠음에도 C#을 배우려는 점은 몇 가지가 있는데 그중 하나는 Visual Studio라는 IDE 플랫폼의 매력이 크다. 델파이는 언어 철학과 직관적인 배치, 사용법은 확실히 VS보다 편하다. 적응의 문제가 아니다. 나는 작년 이맘 때 처음 델파이를 학습했고, c#을 학습하는 지금 벌써부터 불편함이 느껴진다. 디폴트 환경에 도구 상자가 감춰져 있어야 하는 이유를 모르겠으며 Control의 Drag & Drop 시 왜 내가 끌어다 놓은 곳에 정확히 안착하지 못하고 좌상단 모서리에 안착이 되는지는 여전히 이해할 수가 없다. 





위치 포인트는 무시하더라도 여러 도구를 가져오는 시간도 상당히 오래 걸린다. 내가 왜 xaml을 봐야하는지 이것 또한 이해할 수 없는 요소이다. 그렇다고 보기 좋게 작성되는 것도 아니며 속성 팔레트가 존재하는데도!


하지만 델파이가 VS를 따라오지 못하고 있는 부분도 보이는데, 델파이는 라이브러리 확인이 다소 불편하다. 델파이의 라이브러리를 살펴보기가 어렵다는 것이 아니다. 라이브러리 자체는 훨씬 쉬운데, 그 방법론의 문제다.

우선 델파이에서의 정의 확인부터 간단히 넘어가보자.

델파이에서 어떤 변수가 어디에 선언 되었는지, 사용되었는지 찾기는 VS보다 쉽다.

Ctrl 누른 상태에서 해당 변수든 프로시저든 펑션이든 누르면 넘어간다.


그렇다. 누르면? 넘어간다. 그냥...


완전히 커서가 해당 구역으로 넘어가버린다는 의미이다.

라이브러리에서의 정의를 확인하기 위해 누르면?



VS에서는 이 기능이 윗처럼도 가능하지만 이렇게 구현이 될 수도 있다.



델파이를 공부하다가 후배가 물어봐서 VS를 오랜만에 설치해서 연 적이 있는데 이 기능은 정말... 정말이지 놀라웠다.

델파이는 단일 모니터에 최적화된 툴의 느낌이라면 VS는 넓은 화면을 효율적으로 볼 수 있다고 봐야겠다.(그것이 도구 팔레트를 기본으로 고정시켜주지 않은 것을 변명할 수는 없지만) 실제 델파이를 코딩하다보면 라이브러리를 직접 확인할 일이 생각보다 많은데 다른 언어는 레퍼런스를 주로 보고 의지한다면 델파이는 각 변수의 용도 정도만 알아도 초보 개발자가 라이브러리를 보는데 큰 지장이 오지는 않는다. 되려 델파이의 레퍼런스나 책을 볼 일보다 책에 나오지 않는 컴퍼넌트의 명확한 용도를 알고자 구글링할 때가 더욱 많으니까. 그런데 그 보는 방식이 너무 불편하다는 것이다. 무조건 탭이 넘어가고 동시에 두가지 탭을 보기 힘들다. 하지만 이 기능은 내가 수정하고자 하는 코드 바로 근처에서 내가 원하는 정보를 찾아주므로 비교해보고 내용을 파악하기에 최적화되어 있다는 거다.


그 외에 차이점을 더 느끼지만 한번에 다 공개해버리면 뭔가 언어간 디스전과 같이 흘러갈 것같다. 나는 특정 언어가 우월하다는 것에는 반대하는 입장이고, 디스보다는 이 언어는 이게 낫고 저 언어는 이게 좋더라.. 정도로 봐주었으면 한다. 앞으로의 c# 학습 글은 얼마나 올라올 지 모르겠지만 전체적인 흐름은 델파이나 이클립스와의 비교로 진행하게 될 듯하다. 급할땐 한번에 내가 필요한 정보를 제공하는 것도 좋고 따라함으로써 금세 성취감을 느낄 수 있는 구성도 좋지만, 그런 책이나 강의, 강사님들은 많다. 하지만 처음부터 여러 언어의 차이나 해당 언어의 원리에 대해 맛보기나마 호기심을 채워주는 글은 많지 않다. 


나 또한 언어의 학습에 있어 많은 부분이 부족했지만 초보자 수준에서 접할 수 있는 정보의 양은 한계가 있었고 지금도 나는 초보자일 뿐이다. 하지만 초보자가 초보자의 입장에서, 책만으로는 알기 어려웠던 접시물의 깊이를 내가 겪었던 그대로 풀어 설명을 하고 싶다. 결국 나는 나중에도 언제나 초보자일 것이고 나 또한 이 글들을 통해 다시금 배우고 새로운 것을 알게 될 것이니까.


PS. 실제로 나는 중학생 때 C를 배우면서도 왜 이게 이러는지 모르고 배웠다. 이 글을 어쩌다가 읽게된 몇몇 당신도 찔리지는 않으시는지..?

,

상당히 오래전 DD-WRT 펌웨어를 소개하고, 이 설치 방법을 포스팅하겠다고 했는데 어느새 벌써 11월의 마지막 주입니다.

DD-WRT는 WRT계열 오픈소스 라우터 펌웨어로 라즈베리파이를 깊게 사용해보신 분이라면 OpenWRT 정도는 들어보셨을 겁니다.


OpenWRT는 가장 오래되었고 가장 많은 기능을 수행할 수 있지만 여타 리눅스처럼 기본 기능만 들어있고 나머지는 패키지로 별도 설치, 설정해야하는 불편함이 있습니다. 


DD-WRT는 빌드 버전별로, 빈티지 별로 사전에 정의된 모든 기능이 다같이 들어있는 펌웨어로 초보자도 비교적 쉽게 다루지만 세세한 설정을 하기는 힘듭니다.


두 펌웨어 모두 공통적으로 리눅스 기반입니다.

즉, 라우터로써의 기능 뿐 아니라 다른 기능도(웹서버 등) 가능하다는 이야기입니다.

사실 소형 컴퓨터 하나 생긴다고 보셔도 됩니다.


WRT 펌웨어는 WRT 계열만 가능합니다. 모델명이 WRT가 아니라 WRT 계열 펌웨어만 WRT 계열의 다른 해킹펌, 오픈소스 펌웨어로 해킹이 가능합니다.

DD-WRT의 커펌 가능 여부와 다운로드는 이곳에서 조회할 수 있습니다.



DD-WRT의 설치에 앞서 갑자기 다시 포스팅을 한 이유를 알려드리겠습니다.



바로 요놈인데요.

요놈의 이름은 WRT54G Rev.2로 정말 잔고장치레조차 안하기로 유명한 공유기중에서도 제일 안나기로 유명한 리비전입니다.

유선 100mbps, 무선 11g 밖에 지원하지 않는 구형이지만, 여전히 한번 써본 사람들은 11n 공유기가 있음에도 혼용해서 쓰거나 뜯지도 않을 정도로 많은 분들이 애용하는 공유기입니다.


그 정도로 좋고 요즘은 시중에서 보기 힘든, 공유기 안정성으로는 레전드로 칭해도 괜찮은 공유기인데요.

누가 학교에 일반 쓰레기로 버렸더라구요.


<ⓒ 영광군청>

재활용합시다.


어쨌든, 리비전 7 8은 지금도 쉽게 구하지만 리비전 2는 중고로도 구하기 힘든 공유기입니다. 중3? 고1때 모 Wireless lab에 반납한 뒤로 처음 보게되어 되게 설레네요.


일단 공유기를 위 사진과 같이 전원을 공급하고, 컴퓨터와 연결했습니다.

먼저 공유기가 정상 작동을 하는지를 진단하기 위함인데요.


먼저, 저는 820라인에 32g램으로 워크스테이션처럼 굴리기 때문에 랜카드가 다수 설치되어 있어 아이피 대역 충돌이 예상되는 랜카드를 먼저 Off 했습니다.


그 다음 54g가 연결된 이더넷 2의 정보를 확인하니 게이트웨이가 192.168.1.1이네요.

TFTP 방식도 있지만, TFTP는 처음 접하는 분들은 꺼리는 방법이고, 실제로 위험하기도 해서 WebGUI로 먼저 테스트했습니다.



다행히 펌웨어가 잘 올라오고 lan을 하나 더 빼서 다른 공유기에 물려보니 외부 통신도 잘 진행이 됩니다.


이제 DD-WRT 펌웨어로 펌웨어를 교체하는데요.

주의사항이 있습니다.

하드웨어의 내장 프로그램을 교체하는 만큼 아래의 작업을 신중하게 해주셔야 합니다.

SW적인 오작동은 TFTP로 복구가 가능하지만, HW적인 오작동을 하는 순간 그 공유기는 더 이상 살릴 수 없습니다.(수리비가 더 나가죠)


다음으로 30/30/30 Hard Reset을 수행합니다.

30/30/30 하드 리셋은 공유기의 롬을 완전히 초기화하는 기능입니다.

공유기 기종에 따라서 WebGUI에 아무 데이터가 없는 상태로 초기화 되는 것부터, Web마저 동작하지 않는, TFTP만 살아있는 깡통이 되기까지의 상태로 공유기가 필요 최소한의 기능만 제외하고 전부 초기화되는 것을 의미합니다.

WRT 이식에 있어 공장 초기화보다 로우레벨의 초기화를 수행해야 이기종 펌웨어 이식에 문제가 없습니다.


30/30/30 Hard Reset 하는 방법.


1. 공유기의 파워를 제외한 모든 선을 제거합니다.

2. 공유기의 리셋 버튼을 30초간 누릅니다.



3. 30초 후 계속 Reset을 누른 상태에서 공유기의 전원을 차단합니다.



4. 30초 뒤 다시 전원을 연결하고 Reset은 계속 30초 동안 누릅니다.


※ 30/30/30 총 90초동안 reset은 계속 누르고 있어야 합니다. 중간에 떼서는 안됩니다.

전원이 차단된 상태에서도 30초 동안 계속 누르는 것은, 공유기 내부에 저장된 잔류 전원으로 메모리를 플래싱하고 있는 것입니다. 꼭 계속 누르고 계셔야 합니다.



리셋이 끝나면 공유기와 컴퓨터를 연결한 뒤, 아이피는 192.168.1.7 / Sub 255.255.255.0 주시고 192.168.1.1 로 연결합니다.




Administration -> Firmware Upgrade -> 파일 선택을 눌러 DD-WRT 펌웨어를 엽니다.


펌웨어는 RouterDatabases 에서 구할 수 있으며 자신의 기종과 리비전에 맞는 펌웨어중 가장 최신의 바이너리를 다운로드 합니다.

다운로드는 공유기마다 상이하지만 일반적으로 동일 버전 동일 패키지의 mini, std 두가지가 필요합니다.


WRT54G Rev.2 16/11/27 기준


Generic : dd-wrt.v24_mini_generic.bin

 dd-wrt.v24_std_generic.bin


VINTAGE : dd-wrt.v24-13064_VINT_mini.bin

   dd-wrt.v24-13064_VINT_std.bin


본인 라우터 FLASH가 2MB 인 경우, 반드시 mini가 아니라 micro를 사용해야합니다. 

mini는 2mb가 넘어 기기가 작동하지 않을 수 있습니다.


mini와 std 두가지를 전부 내려받는 이유는

mini는 일종의 인터페이스 역할을 합니다.


Java에도 interface가 있고 Delphi에도 interface가 있죠?

mini는 DD-WRT의 본체가 이식되기 전 먼저 파티셔닝과 사전설치를 해주는 펌웨어입니다.

이놈을 통해서 DD-WRT의 본체가 이식이 되게 됩니다.


Router Databases 에서 본인의 기종 모델명을 검색한 뒤, Revision이 일치하는 레코드를 클릭합니다.




자신의 FLASH 용량을 체크하고, 지원하는 버전중 고르고(안전한 커펌을 원하면 pre가 있는 빌드는 사용하지 마세요) 다운로드 합니다.




저는 여기서 v24SP2 Build 13064 빈티지 버전을 사용했습니다.

이제 다운로드한 파일 중 mini를 선택해서 열고 



Upgrade를 누르면 아래와 같이 진행이 됩니다.

경과 시간은 약 3~4분정도 걸립니다.

폄웨어 교체하는 동안 절대 전원에 문제가 생기면 안됩니다.




잠시 기다리면 완료 되었다는 메시지가 나옵니다.

다시 주소창의 url을 지우고 192.168.1.1 로 접속합니다.



이전 펌웨어가 다시 나오는 경우 조치.


1. 공유기 전원 off 후 30초 후 재부팅

2. 브라우저 캐시 제거

3. 브라우저 또는 컴퓨터 재시작

4. 다시 리셋.




우측 상단에 mini가 보이고 v24sp2가 정상적으로 업로드 되었음을 볼 수 있습니다.

Memory -> Total Available의 손실된 2.4MB는 손실된 것이 아니라 펌웨어가 설치되어 소모된 메모리 용량이니 걱정하지 않으셔도 됩니다. (사실은 제가 처음에 그랬거든요. 손상된줄 알고 ㅋㅋ)


이제 다시 Administration -> Firmware Upgrade 로 들어가서 


펌웨어 mini 설치 후 로그인을 요구하면 아래의 계정을 입력하면 됩니다.


ID : root

PW : admin




파일 선택을 누르고 이번엔 std, 스탠다드를 엽니다.




그리고 Upgrade를 누르면 아래와 같이 진행이 되며 잠시 후 공유기로 재접속이 됩니다.

업그레이드 대기 시간은 최대 300초로 보통은 1분 전후로 끝납니다.

(예, 사실 54g 시간 측정 안했습니다._. WNDR3700은 1분 정도면 끝나더군요)





정상적으로 업그레이드가 되면 우측 상단에 mini가 std로 변경됨을 보실 수 있습니다.

이제 원하는 대로 설정해서 사용하시면 되며 비교적 최신 기종이어서 향후 업데이트가 나오는 기종이라면 별도의 설명이 없다면 Firmware Upgrade에서 std 파일만 바로 올리셔도 됩니다.


WNDR3700 기준으로 13년 이후로 sp는 중단되었지만, 이후 빌드는 16/11/14 기준 30880을 마지막으로 계속 나오고 있네요.

'공유기 > DD-WRT' 카테고리의 다른 글

DD-WRT 설치 가능 유무 확인  (0) 2016.02.26
쓰기에 앞서  (0) 2016.02.26
,

php에서 현재의 시간으로부터 특정 시간의 값을 취하고 싶을 때


방법 1) 참고 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_function&wr_id=200804#c_200865

date('format', strtotime('interval'));


방법 2) 참고 : http://php.net/manual/kr/function.date-add.php#114856

$date = new DateTime(now());

$interval = new DateInterval('P1D');
$date->add($interval);



방법 1에서


format 에는


  Y/m/d

 연 / 월 / 일 

  H:i:s

  시:분:초


interval 에는


 now

 현재시간 

 +30 / -30

 연산할 시간 

 day / hour / minutes / seconds 

 연산할 단위

 now +30 minutes

  복합 연산


방법 2에서


DateInterval 에는


P+

 1D

 1일 

 T2H

 2시간 

 T30M 

 30분

 T30S

 30초 



,

델파이는 Try ... except ... end 로 예외처리를 지원하고 있고 Indy 또한 Error Exception을 지원합니다.

하지만 예전에는 Indy의 exception이 IdException에 정의되어 있었습니다.

하지만 지금은 IdException을 uses 하면 파일이 있다고 나오지만




예전 코드나 예제는 더이상 사용할 수 없습니다.



왜냐하면 에러 정의가 IdException이 아닌 IdStack으로 옮겨졌기 때문입니다. 

그래서 옛날 코드나 예제를 사용하면 특정 인디 버전부터는 E2003 Undeclared identifier 에러가 발생합니다.

델파이는 대부분의 예제가 08년 09년을 기점으로 그 이전에 많이 기록이 남아 있습니다.


이제는 인디 컴포넌트의 예외처리를 하려면 IdStack을 uses해야 합니다.




위와 같이 처리하면 됩니다.

위 코드는 서버 접속 시 10060 Time Out 에러에 대한 예외처리를 하고 있습니다.

어느 상황의 에러가 어떤 코드인지 알고 싶다면, 아래 사이트를 참고하세요.



'컴퓨터 > Delphi' 카테고리의 다른 글

[QuantumGrid] CheckBox 사용  (0) 2018.11.30
이상한 Undeclared  (0) 2017.06.16
TAlphaColor의 색상 표현  (0) 2016.11.19
TEdit 클릭 시 내용 지워지기, 다시 나타내기  (0) 2016.11.05
[FMX][Timage] 이미지 복사  (0) 2016.09.25
,

TRectangle, TEdit... 등등 TBrush나 기타 TAlphaColor를 프로퍼티로 갖는 객체의 색상 값은 일반적으로 BGR코드를 사용합니다.

 

BGR코드란?

 

일종의 RGB 컬러와 같이 적색, 녹색, 청색의 조합으로 색을 표현하는 방식입니다.

쉽게 풀이하자면 RGB의 색상 배치를 프로그램이나 그 색상을 처리하는 코드의 처리 순서에 맞게 변경한 것으로 델파이는 BGR, 즉 청색, 녹색, 적색 순서로 색상을 입력받습니다.

 

RGB계열 컬러에 대한 색상표는 이곳을 참고하세요.

http://zapmap.com/colors/bgr.html

 

 

델파이는 RGB코드가 아닌 BGR코드를 사용하며 #RRGGBB가 아닌 $LLBBGGRR형식을 따릅니다.

기존에 웹이나 포토샵을 많이 다루던 분들은 생소한 포맷이나 기존의 RGB에 HSL의 Lightness 가 추가된 형태라 생각하시면 쉽게 이해하실 수 있으실 겁니다.

LL의 두 자리를 활용하여 해당 색상의 밝기를 조절함으로써 색의 밝기도 같이 표현하죠.

하지만 안그래도 더 복잡해진 코드, 정해진 색상표는 없을까요?

 

델파이는 이러한 고민을 위해 사전에 색상을 정의하고, 이 색상의 느낌에 맞는 이름을 부여하고, 이를 const 상수화 했습니다.

이 상수화된 색상에는 밝기 부분이 정의되있지 않은 가장 밝은 색에 가까운 색상들입니다.

예를들어 핏빛색에 가까운 claCrimson 을 사용한다면, 델파이의 코드는 이렇게 동작하죠.

 

Alpha = TAlphaColor($FF000000); 

Crimson = Alpha or TAlphaColor($DC143C);

 

어라? 앞에서 분명 델파이의 코드는 $LLBBGGRR이라고 했는데 6자리밖에 없다구요?

델파이의 색상은 별도로 밝기가 정의되지 않으면 밝기는 무조건 FF가 됩니다.

Alpha라는 상수를 보세요.

$FF000000 의 값으로 LL에만 FF 나머지는 00의 값을 가집니다.

이것이 Crimson으로 정의된 BGR 컬러와 or 연산이 되어 $$FFDC143C로 넘어오는 것이죠.

 

OR은 두 값의 비트를 비교했을 때 둘 중 하나라도 1이 있다면 해당 비트는 1이 되는 연산입니다.

그래서 FF00 0000 과 00DC 143C 를 연산한

 

 1111 1111 0000 0000 0000 0000 0000 0000

 0000 0000 1101 1100 0001 0100 0011 1100

-------------------------------------------------

1111 1111 1101 1100 0001 0100 0011 1100 

 

이 되죠.

 

그런데 이 편한 기능이 종종 동작하지 않을 때가 있습니다.

델파이 IDE는 언어와 프레임웍은 정말 좋지만,  다소 불안정한 면이 있어 다른 IDE에서는 부드럽게, 유연하게 동작하는 기능들이 델파이 IDE에서는 정상적으로 동작하지 않는 경우가 있습니다.

예를들어 델파이는 사용한 객체에 따라 자동으도 uses가 되지만, 이것이 사용하지 않을 때 자동으로 해제가 되지 않습니다.

 

점을 찍어 하위 프로시저 등을 참고하려 해도, 전혀 상관없는 다른 부분의 코드에 문제가 있으면 그 부분을 지적하는 것이 아니라 전체의 소스에서 이 기능이 동작하지 않습니다.(심지어 빌드시에도 알려주지 않습니다)

 

이러한 불안정한면 중에서, 사용을 하지만 프로그래머가 생성하지 않은 객체에 대한 uses는 되지 않는 것같습니다.

예를들어, TRectangle.Fill.Color 에서 프로그래머는 TRectangle을 선언했지 Color의 TAlphaColor을 선언한 것이 아닙니다.

델파이는 그렇기에 프로그래머가 전혀 사용하지 않는다고 판단하고 상수화된 색상 사용을 위해 반드시 uses 되어야 할 'System.UIConsts' 라이브러리가 자동으로 uses가 안되는 경우가 있습니다.

다른 언어의 IDE는 이런 날코딩으로 사용된 객체도 필요하면 자동으로 인클루드나 임포트가 됩니다만, 델파이 IDE는 아직 보완되어야 할 부분이겠지요.

 

결론은,

 

델파이의 색상은 $LLBBGGRR로 저장됩니다.

기본 색상코드를 단어가 사용된 상수를 사용할 수 있습니다.

상수는 cl, 또는 cla + 색상명입니다.

색상에 상수 사용 시 'E2003 Undeclared identifier' 이 발생한 경우 자신의 프레임웍에 맞는 접두사가 아니거나(cl, cla) System.UIConsts가 uses되지 않은 경우입니다.

,

TEdit은 단일 라인의 입력 컴포넌트로 많이 쓰이는 컴포넌트입니다.

TEdit은 기본적으로 네모 박스 하나만 나오고 이것이 무슨 값을 취하려는지 나오지 않습니다.


이렇게 네모 박스만 생기죠.

그래서 이 박스가 무엇인지를 위해 앞에 TLabel을 달거나 이미지를 붙여줍니다.



하지만 이렇게 하면 VCL이나 PC같이 큰 화면에서는 문제가 없지만 FMX에서는 가용 면적이 줄어드는 역효과가 있습니다.

이를 위해 델파이는 TLabel이 아닌 TEdit의 TextPrompt 프로퍼티가 정의되어 있습니다.

이 프로퍼티는 Prompt 즉, 해당 TEdit에 사용자가 입력한 내용과 별개로 배경처럼 해당 TEdit이 무엇을 입력받으려는지를 명시해주는 역할을 합니다.



이렇게 TEdit을 선택한 뒤, 해당 TEdit에서 입력받을 것이 무엇인지 명시해주면 아래와 같이 희미하게 나타납니다.



문제는 이렇게만 하면 입력 시에 프롬프트가 지워지지 않아 내가 무얼 입력했는지 글자가 겹쳐 보기 힘들다는 점입니다.




TEdit의 OI의 Events를 보면 OnCanFocus 라는 이벤트가 있습니다. 이 이벤트는 해당 개체에 포커스(초점)이 있으면 발생하는 이벤트로 TEdit에서 내용을 입력하기 위해 커서가 들어가는 것도 초점이 들어가는 것입니다.

이제 이 이벤트에 내용을 채웁니다.


(Sender as TEdit).TextPrompt := '';


간단합니다.

우리의 목적은 입력 시에 내용을 지워주면 되는 거니까요.

문제는 여기서 발생합니다.

만약 포커스가 있었다가, 아무 내용도 없이 떠나면 이게 무슨 입력이었는지 알 수가 없습니다.

내용이 빈값이면 다시 보여주어야겠죠.


Events에 OnExit라는 이벤트가 있습니다.

이 이벤트는 포커스가 떠날 때 발생하는 이벤트입니다.

그럼 이 이벤트의 내용을 채워봅시다.


if (Sender as TEdit).Text = '' then

(Sender as TEdit).TextPrompt := '이것은 프롬프트';


이렇게 해주시면 TEdit에 포커스가 발생했을 때, 포커스가 떠났을 때 TextPrompt의 내용을 없애기도, 다시 보여주기도 합니다.

이를 응용하면, 항시 프롬프트가 있어야 하면 프롬프트의 색을 더 옅게 한다던지, 프롬프트가 아닌 Text그 자체에 대한 수정도 가능합니다.

반대로 Text에 명시를 해줬다가 입력을 시작하면 Prompt로 바꿔줄 수도 있죠.


이에 대한 응용은 여러분의 몫입니다.

'컴퓨터 > Delphi' 카테고리의 다른 글

[QuantumGrid] CheckBox 사용  (0) 2018.11.30
이상한 Undeclared  (0) 2017.06.16
[Component] Indy 에서 예외처리 하기  (0) 2016.11.26
TAlphaColor의 색상 표현  (0) 2016.11.19
[FMX][Timage] 이미지 복사  (0) 2016.09.25
,

델파이 FMX에서 이미 생성된 TImage의 이미지를 다른 TImage(또는 TBitmap도 되는 것 같다.) 로 복사할 때

MultiResBitmap 프로퍼티나 CopyFromBitmap 에서 헤메지 말고


TImage.Bitmap.Assign(TargetImage.Bitmap);


으로 한방에 해결할 수 있다.

'컴퓨터 > Delphi' 카테고리의 다른 글

[QuantumGrid] CheckBox 사용  (0) 2018.11.30
이상한 Undeclared  (0) 2017.06.16
[Component] Indy 에서 예외처리 하기  (0) 2016.11.26
TAlphaColor의 색상 표현  (0) 2016.11.19
TEdit 클릭 시 내용 지워지기, 다시 나타내기  (0) 2016.11.05
,

컴퓨터를 포맷하고 윈도우10으로 업그레이드하여 기존 프로그램들을 재설치할 일이 있었습니다.

한글, 어도비 등 각 사이트에서 전부 내려받아서(어도비 클라우드는 얼마나 느리던지..) 설치를 마치고 이제 사용만 남았는데 어느 순간부터 아래의 에러가 하루에 몇번씩 출몰하더군요.



command line option syntax error. type command/? for help


창의 타이틀을 보니 발생한 대상은 Visual C++ 2005 재배포 패키지입니다.

그래서 프로그램을 재설치하려고 프로그램 추가/제거(appwiz.cpl)에 들어가보니 해당 프로그램은 설치되지 않은 겁니다.


이에 대해 Microsoft Community에서는 아래와 같이 답변하고 있습니다. [원문]


간혹, 한글 OS와 같은 DBCS OS환경에서는 아래와 같은 에러 메시지와 함께 해당 Package가 설치되지 않는 경우가 있습니다.

“Command line option syntax error. Type command /? for Help”


C:\Users\홍길동\AppData\Local\Temp\IXP000.TMP

위의 경로에서 보시는 것처럼, 한글 계정으로 사용할 경우, full path에 DBCS가 포함되어 문제가 발생합니다.

이 경우에 한글 계정을 영문 계정으로 변경하여 해당 Package가 설치하는 것이 방법일 수 있습니다.


이 문장으로 유니코드 문자가 경로에 있으면 설치가 불가능할 수 있다는 것을 알 수 있는데요.

문제는 이 계정을 별도로 추가하는 작업은 다시 계정 삭제할 때 쓰레기 파일이 다소 남을 수 있다는 점과, 기존 계정을 영문으로 변경하는 작업이 사소한 실수로 큰 문제를 야기할 수 있다는 것입니다. [원문]


하지만 이 상황에서 반드시 계정을 바꾸어야하는 것은 아닙니다.

위 문장대로라면 TMP파일이 생성되는 경로만 바꿔주면 되는거죠.


탐색기에서 다운로드 받은 파일의 위치로 이동해봅시다.



저는 다운로드 폴더에 파일이 있습니다.

이제 이 프로그램 파일을 통해서 Visual C++ 2005 재배포 패키지를 추출할 겁니다.


상단 좌측의 파일 버튼을 눌러 관리자로 명령프롬프트를 실행합니다.



검은 창이 실행되면 아래와 같이 입력해주시고 엔터를 눌러주세요.

관리자 권한이 아니어도 상관은 없습니다. 하지만 추출하려는 경로가 관리자 권한으로 묶여 있다면 추출이 되지 않기때문에 저는 관리자 권한으로 실행했습니다.


vcredist_x86.exe /c /t:<추출할 경로>


경로는 본인이 원하는 경로를 하시면 됩니다. 단, 이 경우에도 경로에 한글이 있어선 안되며 가능하면 c:\로 하는걸 권장합니다.

저는 c:\에 파일을 추출해보겠습니다.



예를 체크하면 파일이 추출되고 프로그램은 종료됩니다.

이제 추출한 경로로 이동하겠습니다.

저는 c:\에 추출했으니 c드라이브 루트로 이동하겠습니다.


저렇게 파일이 하나 추출된 것을 확인할 수 있습니다.

이제 이 프로그램을 실행해서 Visual C++ 2005 재배포 패키지를 설치하겠습니다.


실행하면 압축이 해제되면서 재배포 패키지가 설치되게 됩니다.

(너무 빨라서 스크린샷은 찍지 못했네요..)



,

오랜만에 포스팅을 쓰러 왔습니다. 

전역하고 바로 복학을 하게 되어 이런 저런일에 치이다가 입대전만해도 만질 일이 없던 소형 컴퓨터들이 제 주변에 깔리기 시작했습니다. 아무래도 사물인터넷의 대세에 맞춰 학교에서도 관련 프로젝트와 교육을 하게되니 이렇습니다. 


사실 그중에서도 이쪽으로 아직 크게 유명치 않던 때부터 라즈베리 파이는 유명했었죠. 뒤이어 GPIO 기능 중점의 아두이노가 나왔구요.(적어도 제 생각에는 그렇습니다.)

이거슨 님의 제보입니다.

아두이노가 GPIO기반으로 먼저 나오고, 이 위에 ARM 칩을 이용한 프로그래밍이 가능하게끔 라즈베리가 뒤이어 나온 것이라고 합니다.

별도로 찾아보니 7년이나 먼저 나왔네요.


오늘 소개할 제품은 이 두 제품라인의 뒤따라 나온 PINE64라는 녀석입니다.



저의 경우 친구의 제품까지 2개를 주문했습니다. 제품의 기본구성은


PINE64

Push Button


입니다. 푸쉬버튼의 경우 이 기기의 전원버튼에 쓰입니다. 이 버튼의 경우 기본 제공하는 갯수는 제품당 1개이므로 전원버튼과 리셋버튼을 동시에 설치하려면 반드시 추가구입을 해야겠습니다. 버튼의 모델명은 확인하는 대로 수정해 올리겠습니다.


아래는 블루투스, Wi-Fi 겸용 모델입니다.



안테나는 분리가 가능해, 향후 필요시 다른 안테나로 교체가 가능하게 되어 있습니다.

칩은 리얼텍 RTL8723칩을 사용하고 있습니다. 지난 반도체 공장단지의 지진에 따른 리얼텍 공장 문제로 인해 이 칩의 기한 내 납품이 안되서 배송이 지연된 문제가 있었습니다.


모듈의 설치는 메인보드의 Wifi+BT소켓에 장착해주시면 됩니다.



장착시 위와 같이 모듈의 핀번호와 기판의 핀번호를 확인하시어 방향을 맞게 장착하시면 됩니다.




안테나는 탈부착이고 장착상태에서 회전또한 가능하기 때문에, 위와같이 원하는 방향으로 안테나 선을 돌릴 수 있었습니다.


종전에 언급한 스위치는 아래와 같이 설치하시면 됩니다. 고정이 되지 않고, 라벨지에서 언급하듯 납땜을 하셔서 설치하셔야 합니다.



이렇게 장착하신 뒤 기판 뒤에서 납땜하시면 됩니다.




위 사진은 전체적인 모습입니다. 주요 단자는 각 단자에 이름을 붙여놓았습니다.


각종 버스 핀들은 다음시간에 차차 다루기로 하고, 이 글에서는 위에서 표기한 부분만 짚고 넘어가겠습니다.

구입을 원하시는 경우 wifi.pine64.com에서 자세한 하드웨어 데이터시트를 얻을 수 있습니다.

언듯 보고오니 SPI , UART등 주요 기능은 대부분 지원하고 있습니다.


보다시피 이 보드는 파워를 두가지 방법으로 입력받을 수 있습니다.


MicroUSB방식의 5V DC와 BAT방식 두가지를 지원합니다.

동시에 사용은 안되고 MicroSD 좌측상단의 DC5V/BAT POWER 항목에서 전환이 가능합니다. 당연히 전환시에는 제품의 전원을 차단한 뒤 전환해주셔야 합니다.


기본적으로 와이파이 모듈이 없더라도 이더넷 포트를 통해 인터넷 연결이 가능합니다. 이더넷 포트는 다른 모 기기와 달리 USB포트와 분리되어 있기 때문에 이로인한 병목현상은 없습니다. 속도도 라즈베리보다 빠른 기가비트 대역까지 지원하고 있습니다.


HDMI포트를 그래픽 포트로 지원합니다. 4k 화면을 지원하며 사용되는 칩셋은 ARM Mali400MP2 를 사용하며 듀얼코어 GPU를 사용하고 있습니다. 


메모리는 삼성전자의 메모리칩을 사용하고 있습니다. 모델은 K4B4G0846E-BCMA 이고 DDR3-1866 규격의 제품입니다. 칩은 총 2GB모델 기준 총 4개로 보드의 앞뒤로 칩이 붙어있습니다. 1GB는 전면 두개, 512MB는 전면 1개로 구성되있을 듯합니다.


CPU는 ALLWINNER TECH의 A64 칩을 사용합니다. 1.2GHz 쿼드코어 모델로 A53기반의 64비트 ARM칩셋입니다. 라즈베리 파이 3 모델에 들어있는 칩과 같은 A53입니다. 


MicroSD슬롯은 256GB까지 지원합니다.


가격면에서는 기준점에 따라 라즈베리와 가격차이가 있습니다. 우선 CPU와 메모리를 기준으로 봤을 때 가겨은 $19로 라즈베리의 가장 싼 모델A보다 $1 싼 가격입니다. 블루투스, 와이파이모듈까지 고려했을 때의 가격은 라즈베리파이3(A53, 1GB RAM) $35, PINE64(A53, 1GB RAM) 29달러로 전체라인업이 라즈베리보다 싼 가격에 구입이 가능하다는 점입니다. 

PINE64 최고옵션(A53, 2GB RAM, BT/WiFi)기준 배송비 포함 $41달러에 구입할 수 있는 최고의 제품입니다.


다만 단점은, 개발된지 오래지 않은 제품이라 지원하는 시스템 이미지 종류가 라즈베리에 비해 적다는 것입니다.

라즈베리는 안드로이드, 우분투/레드햇/칼리 리눅스, 심지어 고전게임용 에뮬레이터를 돌릴 수 있고

아두이노의 경우 일부모델에서 OpenWRT를 지원한다.

심지어 근래들어 MS와의 제휴로 두 라인은 Windows 10 IoT를 공식지원하게 되었다.

PINE64의 경우 데비안/우분투/안드로이드 5.1.1/ 동일버전대의 RemixOS를 지원한다. 

PINE64는 대중적인 리눅스와 안드로이드에 국한된 반면, 라즈베리는 레드헷/칼리와 같은 리눅스 배포판과 고전게임까지 영역이 많이 개발되어 있어 아직은 대중성에서는 라즈베리에 밀린다고 봐야겠다. 하지만 MS가 윈도우를 통한 패권다지기에 들어간 만큼, 그리고 스냅드래곤을 지원하기로 한 만큼 조만간 PINE64도 지원해줄 가능성을 엿본다.

,

MySQL에서 사용자 계정 추가


사용자 추가.


create user 'id'@'host' identified by 'password';


host란?

쉽게 말해서 해당 계정이 어느 컴퓨터에서 접속되는지 확인하는 항목.

대게 로그인을 요청할 경우 로그인 요청시 입력한 계정 또는 본인의 현재 계정 id와 host name으로 자신의 ip 또는 domain name이 넘어간다.


ex) 동일 서버에서 접속하는 경우

    nazuna@localhost

ex) 타 서버에서 접속하는 경우

  - 접속 요청 서버의 도메인이 있다면?

    nazuna@nazuna.kr

  - 도메인이 없다면?

    nazuna@11.22.33.44


위의 host는 접속을 허용할 호스트를 결정하는 항목이기 때문에 아래와 같이 해석된다.

 

localhost or 127.0.0.1

동일 서버내 접속 허용

%

외부에서의 커넥션 전체 허용

11.22.33.44

11.22.33.44 에서의 접속 허용.

nazuna.kr

nazuna.kr서버에서의 접속 허용


보안상의 이유로 localhost 또는 127.0.0.1을 권장하나, 항상 내부접속만 할 수 있는 환경은 근래에 드물기 때문에 자신이 사용하는 서버들에서도 접속이 가능하게 하는 경우가 많다.

'Server > MySQL' 카테고리의 다른 글

서비스 시작 시 LSB 관련 에러  (0) 2017.09.06
MySQL 에서 open_file_limit 변경하는 방법.  (0) 2013.02.25
,
프로필 이미지
It's the Only NEET Thing to do. written by 나즈나
분류 전체보기 (256)
포트폴리오 (2)
여러가지 (160)
Windows (26)
Linux (1)
Server (5)
컴퓨터 (48)
전자기기 (3)
자격증 (3)
모바일 (1)
공유기 (4)
초소형컴퓨터 (3)