기본 콘텐츠로 건너뛰기

2016의 게시물 표시

elementary os(linux)

이전까지 하모니까 리눅스(민트 한글화)를 사용하다가 얼마전에 elementary os로 갈아탔습니다. 물론 리눅스를 대학교때 잠깐 사용했다가 회사에서는 Windows용 프로그램을 개발하다 보니 사용할 일이 없었습니다. 그러다가 하모니카라는 리눅스를 접하게 되었고 이제 데스크탑으로 사용해도 되겠구나라는 생각이 들었습니다. 거의 윈도우와 유사하게 꾸며 놓았습니다. 리눅스의 가장 큰 걸림돌의 하나인 인터넷 뱅킹 문제는 모바일의 발전으로 주로 모바일로 처리하기 때문에 더 이상 걸림돌이 되지 않습니다.(관공서도 이제 IE 종속에서 탈피하겠다고 하지 점점 리눅스 사용 환경이 나아질거라 생각됩니다.) 최근 GMarket에서 상품을 구매했는데 아무런 어려움이 없었습니다. 한동안 하모니카를 사용하다가 웹을 뒤지던 중 elementary os라는 것을 알게되었고 화려한 UI를 가졌다는 소리에 혹해 거의 사용하고 있지않던 도시바 노트북에 설치했습니다.(이전에는 VM에 하모니카를 설치했습니다.) 결과는 대만족입니다. 마치 맥과 윈도우가 결합되어 있는 느낌입니다. 계속 윈도우를 사용해왔음에도 커다란 이질감은 느끼지 못했습니다. (웬만한 프로그램들은 다 구할 수 있고, 물론 윈도우에서 사용하던 Office 만큼의 품질을 가진 Office가 없다는게 아쉽기는 합니다.) 설치한 프로그램을 아래와 같습니다. 1. 님프(한글 입력기) 2. 포커스 라이터(풀 스크린 워드 프로세스) 3. Telegram(아쉽게도 아직 한글 입력이 되지 않습니다) 4. Thunderbird - 메일 클라이언트 5. Firefox 6. Texstudio 7. Double Commander - Total Commander같은 화면 분할 파일 관리 프로그램 8. Remmina - 원격제어 프로그램 elementary os 는 기본적으로 PPA를 추가하는 기능이 비활성화되어 있습니다. 아래와 같은 명령으로 PPA 추가 기능을 활성화 할 수 있습니다. s

Microstation J의 텍스트 폰트 일괄 수정

아래 매크로를 사용하여 텍스트의 폰트를 일괄 수정할 수 있습니다. Font No는 특정 텍스트 파일(C:\Temp\ChgFnt.dat)에 입력하였습니다. '-------------------------------------------------------------'' main - Entry point' '-------------------------------------------------------------Sub main Dim element as New MbeElement Dim filePos as Long Dim S$,FontNo as Integer 'read fence data from file Index = 0 Open "C:\Temp\ChgFnt.dat" For Input As 1 Do While Not Eof(1) Input #1,S FontNo = Val(S) Loop Close 'up to here ' read the first element filePos = element.fromFile (0) Do While filePos >= 0 If element.type = MBE_Text Then element.font = FontNo stat = element.rewrite(filePos, 0, 0) End If filePos = element.fromFile (filePos + element.fileSize) Loop End Sub

MyWBlock(사용자가 선택한 Entity를 블럭 파일로 만들기)

AutoCAD의 WBLOCK과 유사한 간락한 버전입니다. /// /// wblockentity /// [ CommandMethod ( "MyWBlock" , CommandFlags . Modal )] public static void ExecuteViewSetting () {      PromptSelectionResult prRes = AcEx . Editor . GetSelection ();      if ( prRes . Status != PromptStatus . OK ) return ;      ObjectIdCollection objIds = new ObjectIdCollection ();     ObjectId [] objIdArray = prRes . Value . GetObjectIds ();      double dMinX = 0 , dMinY = 0 , dMaxX = 0 , dMaxY = 0 ;      /// Copy objectIds to objectIdCollection      foreach ( ObjectId id in objIdArray )      {          using ( Transaction txn = id . Database . TransactionManager . StartTransaction ())          {              Entity acEnt = txn . GetObject ( id , OpenMode . ForRead ) as Entity ;              if ( null != acEnt )              {                 try                  {                      if (( dMinX == 0 ) && ( dMinY == 0 ) && ( dMaxX == 0

인터페이스의 단순화

이번 프로젝트를 하면서 서비스의 인터페이스를 통일화 시켜 2개의 Method만을 외부로 노출시켰습니다. 입,출력 인자는 둘다 DataSet을 이용하였습니다. 실제 구현부는 별도의 Dll로 만들었고 해당 Dll을 로딩하여 클래스 인스턴스를 생성하여 특정  Method을 호출하는 방식으로 서비스를 구성하였습니다. 이 방식의 장점은 서비스 Method가 늘어날 필요가 없다는 것입니다. 단점으로는 넘겨줄 인자의 정보를 파악하기가 힘들다는 것입니다. 구현 정보를 외부로 덜 노출한다는 점과 인터페이스가 단순하다는 점에서 이 구현 방식을 사용하였습니다. [인터페이스] [OperationContract] DataSet GetCommandParam(string sAssemblyName, string sClassName); [OperationContract] DataSet ExecuteCommand(string sAssemblyName, string sClassName, DataSet oParam); [구현부] Assembly oAssembly = AssemblyHolder.GetAssembly(sAssemblyName); if (null != oAssembly) { Type oClassType = oAssembly.GetType(sAssemblyName + "." + sClassName); MethodInfo oMethodInfo = oClassType.GetMethod("GetParam", BindingFlags.Public | BindingFlags.Instance); if (null != oMethodInfo) { object oClassIntance = Activator.CreateInstance(oClassType, null); object[] oParamArray = new object[] { sPrjCode, sSiteID }; re