November 20, 2008, Thursday, 324

Plan

From IdeA thinKING

Jump to: navigation, search

Contents

Want to do

  1. Google Alert와 FaceBook 연결
  2. Ruby + GTK+ (with more friendly syntax)
  3. Google Streetview와 광고 관계
  4. Mobile에서도 광고가 될까?
  5. 어떤 정보도 저장할 수 있는 API가 제공되는 웹서비스 (Google Base?)
  6. Bug tracking system with Rails
    • Reproduce steps
    • Expected behavior
    • Observed behavior
    • Assigned to
    • Whether it has been fixed or not
    • (from The Joel Test)
    • 이런게 있었네? http://16bugs.com/
  7. FaceBook WordPress plugin
  8. FaceBook Amazon wishlist application
  9. 이력 서비스 (Microformat, Facebook?)
  10. Micro payment (블로그의 정보에 대한 결제? - from 웹 2.0 경제학)
  11. (완료) Google Map과 TatterTools 또는 WordPress plugin 작성
    • /cover 주소에서만 동작하도록
    • API key 셋팅할 수 있도록
  12. (완료) Wordpress 플러그인 SVN에 등록하기
  13. Ruby의 metaprogramming을 이용한 UI 툴킷 만들어 보기
  14. LIFT에서 기억에 남는 내용들
    • 나의 개인정보(디지털 정보뿐 아니라 atom이나 생각같은 것들까지)를 관리해주는 서비스
    • Parallel universe - MMORPG에서 같은 세계의 동시인원수에 대한 한계 때문에 여러 개의 서버에서 같은 세계를 서비스한다. 단 다른 세계간에 상호 작용은 없다.
    • Instanced dungeon - 하나의 동굴에서 많은 party들이 동시에 임무를 수행할 수 있도록 하기 위해 한 party마다 별도로 같은 dungeon을 제공한다.
    • 건물들이 시시각각 용도가 달라진다. school on/off.
  15. BookCover 플러그인 개선
    • 사이드바에 나오는 책들은 log로 관리하고 그 중 최신 몇개나 최근 몇개를 보여주도록 설정 가능하도록 개선
    • 특정 페이지에 내가 읽은 책들을 소개할 수 있도록 관리
  16. Microformat 저장 사이트
    • Simple FaceBook?
    • CSS 제공
    • 모바일 연동 (주소록)
  17. Greader나 Gmail의 star에 레벨 부여
    • 레벨 이상/이하 검색 가능

Want to do

  1. MIT OCW
  2. Study group 참여/개설
    • 주제는 잘 모르는 것으로.
  3. 클래식 음악
  4. 아일랜드의 역사
  5. 이스라엘과 중동의 역사
  6. autoconf
  7. 수학
  8. 다큐멘터리 제작
  9. 글쓰기
  10. LATEX

강의

Study 1

  1. Design Principle > Architecture > Design Pattern > Idiom
    • Design Principle
      • DRY, OCP, LSP(delegation, composition, aggregation), ISP, DIP
      • Any Problem in Computer Science Can Be Solved with Another Layer of Indirection
      • 버그의 수는 코드의 길이에 비례한다. 언어등과는 무관.
      • OCP를 지키지 않으면 기능 추가시 기존의 코드가 변경되며 변경된 라인 그 자체뿐 아니라 변경된 코드가 있는 블록, 함수, 클래스등이 모두 잘못될 수 있으며 체크해야 할 코드가 길어진다.
  2. Schedule
    • Design Principles
    • Design Principles and Design Patterns
    • Design Principles, Design Patterns and Refactoring
    • TDD (Test Driven Development)
    • Boost Library : smart_ptr, tuple, regex, function, bind, python, spirit, iterator
  3. It's your job to balance making sure the customer gets the functionality they want with making sure your code stays flexible and well-designed.
  4. The one constant in software development - CHANGE
  5. OO Principles
    • Encapsulate what varies
    • Code to an interface rather than to an implementation
    • Each class in your application should have only one reason
    • Classes are about behavior and functionality
  6. Using proven OO design principles results in more maintainable, flexible, and extensible software.
  7. 소프트웨어 품질의 잣대 (ities)
    • 신뢰성 (reliability)
    • 효율성 (efficiency)
    • 인간 공학 (human engineering, readability)
    • 이해 용이성 (understandability)
    • 수정 용이성 (modifiability, maintainability)
    • 테스트 용이성 (testability)
    • 이식성 (portability)
  8. Symptons of poor design
    • Rigidity - The design is hard to change.
    • Fragility - The design is easy to break.
    • Immobility - The design is hard to reuse.
    • Viscosity(끈끈함, 점도) - It is hard to do the right thing.
    • Needless complexity - Overdesign.
    • Needless repetition - Mouse abuse.
    • Opacity - Disorganized expression.
  9. OCP
    • 1988, Bertrand Meyer
  10. SRP
    • Tom DeMarco and Meilir Page-Johns - Cohesion <-> coupling
    • Each responsibility is an axis of change - orthogonal
    • If a class has more than one responsibility, then the responsibility become coupled.
    • In the context of the SRP, we define a responsibility to be "a reason for change."
  11. Belady and Lehman’s Laws:
    • Software will continually change.
    • Software will become increasingly unstructured as it is changed.
  12. Leveson’s Law:
    • Introducing computers will not reduce personnel numbers or costs.
  13. Q1: OCP 같은 것을 사용하면 너무 클래스들이 많아져서 더 복잡해지는 것 같다.
    • A1: 먼저 high cohesion, low coupling에서 high cohesion을 지키다 보면 실제 너무 많아지지는 않는 경향이 있다.
    • A2: 많은 클래스에 있는 짧은 함수들과 하나의 클래스에 있는 긴 함수중 어떤게 좋을까? (물론 짧은게...)
  14. Q2: OCP나 DIP나 다 비슷한 것 같다.
    • A1: 실제 Design Principles들은 서로 orthogonal하지 않다. 예제에서 봤듯이 DIP violation은 OCP violation을 유도하는 경향이 있고 DIP가 잘 되어 있다면 OCP를 만족시키기 쉬운 구조가 된다.

Study 2

  1. Good enough (예제로 Refactoring to patterns(RtP)에 있는 hello world 사용)
  2. 패턴에 익숙하지 않으면 더 복잡해 보인다. (RtP pp32)
  3. Architectural > Pattern > Idiom > Skill( == Idiom?)
  4. 우선 순위를 결정할 때는 risk가 큰 것부터.
  5. Test case 작성
    • 요구 사항을 만족하는지에 대해 작성
    • 기본적인 예외 사항에 대해 작성
    • Code inspection이나 review에서 발견한 문제점 수정시 작성
    • 실제 발견된 문제점 수정시 작성
  6. 툴 사용시 필요한 경우에만
    • 그렇지 않으면 툴 때문에 해야 하는 성가신 작업이 생긴다.
    • 실제 내가 어떻게 해야 할지 모르는 문제를 툴이 해결해줄 수는 없다.
    • DOORS의 경우 backtracking이 가능하다고 하나 실제 규격에 맞게 문서를 작성하는 것이 더 힘들다. (물론 잘 사용할 경우엔 다른겠지만)
    • Wiki나 blog가 대안?
      1. history가 저장된다.
      2. 최신 버전 유지가 쉽다.
      3. 이쁘다?
  7. 남에게 부끄럽지 않은 코딩을 하기
  8. 유행에 뒤쳐지지 않는 코딩을 하기
  9. The advantage of using objects is that I can define things that are responsible for themselves.
  10. A good design rule is that objects should be responsible for themselves and should have those responsibilities clearly defined.
  11. There are 3 different perspectives for looking at objects: conceptual, specification, and implementation.
  12. Expanding our horizons
    • objects -- as a bundle of data and methods -- as things with responsibilities.
    • encapsulation -- as hiding data -- as the ability to hide anything.
    • inheritance -- for specialization and reuse -- as a method of classifying objects.
    • containing variation of behaviors in objects.
  13. Two steps procedures of design process of the classes
    • The relationship between the specification perspective and the conceptual perspective is this: It identifies the interface I need to use to handle all of the cases of this concept (that is, commonality).
    • The relationship between the specification perspective and the implementation perspective is this: Given this specification, how can I implement this particular case (that is, variation).
  14. There are two basic strategies to follow in creating designs to deal with the variations:
    • Find what varies and encapsulate it.
    • Favor composition over inheritance.
  15. One way of measuring the quality of a design is to see how well it handles variation.

Study 3

  1. Refactoring

Study 4 or 5?

  1. UML 관련 내용
  2. C++ 관련 내용
    1. 클래스 읽는 법
    2. 생성자, 소멸자와 object의 lifetime.
    3. 상속과 생성자, 소멸자 순서
    4. 생성자의 초기화 리스트 수행 순서
    5. RAII (shared_ptr, deleter)
  3. Joel Test