'프로그램 이야기'에 해당되는 글 11

  1. 2007/09/20 낭만곰팅 VS2008에서 HTML vaidation error를 warning으로 보여주기
  2. 2007/09/03 낭만곰팅 Vista에서 ASP.NET 개발 환경 설정
  3. 2007/08/05 낭만곰팅 Javascript parseInt() function
  4. 2007/02/09 낭만곰팅 Prototype 1.5 API PDF
  5. 2007/01/30 낭만곰팅 ubuntu에서 Ruby+Rails+Mongrel 설치
  6. 2007/01/24 낭만곰팅 2회 루비 세미나 참가 후기 (4)
  7. 2006/12/29 낭만곰팅 Evaluating Local Variables (2)
  8. 2006/12/27 낭만곰팅 ROME - Rss and atOM utilitiEs
  9. 2006/12/20 낭만곰팅 FireBug 1.0 beta(b1) Rlease (4)
  10. 2006/12/12 낭만곰팅 Java SE 6 릴리즈

Visual Studio(이하 VS) 2005의 기능 중 하나인 HTML Validation은 사용자가 선택한 Target(DTD)에 맞춰 HTML Markup, CSS, JScript의 유효성을 검사하고 그 결과를 error list에 보여준다.

특히 Markup의 경우 DTD가 지원하지 않는 tag나 attribute을 사용하는 경우에도 error list에 남게 되는데 Dojo toolkit의 Widget처럼 사용자 정의 attibute을 이 사용하는 경우 프로젝트를 한번 빌드하면 너무 많은 에러가 떨어져서 실제 C#/ASP.NET 코드의 에러와 섞여 아주 불편한 경우가 많다.

사용자 삽입 이미지
[ Visual Studio 2005의 Error List ]

하지만 Visual Studio Web Tools 팀의 Mikhail Arkhipov의 최근 블로그 포스트에 따르면 VS 2008 RTM 부터는 이부분이 개선 된다고 한다.
현재 VS 2008 Beta2에서는 아직 2005와 같지만 RTM 부터는 다음과 같이 두가지 옵션이 추가된다고 한다.

사용자 삽입 이미지
[ Visual Studio 2008의 Tools > Options화면 ]

위 화면에서 처럼 옵션이 체크가 되면 HTML Markup과 CSS Validation error는 warning이 되고 warning("deprecated attribute warning" 같은)은 message가 된다고 한다.
또한 Script error도 warning으로 보여준다고 한다.


원문은 Visual Studio 2008 다운로드는 아래를 참조하세요.

2007/09/20 23:41 2007/09/20 23:41
Vista Business는 설치시에 기본적으로 IIS가 설치되지 않으므로 다음의 과정을 통해서 기능을 활성화 시켜주어야 한다.
  1. 설정 > 제어판 > 프로그램 및 기능 선택
  2. 왼쪽의 "Windows 기능 사용 / 사용 안함" 선택
  3. 필요한 요소를 선택한다.
    인터넷 정보 서비스 > World Wide Web 서비스 > 응용 프로그램 개발 기능 선택
사용자 삽입 이미지

또한 Vista에서 Visual Studio 2005를 사용하기 위해서는 다음의 요소를 추가 설치 해주어야 한다.
  1. Visual Studio 2005 Service Pack 1
  2. Visual Studio 2005 Service Pack 1 Updates for Windows Vista
좀 더 자세한 내용은 아래를 참조하세요
2007/09/03 11:36 2007/09/03 11:36

Javascript parseInt() function

프로그램 이야기 | 2007/08/05 17:14 | 낭만곰팅
알다시피 자바스크립트에서 문자열로된 숫자를 정수로 바꿀 때 흔히 쓰는 자바스크립트의 전역함수(Global Function)이다.
근데 이게 좀 특이하게 동작하는 구석이 있다.
0으로 시작하는 문자열을 경우(0x 또는 0X로 시작하하지 않고) 브라우져는 8진수(IE,FF)또는 10진수(Opera)로 해석한다.

parseInt함수의 syntax는 다음과 같다.
parseInt(string[, radix])
  • string: 정수로 바꿀 대상 문자열
  • radix: 문자열을 바꿀때 사용할 기수(基數, base), 2이상 36이하인 정수 - optional
  • returns: 문자열을 parsing한 정수값(10진수) 또는  NaN
MDC Javascript 레퍼런스를 보면 radix가 0 이거나 생략되었을때 '0'으로 시작되는 문자열의 경우에 radix를 8이라고 되어있다.

If the radix is not specified or is specified as 0, JavaScript assumes the following:

  • If the input string begins with "0x", the radix is 16 (hexadecimal).
  • If the input string begins with "0", the radix is eight (octal). This feature is deprecated.
  • If the input string begins with any other value, the radix is 10 (decimal).
그런데 ECMAScript 스펙을 보면 얘기가 좀 다르다.
radix가 없고 0으로 시작하는 문자열(but  not 0x or 0X)을 8진수 또는 10진수로 구현하는것을 허용한다고 되어있다.
이렇다 보니 IE나 Firefox8진수로 반환을 하고 Opera의 경우에는 10진수로 반환을 한다.
사용자 삽입 이미지

이왕이면 그냥 10진수 하나로 정했으면 좋았을 것을..
스펙의 마지막 부분에 10진수로 반환하는것을 권장한다는 말이 있음에도 불구하고 브라우져들은 서로 다른 구현을 채택한듯 하다.
NOTE
parseInt may interpret only a leading portion of the string as an integer value; it ignores any
characters that cannot be interpreted as part of the notation of an integer, and no indication is given
that any such characters were ignored.
When radix is 0 or undefined and the string's number begins with a 0 digit not followed by an x or X,
then the implementation may, at its discretion, interpret the number either as being octal or as being
decimal. Implementations are encouraged to interpret numbers in this case as being decimal.

- ECMA-262 에서 발췌

사실 이것 때문에 07-08-07 이런거 파싱해서 달력을 만들어야 하는데 자꾸 다른 값이 나와서, widget만들면서 삽질좀 했다.
가능하면 parsetInt함수를 사용할 때에는 radix를 가능하면 명시하는 습관을 들이는 것이 좋을 듯하다.

더 자세한 내용은 아래 내용을 참조하자.
2007/08/05 17:14 2007/08/05 17:14

Prototype 1.5 API PDF

프로그램 이야기 | 2007/02/09 20:07 | 낭만곰팅
Prototype1.5 버전이 릴리즈되면서 공식사이트가 생기고 "API Docs"와 "Tips and Tutorials"을 만든것은 정말 마음에 든다.

물론 이전에도 Prototype을 사용하는 개발자라면 적어도 한번은 "prototype.js 를 위한 개발자 노트"를 읽어 봤을테지만 조금 부족한 부분이 있었다.
좀더 상세한 내용은 결국 소스코드를 봐야 이해가 가능한 부분도 있었다.

하지만 이제 공식사이트에서 설명과 소스코드 그리고 이미지 설명도 있는 API를 문서를 보고 Tutorials를 보면 처음 접하는 사람들도 보다 쉽게 Prototype을 사용할 수 있으리라 기대한다.

하지만 한번에 프린트하기에는 불편하다는 생각을 하고 있었는데 Big Medium에서 PDF버전을 다운받을수 있다.
Prototype 1.5 API Documentation.PDF 다운로드
또한 Jonathan Snook이 운영하는 snook.ca가면 Prototype 1.5.0 Cheat Sheet도 다운받을 수 있다.
바탕화면으로 쓰는것도 나쁘지 않다. ^^
Prototype 1.5.0 Cheat Sheet.PDF 다운로드
사용자 삽입 이미지

Prototype 1.5 Cheat Sheet


세상에는 이렇게 부지런한 사람들이 있어서 나의 귀차니즘은 점점 커지는거 같다. :-)
2007/02/09 20:07 2007/02/09 20:07
1. 원하는 버전의 Ruby를 설치한다.
$apt-get install ruby1.x.x

2. rubygems를 설치한다.
- rubygem 다운로드 : wget http://rubyforge.org/frs/download.php/16452/rubygems-0.9.1.tgz
- 아카이브 파일을 풀고 설치한다.
  $sudo ruby setup.rb

3. Rails를 설치한다.
$sudo gem install rails --include-dependencies

4. mongrel서버 설치
$sudo gem install mongrel

5. 해당 프로젝트로 이동 후 mongrel서버 실행
$mongrel_rails start -d

[ 설치중 에러 발생시 ]
1. mongrel설치시 "no such file to load -- mkmf"  에러가 발생할 경우 ruby-dev(또는  ruby1.x-dev)를 설치해야 한다.

사용자 삽입 이미지

2.  Rails실행시 "No such file or directory - /tmp/mysql.sock" error 발생시
- mysql의 소켓 파일의 위치를 명시적으로 config/database.yml 에 다음과 같이 명시한다.

  development:
    adapter: mysql
    socket: /var/run/mysqld/mysqld.sock

참조 :
2007/01/30 22:51 2007/01/30 22:51
오픈마루 회의실에서 열린 2회 루비 세미나(부제 : "루비 코드를 말한다")에 다녀왔다
간단한 자기소개를 마친뒤 지난주에 발표된 Rails 1.2 얘기를 시작으로 예정된 시간을 훌쩍 넘겨 4시간 넘게 진행되었지만 순식간에 지나간 듯 하다.
  • 대산님의 싱글톤 클래스를 활용한 메타프로그래밍, 문득 자바스크립트의 prototype chain이 생각나는...
  • deepblue님의 Heckle로 테스트를 테스트 하기, code coverage 만큼이나 필요해 보였습니다.
  • codian님 민감할 수도 있는 code convention에 대한 얘기 너무 재미있게 해주셨습니다. :)
  • 김동규님의 Rails로 동영상UCC 허브사이트인 웰리(Wellee) 서비스를 개발하신 얘기, 엄청난 개발 속도에 놀랐습니다.
  • 정목님의 Rails 1.2에 대한 소개와 메타프로그래밍을 활용한 예는 아주 흥미로웠습니다.
  • JasonPA님의 루비의 GC에 대한 내용
그 밖에도 좋은 내용이 많이 있었지만 아직 루비에 대해 아는게 많지 않아서 이해하지 못한 부분도 있어 아쉬웠다.
deepblue님이 다음 세미나에는 루비 튜토리얼 세션도 넣을 예정이라고 하니 기대가 된다.
codian님과 만박님의 루비를 하라는 끊임없는 회유와 압박?으로 공부를 시작한지 일주일도 안되서 루비에 대해 많은것을 알 수 있는 좋은 기회를 가진것 같다.
이런 핑계로 코드도 준비하지 못하고 참석하게 되어 민망했었다.

이글을 빌어 참석하신 다른분들께 죄송하단 말씀을 드립니다. ^^'
다음 세미나에는 공부 좀 해서 참가하도록 하겠습니다!!

2007/01/24 00:27 2007/01/24 00:27

Evaluating Local Variables

프로그램 이야기 | 2006/12/29 07:30 | 낭만곰팅

Evaluating Local Variables

지역변수를 가장 명확한 scope로부터 그렇지 않은 방향으로 해석하는 scope chain에 근거하여 찾을 필요가 있다.
때로는 이런 symbolic look-up들은 여러 레벨을 통할수도 있다. 그리고 결국은 아주 고비용(성능에 대해서)이 되는 IE DOM에 대한 일반적인 쿼리로 끝난다.
가장 나쁜 시나리오는 변수가 아직 존재하지 않고 모든 scope chain을 조사하고, 단지 생성되는데 필요한 expando 변수만 찾을 뿐인 경우이다.

   function getLocalVariable() {
       localVariable = getValueFromDOM();
       return (localVariable +1);
   }

위의 샘플은 잘못 작성된 함수 이다. 여기서 localVariable을 function scope내에 선언 할려고 했지만 var 선언을 하지 않고 진행함으로써 결국 모든 scope에서 찾을 것이다.
만일 변수를 찾지 못한다면 새로은 global이 생성되고, 찾게 된다면 이미 존재하는 global이 사용 될 것이다.

이 새로운 변수는 이제 다른 함수에서도 접근가능하고 때로는 코드에서 이상한 현상을 발생시킬 수도 있다.


출처 : http://blogs.msdn.com/ie/archive/2006/08/28/728654.aspx

2006/12/29 07:30 2006/12/29 07:30

ROME - Rss and atOM utilitiEs

프로그램 이야기 | 2006/12/27 23:43 | 낭만곰팅
이미 나온지 한참된 SUN의 RSS utility를 대체할 것을 찾다가 ROME을 발견했다.
현재까지 나온 대부분의 Syndication Format들을 지원하는것 같다.
게다가 iTunes Podcast, Slash, Google Base, Creative Commons, MediaRSS에 대한 플러그인도 지원한다. 정말 멋지다.
java.net에 가서 당장 ROME 프로젝트의 Observer로 등록했다.

사내에서 조그만 프로젝트를 생각중인데 Groovy & Grails 와 이넘을 엮으면 정말 재미있는게 만들어 질 것 같다.

ROME - Rss and atOM utilitiEs

ROME은 ATOM/RSS에 대한  오픈소스(Apache License) 자바 유틸리티  모음으로  자바에서 대부분의 syndication format들을 다루기 쉽게 해준다.
  RSS 0.90, RSS 0.91 Netscape, RSS 0.91 Userland, RSS 0.92, RSS 0.93, RSS 0.94, RSS 1.0, RSS 2.0, Atom 0.3, and Atom 1.0
ROME은 다양한 종류(flavors)의 Syndication 피드들에 대해서 하나의 포맷을 다른 포맷으로 바꾸어주는 컨버터들 뿐만 아니라 파서와 생성기들을 포함한다.
파서는 작업하고자 하는 포맷에 맞는 자바  오브젝트 또는 들어오고 나가는 피드 타입에 대한 걱정없이 동작 가능한 데이터를 가진 generic normalized SyndFeed class를 돌려준다.

Current Release
 ROME 0.9 : (December 11, 2006) Source | Binary
  • What is New, Highlights

    • ROME now supports the final version of the Atom Syndication Format RFC 4287: let's Nuke all these feeds! NEW
    • Enclosure support at the Synd level, for all our podcaster friends
    • Bug fixes
    • details in the ChangeList
    • Modules galore: Content, iTunes Podcast, Slash, Google Base, Creative Commons, MediaRSS

Sample을 돌려보고 싶다면  다운로드 받으시고 간단히 다음과 같이 간단히 따라해 볼 수 있다.
OS를 새로 설치한 뒤 아직 Maven을 설치하지 못한 관계로 Ant 사용법만 올립니다.
물론 Ant와 JDK는 설치가 되어 있어야 겠지요 :)

- 일단 압축을 푼다.
- cd rome-0.9  :  ROME SRC 디렉토리로 이동 한다.
- ant 실행 :  JDOM1.0이 필요한데 자동으로 다운로드 받아서 ROME 컴파일 된다.
- cd ../rome-samples-0.9 : sample 디렉토리로 이동한다.
- ant 실행 : sample 실행에 필요한 파일들(jdom-1.0.jar, servletapi-2.3.jar)을 다운받은 후에 target 디렉토리 아래에 rome-samples-0.9.jar과 rome-samples.war파일이 생성된다.
- ant run-aggr/conv/read/write  를 실행하면 Aggregator/Converter/FeedReader/FeedWriter 샘플들을 실행해 볼 수 있다.
- 웹에서 실행해보고 싶다면 tomcat에 war파일을 deploy한 뒤에 http://localhost:8080/rome-samples/feed로 접속하면 확인할 수 있다.
- 예제 보기: http://www.hijava.net:8180/rome-samples/feed
귀찮으시면 그냥 다운 받아서 돌려보시길 :)
2006/12/27 23:43 2006/12/27 23:43
TAG , ,

FireBug 1.0 beta(b1) Rlease

프로그램 이야기 | 2006/12/20 20:20 | 낭만곰팅
요즘 주된 업무가 JavaScript Toolkit 개발인 관계로 Firefox(이하 FF) 부가기능중 가장 많이 사용 하는게 FireBug이다.
지난 12월 13일에 더욱 향상된 기능의 FireBug 1.0 b1이 릴리즈 되었다.

사실 버전이 0.4.1에서 1.0 beta로 올라간 데는 FireBug 개발자(JoeHewitt)의 많은 의미가 포함되어 있는것 같다.
그의 블로그11월에 올라온 글을 보면 1.0버전을 만들면서 상용 소프로웨어로의 전환을 생각했음을 알 수 있다.
버전을 1.0으로 올리고, getfirebug.com이라는 새로운 사이트도 만들었다.

많은 시간과 노력을 들여 무료로 소프트웨어를 배포한다는 것은 엄청난 인내를 필요로 했을 것이다.
다른 사람들의 많은 긍정적인 의견을 접하고 free and open source로 유지하면서 기부를 받는 방식을 선택했다.
자세히 보기
1.0 b1은 다음의 기능을 포함하고 있다.
- Inspect and edit HTML
- Tweak CSS to perfection
- Visualize CSS metrics
- Monitor network activity
- Debug and profile JavaScript
- Explore the DOM
- Execute JavaScript on the fly
- Logging for JavaScript

FireJune님이 언급한 것 처럼 추가된 기능중 HTML과 CSS를 바로 수정하고 결과를 확인할 수 있는 기능은 개발 속도를 향상시켜 준다.
사용자 삽입 이미지

또한 Script Debugging 더 편리하게 수행할 수 있을 것이다.(Watch and Breakpoints 탭)
이밖에도 0.4버전대에 있던 "Events"탭은 HTML 탭에서 엘리먼트를 선택하고 "Log Events"를 선택하면 Console로 출력되는 형태로 대체 되었다.
IE에서 FireBug Console처럼 사용할 수 있는 기능을 Firebug Lite라는 이름으로 배포하고 있다.
자세한 설치방법과 사용법은 위 링크에서 확인할 수 있다.

현재 0.4.1을 사용하고 있다면 FF extension 관리자에서 1.0으로 자동업데이트는 지원되지 않는다.
http://www.getfirebug.com/ 에서 설치를 하고 나면 이후 새로운 릴리즈는 자동업데이트가 가능하다.
Firebug를 애용하고 있다면, 앞으로도 더 나은 기능으로 배포되기를 바라면서 많은 웹관련 회사나 개발자들이 도움을 주었으면 하는 기대를 해본다.
기부하러 가기

2006/12/20 20:20 2006/12/20 20:20

Java SE 6 릴리즈

프로그램 이야기 | 2006/12/12 22:30 | 낭만곰팅
드디어 12월 12일(미국 현지 12월 11일) Java SE 6 이 릴리즈 되었습니다.
Java SE 6 다운로드

J2SETM SE 6, Platform Name and Version Numbers 문서에 따르면 이번 릴리즈부터 플랫폼명이 J2SETM 에서 JavaTM SE 로 변경되었다고 하는군요.
예전에 바뀐 걸로 알고 있었는데 아닌가요?
공식 명칭은 JavaTM Platform, Standard Edition 6 라는 군요. 참 길기도 하지.

Java SE 6 Documentation
Java SE 6 New Features
2006/12/12 22:30 2006/12/12 22:30
TAG ,