2014. 11. 4. 23:19 Scripts/Ruby

Welcome to ruby!


루비를 시작하시는 모든분들께 짧게 읽고 넘어가실 수 있는 슬라이드를 작성해보았습니다.
동적 타입 기반의 스크립트 언어를 아직 해보지 않으셨다면, 파이썬이나 루비! 기왕이면 루비를 추천해드립니다.
짧게 5분정도 소요되니 읽고 가셔요~


'Scripts > Ruby' 카테고리의 다른 글

Welcome to ruby!  (0) 2014.11.04
Ruby invalid byte sequence in UTF-8 (Argument Error)  (0) 2014.10.30
루비에서 쉘 명령을 내리는 방법  (0) 2014.06.03
루비 주석  (0) 2014.02.07
루비 변수 관련 정리  (0) 2013.05.14
Ruby가 모듈을 찾는 장소.  (0) 2013.05.09
Posted by 엘키 엘키
 TAG ruby, 루비

댓글을 달아 주세요

text file을 line별 parsing을 하고 split 하려던 중, 오류 발생.
-> ruby invalid byte sequence in utf 8
-> ruby도 encoding 문제에서 자유롭지 못함.
-> 사실 이건 모든 프로그래밍 언어의 문제...정확히는 윈도우와의 호환에서 생기는 문제.
-> 해당 문자열에 force_encoding("iso-8859-1").encoding("UTF-8")을 하니 처리 되기 시작.
-> 헌데, 읽혀진 문자열에 유효하지 않은 공백이 포함됨.

text 파일이 ANSI, utf-8은 정상적으로 읽힘. 헌데, unicode option의 text file만 안읽힘. (notepad encoding option중 utf-8, ANSI는 정상적이고, unicode에서만 문제가 생김)
-> 각종 encoding option 으로 해결 안됨.
-> line 별 encoding 을 시도.
-> 첫번째 라인만 encoding 됨. 두번째 라인부터 꼬임.
-> line별 encoding을 확인해보았더니, 두번째 라인부터는 CP949 (ascii code page 949)로 인식되는 것을 확인.
-> C++에서 binary로 읽어 메모리값 확인해보니 처음 2byte가 254,255로 들어가 있었음. 이 값이 인코딩 방식에 대한 기록 값이었던 것.
-> 파일 전체를 열고 버퍼 전체를 인코딩 해보았더니 정상적으로 읽힘.
-> 해결!


정리하자면,
IO.foreach('file.rb') do | line |
    line.encode!("UTF-8", "UTF-16le", :invalid => :replace, :undefined => :replace, replace: "")
end



위와같이 변환시에는 첫 라인만 제대로 변환되고 두번째 라인부터는 값이 망가지더군요.


그래서, 

lines = Array.new
fSize = aFile.stat.size
if aFile
	content = aFile.sysread(fSize)
	content.encode!("UTF-8", "UTF-16le", :invalid => :replace, :undefined => :replace, replace: "")
	lines = content.split(/(\n)/)
else
	puts 'Unable open file'
end




위와같이 파일에서 읽은 내용 전체를 한번에 변환시 잘 처리 되었습니다.


stackoverflow의 관련 글

http://stackoverflow.com/questions/14035307/ruby-invalid-byte-sequence-in-utf-8-argumenterror

http://stackoverflow.com/questions/11065962/ruby-split-invalid-byte-sequence-in-utf-8-argumenterror

http://stackoverflow.com/questions/24036821/ruby-2-0-0-stringmatch-argumenterror-invalid-byte-sequence-in-utf-8

'Scripts > Ruby' 카테고리의 다른 글

Welcome to ruby!  (0) 2014.11.04
Ruby invalid byte sequence in UTF-8 (Argument Error)  (0) 2014.10.30
루비에서 쉘 명령을 내리는 방법  (0) 2014.06.03
루비 주석  (0) 2014.02.07
루비 변수 관련 정리  (0) 2013.05.14
Ruby가 모듈을 찾는 장소.  (0) 2013.05.09
Posted by 엘키 엘키

댓글을 달아 주세요

루비로 쉘 명령 내리는 방법 6가지
http://eriteia.blogspot.kr/2008/01/6.html


원문

http://blog.bigbinary.com/2012/10/18/backtick-system-exec-in-ruby.html


루비로 쉘 명령을 내리는 6가지 방법에 대해 나와있습니다.


가장 선호되는 방식은 open4지만...

현재 win32로는 open3까지만 지원하니 참고하세요.


win32에서 현재로써는 stdio를 사용하기 위해선 open3를 쓰시는 것이 좋습니다.


간단하게 실행 성공 여부까지만 필요하다면, system 함수를 통하시는 것이 가장 좋고, 이 경우 주의사항은 exit code가 TrueClass로 반환된다는 점 입니다.


TrueClass가 to_i를 지원하지 않는 만큼 확장해주시거나 랩핑해주셔야하며, 또 다른 단점은 정확한 exit code를 알 수 없다는 점 참고하세요.

'Scripts > Ruby' 카테고리의 다른 글

Welcome to ruby!  (0) 2014.11.04
Ruby invalid byte sequence in UTF-8 (Argument Error)  (0) 2014.10.30
루비에서 쉘 명령을 내리는 방법  (0) 2014.06.03
루비 주석  (0) 2014.02.07
루비 변수 관련 정리  (0) 2013.05.14
Ruby가 모듈을 찾는 장소.  (0) 2013.05.09
Posted by 엘키 엘키

댓글을 달아 주세요

2014. 2. 7. 17:34 Scripts/Ruby

루비 주석

.rb

기본

# blah blah


블럭 (여러 줄)
=begin
    blah blah        
=end


 *.html.erb

html 형식이므로,<!--  -->를 사용해야 합니다

'Scripts > Ruby' 카테고리의 다른 글

Ruby invalid byte sequence in UTF-8 (Argument Error)  (0) 2014.10.30
루비에서 쉘 명령을 내리는 방법  (0) 2014.06.03
루비 주석  (0) 2014.02.07
루비 변수 관련 정리  (0) 2013.05.14
Ruby가 모듈을 찾는 장소.  (0) 2013.05.09
루비 작업을 몇일 해본 감흥  (0) 2013.03.01
Posted by 엘키 엘키

댓글을 달아 주세요


변수 접두어.

루비는 C언어등과 다르게, 접두어가 변수의 종류를 구분 짓는다.

아래는 변수를 구분 짓는 접두어를 의미한다.


내 네이밍 규칙에 따르면 모든 변수를 상수로 만드는데, 루비의 접두어 룰로 인해 나도 네이밍 습관을 루비에선 따로 쓸 수 밖에 없었다.


기호 의미

$ 전역 변수

@ 인스턴스 변수 

@@  클래스 멤버 변수

a-z_ 지역 변수

A-Z 상수



전역 변수

루비에서 미리 정의해두고, 스크립트 작성에 도움이 되게 지원하는 변수들입니다.

적절히 사용하시면 아주 유용합니다!


기호 의미

$! 마지막 에러 메시지

$@ 에러 위치

$_ 가장 최근에 gets로 읽은 문자열

$. 코드의 줄 번호

$& regexp로 마지막에 매칭된 문자열

$~ the last regexp match, as an array of subexpressions

$n n번째로 매칭된 문자열

$= case-insensitivity flag

$/ input record separator

$\ output record separator

$0 실행 프로그램 이름

$* 명령 행 인자들

$$ 프로세스 아이디

$? 최근 실행한 자식 프로세스의 종료 번호

ARGV[n] n 번째 명령 행 인자

$DEBUG 디버깅 메시지 -d를 키면 활성화

$stderr 표준에러

$stdin 표준입력

$stdout 표준출력

$: 스크립트가 로드한 모듈 이름들

ENV    스템 환경 변수를 저장하고 있는 해쉬. 환경 변수 값을 변경할 수 있으며, 변경사항은 해당 프로세스 와 자식 프로세스에만 반영된다.

'Scripts > Ruby' 카테고리의 다른 글

루비에서 쉘 명령을 내리는 방법  (0) 2014.06.03
루비 주석  (0) 2014.02.07
루비 변수 관련 정리  (0) 2013.05.14
Ruby가 모듈을 찾는 장소.  (0) 2013.05.09
루비 작업을 몇일 해본 감흥  (0) 2013.03.01
Ruby  (0) 2009.01.20
Posted by 엘키 엘키

댓글을 달아 주세요

Ruby에서 load나 require시에 참조하는 폴더는 다음과 같습니다.


쉘 현재 경로

RUBYLIB 환경 변수 경로


이 경로를 알고 싶을땐 아래와 같은 구문으로도 가능합니다.

% ruby -e 'puts $:'


이 경로가 아닌 다른 경로를 지정하기 위해서는, -I 경로 (대문자 I입니다)를 지정하거나, RUBYLIB 환경 변수에 추가해주시면됩니다.


예를 들어,


ruby Util/StartServers.rb filename


라는 구문이 있을때, -I 구문이 없다면 rb파일이 참조하고 있는 다른 파일들은 제대로 로드 되지 못합니다.


load 'XML_Util.rb'

load 'ShellExecute_Util.rb'

load 'ServerConstants.rb'


이 load 구문들에서 XML_Util.rb을 찾지 못해, 오류를 발생하는 것이죠.


그래서, 


ruby -I Util Util/StartServers.rb filename

이렇게 모듈 검색 경로를 설정해, 해당 모듈들의 위치를 지정함으로써, 해결 가능합니다.


단순한 문제지만, 구글링으로 원하는 답변을 찾다가, 프로그래밍 루비 (곡괭이책)에서 원하는 답변을 찾게되 올립니다. 저처럼 헷갈리신분 참고하세요~.

'Scripts > Ruby' 카테고리의 다른 글

루비 주석  (0) 2014.02.07
루비 변수 관련 정리  (0) 2013.05.14
Ruby가 모듈을 찾는 장소.  (0) 2013.05.09
루비 작업을 몇일 해본 감흥  (0) 2013.03.01
Ruby  (0) 2009.01.20
IronRuby  (0) 2009.01.15
Posted by 엘키 엘키

댓글을 달아 주세요

최근 업무 관련해서 루비를 쓰게 됐다.
2007년에 루비를 잠깐 했었으나 숫자 야구 만들었던 게 다였고, 거의 6년만에 다시 해본 루비에 대한 감상을 정리한다.

우선 과거에 사용했던 시기를 떠올려본 루비에 대한 감상을 먼저 나열해보겠다.
- 스크립트 디버깅이 힘들다. IronRuby로 쓰면 좀 낫다.
- C와의 연동은 준수한편.
- 문자열 다루기 쉽다. 아주!
- 그렇지만 역시나 trim, chop 같은 메소드를 통해 문자열을 섬세하게 다뤄줘야 함은 여전함.



이번에 새로 루비를 쓰기 전까지 주로 써온 스크립트로는 batch script, jscript (java script의 윈도우 내장 스크립트), 펄, 루아 였다.


이번에 루비를 써보고 느낀 건 역시 쉬운 편이라는 점이었다.

파일 오픈
file = File.open(ARGV[0], "r+")

파일 라인 단위 파싱
file.each_line do | line |
blah blah
end

라인 공백 단위 파싱
ip, port, servername, gsid = line.split(/ /)

이렇게나 파일과 문자열을 파싱 할 수 있다.

JScript가 C++이나 Java와 유사한 문법과 심지어 API 사용 마저 얼추 C++과 비슷하다는 장점(?)이 있다보니, 루비를 접하면서 C계열 보다는 펄 쪽에 좀 더 가깝지 않나 싶은 생각이 들었다. (파이썬은 안써봄.)

펄이 문자열 다루기에 강자인 반면, 코드 가독성을 있는 대로 떨굴 수 있다는 단점이 있었던 데에 비해, 루비는 간결함을 모토로 가독성 좋은 코드를 짧게 짜는 데에 장점이 있었다.

물론 복잡하게 짤라면 짤 수 있음은 여타 언어와 흡사하나, 의지(!)를 가졌을 때 간결하게 짜기에 적절하게 라이브러리도 필요한 기능 대다수가 기본 지원이었고, 준수했다.

위에 예제들 중에서 가장 맘에 들었던 것이 라인 공백 단위 파싱해서 적절한 변수에 담는 코드였다.

메타 데이터를 쉽게 읽고 처리할 수 있다는 점은 JScript, Batch Script 등처럼 쉽게 프로그램 사이의 연동 스크립트로써 사용할 수 있다는 의미이고, 루비 자체의 기능도 함께 사용하면 어지간한 기능은 구현 가능하다는 의미다.

이외에 든 생각은 아래와 같다.
- 루비가 쉽긴 하지만, 그렇다고 학습비용이 안들진 않는다.
- 느리다. 확실히 느림.

- 코딩이 유연하다지만, 실수는 여지없이 스크립트 오류를 발생 시키기에 논리적인 빈틈을 줄이는 노력은 다른언어와 다를 바 없다.

얼마나 많은 일을 할 수 있냐보다, 얼마나 짧은 시간에 직관적인 코드로 결과물을 만들어 낼 수 있느냐의 관점에서 봤을 때 분명히 루비는 좋은 언어라는 생각이 든다.


루비 온 레일즈도 어느정도 공부 해볼 생각이다. 루비에 좀 더 익숙해졌을 때의 감상이 지금과 같을지 궁금하니... 좀 더 써보고 다시 포스팅하겠음.

'Scripts > Ruby' 카테고리의 다른 글

루비 주석  (0) 2014.02.07
루비 변수 관련 정리  (0) 2013.05.14
Ruby가 모듈을 찾는 장소.  (0) 2013.05.09
루비 작업을 몇일 해본 감흥  (0) 2013.03.01
Ruby  (0) 2009.01.20
IronRuby  (0) 2009.01.15
Posted by 엘키 엘키

댓글을 달아 주세요

2009. 1. 20. 10:35 Scripts/Ruby

Ruby



Ruby(이하 루비)는 일본에서 개발된 프로그래밍 언어로, Perl의 자유로운 표현력과 모호함에서, 모호함을 제거하고 객체 지향적인 개념을 도입한 언어입니다.

윈도우와 연동되어 Win32Api를 사용하실 수 있고, Tk, C언어와의 연동 등 다양한 방법으로 활용 가능합니다.

속도상의 문제를 안고 있지만, 게임에서도 스크립트 언어로 채용되기도 했었고, Ruby on Rails나, IronRuby 등 Ruby를 활용한 사례가 늘고 있는 언어입니다.

오픈 소스 프로젝트이므로 직접 빌드해서 사용하실 수도 있고, 루비를 직접 분석할 의향이 없으신 분들은 배포용 릴리즈 버전만 다운 받아도 사용 가능합니다.

루비 공식 홈페이지
http://www.ruby-lang.org/ko/

Try Ruby
http://tryruby.hobix.com/

루비 20분 가이드
http://www.ruby-lang.org/ko/documentation/quickstart/

루비 강좌
http://synch3d.com/wiki/moin/moin.cgi/_c7_c1_b7_ce_b1_d7_b7_a1_b9_d6_20_b7_e7_ba_f1

'Scripts > Ruby' 카테고리의 다른 글

루비 주석  (0) 2014.02.07
루비 변수 관련 정리  (0) 2013.05.14
Ruby가 모듈을 찾는 장소.  (0) 2013.05.09
루비 작업을 몇일 해본 감흥  (0) 2013.03.01
Ruby  (0) 2009.01.20
IronRuby  (0) 2009.01.15
Posted by 엘키 엘키
 TAG ruby, 루비

댓글을 달아 주세요

이전버튼 1 2 이전버튼

블로그 이미지
Software Engineer
엘키

공지사항

Yesterday31
Today29
Total1,605,483

달력

 « |  » 2020.8
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

글 보관함