컴퓨터로 EBS 라디오 듣기

2010년의 소박한(?) 목표는 다음과 같습니다.

평일은 하루도 빠짐없이,
1. 6시 이전 기상
2. 6시부터 시작하는 EBS 라디오 귀가 트이는 영어(귀트영) 청취 
아직까지는 잘 지키고 있습니다. 
매일 새벽에 일어나 MP3P로 라디오를 듣다보면, 기기의 위치에 따라 잡음이 끼는 경우가 있어 영 불편하더라구요. 그래서 컴퓨터로 EBS 라디오를 듣는 방법을 찾아 보니, 의외로 너무 간단하다는…
다음 링크를 클릭하시던지…
윈도우키 + R을 눌러 실행창으로 들어간 후, 다음 URL을 입력하고 확인 버튼을 누르시면…
(미디어 플레이어에서 Ctrl + U를 눌러 URL 열기를 하셔도 좋습니다.) 
mms://211.218.209.124/L-FM_300k
아주 깨끗한 음질의 EBS 라디오를 들을 수 있습니다.

몇 가지 루비 예제 코드

루비를 제대로 공부하진 않았지만, 언어가 간결한 덕분에 여러가지 상황에서 유용하게 사용하고 있습니다. 그 동안 만들어서 사용했던 몇 가지 루비 예제 코드를 소개합니다. 여기에 소개하는 코드를 조금만 수정하면 다양한 경우에 활용할 수 있을 것 같네요.

1. 소스코드에서 32자 이상의 심볼을 사용한 라인을 찾아 출력하기

HITACHI 메인프레임 C 컴파일러가 32자 이상의 심볼을 지원하지 않더군요. 일일이 찾기 힘들어서 이를 찾기 위해 작성한 프로램입니다. 현재 디렉토리에 존재하는 소스코드를 읽어 32자 이상의 심볼을 찾은 경우 해당 라인을 라인번호와 함께 출력합니다.

file_array = Array.new

Dir.foreach(“.”) { |x|
  if x.include?(“.c”) or x.include?(“.h”) or x.include?(“.y”) or x.include?(“.l”)
    file_array.push(x)
  end
}

file_array.each { |fname|
  File.open(fname) { |fp|
    lineno = 1
    while line = fp.gets
        line.scan(/[1-9a-zA-Z_]+/) { |x|
          if x.length > 32
            puts “#{fname}:#{lineno}:+#{x.length – 32}:#{x}”
          end           
        }
        lineno = lineno + 1
    end
  }
}

2. 파일의 라인 뒤집기

매년 말 블로그에 독서 리스트를 정리할 때 사용하기 위해 작성한 프로그램입니다. 티스토리에서 목록을 뽑아 파일에 저장한 후 이를 뒤집어 독서 리스트를 읽은 순서대로 뽑아냅니다.

line_array = Array.new
File.open(“ReadingList.txt”) do |file|
    while line = file.gets
        line_array.push(line)
    end
end
ofile = File.new(“ReadingList.rev.txt”, “w”)
line_array.reverse!
cnt = 1
line_array.each do |reversed_line|
    ofile.puts(“#{cnt}. #{reversed_line}”)
    cnt = cnt + 1
end
ofile.close

3. 프로그램 수행 및 stderr, stdout 얻기

루비에서 다른 프로그램을 실행하고 stderr, stdout을 추출하는 예제 코드입니다. 루비를 사용하여 배치 스크립트를 작성 할 때 유용할 것 같네요.

require ‘session’

t=Thread.new do
  sh = Session.new
  sh.execute( ‘ruby /home/stefano/documenti/scripts/prova.rb’ ) do |out, err|
    puts “Msg: #{out}” if out
    puts “Err: #{err}” if err
  end
end
t.join

Slik SVN: 윈도우용 커맨드 라인 기반 SVN 클라이언트

요즘 회사들어와서 처음으로 제품 메뉴얼을 작성하고 있습니다. XML 형태로 작성되는 메뉴얼 파일은 SVN을 통해 형상관리 되고 있는데, 윈도우 비스타에 설치한 TortoiseSVN가 자꾸 commit 할때마다 죽어서 대안을 찾던 중에 Slik SVN이라는 것을 발견하게 되었습니다.


간단히 설치만 하면 윈도우 cmd에서 svn 관련 커맨드(svn, svnadmin, …)를 사용할 수 있습니다.

http://www.sliksvn.com/en/download

이런 복잡한 상황을 맞이할때마다 유닉스 기반의 Mac OSX가 그리워지는군요…

dlopen error: Bad magic number

dlopen()으로 shared object를  로딩하는 과정에서 에러가 발생하여 dlerror() 함수를 통해 에러의 원인을 확인해 보았습니다.

‘aaa.so’ is not a valid load module: Bad magic number

구글에서 에러 메세지를 이용해 검색하다가 해결의 실마리를 찾았습니다! file 명령어로 파일의 타입을 확인해 보니 executable과 shared library의 파일 타입이 다르더라구요.

$ file aaa.so
aaa.so:     ELF-64 shared object file – IA64
$ file a.out
a.out:     ELF-32 executable object file – IA64

stack에 동적으로 메모리 할당: alloca

C프로그래밍을 하다보면 memory leak에 대한 걱정 때문에 메모리를 동적으로 할당(malloc)하는 것이 부담스럽습니다.

만약 동적으로 할당한 메모리가 함수내에서만 사용된다면 함수 끝에서 free할 필요 없이 malloc 대신 alloca로 메모리를 할당해 사용하면 됩니다. alloca를 사용하면 activation record(stack)에 메모리가 할당되거든요.

NAME
       alloca – allocate memory that is automatically freed

SYNOPSIS
       #include <alloca.h>

       void *alloca(size_t size);

DESCRIPTION
       The  alloca() function allocates size bytes of space in the stack frame
       of the caller. This temporary space is automatically  freed  when  the
       function that called alloca() returns to its caller.