Haskell Platform 설치후 cabal 패키지가 설치 되지 않는 문제점 해결!!!

맥(Mac OS X) 2012.04.14 11:56
Xcode 가 4.3으로 업데이트 되면서 설치 경로가 변경되었습니다. 따라서 더이상 /Developer 로 시작되는 경로는 사용하지 않습니다. 그런데 Cabal 패키지의 인스톨의 경우 위 경로를 같다 쓸려고 하기 때문에 컴파일 에러가 나타나게 되지요. 해결 방법은 간단히 sudo pico /Library/Frameworks/GHC.framework/Versions/7.0.4-x86_64/usr/bin/ghc-7.0.4 로 script 파일을 열고 pgmgcc="/Developer/usr/bin/gcc" 로 된 부분을 pgmgcc="gcc" 로 바꾸고 Save 입니다. 다음번 Haskell Platform에서는 아마 이문제가 해결 되 어 있을 거에요. ^^

설정

트랙백

댓글

Mac OS X 10.7 과 Xcode 4.2 그리고 OpenCV 2.0 (1)

맥(Mac OS X) 2012.02.01 01:55
오늘은 Mac OS X 10.7(라이온)에서 OpenCV2.0을 이용한 간단한 코딩과 Xcode 설정을 함꼐 공유합니다.

우선 Lion에서 OpenCV를 간단하게, 즉 편하게 설치하는 방법에는 2가지가 있습니다.

첫번쨰는 MacPort를 사용하는 방법이고 2번쨰는 homebrew를 쓰는 방법입니다.
저는 homebrew를 예전에 설치해 놓았기 때문에 homebrew로 진행합니다.
터미널을 실행한 후

sudo brew update
sudo brew install opencv

이러면 간단하게 컴파일까지 자동으로 하면서 설치가 끝납니다.
기억해 둘 것은 opencv library의 위치입니다.

저같은 경우 brew를 통해 설치되는 모든 라이브러리의 경로를 /usr/local/lib 로 잡았습니다. 만약 다른경로로 설치된다면 경로를 잘 기억해 두었다가 Xcode Setup에서 사용하시면 됩니다.

이제 Xcode의 build setting 창에서 (4.2 버젼을 기준으로 합니다.)
header search paths 를 방금 전에 기억해 둔 라이브러리가 설치 된 경로로 설정 




이것으로서 코딩 준비 완료. 

설정

트랙백

댓글

Clozure CL에서 ASDF 설정하기 (MAC OS X 10.6.2)

맥(Mac OS X) 2010.03.08 09:36
1. Clozure CL을 원하는 경로에 설치한다.(X86) 
 본인의 경우 "~/lisp/ccl"에 설치 ftp://ftp.clozure.com/pub/release/1.4/ccl-1.4-darwinx86.tar.gz 

2. 홈 폴더, 즉 ~/ 밑에 "ccl-init.lisp"파일 과, ".asdf-install"폴더를 만들고 하위 경로에 "site"폴더와 "systems"폴더를 만든다.  

"site"폴더에는 ASDF 패키지가 저장되고, "systems"폴더에는 "해당 패키지명.asd"파일을 link한다. 
예)bordeaux-threads같은 경우 bordeaux-thread.asd  

ccl이 설치된 path를 찾아 본인의 경우 " ~/lisp/ccl/tools/asdf-install/asdf-install.asd" 파일을 "systems"폴더 안에 link한다. - 
ccl-init.lisp 파일을 다음과 같이 수정한다.
	
  (require 'asdf)

        ;; set up the load path for ASDF-INSTALL and then load it
        (pushnew "home:Lisp:ccl:tools;asdf-install;" asdf:*central-registry*)

        ;; Now make sure we can load these ASDF-INSTALLed programs.
        (pushnew "home:.asdf-install;systems;" asdf:*central-registry*)

        ;; load ASDF-INSTALL
        (asdf:oos 'asdf:load-op 'asdf-install)

3. 이제 Aquamacs를 실행해서 ASDF실행!!! ,예: (asdf-install:install usocket) 인증 화면  

4. 의문점 

   로드된 ASDF패키지는 ".asdf-install"이 아니라 ".asdf-install-dir"에 저장된다. 
   
   slime 실행시 log화면에 ".asdf-install"파일을 찾을 수 없다는 Error 메세지가 나온다. 다음 LISP모임에 가서 의문점을 해결해 봐야 겠음.

설정

트랙백

댓글

Mac OS X SERVER(10.6)에서 MAC Port 설치하기

맥(Mac OS X) 2010.03.05 11:24
Rmagick 같은 gem을 설치하려면 그 gem을 설치하기 위한 여러 라이브러리 파일을 설치해야 합니다. 그래서 그것을 간편하게 하기 위한 것이 macport란 프로그램인데 Mac OS X 10.6 server에서는 MacPort프로그램이 사용하는 rsync란 프로토콜을 사용할 수 가 없어 install할 Library 정보를 가져올 수 가 없습니다. 그래서 그 정보를 SVN으로 Local로 받아서 macport와 Sync하는 해결책이 있습니다. 

 자세히 설명드리면 MacPort가 설치된 Directory를 /opt/local 이하라고 가정하고, 

 step1)
cd /opt/local/var/macports/sources
mkdir -p svn.macports.org/trunk/dports
cd svn.macports.org/trunk/dports 
svn co http://svn.macports.org/repository/macports/trunk/dports/ .
svn 명령어가 실행되면 port list를 받아서 저장합니다. 

 step 2) /opt/local/etc/macports/sources.conf 파일 수정
#rsync://rsync.macports.org/release/ports/ [default]
file:///opt/local/var/macports/sources/svn.macports.org/trunk/dports/ [default]
첫번쨰 문장을 주석처리 하고 방금 전에 받은 port list의 정보가 있는 경로명을 추가합니다. 

step3) Port list 정보를 동기화 하
port -d sync
이제 Macport를 예전 방법으로 사용할 수 있습니다. 

설정

트랙백

댓글

Cocoa Design Pattern 1장 요약

맥(Mac OS X) 2010.01.12 21:38
Cocoa Design Pattern 1장 스터디 요약 
  
1. Core Data Support for Model Subsystems 원문 참조

 - Cocoa의 Core data 기술은 model의 서브시스템 개발을 목적으로한다. 그리고 2개의 공통적인 도전적 이슈를 구현한다. (Persistent information Storage, object relationship) 

- 거의 모든 모델들이 정보를 저장할 능력을 필요로 하고, 그것을 다시 불러 들어야 한다. 많은 가능한 구현이 있다. 어떤 프로그램에서는 바이너리 파일 포멧을 사용하고, 다른 것들은 사람이 읽을 수 있는 텍스트 파일이다. 어떤 구현은 관계형 데이타 베이스에 의존하기도 한다. 

 - Core Data는 "object persistance"라고 부르는 기술을 사용한다. 기본적인 접근은 모델 오브젝트를 저장하고, 갇고 있는 정보를 은닉화한다(encapsulation) 그리고 오브젝트의 관계도 마찬가지로 저장한다. 

 - Core Data는 이런 persistant object(바로 위에서 언급된 내용)를 불러 들이거나, 저장할 수 있고 세개의 파일 폿멧을 사용한다.(XML, Binary flat file, SQLite) 

- 거의 대부분 모든 모델에서 객체간의 관계에 대한 관리가 필요하다. Core Data는 1:1 또는 1:다 관계를 지원한다. 각 관계는 필요조건일 수도 있고 아닐 수도 있다. - Core Data는 관계를 정의하거나, 제약조건을 정의할 수 있고 기본 값을 제공하거나, 관계를 검사할 수 있다. 

- NSManagedObject Class는 객체 관계 관리를 내부적으로 지원한다. 

- NSManageObjectContext는 persistant Object Store와 연결을 지원한다. 

2. Application Kit Support for View Subsystems 

- Cocoa의 Application kit은 view와 Controller의 서브 시스템을 포함한다. 

- NSMenu, NSWindow, NSApplication and NSView, NSWindow등은 Cocoa Graphical user interface의 코어이다. 

- 각각의 cocoa application은 NSApplication의 객체이다. 이것은 사용자로 부터 발생되는 이벤트를 받고, 독(dock)에 아이콘을 표시하고, 윈도우를 그린다. 

 - NSView의 서브 클래스들은 기본적인 유저 인터페이스 구현에 사용된다.(Button, Text, Tab View, Progress Indicator etc..) - NSApplication, NSView, NSWindow 는 모든 NSResponder의 서브 클래스이다.

- NSResponder Class는 Application Kit의 핵심!, 사용자 이벤트를 은닉화 하고 Responder chain design pattern을 사용하여 메세지나 이벤트를 가야 되는 객체에 전달한다. 

- NSView는 Hierarchies pattern을 사용한다. 이것은 개발자로 하여금 view안 view를 구성할수 있도록 한다. 예를 들어 어떤 하나의 뷰는 여러개의 sub view로 만들어져 있다. 

- 많은 Cocoa의 기본 사용자 인터페이스는 NSControl의 SubClass로 만들어져 있다. NSControl의 핵심은 Target and action 그리고 Responder Chain이다. 예를 들어 NSDatePicker 객체의 경우 사용자가 DatePicker를 클릭했을때 액션 메세지는 Target에 전달되고, 해당 타겟이 그 메세지를 받을수 없으면, responder chain이 적합한 Target으로 보낸다.

 - NSCell은 Flyweight pattern을 사용한다. 이것은 실행시간과 메모리 소모를 조절한다. NSControl객체는 NSCell의 서브 클래스를 사용한다. 예제로 NSTableView는 NSCell객체를 사용하는데 각각의 컬럼에서 데이터를 표현하는 방법을 결정한다. 

3. Application Kit Support for Controller Subsystems 

- Cocoa의 NSArrayController class는 view객체와 model객체 사이의 조정자 (mediator)역활을 한다. 이것은 기본적으로 저장된 데이터에 제공 즉, 정보에 대한 흐름을 제어한다. 어려운 말이지만, 예를 들어 사용자가 어떤 하나의 view object안에 어떤 값을 입력하지 않은 경우 이것이 기본값을 제공한다. 

- Application Kit은 NSController,NSObjectController,NSArrayController, NSUserDefaultsController, NSTreeController Class등이 있다. 이것들은 Data의 흐름을 관리하며 Cocoa binding 기술을 사용한다. - 여러개의 view와 모델에 대한 조정자인 NSDocument class도 있다. Cocoa's Text Architecture

- NSTextStorage는 모델을 저장하고 Text를 Processing을 한다. - NSTextContainer는 text의 geometric한 모양을 저장한다.

 - NSLayoutManager는 view와 모델사이의 조정자 역활을 하는 Controller처럼 행동한다. - 각각의 NSTextView 객체는 관련된 NSLayoutManager 객체를 요청하고, 그것은 그려진 Text를 제공한다. 하나의 MVC 패턴임을 기억한다. 

Cocoa's Document Architecture 
- Model : NSMangedObjectContext, NSFileWrapper 
- View : NSResponder -->(상속) NSWindow, NSApplication 
- View Controller : NSWindowController, NSDocumentController 
- Model Controller : NSDocument -->(상속) NSPersistentDocument 

- NSDocument는 Template Method Pattern을 사용하는 최적의 예제이다. - NSDocument자체는 Abstract 하다. (C# 이나, Java의 abstract와는 다르다)

- 개발자는 NSDocument를 상속받아 SubClass를 구현한다. 여기에는 모델을 로드하고 저장하는 기능을 지원하는 중요한 베소드를 포함한다. 

- Document-based 프로그램에서는 오직 하나의 NSDocumentController 객체만 있다. 

- 각각의 NSDocument 객체는 연관된 열려진 Document를 관리하고 열려진 Document는 0 또는 하나 그이상의 NSWindowController객체가 연결되어 있다. Cocoa Scriptability 

- Cocoa는 scripting interface를 제공한다. NSApplication 객체는 모든 Graphical Cocoa Application에 관해서, Apple Event라 불리는 메세지를 받아 들일 수 있다. 

- Apple Event는 다양한 Script Language를 통해 보내 질 수 있다. (Ruby, Python)

설정

트랙백

댓글

Object C에 Block(Closure)가 추가된다!!!

맥(Mac OS X) 2009.06.12 10:24
음.. Snow Leopard(Mac OS X 10.6)에서 부터 루비, 파이썬 또는 C#(3.0 이상)에서 구현되는 Function Block, 또는 Closer.. 언어에 따라 개념이 약간 식은 다를 수 있지만, 어째튼 이게 된다고 하네요. 사용방법은,

I = [I  map:^(id obj) { return [obj uppercaseString]; }];
I = [I  filter:^(id obj) { return [obj hasprefix:@"a"]; }];

또는 바로 C언어에서도,

void EvalFuncOnGrid( float(^block)(float) ) {
    int i;
    for ( i = 0; i < 5 ; ++i ) {
        float x = i * 0.1;
        printf("%f %f", x, block(x));
    }
}

void Caller(void) {
    float forceConst = 3.445;
    EvalFuncOnGrid(^(float x){ return 0.5 * forceConst * x * x; });
}

void main(void) {
   Caller();
}

참고 블러그 => http://www.macresearch.org/cocoa-scientists-part-xxvii-getting-closure-objective-c 아이폰에서도 곧 이런 프로그래밍이 가능해지겠네요. ㅋ

설정

트랙백

댓글

Graph Theory(1), 과거로의 여행

Graph Theory 2009.06.02 20:25
A Direct Graph Direct Graph는 G = ( V X E) 로 표현되며, 유한한 vertex 집합과, 유한한 edge들의 집합을 가지며, edge는 source Vertex와 target vertex를 포함한다. 전반적인 vertex 와 edge의 그림은 다음을 참조한다. Open Source인 QuickGraph를 참조로 하여, 코드로 표현해 본다.
public interface IEdge 
{
    TVertex Source {get;}
    TVertex Target { get;}
}
인터페이스 IEdge는 정의대로 Generic으로 선언된 Source Vertex와 Target Vertex를 갇는다.
 e = (u, v)에서 edge e는 Vertex u의 out-edge이고, v의 in-edge이다. 
in-degree(v) 는 incoming edge의 수를 가리킨다. (들어오는 edge) 
out-degree(u) 는 outcoming edge의 수를 가리킨다 (나가는 edge) 
하나의 그래프는 u와 v가 같은 vertex pair로 부터의 multi edge를 허락하며, multi-graph라 한다. 
하나의 path는 연속으로 이어진 edge e1e2....en의 집합이며, 각각의 edge들은 부모 자식 관계가 성립된다. 
하나의 Cycle은 시작 vertex와 끝 vertex가 같은 하나의 path이다. 
하나의 directed acyclic graph는 cycle이 없는 directed graph이다. 
하나의 Weighted directed graph는 각 vertex간에 특정한 값(예를 들어 거리)가 존재하는 directed graph이다. 
하나의 adjacency graph는 direct graph를 표현한 데이타 구조이며, out-edge 만으로 어떤 vertex로 접근하며, adjacency matrix를 만들 수 있다. 
bidirectional graph는 direct graph를 표현한 데이타 구조이며, in-edge,out-edge 둘다 어떤 vertex로 접근할수 있다. 추가.. 

(Object C로 edge 구현)
#import 
#import "Vertex.h"

@interface Edge : NSObject {
	Vertex *source;
	Vertex *target;
}

@property (readonly, retain) Vertex *source;
@property (readonly, retain) Vertex *target;

@end

그리고 implementation은 다음과 같다. Object C 2.0의 Property를 사용한다.
#import "Edge.h"

@implementation Edge

@synthesize source;
@synthesize target;

@end

설정

트랙백

댓글

TortoiseSVN에서 .SVN을 삭제하기

분류없음 2009.05.28 09:41

TortoiseSvn을 사용해서 소스관리를 하다 보면, 가끔 작업하고 있는 소스 폴더를 처음으로 초기화 하고, 다시 import 할 필요가 있습니다. 보통 초기화해주기 위해서 SVN의 경우 hidden file인 .SVN을 삭제하면 되는데요, TortoiseSVN에는 이 메뉴가 없지요. 또한 Command Tool을 사용해서 소스 폴더로 들어가 봐도 .SVN파일이 보이지 않습니다. 이런 경우에는 간단히 소스폴더에서 Contextual 창에 나타나는 Export 메뉴를 선택해서 초기화하고 싶은 현재 소스 폴더를 다시 선택해주면, .SVN 의 삭제 여부를 묻는 창이 나타난답니다. 그러면 “YES” 를 눌러주고, 간단히 작업 끝입니다. ㅋㅋㅋ

설정

트랙백

댓글

Mars Edit 를 사용해서 Tistory에 글을 올려보자 !!!

맥(Mac OS X) 2009.05.21 09:20
팀블로깅에 참여하면서, 걱정거리 중 하나!, 편리한 Writer사용해서 쉽게 글 올리는 방법이지요.
여러 툴을 두고 고민하다가, 회사 불로깅에서 많이 사용하는 Mars Edit 를 사용하게 되었습니다.
사용하는 방법은 간단해요.

Let's Try it!

Network Authentication 에서는 선택한 웹로그(예를 들어 티스토리)의 아이디 패스워드를 입력하면 됩니다.
OK 버튼 누르면 그다음부터 무지 겁나게 쉽습니다. ㅋㅋㅋㅋ


설정

트랙백

댓글

다시 블로그에 발을 들여 놓다.

그냥 글 2009.05.21 09:12
개인 블로깅을 않 한지 거의 1년.....
뭐 개발자 팀 블로깅 에 참여하면서, 깨달은 바가 있어 다시 블로깅을 하게 되었읍니다.
제가 며칠 전 글 하나를 올렸는데, 운영자분께서 팀 블로그 취지에 맞지 않는다며, 돌려보내셨더군요.
팀블로깅의 의미에 대한 고찰과 함께..
아시다시피 팀 블로그에는 브로거 들끼리의 규칙이 존재하고,  포스팅된 글들에 대한 일정한 연관성이 필요한 것에 대해서는 동의 합니다. 그리고 전 당연히 그 취지에 맞게 글을 지웠지요.
근데요, 지운고 난 뒤 며칠이 지나 생각해 보니, 약간의 반론이 생기더군요.(순수하게 개인적 생각입니다 ^^)
팀블로깅의 의미라...
제 생각은 불로깅이란 사회적 연결이 가정 우선시 되야 된다고 봅니다. Social Community 의 형성이 가장 먼저 우선시 되야지요. 팀 블로깅은 그게 더 필요하고요. 왜냐하면, 단순히 정보만 제공한다, 아님 개인의 의사 표현이다 이런 관점에서 보면 되돌아 오는 Response 가 당연히 있어야하기 때문입니다. 온라인에서 내가 이렇게 말했다. 여기서 끝내면, 그건 게시판 입니다. 단순히 정보제공 게시판.... 트랙백, 커멘트 등을 비롯한 블로거들의 의사 소통, 다양한 생각 그리고 거기서 나오는 시너지로 인한 새로운 정보의 결합 이런 것 들이 있어야 되는데, 
지금 제가 활동하는 곳은 MS 홍보 계시판인지, 아니면 새로운 기술 소개 자습서인지 블로깅의 의미를 잘 모르겠더군요. 로마로 가면 로마법에 따르라는 규칙이 있듯이 활동하는 팀 블로그에 대한 불만은 없지만,
그냥 아쉽습니다. 시작한 주제나 의도는 참 좋은 것 같은데...

저도 반성할 점이 있다면, 올린 글에 열정이 없었다는 점.
단지 책이나 인용하고, 남의 블로그 내용만 번역해서 마치 기술 선도자처럼 흉내를 내었다는 점.
제 자신이 마음에 들지 않았습니다. 그래서 글도 올리기 싫었구요. 

이제 처음 으로 돌아가려 합니다.
맨 처음으로...
어색해도, 다시 그 마음으로 말이지요.



설정

트랙백

댓글