twui 는 Twitter 에서 제공하는 Open Source UI Framework 입니다.
Twitter사에서 밝히고 있듯이, iOS Framework 에서 영감을 얻은 즉 iOS Component를 Mac 환경에서 사용할 수 있도록
구현해 놓은 녀석입니다.

위의 예제 이미지를 봐도 UITableView와 매우 흡사합니다. 


아직 Code를 자세히 살펴보진 않았지만,  Code 목록을 보면..
TUITableView, TUITextField 등 iOS의 UIKit에 있는 녀석들과 비슷 한녀석들이 많습니다.

TUITableViewDelegate Protocol도 UITableViewDelegate Protocol 과 매우 유사합니다.


- (void)tableView:(TUITableView *)tableView willDisplayCell:(TUITableViewCell *)cell forRowAtIndexPath:(TUIFastIndexPath *)indexPath; // called after the cell's frame has been set but before it's added as a subview

- (void)tableView:(TUITableView *)tableView didSelectRowAtIndexPath:(TUIFastIndexPath *)indexPath; // happens on left/right mouse down, key up/down

- (void)tableView:(TUITableView *)tableView didDeselectRowAtIndexPath:(TUIFastIndexPath *)indexPath;

- (void)tableView:(TUITableView *)tableView didClickRowAtIndexPath:(TUIFastIndexPath *)indexPath withEvent:(NSEvent *)event; // happens on left/right mouse up (can look at clickCount)


- (BOOL)tableView:(TUITableView*)tableView shouldSelectRowAtIndexPath:(TUIFastIndexPath*)indexPath forEvent:(NSEvent*)event; // YES, if not implemented

- (NSMenu *)tableView:(TUITableView *)tableView menuForRowAtIndexPath:(TUIFastIndexPath *)indexPath withEvent:(NSEvent *)event;



지금 진행하고 있는 Project에 한번 써볼 요량입니다. ㅎㅎ
자세한 내용은 이래저래 좀 더 만져보고 알려드리겠습니다 :)

# Project Page

https://github.com/twitter/twui

# License

Apache License 2.0 을 따릅니다.

한글 번역 자료 : http://yesarang.tistory.com/272 
 

http://www.tizag.com/xmlTutorial/xpathattribute.php

에 따르면 @ATTRIBUTE 로 찾으면 된다고 합니다.

그래서 "/problem/contents@type" 으로 찾아 보았으나.. 

XPath error : Invalid expression

/problem/contents@type

 
위와 같이 XPath Error  가 뜹니다.. ㅠㅡㅠ


그래서 'content' element를 구하고, 거기서 attribute를 가져오는 방식으로 시도 해보았습니다.

[xmlDoc nodesForXPath:@"/problem/contents" error:&error];
CXMLElement *theNode = [theNodes objectAtIndex:0];
[[[theNode attributeForName:@"type"] stringValue]; 


이렇게 하니 자~알 되는군요 !


원래 Unit Test 가 없던 프로젝트에, Unit Test를 집어 넣은 후 undefined symbol error에 봉착했습니다 ;ㅂ;

Test Code에서 사용하고 있는 Real Code를 찾을 수 없는 에러 인데..


위와 같이, Unit Test Target에 App Target이 Dependency 가 걸려 있음에도 불구하고 에러를 내뱉더군요 ;ㅂ;

구글님.. 아니, stackoverflow 님은 역시 모든것을 알고 계시더군요 ㅎㅎ

http://stackoverflow.com/questions/5783294/link-error-while-building-a-unit-test-target

범인은 바로 !!!


이녀석입니다. 

이 옵션이 뭐냐하면,  compile 된 excutable file 에서 symbol을 찾지 못하게 하는 옵션입니다.
그래서 Unit Test Target에서 symbols not found 에러가 발생한것이지요 ~



Unit Test를 실행시킬 Debug Profile 에서만 No 를 걸어 줍니다.
그러면 에러가 사라집니다 ㅎㅎ






LSUIElement 는 OSX Application Activation Policy 와 관련 있는 옵션입니다.. (.plist 파일에서 설정 )


보통 FaceTab for Facebook 과 같은 Status Bar Item base Application 에서 사용하는 옵션입니다.
해당 옵션을 키면, Dock에 노출되지도 않고, Menu가 노출되지도 않습니다.



NSApp이 NSApplicationActiviationPolicyAccessory로써 동작하게 되는것이죠.
 

    /* The application does not appear in the Dock and does not have a menu bar, but it may be activated programmatically or by clicking on one of its windows.  This corresponds to LSUIElement=1 in the Info.plist. */
    NSApplicationActivationPolicyAccessory, 

 

주석에 나와 있는데로, User가 click 을 하거나, 소스코드상에서 강제로 Activate 시키지 않으면 실행이 되지 않습니다.
그래서, 환경설정등을 위해 Window를 띄워도 아래와 같이 Deactivate된 상태로 노출되게 됩니다. 



이를 해결 하기 위해서 아래의 한줄만 써주면 됩니다.

    [NSApp activateIgnoringOtherApps: YES];


OSX 개발 newbie 라... 이런 모드가 있는지도 몰랐고 ;ㅂ;
저 한줄의 코드를 찾기위해, 1시간 가량 구글이랑 놀았습니다. ㅠㅠ
  

https://github.com/Mozketo/LaunchAtLoginController

최근 시작하려고 하는 프로젝트중에 하나가, OSX application이라 이래저래 기술 조사를 하고 있습니다 ㅎ
구현해야하는 기능중에 하나가, Mac이 실행될때, application이 자동 실행되는것인데요,
이래저래 살펴보다가 깔끔하게 정리하고 공유된것이 있어서 소개 드립니다.


Project에 소스를 포함시키고. 아래 method 하나 호출해주면 됩니다.

[self.launchAtLoginController setLaunchAtLogin:YES];

 

내부를  살짝 살펴보니, 

LSSharedFileList 라는 Framework Method들을 사용하고 있는데요,
이게 바로 LaunchService를 담당하는 모듈입니다.
LSSharedFileList에 대한 자세한 설명은 


 
실해시켜보니, 자알 들어갑니다 :)

덧.

Code를 살펴보니, Code 제스타일은 아니지만, 나름 Key-Value Observing도 할수 있게, 잘 되어 있습니다.
안심하고 쓰셔도 될 소스라고 생각됩니다 :) 

Tiger 혹은 그 이하 Version에서는 동작하지 않습니다. 

NSWorkspace *wc = [NSWorkspace sharedWorkspace];
NSString *urlString =@"http://taehoonkoo.tistory.com";
NSURL *url = [NSURL URLWithString:urlString];




참고 자료 :

http://stackoverflow.com/questions/2965615/open-url-with-safari-no-matter-what-system-browser-is-set-to

 

A. Bracket을 같은 줄에 쓰는 스타일 - Java 개발자들이 선호
 

if {
}


 
B. Bracket을 개행한후에 쓰는 스타일 - C 개발자들이 선호

if
{
}



다녔던 회사들중에
C 로 개발하던 회사에서는 Coding Convention 으로 B Style이 표준이었고,
Java로 개발하던 회사는 A Style이 표준이었습니다.

사실 왜 C 개발자들이 B Style을 선호하는지에 대한 별다른 생각이 없어서,
Java로 개발하는 회사로 이적한후 A Style을 따르고,
C로 개발할때도, A-Style로 하도록 습관을 고쳤습니다.

그러다 문득..

if ( a== 1) {
}
else {
}


같은 코드가 있을때 Debuggin 위해 else 조건문만 항상 실행하려고 하니 
B Style에서는

#if 0
if (a  ==1) 
{
}
else
#endif 
{



이렇게만 해주면되는것을

 A Style에서는 조건을 항상 거짓으로 변경하거나
개행한후에 #if 0 를 해주어야 하더군요..
정말 별건 아니지만, ㅋㅋㅋ
B Style로 돌아 갈까 심각하게 고민중입니다 ㅎ

혹시 A Style이 가지고 있는 장점이 있을까요? :)

 


<filter>


<filter-name>encodingFilter</filter-name>


<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>


<init-param>


<param-name>encoding</param-name>


<param-value>UTF-8</param-value>


</init-param>


</filter>


<filter-mapping>


<filter-name>encodingFilter</filter-name>


<url-pattern>/*</url-pattern>


</filter-mapping>



spring 에서 제공하는 CharacterEncodingFilter 를 걸어주면된다.
본인의 프로젝트에서는 UTF-8 을 사용하였음으로,
param-value에 UTF-8을 사용하였다.

 

NSString *myDescription = @"String";

[[UIColor colorWithRed:119/255.f green:119/255.f blue:119/255.f alpha:1.f] set];

[myDescription drawInRect:CGRectMake(10, 200, 85, 15

                     withFont:[UIFont systemFontOfSize:12.f]

                lineBreakMode:UILineBreakModeClip

                    alignment:UITextAlignmentCenter];


drawInRect:를 호출하기전에
[[UIColor blackColor] set];

이런식으로 호출해주시면 됩니다 ㅎㅎ 

JUnit4 에서 Exception 발생이 나야 하는 Test 인 경우를 캐치 하는 방법

@Test(expected=IndexOutOfBoundsException.class)
 public void verifyZipCodeGroupException() throws Exception{		
  Matcher mtcher = this.pattern.matcher("22101-5051");
  boolean isValid = mtcher.matches();			
  mtcher.group(2);		
 }
 
우와 같이 @Test annotation 에 expected argument를 넘겨 주면 된다.  

+ Recent posts