프로그래밍 언어 포럼 순위 (랭킹)

http://www.tiobe.com/tiobe_index/index.htm

TIOBE Programming Community Index for September 2009

September Headline: PHP enters top 3 for the first time

The TIOBE Programming Community index gives an indication of the popularity of programming languages. The index is updated once a month. The ratings are based on the number of skilled engineers world-wide, courses and third party vendors. The popular search engines Google, MSN, Yahoo!, Wikipedia and YouTube are used to calculate the ratings. Observe that the TIOBE index is not about the best programming language or the language in which most lines of code have been written.

The index can be used to check whether your programming skills are still up to date or to make a strategic decision about what programming language should be adopted when starting to build a new software system. The definition of the TIOBE index can be found here.

Position
Sep 2009
Position
Sep 2008
Delta in PositionProgramming LanguageRatings
Sep 2009
Delta
Sep 2008
Status
11Java19.383%-1.33%A
22C16.861%+1.48%A
35 PHP10.156%+0.91%A
43 C++9.988%-0.73%A
54 (Visual) Basic9.196%-1.29%A
67 Perl4.528%-0.31%A
78 C#4.186%-0.15%A
86 Python3.930%-1.08%A
99JavaScript2.995%-0.14%A
1011 Ruby2.377%-0.38%A
1110 Delphi1.972%-1.08%A
1218 Pascal0.961%+0.56%A
1316 Lisp/Scheme0.842%+0.42%A--
1413 PL/SQL0.819%+0.12%A
1514 SAS0.781%+0.14%A
1624 ABAP0.705%+0.42%A
1712 D0.588%-0.68%B
1842 Objective-C0.585%+0.48%B
1917 Lua0.507%+0.09%B
2025 MATLAB0.506%+0.25%B


Long term trends

The long term trends for the top 10 programming languages can be found in the line diagram below.


Other programming languages

The complete top 50 of programming languages is listed below. This overview is published unofficially, because it could be the case that we missed a language. If you have the impression there is a programming language lacking, please notify us at tpci@tiobe.com.

PositionProgramming LanguageRatings
21RPG (OS/400)0.457%
22ActionScript0.438%
23COBOL0.421%
24Ada0.389%
25Scratch0.383%
26Fortran0.373%
27Transact-SQL0.367%
28Logo0.365%
29FoxPro/xBase0.321%
30S-lang0.281%
31PowerShell0.263%
32Scala0.238%
33Erlang0.231%
34Prolog0.230%
35NXT-G0.229%
36ML0.228%
37Haskell0.211%
38Tcl/Tk0.210%
39Smalltalk0.175%
40Bourne shell0.162%
41Alice0.161%
42Caml/F#0.161%
43Focus0.159%
44LabVIEW0.159%
45Forth0.157%
46Groovy0.154%
47PL/I0.136%
48Awk0.136%
49J0.136%
50ABC0.123%


The Next 50 Programming Languages

The following list of languages denotes #51 to #100. Since the differences are relatively small, the programming languages are only listed (in alphabetical order).

  • AD, Algol, Alpha, APL, Applescript, Beta, Boo, C shell, cg, CL (OS/400), Clean, Clojure, cT, Curl, Dylan, Eiffel, Euphoria, Factor, Falcon, Fan, Icon, IDL, Inform, Io, JavaFX Script, Lingo, MAD, Magic, Maple, Mathematica, MAX/MSP, Modula-2, Modula-3, MUMPS, Natural, Oberon, Occam, Oz, Postscript, Progress, Q, R, Revolution, REXX, SIGNAL, SPSS, SuperCollider, VBScript, VHDL, XSLT



September Newsflash - Brought to you by Paul Jansen

  • This month the following changes have been made to the definition of the index:
    • CPython and JPython have been added to the Python grouping thanks to Dan Stromberg
    • Dave Leffingwell pointed out that it is also possible to program in an object-oriented way in MATLAB. So MATLAB is now 50% object-oriented in our overviews
  • To see the bigger picture, please find the positions of the top 10 programming languages from 4, 10 and 25 years ago in the table below.

    Programming LanguagePosition
    Sep 2009
    Position
    Sep 2005
    Position
    Sep 1999
    Position
    Sep 1984
    Java114-
    C2211
    PHP35--
    C++43211
    (Visual) Basic5634
    Perl6411-
    C#7722-
    Python8826-
    JavaScript9921-
    Ruby1025--


  • The previous winners of the "Language of the Year" award are shown below.

    YearWinner
    2008 C
    2007 Python
    2006 Ruby
    2005 Java
    2004 PHP
    2003 C++

  • In the tables below some long term trends are listed about categories of languages. The object-oriented paradigm lost 1.5% to procedural and functional languages in one month's time. The popularity of dynamically typed languages seems to stabilize (see trend diagram below).

    CategoryRatings Sep 2009Delta Sep 2008
    Object-Oriented Languages 52.8% -4.3%
    Procedural Languages 43.1% +3.3%
    Functional Languages 2.9% +0.7%
    Logical Languages 1.2% +0.3%


    CategoryRatings Sep 2009Delta Sep 2008
    Statically Typed Languages 58.3% -0.4%
    Dynamically Typed Languages 41.7% +0.4%



Frequently Asked Questions

  • Q: What definition of programming languages has been used?

    A: A language is considered a programming language if it is Turing complete. As a consequence, HTML and XML are not considered programming languages. This also holds for data query language SQL. SQL is not a programming language because it is, for instance, impossible to write an infinite loop in it. On the other hand, SQL extensions PL/SQL and Transact-SQL are programming languages. ASP and ASP.NET are also not programming languages because they make use of other languages such as JavaScript and VBScript or .NET compatible languages. The same is true for frameworks such as Ruby on Rails, ColdFusion, Cocoa, and technologies such as AJAX. Finally, we have also excluded assembly languages, although Turing complete, because they have a very different nature.

  • Q: How are dialects of languages grouped?

    A: Some languages are grouped together because they are very similar to each other. An example is the language entry Basic which covers Visual Basic, QBasic, Microsoft Basic, etc. VB.NET has been added as well to the Visual Basic entry because it is often referred to as Visual Basic. The ratings for a collection of languages is calculated by taking the maximum of all individual entries (not its sum!).

  • Q: Am I allowed to show the TIOBE index in my weblog/presentation/publication?

    A: This is OK provided that you refer to its original source: www.tiobe.com.

  • Q: I would like to have the complete data set of the TIOBE index. Is this possible?

    A: We spent a lot of effort to obtain all the data and keep the TIOBE index up to date. In order to compensate a bit for this, we ask a fee of 1,500 US$ for the complete data set. This might seem a lot of money but it is considered strategic data. The data set runs from June 2001 till today. It started with 25 languages back in 2001, and now measures more than 150 languages at least 10 times per month. The data are availabe in comma separated format. Part of the deal is that new data will be send to you for 1 extra year. Please contact sales@tiobe.com for more information.

  • Q: What happened to Java in April 2004? Did you change your methodology?

    A: No, we did not change our methodology at that time. Google changed its methodology. They performed a general sweep action to get rid of all kinds of web sites that had been pushed up. As a consequence, there was a huge drop for languages such as Java and C++. In order to minimize such fluctuations in the future, we added two more search engines (MSN and Yahoo) a few months after this incident.

  • Q: Why is YouTube used as a search engine for the TIOBE index?

    A: First of all, YouTube counts only for 7% of all ratings, so it has hardly any influence on the index. YouTube has been added as an experiment. It qualified for the TIOBE index because of its high ranking on Alexa. YouTube is a young platform (so an indicator for popularity) and there are quite some lectures, presentations, programming tips and language introductions available on YouTube.

'Computer Science' 카테고리의 다른 글

GSM : Overview of the Global System for Mobile Communications  (0) 2009.10.04
휴대폰 개발 프로세스  (1) 2009.09.27
파이썬 로보틱스 프로그래밍  (0) 2009.09.20
ePub 의 개요 [전자책 표준]  (0) 2009.09.03
WebOS  (0) 2009.08.30
[Home][Software][Curriculum][Hardware][Community][News][Publications][Search]


Pyro Software

Installation resources:

  • PyroInstallation - installation manual and download instructions
  • PyroLiveCD - New! Pyro Live Bootable CD. Just boot and run Pyro, Player, Stage, Gazebo, and more. Nothing to install.
  • PyroFAQ - Feedback and Frequently Asked Questions

Related resources:

For d0cumentation on using Pyro, please see PyroCurriculum


[Home][Software][Curriculum][Hardware][Community][News][Publications][Search]


CreativeCommons View Wiki Source | Edit Wiki Source | Mail Webmaster

http://pyrorobotics.org/?page=PyroSoftware

'Computer Science' 카테고리의 다른 글

휴대폰 개발 프로세스  (1) 2009.09.27
프로그래밍 언어 포럼 순위 (랭킹)  (1) 2009.09.27
ePub 의 개요 [전자책 표준]  (0) 2009.09.03
WebOS  (0) 2009.08.30
MS Windows에서 DevC++로 GTK프로그래밍하기  (0) 2009.08.17
[알아봅시다] 교육의 틀을 바꾸는 `디지털교과서`

인터넷ㆍ멀티미디어 활용 입체적 교육

교재ㆍ참고서PC 환경서 구현
자료공유ㆍ업데이트 쉬워 효율적



"여러분, 수업을 시작해 볼까요?"

선생님의 말에 어린 학생들은 책상서랍에서 태블릿PC를 꺼냅니다. 전자펜을 다루는데 이미 능숙해진 아이들은 각 과목별로 제작된 교과서 콘텐츠를 실행하는 것으로 수업 준비를 마칩니다. 수학시간에는 화면에 문제의 답을 적고 바로 답을 확인할 수 있고 영어시간에는 헤드셋으로 원어민의 영어발음과 자신의 발음을 비교해가며 부족한 부분을 보충합니다. 국어시간에는 그림 속 말풍선에 기발한 대사를 써 넣고 사회시간에는 인터넷과 연결해 유물과 특산물 등 사진과 동영상을 실시간으로 확인할 수 있습니다. 전자교탁에는 각 학생들의 태블릿PC 화면을 직접 모니터링, 제어할 수 있고 개인별 첨삭지도도 가능합니다. 학부모들은 자녀들이 그날 학교에서 작성한 과제물이나 학습 내용을 인터넷을 통해 바로 확인할 수 있습니다.

디지털교과서 사업이 대규모 적용을 검토하는 단계로 접어들고 있습니다. 디지털교과서란 기존의 교과서, 참고서, 문제집, 용어사전 등을 통합해 PC 환경에서 볼 수 있도록 한 것으로, 동영상, 애니메이션 등 다양한 멀티미디어 자료를 추가해 활용성을 높인 교재입니다.

정부는 정보통신기술과 네트워크 발달이라는 최근의 환경 변화를 반영해 커뮤니케이션 능력과 정보 습득 능력, 창의적 사고력을 갖춘 새로운 인재를 육성하기 위해 기존의 서책형 교과서를 대체하는 디지털교과서 사업을 시작했습니다.

지난 2004년 초등학교 5학년 사회, 과학 교과를 웹 기반, CD롬, PDA 기반으로 만든 것을 시작으로 초등학교 5, 6학년 사회, 과학 교과를 개발했고 2006~2007년에 걸쳐 시범학교에 적용해 그 효과를 측정하는 연구가 진행됐습니다.

디지털교과서 사업은 2007년 당시 교육인적자원부가 `디지털교과서 상용화 방안'을 발표하면서 확대 적용을 위한 전환기를 맞게 됩니다. 초등학교 5학년 6개 교과에 대한 개발이 추진됐고 상호운용성과 확장 가능한 플랫폼이 개발됐습니다. 정부는 최근 90여 학교, 4700여대 규모의 디지털교과서 사업을 발주한데 이어 향후 6학년, 중학교, 고등학교 과목을 단계적으로 개발하고 2011년까지 연구학교를 지속적으로 확대할 계획입니다.

디지털교과서가 본격 보급되면 교사와 학생, 학생과 학생, 교사와 학부모 등 교육을 둘러싼 모든 환경에 큰 변화가 예상됩니다.

무엇보다 다양한 멀티미디어의 활용으로 학생들의 학습에 대한 집중력이 높아질 것으로 기대됩니다. 동영상은 물론 웹카메라, 녹음기 등을 지원하는 단말기 덕분에 학생들은 스스로 사고하고 학습하는 능력을 갖게 됩니다. 그동안 글자로만 대했던 동식물, 특산물, 해외도시 등을 이제는 동영상과 사진 등으로 확인할 수 있어 입체적인 교육이 가능해집니다.

항상 인터넷에 연결돼 있기 때문에 교사들도 학급 특성에 맞춰 다양한 참고자료를 제시할 수 있고 학교간 이러한 자료를 공유함으로써 더 효과적인 교수법 연구가 가능해 집니다. 교과서 내용을 업데이트 할 때도 서책형 교과서와 달리 인쇄 과정이 필요 없어 새로운 내용을 추가 삭제하기도 용이합니다.

자녀 교육에 대해 학부모들이 능동적으로 참여할 수 있는 통로도 마련됩니다. 오늘 자녀들이 수업 시간에 작성했던 내용을 인터넷을 통해 확인할 수 있어 교사와 함께 심층 면담이 가능해지고 특히 직장을 갖고 있는 학부모도 손쉽게 관련 정보에 접근할 수 있습니다.

물론 일부 우려되는 사항도 있습니다. 전례가 없는 방식인 만큼 교사들의 교수법에 대한 연구가 필수적입니다. 성장기 PC 이용 시간이 늘어나는 것에 대한 건강 상의 문제도 더 깊이 검토가 필요하다는 지적입니다.

무엇보다 인터넷, PC 등 새로운 기기와 문화가 교육에 접목되는 것에 대해 우려하는 시각이 있습니다. 실제 대화보다 디지털 커뮤니케이션이 강조되면서 공동체 의식이 희박해지고 있다는 지적은 꾸준히 계속되고 있고 클릭을 통해 답을 찾아가는 이런 방식이 과연 어린 학생들의 사고력을 키워줄 수 있을 것인가에 대한 근본적인 물음도 있습니다.

일부에서는 최근의 어린이들이 호흡이 긴 논리적 사고를 하지 못하는 가장 중요한 이유로 서로 연결고리 없이 호기심에 따라 클릭을 반복하는 인터넷 문화를 지목합니다.

아직 찬반 논란이 분분한 상황이지만 디지털교과서가 교육의 가장 본질적인 부분의 변화가 될 것이라는 점에 대해서는 전문가들 대부분이 동의합니다. 과거의 변화가 입시전형, 교과서 내용 등 주로 제도에 초점을 맞춘 반면 디지털교과서는 교사와 학생이 커뮤니케이션하고 지식을 전달하는 방식 즉 `교수법'에 대한 근본적 변화를 요구하기 때문입니다.

정부는 올해까지 디지털교과서 시범학교를 100개 이상으로 늘리는 한편 단계적으로 중학교, 고등학교 교과과정을 추가 개발할 예정입니다. 미래사회에서 요구하는 창의적이고 자기주도적인 인재 육성을 지향한다는 디지털교과서, 그 거대한 실험이 어떤 성과를 보일 수 있을지 주목됩니다.

박상훈기자 nanugi@

'기본 카테고리' 카테고리의 다른 글

Refactoring Tools Review - Part I  (0) 2009.10.03
Ansi C 리펙토링  (0) 2009.10.03
C/C++ Programming Links  (0) 2009.09.02
대학시절 자료복구[일부] http://comphy.iptime.org/~old/  (0) 2009.08.31
PocketPC 일본어  (0) 2009.08.27

사람은 공평하게 태어나지 못하더라도,

사회 시스템은 단지 현재뿐만아니라 과거 미래를 모두 절충하여,

다소 구조적인 사회를 이루어 가는 것이 아닌가 한다.

나이가 많고 적고를 떠나서라도,

업적이 있기에 선임자가 되며, 미래가 있기에 후임자가 되는 것이 아닌가 한다...

여기 월급 많이 받는 높은 사람(교수,임직원)이니 지 월급 50%도 안되는 가지고,

순진한 사람들의 업적을 가로채려는 자들이 이끌어 왔으니,

대학의 미래도 나아가 사회의 미래도 없는것이고....

당연히 취업도 못하게 된다......

여기 싸가지 없는 공고를 보라... 자기들이 경영과 발전을 잘시킨다고 가르치기 까지 하면서...

자기 월급의 50%도 안되는 사탕으로 사람들의 아이디어를 훔치려는 구조를 가진데가 있다.

... 이런 사기를 "경영"이라 한다....

http://biz.hallym.ac.kr/cyber/cyber011.asp?mode=read&sno=80

==============================================================================

///// File Include Section ///// ///// File Include Section /////
[공지]더 좋은 대학 만들기 연구 공모

///// 이미지 체크부분 ///// 2006-10-31 나민수 수정 2006-10-31 나민수 수정 ///// 이미지 체크부분 /////더 좋은 대학 만들기
연구 공모


● 주최/주관: 한림대학교 경영학부 / 한림경영연구소
● 공모 대상: 한림대학교 대학생 및 대학원생
● 공모 주제: 한림대학교, 더 좋은 대학 만들기!
◯ 주제예시: 학생 만족도 조사를 통한 발전방안 도출
좋은 대학생활 사례 개발 및 좋은 대학 문화 만들기
학생 스스로의 변혁을 통한 더 좋은 대학 만들기
더 좋은 학과(학부)를 만들기 위한 방안과 학생의 역할
우리대학 장점과 이의 효과적 홍보 방안
우리대학 문제점과 이의 극복 방안
늘 머물고 싶은 대학 캠퍼스 만들기
대학 홍보 전략과 학생의 역할
● 공모 방법: 한림경영연구소 방문접수
◯ 주소: 강원도 춘천시 한림대학길39 한림대학교
다산관 10511 한림경영연구소
● 시상 계획
구분시 상 자시상 내역편수대상한림대학교 총장상장과 상금 200만원1 편최우수상한림대학교 총장상장과 상금 100만원1 편우 수 상한림대학교 총장상장과 상금 50만원4 편
※ 심사위원회의 결정에 따라 시상작의 수는 변경될 수 있음



● 추진 일정
구 분기 간비 고 연구보고서 작성기간06.22(월)-09.25(금) 방학기간을 충분히 활용 연구보고서 제출기간09.07(월)-09.25(금) 한림경영연구소 수시 접수 심사 및 1차 결과 발표09.28(월)-10.02(금) 시상작의 2배수인 12편 선정 연구보고서 발표10.05(월)-10.09(금) 발표일정 개별통지 2차 결과 발표 및 시상10.12(월)-10.14(수) 시상작 6편 선정
※ 최종 발표자들 중 선정되지 못한 학생들에게도 소정의 상품 지급
● 연구 보고서 작성 및 제출 요령
◯ 최대 3인으로 연구팀을 구성할 수 있음
◯ 요약문, 연구 보고서, 그리고 발표자료 세 가지를 제출
( 9월 25일까지 다산관 5층 경영연구소에 직접 제출)
◯ 연구 제목 및 주제는 ‘더 좋은 대학 만들기’와 관련하여 자유롭게 선정
◯ 연구 방법은 제한 없음 (설문을 통한 통계분석, 사례분석 등)
◯ 연구 보고서의 작성은 형식에 제한 없이 새로운 시도를 환영함
◯ 2009년 09월 25일 18시까지 한림경영연구소로 제출
● 심사 기준
기 준내 용배 점보고서 논리성연구 내용 전개의 논리성과 일관성 10 보고서 창의성독창성과 참신성 20 보고서 타당성연구방법 및 결론 도출 과정의 타당성과 적절성 10 보고서 활용성제시된 방안의 실현 가능성과 효과 40 발표 능력논리적 전달 능력 및 발표 태도 20
※ 학생의 시각에서 ‘더 좋은 대학을 만들기’ 위한 창의적이고 실행 가능한 아이디어를 높이 평가함. 특히 학생 주도적인 운동으로서 지속성을 가질 수 있다면 높은 평가를 받을 수 있을 것임.
● 결과물의 활용
◯ 시상작을 중심으로 ‘더 좋은 대학 만들기’ 책자 발간
◯ 한림경영연구소 최종 분석 보고서 작성을 통한 정책적 제안

3 September 2009 19:19:49


EPUB

[출처] MobileRead

ePub는 국제 디지털 출판 포럼(idpf)의 오픈 ebook 포럼에서 정의한 공개 포멧이다.

ePub는 XHTML과 XML 중에서 선택적인 스타일 쉬트(optional style sheet)에 기초하며,

ePub의 전신은 OEB(Open eBook) 표준이다.


- ePub의 정의

".epub"는 앞으로 널리 쓰일 디지털 책이나 출판물을 위한 XML 포멧의 확장자이다.

".epub"는 세가지 공개 표준으로 구성되는데, OPS (Open Publication Structure),

OPF (Open Packaging Format), 그리고 OCF (Open Container Format)이다.

".epub"는 출판사들이 고객에게 단 한개의 파일로 디지털 출판을 제공하여,

신뢰성있는 하드웨어/소프트웨어 방식으로 암호화한 디지털 책을 고객들에게 제공한다.


- ePub의 용례

ePub는 두가지의 파일로 서비스를 하는데, 소스파일 포멧과 최종 사용자 포멧이다. 이 이유는 파일들을

쉽게 제공하도록 모아서 담아 서비스하기 위함이다. 모아 담는 컨테니너는 일반적으로 zip 파일 포멧이다.


?
- ePub 리더 소프트웨어

Adobe Digital Editions - This reads Adobe DRM ePUB ebooks as well as non-DRM.
AZARDI - read ePUB and verify conformance.
Bookworm
Calibre - Windows, MacOS X and Linux
FBReader, Windows and more
OpenBerg Lector - Browser plugin
Stanza, Windows, MacOS X, and iPhone

- ePub 하드웨어

• Sony Reader PRS-700 - Sony Readers also support Adobe ADEPT (DRM) technology (EPUB/PDF)
• Sony Reader PRS-505 - Among other things, the V1.1 (Jul'08) firmware update added ePub support to the 505.
• Hanlin V3 and all its clones Bebook, EZ Reader, etc. See the full list - No DRM, A new firmware release (August 2009) uses ADE software that can support DRM
• JetBook - No DRM
• Bookeen Cybook Opus - Full support using ADE.

- ePub Creation software

• Adobe InDesign
• Atlantis Word Processor - can convert any TXT/RTF/DOC/DOCX d0cument to ePub.
• Calibre Click the "hammer" icon next to the search bar and set the output format to EPUB.
• CSS check tool
• DAISY Pipeline - creation and checking tools
• eCub - a simple to use EPUB and MobiPocket ebook creator
• ePUB check tool
• ePUB Tools - A collection of open source tools used to create and check ePUB
• EScape - an add-on for Open Office (ODT), not for commercial use.
• Convert uploads to ePUB at Feedbooks.com. You don't have to hit the "publish" button. Just edit your text, and download the ePub preview.
• OpenBerg Rector
• Python converter posted by MishaS - His latest version of oeb2epub is at his site
• Sigil is an editor (word processor) for directly changing or creating ePUB files.
• Stanza - converter for PC and Mac, typically strips formatting prior to conversion.
• Web2FB2 is a web site that will convert a URL to FB2 and ePUB format.

[edit] Specificatons
http://www.idpf.org/specs.htm contains the specifications for this format. In particular check the version 2.0 OPS and OPF specs and the version 1.0 OCF spec. The Informational d0cuments are also quite useful in understanding the intent and content.
[edit] OCF
A typical OCF is a zip file that might look like:
mimetype
META-INF/
container.xml
[manifest.xml]
[metadata.xml]
[signatures.xml]
[encryption.xml]
[rights.xml]
OEBPS/
Great Expectations.opf
cover.html
chapters/
chapter01.html
chapter02.html
… other HTML files for the remaining chapters …
[edit] mimetype
The first file in the ZIP Container MUST be a file by the ASCII name of ‘mimetype’ which holds the MIME type for the ZIP Container (i.e., “application/epub+zip” as a 20 character ASCII string; no padding, CR/LF, white-space or case change). The file MUST NOT be compressed nor encrypted and there MUST NOT be an extra field in its ZIP header.
[edit] OPF
The Open Packaging Format (OPF) Specification, defines the mechanism by which the various components of an OPS publication are tied together and provides additional structure and semantics to the electronic publication.
Specifically, OPF:
Describes and references all components of the electronic publication (e.g. markup files, images, navigation structures).
Provides publication-level metadata. Specifically it should include: dublin core formatted data
Specifies the linear reading-order of the publication.
Provides fallback information to use when unsupported extensions to OPS are employed.
Provides a mechanism to specify a declarative table of contents (the NCX).
An example:
<package version="2.0" xmlns="http://www.idpf.org/2007/opf"
unique-identifier="BookId">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:opf="http://www.idpf.org/2007/opf">
<dc:title>Alice in Wonderland</dc:title>
<dc:language>en</dc:language>
<dc:identifier id="BookId" opf:scheme="ISBN">
123456789X
</dc:identifier>
<dc:creator opf:role="aut">Lewis Carroll</dc:creator>
</metadata>
<manifest>
<item id="intro" href="introduction.html"
media-type="application/xhtml+xml" />
<item id="c1" href="chapter-1.html"
media-type="application/xhtml+xml" />
<item id="c2" href="chapter-2.html"
media-type=application/xhtml+xml" />
<item id="toc" href="contents.xml"
media-type="application/xhtml+xml" />
<item id="oview" href="arch.png"
media-type="image/png" />
</manifest>
<spine toc="ncx">
<itemref idref="intro" />
<itemref idref="toc" />
<itemref idref="c1" />
<itemref idref="c2" />
<itemref idref="oview" linear="no" />
</spine>
</package>
[edit] OPS
The Open Publication Structure (OPS) Specification describes a standard for representing the content of electronic publications.
Specifically:
The specification is intended to give content providers (e.g. publishers, authors, and others who have content to be displayed) and publication tool providers, minimal and common guidelines that ensure fidelity, accuracy, accessibility, and adequate presentation of electronic content over various Reading Systems.
The specification seeks to reflect established content format standards.
The goal of this specification is to define a standard means of content description for use by purveyors of electronic books (publishers, agents, authors et al.) allowing such content to be provided to multiple Reading Systems and to insure maximum presentational equivalence across Reading Systems.
[edit] XHTML
A conforming OPS d0cument must support the following XHTML constructions.
XHTML 1.1 Module Name
Elements (non-normative)
Notes
Structure
body, head, html, title
the default rendering for body is consistent with the CSS property page-break-before having been set to right (which behaves like always on one-page Reading Systems), but may be overridden by an appropriate style sheet declaration.
Text
abbr, acronym, address, blockquote, br, cite, code, dfn, div, em, h1, h2, h3, h4, h5, h6, kbd, p, pre, q, samp, span, strong, var
The optional attribute cite may be used in blockquote, q, del and ins to provide a URI citation for the element contents. Reading Systems are not required to process or use the referenced URI resource, whether or not the resource is listed in the Manifest.
Hypertext
a
Reading Systems may use or render a URI referenced physical resource not listed in the Manifest (i.e., it is not a component of the Publication), but they are not required to do so.
List
dl, dt, dd, ol, ul, li

Object
object, param
The object element is the preferred method for generic object inclusion. When adding objects whose data media type is not drawn from the OPS Core Media Type list or which reference an object implementation using the classid attribute, the object element must specify fallback information for the object, such as another object, an img element, or descriptive text.
Presentation
b, big, hr, i, small, sub, sup, tt

Edit
del, ins

Bidirectional Text
bdo

Table
caption, col, colgroup, table, tbody, td, tfoot, th, thead, tr

Image
img
The inline element img should only be used to refer to images with OPS Core Media Types of GIF (http://www.w3.org/Graphics/GIF/spec-gif89a.txt), PNG (RFC 2083), JPG/JFIF (http://www.w3.org/Graphics/JPEG) or SVG (http://www.w3.org/TR/SVG11/). The required URI attribute, src, is used to reference the image resource, which must be listed in the Manifest.
The required alt attribute should contain a brief and informative textual description of the image. This text may be used by Reading Systems as an alternative to, or in addition to, displaying the image. The text is also an acceptable fallback for an img with src referencing a non-OPS Core Media Type for which no viable fallback was found in the manifest.
Client-Side Image Map
area, map

Meta-Information
meta

Style Sheet
style
The type attribute of the style element is required and must be given the value of text/css or the deprecated text/x-oeb1-css.
Style Attribute (deprecated)
style attribute

Link
link
The link element allows for the specification of various relationships with other d0cuments. Reading Systems must recognize external style sheet references specified via the href attribute and the associated rel attribute (for the values rel="stylesheet" and rel="alternate stylesheet".)
Base
base


[edit] Relationships
Relationship to NVDL
This specification uses the NVDL language (see http://standards.iso.org/ittf/PubliclyAvailableStandards/c038615_ISO_IEC_19757-4_2006(E).zip) as a means to unambiguously define the interaction between the various schemas used in this specification. NVDL allows for interaction and validation between various XML schema languages. See Appendix A for a normative NVDL definition of OPS.
This specification does not require the use of NVDL tools to validate OPS d0cuments, although such tools are available and may be used for validation.
Relationship to XHTML and DTBook
This specification recognizes the importance of current software tools, legacy data, publication practices, and market conditions, and has therefore incorporated certain XHTML 1.1 Document Type Modules and DTBook as Preferred Vocabularies. This approach allows content providers to exploit current XHTML and DTBook content, tools, and expertise.
To minimize the implementation burden on Reading System implementers (who may be working with devices that have power and display constraints), the Preferred Vocabularies do not include all XHTML 1.1 elements and attributes. Further, the modules selected from the XHTML 1.1 specification were chosen to be consistent with current directions in XHTML.
Any construct deprecated in XHTML 1.1 is either deprecated or omitted from this specification; CSS-based equivalents are provided in most such cases. Style sheet constructs are also used for new presentational functionality beyond that provided in XHTML.
Relationship to CSS
This specification defines a style language based on CSS 2. (Note that the CSS 2.1 specification is currently still at "Working Draft" status.) The style sheet MIME type text/x-oeb1-css has been deprecated in favor of text/css.
Relationship to XML
OPS is based on XML because of its generality and simplicity, and because XML d0cuments are likely to adapt well to future technologies and uses. XML also provides well-defined rules for the syntax of d0cuments, which decreases the cost to implementers and reduces incompatibility across systems. Further, XML is extensible: it is not tied to any particular type of d0cument or set of element types, it supports internationalization, and it encourages d0cument markup that can represent a d0cument’s internal parts more directly, making them amenable to automated formatting and other types of computer processing.
Reading Systems must be XML processors as defined in XML 1.1. All OPS Content Documents must be valid XML d0cuments according to their respective schemas.
Relationship to XML Namespaces
Reading Systems must process XML namespaces according to the XML Namespaces Recommendation at http://www.w3.org/TR/xml-names11/. For example:
xmlns:ops="http://www.idpf.org/2007/ops"
[edit] Tips
It is possible to make an eBook that conforms to the standard by placing the entire book contents in one XHTML file but the performance will be impacted by this decision. For best performance a standard size book should be divided into several files as the full file needs to be loading into memory at once. This is usually accomplished by separating the files by chapter.
Some mobile devices cannot handle large ePUB files. Generally this is caused by having an XHTML file that is too large. If the file can be expanded the large XHTML file may be able to be broken into multiple files.
The ePub file format has proper support for TOC, through the use of TOC.NCX files. Not all reader applications support this currently. This is d0cumented in the DTBook standard.
Make sure all tags are complete (no dangling tags). htmltidy does a great job here
Get rid of as many tables as you can! A lot of these CHM type files put the entire content of the page in one table and that causes tons of problems
"normal" tables tend to get truncated in the reader due to being too wide. Convert these tables to some intelligent lists with <hr/>'s around them
Play with the CSS to get the colors cleaned up. A lot of the "color" gets translated to light grey and it sucks. Best just to change everything to black that you can
<pre> blocks of code can go off the page as well. Use the CSS to shrink their font size and, at worst, reformat the blocks to keep them into a 70 character width at 6pt.

'Computer Science' 카테고리의 다른 글

프로그래밍 언어 포럼 순위 (랭킹)  (1) 2009.09.27
파이썬 로보틱스 프로그래밍  (0) 2009.09.20
WebOS  (0) 2009.08.30
MS Windows에서 DevC++로 GTK프로그래밍하기  (0) 2009.08.17
임베디드 OS란 무엇인가  (0) 2009.08.15

[출처] http://www.gtkforums.com/about988.html

C Programming Tutorials
Note: They reason for all of they differant C tutorials is because some explain a particular language features better than others.

C Programming 2nd Edition
This is the classic c book read this if you want to learn c.
[PDF] http://madison-project.wikidot.com/local--files/tutorials/The_C_Programming_Language.pdf

Another Good C Programming Site/Tutorial
[Html] http://www.exforsys.com/tutorials/c-language/c-programming-an-overview.html

More Good C Tutorials
[Html] http://irc.essex.ac.uk/www.iota-six.co.uk/c/

All the C you need to know for GTK+
[Html] http://www.freesoftwaremagazine.com/articles/all_the_c_you_need_for_gtk_development
[Pdf] http://www.freesoftwaremagazine.com/node/2543/pdf

Small C Tutorial from randu.org
[HTML] http://randu.org/tutorials/c/index.php

C Reference Card (ANSI) "Note: Needs to be replaced with one that is easyer to read"
[Pdf] http://users.ece.utexas.edu/~adnan/c-refcard.pdf

A Tutorial on Pointers and Arrays in C.
[Html] http://pweb.netcom.com/~tjensen/ptr/pointers.htm
[Pdf] http://pweb.netcom.com/~tjensen/ptr/pointers.pdf

A Tutorial on Pointers and Memory
[Pdf] http://cslibrary.stanford.edu/102/PointersAndMemory.pdf

If you need small straight to the point examples on how to use differant C lang features & functions.
[Html] http://www.java2s.com/Tutorial/C/CatalogC.htm
[Html] http://www.java2s.com/Code/C/CatalogC.htm

ISO/IEC 9989 Committee Draft "See Annex A (Language syntax summary) this is usefull if you want to build a C syntax parser that can do (Symbol name auto-completion & Symbol lists ) for a Gtk+ code editor."
[HTML] http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1124.pdf

Glibc Tutorials
Multi-Threaded Programming With POSIX Threads
[Html] http://users.actcom.co.il/~choo/lupg/tutorials/multi-thread/multi-thread.html

Embedded Scripting
How to create C/Lua module with swig.
[pdf] http://madison-project.wikidot.com/local--files/tutorials/C_Lua_Swig.pdf

Lua Swig Tutorial
[Html] http://www.swig.org/Doc1.3/Lua.html

How to use Lua with C.
[Html] http://www.gtkforums.com/viewtopic.php?t=1995

How to use Python with C
[HTML] http://www.gtkforums.com/viewtopic.php?p=9055#9055

Gtk+ Programming Tutorials "GUI Toolkit"
GTK+ 2.x Tutorial for Beginners
This tutorial is for beginners describing some of the most common widgets.
[HTML] http://zetcode.com/tutorials/gtktutorial/

How to set the color of a widget
[HTML] http://ometer.com/gtk-colors.html

Gnome2 Developers Guide "Gtk+ 2.0"
[PDF] http://home.cs.tum.edu/~siegel/files/tog2dg.pdf

Gtk+ 2.0 Tutorial
[HTML] http://library.gnome.org/devel/gtk-tutorial/stable/

Gtk+ 2.0 Tree View tutorial
[HTML] http://scentric.net/tutorial/treeview-tutorial.html
[PDF] http://scentric.net/tutorial/treeview-tutorial.pdf
Sources link for the treeview tutorial: http://scentric.net/tutorial/treeview-tutorial.tar.gz

Gtk+ 2.0 Text View tutorial
[HTML] http://www.bravegnu.org/gtktext/
[PDF] http://www.bravegnu.org/gtktext/gtktext-0.4.pdf

Gtk+ 2.0 GtkComboBox Widget Tutorial
[HTML]Part1 http://tadeboro.blogspot.com/2009/04/gtkcombobox-widget-part-1.html
[HTML]Part 2 http://tadeboro.blogspot.com/2009/04/as-promised-im-back-with-second-part-of.html
[HTML]Part 3 http://tadeboro.blogspot.com/2009/04/gtkcombobox-widget-part-3.html

GtkDialog tutorial
[HTML] Part 1: http://tadeboro.blogspot.com/2009/04/gtkdialog-tutorial-part-1.html
[HTML] Part 2: http://tadeboro.blogspot.com/2009/04/gtkdialog-tutorial-part-2.html

Wrapping and resizing GtkLabel dynamically
[HTML] http://tadeboro.blogspot.com/2009/05/wrapping-adn-resizing-gtklabel.html

Using pop-up windows
[HTML] http://tadeboro.blogspot.com/2009/05/using-pop-up-windows.html

Gtk memory management in a nutshell
[HTML] http://www.gtkforums.com/viewtopic.php?t=2412

Glade & Gtk+ Tutorials "Gtk+ Gui Designer"
GTK+ and Glade3 GUI Programming Tutorial
[HTML] http://www.micahcarrick.com/12-24-2007/gtk-glade-tutorial-part-1.html

Creating GtkTreeView with Glade-3
[HTML] Part 1: http://tadeboro.blogspot.com/2009/04/creatin-gtktreeview-with-glade-3.html
[HTML] Part 2: http://tadeboro.blogspot.com/2009/04/creating-gtktreeview-with-glade-3-part.html

Speeding up libglade by precompiling xml-files into shared objects
[PDF] http://syslog.movial.fi/uploads/compiled-libglade.pdf

Glib Tutorials "Gtk+ Utility Library"
Using GLib's GKeyFile Parser
[HTML] http://www.gtkbook.com/tutorial.php?page=keyfile

GNOMEnclature: The wonders of GLib
[HTML] Part 1: http://www.ibm.com/developerworks/linux/library/l-glib.html
[HTML] Part 2: http://www.ibm.com/developerworks/linux/library/l-glib2.html

Writing Unit Tests with GLib
[Html] http://blogs.gnome.org/timj/2008/06/24/23062008-writing-unit-tests-with-glib/

Looks like the start of a glib tutorial "Dated 2008"
[Html] http://w00d5t0ck.info/gnome_tutorial/gnome_tutorial.html

GObject tutorial
[HTML] http://madison-project.wikidot.com/local--files/tutorials/gobject-0.10.0-html.tar.gz

Hildon "Hildon is a user interface toolkit based in GTK that targets mobile devices."
Hildon Tutorial
[HTML] http://maemo.org/api_refs/5.0/beta/tutorial/html/

Pango Tutorials "Gtk+ Text Formating & Rendering Library"
The Pango connection:
[HTML] Part1: http://www.ibm.com/developerworks/library/l-u-pango1/
[HTML] Part 2: http://www.ibm.com/developerworks/library/l-u-pango2/

Cairo "2D Vector Graphics Library"
Cairo graphics tutorial.
It is done in the C programming language.
This tutorial is for beginners and intermediate developers 100+ pages.
[HTML] http://zetcode.com/tutorials/cairographicstutorial/

Cairo Concepts
A one-of-a-kind introduction to cairo concepts and models.
[HTML] http://cairographics.org/tutorial/

Writing a Widget Using Cairo and GTK+ 2.0
[HTML] Part1: http://www.gnomejournal.org/article/34/writing-a-widget-using-cairo-and-gtk28
[HTML] Part2: http://www.gnomejournal.org/article/36/writing-a-widget-using-cairo-and-gtk28-part-2

Clutter "2D/3D Multimedia Toolkit" - "Gtk+, Cairo, Gstreamer, Libvlc, Webkit, MD2, Mozembed plugins available."
Programming with Clutter 0.8
[Html] http://www.openismus.com/d0cuments/clutter_tutorial/0.8/docs/tutorial/html/
[Pdf] http://www.openismus.com/d0cuments/clutter_tutorial/0.8/docs/tutorial/pdf/programming-with-clutter.pdf
Programming with Clutter 0.9
[HTML] http://www.openismus.com/d0cuments/clutter_tutorial/0.9/docs/tutorial/html/index.html

Clutter Plugins

Gtk+, Cairo, Gstreamer Plugins
http://www.clutter-project.org/sources/

Webkit Plugin
git clone git://git.o-hand.com/webkit

VLC Plugin
http://github.com/rno/clutter-vlc/tree/master

MD2 Plugin
http://github.com/bpeel/clutter-md2/tree/master

Mozembed Plugin
http://git.clutter-project.org/cgit.cgi?url=clutter-mozembed/tree/tests

Gstreamer Tutorials "Audio, Video Multimedia Toolkit"
GStreamer is a multimedia framework written in the C programming
language with the type system based on GObject."
Application Development Manual:
[HTML] http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/index.html
[PDF] http://gstreamer.freedesktop.org/data/doc/gstreamer/stable/manual/manual.pdf
Plugin Writer's Guide :
[HTML] http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/index.html
[PDF] http://gstreamer.freedesktop.org/data/doc/gstreamer/stable/pwg/pwg.pdf

GStreamer Quick Hello World type Tutorial
[HTML] Part1: http://bluwiki.com/go/GStreamer
[HTML] Part2: http://bluwiki.com/go/GStreamer/C_Hello_World

GStreamer Plugin Development Video
* An introduction to GStreamer terms, usage and the GStreamer pipeline model.
* Construction of simple pipelines using available GStreamer elements, building a video decoding pipeline
* Look at the requirements for various types of processing elements: Data sources, sinks, filters, converters.
* Development of a simple custom plugin for processing raw video frames
* Extending the custom element in various ways, to render video effects, provide custom communication with the application.
Participants should be familiar with GObject/GLib, as GStreamer code relies heavily on both.
[HTML] http://lca2007.linux.org.au/talk/272.html
[VIDEO] http://mirror.linux.org.au/pub/linux.conf.au/2007/video/talks/272.ogg

Opengl Tutorials "3D Graphics Library"
OpenGL Programming Guide "RedBook"
[PDF] http://madison-project.wikidot.com/local--files/tutorials/OpenGL_Programming_Guide.pdf

OpenGL Reference Manual "BlueBook"
[Pdf] http://madison-project.wikidot.com/local--files/tutorials/OpenGl_Reference_Manual.pdf

GtkGLExt is an OpenGL extension to GTK+ 2.0 or later
[HTML] http://www.k-3d.org/gtkglext/Main_Page <-- Download source for lots of C/Gtk+ example code.

osgGtk is a library of C based Gtk+ and C++ based Gtk-- widgets to support OpenSceneGraph (OSG) applications.
The library also includes several example applications such as osgviewerGtk and osgviewerGtkmm.
[HTML] http://osggtk.wiki.sourceforge.net/main <--Download source for C/Gtk+ example code.

Lexical Analyzer & Parser Generator
Lex & Yacc / Flex & Bison Primer
[Html] http://ds9a.nl/lex-yacc/cvs/output/lexyacc.html#toc1

A little manual for Lex and Yacc
[Html] http://pltplp.net/lex-yacc/

Flex Manual "Lex"
[Html] http://flex.sourceforge.net/manual/

Bison Manual "Yacc"
[Html] http://www.gnu.org/software/bison/manual/html_mono/bison.html
[Pdf] http://www.gnu.org/software/bison/manual/pdf/bison.pdf

Markup language Note: You will find API References and example usage on the provided links.
LibYAML is a YAML 1.1 parser and emitter written in C.
[Html] http://pyyaml.org/wiki/LibYAML

MJSON M's JSON parser is a small library completely written in plain ISO C which handles d0cuments described by the JavaScript Object Notation (JSON) data interchange format.
[Html] http://mjson.sourceforge.net/index.html

LibAxl (or just Axl) is an implementation of the XML 1.0 standard specification written in C
[Html] http://www.aspl.es/axl/

Libxml2 is the XML C parser and toolkit developed for the Gnome project
[Html] http://www.xmlsoft.org/

Libcroco is a general CSS parsing and manipulation library written in C for the GNOME project. It provides a CSS2 parser (SAC and CSSOM API), and a CSS2 selection engine. It uses Libxml2 as underlying XML platform and the GLib as a portability layer.
[Html] https://launchpad.net/libcroco

Portable Document Format (PDF)
Poppler "Poppler is a PDF rendering library and is used with cairo to render PDF's"
[HTML] http://poppler.freedesktop.org/
[Example Viewer] http://www.gtkforums.com/viewtopic.php?p=9086#9086

libharu "libHaru is a free, cross platform, open source library for generating PDF files."
[HTML] http://libharu.org/wiki/Main_Page
[HTML] http://libharu.org/wiki/Documentation
[NOTE] Cairo can also produce PDF's but libharu does a way better job and has tons more features.

Programming & Hardware
The Linux Kernel Module Programming Guide
[Html] http://tldp.org/LDP/lkmpg/2.6/html/index.html

Bluetooth for Programmers "Describes Basic Bluetooth Concepts"
[PDF] http://people.csail.mit.edu/rudolph/Teaching/Articles/PartOfBTBook.pdf
An Introduction to Bluetooth Programming
[Html] http://people.csail.mit.edu/albert/bluez-intro/

LibParted Handbook "Note: LibParted is a library used to create, destroy, resize and copy PC disk partitions"
[Html] http://www.ilug-cal.org/wiki/index.php/Libparted_Handbook

HAL Tutorial "Hardware abstract layer"
[HTML] http://www.share-linux.com/hal1.php
[HTML] http://www.share-linux.com/hal2.php
[PDF] http://madison-project.wikidot.com/local--files/tutorials/Hal_Tutorial.pdf

LIRC Programming Guide "LIRC is a package that allows you to decode and send infra-red signals of many (but not all) commonly used remote controls."
[HTML] http://www.lirc.org/html/technical.html#applications

Libusb Programming Tutorial "libusb is a suite of user-mode routines for controlling data transfer to and from USB devices on Unix-like systems without the need for kernel-mode drivers."
[HTML] http://www.linuxforums.org/forum/linux-tutorials-howtos-reference-material/10865-developing-usb-device-drivers-userspace-using-libusb.html

Libburnia Api Referance and Code Examples "libburnia is a project for reading, mastering and writing optical discs. Currently it is comprised of libraries named libisofs, libburn, libisoburn, a cdrecord emulator named cdrskin, and an integrated multi-session tool named xorriso. The software runs on Linux and FreeBSD."
[HTML] http://api.libburnia-project.org/libburn/
[HTML] http://api.libburnia-project.org/libisofs/index.html
[HTML] http://api.libburnia-project.org/libisoburn/

Libmtp "libmtp is a LGPL library implementation of the Media Transfer Protocol (MTP), a superset of the Picture Transfer Protocol (PTP). "
[HTML] http://libmtp.sourceforge.net/index.php <--Download for API Reference and Examples

Libgpod "libgpod is a shared library to access the contents of an iPod. It supports playlists, smart playlists, playcounts, skipcounts, ratings, podcasts, and cover art. Audio and video are supported, as well as the photo database."
[HTML] http://www.gtkpod.org/libgpod/docs/ <--Download for Examples

Libgphoto2 "libgphoto2 is the core library designed to allow access to digital camera by external programs."
[HTML] http://www.gphoto.org/proj/libgphoto2/ <-- Download for API Reference and Examples

V4L2 "Video4Linux2 or V4L2 is a video capture application programming interface for Linux. Several USB webcams, TV tuners, and other devices are supported. Video4Linux2 is closely integrated with the Linux kernel. Video4Linux2 was named after Video for Windows (which is sometimes abbreviated "V4W"), but is not technically related to it."
[HTML] http://v4l2spec.bytesex.org/spec-single/v4l2.html#AEN163

DBus Tutorial "Message bus system"
[HTML] http://www.share-linux.com/dbus1.php
[HTML] http://www.share-linux.com/dbus2.php
[PDF] http://madison-project.wikidot.com/local--files/tutorials/Dbus_Tutorial.pdf

Database Programming
MySQL Database C API proramming tutorial
[Html] http://zetcode.com/tutorials/mysqlcapitutorial/

PostgreSQL
-------------
PostgreSQL Database libpq C API tutorial
[HTML] http://www.postgresql.org/docs/8.4/static/libpq.html

Accessing PostgreSQL From Code (Beginners C)
[HTML] http://tutorials.freeskills.com/professional-linux-programming-part-1-accessing-postgresql-from-code.htm

Berkley DB C API
-----------------
Getting Started with Data Storage:
[Pdf] http://www.oracle.com/technology/d0cumentation/berkeley-db/db/gsg/C/BerkeleyDB-Core-C-GSG.pdf
[Html] http://www.oracle.com/technology/d0cumentation/berkeley-db/db/gsg/C/index.html
Getting Started with Transaction Processing:
[Pdf] http://www.oracle.com/technology/d0cumentation/berkeley-db/db/gsg_txn/C/BerkeleyDB-Core-C-Txn.pdf
[Html] Getting Started with Transaction Processing
Getting Started with Replication:
[Pdf] http://www.oracle.com/technology/d0cumentation/berkeley-db/db/gsg_db_rep/C/Replication-C-GSG.pdf
[Html] http://www.oracle.com/technology/d0cumentation/berkeley-db/db/gsg_db_rep/C/index.html
Referance Guide:
[Html] http://www.oracle.com/technology/d0cumentation/berkeley-db/db/ref/toc.html
Programmatic API:
[Html] http://www.oracle.com/technology/d0cumentation/berkeley-db/db/api_c/frame.html

Hamster DB
--------------
[Site] http://hamsterdb.com/index
[PDF] http://hamsterdb.com/public/dl/tutorial.pdf
[Examples] http://hamsterdb.com/d0cumentation/samples

Sqlite embedded database.
[HTML] http://souptonuts.sourceforge.net/readme_sqlite_tutorial.html

Archiving Libraries
SCZ
[HTML] http://scz-compress.sourceforge.net/
[API] http://scz-compress.sourceforge.net/api.html

QuickLZ
[HTML] http://www.quicklz.com/manual.html
[Examples] http://www.quicklz.com/download.html

Zlib
[HTML] http://www.zlib.net/zlib_docs.html
[Examples] http://www.zlib.net/zlib_how.html

Libarchive "C library and command-line tools for reading and writing tar, cpio, zip, bzip , gzip, ISO, and other archive formats"
[HTML] http://code.google.com/p/libarchive/

Network Libraries
Licurl "libcurl is a free and easy-to-use client-side URL transfer library, supporting FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS and FILE. libcurl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cook!es, user+password authentication (Basic, Digest, NTLM, Negotiate, Kerberos4), file transfer resume, http proxy tunneling and more! "
[HTML] http://curl.haxx.se/libcurl/c/libcurl-tutorial.html
[API] http://curl.haxx.se/libcurl/c/
[Examples] http://curl.haxx.se/libcurl/c/example.html

glibcurl "glibcurl consists of a small amount of C code which you can include in your program. It integrates the event loops of libcurl and glib. This means that a GTK+ program is able to wait for clicks, button presses etc. at the same time as waiting for data to arrive on the network sockets maintained by libcurl."
[HTML] http://atterer.net/glibcurl/
[API] http://atterer.net/jigdo/api/glibcurl_8h.html

Libpcap "libpcap is a system-independent interface for user-level packet capture. libpcap provides a portable framework for low-level network monitoring. Applications include network statistics collection, security monitoring, network debugging, etc."
[HTML] http://yuba.stanford.edu/~casado/pcap/section1.html

Libsoup "libsoup is an HTTP client/server library for GNOME. It uses GObjects and the glib main loop, to integrate well with GNOME applications."
[HTML] http://library.gnome.org/devel/libsoup/stable/

libEtPan "libEtPan is a mail purpose library. It will be used for low-level mail handling : network protocols (IMAP/NNTP/POP3/SMTP over TCP/IP and SSL/TCP/IP, already implemented), local storage (mbox/MH/maildir), message / MIME parser."
[HTML] http://www.etpan.org/libetpan/
[HTML] http://dinh.viet.hoa.free.fr/wiki/index.php?title=LibEtPan

Source Code Build Tools
Automating Program Compilation - Writing Makefiles
[Html] http://users.actcom.co.il/~choo/lupg/tutorials/writing-makefiles/writing-makefiles.html

GNU Autoconf, Automake, And Libtool "Goat Book"
[Html] http://sources.redhat.com/autobook/autobook/autobook_toc.html#SEC_Contents

Legal Resources
Open Source Licensing
Software Freedom and Intellectual Property Law
[Html] http://www.rosenlaw.com/oslbook.htm

Software Freedom Law Center:
We provide legal representation and other law-related services to protect and advance Free and Open Source Software (FOSS). Founded in 2005, the Center now represents many of the most important and well-established free software and open source projects.
[Html] http://www.softwarefreedom.org/

"Note: Remember never openly research software patents. Or inquire about patents with the us patent office if
you intend to use they patent in question. Because if you ever find your self being sued the fact that you inquired about they patent in question is enough to prove that you deliberately committed patent infringement.
"

Patent Commons Project:
The Patent Commons Project is dedicated to d0cumenting the boundaries of The Commons -- a preserve where developers and users of software can innovate, collaborate, and access patent resources in an environment of enhanced safety, protected by pledges of support made by holders of software patents.
[Html] http://www.patent-commons.org/

Example Code
GtkGLExt:
http://oracle.bridgewayconsulting.com.au/~davyd/misc/gtkglext-example.c

Creating and writing to an OpenGL window "GtkGLExt":
http://www.gtkforums.com/viewtopic.php?t=3568

Glib Utility Functions:
http://www.gtkforums.com/viewtopic.php?t=2809

Glib GChecksumType Examples
http://www.gtkforums.com/viewtopic.php?p=9125#9125

WebkitGtk & GtkBuilder:
http://www.gtkforums.com/viewtopic.php?t=3057

GtkIconView:
http://www.gtkforums.com/viewtopic.php?t=3103

GtkSourceView Syntax Highlighting Text Widget:
http://www.gtkforums.com/viewtopic.php?t=3105

Clutter and Clutter-box2d:
http://www.gtkforums.com/viewtopic.php?t=3128

GtkComboBox sample code:
http://www.gtkforums.com/viewtopic.php?t=3375

GTK+, Cairo & Poppler PDF Viewer example:
http://www.gtkforums.com/viewtopic.php?p=9086#9086

Terminal emulator widget VTE example
http://www.gtkforums.com/viewtopic.php?p=9087#9087

Gtk windows with alpha channels and Cairo
http://mikehearn.wordpress.com/2006/03/26/gtk-windows-with-alpha-channels/
[EXAMPLE] http://plan99.net/~mike/files/alphademo.c

A shaped input example with Gtk+, Cairo and XShape 1.1
http://macslow.thepimp.net/?p=26
[EXAMPLE] http://macslow.thepimp.net/projects/input_shape_test.c

Gtk System Tray Example
[HTML] http://yettocome.blogspot.com/2007/08/gtk-system-tray-icon-example.html

Gtk System Tray with Animated Icon Example
[HTML] http://www.gtkforums.com/viewtopic.php?t=3423

Reference Manuals
The following is a list of the most current stable d0cumentation available for GTK+ and its
supporting libraries. These are the standard libaries that you will be using to develop your
own GTK+ applications. Remember that, while GTK+ depends on GLib, that is only a one way
dependency!

ATK: http://library.gnome.org/devel/atk/stable/
GDK: http://library.gnome.org/devel/gdk/stable/
GdkPixbuf: http://library.gnome.org/devel/gdk-pixbuf/stable/
GLib: http://library.gnome.org/devel/glib/stable/
GObject: http://library.gnome.org/devel/gobject/stable/
GTK+: http://library.gnome.org/devel/gtk/stable/
Pango: http://library.gnome.org/devel/pango/stable/
Cairo: http://www.cairographics.org/manual/
Gstreamer: http://gstreamer.freedesktop.org/d0cumentation/
Libglade: http://library.gnome.org/devel/libglade/unstable/
GtkGLExt: http://gtkglext.sourceforge.net/reference/gtkglext/
Clutter 0.8: http://clutter-project.org/docs/clutter/0.8/
Clutter 0.9: http://clutter-project.org/docs/clutter/0.9/
Webkit: http://oe.linuxtogo.org/~zecke/webkit-gtk-api/index.html

Please report any broken links so i can fix them.
Thanks Caracal

Last edited by caracal on Fri Jun 26, 2009 7:15 am; edited 149 times in total

대학시절 자료복구[일부] http://comphy.iptime.org/~old/

대학시절 자료복구[일부] http://comphy.iptime.org/~old/

대학시절 자료복구[일부] http://comphy.iptime.org/~old/

Year 1993 ~ 1997 까지 기록된 전산물리학, 인공지능, 네트워크,

마이크로컨트롤러 개발 관련 자료 모음



WebOS

web os라는 용어는 낯설지만 개념은 그리 낯설지 많은 않을 것이다.HTML, JAVA, HTTP등의 프로토콜을 이용해서, 네트워크 상에서 구동되는 Network Computer 에 대한 구상은 10년전인 1996년부터 시작되었다. 용어에 있어서 차이는 있지만 네트워크 상에 데이터를 저장하고 처리한다는 점에 있어서, NC와 web os는 추구하는 바가 매우 비슷하다 할 수 있다.

NC를 완성하기 위한 많은 노력이 있었고, 특정 분야에 도입되기도 했지만 일반인과는 거리가 먼 실패한 제품이였다. 개념은 훌륭했지만 느린 하드웨어와 네트워크 속도, 무거운 가상머신과 시스템에 대한 불충분한 이해와 인프라의 미비 때문에 성장하지 못했었다.

그러던 것이 구글 데스크탑과 윈도우 live Desktop 으로 가능성이 주목받고 있다. 이들 WebOS의 구상은 다음과 같다.

webos.png

Browser는 Web Server를 통해서 인증과 같은 필요한 절차를 거치고, 가상화된 Storage에 자신의 정보를 저장한다. 이들 정보는 Web Service 형태로 다시 서비스 된다. 내부적으로는 분산처리 System에서 개인정보와 Sotrage의 정보를 분석해서 개인화된 정보를 서비스 하고, 정보를 색인해서 빠르게 검색할 수 있도록 한다.

Gadget은 브라우저와 독립적으로 실행되어서 웹서비스를 이용하는 조그만 소프트웨어로 자신만의 웹 데스크탑 환경을 구축하게 해준다. 또한 시간이 충분하다면, 자신만을 위한 혹은 공유가능한 유용한 웹애플리케이션의 제작이 가능하다.

이를 가능하게 해주는 기술들로는 아래와 같은 것들이 있다.
  • HTTP(:12)
  • Ajax(:12)/Javascript
  • HTML(:12)
  • 가상화 기술 / 분산처리 기술

Web OS를 긍정적으로 보는 이유

NC가 실패했기 때문에 Web OS가 실패할 것이란 얘기를 많이 듣는다. 가장 큰 이유는
  1. 느리다
  2. 쓸만한 응용이 없다.
  3. 대중에게 파고들만한 인프라가 구축되어있지 못했다.(시대를 앞선 기술)
정도가 될 거 같다.

1번 문제에 대해서는 웹 OS의 개념에 대해서 확실해 해둘 필요가 있는데, WebOS는 데스크탑의 모든 것을 포괄하지 않는다. 기존의 Web환경과 데스크탑영역의 일부분을 웹환경의 영역으로 확대시키겠다는 개념이다.

게임등과 같이 반응과 처리속도가 중요한 영역은 당연히 기존 데스크탑영역에 그대로 머무르게 될 것이다. 그러나 그렇지 않은 부분들 중 데이터가 공유되거나 가상화 되었을 때, 이득을 볼 수 있는 많은 응용은 WebOS 영역으로 넘어갈 것이다.

만들어진 데이터를 자신의 PC에서만 다루던 시대는 이미 지났다. 이동성이 중요해졌으며, 동일한 데이터를 PC, 인터넷에 연결된 다른 컴퓨터, 핸드펀과 같은 소형 모바일기기에서 보고/공유할 수 있어야 한다. 이건은 먼 미래의 요구가 아니며, 지금 요구되어 지는 기능들이다. 이에 웹은 최상의 환경을 제공한다.

문서작성을 예로 들어보자. googledocs를 사용해 보면 알겠지만 딱히 느리거나 크게 불편하다는 생각이 들지 않는다. 복잡한 문서를 작성하기엔 속도와 기능상의 문제가 있겠지만 80%이상을 차지할 거라고 생각되는 간단한 문서 (예를 들어 블러깅을 위한)를 생성하는 데에는 문제가 없다. 만들어진 문서는 가상화된 Storage에 저장이 되기 때문에, 어떤 컴퓨터에서라도 브라우저만 설치되어 있다면 접근할 수 있으며, 웹과 다른 블로깅시스템으로의 출판, 검색등이 자유롭다. 자신의 데스크탑의 검색 결과를 네트워크 상에서 확인할 수 있는 서비스도 추가되어 있으며, 결국 웹에서 작성한 모든 컨텐츠가 기기에 관계없이 편집/수정/출판/검색/공유 할 수 있도록 될 것이다.

그 밖의 웹에서 다루는 데이터는 그 특성상, 반응속도가 중요하지 않는 경우가 많다. RSS 정보를 본다거나, 문서/이미지/동영상/블로문서/메일 검색, 추천정보확인 모두 반응과 속도가 중요한 응용들이 아니다.

쓸만한 응용이 없다는 의견에 대해서라면, RSS 피드정보, 검색, 메일 등의 웹정보가 가장 유용한 정보가 된 현시점에서는 문제가 되지 않을 거라 생각한다. 많은 유저가 게임을 하는 시간을 빼고는 대부분의 시간을 RSS 확인과 검색, 몇 개의 이미지를 포함한 간단한 문서작성등에 보내고 있다. 웹데이터를 잘 다루는 소프트웨어가 쓸만한 응용인 셈이다. 올블러그의 10개의 인기 블러그를 보여주는 응용이 쓸만한 응용이 된 세상이다. 여기에 더해서 웹OS는 가상화 기술을 통해서 모든 기기에서 데이터를 공유할 수 있는 가능성을 열어두고 있다.

http://www.eyeos.org 를 보기 바란다. 아직 부족하긴 하지만, WebOS의 방향을 가늠해 볼 수 있을 것이다.

eyeos.png

기업에서의 WebOS 의 사용

WebOS는 기업에서도 지식관리시스템의 구축을 위한 좋은 환경을 제공한다. 웹으로 묶여진 가상의 공간에서 의견과 생산된 정보를 저장하고 공유/검색 할 수 있는 것이야 말로 지식관리 시스템의 핵심이니까 말이다. 이러한게 가능하려면 물론 회사의 정보가 외부의 저장장치에 저장이 된다는 데에서 오는 부담감을 해결할 수 있는 신뢰도가 확보되어야 할것이다. 우리나라는 아직 요원해보이지만, 많은 회사들이 위키를 중심으로 하는 지식관리 시스템을 구축하고 있으으며 이를 위한 위키호스팅 업체도 영업을 하고 있는 상황이다.

WebOS는 이러한 것들을 망라해서 최적의 지식관리 시스템을 만들어 줄 수 있다. 일종의 회사 인트라넷 자원관리를 위한 호스팅 서비스라고 부를 수 있을 것 같은데, 구글은 이미 기업용 호스팅 서비스를 선보이고 있다. 아직은 베타이긴 한데, 2GB의 스토리지를 할당하고, 이 한도내에서 자사의 서비스인 Gmail, Google Calendar, Google Talk, Page Creator 등의 웹서비스를 사용할 수 있도록 하고 있다. 여기에 조만간 위키시스템이 추가되고, 이들 웹서비스들이 구글 테스크탑환경에 맞도록 조절된다면 필요한 요소가 모두 갖추어진 기업용 WebOS가 탄생하게 될 것이다. 위키와 관련된 내용은 [http]구글 잣스팟 인수 뉴스를 읽어보기 바란다.

구글 서비스 관련 문서

이름
제목
변경일
크기
구글 Adsense 연구
2007/01/09 11:46
958
구글 애드워즈 사용기
2007/01/26 19:44
3575
더 좋은 구글 검색방법
2007/02/01 12:00
3602
구글 Blogger BETA
2007/01/09 11:46
59
Google Code Hosting
2007/01/09 11:46
2916
Google source code 검색
2007/01/09 11:46
1030
구글개인화 검색 테스트
2007/05/28 22:29
706
구글 개인화 검색 - google custom search
2007/06/04 23:44
3306
Google's Disk Failure Experience
2007/11/06 10:29
4476
Google Docs 자유 그리기 기능을 써보고
2009/03/30 00:15
2653
도메인 평가
2007/01/09 11:46
707
구글 가제트
2007/01/09 11:46
1359
구글맵 API를 이용한 Map Service
2009/07/01 14:49
19476
구글 Web Toolkit
2009/07/05 21:03
1158
Google Trend로 알아보는 Blog와 Wiki의 미래
2007/07/04 22:19
4167
구글맵으로 둘러보는 자전거 산책로
2009/03/17 22:22
2140
구글 News Bar 서비스
2007/02/12 14:14
2002
구글 Docs
2007/01/09 11:46
50
구글 PageRank
2008/10/24 16:48
8161
Web2.0에서의 승자독식 ?
2007/05/07 13:18
2567
Google Picasa
2007/01/09 11:46
4697
구글 인기검색어
2007/01/09 11:46
511
Google Reader
2007/01/09 11:46
55
구글 논문 검색
2007/01/09 11:46
325
Google Search API
2007/02/13 01:28
2939
Google AJAX Search API 개발자 가이드
2007/02/12 18:37
3318
구글 테마 적용
2007/03/23 21:33
1893
비쥬얼 페이지 랭크
2007/01/09 11:46
678
웹2.0과 저작권 - 일등만이 살아남는 Web2.0 세상
2007/07/06 23:16
5445
사이트 관리자를 위한 구글 서비스
2007/01/09 11:46
87
WebOS의 미래
2007/01/09 11:46
5447
웹 2.0의 허상
2007/05/10 01:55
31140
왜 구글에 열광하는가
2007/06/20 01:31
8676
구글 Map 서비스의 가능성
2007/01/09 11:46
66
구글을 이용한 나만의 검색엔진 만들기
2007/01/09 11:46
78
google earth 와 google map의 차이점
2009/03/31 00:11
151
이글루스 블로그에 애드센스 달기
2007/04/11 21:32
1965
구글 Gadget
2007/02/20 20:06
9255
한국형 Google 개인화 홈페이지
2007/05/05 20:34
1831

TextViewer ver 3.3a (Download - 아래 리뷰 참조)

구 분 : PocketPC | 텍스트 | Reader |
▷ 가 격 : Freeware
▷ 작동환경 : Pocket PC (ARM, MIPS, SH3 Processors)
▷ 제 한 :
▷ 평 가 : ★★
▷ 개 발 : Toshiyuki UMEDA http://www.tele.ucl.ac.be/PEOPLE/UMEDA/TextViewer/index-e
▷ 개 발 자 : umeda@tele.ucl.ac.be
▷ 개 발 일 : 2004. 12. 27
▷ 리 뷰 일 : 2005. 1. 27
▷ 비 고 :


TextViewer는 Pocket PC 용 다국어를 지원하는 텍스트 뷰어입니다. 만약에 당신이 영문판의 Pocket PC를 사용한다면, 그 PDA에서는 한국어, 일본어, 중국어를 읽을 수 없습니다. 이 TextViewer는 어쨌든 간에 당신의 PDA에서 여러 언어로 된 텍스트 파일을 읽을 수 있도록 해줍니다.

다음의 문자 코딩을 선택할 수 있습니다.

- Japanese Shift JIS
- Japanese ISO-2022-JP (JIS)
- Japanese EUC

Unicode (Chinese, Korea 등..)
- Unicode (UTF-8)
- Unicode (UTF-16) (BOM support)

European Language (추가적으로 지원)
- ISO-8859-1 Western
- ISO-8859-2 Central Europe
- ISO-8859-3 South Europe
- ISO-8859-4 Baltic
- ISO-8859-5 Cyrillic
- ISO-8859-7 Greek

Palm Doc Format
- Japanese (Doc/Medoc 포맷)
- Western(ISO-8859-1)

버전 3.0부터는 Palm OS에서 사용하는 Doc 포맷의 파일까지 지원합니다. (Western/Japanese) Palm OS의 역사는 Pocket PC 보다 오래된 만큼 Palm doc 포맷의 무료 E-Book은 수도 없이 많습니다. 이젠 이것들을 Pocket PC에서 별도의 변환 없이 편하게 즐기실 수 있습니다. 단, Japanese와 Western만 됩니다.

Palm Doc 포맷의 경우, TextViewer는 Palm Doc version 1(압축되지 않은 것)과 2 (압축된 것)을 지원합니다. 하지만 커다란 파일(30 KB 이상)을 열 경우, 화면에 표시되는 데까지 약 5~10 여 초의 시간이 필요합니다.


< 설치 >

1. 폰트 설치하기

1) 만약에 단지 일본어 만을 읽고자 한다면, CEFONT를 다운로드 받거나 또는 일본어 폰트를 지원하는 다른 폰트를 다운 받아야 합니다.

- 일본어 폰트 설치 예

a) 다운로드: cefont100.zip (크기: 574k)

b) 다운 받은 cefont100.zip에서 cefont.ttf의 압축을 풉니다.

c) cefont.ttf 파일을 \Windows\Fonts 폴더나 (PocketPC2002) 또는 \Windwos 폴더에 (PocketPC) 복사합니다.

제 iPAQ 2110의 경우에는 \Windows\Fonts 폴더에 복사했더니, 일본어를 뿌려주지 못하더군요. 그래서 다시 \Windwos 폴더에 복사해 넣었더니 제대로 나왔습니다. 혹 출력이 제대로 안 되시는 분들은 폴더를 바꿔가면서 설치해 보십시오.


2) 만약에 일본어 외에 한국어나 중국어 등을 읽어야 한다면, bdfUMplus를 다운로드 하거나 또는 원하는 언어를 지원하는 폰트를 다운로드 받으십시오.

* Free Unicode True Type Font (Windows CE 그리고 PocketPC/PocketPC 2002 용)
(Japanese, Chinese, Korea, Russian, Greek, Western, Central Europe, South Europe, Baltic, Cyrillic)

* 다운로드 bdfUMplus-20030206.zip (크기: 179k)

오리지널 다운로드 링크는 아래와 같습니다.

http://www.tele.ucl.ac.be/PEOPLE/UMEDA/TextViewer/index-e.html

- 한국어나 중국어 폰트 설치 예

a) bdfUMplus-20030206.zip을 다운로드 합니다.

b) 다운 받은 bdfUMplus-20030206.zip에서 bdfUMplus.ttf의 압축을 풉니다.

c) bdfUMplus.ttf파일을 \Windows\Fonts 폴더나 (PocketPC2002) 또는 \Windwos 폴더에 (PocketPC) 복사합니다.


2. TextViewer 프로그램 기종 별 다운로드 및 설치하기

아래의 다운로드 파일 중에서 자신의 기종에 맞는 적당한 Cab 파일을 PDA의 \Temp 폴더에 복사합니다. (Cab 파일들은 zip 파일에 포함되어 있습니다. 자신의 기종에 맞는 zip 파일로부터 압축을 풀어 내십시오)

a) TextViewer ver 3.3a: PocketPC ARM, MIPS, SH3 기종 용

* TextViewer-PPC-SH3.zip (크기: 28k)
* TextViewer-PPC-MIPS.zip (크기: 28k)
* TextViewer-PPC-ARM.zip (크기: 28k)

b) TextViewer2002 version 4.0: PocketPC 2002 Strong ARM / XScale 기종 용

* TextViewer2k2-4.0.zip (크기: 107k)

c) TextViewer2002 version 4.0: PocketPC 2003 ARM / XScale 기종 용

* TextViewer2k2-4.0a.zip (크기: 108k)

4) PDA에서 Cab 파일을 탭하여 실행합니다. 그러면 프로그램이 자동으로 설치를 시작합니다.


< 사용하기 >

File - Open에서 읽을 파일을 선택합니다.

왼쪽 그림은 일본어 폰트를 설치하기 전의 화면입니다. 폰트가 없으므로 깨져 보이네요.



그러면 위에서 알아본 대로 폰트 파일을 설치하시고 TOOL 메뉴 - VIEW를 선택하십시오. 그리고 FONT NAME에서 새로 설치한 일본어 폰트인 "CEFONT"를 선택하고 OK 버튼을 누르십시오.

그러면 옆 그림과 같이 일본어가 표시됩니다. 그런데 아쉽게도 한문은 약간씩 깨진 곳이 있군요. 그래도 Shift JIS 포맷을 PPC에서 볼 수 있다는데 만족합니다.

왼쪽의 그림은 국산 프리웨어 텍스트 뷰어인 "무식이"에서 폰트를 일본어 폰트로 지정하고 같은 문서를 열어본 화면입니다. 화면이 깨지는군요. 폰트만 선택해서 되는 문제가 아닌가 보죠?

TOOL 메뉴 - VIEW - LINE STYLE에서는 화면에 밑줄 표시 여부를 None, Line 그리고 Dot 중에서 지정할 수 있습니다.

이 프로그램이 갖고 있는 또 다른 제약은 불러 들일 수 있는 파일의 크기가 64k까지 라는 것입니다.

< 기타 기능 >

이 프로그램은 TOOL 메뉴에 EXTENSION, KEY BIND, VIEW의 3가지 주요 메뉴를 갖고 있습니다.

* EXTENSION: 파일의 확장자 별로 이 프로그램에 연결해서 볼 수 있도록 해줍니다.

* KEY BIND: 하드웨어 버튼에 TextViewer의 스크롤 기능을 연결하여 사용할 수 있습니다.

* VIEW: 사용할 폰트의 선택이나 인코딩 방식을 선택합니다.

< 다른 폰트 사용하기 >



위에서 보시다시피 cefont.ttf 폰트를 사용했을 때 한문의 일부가 깨져서, XP의 Windows\Fonts 아래에 있는 일본어 폰트인 msgothic.ttc을 PPC에 복사해 넣었습니다. 그리고서 VIEW 메뉴에서 MS Gothic 폰트를 선택해서 보면 위의 화면과 같습니다. 역시 한문이 몇 개 깨져 보이네요. msgothic.ttc를 PPC에 복사해 넣는 것 까지는 좋았는데 삭제가 안돼서 결국 하드리셋 해버렸다는... ㅠ.ㅜ



"무식이"에서는 메뉴 - 설정 -글자 탭 - 폰트 종류에서 MS Gothic를 선택하고 "Japanese Shift JIS" 포맷의 문서를 불러들여도 완전히 깨지네요... 그렇다면, 허접하기는 해도 TextViewer를 써야 한다는 이야기가 되는데...


대단한 기능을 갖고 있는 프로그램은 아닙니다만, 개중에는 필요하신 분들도 있으리라 생각됩니다. 프로그램의 작동이 다소 안정적이지 않을 지도 모르겠습니다.


M4655에 Palm 불루투스 키보드 페어링하였습니다.

스토아웨이 키보드를 계속 알아보던 중

숫자베열과 펑션키까지 구비된 Palm키보드를 알게되었습니다.

과거에 PDA의 원조라고 할 수 있는 Palm에 적용하는 키보드지만

PocketPC와도 호환된다고 해서 구입했습니다.

페어링을 잘 못하여 조금 헤메기도 했지만 .. 꽤나 유용할 듯 합니다.

M4655는 모바일익스플로어가 연결되어 바로 웹을 사용할 수 있기 때문에

제 개인서버에 WebPage를 만들어서,

일정관리를 바로 웹에 올릴 수 있습니다.

일정금액 지불하면 PocketPC로 하는 웹은 거의 무제한에 가깝더군요.

언제 어디서나 제 일정과 데이타를 관리할 수 있으니너무나 만족스럽습니다.

블루투스 키보드도 만족스럽고, 다만 한영전환이 아쉽지만,

한영전환 키보드로 할 수 있는 PocketPC Mobile App 알고 계신분은 알려주십시오.

아래사진은 스타벅스에서 키보드 페어링하여 사용하던 모습니다.



'DiY 자작품' 카테고리의 다른 글

플래시 연습5  (0) 2008.08.26
플래시 연습4  (0) 2008.08.26
플래시 연습3  (0) 2008.08.26
플래시 연습 2  (0) 2008.08.25
플래쉬 연습  (0) 2008.08.25

MS-Window에서 Dev-C++(DevCpp) GTK+ 으로 프로그래밍 하기

C도 초보고 gtk+도 초보입니다. 하지만 셋팅을 하는 동안의 과정을 간략하게 정리하고자 합니다.

Dev-C++은 설치되었다는 전제하에서 설명하겠습니다. (참고로 Dev-C++의 주소는 http://bloodshed.net/index.html 입니다.)

Dev-C++을 한글환경에서 설명할 것이기 때문에 한글환경이 아니라면, 메뉴의 ‘Tools’ -> ‘Environment Options’ 에서 ‘Interface’ 탭에 있는’ Language’에서 ‘Korea(한국어)’를 선택하세요.

1. GTK+ 설치를 위한 사전 작업

GTK+는 다른 라이브러리들과 의존성을 가지기 때문에 사전에 의존성을 가지는 라이브러리들을 설치해주어야 합니다.

라이브러리 목록은 다음과 같습니다.

· Glib

· atk

· Pango

· zlib

· libpng

· libpixman

· Cairo

7개의 라이브러리를 먼저 설치해 주어야 합니다. 마지막에 있는 Cairo는 바로 위 두개(libpng, libpixman)에 의존성을 가지므로 Cairo를 설치하기 전에 두개의 패키지를 먼저 설치하여야 하고, libpng zlib에 의존성을 가지므로 zlib를 먼저 설치해야 합니다. 일단 이부분은 접어두고 총 7개의 라이브러리를 먼저 설치해야 합니다. 아래 부분에서 자세히 설명을 할테니 넘어갑시다.

설치를 위해 Dev-C++에서 제공하는 패키지 업데이를 진행하면 됩니다.

메뉴의도구’ -> ‘프로그램 업데이트를 선택하면 아래와 같이 하나의 창이 뜹니다.



‘Select devpak server’에서 ‘Devpaks.org Community Devpaks’를 선택합니다.

그리고, 아래의 ‘Check for updates’를 클릭합니다. 그려면 프로그래스바가 진행되고 ‘Available updates list’에 업데이트할 수 있는 목록이 작성됩니다. 그리고, ‘Check for updates’ ‘Download Selected’로 바뀌게 됩니다.

설치순서는 아래와 같습니다.

1. zlib

2. libpixman, libpng

3. atk, cairo, glib, pango

순서대로 각 항목에 체크를 하고 ‘Download Selected’를 눌러주면 됩니다. (한 항목에 두개 이상의 패키지가 있으면, 체크란에 두개 다 체크하고 ‘Download Selected’를 눌러주면 됩니다.)

간단한 대화창과 함께 설치가 완료되면, 이제 준비작업은 끝났습니다. (사실 준비작업이라 말하기는 좀 그렇지만...)

2. GTK+ 설치

이제 gtk+를 체크하고 설치하면 됩니다.(Download Selected)

이제 gtk+를 프로그래밍을 하기 위한 준비는 끝났습니다. 그런데, 실행파일을 만들기 위해서는 dll 파일들이 필요합니다. 이 파일들을 gimp에서 다운받을 수 있습니다.

윈도우를 위한 gimp의 주소는 http://gimp-win.sourceforge.net/ 입니다. 다운로드 주소는 http://gimp-win.sourceforge.net/stable.html 입니다. 그런데...

GTK+ 2 Runtime Environment를 다운받아야 하는데, 목록이 두개가 있습니다.

저는 XP환경이라 위에 있는 (version 2.10.6 for Windows 2000 and newer)을 다운받았지만, 압축을 풀려니 계속 에러가 나네요. 그래서 어쩔 수 없이 그 아래에 있는 (version 2.6.10-20050823, for Windows 98/ME and NT4)를 다운받았습니다. 이걸 다운받고 압축풀고 설치를 시작하면 간단한 대화상자가 나오고, 설치를 하면됩니다.

3. GTK+ 프로그래밍 해보기

메뉴에서파일’ -> ‘새로 만들기’ -> ‘프로젝트를 선택합니다. 그러면 아래와 같이 창이 뜹니다.


Basic
탭에서 GTK+ Application, 프로젝트명을 적당히 적어주고 언어는 C를 선택합니다. 그리고 확인을 누르면 GTK+ 프로그래밍을 할 수 있게 소스창이 구성됩니다.

메뉴에서실행’ -> ‘컴파일그러면 컴파일이 되고 실행파일이 만들어집니다. 이제 GTK 프로그램이 완성되었습니다.

이제 http://gtk.org에서 튜토리얼을 보면서 이것저것 공부하면 됩니다. ^^

(그런데, ‘실행’ -> ‘실행을 눌러주면 먹통일 때가 있습니다. 소스를 컴파일 한 곳에서 가서, 실행파일을 어떤 dll파일이 필요하다는 에러메시지가 뜹니다. 이때를 위해 조금전에 GTK+ Runtime Environment를 설치한 것입니다. ‘Program Files’- > ‘Common Files’ -> ‘GTK’ -> ‘2.0’ -> ‘bin’ 폴더에 보면 많은 dll파일들이 있습니다. 그곳에서 dll 파일을 찾아 실행파일이 있는 곳에 복사하고 실행파일을 더블클릭하면 이제 실행이 됩니다. 패스를 걸어주셔도 됩니다.)

[출처] MS윈도우에서 Dev-C++로 GTK+ 프로그래밍 하기|작성자 매지구름

'Computer Science' 카테고리의 다른 글

ePub 의 개요 [전자책 표준]  (0) 2009.09.03
WebOS  (0) 2009.08.30
임베디드 OS란 무엇인가  (0) 2009.08.15
[summary] linux device driver  (0) 2009.08.12
Getting started with an embedded Linux system emulator  (0) 2009.08.09
출처 : http://wedcum.egloos.com/

임베디드 OS에는 어떤 것들이 있는가
임베디드 시스템을 개발하려면 개발하려는 시스템이 어떠한 기능을 수행하는지 그 복잡도는 어느 정도인지 실시간성을 요구하는지 개발기간은 얼마나 필요한지 등에 따라 적당한 임베디드 OS를 선택하여 적용해야 한다. 따라서 그러한 임베디드 OS에는 어떠한 것들이 있으며 각각의 특징이 무엇인지 알 필요가 있다. 현재 나온 임베디드 OS는 그 종류가 무수하게 많은 편이다. 데스크톱 시장처럼 특정 OS가 임베디드 OS 시장을 점유하는 것이 아니기 때문이다. 수많은 임베디드 OS 중에서 주류를 이루고 있는 상용 RTOS, 윈도우 CE 닷넷, 윈도우 XP 임베디드, 임베디드 리눅스에 대해서 알아보겠다.

상용 RTOS
RTOS는 그 종류만 해도 수를 헤아리기 힘들다. RTOS는 실시간 처리에 대한 강력한 지원과 통합 개발 및 디버깅 환경을 지원한다. 대표적으로 화성 착륙선인 패스파인더(PathFinder)와 혼다에서 만든 로봇인 아시모(ASIMO)의 운영체제로 쓰인 윈드리버(WindRiver)의 VxWorks, ISI에서 개발해서 지금은 윈드리버에 통합된 pSOS, Mentor Graphics의 VRTX 등이 있으며 교육용으로 만들어진 uC/OS-II가 있다. 이들 RTOS는 선점형 멀티태스킹을 지원하며 각 태스크들은 우선순위를 가지고 있어 높은 우선순위를 가지는 태스크들이 먼저 실행되는 구조를 가지고 있다. 또한 통합개발환경과 디버깅 툴을 개발하여 개발자들에게 용이한 개발환경을 지원하고 있다. 단점이라고 하면 이들 RTOS들이 대부분이 상용이라 라이선스 비가 만만치 않다.

pSOS
ISI에서 1980년대에 개발한 pSOSystem은 우리나라의 여러 업체가 채택해서 사용하고 있는 RTOS로 삼성전자가 pSOS+ 개발에 참여해 라이선스를 갖고 있어 잘 알려져 있다. 삼성전자의 휴대폰에 사용되어 왔으며, 각종 통신장비와 네트워크 장비에서 사용되고 있다. pSOSystem은 커널을 중심으로 해서 여러 개의 소프트웨어 컴포넌트들로 구성되어 있다. 이들 소프트웨어 컴포넌트들은 각각의 독립적인 모듈로 되어 있으며 통합개발환경 툴로 pRISM+을 제공하고 있다.
pSOSystem은 멀티태스킹 RTOS로 각 태스크들은 우선순위를 가지고 있어 우선순위가 높은 태스크들의 작업 수행이 먼저 이루어진다. 따라서 선점형 스케쥴링 방식을 따른다고 볼 수 있다. 만일 각 태스크들이 같은 우선순위를 가진다면 스케쥴링 방식은 라운드로빈(Round-robin) 방식으로 바뀌게 된다. 태스크의 수는 총 256개이다. 그리고 태스크 관리, 세마포어(semaphore), 메시지 큐, 시간 관리 및 타이머, 이벤트 및 비동기 시그널, 에러 처리, 동적인 메모리 저장관리, 다른 태스크들로부터의 코드나 데이터 보호 등의 서비스를 지원한다. 여러 개의 다른 실행 모드를 가지고 있는 CPU를 위해서 사용자 모드와 슈퍼바이저 모드를 제공하고 있다.
pSOSystem은 실시간 멀티태스킹 커널을 중심으로 여러 개의 소프트웨어 컴포넌트와 라이브러리를 두고 있다. 이런 컴포넌트와 라이브러리는 선택적으로 사용될 수 있다. 하부 구조에는 디바이스 드라이버와 칩과 각종 디바이스의 정보를 담고 있는 BSP(Board Support Package)가 있다. BSP를 따로 구별하는 이유는 만일 하드웨어가 변경될 경우 시스템 프로그램에 큰 변경없이 BSP만 수정하여 쉽게 처리할 수 있기 때문이다. 따라서 전체적으로 정리해 보면 BSP와 디바이스 드라이버의 바탕 위에 커널과 기타 필요한 컴포넌트들을 링크하고, 다시 그 위에 사용할 각종 태스크와 응용 프로그램을 제작하여 사용하는 것이다. pRISM+는 pSOSystem 개발자가 좀더 용이한 개발을 위해 소스 코드 분석을 위한 툴과 컴파일러, 링커, 디버깅할 수 있는 툴을 제공하는 통합개발환경이다.

VxWorks
윈드리버의 RTOS인 VxWorks는 pSOSystem과 유사한 점이 많다. pSOSystem이 통합개발환경으로 pRISM+를 제공한다면 VxWorks는 토네이도를 제공한다. VxWorks의 커널인 마이크로커널은 선점형 멀티태스킹이며 총 태스크의 단계는 256, 스케쥴링 방식도 높은 우선순위를 가지는 태스크가 먼저 실행하는 방식을 지원한다. 만일 같은 우선순위를 가진다면 라운드로빈 방식의 스케쥴링을 이용하는 것도 pSOSystem과 유사하다. 또 하나 pSOSystem이 여러 개의 컴포넌트로 되어 있다고 하면 VxWorks는 200개 가량이 모듈을 지원하는 형식으로 되어 있어 개발자는 이들 필요한 모듈만 사용해서 시스템에 맞는 운영체제를 구성할 수 있다. VxWorks는 현대의 RTOS들이 지원하는 거의 모든 서비스를 지원하고 있다. 태스크간의 통신을 위해 세마포어와 메시지 큐, 공유 메모리, 소켓, 시그널 등을 제공하고, 표준 TCP/IP 네트워킹과 ROM이나 로컬 디스크, 네트워크로 부팅이 가능하게 되어 있다.
VxWorks의 구조는 크게 하드웨어에 의존하는 BSP, 디바이스 드라이브 영역과 하드웨어에 의존하지 않는 커널과 그에 따른 모듈, 그리고 애플리케이션 프로그램으로 나뉜다. 이것은 pSOSystem과 매우 유사한 부분이다. VxWorks의 토네이도는 교차 개발환경을 지원하는 통합개발환경이다.

윈도우 CE 닷넷과 윈도우 XP 임베디드
마이크로소프트(이하 MS)는 임베디드 시장에 대한 공략을 위해 1996년 윈도우 CE를 발표했다. MS에서 제작된 기존의 윈도우 인터페이스에 모바일 네트워크 기능을 강화해 가전제품, PDA, 셋톱박스 등에 주로 사용되고 있다. 적외선 통신, 웹 브라우징 기능 이외에도 편리한 개발환경을 가지고 있으며 UI가 기존의 윈도우와 매우 유사하게 제작돼 있어 대부분의 사용자들은 별도의 학습없이도 바로 사용이 가능하다. 또한 윈도우 CE 계열의 PDA는 흑백 및 컬러 디스플레이가 가능하며 동영상, WAV, MP3 등 멀티미디어 파일의 재생이 가능하여 PDA의 엔터테인먼트 기기화를 가져왔다.
또한 PC용의 윈도우 OS나 각종 오피스 프로그램들과 완벽한 호환이 가능해 기존의 데스크톱이나 노트북에서 가능하던 각종 애플리케이션들을 PDA에서도 그대로 사용할 수 있다는 이점이 있다. 그러나 제한적인 하드웨어를 가진 임베디드 시스템에 너무 많은 기능을 구현하려 했기 때문에 느린 실행 속도와 불편한 UI를 초래했다.
이를 개선해 MS는 2000년 4월 윈도우 CE 3.0을 개발하고 기존의 윈도우 CE와는 전혀 다른 것이라는 것을 강조하기 위해 그것을 포켓PC(PocketPC)라고 명명했다. 포켓PC의 등장으로 기존 윈도우 CE에서 보여주었던 수행속도의 저하와 비효율적인 하드웨어의 활용 등의 문제점들이 보완됐다. 윈도우 PC는 사운드와 동영상 재생 및 컬러 디스플레이 구현 등 다양한 멀티미디어 기능을 기본적으로 제공하며 PC와의 호환성이 뛰어나다. 또한 포켓 인터넷 익스플로러를 기본으로 내장해 모바일 인터넷을 실현했다. 게다가 데스크톱과 거의 흡사한 UI를 갖춤으로써 윈도우에 익숙한 사용자들을 쉽게 끌어들이고 있다. 그럼에도 불구하고 PDA 업계에서 윈도우 CE의 시장점유율은 팜 OS에 미치지 못했다. 하지만 유명 PDA 업체들이 윈도우 CE 채용 제품들을 대거 출시함에 따라 점유율은 계속 증가 추세에 있다.
MS는 윈도우 CE 3.0의 소스 코드를 공개한 후 2002년 초 코드명 탈리스커(Talisker)로 알려졌던 윈도우 CE 닷넷과 윈도우 XP 임베디드를 공식 발표했다. MS는 윈도우 CE 닷넷을 Non-X86 프로세서 계열이거나 실시간이 요구되는 시스템에 대해서 권고를 하고 있으며 PC 운영체제인 윈도우 XP 프로페셔널의 컴포넌트 버전인 윈도우 XP 임베디드는 네트워킹과 서버 기능을 수행하는 시스템 개발에 권고를 하고 있다.

임베디드 리눅스
리눅스는 초기 PC나 서버급 시스템에 포팅돼 사용되기 시작하다 현재는 임베디드 시스템으로도 많이 사용된다. 리눅스는 상용 임베디드 OS보다는 실시간적 요소를 충족하지 못하고 윈도우 CE보다는 개발환경이 좋지는 않지만, 오픈소스에 라이선스 비용이 없기 때문에 커널 크기를 줄여 다양한 임베디드 시스템의 개발에 유리하다. 리눅스는 소스를 공개하는 오픈소스 정책을 따르는 관계로 관련 개발자가 세계 곳곳에 있어 현지의 응용 프로그램을 개발할 수 있는 개발자 층이 넓다는 것이 다른 OS들과 구별되는 큰 장점이다. 이에 따라 리눅스를 채용한 임베디드 시스템은 다른 제품에 비해 가격 경쟁력이 우수하고 다양한 응용 프로그램의 개발이 가능할 것으로 기대된다. 임베디드 리눅스는 소스 공개와 아울러 안정성, 신뢰성 및 성능의 확보에 따라 활용도가 급격히 증대되고 있으며, 레드햇, 몬타비스타, 리니오 등이 임베디드 리눅스 개발 및 기술 지원 사업에 주력하고 있다.
그러나 임베디드 리눅스는 열악한 개발환경에 따른 개발기간에 대한 부담과 라운드로빈 방식의 스케쥴링을 하므로 실시간 시스템에는 적합하지 않다는 문제점을 가지고 있다. New Mexico Tech에서 기존 리눅스 커널에 실시간 기능을 추가한 RT-Linux를 개발했으며 또한 오픈소스 진영에서는 임베디드 리눅스를 기반으로 한 표준화를 통해 시장 확대를 도모중인데, 2000년에 애질런트, 알카텔, HP, IBM, 윈드리버, ARM, 모토롤라 등이 참여하는 세계 최대 규모의 임베디드 리눅스 컨소시엄(ELC: Embedded Linux Consortium)이 결성되어 임베디드 리눅스 및 실시간 운영체제 API 표준인 EL/IX(Em bedded Linux based on POSIX)를 기반으로 플랫폼 표준화를 추진하고 있다.
임베디드 운영체제 시장은 전통적인 RTOS 중심에서 다기능 임베디드 OS 중심으로 발전하는 추세에 따라 VxWorks, pSOS 등의RTOS의 시장 성장율이 둔화되고 있으며, 전용 실시간 임베디드 시스템에서 높은 시장 점유율을 보였던 VxWorks, pSOS, VRTX와 같은 전통적인 RTOS는 2001년을 기점으로 시장 점유율이 하락하고 있다. <그림 1>에서와 같이 2003년에는 임베디드 리눅스, 임베디드 윈도우 CE 및 팜 OS 등의 임베디드 OS 시장이 기존의 RTOS 시장을 능가할 것으로 예측된다. 전통적인 RTOS의 시장 점유 하락으로 임베디드 OS 시장에서는 MS와 임베디드 리눅스가 시장 선점을 위해 치열한 각축을 벌일 것으로 예상된다.

임베디드 시스템 개발 환경
임베디드 시스템을 개발하기 위해선 기본적으로 <그림 2>와 같은 요소들이 갖춰져 있어야 한다. ‘호스트’는 임베디드 시스템 개발을 위한 컴퓨터를 말하며, ‘타겟’은 실제 임베디드 시스템이 설치된 개발하고자 하는 하드웨어를 말한다. 호스트에는 개발을 위한 개발 툴, 개발된 응용 프로그램을 임시로 수행해 볼 수 있는 타겟 시뮬레이터, 타겟과 연결되어 타겟에 개발된 이미지를 업로드하거나 타겟에 반응하는 디버그 에이전트를 통해 원격 디버깅을 할 수 있게 하는 타겟 서버가 설치돼 있다. 또한 타겟에는 호스트에서 만들어져서 설치된 여러 컴포넌트가 존재하는데 타겟을 부팅하기 위한 부트 로더와 커널, 그리고 임베디드 응용 프로그램이 존재하게 된다. 호스트에 설치된 개발 툴에는 타겟에서 수행될 수 있는 바이너리를 생성하는 크로스 컴파일러가 존재하며 그 밖에 오류를 검색해 주는 디버거 등으로 이뤄져 있다.

임베디드 시스템 개발 과정
임베디드 시스템 개발 과정은 대략적으로 부트로더 개발, 커널 및 파일 시스템 개발, 응용 프로그램 개발의 세 단계로 볼 수 있다.

부트 로더 개발
부트 로더는 타겟 보드에 전원이 인가되면 부트 롬으로부터 가장 먼저 수행되는 프로그램이다. 보통 부트 로더는 OS의 커널을 로드하는 순수 로더로서의 기능뿐만이 아니라 현재 레지스터나 메모리 값, 버스 상태 등을 살펴볼 수 있는 모니터 기능, 기초적인 네트워크 모듈을 내장해 네트워크를 통한 커널을 다운받아서 커널 로드를 할 수 있는 기능을 포괄하고 있다.부트 로더는 보통 부트 롬에 내장되어 있으며 부트 로더를 새로 작성하여 타겟에 설치하려면 호스트와 JTAG 인터페이스 혹은 기타 인터페이스를 통하여 설치할 수 있으며 이외의 방법에는 롬 라이터를 이용하여 롬에 구워서 설치할 수 있다.
대부분 상용 임베디드 OS에서는 부트 롬 부분을 앞서 잠깐 언급한 BSP라 불리는 패키지의 일부분으로 규정하고 있다. 반면 임베디드 리눅스의 경우는 규격화된 BSP가 존재하지 않으므로 하드웨어 벤더가 리눅스용 BSP를 제공하지 않을 경우 부트 롬 부분을 각 하드웨어 플랫폼에 맞게 작성해야 한다.

커널 및 디바이스 드라이버 및 파일 시스템 개발
커널 및 디바이스 드라이버의 개발은 호스트의 임베디드 시스템 개발 툴에서 이뤄진다. 개발을 위해서는 개발자가 먼저 시스템에 대한 하드웨어 사양을 숙지해야 하며 이를 바탕으로 커널 및 디바이스 드라이버를 설정하게 된다. 이렇게 생성된 커널 및 디바이스 드라이버들은 부트 롬과 같이 하나의 이미지 파일 형태로 되어 부트 롬에 저장되거나 별도의 저장 장치에 파일 시스템을 통한 파일 형태로 구현된다. 만일 부트 롬의 용량이 작거나 기타 저장장치가 없는 경우 부트 로더에서 네트워크 모듈을 통해 별도의 서버로부터 커널을 다운받아 부팅이 진행될 수도 있다. 특히 부트 롬이나 저장장치의 용량이 제한적일 경우는 커널 이미지 자체를 압축해 저장되는 것이 일반적이다.

임베디드 응용 프로그램
임베디드 응용 프로그램은 앞에서 구현된 커널과 파일 시스템을 바탕으로 수행된다. 응용 프로그램의 개발은 커널과 마찬가지 방법으로 호스트에서 생성이 가능하며 호스트에 설치된 개발 툴의 크로스 컴파일러에 의해 타겟 보드에 맞는 바이너리가 생성되게 된다. 생성된 응용 프로그램의 실행은 임베디드 OS 개발 툴 내의 타겟 에뮬레이터나 실제로 타겟 보드에 옮겨서 실행이 가능하다. 또한 응용 프로그램은 네트워크를 이용한 원거리 디버깅을 이용하거나, JTAG 인터페이스를 이용한 디버깅을 통하여 에러를 확인해 볼 수 있다.

임베디드 OS의 주요 개념 및 테크&팁
임베디드 시스템의 성능이 커지면서 기존에 간단한 펌웨어 형식으로 구현되었던 임베디드 프로그램이 점차 해야 할 일이 많아지고 복잡하게 된다. 이는 순차적인 프로그램으로는 해결하기 어려운 단계로 발전하고 결국 임베디드 시스템에도 운영체제의 개념이 필요하게 된다. 임베디드 시스템의 대부분 특성상 실시간이라는 요소를 만족해야 하는 점 때문에 많은 임베디드 OS는 RTOS의 속성을 가진다. 다음에 설명하는 주요 개념들은 여러분이 임베디드 OS를 이용해 임베디드 시스템을 개발하기 위하여 반드시 알아두어야 할 여러 개념 중 중요한 개념들을 선정하여 설명한 것이다.

스케쥴러
임베디드 OS는 보통 태스크(Task)라 불리는 프로그램 수행 단위를 가지게 된다. 보통 임베디드 시스템에서는 복수 개의 태스크가 동시에 수행되는 환경을 가지게 되며 이때 OS 내부의 스케쥴러에 의해서 다음 번에 수행되어야 할 태스크를 선택하게 된다. 이때 사용되는 임베디드 OS의 스케쥴링 알고리즘으로는 다양한 알고리즘이 나와 있지만 구현상의 문제 등으로 인해 실제 대부분의 임베디드 OS에서는 우선순위에 기반을 둔 스케쥴링 알고리즘을 사용한다.
대표적인 우선순위 알고리즘으로 FIFO(First In First Out)와 라운드로빈 방식이 있다. FIFO의 알고리즘은 동일한 우선순위를 가진 태스크들이 존재시 먼저 시작한 태스크가 종료될 때까지 다음 번 수행된 태스크가 스케쥴링을 받지 못하는 스케쥴링 알고리즘이며, 라운드로빈 방식은 동일한 우선순위를 가진 태스크들이 존재할 경우 각각 미리 정해진 타임슬라이스(time-slice)만큼씩 차례로 스케쥴링이 되는 알고리즘이다.

프리엠티브 커널
프리엠티브 커널(Preemptive kernel)은 어떤 태스크가 수행되고 있을 경우 커널이 강제로 그 태스크의 수행을 중지시키고 다른 태스크의 기능을 수행시킬 수 있는 능력을 지닌 커널을 말한다. Non-pree mptive 커널에 비해 interrupt latency가 조금 길어지는 단점이 있긴 하지만 대부분의 임베디드 OS에서 프리엠티브 커널을 채택하는 이유는 우선순위가 높은 태스크가 먼저 수행될 수 있다는 점 때문이다. 이는 결국 커널의 안정성을 높게 유지시킨다는 점에서 좋은 점이 될 수 있다.

상호 배제
하나의 태스크가 한 자원을 점유하여 사용중에 또다른 태스크가 접근하여 사용중인 자원에 무단으로 접근 시도 변경을 가한다면 곧 그 자원은 예측불허의 상황으로 치달을 수밖에 없다. 이런 부분을 임계 지역(critical section)이라 명하며, 한 자원이 점유중일 경우 나머지 자원들은 점유하고 있던 태스크가 자원을 모두 사용하고 사용권을 반환하기 전까지 모두 접근이 지연돼야 하는 지역을 말한다. 따라서 임계 지역은 상호 배제(mutual exclusion)로써 보호해야 하며 임베디드 OS는 상호 배제를 위해 인터럽트 Enable/Disable이나 세마포어의 기능으로 임계 지역을 보호할 수 있다.

태스크 커뮤니케이션
임베디드 OS에서의 태스크들은 종종 서로 데이터를 교환해야 할 경우가 생기게 된다. 이럴 경우 태스크간 통신을 통하여 교환할 수 있으며 이 기능은 OS에서 지원하는 여러 도구들에 의해 수행이 된다. 대표적인 방법으로는 시스템 전역의 변수를 선언하여 사용방법이 있으나 이 경우에는 변수 자체가 임계 지역이 되므로 인터럽트 Enable/ Disable이나 세마포어 등으로 상호 배제를 해야 한다. 그 밖의 방법으로는 큐, 파이프, 메일박스, 공유 메모리 등이 있으며 이들은 커널에 의해 자동으로 상호 배제가 이루어짐으로 임계 지역이 보호된다.


[ 임베디드 환경의 파일 시스템 ]
파일 시스템이란 저장장치에 파일을 관리하는 시스템을 말한다. 임베디드 시스템에서 주로 사용하는 저장장치는 보통 네트워크를 통한 외부 서버의 저장장치, 타겟 내의 일반 메모리 및 플래시 메모리 등을 말하며 각각 장치의 특성상 다른 파일 시스템이 올라가게 된다. 외부 서버로부터는 저장 장치에 대한 파일 시스템으로는 NFS(Network File System)라는 것이 있는데, 이는 네트워크를 통해 마치 외부 서버의 파일 시스템을 로컬의 파일 시스템처럼 사용할 수 있게 해주는 파일 시스템이다.
일반 메모리에 대한 파일 시스템은 RAMFS(RAm File System)이라 하여 보통 부트 롬 내에 파일 시스템 이미지를 저장해두고 시스템이 부팅시 일반 메모리에 그 파일들을 모두 복사한 다음 RAMFS를 통하여 파일을 유지 관리하는 파일 시스템이다. 단 일반 메모리에 구현돼 있으므로 타겟의 전원이 없어지면 그 내용이 소실된다.
플래시 메모리는 일반 메모리와는 다르게 전원이 나가도 그 내용이 보전되는 특성이 있으므로 한번 파일 시스템이 구현되면 그 내용이 보존되는 특징이 있다. 하지만 플래시 메모리의 특성상 기록 및 삭제의 횟수 제한이 있으므로 파일 시스템 내에서 이를 효율적으로 관리해 주는 부분이 고려되어야 한다.

[ 세마포어 ]
세마포어(semaphore)는 60년대 중반 Dijkstra가 고안한 메커니즘이다. 이는 태스크간에 상호 공유하는 변수이며, 임계 지역을 세마포어로 보호하면 태스크간 상호 배제을 구현할 수 있다. 기본적인 알고리즘은 먼저 세마포어 변수를 선언한 후 임계 지역에 전에 세마포어를 얻기를 시도한다. 만일 아무도 세마포어 얻기를 시도하지 않았으면 바로 임계 지역에 들어갈 수 있으나 다른 태스크가 세마포어를 얻어서 임계 지역에 있으면 나중에 시도한 태스크는 세마포어를 풀어줄 때까지 블럭 상태로 되게 된다. 이후 세마포어가 풀리면 블럭된 태스크는 세마포어를 얻어 임계 지역에 진입할 수 있게 된다.
세마포어는 초기화시 동시에 진입할 수 있는 개수를 명시할 수 있는데 그 개수가 하나인 세마포어에 대하여 바이너리 세마포어(binary semaphore)라 하며 그 이상의 값을 명시하면 카운팅 세마포어(counting semaphore)라 한다.

[ JTAG란? ]
JTAG(Joint Test Access Group)는 IEEE 표준 1149.1-1990 Test Access Port and Boundary-Scan Architecture에 근거한 규격으로 CPU에서 직접 지원하는 디버깅을 위한 인터페이스로 현재 CPU의 상태를 점검하거나 프로그램의 디버깅, 플래시 메모리에 새로운 자료를 저장할 때 주로 사용한다.

Priority Inversion
낮은 우선순위를 가진 태스크에 의해 높은 우선순위를 가진 태스크가 블럭되어 수행이 되지 않는 현상을 말한다. 이러한 우선 순위 역전 현상은 시스템의 schedulability와 predictability를 떨어뜨려 결국 시스템을 불안정하게 만드는 원인이 되기도 한다. 일부 임베디드 OS에서는 OS 차원에서 priority inheritance를 이용하여 해결하기도 하나, 가장 안전한 방법은 태스크들을 디자인할 경우 그러한 상황이 벌어지지 않도록 설계를 하는 것이다. 보통 이를 막기 위해 같은 세마포어를 쓰는 태스크들 사이에는 같은 우선순위를 주는 등의 방법을 사용한다.

Priority Inheritance
우선 순위 역전현상을 피하는 방법으로 예를 들면 태스크 T2가 특정 리소스를 점유하고 있는 상태에서 우선순위가 높은 T1이 같은 리소스에 접근할 경우 우선순위 역전현상이 나타난다. 이때 이 리소스를 대기하고 있는 가장 큰 우선순위인 T2의 우선순위만큼 T1이 우선순위를 상속(inheritance)받아서 그 우선순위의 값을 유지한 상태로 리소스를 점유하게 된다. 이후 해당 리소스를 모두 사용한 후에는 다시 원래의 T1의 우선순위 값으로 환원된다.

+ Recent posts