조급한 마음이 들다

2월말 런칭을 위해서 달리고 달리고 있습니다. 사실, 가시적 성과가 만족할 만큼 있는 것은 아닙니다. 새로운 진행을 하기 보단, 기존 코드의 개발 효율성을 높이는 작업을 하고 있기에 겉으로 보이는 모습은 거의 변화됨이 없습니다.

가시적 성과가 없다는 것이 사람의 마음을 다급하게 만드는 것 같습니다. 다른 사람에게 평가를 받아야 하는 입장이라면, 가시적 성과에 민감하지 않을 수 없는 입장인듯 합니다. 최선의 노력이 최고의 성과를 이끌어 내지 못한다는 것을 알곤 있지만, 미흡한 성과로 인해서, 제 자신에게 최선의 노력을 했는지 되묻곤 합니다.

오늘도 저는 Aptana Studio 를 열고 "관습적 코드"란 어이없는 넘들과 숨바꼭질을 합니다.

content.gsub - Parse HTML When Reading Atom Feeds

ATOM 피드를 읽을 때, html를 변환

def rss_html_parse(content) 
    content.gsub!("&lt;","<") 
    content.gsub!("&gt;",">") 
    content.gsub!("\\","") 
    content
end


아래의 코드도 참고 하면 좋을듯 합니다.

http://www.koders.com/ruby/fid16C1CE4DCC34F06BDECCAF265080FD2E60334D31.aspx

#
# $Revision: 1.4 $, $Date: 2007/03/10 04:23:47 $
#
# This is free software with ABSOLUTELY NO WARRANTY.
# You can redistribute it and/or modify it under GPL2.
#

=begin
S_TABLE = {\
	'whisper' => 'ϵ',
	'think' => '',
	'groan' => '',
	'ring' => '',
}
=end
C_TABLE = {\
	'ϵ' => 'red',
	'' => 'gray',
	'' => 'darkblue',
	'' => 'green',
}

AttrTable = {
	'&#X09;'=>"\t", '&#X0A;'=>"\n",
	'&#X0C;'=>"\f", '&#X0D;'=>"\r",
	'&#X20;'=>" "
}

def mb_message(str)
	str + '<hr>'
end

def mb_convert(content, href, d)
	content.gsub!(/^<\/div><\/div>$/, '<hr>')
	content.gsub!(/<img.*?>/, '')
	content.gsub!(/<table.*?>/, '')
	content.gsub!(/<\/table>/, '<hr>')
	content.gsub!(/<span.*?>/, '')
	content.gsub!(/<div class="announce">(.*?)<\/div>/, '\1<hr>')
	content.gsub!(/<div class="extra">(.*?)<\/div>/, '\1<hr>')
	content.gsub!(/<div class="mes_([^>]+)_body1">(.*?)<\/div>/) {
		if $1 == 'say'
			"<br>#{$2}"
		else
			"#{S_TABLE[$1]}\n<br>#{$2}"
		end
	}
	content.gsub!(/<div.*?>/, '')
	content.gsub!(/<\/(div|span|td|tr)>/, '')
	content.gsub!(/<(tr|td).*?>/, '')
		content.gsub!(/<a href="#(.*?)" class="anchor">(\(.?\d+\))<\/a>/, '<a name="\1">\2</a>')
	content.gsub!(/ onmouseover=".*?();">/, '>')
		content.gsub!(/<a class.*? href=".*?(&date=(\d+))*#(.*?)">/) {
		if $1
			%Q(<a href="#{href}&date=#{$2}&href=#{$3}##{$3}">)
		else
			%Q(<a href="#{href}&date=#{d}&href=#{$3}##{$3}">)
		end
	}
	content.gsub!(/<a href="matome.cgi\?.*?">(.*?)<\/a>/, '\1')
	content.gsub!(/^(.*?)(.*?)$/, '\2\1')
	content.gsub!(/(.*?)(.*?)<hr>/m) {
		%Q(<font color="#{C_TABLE[$1]}">#{$1}#{$2}</font><hr>)
	}
	content.gsub!(/<hr>/, "<hr>\n")
	content
end

# from vikiwiki for w3m input hidden line feed problem
def escapeAttr(value)
	value.gsub(/\s/mn) {|s| "&amp;#X%02X;" % [s[0]]}
end

def unescapeAttr(value)
	v = value.dup
	AttrTable.each {|f, t| v.gsub!(f, t) }
	v
end

아... 머리 아프다.

자신을 변화시키는 법을 배우다

인턴 생활을 근 6주 정도 하고 앞으로 2주 정도 남겨둔 상황입니다. 6주만에 처음으로 쉰것 같습니다. 동아리 선배의 결혼식에 참석하고, 이 때 모인 동기 녀석들과 이야기도 하였습니다. 공덕역 근처에 있는 유명한 족발집에도 들렸습니다. 근처에 있는 볼링도 쳤습니다. 잘 논 것 같습니다.

사실, 달력에 그려진 빨간 날이지만, 논다는 것이 마냥 맘편하지는 않았습니다. 처음 접해보는 언어로 개발을 해본 경험이 전무하기에 프로젝트를 따라 갈수 있을까 하는 걱정이 항상 있었습니다. 그래서 집에 와서 책을 보면서 공부를 했습니다. 생각만큼이나 진도가 나가지 않고 맘만 급해지기 일수 였습니다. 내가 아니면 이 부분을 처리해 줄 수 있는 사람이 없다는 것이 큰 부담이었습니다. 3명의 개발 인턴이 전부인 개발팀이고, 각자의 맞은 영역이 확연히 다르기에 부담감이 조금 컷던 것은 사실이었습니다. 맘한켠엔, php 코드로 짜면 더 편하게 할 수 있을텐데 하는 생각이 맴돌았습니다. 기존 코딩법에 대한 그리움??이 있었지만 결국 새로운 언어를 도전했고, 일정 수준에 코딩 능력을 가지게 되었습니다. 시행 착오에 착오를 거치면서 여기까지 온것 같습니다. 내일이면 제가 짠 코드가 새로운 서비스의 일부가 됩니다.

하나의 언어에 종속된 개발자는 생명력이 짧다고 합니다. 어느 상황에서든 그 환경에 적응을 하고 그 문제를 해결 할 수 있는 개발자가 앞으로도 살아 남을 것이라고 합니다. 그러고 보면 인턴쉽을 하면서 큰 것을 배운 것 같습니다. 특정 언어에 길들여져 있는 제 자신을 되돌아보게 하고 어떠한 상황이 주어지더라도 그 문제를 해결 할 수 있는 법을 배운 것 같습니다. 아직 배울 것이 많이 있지만, 배우는 방법을 배운 것 같습니다. 항상 자신을 변화 시키는 법. 지식 노마드 라는 말이 있습니다. 유목민 처럼 한 자리에 머물지 않고 변화하는 삶에 대응하여 이동하는 것을 일컽습니다. 자신을 변화시킬 수 있는 능력이야 말로 앞으로 우리가 살아가는 가장 큰 힘이 되지 않을까 합니다.

아참 그리고, Bicon 사장님께서 좋은 말씀을 해주셨는데, 종종 하나씩 올려야 겠습니다.

[국민만평] 마이썬 실망 베리~ 빅일텐테...

2MB

대통령 취임식에 베컴을 초대 했다가 퇴짜를 맞았다고 한다. 정말로 실소를 금할 수 없다. 자신의 취임식을 유명 스타를 초대해서 돋보일려고 하는 발상이 그저 웃길뿐이다. 이명박하면 떠오르는 것이, 전시행정이다. 청계천 복원, 남대문 개방이 차후에 어떤 재앙을 부를지에 관한 고찰은 없고 오직 그 순간의 시각적 화려함에 집착하는 것이다. 베컴이 온다고 해서 우리 나라 축구가 망하는 것은 아니다. 하지만, 그저 순간의 외형적 화려함만을 추구하는 세태가, 그것이 우리 나라의 최고 지도자의 취임식의 단면이라는 것이 안타까울 뿐이다.

UX & Silverlight

User eXperience & Silverlight 강연에서 황리건 과장님께서 언급한 사이트 모음입니다.

http://www.silverlight.net

clip_image001

한번 들려서 보시면 될 듯합니다.

실수로, siverlight.com 을 눌렀는데, 역시나 이미 도메인을 딴 곳에서 사버렸네요. 유명사이트의 오타 도메인만을 선점하는 회사도 있다고 합니다.


http://ttpdownload.bl.uk

박물관의 고서의 내용을 직접 보자

.net Framework 3.5를 설치해야 위 사이트를 볼 수 있습니다. 설치하는데 시간은 좀 걸리네요.

clip_image002

http://ttpdownload.bl.uk/

페이지 로딩이 상당히 느리네요.


http://www.mtv.com

clip_image003

Music Videos, Reality TV Shows, Celebrity News, Top Stories | MTV


http://labs.live.com/photosynth/

clip_image004

Microsoft Live Labs: Photosynth

http://labs.live.com/photosynth/


http://mpas.live.com


http://mnet.com


http://wwwtafiti.com

실버라이트 기술을 기반으로 한 검색사이트

clip_image005

tafiti

http://www.tafiti.com/


활리건 과장님 블로그

http://Uxfactory.com


Microsoft Expression Studio 대해서도 알아보면 좋을 것 같습니다.

Apache와 Mongrel 서버를 동시에 이용하기

Rails 프로그래밍을 하게 되면 Mongrel Server를 사용하게 되는데, 아파치 서버에 비해서 성능이 떨어집니다. 코드를 처리하는 부분은 rails의 Mongrel Server가 담당을 하고 다량의 이미지 전송은 Apache Server 서버가 하도록 설정을 해 보자.
기본적으로 InstantRails 를 이용한다고 가정한다.
InstantRails 위치 : C:\InstantRails
1 . Windows host file 편집하기
InstantRails > Menu > Configure > Window's Hosts file  또는
C:\WINDOWS\system32\drivers\etc\hosts
파일을 열어서 편집을 한다
127.0.0.1       localhost
127.0.0.1       imagefiles  # for /images proxy service
127.0.0.1       mywebsite     # for bicon rails service

2. 아파치 1.3 httpd.conf
<VirtualHost *>
     ServerName imagefiles
     DocumentRoot "C:/InstantRails/www"
     Alias /mysql "C:/InstantRails/phpmyadmin"
      <Directory C:/InstantRails/phpmyadmin >
           Options FollowSymLinks Indexes
            AllowOverride None
            Order deny,allow
            allow from all
      </Directory> 
    # 주소 상에서 /files 가 있으면 다음의 주소로 변경을 한다.
    Alias /files C:/InstantRails/rails_apps/mywebsite/files
      <Directory "C:/InstantRails/rails_apps/mywebsite/files">
            Options All
            AllowOverride None
            Order deny,allow
            allow from all
      </Directory>
</VirtualHost>
<VirtualHost *>
      ServerName mywebsite
      ProxyPass /files http://imagefiles/files
      ProxyPass / http://localhost:3000/
      ProxyPassReverse / http://localhost:3000
</VirtualHost>
아파치 2.0 에선 좀더 쉬운 방법으로 설정을 할 수 있다고 한다.

제 9회 한국 자바 개발자 컨퍼런스

이코노믹 씽킹에 나타난 공학적 오류

지하철을 타고 가던 중, 내 앞자리에 앉아서 가던 사람이 한 책을 보고 있었다. 책 제목을 보니, "이코노믹 씽킹"이라는 책이 었다. 집에 와서 학교 도서관에 검색을 해보니 있어서, 낼름 빌렸다. 전역 후, 도서관에서 한동안 박혀서 책을 읽은 적 있었는데 그때 읽은 책들이 주로 경제 관련 책들이었다. 컴퓨터공학을 전공하는 나와는 별로 무관한 책들이라고 생각했었는데, 시간이 흐르고난 지금 돌이켜 보니, 세상을 좀더 넓게 바라보게 해준 1등 공신인 것 같다. 복잡한 세상이 어떻게 돌아가고 있는지 눈을 뜨게 된것 같다. 요즘 읽고 있는 "이코노믹 씽킹" 이라는 책을 잠깐 소개한다.


책 소개 링크 : http://book.daum.net/bookdetail/book.do?bookid=KOR9788901070575
저자 소개 : http://en.wikipedia.org/wiki/Robert_H._Frank
저자 홈페이지 : http://www.robert-h-frank.com/


 
Robert H. Frank

저자의 홈페이지의 사진을 클릭하게 되면 부담스럽게 큰 사진을 만나게 될 것이다.


소재목 몇 개만 소개 하고자 한다.

1. 왜 우유팩은 사각형이고 콜라 캔은 원통형일가? : 디자인의 경재학

2. 39달러짜리 핸드폼에 달린 59달러짜리 배터리? : 수요와 공급이라는 마법

3. 능력이 똑같은 사람들의 봉급이 차이나는 이유와 직장 세계에 얽힌 그 밖의 미스터리들

4. 왜 스타벅스는 메뉴에 쇼트 사이즈를 숨길까? : 할인 가격의 트릭

5. 경쟁이 반드시 좋지만은 않은 이유 : 과다 경쟁의 역설

6. 모두의 것은 누구의 것도 아니다 : 소유권에 얽힌 아이러니들

7. 허풍과 속임수의 두뇌 게임 : 완전한 정보가 없는 시장

8. 경제학자의 세계 일주 : 문화 속에 숨어 있는 경제 원리들

9. 당신의 마음을 계산해보세요 :경제학이 심리학을 만날 때

10. 남녀관계의 경제학 : 사랑과 인간관계를 사고 파는 시장

11. 두 개의 원본 : 아이비리그 학생들의 글쓰기


재미있는 내용들이 많이 있으니, 꼭 한 번 읽어 보길 바란다. 학생들이 수업시간에 발표한 내용이 종종 등장한다. 그 중에, "배민수"라는 학국 학생으로 추측되는 학생이 "노트북이 전압에 상관없이 쓸 수 있게 된 이유는?" 이라는 주제로 발표를 하였다. 이 학생의 주장은 다음과 같다.


세탁기나, 냉장고, TV 등은 전압이 110V, 220V 가 정해져 있어서 다른 나라로 이런 물건을 가지고 갈경우 변압기를 달아야 한다. 내부 변압기를 다는 것은 추가 비용을 발생시킨다. 하지만 노트북은 이동성을 중요시한 얼리 어답터들의 영향으로 인해, 처음부터 노트북에 내부 변압기를 장착했다.


 발전소에서 우리가 쓰는 콘센트까지 오는 전류의 형태는 교류다. 하지만, 우리가 사용하는 모든 전자기기들은 직류전압을 사용하고 있다. 따라서 변압기는 어느 전자 제품을 사용하게 되더라도 필수적인 것이다. 고로 내부에 변압기를 장착했다는 것은 잘못된 정보이다. 노트북은 배터리를 장착하고 있기 때문에, 단시간 사용을 위해 노트북을 이동할 경우엔 어탭터 자체가 필요가 없는 것이다. 전자기기의 특징 중에 하나가 발열이 있다는 것인데, 교류를 직류로 변화하는 어답터에선 열이 많이 발생한다. 이로 인해서 노트북과 같이 작은 제품에 변압장치를 내부에 넣는 것보단 외부에 두는 것이 발열에 대해서 효과적일 것이다.


 현대 사회를 살아가는데 있어서 경제 지식은 필수라고 생각된다. 경제학을 전공한 사람이 아니더라도, 마트의 채소값이 어떻게 결정되는지, 주식이 무엇인지? 금리가 우리 삶에 어떠한 영향을 미치는지 관해서 얕게나마 알 필요가 있다. 그것이 당신의 삶의 조금이나마 금전적으로 윤택하게 이끌어 줄것이라고 생각한다. 모른다고 해서 밥먹는데 지장은 없을 것이다. 4천원짜리 간짜장면 안 먹고 3500원짜리 짜장면만 먹고도 행복할 수 있다면 그다지 필요없는게 경제학 아닐까?


The Economic Naturalist

  • Why does a $500 tuxedo rent for $90 a day while a $20,000 car rents for only $40?
  • Why do female models earn so much more than male models?
  • Why might retailers deliberately hammer dents into their own appliances?
  • Why do the keypad buttons of drive-up cash machines have Braille dots?
  • Why are child safety seats required in cars but not in airplanes?
  • Why are whales, but not chickens, in danger of extinction?
  • Why is there a light in your refrigerator but not in your freezer?
  • Why do 24-hour convenience stores have locks on their doors?
  • Why are newspapers, but not soft drinks, sold in vending machines that allow customers to take more units than they paid for?
  • Why are brown eggs more expensive than white ones, even though the two types taste the same and have identical nutritional value?


  • XNA 세미나

    마이크로소프트 이노베이션 인턴쉽 1기에 뽑혀서 인턴 생활 중이다. 평소엔 소속된 회사에서 근무를 하다가 MS에서 주관하는 교육이 있으면 MS로 가서 교육을 받다. 2주에 한번씩 교육이 있는데, 인턴 기간이 8주니, 총 6번의 교육이 있는 셈이다. 보통 2~3개의 색션으로 구성되어 있다.

    이번에 받은 교육은 XNA에 관한 것이다. XNA를 짜보는 것이 아니라, XNA에 관한 소개 정도였다. 앞으로의 기술적 트랜드를 들어 보는 과정에 일환이다.

    세미나를 해주신 박종석님의 http://blogs.msdn.com/jspark/archive/2008/02/06/7469577.aspx 블로그에도 포스팅이 되어 있다. (직함을 알고 있었는데, 갑자기 생각이 안난다.)



    XNA Developer Center
    http://msdn2.microsoft.com/en-us/xna/default.aspx

     
    다양한 자료들을 볼수 있다. 박종석님께서 자세히 시연해준 오픈 소스인 3D 엔진도 직접 다운 받아서 코드를 수정할 수 있다.



    XNA의 개요와 설치
    http://www.xevious7.com/134

    Microsoft Innovation Internship

    clip_image001[8]

    종종 새로운 정보를 찾으러 www.microsoft.com 을 방문하는데, 나의 눈에 들어오는것이 있었다. 마이크로소프트 한국 지사에서 운영하고 있는 Microsoft Innovation Center 에서 인턴을 뽑는다는 것이다. 정확히는 MSIC에선 교육을 담당하고 실제 업무는 MSIC 회원사(참고: http://www.withover.com/blog/withover/178 )에 하는 것이다.

    한 번의 서류 심사와 회원사 면접이 있었다. 서류 심사는 MSIC에서 하는데, 토익점수, 학점과 같은 사항은 요구하지 않았다. 사회경험이나, 진행해온 프로젝트 등에 관해서 쓰면 좋은 평가를 받을 수 있는 것 같았다. 면접은 회원사에서 직접 면접을 한다. 나는 개발 분야로 지원을 하였다. 면접을 총 4군데 보았는데, 3학년이라는 점이 작용했는지 모두 낙방하고 Bicon 이라는 신생 벤처 기업에 최종합격을 하였다.

    Bicon에 들어가게 된게 얼마나 큰 행운이었는지는 들어간지 일주일 만에 깨닫게 되었다. 인턴을 처음하는지만, 나름 사회 경험이 있기에 이 회사가 얼마나 좋은지는 몸으로 느낄 수 있었다.

    clip_image001

    회원사의 규모는 200명이 넘는 회사에서부터 Bicon(www.mybicon.com) 처럼 5명이 안되는 회사까지 다양하다. 다음 포스팅으로 이노베이션 인턴쉽 때 재출했던 자소서를 올려볼까한다.

    undefined method `require_gem' for main:Object

    rake aborted!
    undefined method `require_gem' for main:Object
    D:/Workspace Aptana/depot/rakefile:4
    (See full trace by running task with --trace)

    Rails 1.x 에서 만든 코드를 Rails 2.x 에서 실행을 하면 위와 같은 에러가 발생합니다.


    config/boot.rb 파일에서

    ...

      if version = defined?(RAILS_GEM_VERSION) ? RAILS_GEM_VERSION : rails_gem_version
        rails_gem = Gem.cache.search('rails', "=#{version}").first

        if rails_gem
          gem "rails", "=#{version}"
          require rails_gem.full_gem_path + '/lib/initializer'
        else
          STDERR.puts %(Cannot find gem for Rails =#{version}:
      Install the missing gem with 'gem install -v=#{version} rails', or
      change environment.rb to define RAILS_GEM_VERSION with your desired version.
    )
          exit 1
        end
      else
        gem "rails"
        require 'initializer'

    ...

    기존의 require_gem 이라고 된 부분을 gem 이라고 변경을 하면 서버를 실행할 수 있습니다.

    Rubyweaver

    http://rubyweaver.gilluminate.com/

    Dreamweaver Extension v. 2.3.3 - rubyweaver2.3.3.mxp released January 14, 2008
    Source Files - rubyweaver.7z

    Ruby on Rails를 사용하게 되면 *.rhtml파일을 생성하게 됩니다.. ruby + html 코드가 혼재있는 파일입니다. 쉽게 말해서 html 파일에 php파일을 넣는것과 비슷한 것입니다. html의 코드가 포함되어 있음에도 불구하고 Dreamweaver에선 rhtml파일을 불러 올수가 없습니다. 물론, 강제로 불로 올순 있지만, 드림 위버 특유의 편집기능을 이용할 수는 없습니다. 단순히 텍스트 편집 형태로만 rhtml 파일을 편집할 수 있습니다.

    Rubyweaver는 Dreamweaver의 막강한 웹편집기능을 이용해 루비의 편집을 더욱 더 편리하게 도와줍니다. 위 파일을 다운 받아서 Adobe Extension Manager -> File -> 설치 로 가서 불러들이면 쉽게 설치를 할 수 있습니다.

    image

    image

    루비의 코드와 html 코드를 모두 지원합니다.

    아, 그리고 위 웹사이트에 글을 읽어 보면 재미있는 이야기가 있습니다. 처음에 Rubyweaver는 현 배포자가 처음부터 개발을 한 것이 아니라고 합니다. 다른 사람이 개발을 하고 있었는데 어느 순간 그 웹사이트가 사라졌고, 현 개발자가 이 코드를 이어받아서 개발을 하고 있다는 것입니다. 물론 얼마전에 최초 개발자에게서도 개발을 승낙을 받았다고 합니다.

    다들 루비로 고고씽~

    Ruby on Rails with InstantRails and Aptana

    1. InstantRails 다운 받아서 설치

    다운로드 페이지 http://instantrails.rubyforge.org/wiki/wiki.pl
    직접 다운 로드 위치 :  InstantRails-2.0-win.zip

    zip 파일이니 적절한 위치에 압축을 풀면된다.


    2. Aptana 설치

    http://www.aptana.com

    exe 파일과 zip 파일 중 자신이 원하는 형태로 다운을 받아서 설치를 한다.

    InstantRails와 Aptana 연동하기

    Aptana Preferences -> Setup Rails, Rake, mongrel_rails path

    image

    Preferences -> Ruby -> Installed Intereter -> Add

    image

    image


    New -> Rails Project 생성

    image

    블로그에 등록한 코드를 삭제하다

     난 컴퓨터 공학을 전공하고 있다. 프로그래밍을 공부하는 방법의 첫단계는 따라하기이다. 교제에 나와 있는 코드들을 직업 따라해보고 동작 원리를 파악하는 것이다. C를 배우면서, Java를 배우면서 내가 따라하기로 해본 코드들 중에서 일부를 블로그에 올렸다. 이걸 처음에 올릴 땐, 나의 공부 척도를 스스로 파악하려고 올렸다. 하지만, 시간이 흐르면서 내가 등록한 코드들도 점점 늘어났다. 저작권이 있어 공개를 해서는 안되는 코드들이 었지만, 나도 모르게 남들에게 공개를 시켜 버린 것이었다. 이러한 코드들 때문이 었는지, 나의 블로그 방문객 수는 나름 일정 수준을 유지 하고 있었다.

     어느 순간, 블로그를 이런 식으로 운영을 해선 안되겠다는 생각이 들었다. 그 코드들은 학생들이 보면 좋은 코드들이지만, 내가 만든 코드가 아닌 것이다. 그 코드들 보려는 사람은 코드의 원작자가 공개한 곳으로 가야 한다는 것을 난 까먹고 있었던 것이다.

     내가 직접 쓴 글이 아니거나, 펌 질을 한 코드들을 모두 내 블로그에서 삭제를 했다. 대한민국엔 소비자는 있는데, 생산자는 없다고 한다. 종종 나도 이런 비판의 가담을 했었는데, 정작 내 자신이 '소비만 하는' 누리꾼이었던 것 같다. 지식의 중간 전달자에서 지식의 생산자로의 변신을 해볼까 한다. 일단 작은 것 부터...