삽질하는플머

'Linux'에 해당되는 글 2건

  1. 크로스 플랫폼으로서의 모노... 5
  2. CrossKylix 갖고놀기

크로스 플랫폼으로서의 모노...

여가생활/Unity,Mono&.Net
유니티 얘기하다가 왜 뜬금없이 모노냐고? 취미는 중간에 샛길로 빠지는 맛에 즐기는 거거덩.

오래전 셀빅이라는 물건이 대한민국 PDA의 대명사이던 시절, 
도스나 윈도 이외의 플랫폼이 주는 상큼 발랄했던 청량감은 내게 오랫동안 잊기 힘든 깊은 자욱을 남겼고
그때문인지 발은 윈도에 묶여있으면서도 마음은 항상 다른 플랫폼을 지향하며 살게 된 듯 하다. 

시스템 잡동사니 -> 게임클라이언트 -> 게임서버 프로그래머의 삶을 살아가는 입장에서 
네이티브 바이너리가 아닌 자바나 닷넷은 쉽게 경험하기 힘든 영역이었다. 
그러다보니 머리가 꽉꽉 막혀버려서 뻘생각과 잡짓을 삶의 낙으로 삼으면서도 보수적인 생각에서 한치도 벗어나지 못했는데
유니티 덕분에 모노디벨롭과  SharpDevelop(귀찮으니 앞으로는 #Develop 이라고 쓰자) 을 설치하고
초보수준이지만 C#을 건드리면서 저절로 튀어나온 탄성!!
야~! 이거 신세상이네~~!! 

어쩌면 모노는 내가 그리도 찾아 해메던 크로스 플랫폼에 대한 종착점이 아닐까 하는 생각까지...
거기에 모노 2.6 부터는 LLVM도 지원하지.
LLVM 의 자바스크립트 백엔드인 emscripten 의 강력함을 생각하면
네이티브 바이너리에 대한 집착을 버려야 할 시점이 생각보다 빨리 올지도 모르겠다. 

아무튼 똥인지 된장인지 알려면 일단 찍어먹어 봐야지.

테스트용으로 구동중인 우분투 10.04 서버에 모노를 설치하자. 
2.8을 설치하면 .Net 4.0 도 지원한다고 하지만... 뭐 나중에 병렬 프레임웍을 사용할 때나 해보고~
나와라~ apt-get~~!!!

sudo apt-get install mono-1.0-gac mono-2.0-gac



이제 #Develop 에서 C#으로 콘솔 응용 프로그램을 하나 만들자. 



모노 1.0과 2.0을 깔았으니 .NET Framework는 4.0이 아닌 3.5!!! 로 설정한다. 

자동으로 만들어지는 Hello World 밑에 한글이 UTF-8 로 잘 빠지는지도 확인할 겸 적절한 메시지를 하나 더 출력하자. 

using System;

namespace console_test
{
    class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Console.WriteLine("우하하하!!");
            
            Console.Write("Press any key to continue . . .\n");
            Console.ReadKey(true);
        }
    }
}


 
윈도에서 실행시킨 화면은 



생성된 console.exe 파일을 리눅스로 옮겨서 돌려보면




정말 세상 좋아졌네.


은양의 프로그래밍 세상에서 C# 서버 코드를 참고, 전송된 바이트값을 바로 리턴하는 간단한 에코서버를 만들었다. 
우분투로 옮기고 실행시킨 뒤 텔넷으로 접속해보니 아주 잘 동작한다. 



이거 짭짤한데~??


내친김에 가상머신에 코분투 10.04 를 설치했다.
데스크탑 폰트는 나눔고딕으로 맞춰주었고 mono-2.0-gac 가 이미 깔려있는 상태. 
여기에 윈폼을 돌리려면  mono-winforms 패키지를 추가로 설치해주어야 한다. 

sudo apt-get install mono-winforms-a11y 




#Develop 에서 간단한 윈폼기반의 실행파일을 하나 만들어 본다. 

 

이 실행파일을 방금 설치한 따끈따끈한 코분투로 이동시킨 뒤 돌려보자. 두근두근~~



첫술에 배부를까마는... 폼 타이틀을 제외한 나머지 글자들이 모두 깨져버린다. 
실망감은 잠시 미루고, 찬찬히 뜯어보면 네모로 표시된 글자의 갯수가 윈도에서 찍으려던 한글의 갯수와 동일하다.  
즉 이것은 유니스크라이브 때도 지겹게 겪었던 폰트문제...

코분투에서 윈폼에 인식된 기본폰트와  다이얼로그 폰트를 다음 코드로 찍어보았다. 

            MessageBox.Show(SystemFonts.DefaultFont.Name);
            MessageBox.Show(SystemFonts.DialogFont.Name);



결과는 "DejaVu sans".
영문폰트라 한글이 없으니 네모로 치환된 것이겠지. 폰트 폴백도 자동으로 되면 좋겠지만... 흠냐리... 

다행히 예전에 링크해 둔 우분투 글꼴 설정에 대한 블로그가 떠올랐다. 
http://anothertimes.tistory.com/22
 

/etc/fonts/conf.d/69-language-selector-ko-kr.conf 에서 sans 구성의 DejaVu Sans 를 아예 날려버리고 나눔고딕만 남겨두자. 

                 <edit name="family" mode="prepend" binding="strong">

                        <string>DejaVu Sans</string> // 이 라인 삭제
                        <string>NanumGothic</string>
                </edit>



재부팅 후 다시 돌려보면 짜잔~~

 

글자 크기가 조금 작은게 불만이네~ 이건 다음에 심심할 때 또 다뤄보자~~

 

CrossKylix 갖고놀기

탐구생활/Delphi
윈도+델파이 환경에서 리눅스용 실행파일을 만들 수 있다는 CrossKylix
http://crosskylix.untergrund.net 

페북의 자칭 컴맹님(타칭 컴퓨터맹주님)이 "70년대 미녀 배우와 지금 데이트하는 느낌" 라고 하셔서 호기심 급발동. 
당연한 이야기지만 Kylix가 필요하다. "Kylix 3 Open Edition" 을 사용해도 괜찮다는군. 
예전 볼랜드의 다운로드 링크는 거의 사라졌는데, 왠일인지 이 링크는 살아있다.
http://download.borlandforum.com/kylix/Kylix3Open/kylix3_open.tar.gz 
더 이상 라이센스 발급은 하지 않지만 CrossKylix와 사용은 가능하다. 
다운받아 적절한 곳에 압축을 풀자.  

crosskylix-110.zip 도 내려받아 압축을 풀고 setup.exe 를 실행시키자. 
설치는 편의상 C:\CrossKylix 에 하자. 




CrossKylix Installer 가 실행되면 아까  kylix3_open.tar.gz 의 압축을 풀어둔 폴더를 선택해준다. 



지원하는 델파이 버전은 6, 7, 8, 2005, 2006이다.
다만 2005 버전 이후로는 콘솔/웹 어플만 만들 수 있고, CossKylix 1.1.0 버전은 델 7에서만 테스트 되었다고 한다. 
델파이 7을 띄우고 CrossKylix가 설치된 폴더 아래 ideplugin 폴더에서 CrossKylix.dpk 패키지를 열어 인스톨 한다.



CrossKylix Options 창이 나타나면 CrossKylix 가 설치된 폴더를 다시 지정하고 OK를 눌러준다. 


 
이것으로 설치는 완료. "Hello World!" 를 출력하는 간단한 예제를 만들어보자.
File->New->Others 에서 Console Application을 선택. 

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
  WriteLn('Hello World!');
  ReadLn;
end.



델파이에서 F9를 눌러 실행하면 뭐 잘 돌아간다. 



이제 Project -> Build with CrossKylix 메뉴를 눌러보자. 



빌드 출력창에 리눅스 바이너리가 생성되었다는 메시지가 나타나면 성공!



이 바이너리를 리눅스(우분투 10.04 서버 LTS. 커널은 2.6.32)로 옮기고 실행시키면 짜잔~~



"Kylix 3 open edition" 이 GPL 2 로 배포되기 때문에 실행시 GPL 관련 메시지가 출력되기는 하지만, 아무튼 잘 돌아간다.


Kylix Open Edition 에서 콘솔 어플리케이션을 만들 때 나타나는 이 GPL 메시지에 대한 꼼수 하나를 덧붙이면, 이 메시지는 프로젝트 소스 내의 {$APPTYPE CONSOLE} 지시자에 반응한다. 따라서 이 지시자를 다음과 같이 수정하면 더 이상 GPL 메시지가 표시되지 않는다.

program Project2;

{$IFNDEF LINUX}
  {$APPTYPE CONSOLE}
{$ENDIF}

uses
  SysUtils;
                 
begin
  WriteLn('Hello World!');
  ReadLn;
end.



당연한 이야기지만, 이렇게 해도 리눅스에서 콘솔 입출력에는 아무런 문제가 없다. 



CLX 를 이용한 GUI 어플리케이션도 만들어 볼까 했는데... 윈도매니저가 깔린 리눅스 시스템이 주위에 하나도 없네. 
다음 기회에 갖고 놀아보기로 하고 오늘은 이만 취침~~


 
주의:
1. 프로젝트 경로명에 공백문자가 있으면 빌드에 애로사항이 꽃핀다.  
2. 64비트 윈도에서 CrossKylix를 C:\Program Files(x86)... 밑에 깔면 마찬가지로 애로사항이 꽃핀다.