여기는 저의 2004~2007년까지의 기록입니다. 이 블로그는 이제 Tistory로 옮겼습니다.
2008년부터의 기록은 http://blog.studioego.info 로 가시기 바랍니다.

StudioEgo's Thoughts, seasonⅡ


Ruby on rails 설치

Ruby On Rails Linux Setting Log


 이번에 학교 연구실 Linux서버에 Ruby on rails를 설치하게 되었다.


여기서는 Ruby on rails를 설치한 일대기를 기록해보기로 한다.


Linux는 Fedora Core 7을 사용하였다.


어떻게 설치를 하였나?


 황대산님이 쓰신 웹개발 2.0 루비 온 레일스 라는 책에서는 Windows와 MAC OS에서 설치하는 방법만 나와있어서 Linux에서 설치하려고 할때에는 어떻게 설치하는지 몰라서 홈페이지에서 찾아보았다.


이번에 Ruby, Ruby on rails 설치는 링크(http://www.dreamincode.net/forums/index.php?showtopic=30705&hl)를 참고로 설치를 하였다.


 


필요한 Fedora package설치


우선 설치하기 전에 httpd와 mysql은 기본적으로 깔려있어야 한다.


혹시나 모를까봐 httpd(웹서버)와 Mysql(DB-데이터베이스)가 설치가 되었는지를 확인해본다.



[root@localhost ~]# yum install httpd mysql-server mysql



깔려져있다는 것을 확인을 하였다.



[root@localhost ~]# yum install httpd mysql-server mysql

Setting up Install Process

Parsing package install arguments

Package httpd - 2.2.8-1.fc7.x86_64 is already installed.

Package mysql-server - 5.0.45-6.fc7.x86_64 is already installed.

Package mysql - 5.0.45-6.fc7.x86_64 is already installed.

Nothing to do

[root@localhost ~]#



readline 라이브러리가 이 Linux에 깔려있다는 것을 확인하였다.



[root@localhost ~]# yum install readline

Setting up Install Process

Parsing package install arguments

Package readline - 5.2-4.fc7.i386 is already installed.

Package readline - 5.2-4.fc7.x86_64 is already installed.

Nothing to do

[root@localhost ~]#



깔려 있다는 것을 확인하였다.


 


Ruby Package 설치


Ruby는 우선 Fedora core 7 배포판에 있는 것으로 사용하기로 하였다.



[root@localhost ~]# yum install ruby

fedora                    100% |=========================| 2.1 kB    00:00

macromedia                100% |=========================| 1.9 kB    00:00

updates                   100% |=========================| 2.3 kB    00:00

primary.sqlite.bz2        100% |=========================| 3.9 MB    01:59

adobe-linux-i386          100% |=========================|  951 B    00:00

Setting up Install Process

Parsing package install arguments

Package ruby - 1.8.6.114-1.fc7.x86_64 is already installed.

Nothing to do

[root@localhost ~]#



이미 설치가 되어 있다는 것을 확인하였다 -_-;; (언제 깔았는지는 나도 잘 모른다.  컴퓨터를 받은 3월초에 Ruby를 사용한답시고 설치했을듯 하다.)


 


그리고 나서 RubyGems(루비젬)을 설치해보자.


루비젬(RubyGems)은 루비의 각종 라이브러리를 자동으로 설치하고 관리해주는 패키지 관리 유틸리티로 레일즈 설치에 사용된다.


루비젬은 Fedora Core 7 배포판에서 받아 설치를 한다.



 [root@localhost rubygems-1.1.1]# yum install rubygems



설치하면 아래와 같이 다른 프로그램도 깔리게 된다. 이것도 깔아야 설치가 된다.



[root@localhost rubygems-1.1.1]# yum install rubygems

Setting up Install Process

Parsing package install arguments

Resolving Dependencies

--> Running transaction check

---> Package rubygems.noarch 0:0.9.4-1.fc7 set to be updated

--> Processing Dependency: ruby-rdoc for package: rubygems

--> Running transaction check

---> Package ruby-rdoc.x86_64 0:1.8.6.114-1.fc7 set to be updated

--> Processing Dependency: ruby-irb = 1.8.6.114-1.fc7 for package: ruby-rdoc

--> Running transaction check

---> Package ruby-irb.x86_64 0:1.8.6.114-1.fc7 set to be updated

--> Finished Dependency Resolution


Dependencies Resolved


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

 Package                 Arch       Version          Repository        Size

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

Installing:

 rubygems                noarch     0.9.4-1.fc7      updates           498 k

Installing for dependencies:

 ruby-irb                x86_64     1.8.6.114-1.fc7  updates           274 k

 ruby-rdoc               x86_64     1.8.6.114-1.fc7  updates           342 k


Transaction Summary

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

Install      3 Package(s)

Update       0 Package(s)

Remove       0 Package(s)


Total download size: 1.1 M

Is this ok [y/N]:



y(yes)를 입력하고 나서 설치를 한다.


설치를 하면 아래와 같은 글자들이 나온다.



Downloading Packages:

Running rpm_check_debug

Running Transaction Test

Finished Transaction Test

Transaction Test Succeeded

Running Transaction

  Installing: ruby-irb                     ######################### [1/3]

  Installing: ruby-rdoc                    ######################### [2/3]

  Installing: rubygems                     ######################### [3/3]


Installed: rubygems.noarch 0:0.9.4-1.fc7

Dependency Installed: ruby-irb.x86_64 0:1.8.6.114-1.fc7 ruby-rdoc.x86_64 0:1.8.6.114-1.fc7

Complete!

[root@localhost ~]#



그리고는 Complete!라 나오면서 설치가 끝난다.


그리고 나서 나머지도 설치를 한다.



[root@localhost ~]# yum install install ruby ruby-devel ruby-irb ruby-libs ruby-rdoc ruby-ri rubygems



아래와 같이 설치가 된다.



[root@localhost lib]# yum install install ruby ruby-devel ruby-irb ruby-libs ruby-rdoc ruby-ri rubygems

fedora                    100% |=========================| 2.1 kB    00:00

macromedia                100% |=========================| 1.9 kB    00:00

updates                   100% |=========================| 2.3 kB    00:00

primary.sqlite.bz2        100% |=========================| 3.1 MB    00:15

adobe-linux-i386          100% |=========================|  951 B    00:00

Setting up Install Process

Parsing package install arguments

No package install available.

Package ruby - 1.8.6.114-1.fc7.x86_64 is already installed.

Package ruby-irb - 1.8.6.114-1.fc7.x86_64 is already installed.

Package ruby-libs - 1.8.6.114-1.fc7.x86_64 is already installed.

Package ruby-rdoc - 1.8.6.114-1.fc7.x86_64 is already installed.

Package rubygems - 0.9.4-1.fc7.noarch is already installed.

Resolving Dependencies

--> Running transaction check

---> Package ruby-libs.i386 0:1.8.6.114-1.fc7 set to be updated

---> Package ruby-devel.i386 0:1.8.6.114-1.fc7 set to be updated

---> Package ruby-ri.x86_64 0:1.8.6.114-1.fc7 set to be updated

---> Package ruby-devel.x86_64 0:1.8.6.114-1.fc7 set to be updated

--> Finished Dependency Resolution


Dependencies Resolved


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

 Package                 Arch       Version          Repository        Size

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

Installing:

 ruby-devel              i386       1.8.6.114-1.fc7  updates           770 k

 ruby-devel              x86_64     1.8.6.114-1.fc7  updates           778 k

 ruby-ri                 x86_64     1.8.6.114-1.fc7  updates           2.0 M

Installing for dependencies:

 ruby-libs               i386       1.8.6.114-1.fc7  updates           1.7 M


Transaction Summary

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

Install      4 Package(s)

Update       0 Package(s)

Remove       0 Package(s)


Total download size: 5.2 M

Is this ok [y/N]: y

Downloading Packages:

(1/4): ruby-devel-1.8.6.1 100% |=========================| 778 kB    00:06

(2/4): ruby-ri-1.8.6.114- 100% |=========================| 2.0 MB    00:05

(3/4): ruby-devel-1.8.6.1 100% |=========================| 770 kB    00:03

(4/4): ruby-libs-1.8.6.11 100% |=========================| 1.7 MB    00:05

Running rpm_check_debug

Running Transaction Test

Finished Transaction Test

Transaction Test Succeeded

Running Transaction

  Installing: ruby-libs                    ######################### [1/4]

  Installing: ruby-devel                   ######################### [2/4]

  Installing: ruby-ri                      ######################### [3/4]

  Installing: ruby-devel                   ######################### [4/4]


Installed: ruby-devel.i386 0:1.8.6.114-1.fc7 ruby-devel.x86_64 0:1.8.6.114-1.fc7 ruby-ri.x86_64 0:1.8.6.114-1.fc7

Dependency Installed: ruby-libs.i386 0:1.8.6.114-1.fc7

Complete!

[root@localhost lib]#



설치를 다 하였으면 아래 명령어로 rails를 설치하자.



[root@localhost ~]# gem install rails --include-dependencies



아래와 같이 설치가 된다.



[root@localhost ~]# gem install rails --include-dependencies

Bulk updating Gem source index for: http://gems.rubyforge.org

Successfully installed rails-2.0.2

Successfully installed rake-0.8.1

Successfully installed activesupport-2.0.2

Successfully installed activerecord-2.0.2

Successfully installed actionpack-2.0.2

Successfully installed actionmailer-2.0.2

Successfully installed activeresource-2.0.2

Installing ri documentation for rake-0.8.1...

Installing ri documentation for activesupport-2.0.2...

Installing ri documentation for activerecord-2.0.2...

Installing ri documentation for actionpack-2.0.2...

Installing ri documentation for actionmailer-2.0.2...

Installing ri documentation for activeresource-2.0.2...

Installing RDoc documentation for rake-0.8.1...

Installing RDoc documentation for activesupport-2.0.2...

Installing RDoc documentation for activerecord-2.0.2...

Installing RDoc documentation for actionpack-2.0.2...

Installing RDoc documentation for actionmailer-2.0.2...

Installing RDoc documentation for activeresource-2.0.2...

[root@localhost ~]#



rails를 설치를 하였으면 mongrel를 설치하기로 한다.


아래와 같이 명령어 쳐서 설치하면 된다.



[root@localhost ~]# gem install gem_plugin daemons capistrano --include-dependencies


[root@localhost ~]# gem install mongrel mongrel_cluster railsmachine --include-dependencies



아래와 같이 설치가 된다.



[root@localhost ~]# gem install gem_plugin daemons capistrano --include-dependencies

Successfully installed gem_plugin-0.2.3

Installing ri documentation for gem_plugin-0.2.3...

Installing RDoc documentation for gem_plugin-0.2.3...

Successfully installed daemons-1.0.10

Installing ri documentation for daemons-1.0.10...

While generating documentation for daemons-1.0.10

... MESSAGE:   Unhandled special: Special: type=33, text="All"

... RDOC args: --ri --op /usr/lib/ruby/gems/1.8/doc/daemons-1.0.10/ri --quiet lib README Releases TODO

(continuing with the rest of the installation)

Installing RDoc documentation for daemons-1.0.10...

Successfully installed capistrano-2.3.0

Successfully installed net-ssh-2.0.1

Successfully installed net-sftp-2.0.0

Successfully installed net-scp-1.0.0

Successfully installed net-ssh-gateway-1.0.0

Successfully installed highline-1.4.0

Installing ri documentation for capistrano-2.3.0...

While generating documentation for capistrano-2.3.0

... MESSAGE:   Unhandled special: Special: type=33, text="Notes"

... RDOC args: --ri --op /usr/lib/ruby/gems/1.8/doc/capistrano-2.3.0/ri --quiet lib

(continuing with the rest of the installation)

Installing ri documentation for net-ssh-2.0.1...

While generating documentation for net-ssh-2.0.1

... MESSAGE:   Unhandled special: Special: type=33, text="This"

... RDOC args: --ri --op /usr/lib/ruby/gems/1.8/doc/net-ssh-2.0.1/ri --quiet lib

(continuing with the rest of the installation)

Installing ri documentation for net-sftp-2.0.0...

While generating documentation for net-sftp-2.0.0

... MESSAGE:   Unhandled special: Special: type=33, text="Net::SFTP"

... RDOC args: --ri --op /usr/lib/ruby/gems/1.8/doc/net-sftp-2.0.0/ri --quiet lib

(continuing with the rest of the installation)

Installing ri documentation for net-scp-1.0.0...

While generating documentation for net-scp-1.0.0

... MESSAGE:   Unhandled special: Special: type=33, text="Provides"

... RDOC args: --ri --op /usr/lib/ruby/gems/1.8/doc/net-scp-1.0.0/ri --quiet lib

(continuing with the rest of the installation)

Installing ri documentation for net-ssh-gateway-1.0.0...

While generating documentation for net-ssh-gateway-1.0.0

... MESSAGE:   Unhandled special: Special: type=33, text="A"

... RDOC args: --ri --op /usr/lib/ruby/gems/1.8/doc/net-ssh-gateway-1.0.0/ri --quiet lib

(continuing with the rest of the installation)

Installing ri documentation for highline-1.4.0...

While generating documentation for highline-1.4.0

... MESSAGE:   Unhandled special: Special: type=33, text="A"

... RDOC args: --ri --op /usr/lib/ruby/gems/1.8/doc/highline-1.4.0/ri --title HighLine Documentation --main README --quiet lib README INSTALL TODO CHANGELOG LICENSE

(continuing with the rest of the installation)

Installing RDoc documentation for capistrano-2.3.0...

Installing RDoc documentation for net-ssh-2.0.1...

Installing RDoc documentation for net-sftp-2.0.0...

Installing RDoc documentation for net-scp-1.0.0...

Installing RDoc documentation for net-ssh-gateway-1.0.0...

Installing RDoc documentation for highline-1.4.0...

[root@localhost ~]#

[root@localhost ~]# gem install mongrel mongrel_cluster railsmachine --include-dependencies

Select which gem to install for your platform (x86_64-linux)

 1. mongrel 1.1.4 (ruby)

 2. mongrel 1.1.4 (java)

 3. mongrel 1.1.4 (x86-mswin32-60)

 4. mongrel 1.1.3 (java)

 5. mongrel 1.1.3 (i386-mswin32)

 6. mongrel 1.1.3 (ruby)

 7. Skip this gem

 8. Cancel installation

> 1

Select which gem to install for your platform (x86_64-linux)

 1. fastthread 1.0.1 (mswin32)

 2. fastthread 1.0.1 (ruby)

 3. fastthread 1.0.1 (i386-mswin32)

 4. Skip this gem

 5. Cancel installation

> 2

Building native extensions.  This could take a while...

Building native extensions.  This could take a while...

Successfully installed mongrel-1.1.4

Successfully installed fastthread-1.0.1

Successfully installed cgi_multipart_eof_fix-2.5.0

Installing ri documentation for mongrel-1.1.4...

Installing ri documentation for fastthread-1.0.1...


No definition for dummy_dump


No definition for dummy_dump


No definition for rb_queue_marshal_load


No definition for rb_queue_marshal_dump

Installing ri documentation for cgi_multipart_eof_fix-2.5.0...

Installing RDoc documentation for mongrel-1.1.4...

Installing RDoc documentation for fastthread-1.0.1...


No definition for dummy_dump


No definition for dummy_dump


No definition for rb_queue_marshal_load


No definition for rb_queue_marshal_dump

Installing RDoc documentation for cgi_multipart_eof_fix-2.5.0...

Successfully installed mongrel_cluster-1.0.5

Successfully installed railsmachine-1.0.0

[root@localhost ~]#



For the last install, it may ask which version you want, choose the latest ruby versions.


마지막 설치에서 어떤 버전을 원하는지를 물어보는데 나는 최신 Ruby 버전을 선택하였다.



Select which gem to install for your platform (x86_64-linux)

 1. mongrel 1.1.4 (ruby)

 2. mongrel 1.1.4 (java)

 3. mongrel 1.1.4 (x86-mswin32-60)

 4. mongrel 1.1.3 (java)

 5. mongrel 1.1.3 (i386-mswin32)

 6. mongrel 1.1.3 (ruby)

 7. Skip this gem

 8. Cancel installation

> 1

Select which gem to install for your platform (x86_64-linux)

 1. fastthread 1.0.1 (mswin32)

 2. fastthread 1.0.1 (ruby)

 3. fastthread 1.0.1 (i386-mswin32)

 4. Skip this gem

 5. Cancel installation

> 2



이유는 간단하다. 웹페이지에 쓰여져 있기 때문이다. 물어보는것도 Platform을 어떤 것으로 하는 가를 물어보기 때문에 선택할 것이 Ruby밖에 없었다. (Ruby 설치하는 법도 잘 모르므로 -_-;; 자세한 것은 고수님 Help~)


 


 


Mongrel 설정


root권한에서 설정을 하였다.


* Creating a mongrel user to run mongrel as: /usr/sbin/adduser -r mongrel
* Create mongrel conf directory: mkdir /etc/mongrel_cluster
* Symlink mongrel initscript

ln -s /usr/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/resources/mongrel_cluster /etc/init.d/mongrel_cluster
* Make it executable chmod 755 /usr/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/resources/mongrel_cluster
* Add it to chkconfig chkconfig --add mongrel_cluster
* Enable it in chkconfig chkconfig mongrel_cluster on


여기서 중요한 점은 mongrel_cluster 버전이 뭔가에 따라 폴더이름이 다르다. 이 점을 유의해야 한다.


 


후기


설치는 링크(http://www.dreamincode.net/forums/index.php?showtopic=30705&hl)를 참고로 설치를 하였다.


나도 웹에서 보고 찾은 내용들을 한글로 정리하니까 뿌듯(?)까지는 아니지만 한글 Rails문서를 쓴다는 것에 보람을 느낀다.


말로만 듣던 Ruby on Rails를 나도 개발하게 되는 것인가? ㅎㅎ


 



이 글은 스프링노트에서 작성되었습니다.

by Ego君 | 2008/05/10 18:50 | 컴퓨터 | 트랙백 | 덧글(0)
GeekOS 매뉴얼 보다가 응???
이 로고는 geekOS의 로고입니다 -_-;;

http://geekos.sourceforge.net 에서 자세한 내용을 알수 있습니다. :D



What is it?
GeekOS is a tiny operating system kernel for x86 PCs. Its main purpose is to serve as a simple but realistic example ofan OS kernel running on real hardware. (Actually, most of the development is done on theBochs emulator.)

위의 영어설명대로 GeekOS는 아주 가벼운 OS Kernel입니다.
아, 이걸 실제로 쓴다고 조교님이 매뉴얼을 주었는데 매뉴얼에 간단한 설명만 있어서 당황했습니다. 파일명이 hackingOS라는 것도 그렇지만 그 영어인데도 외계어 일색 @.@ 근데 설명이 짤막짤막해서 이걸 참고해서 어떻게 코딩할지가 궁금하네요.
아래는 GeekOS 0.3.0의 매뉴얼 입니다.
hacking.pdf

GeekOS매뉴얼을 보는데 이걸 한학기에 다 코딩을 해본다는 것을 생각만해도 한학기는 월화수목금금금 과제할것 같다는 @.@
리눅스 커널을 대충 분석했으니까 GeekOS 과제는 코드 소스 참고해서 과제를 해야하는지 궁금하더군요
대충 영어로 된 매뉴얼을 훑어보고있다만, 장님이 코끼리 만지는 듯하게 이번 학기 어떻게 공부할지가 감이 안잡혀요 ㅠㅠ
왜이리 겁이 많아지나?
by Ego君 | 2007/09/08 22:10 | 컴퓨터 | 트랙백 | 덧글(1)
Google神은 언제 어디서나 있다.
이번에 노트북에 프로그램 깔다가 오류나는 바람에 다시 재설치를 해 버렸다.
(백업은 아부지에게 뺐긴 컴퓨터로 했다. 160G에 넣었던 내 중요한 자료들이 없어졌던 컴퓨터로 :D)

노트북에 하드디스크 용량 모잘라서 리눅스깔렸던 것까지 다 밀어버리고 윈도우즈를 깔게 되었다.

윈도우즈 설정 다 하고 나서 Visual C++ 6.0깔고 Platform SDK 깔고, Visual Studio 2005깔고, 그다음 Google Package를 깔게 되었다.

아 이렇게 아름다운 클릭질을 하더니 쓱쓱 Google관련 패키지는 다 깔리고 업데이트 할 것은 다 업데이트 하였다.
웬간한 편리한 소프트웨어는 다 깔린다 보면 된다. Google Package는 한꺼번에 소프트웨어 설치하는 매리트로 인해 다른 소프트웨어는 눈에 들어가지가 않는다. Google 툴바는 원래부터 설치하던 것이라 이번에도 터지 않했다.
이번에는 Google Desktop까지 깔았다.-_-;; 저번에는 무겁다고 안깔았는데 이번에는 깔고 쓸려고한다. 내 컴퓨터 하드 안에있는 파일 내용들 검색하는 것도 힘든 마당이라서.
사진 관리하기도 어려워서 Google에서 나온 Picasa2도 깔아버렸다. 저번에도 무겁다고 안깔았는데 말이지.
Google에 들어가서 신나게 검색을 돌리다가 깜빡하였다. 메신저를 안깐 것이였다.
메신저를 깔아야 하는데 P.C.R.C.선배님과 대화창구를 만들어야 하니까 Google Talk를 깔고, 가끔씩은 지도를 보니까 Google Earth를 깔았다.

깔다보니 나는 Google의 도움 없이는 아무것도 못하는 인간에 불과하였다. Google神의 영접을 받아서 컴퓨터에 모두 Google에 들어간 소프트웨어를 쓰고 있던 것이다. 검색엔진은 당연히 Google!
그리고 현실세계에서도 마찬가지이다. Google神의 영접을 받아서 Google 티셔츠를 틈만나면 착용하여 T동 돌아다니고, Google 볼펜을 가지고 수업시간에 수업내용을 필기한다. 그리고 핸드폰줄에도 Google이 들어가구나-_-;;
핸드폰에 Google 핸드폰 줄을 달고 있습니다.

참 그리고 보니 Google神은 언제 어디서나 있습니다. 이것을 Ubiquitous Google이라고 불려야 하나요?
아님 제가 Google에 중독된 상태인가요? 이렇게 神처럼 떠받들고 있는것을 보면 말이죠. -ㅅ-
그리고 보니까 Google님이 보고계셔라는 글귀도 생각나더군요^^

우리 주위에는 Google이라는 뗄레야 뗄수없는 존재가 있다는 것을 느낍니다.
거기에 중독되면 정말 헤어날 수가 없죠. 헤어날 방법은 M$사에 붙으면 됩니다 -ㅅ-
(M$사의 Live검색, Live 메신저 등등이 있습니다 :D)

아래 그림은 Google Desktop을 설치하고 사이드바 설정했을때 나타나는 화면입니다.

by Ego君 | 2007/07/31 11:30 | 컴퓨터 | 트랙백 | 덧글(5)
Visual Studio 2005 설치
이번에 Visual Studio 2005를 설치하였다.

여태까지 잘 써왔던 Visual Studio 6.0을 잘 쓰다가도 콘솔에도 잘 쓰지만, 이제 대세는 Visual Studio 2005로 기운 듯 하다. 6.0도 잘 쓰긴 써도 이제 대세가 Visual Studio 2005로 기울러지는 것 같다.

1998년도에 나온 Visual Studio 6.0은 이제 대세가 64비트시대다, Vista의 도래로 인하여 쓰는 빈도수가 점점 줄어가는 듯 하다.
Visual Studio 2003나왔을때에도 잘만쓰던 Visual Studio 6.0을 어떻게 포기할 수 있을까였는데 이제는 Vista에 등등의 변화로 인해 이제 윈도우즈 프로그래밍은 Visual Studio 2005로 대부분 할듯 하다.

대학교 입학전부터 지금까지 써왔던 Visual Studio 6.0은 거의 안쓸듯 해서 아쉽다. ㅠㅠ
(그래도 아직도 Visual Studio 6.0은 너무나 익숙해서 계속 쓰일듯 하지만 빈도수는 줄어들듯)


열혈강의 강의로 인기를 얻고 있는 윤성우님의 책 "윈도우즈 시스템 프로그래밍" 책을 보다가 정말 Visual Studio 6.0에서 .NET으로 갈아타야겠다는 느낌을 받았습니다.
(상략)
그러나 생각한대로 결과가 나오지 않는 경우도 있다. Windows XP이상의 시스템에서 닷넷(.NET) 컴파일러 버전 2005 이상을 사용하는 사용자의 경우에는 더욱 그러하다. (중략)
여기서는 닷넷컴파일러를 기준으로 설명하겠다. 혹시 아직도 Visual Studio 6.0을 사용하고 있다면 이제는 닷넷으로 올라오기 바란다. 이젠 정말 때가 되었다.
(하략)
이제 대세가 .NET이라는 것을 무지하게 느끼군요 -_-;;

이제 Visual Studio 2005로 갈아타고 있습니다.

학교에서 Visual Studio 2005를 써보긴 해도 집 컴퓨터까지 깔줄은 상상도 못했군요.
1998년도에 나와서 구리구리한 Visual Studio 6.0을 쓰다가 Visual Studio 2005의 화려한 GUI, 사용자에게 편리하게 만든 설명등등 때문에 웬간해선 학교에서 코딩할때가 많았는데, 결국 집 컴퓨터에서도 깔게 되더군요.

그런데 Visual Studio 6.0은 CD한장(C++)이면 깔리는데, Visual Studio 2005는 CD가 아니라 DVD로 깐다는 것에 접근 가능성을 어렵게 했는데, 컴퓨터의 고성능화, 고용량화로 인해 DVD로 편하게 깔군요.
이제부턴 Visual Studio 2005를 잘 쓸 예정입니다 :D

뇌를 자극하는 윈도우즈 시스템 프로그래밍
윤성우 지음 / 한빛미디어
나의 점수 : ★★★★★

열혈강의로 유명한 윤성우 님이 쓴 책으로 책 내용이 정말 눈에 잘 들어올 정도로 잘 쓰여진 책
by Ego君 | 2007/07/29 00:35 | 컴퓨터 | 트랙백 | 덧글(4)
Segmentation Falut와의 전쟁
과제를 하다 보니 거의 밤을 새가는 듯 하다.

오늘 밤 11시까지 과제 마감인데 그때 까지 과제를 다 할지도 의문시 되고 등등. 다 할수 있을거라 믿고 있다만 정말 두렵다.

이번에 과제하는데 예전 과제들 보다 너무나 힘들다는 것을 느끼게 되었다. 저번 과제들을 보면 이번 과제보다 난이도가 너무 쉬었다. 과제 내기 몇일 전에 submit하고 그랬는데 말이지.
(내가 예전 과제가 쉽다고 말 안했다. 지금 포기하신 분이 넘쳐난다. -_-;;)

이번 과제는 PIPE까지만 쓰면 저번 과제의 난이도와 비슷하게 같다 그런데 shall를 구현하는 프로그램을 짜지 않나?, System Call을 써서 파일 만드는 것까지는 괜찮다. 그런데... 입출력을 무조건 read()함수와 write()함수로만 한다고 해서 아주 짜증이 넘침.

거기에 Shall을 구현하는데 교재에 있는 예제는 정말 마음이 안들어서 내가 shall 구현을 직접해버렸다. 그래서 시간 조낸 걸리고 -_ㅠ
과제하는데 왜이리 빡센 경우가 자료구조 보다 더 빡센 것 같다.

Shall을 구현하는데 프로그램 작성시 없는 메모리를 접근하여 아주 당황스럽게 Segmentation Fault세그먼테이션 오류을 내는 일도 비일비재 하고 ㅠㅠ

정말 이번 과제는 System Call만 조낸 만지작 하다가 끝날듯 하다. 과제가 생각보다 어렵다. 다음 과제는 어떻게 될지가 ㄷㄷㄷ
이제서야 shall 구현이 제대로 되었다. X같은 Segmentation Fault을 해결하니 정말 깨운하다.

저건 구현의 일부분일 뿐입니다. 쉘같이 완벽하게 구현할려고 발악을 했던지 ㅡ,.ㅡ.
아직도 과제구현 못한 것이 있어서 짜증이 난다만 다행이도 거의 끝내가서 다행. 과제를 오늘까지 내야해서 정말 정신이 오락가락 혼미해지고 있습니다.

이제 밤을 하얗게 불태우고 자야할듯 합니다. 일어나서 또 과제해야할듯 ㅠㅠ


다음학기인 3학년 2학기가 두려워지고 있습니다. 1학기 과목들은 재미라도 있으니까 다행인데 전공필수인 OS는 -_-;;
by Ego君 | 2007/05/26 04:46 | 컴퓨터 | 트랙백 | 덧글(6)
Prolog과제 기록
관련 포스팅
1. Perl과제 기록
2. Pascal과제 기록
3. Prolog과제 기록


프로그래밍언어 시간에 과제로 부여한 Prolog이란 언어로 여러가지 자료구조들을 이용한 프로그램을 구현을 했습니다.
  1. 임의의 숫자 12개를 입력 받은 이진 트리를 출력하시오.
  2. F0 = 0, F1 = 1 그리고 Fn = Fn-1 + Fn-2 (n≥2)일 때, 임의의 숫자를 입력받아서 그 수보다 작은 수(혹은 같은수)까지의 피보나치 수열을 출력하시오.
  3. 임의의 숫자 12개를 입력 받아 퀵정렬 알고리즘을 사용하여 정렬하시오.
  4. 다음 그래프에서 1번 노드에서 시작해서 10번 노드로 가는 최단거리를 Dijkstra 알고리즘을 이용해서 구하시오.
  5. 하노이 탑 알고리즘 구현하시오. 세 개의 막대가 있고 원판의 개수는 임의로 입력 받는다.

프로그래밍 언어 3월달 과제는 Perl이라는 언어로 위의 자료구조들을 구현하는 것이였는데 4월달 과제는 Pascal이라는 언어로 위의 자료구조들을 구현하는 것이었습니다. 이번 5월달 과제는 Prolog란 언어로 위의 자료구조들을 구현하시요
조교님께서 가르쳐주신다고 했으나 20분만에 상황 종료. 이렇게 깔고 프로그램은 이렇게 돌아가요. =_=;;

Prolog는 논리형 프로그래밍 언어입니다.
PROgramming inLOGic 의 준말로서 논리식을 토대로 오브젝트와 오브젝트 간의 관계에 관한 문제를 해결하기 위해 사용합니다.
이 언어는 인공지능, 계산 언어학, 자연언어 처리 분야에서 많이 사용된다고 하네요.

그런데 이 언어는 기존에 알고 있던 C,C++,JAVA,Pascal, Perl, Python과는 다르게 구성되어 있더군요
일반적인 언어라면 컴파일러가 알이 먹을수 있는 언어를 말하는데 이 언어는 논리적인 구성으로 된 언어라고 할까나?

Prolog에는 기본요소가 3가지있습니다.
  • 사실(facts)
  • 질문(questions)
  • 규칙(rules)
사실(facts)
관계와 객체의 이름은 소문자로 시작됩니다.
관계의 이름을 먼저 쓰고, 객체들은 괄호 안에 쉼표로 구분합니다.
사실은 항상 ‘.’으로 끝납니다.
예제)
John likes Mary -> likes(john,mary).

아래 표는 사실과 규칙의 표현입니다.
 
PROLOG
논리식
,
and()
;
or()
:-
only if(ß)
not
not()

likes(kim,X),likes(lee,X).
likes(kim,pinky) :- likes(lee,X).
likes(kim,pinky) :- not(likes(lee,pinky)).

질문(questions)
사실들을 저장한 후에는 그에 관한 질문 제기를 합니다.
질문은 사실과 유사하나 그 앞에 특수 기호 있습니다.
예제)
Does mary own the book -> ?- owns(mary,book).

규칙(rules)
규칙은 다른 사실로부터 하나의 또 다른 사실을 추론 가능하게 합니다.

Prolog 인터프리터를 아래 링크에서 구했습니다.
http://www.freeprogrammingresources.com/

전 SWI-Prolog를 설치해서 Prolog 언어를 써보았습니다.
아래 화면은 SWI-Prolog 홈페이지 화면입니다. SWI-Prolog는 무료로 다운로드를 받을 수 있습니다:D
http://www.swi-prolog.org

SWI-Prolog를 설치했을때의 화면입니다.

아래 화면처럼 Prolog 언어로 만든 코드를 가지고 함수를 불러서 제대로 Prolog 언어를 구현했는지 알아 봅니다.


이번과제는 아주 난해했습니다. 일반적으로 쓰던 언어들의 구조에서 완전히 벗어난 비 절차적인 언어인 Prolog를 공부하다 보니 너무 어렵더군요 ㅋ

일반적으로 C,C++,JAVA Basic, Perl에 익숙한 저에게 이런 언어는 아주 어렵게 느껴졌습니다. 논리형 언어라는것이 언어를 영어같은 서구 언어로 만들어져서 서구 언어같이 만들어진 것 같습니다.
서구 언어 같이 논리적이지 못한 한국어로 Prolog를 이해하려니 너무나 어려웠군요. 그리고 Prolog같은 언어는 한국어로 된 책도 별로 없는데다 한국어로 된 책으로 공부하면 더더욱 이해가 안갑니다. 그래서 원서를 빌려 공부했습니다.

아래 사진은 Prolog를 공부한 원서


Prolog를 배우니까 재미있긴 한데 제 머릿속에 난해한 언어는 이게 처음인듯 합니다. Pascal이나 Perl같은 경우는 C언어를 알면 금방 배우게 된다면 Prolog같은 언어는 함수를 만드는게 너무나 힘들었다는 ㅠㅠ

아래는 제가 Test해서 된 결과입니다.
실행결과
Welcome to SWI-Prolog (Multi-threaded, Version 5.6.34)
Copyright (c) 1990-2007 University of Amsterdam.
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

1 ?- tree([95,218,124,84,90,94,79,73,68,65,70,88], Tree).
==========================================================
Binary Tree Programming
3 A511151
==========================================================

Tree = bt(bt(bt(bt(bt(bt(nil, 65, nil), 68, bt(nil, 70, nil)), 73, nil), 79, nil),
84, bt(bt(nil, 88, nil), 90, bt(nil, 94, nil))), 95, bt(bt(nil, 124, nil), 218, nil))

Yes
2 ?- fibonacci(5).
=======================================================
Fibonacci Sequence Algorithm
3 A511151
=======================================================
Input the number : 5
0 1 1 2 3 5

Yes
3 ?- quicksort([0,56,19,80,58,47,35,89,82,74,17,85],SortedLst).
==========================================================
Quick Sort Algorithm
3 A511151
==========================================================
Sorted List :

SortedLst = [0, 17, 19, 35, 47, 56, 58, 74, 80|...] [write]

SortedLst = [0, 17, 19, 35, 47, 56, 58, 74, 80, 82, 85, 89]

Yes
4 ?- path(1,10,Path,Cost).
=======================================================
Dijkstra`s Algorithm - (Shortest Paths)
3 A511151
=======================================================

Path = [1, 2, 6, 9, 7, 10],
Cost = 9

Yes
5 ?- hanoi(3).
=======================================================
The tower of Hanoi Algorithm
3 A511151
=======================================================
Input board number : 3
board 1[1->3]
board 2[1->2]
board 1[3->2]
board 3[1->3]
board 1[2->1]
board 2[2->3]
board 1[1->3]

Yes
6 ?-
by Ego君 | 2007/05/19 23:30 | 컴퓨터 | 트랙백 | 덧글(2)
이것이 프로그래밍언어를 배워야 하는 이유군요. -_-;;

홍익대학교 전자계산학과(現 컴퓨터공학과) XX학번 졸업하신 선배님과의 대화
만들어진지 10년이 넘지 않은 컴파일러는 "안정성이 확보되지 않았다"고 안쓸지도
10년도 넘지 않은 컴파일러가 안정성이 확보 안되었다고 하는 압뷁 ㄷㄷㄷ


그래서 아직도 COBOL같은 언어를 쓰는 곳들이 많군요. 그래서 프로그래밍언어 책을 배워야 하는 이유? -_-;;
프로그래밍언어 시간에 나오는 Pascal, Fortran, ALGOL, COBOL, Ada 같은 언어들 나오면 정말 왜 이딴 것 배우냐고 했다만 -_-;;
이제야 공감이 갑니다. 회사에선 아직도 쓴다 -_-;;;
by Ego君 | 2007/05/16 17:50 | 컴퓨터 | 트랙백 | 덧글(12)
Prolog 설치 및 평
관련 포스팅
1. Perl과제 기록
2. Pascal과제 기록
3. Prolog 설치 기록
4. Prolog과제 기록



Prolog는 Programming in Logic의 준말로서 기호 논리연산을 위해서 쓰는 프로그래밍언어이다.
1970년대 초반에 Aix-Marseille대학의 인공지능 그룹에 속한 Alain Colmerauer와 Phillippe Rousel은 Edinburgh대학의 인공지능 학과의 Robert Kowalski와 함께 Prolog에 대한 기본적인 설계를 개발하였다.
Prolog는 1981년 일본 정부가 5세대 컴퓨팅 시스템(Fifth Generation Computing Systems:FGCS)이라는 대형 연구 프로젝트에서 각광을 받게 되었다.

1. Prolog 책을 도서관에서 빌려봄.
책 찾는게 너무나 힘들었다.
국내에 나온 Prolog 책들을 찾기는 매우 미지수 ㅡ,.ㅡ 학교 도서관에 찾아보아도 웬만한것들은 80년대후반 서적들 밖에 없었다. 그런데다가 Prolog란 언어는 논리형 프로그래밍 언어(Logic Programming Language)라서 한글로 공부하기엔 와닿지가 않았다.
그래서 책을 원서로 빌려보게 되었다.
난 이런 원서책을 빌리게 되었다.
Logic Programming with Prolog
Techniques of Prolog Programming

인터넷에서 원서로 된 Prolog를 찾게 되었는데 외국에서도 마찬가지로 최신 책이 없었다.
다행이도 최신으로 나온 책이 있었는데 학교 도서관에도 있었다.
Logic Programming with Prolog (Paperback) by Max Bramer

이 책은 얇으면서도 사용자들에게 알려줄 것들을 다 알려주는 아주 착한책이라고 할까? 거기에 학교 도서관에서 입고된 Prolog책중에서 아주 최신이면서 가벼운 책이다. 예제가 조금 부족하다는 것이 흠이랄까? 그래도 책의 내용이 너무 좋다. 간단한 이론들에 쓸데없는 예제만 넣어서 책의 양만 늘려 파는 책보단 말이다.
혹시나 모르기 때문에 Prolog예제들이 많이 있는 책도 빌려보게 되었다. 그런데 1993년도에 발간되어서 1994년 4월 27일날 입고된 책이다 정말 오래되었도다.

아래는 빌린 Prolog책들을 찍은 것이다.



2. Prolog를 해석할 Compiler를 구함
http://www.freeprogrammingresources.com/

위의 사이트는 대부분의 사람들이 쓰는 언어들에 대한 무료 컴파일러를 제공하는 사이트이다.


윗 사이트에서 Prolog Programming을 찾아서 클릭
Prolog Compilers를 클릭하면 Free로 된 Prolog Compiler의 목록들이 나온다.

여러가지 목록에서 2가지 컴파일러를 쓰기로 결정하였다.

SWI Prolog
SWI Prolog is a Prolog compiler, targeting primarily at research and education.

The GNU Prolog web site
GNU Prolog accepts Prolog+constraint programs and produces native binaries (like gcc does from a C source)

SWI Prolog는 Windows에 설치하기로 하고 GNU Prolog는 SPMachine(Fedora Core 6)에 설치하기로 함.

3. 각각의 OS에 Prolog를 설치한다.
근데 설치했긴 한데 스샷 귀찮아서 패스 ㅡ,.ㅡ


Prolog는 기호 논리의 형식을 이용한 언어이라서 일반적으로 쓰는 C, C++, JAVA, PHP, Perl, Python, Pascal과 구문이 아예 다르다.
Logic Programming with Prolog 에 있는 예제들을 보면
dog(fido).
dog(rover).
dog(henry).
cat(felix).
cat(michael).
cat(jame).
animal(X) :- dog(X).

?- dog(fido).
yes

?- dog(jane).
no

?- animal(felix).
no


맨 처음에 소스들을 보면 이해가 안간다. 왜 저렇게 써야하는지 C랑 달라서 헤메었다.
저정도는 약과이고 이거보다 어려운 자료구조들을 구현하려 하니까 정신이 어질어질 하다.
(Binary Tree, Fibonacci Sequence, Quick Sort, Dijkstra Algorithm, hanoi tower)

이번 Prolog과제를 하는데 개념들이 너무나 생소해서 매우 공부하기가 어려울 듯 하다 ㅡ,.ㅡ
이번 프로그래밍언어는 Prolog과제를 했나 안했나에 A가 왔다갔다하는 소문도 =_=;;
by Ego君 | 2007/05/15 03:14 | 컴퓨터 | 트랙백 | 덧글(3)
Pascal과제 기록
관련 포스팅
1. Perl과제 기록
2. Pascal과제 기록
3. Prolog과제 기록


프로그래밍언어 시간에 과제로 부여한 Pascal이란 언어로 여러가지 자료구조들을 이용한 프로그램을 구현을 했습니다.
  1. 임의의 숫자 12개를 입력 받은 이진 트리를 출력하시오.
  2. F0 = 0, F1 = 1 그리고 Fn = Fn-1 + Fn-2 (n≥2)일 때, 임의의 숫자를 입력받아서 그 수보다 작은 수(혹은 같은수)까지의 피보나치 수열을 출력하시오.
  3. 임의의 숫자 12개를 입력 받아 퀵정렬 알고리즘을 사용하여 정렬하시오.
  4. 다음 그래프에서 1번 노드에서 시작해서 10번 노드로 가는 최단거리를 Dijkstra 알고리즘을 이용해서 구하시오.
  5. 하노이 탑 알고리즘 구현하시오. 세 개의 막대가 있고 원판의 개수는 임의로 입력 받는다.

프로그래밍 언어 3월달 과제는 Perl이라는 언어로 위의 자료구조들을 구현하는 것이였는데 4월달 과제는 Pascal이라는 언어로 위의 자료구조들을 구현하는 것이었습니다.
조교님께서 가르쳐주신다고 했으나 20분만에 상황 종료. 이렇게 깔고 프로그램은 이렇게 돌아가요. =_=;;
그런데 조교님이 태클을 건 것인 Turbo Pascal version 5.5을 기준으로 채점을 한다고 하였다.
여태까지 Pascal을 GNU에서 나온 GNU Pascal Compiler로 계속 컴파일 해서 과제를 했었는데 Turbo Pascal에서 컴파일 하라고 해서 당황했습니다.
Turbo Pascal 5.5 Version은 1989년도 볼랜드에서 나온 컴파일러로서 윈도우즈 XP에서도 돌아간다는 것이 신기할 정도였습니다.

아래 그림은 1989년에 만들어진 Turbo Pascal Version 5.5 화면입니다.

윗 프로그램이 1989년도에 만들어진 것이라서 한글을 쓰는 코드페이지에서는 와장창 깨집니다. 그리고 거기에 예전에 만들어진 것이라서 한글의 입력이 거의 불가능합니다. ;ㅁ;

그래서 Linux에서 우선 코드 적고 한글 주석 달고 GNU Pascal Compiler로 컴파일 한 다음 Turbo Pascal v5.5로 컴파일을 했습니다.
두벌일을 해버렸군요 시간은 금인데 효율적이지 않은 프로그래밍을 했다고 할까요?ㅠㅠ

위의 Turbo Pascal v5.5는 아래 링크에서 구했습니다.
http://www.freeprogrammingresources.com/

Borland사의 Turbo Pascal를 직접 얻을려면 이 사이트에서 구하면 됩니다.

Antique Software: Turbo Pascal v5.5

(무려 Antique 입니까? ;ㅁ;)

윗 사이트에서 1989년 당시의 Turbo Pascal 광고도 볼수가 있습니다. 저 광고를 보면서 Pascal이란 자를 저주하고픈 충동이 생겼습니다. =_=

인터넷을 뒤져보다가 이런 희귀한 Pascal 자료들을 발굴하게 되었더군요 =_=;;
첫 원서 (그리고 관련없는 생각)
아래 그림은 윗 링크에 나온 파스칼 설치 패키지입니다. 제가 이 것 보다도 더 오래된 Pascal Compiler를 쓴다는 것이 경악이었습니다 ㅠㅠ


Pascal을 처음 공부했을때에는 C와는 다른 예약어들과 C랑 다른 기호들 때문에 좀 헷갈리는 감이 있었는데 지금은 과제를 거뜬히 할수 있을 정도로 단련이 된듯 합니다. Pascal이 C랑 비슷한 구조가 있다는 것이 +_+
그런데 3월달에 Perl과제 처럼 4. Dijkstra Algorithm(Shortest Path)는 좀 압박이 좀 있었죠. 자료구조 책에서 이런 이론이 있다는 정도로 나가서 이해가 잘안되었던 기억이 ^^

Pascal을 배우면 배워볼수록, 책에 나온 PsudoCode들이 다 Pascal로 보입니다. 미묘님이 말씀한 것처럼 Pascal배우니까 PsudoCode들이 다 Pascal로 바꾸고 싶은 욕망들이 솟구쳤습니다 +_+

이번 과제는 제일 먼저 Linux에서 GNU에서 무료로 제공한 GNU Pascal Compiler로 Pascal을 컴파일 하였고, 그 다음 Turbo Pascal v5.5로 컴파일을 하였습니다. 둘다 돌아가게 만들었습니다.
아래는 과제 실행화면 결과입니다. 앞의 Perl 포스팅과 같은 값을 집어 넣었습니다.

=================================================
Binary Tree Programming
홍익대학교 컴퓨터공학과 3학년 A511151 ***
=======================================================
12개의 숫자를 입력하십시요.
49 36 64 40 50 55 24 20 68 85 12 39
................85
............68
........64
................55
............50
....49
............40
................39
........36
............24
................20
....................12
=============================================================
Fibonacci Sequence Programming
홍익대학교 컴퓨터공학과 3학년 A511151 ***
=============================================================
Input the number : 5
0 1 1 2 3 5
========================================================
QuickSort Algorithm
홍익대학교 컴퓨터공학과 3학년 A511151 ***
========================================================
임의의 숫자 12개를 입력 하세요 :D
0 56 19 80 58 47 35 89 82 74 17 85
정렬이 되었습니다 :D
0 17 19 35 47 56 58 74 80 82 85 89
==============================================================
Dijkstra Algorithm (Shortest Paths)
홍익대학교 컴퓨터공학과 3학년 A511151 ***
==============================================================
1번 노드로 부터 10번 노드까지 가는 최단 거리 Dijkstra Algorithm
1 -> 2 -> ... -> 10
=========================================================
Hanoi tower Algorithm
홍익대학교 컴퓨터공학과 A511151 ***
=========================================================
input board number : 3
board 1 [1->3]
board 2 [1->2]
board 1 [3->2]
board 3 [1->3]
board 1 [2->1]
board 2 [2->3]
board 1 [1->3]
[sungdh86@localhost hw]$
by Ego君 | 2007/04/14 01:21 | 컴퓨터 | 트랙백 | 덧글(3)
JAVA의 문법이 이상한가?
이번에 책에 있는 Algorithm Psudocode를 C/C++/JAVA/Perl로 구현하는 재미있는 일을 했습니다.

그런데 JAVA에서 예상치도 못한 일들이 일어났다지요 -_-;;
JAVA에서 무슨 일이 났는지 컴파일을 하면 계속 에러를 냅니다 -_-;;
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at ex2.bin2(ex2.java:54)
at ex2.main(ex2.java:20)


이 에러는 배열의 Index에 -1을 참조했기 때문에 에러를 내면서 종료한다는 에러입니다.

C, C++, Perl에서도 비슷한 알고리즘을 썼는데 JAVA와 비교를 했죠.
C/C++의 경우

 41 int bin2(int n, int m)
42 {
43 int i, j;
44 int Bin2[n+1][m+1];
45 for(i = 0; i<= n; i++)
46 for(j = 0; j<= min(j, m);j++)
47 if(j == 0 || j == i)
48 Bin2[i][j] = 1;
49 else
50 Bin2[i][j] = (Bin2[i-1][j-1] + (2 * Bin2[i-1][j]));
51 return Bin2[n][m];
52 }


Perl의 경우

 24 sub bin2
25 {
26 my ($n, $m) = @_;
27 # Use array
28 my @B;
29 for(my $i = 0; $i <= $n; $i++)
30 {
31 for(my $j = 0; $j <= min($j, $m); $j++)
32 {
33 if($j == 0 || $j == $i)
34 {
35 $B[$i]->[$j] = 1;
36 }
37 else
38 {
39 $B[$i]->[$j] = $B[$i-1]->[$j-1] + (2 * $B[$i-1]->[$j]);
40 }
41 }
42 }
43 return $B[$n]->[$m];
44 }

JAVA의 경우

36     public static int bin2(int n, int m)
37 {
38 int [][]Bin2 = new int[n+1][m+1];
39 for(int i = 0; i<= n; i++)
40 for(int j = 0; j<= min(j, m);j++)
41 if(j == 0 || j == i)
42 Bin2[i][j] = 1;
43 else
44 Bin2[i][j] = (Bin2[i-1][j-1] + (2 * Bin2[i-1][j]));
45 return Bin2[n][m];
45 }


같은 알고리즘을 써서 컴파일을 했는데 C/C++/Perl에선 정상 값이 나오고 JAVA에서는 예외처리를 하니 참 어이가 없었죠.,
제 생각에 JAVA가 엄격한지 소스를 꼼꼼히 보았습니다.

i = 0일때 만약 j = 0이면 if(j == || j == i)라면 빠져나가야 합니다. 여기서는 문제 없는 듯 합니다.
i = 0일때 만약 j = 1이면 else구문을 실행하여 Bin2[0][1] = Bin2[-1][0] + (2 * Bin2[-1][0])을 실행해야 합니다.
그런데 min함수를 써서 return값이 작으면 for문이 j값을 증가시키지 않고 빠져나가게 합니다.

C/C++/Perl에서는 책에 있는 알고리즘을 그대로 써도 min값이 return되어서 상관 없는데 JAVA는 책에 있는 알고리즘이 잘못된 배열 참조한다는 것을 알아내서 예외처리를 하는 것을 보니 JAVA에서 for문 안에서 min함수 return값을 못알아 먹는 것 같아서 짜증이 나군요.

JAVA에서 이 알고리즘이 제대로 작동되지 않은 것 같아서 이런 꼼수를 썼습니다.

 36     public static int bin2(int n, int m)
37 {
38 int [][]Bin2 = new int[n+1][m+1];
39 for(int i = 0; i<= n; i++)
40 for(int j = 0; j<= min(j, m);j++)
41 if(j == 0 || j == i)
42 Bin2[i][j] = 1;
43 else if (i == 0)
44 break;
45 else
46 Bin2[i][j] = (Bin2[i-1][j-1] + (2 * Bin2[i-1][j]));
47 return Bin2[n][m];
48 }

i = 0일때 안의 for문을 무조건 빼지게 하였더니 C/C++/Perl과 같은 값이 나왔습니다.
이거 C/C++/Perl에서는 JAVA와 다르게 오류없이 돌아가는 것을 보니 왜그런 것일지 궁금하군요.

JAVA가 for문 안에서는 함수를 콜해서 return 값을 받아들이지 못하는 것 같아서 짜증이 나군요. C/C++/Perl에서는 아무런 문제가 없는데 말이죠.

컴퓨터프로그래밍 언어를 배우면 배울수록 궁금한것 투성인것 같네요,
by Ego君 | 2007/04/02 01:21 | 컴퓨터 | 트랙백 | 덧글(5)
[site] ANSI C Yacc grammar
프로그래밍 언어시간에 Parsing 구문 배우다가 여기까지 손을 뻗치게 되었다.
ANSI C Yacc grammar

어셈블리 언어를 배우면서 C언어가 매우 편한 언어라는 것을 알게 되었고 프로그래밍언어 시간에 구문 Parsing하는 것을 배우니까 C언어 만드느라 고생하신 분들께 감사의 말씀을 전한다.
by Ego君 | 2007/03/27 12:39 | 컴퓨터 | 트랙백 | 덧글(1)
Perl

Perl이란


Perl은 1986년경 (내가 태어난 연도-_-;;) Larry Wall이란 사람에 의해 개발되었음
원래는 UNIX상에서 이용하는 프로그래밍언어로 개발되었지만 현재는 대부분의 OS에서 이용할 수 있으며 「Practical Extraction and Report Language」(실용적 데이터 추출과 리포트 작성을 위한 언어)의 약자이다.

Perl은 인터프리터 방식의 언어로서, 프로그램을 기술한 후 바로 실행할 수 있습니다. C언어나 C++, JAVAㅗ아 같이 컴파일(기계어로 변환하는 작업)을 할 필요가 엇는 것입니다. 따라서 컴파일이 필요없는 프로그래밍 언어를 스크립트언어라고 하기 때문에, Perl로 기술된 프로그램을 「Perl Script」라고도 합니다.

Perl의 특징

인터프리터 방식의 언어
컴파일러 방식의 언어는 소스 프로그램을 기계어로 일괄적으로 변환(컴파일)한 다음에 실행할 수 있습니다. 하지만 인터프리터 방식의 언어는 컴파일 하는 과정을 거치지 않고 기계어로 변환하면서 실행할 수 있습니다. 실행 속도는 컴파일러 바익이 빠르지만, 인터프리터 방식은 컴파일 과정이 줄어 번거롭지 않다는 장점이 있습니다.

강력한 텍스트 처리 기능
문자열을 변환하고 추출하는 텍스트 처리 기능이 충실합니다. 정규 표현에 의한 검색·치환도 수행할 수 있어, 더욱 복잡한 텍스트 처리가 가능합니다.

기술하기가 용이
기술 방식이 C언어와 비슷하여 기호적입니다. 따라서 처음 접하는 사람들은 조금 어려울 수도 있지만, 한번 알아두면 간결하며 기술하기 쉽다는 것을 알 수 있습니다. 그리고 C언어와 비교해 볼 때 좀더 유연성이 많은 것도 특징입니다.


Perl은 비교적 기술하기 쉬운 언어이며, CGI에서 많이 쓰고 있습니다..

이번에 프로그래밍언어 시간에 Perl로 과제를 부여했는데 Perl이란 언어는 PHP와 C, 쉘 스크립트를 조금 알면 금방 배울듯한 언어 같다.
C언어보다 생산성이 빠른 것 같으며 PHP와 같이 배우면 금방 써먹을 수 있는 것이 매력이다. 작업의 효율을 높일수 있는 스크립트 언어라고 할까요?
(다른 분들께서는 Perl에 헤멘다는데 -_-;;)

근데 Perl을 언어라 보기는 좀 그런 감도 있다만 (Compile언어가 아니라서), 그래도 C언어로 짜기엔 시간이 아까운 프로그램 짤때는 쓸만할 것 같다. :D
by Ego君 | 2007/03/17 20:50 | 컴퓨터 | 트랙백 | 덧글(2)
이런 언어들을 익숙하게 쓸 수 있을까?
세상에 있는 모든 컴퓨터언어를 배울수 있을까?
이번에 3학년 전공필수인 프로그래밍언어과목에서 S모 교수님께서 여러가지 언어를 과제로 부여한다고 하셨습니다.
(S모 교수님은 모 과목에서 F를 78%씩이나 부여하신 유명하신분 -_-;;, 맡는 과목마다 말이 안좋기로 유명합니다.)

S모 교수님 수업 기피할려다가 전공 필수라 어쩔수 듣기는 하였는데 의외로 재미있더군요. -_-;;
과제의 압박은 어쩔수 없을듯
교수님이 3가지 언어를 가지고 과제 부여한다던데 아는 언어 있으면 손들라고 했다.
1. Perl (알아서 손 들었음. 약간 만지작 하는 정도?)
2. Pascal (이런 이름만 들어본 고전 언어를 -_-;;)
3. Prolog (이건 어디에 쓰는 언어지고?)

그리고 수업시간 도중 LISP를 과제로 낸다고 한다. (LISP 설명서는 집에 있다 히히)

프로그래밍언어 시간에 배우는 언어들을 보면 다들 고전언어이다. 그러나 이런 언어들은 C/C++, JAVA랑 비슷하여 금방 습득을 할수있을 듯 하다.
생전 처음듣어본 Prolog나 LISP정도는 어떻게 숙제해야할지 난감하고 Perl이나 Pascal 정도는 금방 해낼 듯 하다.

이런 언어들은 난생 쓰는 것이라서 어떻게 숙제할지도 막막하고, 내가 익숙하게 쓴 언어랑 유사한 점이있어서 할수 있을듯 하고 등등

익숙하게 쓴다고 하면 익숙하게 쓸 것 같은데 언제 빨리 익숙해지냐가 관건이다. 1학기만에 Perl, Pascal, Prolog, LISP, Ada등등의 컴퓨터 언어들에 익숙해질지 궁금하다.
(예전에는 Ada같은 엄청난 고전언어를 숙제로 내서 GG치신 분들이 한두명이 아니라는 ㅠㅠ)

이렇게 배우다간 모든 컴퓨터 언어들을 다 배우게 생겼다 ;ㅁ;
by Ego君 | 2007/03/10 20:56 | 컴퓨터 | 트랙백 | 덧글(6)
VirtualPC 2007 BETA로 Linux설치하기(1) - 프로그램 설치
포스트할 양이 블로그에 한번에 올리기엔 넘치는 까닭에 나눠서 올립니다. 연재 포스트입니다.
MS사 VirtualPC 2007 BETA로 Linux설치하기(1) - 프로그램 설치
MS사 VirtualPC 2007 BETA로 Linux설치하기(2) - 프로그램 셋팅
...

관련 포스팅
Virtual PC 2007 Beta: Free and Available Now
Installing Ubuntu on VirtualPC Step by Step


MS사에서 나온 VirtualPC 2007 BETA 버전으로 Ubuntu Linux를 설치했습니다.
VirtualPC란 프로그램은 MS사에서 나온 Virtual Machine으로서 VMware랑 비슷한 프로그램입니다.
가상 기술을 이용하여 한 OS에서 여러 종류의 OS를 실행시킬수가 있죠.
그래서 제가 쓰는 노트북에 Windows XP와 Ubuntu Linux를 동시에 쓸수 있게 됩니다. :D
Virtual PC 2007 BETA는 VMware처럼 어둠의 경로로 구해서 까는 파렴치한 짓을 안해서 양심의 가책을 느낄수가 없어서 다행입니다 :D

1. MS사 홈페이지(http://www.microsoft.com)에서 Virtual PC 2007 BETA 버전을 다운로드 받습니다.
여기(http://www.microsoft.com/windows/virtualpc/default.mspx)서 전 Virtual PC 2007 BETA 버전을 다운로드 받았습니다.


참고로 MS사에서 나온 Virtual PC 2007 버전은 정식 버전이 아닌 BETA버전이기 때문에 다운로드 하는데 좀 힘드실 것입니다. 혹시나 안정성에 무게 두신 분들은 이전 버전인 Virtual PC 2004로 까시는 것도^^
하지만 Virtual PC 2004는 무료가 아닙니다. 라이센스가 있는 제품이며, Virtual PC 2004안에 설치될 가상 머신(이하 VM - Virtual Machine) 역시도, 라이센스가 있어야 한다고 알고 있습니다.(네이버 지식인의 힘-_-;;)

혹시나 Virtual PC 2007 BETA버전이 아닌 Virtual PC 2004로 설치하실분은 Microsoft 사이트에서 45일 평가판을 다운로드하실 수 있습니다. 또한 아직까진 한글판은 존재하지 않습니다. (Virtual PC 2007 BETA 버전도 마찬가지^^)

2. 다운로드를 받았으면 설치를 합니다.

다운로드 받았으면 설치를 해야죠?^^
윗 화면은 설치파일을 처음 띄었을때 화면입니다 :D

전 설치하다가 이런 메세지가 날라왔습니다. Windows XP SP2 최신으로 업데이트를 했는데도 이런 메시지가 뜨더군요. 무시했습니다.-_-;;


지루한 사용자 계약 화면 -_-;;


Virtual PC 2007 BETA버전이라서 그런지 키 등록이 되었더군요. BETA라서 무료로 쓸수 있는 것인가?
신상정보들을 입력을 합니다. (어이쿠, 제 이름 나왔군요 OTL)


설치경로를 묻습니다. 설치 경로는 알아서 :D


Virtual PC 2007 BETA버전을 설치하는 과정의 화면입니다. 빨리 설치가 됩니다 :D


아기다리 고기다리던 설치가 끝났습니다. 이제 설정을 해줘야 겠군요^^

포스팅은 여기까지. VirtualPC 2007 BETA로 Linux설치하기(1) - 프로그램 설치 끝입니다.
이글루스 가든 - 무적의 공대생이 되자!
by Ego君 | 2007/02/09 18:33 | 컴퓨터 | 트랙백 | 덧글(4)
LAN 선 조립 방법
랜선 만들기 (UTP케이블)

LAN선 만들어야 해야하는데 저런 것을 암기하는 스타일이 아닌지라 (암기하면당신은 천재 -_-;;)
LAN선 만들일도 많은데 이걸 참조해야겠다.


이글루스 가든 - 무적의 공대생이 되자!
by Ego君 | 2007/02/03 12:44 | 컴퓨터 | 트랙백(1) | 덧글(4)
< 이전페이지 다음페이지 >