Feisty fawn으로 업그레이드!

우분투 Feisty fawn(7.04)이 정식 릴리즈된지 며칠 지났는데도 시험기간이라 업그레이드를 미루고 있었습니다만, 오늘 드디어 업그레이드를 했습니다! 공대 열람실에서 Nespot으로요.;;(덕분에 시험은..OTL)

6.10을 사용하다가 7.04로 업그레이드하고 나니 기존 환경에서 몇가지 바뀐 것들이 있네요.

일단 처음 눈에 띈 것은 ttf-alee를 글꼴이 예쁘지 않게 나온다는 겁니다. 이에 관해서는 KLDP글들도 있고 하니 설정 후에 다시 포스팅하죠~

두번째는 “시스템”/”관리” 에 “제한된 드라이버 관리자” 라는게 생긴 겁니다. 멤버십에 있는 geforce를 사용하는 PC에는 이미 feisty를 깔았는데 여기서 “활성화” 던가 하는 걸 체크하니 알아서 드라이버를 다운받아 설치해주더군요!

세번째는 NTFS-3G가 기본 저장소에 추가된 듯 보인다는 겁니다. ntfs-3g를 저장소 추가없이 그냥 설치할 수 있는 듯 보이네요. 게다가 ntfs-config 라는 도구를 설치하면 “프로그램”/”시스템 도구”에 “NTFS 쓰기 지원 설정 도구”라는 게 생기는데 이 도구를 실행해서 장치에 맞게 체크만 해주고 확인 버튼을 누르면 알아서 fstab 내용을 바꿔주고 마운트해줍니다. ㅎㅎ

ntfs-config
NTFS를 ntfs-3g로 자동으로 마운트해주고 fstab 내용도 알아서 수정해준다!

이 것 말고도 여러가지 많을 듯 한데 쓰다가 생각나는데로 틈틈히 또 포스팅하겠습니다.

결론은! 저어어어엉말! 더 편해졌다는 거예요!

졸음 버그

글에 앞서 프로그래머를 졸린 상태에서 일하도록 하면 안된다고 강력히 주장합니다.

제가 요즘 좀 많이 바쁩니다.

Todo list로 적어봤더니 노트가 꽉차더군요-_-

어제 밤에는(정확히는 오늘 6시까지) 과제기획서를 위한 자료 준비를 하고 6시부터 아르바이트로 하고 있는 프로그램을 코딩했습니다. 코딩 중에는 정말 난리도 아니었죠. 졸린 눈 비비고 깜빡 졸았다가 다시 타이핑하고, 커피를 냅다 위에다 붓고.. 이게 수요일까지 완성되어야 하기 때문에 정말 바쁩니다. 게다가 전 다음주 일요일부터 시험이라구요! 이번주 일요일까지는 과제 기획서, 기말 프로젝트 보고서를 제출해야 하고, 화요일까지 프로그래밍 과제도 있고, 수요일까지 프로그래밍 및 UML 보고서를 제출해야 하고, 같은 날에 Vigenere 암호 해독 프로그램을 작성해야 하며 시험기간이 끝나자마자 알고리즘 22개에 대한 설명과 최선, 최악, 평균에 대한 예제를 만들어서 손으로 풀어서 제출해야 하고, 프로그래밍 언어론에서 프로젝트를 진행할 언어를 선정하는 게시글을 올려야 하며, 토론글을 작성해야만 합니다.(그렇지만 더 나쁜 건 이게 다가 아니라는 겁니다. 더 많이 있어요-_-) 잠을 줄이지 않고는 할 수가 없겠더군요.

그래서 잠을 줄였습니다.

그 결과로 아침에 다음과 같은 코드를 작성했답니다.

   for(i = 0; 1 < 10; i++)    {
       ar >> sData.inclineStart    [i];
       ar >> sData.inclineEnd        [i];
       ar >> sData.inclinePercent    [i];
   }

뭐가 잘못됐는지 보이시나요? 저는 제가 평생 이런 코드를 짜지 않을 거라고 생각했습니다. 저런 코드를 짜는 프로그래머는 “죽어야 된다”고 생각했죠-_-;;; “어떤 바보멍청이가 저런 코드를 짜?” 라고 생각했죠. 그 바보 멍청이가 오늘 제가 될 줄은 꿈에도 몰랐답니다.

이 것 말고도 몇가지 사고(!)들을 일으키는 코드를 아침에 수없이 양산해냈죠; 저장을 두 번 한다던지.. 배열의 index를 다른 변수의 index와 헷갈린다던지.. 이게 저 혼자 짜는 프로그램이니 다행이지 협업되서 돌아가는 프로그램이었다면 어땠을지 정말…

음주 코딩, 졸음 코딩.. 정말 없어야 합니다. 음주 코딩이나 졸음 코딩을 해야 할 정도로 프로그래머를 괴롭히지(!) 마세요. 두배, 세배, 열배, 백배가 되어 다시 돌아옵니다.(대부분 프로그래머에게 다시 돌아오게 되어 프로그래머를 더 힘들게 하긴 합니다만)

근데 지금도 정말 졸립고 힘드네요.

프로그래밍 언어 – Lisp

프로그래밍 언어 강의 시간에 들었던 Lisp 강의를 들으면서 요약했던 부분이다.
지금 보니 뭘 요약, 정리해놓은 건지도 잘 모르겠다..;;

quote(abc) == ‘abc 수정 X

* Interpretation & dynamic typed 언어

* 모든 표현에 대해 평가(evaluate)하고 결과값(retrun value)를 생성함.

* Lexical scoping(scope를 안에만 보는 것:Look inside, never outside, local 우선) indefinite scoping(scoping에 제한 없음)을 사용함.

* Atom(자르면 안됨)과 List 중심의 표현되는 s-expression의 언어

* Atom : refer to just about any s-expression that connot be taken apart

* q는 얼음, 아닌건 땡(…)

* (+ 2 (setq x (* 3 4))) 는 스택 사용, *는 binary operation이므로 parameter가 두 개, x는 중간에 binding 됨.

* ‘( )’ 는 리스트 ‘(‘를 열면 리스트 만듦.

* setq은 pointer와 비슷한 개념

* (set x ‘z)는 (setq y z)와 같다.

* s-expressions은 괄호가 열리면 꼭 닫혀야 한다.

* (a (b c) d) 같은 건 binary tree등을 나타내는데 쓸 수 있음.

* (car (cdr ‘(a b c))) == (cadr ‘(a b c))

* nil은 type이 없다


* function define
(defun fname (v1, …, vn)
       (body1) … (bodym))

* predicate: T/nil 을 리턴함

(atom a) -> T: A가 atom 이냐

(atom ‘(a b))

* mapping functions : mutilple operation

* property list : DB, global(또, get,  set)

프로그래밍을 하면서 생긴 몇 가지 버릇들..

어렸을 때 부터 프로그래밍을 하다보니 저도 모르게 나오는 버릇들이 몇 가지 있습니다.

첫번째는 종이에 연필로 곱셈을 할 때나 수식 계산을 할 때 2 X 2 식으로 쓰는 것이 아니라 2 * 2 로 쓰게 되는 거죠. X 기호보단 * 기호가 더 익숙하게 되버렸거든요.
두번째는 수를 1부터 세지 않고 0부터 센다는 것인데 세어나가는 모든 수를 인덱스 개념으로 생각해버리게 된 겁니다.
(추가1) 세번째는 K(킬로)와 같은 단위를 1000 단위로 생각하는 것이 아니라 1024단위로 생각하게 되버린 겁니다.;;

이 것 참…

이  것 말고도 굉장히 많이 있는데 어째 적어보려니 생각이 나질 않네요. 생각나는데로 추가해야지 흐흐..

한국산업인력공단 기출문제 사이트

아는 동생이 한식 조리기능사를 준비중입니다.

도와주려고 기출문제를 찾다보니 이런 사이트(http://q-net.co.kr/)도 있었네요!

각종 기사, 산업기사, 기능사, 기능장, 기술사까지 기출문제를 제공하고 있는데

어지한간 자격증 시험은 대개 그렇듯이 기출 문제만 보아도 딸 수 있기 때문에 한국인력산업공단의 자격증을 준비하는 사람들에게는 꽤나 유용할 것 같습니다.

오늘 가서 알려 주어야 겠어요!

MIPS 시뮬레이터의 버그

학교에서 컴퓨터구조 수업을 듣는 중입니다.
IA-32(교수님 표현을 빌리자면 걸레-_-) 구조가 아닌 간단한 MIPS 아키텍처에 대해 배우고 있는데 MIPS Instruction set 을 이용해서 간단한 ASM 프로그래밍을 과제로 내주셨기에 어제 열심히 했더랍니다. 시뮬레이터로는 PCSpim 이라고 하는 윈도우즈 기반(이 것부터 잘못일지도 몰라요-_-) 시뮬레이터를 썼습니다. SPIM 은 Unix/Linux 기반의 콘솔 환경에서 사용할 수 있는 도구입니다. PCSpim은 그를 윈도우즈의 GUI 환경으로 만든거구요.

그런데! 아무리해도 원하는대로 답이 안나오는 겁니다!

답이 안나오면 가장 먼저 의심하는건 접니다-_-;; PC는 거짓말을 하지 않잖아요?
이거 뭔가 이상하다고! 컴파일러가 잘못되었다고! 외쳐봐야 나중에 보면 결국 자기 탓이기 마련입니다.

그런데 어제는 아니더군요.(컴파일러는 아니니 그럴 수 있는 건지도 모르겠지만요~ 😉 )
코드를 열심히 들여다보고, 내 능력이 이 거 밖에 안되나~ 한숨도 쉬어보고, 다시 아무리 코드를 들여다보면서 돌려봐도 안되는 겁니다. 난감하더군요.
결국 차례차례 나눠서 한 스텝씩 진행해보았습니다. 자세히 한스텝씩 진행하며 살펴보니 이 PCSpim 이란 놈이 자기 멋대로 Stack Pointer Register 값을 바꿔버리고 있더군요. 그래서 $SP 의 값을 가지고 리턴하는 부분에서 엉뚱한 곳으로 리턴하면서 Exception을 툭툭 뱉어내고 있는 것이었습니다.

사용자 삽입 이미지
jump전의 $SP값

사용자 삽입 이미지
$SP값이 제멋대로 바뀌었다!

그래서 바로 리눅스로 재부팅하고! 우분투의 소스리스트에 있는 SPIM 을 설치하려고 했으나 제대로 동작하지 않길래 소스를 받아다가 소스 컴파일하고 설치를 했죠.

바로 결과가 나오더군요-_-… 아까운 제 3시간은 그렇게 흘러갔습니다. 버젼이 7.3이나 되는 놈이 이럴 줄은 몰랐답니다ㅠㅠ

추가 : 다른 컴퓨터에서는 제대로 돌아가길래 PCSpim을 재설치하고 다시 해보았는데도 안됩니다. 그래서 뭔가 이상하다 생각하고는 Simulator 메뉴의 Settings… 에 있는 옵션들을 건드려보았는데 Delayed Branches 와 Delayed Load를 체크상태로 두면 (제 노트북에서만) 제대로 동작하지 않습니다. 이게 어떤 역할을 하길래 $SP 값을 마구 바꾸는 건지 모르겠네요. 게시판에 질문을 올렸는데 답변이 오면 또 추가하도록 하겠습니다.

저는 정부 문서의 ODF 채용을 지지합니다!

위에 걸린 두개의 배너가 보이시나요?
“정부 문서의 ODF 채용을 지지합니다” 란 문구가 보이시나요? ㅎㅎ(클릭하시면 KLDP의 서명운동 페이지로 이동하실 수 있습니다. 부탁드려요!)

배너를 보시고 ODF 가 무엇인지 궁금하신 분들도 있으실 겁니다. ODF가 무엇인고 하니 “Open Document Format”의 약자입니다. 자세한 것은 여기를 참고해보세요~

간략히 설명드리자면 MS Office나 한글2005와 같은 프로그램에 종속적인 파일 형식이 아닌 모두에게 규격, 구현 방법 등이 공개된 파일 형식을 말합니다. 한글 시리즈의 HWP나 MS Word의 DOC, MS Excel의 XLS 등의 파일 형식은 각각 회사가 비공개하고 있기 때문에 각 파일 형식을 지원하려면 회사와 계약을 한다던지 하는 것을 해야겠죠.(이는 당연히 비용 문제로 이어집니다.)

그러나 파일 형식의 모든 것이 공개되어 있다면 그 파일을 이용하기 위해서 꼭 특정 회사의 프로그램을 사용하지 않고도 그 파일 형식을 지원하는 다른 어떠한 프로그램으로도 이용할 수 있게 되는 것입니다. 자, 그래서! 여기서 말하는 모두에게 공개된 파일 형식이 바로 ODF입니다.

정부문서와 같은 공공 문서는 국민 누구나가 어떠한 제약없이도 사용할 수 있어야 합니다. 그러나 정부 문서가 특정 회사의 프로그램을 이용한다면 정부의 문서를 이용하기 위해서 그 특정 회사의 프로그램(예를 들면 마이크로소프트 오피스나 한글)을 구매하여야 합니다.(지금 한번 오피스나 한글의 가격을 검색해보세요!) 정부문서는 구매할 능력이 없는 사람에게 “못사면 안쓰면 그만 아니오?”라고 할만한 성격의 것이 아닙니다.

그러므로 당연히 정부의 문서들은 공개된 파일 형식인 ODF가 되어야 함이 마땅합니다.

ODF가 되면 기존의 수많은 문서들은 어떻게 할 것인가에 대한 걱정이 앞서신다면, 미래의 일을 다시 한번 곰곰히 생각해보세요. 현재까지의 문서들에 대해서 그런 걱정이 된다면 앞으로 계속 쌓여나갈 문서들 역시 특정 회사에 목매게 되지 않을까요? 이제라도! 더 늦기전에 ODF로 전환하여야 합니다.

ODF는 공개되어 있으므로 어떤 프로그램에서도(MS Office나 한글에서도!) 구현될 수 있습니다. 이는 나중에 어떠한 프로그램으로도 전환할 수 있다는 것을 뜻하며 무료 프로그램이 있다면(!) 비용 부담 없이도 무료로 이용할 수 있음을 뜻합니다. 능력이 된다면 직접 만드셔도 되요! 🙂

여기 제가 말한 것 말고도 정부 문서를 공개 파일 형식인 ODF로 하였을 때 얻을 수 있는(언급한 특정 회사에는 타격이 될 수도 있겠지만) 이익은 수도 없이 많습니다. 국민 모두의 이익이죠!

더 망설일 필요가 무엇입니까? 어서 ODF로 전환하자구요!

서명운동에 동참하시고 싶으시다면 여기를 누르시거나 상단의 배너를 꾸욱 눌러주세요!

SW Engineering – 2007.3.15

Examples of emrgent properties

– Volume
– Reliability
– Security
– Reparibility
– Usability

Type of emergent property

– Finctional properties
   – transportation device
– Non-functional emergent properties

System reliability enginerring

– 컴포넌트의 내부 의존성때문에 오류는 전체 시스템에 퍼진다.
– 컴포넌트만으로 전체 특성을 설명할 수 없다.
– 컴포넌트 관계의 모든 결합을 예측하는 것은 거의 불가능
– Software reliability 측정은 잘못된 System reliability 그림을 보여준다.

Influences of Reliability

– Hardware reliability
   – 하드웨어 고장
   – 고치는 데 걸리는 시간
– Software reliability
   – incorrect output을 발생할 확률
   – hardware failure에 비해 software does not ware out.
   – Bathtub curve(하드웨어 수명)
– Operator reliability
   – 운영자가 에러를 일으킬 확률

Reliability relationships

– Hardware failure can generate spurious signals that are outside the range of inputs expected by the software.
– Software errors -> operator errors.

The ‘shall-not’ properties

– Properties such as performance and reliability can be measured.
다음과 같은 properties 는 should not exhibit even though after integration
– Safety – 에러를 일으켜도 그 영향이 제한된 시스템
– Security – not permit unauthorised use.
– 평가하기 어려운 시스템

SW Engineering – 2007.3.13

Issues of professional responsibility

– Confidentiality
– Competence
– Intellectual property rights
– Computer misuse

ACM/IEEE Code of Ethics(윤리 강령)

1. Public
   SE shall act consistenty with the public interest.
2. Client and Employer
3. Product
   가능한한 표준에 맞춰 개발해야 한다.
4. Judgment
5. Management
6. Profession
7. Colleagues
fair, supportive
8. Self

Ethical dilemmas

What is a system?

System Categories

– Technical computer-based systems.

– Socio-technical systems.

Socio-technical system characteristics

– Emergent properties
– Non-deterministic
   같은 Input에 대해서 늘 같은 Output을 생성해내지 못한다.
– Complex relationships with organizational objectives
   시스템 자체의 요소만 영향을 미치지는 않는다.

Emergent properties

   – 시스템 전체의 특성
   – 컴포넌트간의 관계로서 발생하게 되는 특성
   – 처음 integration 후 평가하고 측정 가능

Examples of emergent properties

   – Volume : 시스템의 배열에 따라 달라진다.
   – Reliability : 하나하나는 Realible할 수 있지만 하나로 integration되었을 때는 서로간의 iinteration에 대해서 영향을 받으므로 전체적으로는 달라질 수 있다.