티스토리 툴바


분류없음2010/12/06 18:50

아무래도 내 평소 자세가 별로 좋지 않은 모양이다. 의자에 가능한 한 깊숙이 앉고 의식적으로 허리를 곧게 펴려고 노력 중이다. 그러고 동영상 녹화 강의를 틀었더니 잠이 잘 온다!?

 

… 에효 공부하자

Posted by 에이쥬어
분류없음2009/09/11 23:34

Posted by 에이쥬어
분류없음2009/08/12 14:15

 
  1. class Array
  2.         def randomly_pickup(n)
  3.                 sort_by{rand}.slice(0..n)
  4.         end
  5.  
  6.         def stable_sort
  7.                 i=0
  8.                 map{|e| i+=1; [e,i]}.sort.map{|e| e[0]}
  9.         end
  10.         def stable_sort_by(&blk)
  11.                 i=0
  12.                 map{|e| i+=1; [e,i]}.sort{ |a,b|
  13.                         t= blk.call(a[0]) <=> blk.call(b[0])
  14.                         if t==0: a[1] <=> b[1]
  15.                         else t
  16.                 }.map{|e| e[0]}
  17.         end
  18. end
Posted by 에이쥬어
잡담2009/06/11 19:01

  요즘 HDD 대신 SSD를 사용하는 컴퓨터들이 늘어나고 있습니다. 특히 넷북이나 하이엔드 유저들에게 SSD만큼 군침도는 녀석도 많지 않을 겁니다. 임의 접근 속도가 빠르고 읽기 쓰기에 걸리는 시간이 일반적으로 사용하는 하드 디스크보다 빠르다는 장점 덕택이죠. 더군다나 요즘 낸드플래시가 대량생산되면서 점점 가격이 내려가는 추세이므로, 새로 컴퓨터를 구입하는 사람들은 SSD를 HDD 대신, 혹은 HDD와 같이 사용하는 것을 고려하고 있습니다.

  많은 분들이 SSD를 사용하다 보면 왠지 SSD의 속도가 느려지는 듯한 느낌을 받습니다. HDD를 사용하는데 익숙한 유저들은 이런 상황에 주저하지 않고 조각모음을 시키죠! 심지어 속도가 빨라졌다고, 자주 실행시키라는 블로그도 있었습니다!

  그런데 사실 조각모음은 전혀 성능향상에 도움이 되지 않습니다. 하드 디스크는 헤드가 디스크의 표면을 읽어야 하기 때문에 단편화가 중요한 주제이지만, SSD는 반도체 소자이기 때문에 파일이 이곳저곳에 나누어 저장된다고 하더라도 성능에는 영향이 없습니다. 아니, 오히려 SSD 컨트롤러는 파일을 이곳저곳에 나누어 저장해야 합니다. (이는 SSD는 쓰기 제한 횟수가 HDD에 비해 매우 적기 때문인데, 이는 뒤에 설명합시다.)

  SSD의 속도가 느려지는 것은 데이터 단편화 때문에 일어나는 것이 아니라, 컴퓨터의 파일 시스템이 동작하는 방식 때문에 일어나는 것입니다. 현재 대부분의 파일 시스템은 HDD 위에서 동작하는 것에 최적화되어 있습니다. 
  그러한 최적화 중 하나는 파일을 삭제할 때 실제 파일의 내용을 삭제하는 대신, 파일들의 위치가 저장되어 있는 파일 시스템 테이블에서만 연결을 해제하는 겁니다. HDD에서는 이게 효과가 있습니다. 하지만, SSD에서는 이게 문제가 됩니다. '낸드 플래시는 이미 값이 저장된 셀에 새로운 값을 쓰려면 기존에 저장된 내용을 반드시 먼저 삭제해야 합니다'.  유저들이 겪는 정체불명의 지연 현상은 바로 기존에 저장된 데이터를 삭제하는 딜레이입니다.

  위에 뭐라고 썼죠? SSD는 쓰기 제한 횟수가 HDD보다 적다고 말했지요? 이게 SSD의 가장 큰 단점 중 하나인데,플래시 메모리의 각 셀은 데이터를 썼다 지웠다 할 수 있는 횟수가 제한되어 있습니다. 그리고 HDD에 비해서 상당히 적습니다. 이 횟수를 넘기면 그 셀에는 더 이상 데이터를 기록할 수 없게 됩니다. 이걸 dead cell이라고 부르는데, 이 때문에 사용되는 기술이 wear-leveling이라는 겁니다.  "셀이 하나씩 죽으면 점점 용량이 줄어들게 된다. 그러니까 얘들이 한번에 뒈지게 만들자" 하는 겁니다. 즉 각 셀의 쓰기 횟수를 비슷하게 맞추기 위해 여기저기에 데이터를 나눠 저장하도록 하는 겁니다. 즉 디스크 단편화 현상은 SSD에서는 당연한 일이며, 이를 없앤답시고 디스크 조각 모음을 하는 것은 SSD의 수명을 극단적으로 단축시킵니다. 조각 모음 자체가 쓰기 연산을 사용하는 일인데다가, 제조사들이 SSD의 짧은 수명 그나마 오래 쓰라고 만들어 둔 wear-leveling이란 배려를 무력화시키는 것이니까요.

  예. 오랜만에 장문의 글을 썼네요. 뭐 요지는 이겁니다. 돈 많아서 SSD 정도는 또 사면 된다 하는 분은 "우왕 ㅋ 빨라진거 같아" 하고 자위하면서 조각모음 하십쇼. 어차피 빨라지지는 않겠지만...

저작자 표시 비영리 변경 금지
Posted by 에이쥬어
분류없음2008/08/07 08:39
부분언팩 2008. 08. 18

- 기존 버전은 C언어를 바탕으로 제작되었지만, 이번 버전은 Ruby로 작성되었습니다. Ruby는 현재 Native code를 생성할 수 있는 컴파일러가 따로 존재하지 않으므로, 루비 인터프리터를 내부에 포함한 파일을 배포합니다. 이 때문에 파일의 크기가 약 40배(... 10배) 증가하였고 속도도 약간 느려졌습니다. 하지만, 이는 차후에 Ruby 새 버전이 나오면 개선될 수 있는 부분이며, C에 비해 새로운 기능을 추가하기가 압도적으로 쉬워졌습니다.

- 이번 버전은 기존에 사용하던 list.txt 파일 외에, list_yes.txt도 파일 리스트로서 기능합니다. 단, list_yes.txt파일 안에 쓰여진 파일들은 사용자에게 적용 여부를 묻지 않습니다.
주의) list.txt와 list_yes.txt는 (빈 파일일지라도) 반드시 존재해야 합니다. 이는 C와 Ruby 1.8.6 사이의 동작 방식 차이에서 기인한 것입니다.

- 이번 버전은 이전 버전과 달리, list.txt(list_yes.txt) 안의 파일 이름이 일부만 일치하는 것이 아니라 완전히 일치해야만 합니다. 대신 wildcard를 지원합니다. 예) dungeon*.xml

- 이번 버전은 번거롭게 pack파일의 이름을 입력할 필요가 없습니다. 실행하면 자동으로 자신이 속한 폴더 내의 .pack 파일을 검색하여 적용합니다. 물론 리스트 파일들은 작성해야 합니다.
수정) 폴더 내 pack파일 중 단 하나만 적용되는 문제를 해결함. -_-; 디버그 하려고 반복문 사이에  break를 넣어뒀었던듯



!!!!! 참고 / 지금 꽤 많은 컴에서 제대로 작동하지 않고 있습니다. 해결책을 찾고 있으니 잠시만 기다려주셈 _-_  해결. 내가 뭘 잘못 짜거나 한건 아니고요 -ㅅ- 루비는 스크립트 언어라서 인터프리터가 설치되지 않은 환경에서 실행할 수가 없어요. 그래서  Rubyscript2exe라는 걸 이용해서 exe파일로 만든 건데, 이게 버그가 있네요. exerb라는 걸로 대체했음. 아마 이제 잘 될거에요. (확신은 못하겠으나..)



 음. 몇마디 더 붙이겠습니다. 이 프로그램은 마비노기 패키지 파일 내부에 있는 특정 파일의 확장명을 바꾸어서, 마비노기 클라이언트에서 패키지 파일 안에 파일이 없는 것으로 인식하도록 하는 것이 목표입니다. 이를 이용해서 해당 파일들을 대응되는 폴더에 넣으면 언팩한 효과가 나도록 하는 것입니다.

 따라서 이 프로그램을 실행하면 자동으로 미니맵 수정이 일어난다거나 하는 것은 아닙니다. 여기에는 몇가지 이유가 있습니다.

 리버스 엔지니어링을 통해 파일 포맷 분석하는 것은 불법이 아닙니다. 파일 포맷에는 저작권이 적용되지 않습니다. 따라서 제가 이 pack포맷을 가지고 뭔가를 하는 프로그램을 작성하여 배포하는 것은 문제가 없습니다.

 하지만 언팩은 분명히 넥슨 측에서 원했던 게임 플레이 방식이 아니며, 어떤 면에서는 불법 프로그램(이른바 핵)과 비슷한 성격도 지니고 있습니다.

 패키지 파일 포맷 자체에는 저작권이 적용되지 않지만, 이 패키지 파일들이 담고 있는 파일들 각각은 넥슨에게 저작권이 있습니다. 그래서 제가 수정된 파일들을 함께 배포하거나, 그러한 파일들을 이용하는 방법을 자세히 설명할 수 없습니다.  만일 그랬다가는 저는 영구블럭은 물론이고, 자칫하면 넥슨에게 고발당할지도 모르지요. 저는 그런 일은 바라지 않습니다.
Posted by 에이쥬어

merge2 a [] = a
merge2 [] b = b
merge2 (x:xs) (y:ys)
  | x < y = x:merge2 xs (y:ys)
  | x > y = y:merge2 (x:xs) ys
  | otherwise = x:y:merge2 xs ys

mergesort [] = []
mergesort (x:xs) = merge2 [x] (mergesort xs)



> mergesort [1,5,3,7,6]
[1,3,5,6,7]

하스켈은 대표적인 함수형 언어로, 변수가 존재하지 않는 신기한 언어이다. 변수가 없으므로 side-effect가 없어 디버깅에 쏟을 시간을 절약할 수 있다.

.. 라지만 이게 내 첫 하스켈 소스이다.

Posted by 에이쥬어

more..


어떤 두 원소가 같은 그룹에 속해 있는지 알아낼 수 있고, 빠른 시간에 그룹을 결합할 수 있는 자료구조인 서로소 집합입니다. Kruskal 등의 알고리즘을 구현할 때 많이 쓰입니다.
Posted by 에이쥬어

more..

전혀 루비스럽지 않은 코드 ... orz

많이 느립니다. 다시 구현할 생각입니다.
Posted by 에이쥬어
분류없음2008/01/15 02:39

맞다- 나 블로그가 있었지..


아무래도 들어오는 분은 거의 없는 것 같지만, 생각도 못하고 있었네요. 죄송합니다.


Posted by 에이쥬어
분류없음2007/10/27 22:18
한국인을 한국인답게 만드는 것은 무엇인가? 사람에 따라서 여러 가지 대답이 나올 수 있겠지만, 아마도 "문화"에 대한 이야기가 나오리라고 생각한다.

우리 문화는 우리의 의식주 전반에 걸친 모든 것에 영향을 끼친다. 따라서 틀린 대답은 아니다. 다만 그 대답은 너무 범위가 넓다. 그런 식으로 말하자면, 나를 나답게 만드는 것은 내 개성이다. 하지만, 그걸 모르는 사람이 어디 있겠는가?

내가 묻고 싶은 것은, 그 중에서도 딱 하나만 골라 보면 무엇이냐는 것이다. 자동차를 자동차답게 만드는 것은 엔진, 컴퓨터를 컴퓨터답게 만드는 것은 중앙처리장치……. 이런 식으로 말이다. 과연 한국인을 한국인답게 만드는 '그 어떤 것'은 무엇일까?


요즈음 나는 영어 공부를 하고 있다. 비록 알고 있는 단어는 많지 않지만, 문법을 공부하고 나니 대부분의 지문을 해석할 수 있었다. 모든 문장이 몇 가지의 규칙에 딱 맞게 작성되어 있기 때문이다. 흥미로운 일이다. '이런저런 규칙을 만들자' 하고 언어를 만든 것도 아닐 텐데.

그에 비해, 한국어는 나쁘게 말하면 일관성이 없고, 좋게 말하면 여유가 많다. 그 이유가 무엇일까? 나는 이렇게 생각한다. 영어는 서구인들의 실용적이고 합리적인 사고방식을 반영하고, 한국어는 유쾌하고 매사에 여유로운 -코리안 타임을 보라. 얼마나 여유로운가? 바람직하진 않지만- 사고방식을 반영하는 것이다.

이처럼, 언어는 그 말을 사용하는 사람들의 사고방식을 반영하고, 나아가서는 사람들의 사고방식에 반영된다. 나는 감히 말한다. 한국인을 한국인답게 만드는 것은 우리말이고, 우리글이다.

세계화의 이름, 허울은 좋다. 그러나 한국어를 버리는 순간, 그건 코리언일 수는 있어도 한국인은 아니게 된다. 이 사실을 정부와 지자체가 알고, 제발 'Hi Seoul' 같은 병신짓은 그만 했으면 좋겠다.
Posted by 에이쥬어