18. 원 저작자의 권한을..
고객 (사용자)의 권한을..
MIT / BSD / Apache..
GPL / LGPL ..
19. 주요 License 비교
GPL LGPL MIT BSD Apache
저작권 보호 기능 O O O O O
상용 SW 사용 가능 O O O O O
기능 확장 공개 의무 O O X X X
타인에게 특허권 제공 X X X X O
독점 프로그램에서 사용 가능 여부 X O O O O
라이선스 전파 여부 O O X X X
20. 주요 License 특허권 제공여부
GPL LGPL MIT BSD Apache
저작권 보호 기능 O O O O O
상용 SW 사용 가능 O O O O O
기능 확장 공개 의무 O O X X X
타인에게 특허권 제공 X X X X O
독점 프로그램에서 사용 가능 여부 X O O O O
라이선스 전파 여부 O O X X X
21. 2008년 Open Source License 통
계
GPL (60%)
GPL
MIT (2%) LGPL
BSD
BSD (6%)
MIT
LGPL (7%)
기타
출처 http://bit.ly/JqfTFz , 2008년
22. 2011년 Open Source License 통
계
그리고, 현재는 ?
SourceForge, Code Complex, Google Code, Savannah, RubyForge, GitHub.
GPL
GPL (32%) BSD
MPL
BSD (64%)
기타
MPL (4%)
출처, http://bit.ly/K8dZtU , 2011년
36. Instability
•패키지의 움직일 수 있는 여력을 판단하는
지표
•다른 패키지에 영향을 미치지 않고,
해당 패키지를 쉽게 변경 할 수 있는가?
•Instability I = Ce / (Ca+Ce)
•Ce = Efferent Coupling (Ingoing Dependencies)
•Ca = Afferent Coupling (Outgoing Dependencies )
37. Instability
Instability I = Ce / (Ca+Ce)
당신의 패키지가 다른 사람이 많이 쓴다면,
즉 Outgoing, Ca가 많다면, 여러분의 패키지는 변경하기 어렵다.
반대로 Outgoing하는 Ca가 적고, Ingoing(다른 패키지만 사용만 하는) Ce,
여러분의 패키지는 쉽게 변경해도 된다.
즉 0.0에서 0.3이면 안정적인 버전, 0.7에서 1.0이면 불안정적인 상태다
38. Abstractness
Interface(Abstract) 와 Concrete Class를 비교
A = (#abstract classes / total # of classes)
•Abstract class = interface, abstract다 포함
•Total # class = abstract class + concrete class
•0 이면 concrete class만 있다.
•1 이면 abstract class만 있다.
39. 다시 보는 그래프
다른데서 많이 쓰는
녀석이니 조금 더
abstract를 높여야
돼!
40. 그 외 용어
•Tangled Complexity
•순환 참조가 있어 Boundary를 깰 때
•Cyclomatic Complexity
•분기 문이 많아 hotspot이 될 가망성이 높은 곳
41. 경고!!!
환자의 외부 증상만
고치는 의사가 되지 말자!!
이러한 정보는 좋은 가이드일뿐!!
숫자에 의존하다가
오히려 문제가 보이지 않게 된다.
48. MicroLog4Andorid
소스 내부에서
public class LogtestActivity extends Activity {
static public Logger logger = LoggerFactory.getLogger();
@Override
public void onCreate(Bundle savedInstanceState) {
PatternFormatter formatter = new PatternFormatter();
설정
formatter.setPattern( " %d{ISO8601} [%P] %m %T " );
logger.setLevel(Level.INFO);
// write to LogCat
LogCatAppender logCatAppender = new LogCatAppender();
logCatAppender.setFormatter(formatter);
로그를 보내는
logger.addAppender(logCatAppender);
기능이 없다
// write to text file of SD-card.
FileAppender fileAppender = new FileAppender();
fileAppender.setAppend( true );
fileAppender.setFileName( "microlog4android.log" );
fileAppender.setFormatter(formatter);
logger.addAppender(fileAppender);
55. 로깅 방법
public class LogtestActivity extends Activity {
static public Logger logger = LoggerFactory.getLogger();
@Override
public void onCreate(Bundle savedInstanceState) {
PatternFormatter formatter = new PatternFormatter();
formatter.setPattern( " %d{ISO8601} [%P] %m %T " );
logger.setLevel(Level.INFO);
// write to LogCat
LogCatAppender logCatAppender = new LogCatAppender();
logCatAppender.setFormatter(formatter);
logger.addAppender(logCatAppender);
// write to text file of SD-card.
FileAppender fileAppender = new FileAppender();
fileAppender.setAppend( true );
fileAppender.setFileName( "microlog4android.log" );
fileAppender.setFormatter(formatter);
logger.addAppender(fileAppender);
56. LogDog 로깅 방법
public class LogDogClient extends Application {
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
LogDog.LogDoginitialize(this,"설정.xml");
}
}
63. 버그 리포팅 기능 제공
AppEngine
Jso
Exception,
n
불가피한 종료
64. 버그 리포팅
ReportTime 에러 발생 시간
Model 스마트폰 모델명
National 발생 국가
ErrorName 에러 이름
ErrorClassName 에러 클래스 이름
Line 에러 라인
AppVersion 앱버전
OSVersion OS버전
GPS GPS상태
WiFi WiFi 상태
MobileNetwork 3G상태
ScreenWidth 스크린 크기
ScreenHeight 스크린 크기
CallStack 콜스택 정보
Log 로그 정보
99. About Graph API
• Graph API
– 소셜 그래프의 Object(친구, 페이지, 사진 등)를 다루는 API
• Graph API의 구조
– https://graph.facebook.com/OBJECT_ID/CONNECTION_TYPE
• ID는 사용자, 페이지, 이벤트, 사진 등의 Object ID
– 약 20개의 Object를 지원
– 모든 Object의 ID는 unique하다
– JSON 형태로 응답을 받는다
100. Graph API Example
• https://graph.facebook.com/100001066448386/
신재명 ID
• https://graph.facebook.com/40796308305/
코카콜라 페이지 ID
100
101. Graph API - Connection
• Graph API의 구조
– https://graph.facebook.com/OBJECT_ID/CONNECTION_TYPE
• Connection이란 ?
– Object의 연관(관계) 개념
• User object의 Connection 종류
– Family, friends, album, likes, posts …
– User object 경우 약 25개의 Connection 을 제공
– https://developers.facebook.com/docs/reference/api/user/ 참고
102. Connection - Example
• Graph API 예시
– https://graph.facebook.com/100001066448386/friends
그럼 보안문제는 ???
103. Access Token
• 페이스북 API를 사용하기 위해 Access Token(인
증)이 필요하다.
• Graph API Explorer를 통하여 쉽게 Access Token
을 받아올 수 있음
104. About Graph API
• Graph API Explorer
– Access Token 받을 수 있다
– 각종 Graph API를 테스트 해볼 수 있다
https://developers.facebook.com/tools/explorer#!/tools/explorer
146. 4.4.5 3 Example로 품질 확보하기
1. 자체적인 Target Application 개발
2. 페이스북을 활용하는 „Yellow Ribbon‟ 팀과의 협력
3. 페이스북 헤카톤으로 또 한번의 검증
“안정화된 framework을 얻기 위해 최소 3번의 target application을
기반으로 만들어진 framework 여야 된다.”
- Gof 디자인 패턴의 저자 / 프레임워크의 대가 Ralph Johnson
- Gof 디자인 패턴의 저자 / 프레임워크의 창시자 Ralph Johnson
170. Webkit 사례.
• Contributor 에서 Committer로.
– 3명의 Reviewer의 추천이 필요
– 10 ~ 20개의 Good Patch들.
– 5 Business Days 동안 반대가 없어야 함
• Committer 에서 Reviewer로.
– 4명의 Reviewer 의 추천 /같은 기업/조직 추천 못
함
– 최소 80개의 Goop Patch들
– 5 Business Days동안 반대가 없어야 함
http://www.webkit.org/coding/commit-review-policy.html