'주절주절'에 해당되는 글 7건

  1. 2009/03/16 커밋 로그 패턴 (1)
  2. 2008/12/16 [광고] 겨울의 주말을 불태우실 분~
  3. 2008/10/17 요즘 기분 전환법 (1)
  4. 2008/10/12 sort vs. sort_by
  5. 2008/09/05 네이버 확장 깔아봄 (1)
  6. 2008/05/24 2008년도 1학기 연합LUG세미나 (1)
  7. 2008/02/25 이사오며 (6)

git에 대해 찾아 보다가, Git for the lazy 라는 글을 찾았습니다. url로 봐서는 공부하기 귀찮아 하는 git 초보를 위한 치트시트같은 글입니다. 글 목차만 쭉 훑어보고 북마크해두는 것만으로도 충분히 활용 가치가 있는 내용입니다.
근데 뒤쪽에서 의외의 내용을 발견했습니다. 바로 "좋은 커밋 로그"를 쓰는 방법에 대해서 설명한 부분인데 막번역 해보면 이렇습니다.

이 부분은 필자의 의견이지만, 따라 하면 읽기가 쉬워진다.

첫 줄은 한 문장으로 변경 사항을 요약해서 적는다. 이 문장은 50자 이하의 길이로 하고, 현재형으로 쓴다. (이 부분은 git에 대한 것인데) 이 메세지는 git의 merge 커밋 로그가 되는데, branching, merging 시에도 이 메세지를 보게 될 것이다.
그 아래로는, 필요한 경우 더 자세한 내용을 적는데, 일정한 규칙을 사용한다. 스페이스 한칸, * 표, 또 스페이스 한 칸을 들여쓴 후 필요한 내용을 적는다.

 

예)

  1. Add feature X to subsystem Y.

     * Feature X isn't working well with feature Z. Worth investigating.
     * Feature X still doesn't work for inputs A, B and C.

git으로 여러번 commit을 하고 push 하게 되면, 각 커밋 메세지들이 합쳐져서 한 메세지가 됩니다. 로그를 대강대강 작성하면 이 과정에서 눈에 잘 들어오지 않는 메세지가 되고 결국 커밋로그 자체가 의미가 없어지게 되죠..(비단 git만 해당되는 이야기는 아닙니다. 모든 버전관리 시스템이 마찬가지지요.) 이런 이유 때문에 커밋할 때마다 약간의 노력을 들여서 잘 꾸며 놓으면 항상 유용하고 눈에도 잘 들어오는 좋은 정보가 되겠죠. 좀더 덧붙여서, 버그 관리 시스템에서 제공하는 버그 정보가 담긴 url이나, Trac 의 티켓 번호, 기타 관련 url이 있다면 로그에 같이 남겨 봅시다.

오타 수정이나 아주 단순한 리팩토링의 경우 로그를 안 남기고 커밋하고 싶은 유혹이 생기게 마련인데, 사실 변경(커밋)은 작든 크든 오류를 낼 수 있는 가능성을 가지고 있기 때문에 커밋로그라는 방법을 통해서 기록을 남겨두는 것이 좋을 것 같습니다. 이제 'refactor' 혹은 '오타수정;;;' 등의 로그만 남기고 커밋하는 일을 줄여야 겠습니다 -.-;;

 

참고 자료

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

Posted by 나이누
2008년 말과 2009년 초에 오픈소스/루비/레일스 관련해서 힘좀 써보실 대학생/휴학생 분 있으신가요?

WoC 프로젝트로 위 토픽에 걸맞는 일들을 좀 해보려고 합니다. 아래 해당되시는 분 중에 심심하고 뭔가 만들어 보고 싶다 하시는 분이 , 웹(http/html)에 대해 잘 알고, 루비나 레일스를 배우고 싶은 분이나 혹은 잘 아는데 심심해서 뭔가 개발해보고 싶다 하시는 분이 있으시면, 요번 겨울은 저와 함께 보내 보시죠. ^^/

더 자세한 내용은 글을 더 다듬어서 내일/모레 안으로 올릴 겁니다. 일단 W데이 신청하신 분들은 주말에 뵐 수 있겠네요. 그리고 WoC는 재미난 행사입니다. 위 주제가 아니더라도 흥미롭고 유익한 꺼리가 많이 있을테니 가급적 참가해 보세요.ㅎ

ps. 포스팅 이제 많이 할거에요 후후 바쁜일 다 지나갔거등~
Posted by 나이누

  • 세수

    보통 오후 4-5시쯤 되면 지치기 시작해서 기분 전환을 하지 않으면 더이상 집중이 되지 않는다.

    이럴 땐 세수를 한다.
    나도 세수하고 안경도 세수하고 모니터도 세수시킨다.
    음료수나 커피 한잔을 가져다 놓고 창도 정리한다. 기분은 이미 아침이다.

  • 기분을 다운시키는 것들을 일단 뒤로 미룸

    아침점심저녁 가릴 것 없이 회사 외부에서 받는 스트레스로 일에 집중이 안 될 때가 있다.

    이럴 땐 "지금 고민해도 소용없다." 라고 생각하고, 일에 집중한다.
    취미와 일이 같은 사람은 이럴 때 좋은 거 아닐까?
    일단 집중해서 설계하고 구현하기 시작하면 기분전환은 더 이상 필요가 없다.
    이미 가장 행복한 상태니까.

  • 탄산음료

    콜라를 막 마신다. 콜라 없으면 사이다라도 마신다.
    탄산은 정신을 놓게 만드는 효과가 있다. 맥주처럼 들이키고 취해버리자.
    시원한 펫트병 하나랑 종이컵 두세개 정도 그냥 자리로 가져와서 마구마구 마신다.

  • 사무실을 돌아다닌다. 말을 건다.

    아까 생각했던 것이든. 혹은 당장 떠오르는 것이든
    내가 한 3분 정도는 쏟아내야 하는 대화 소재를 선택해서
    잘 들어줄 만한 사람을 붙잡고 마구마구 말해본다.

    잘 안받아줘도 잔뜩 말하고 나면 좀 나아진다.

  • 걍 일찍 퇴근 --;

    괜히 뭐 한답시고 앉아서 더 스트레스 받고 체력낭비 하지 말고

    할 일 없으면 퇴근한다.

이 리스트는 롤링리스트에서 작성되었습니다.

Posted by 나이누

sort vs. sort_by

주절주절 2008/10/12 03:07

Enumerable - enum.sort_by {| obj | block } => array

Sorts enum using a set of keys generated by mapping the values in enum through the given block.

%w{ apple pear fig }.sort_by {|word| word.length}
#=> ["fig", "pear", "apple"]

The current implementation of sort_by generates an array of tuples containing the original collection element and the mapped value. This makes sort_by fairly expensive when the keysets are simple

require 'benchmark'
include Benchmark

a = (1..100000).map {rand(100000)}

bm(10) do |b|
b.report("Sort") { a.sort }
b.report("Sort by") { a.sort_by {|a| a} }
end

produces:

user     system      total        real
Sort 0.180000 0.000000 0.180000 ( 0.175469)
Sort by 1.980000 0.040000 2.020000 ( 2.013586)

However, consider the case where comparing the keys is a non-trivial operation. The following code sorts some files on modification time using the basic sort method.

files = Dir["*"]
sorted = files.sort {|a,b| File.new(a).mtime <=> File.new(b).mtime}
sorted #=> ["mon", "tues", "wed", "thurs"]

This sort is inefficient: it generates two new File objects during every comparison. A slightly better technique is to use the Kernel#test method to generate the modification times directly.

files = Dir["*"]
sorted = files.sort { |a,b|
test(?M, a) <=> test(?M, b)
}
sorted #=> ["mon", "tues", "wed", "thurs"]

This still generates many unnecessary Time objects. A more efficient technique is to cache the sort keys (modification times in this case) before the sort. Perl users often call this approach a Schwartzian Transform, after Randal Schwartz. We construct a temporary array, where each element is an array containing our sort key along with the filename. We sort this array, and then extract the filename from the result.

sorted = Dir["*"].collect { |f|
[test(?M, f), f]
}.sort.collect { |f| f[1] }
sorted #=> ["mon", "tues", "wed", "thurs"]

This is exactly what sort_by does internally.

sorted = Dir["*"].sort_by {|f| test(?M, f)}
sorted #=> ["mon", "tues", "wed", "thurs"]

이런 글도 있다.

http://redcorundum.blogspot.com/2006/10/using-sortby-instead-of-sort.html

 

요약

Enumerable의 sort와 sort_by 는 둘 다 enum객체를 정렬해 주는 일을 한다. 근데 이 둘이 정렬하는 방법이 조금 다르다. sort_by는 정렬 대상이 되는 키들을 일단 한번 연산하여 테이블을 만들어 두고 나서 정렬하기 때문에 간단한 키셋인 경우 sort보다 좀 더 비싸진다.

그런데 sort_by 를 써야 할 상황이 존재한다. sort_by는 초기에 한번 정렬 대상값을 구해놓고 정렬을 하기 때문에 위 설명처럼 File 객체가 2nlogn 개만큼 생성된다든지, Time 객체가 2nlogn 개 만큼 생기거나 하지는 않는다. 이런 경우 sort_by가 sort보다 훨씬 좋은 벤치마크 결과를 내게 된다.

Schwartzian Transform이 멋지다. sort_by가 없었다면 루비스트들은 다 sort에 저 방식으로 정렬을 하고 있겠지? [정렬키, 아이템] 으로 묶은 후(collect) 정렬(sort)해서, 아이템만 취하는(collect) 방식이다. 펄 유저들은 이렇게 짜왔었나보다.

그리고 그 아래 링크는 여러 키를 조건으로 소트하는 방법에 sort_by를 이용하는 글이다. 역시 설명이 참 심플한데, sort에 Array로 인자를 넘기면 각 인자를 비교해 주니, 그걸 이용해서 내가 정렬하고 싶은 순서대로 키를 넘기는거다.

  1. some_collection.sort do |a, b|
  2.   val = a.foo <=> b.boo
  3.   val = a.bar <=> b.bar if val == 0
  4.   val = a.baz <=> b.baz if val == 0
  5.   val
  6. end

대신

  1. some_collection.sort_by { |a| [a.foo, a.bar, a.baz] }
    

 

아하. 그렇구나.

 

ps. 루비 레퍼런스 설명도 너무 쉽게 잘 돼있어서 감동. ㅜㅜ

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

Posted by 나이누

일단 맥에다가.. 깔았다.

Picture_5.pngPicture_3.pngPicture_4.png

네이버 익스텐션을 설치하면 확장과 테마가 하나씩 설치된다. 이걸 설치하면 ui가 네이버스럽게(녹색 박스에 네이버 왕건이 배너) 바뀌고, 기본 검색을 네이버로 변경할 수 있는 옵션, 그리고 검색은 se검색을 사용할 수 있는 옵션, 마지막으로 ietab을 설치하도록 연결해 주는 체크박스가..등장한다. 윈도에서 깔면 ietab으로 연결해 주는 건 참 편할듯.

근데 아마 ietab이 설명에 써 있는 것처럼 지능적으로 동작하진 않을 텐데..라며 윈도에서도 설치해 보았더니. 과연.

Picture_4(1).png

music.. hangame.. file.. video..
정말 네이버 세상 안에 있으면 ie를 켤 일이 없겠구나.
네이버에서 불여우 밀어주니 좋다. (라고 세뇌하기 -_-)

하지만 이미 마음은 구글 크롬으로 가고 있다는거.....

 

추가

http://kldp.org/node/97601

독점에 본능적으로 저항하는 입장에서...... 네이버는 내가 멀리해야 할 대상이었고, 이번 "네이버 버전 불여우"는 불여우를 사용하지 않는 유저들이 이미 불여우에서도 잘 쓸 수 있는 네이버 안으로 더 가두려는 것이 아닌가라는 생각도 했었다. 하지만 그건 나쁜 일이 아니다. 웹표준을 지키는 네이버는 사실 내가 계속 네이버에 기대했던 점이니깐.

여튼간에. 바로 위 링크 글을 읽어보면 이 불여우 확장된 이유는 "더 많은 네이버 사용자들이 불여우를 사용하도록 한다" 이다. 네이버로 가두고 네이버만 쓰고 이건 의도상으로는 아니었던 것이고, 그건 이게 ie 툴바와는 다른 방법으로 배포되고 있다는 점에서 더 확실하게 알 수 있다.

모든 조직은 어차피 사악한 건데
그래도 이런 물건이 나올 수 있게 하고 계시는 순선님, 앞으로도 잘 부탁드려요~~
다음버전 기대해 봅니다. ㅎㅎ

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

Posted by 나이누

간만에 블로깅이죠.;;
학생 너무 바빠요. 정말...

제가 몸담고 있는 동아리에서 연합으로 세미나를 개최합니다. 제가 발표하는 것은 아니지만, 수준있는 세미나를 관계자 여러분들이 관심있게 봐 주십사 하고 이렇게 광고합니다. ^^
의욕과 혈기 넘치는 대학생들이 펼쳐 놓는 재미난 주제들 보러 오세요.

ulug.jpg

대학연합 LUG 모임 ULUG는 이곳입니다.

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

Posted by 나이누

이사오며

주절주절 2008/02/25 02:53

이글루스에서 너무 여러가지를 동시에 얘기하려다 보니
이건 이래서 못올려 저건 저래서 못올려 하며 올리지 못한 포스트가 많았습니다.
그래서 좀 객관적이고 좀 테크니컬한 글들을 모아다가 여기서 새로 해보려고 합니다. ^^
그럼 이글루스에는 자연스레 주관적이고 안테크니컬한 것들이 쌓이게 되겠죠.;
어쨌든, 분리함으로서 윈윈하는 모습을 보여드리겠습니다.

도메인은 16일에 구입했습니다.
대충 결정하고 결제하느라 이름이 좀 촌스럽습니다.;
5년치를 한꺼번에 결제했기 때문에 그 동안은 이 도메인으로 쭉 쓸 것 같습니다.

080225-0001.jpg

주말마다 오픈아이디 이벤트 작업중;
간만에 집에서 조명 줄여놓고 코딩 하니 기분이 묘하네요.
(핸폰 사진기 화질이 아주 안좋습니다. 덕분에 지저분해도 잘 안보이네요 ㅎㅎ)

그럼 또 뵙죠!

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

Posted by 나이누