ruby

Crystal-Lang is ❤️

저는 최근에 Crystal-lang을 즐기고 있습니다. 간단한 토이 프로젝트부터 Noir란 사이즈가 점점 커지고 있는 프로젝트까지 Crystal을 통해 구현하고 있습니다. 오늘은 제가 Crystal을 좋아하게된 이유에 대해 이야기하려고 합니다. What is Crystal? 먼저 Crystal에 대해 가볍게 정리하고 시작...

Homebrew로 패키지 제공하기 🍺

제가 만든 도구는 대부분 Homebrew, Binary, RubyGem, Snapcraft 등을 통해 배포합니다. 특히 macOS의 경우 Homebrew를 통한 설치 비중이 엄청 높기 떄문에 Go 기반 앱들은 가급적이면 Homebrew를 지원하려고 하고 있습니다. 그리고 이러한 대부분의 작업은 Goreleaser란 도구를 통...

Broken link를 찾자! DeadFinder

최근에 Broken Link(Dead Link)를 쉽게 찾기 위한 도구를 하나 만들었습니다. 제 블로그의 Broken Link를 찾기 위한 목적이였지만, 가볍게라도 한번 공유하는게 좋을 것 같아서 블로그 글로 작성해봅니다. DeadFinder 입니다 :D Broken Link Broken Link는 Dead Link ...

Rake(Ruby Make)

Rake는 Ruby에서 사용되는 build utility로 Make유사합니다. rake란 이름 또한 ruby + make 에서 만들어진 단어로 일반적인 Ruby application과 Rails 등 여러가지 환경에서 개발 도구로써 사용됩니다. A make-like build utility for Ruby. 오늘은 ...

Ruby Concurrency

매번 어플리케이션을 만들 때면 동시성에 대한 고민을 하지 않을 수가 없습니다. 기능적인 구현에 직접 필요한 경우도 있고 퍼포먼스를 결정 지을 수 있는 요소이기 때문에 중요하다고 생각합니다. 개인적으로 대학생 때 여러가지 패턴을 배우고 프로젝트에 적용했었지만 현업 이후 부턴 보안 엔지니어링이 메인 Job이다 보니 실질적으론 ...

Hugo에서 Sitemap-index 사용하기(split sitemap)

sitemap.xml sitemap.xml은 Sitemap protocol을 위한 XML schema로 웹 서비스가 포함하고 있는 링크들을 사용자에게 제공하기 위한 목적으로 구성되는 파일입니다. 아래와 같은 구조를 가지며, 사용자나 검색 봇 등은 이 파일을 참조하여 웹 페이지를 수집합니다. <?xml version="...

Jekyll에서 Hugo로 이사가기 (Migration log)

jekyll… 제가 예전에는 rubyist(ruby 사용자) 였습니다. 그러다가 2018~19년 쯤에 gopher(golang 사용자)가 되었고 이후부턴 만들고 있는 대다수의 도구는 golang 기반으로 만듭니다. golang을 사용해도 ruby 자체를 오래 써왔던지라, 그래도 조금이나마 편하려고 jekyll을 선택했었는데...

Ruby와 Google Indexing API를 이용하여 자동으로 신규URL 등록하기

제가 블로그 글을 작성하고 commit - push 시 많은 작업들이 일어납니다. 대표적인 것들을 이야기 드리면, Jekyll build 및 deploy 과정이 진행되고 이미지 중 compress가 필요한 이미지는 compress 처리하여 용량을 줄이고, notify 등 여러가지 과정들이 github action에 녹아있습니...

rvm is not a function 에러 해결하기

Problem 저는 보통 글을 작성할 떄 맥북에서 진행합니다. 그래서 홈 서버에서는 직접 글을 작성할 일이 별로 없었는데, 디자인 좀 수정하기 위해서 서버에서 직접 작업하다 보니 jekyll serve 시 ruby 버전 관련 에러가 있었습니다. 요약하면 github pages gem은 2.x 버전만 지원하는데, 시스템 버전이...

Rails mimemagic 0.3.5 could not be found 에러 해결, 그 이면

Error 지난주 Rails 앱에 수정할게 있어서 작업을 진행했었는데, 아래와 같은 에러를 겪었습니다 😭 Your bundle is locked to mimemagic (0.3.5), but that version could not be found in any of the sources listed in your Gemfi...

Rails generate 시 멈추는 경우 해결 방법

제가 2019년부터 go를 메인언어로 확정하면서 ruby로 개발할 일이 매우 줄어들었습니다. 그래도 가끔씩 빠르게 작업이 필요한 경우 ruby를 의도하지 않게 사용하는데, 간혹 rails g, rails generate 시 멈추는 상황이 있습니다. 그럼 원인과 해결 방법에 대해 글 작성해봅니다 :D Solution rail...

Jekyll feed.xml 최소화하기

RSS는 매우 오래된 기술이지만, 아직까지도 많은 웹 서비스에서 지원하고 사용되는 기술입니다. 일반 사용자가 리더를 통해 쉽게 글 목록을 받아서 읽을 수 있고, SEO 관점에서도 상당히 중요한 부분입니다. 다만 간혹 이를 이용해서 자동으로 본문을 퍼나르는 비도덕적인 서비스가 있기 마련입니다. (평소라면 별로 신경 안썼지만,...

Check logic vulnerability point using GET/HEAD in Ruby on Rails

최근에 Github OAuth flow bypass 취약점이 공개되었습니다. 이 취약점은 Rails 앱의 특성을 이용한 취약점이고, Github만의 문제가 아니고 패치로 모든 Rails 앱을 보호할 수도 없습니다. Today, I going to review one vulnerability that needs to be ch...

Rails에서 HTTP Basic Auth 적용하기

HTTP Basic Auth는 HTTP에서 기본적으로 사용되는 인증 방식입니다. ID/PW를 Base64로 인코딩해서 Auth 헤더에 넣어 서버가 신뢰된 사용자인지 검증하는 방식으로 동작합니다. 물론 http 환경, MITM이 가능한 상태의 환경에선 굉장히 위험할 수 있는 방식이지만, 별다른 걱정 없이 쉽게 인증을 적용할 ...

HTTP Request(ZAP, Burp) Parsing on Ruby code

XSpear 관련해서 이런 건의사항이 하나 있었습니다. Burp, ZAP 등에서 사용하는 패킷 데이터를 파일로 저장한 후 옵션을 주어 읽으면 자동으로 URL, Header 등을 파싱해서 사용하는 형태를 말씀하신 것 같습니다.(마치 sqlmap의 그것 처럼) 간단하게 처리를 위한 로직 작성해서 블로그 글로 남겨둡니다. 실제로...

Displaying cli base table at ruby application on terminal

I Simply write it (for note). It is easy to develop using terminal-table. How to Install? gem install terminal-table on Code You can set the header or size using options of the ...

Ruby on Rails Double-Tap 취약점(CVE-2019-5418, CVE-2019-5420)

간만에 취약점 리뷰해봅니다. 올 봄에 정리한번하고 최근에 추가로 정리했던거라 머리속에서 날아가기 전에 블로그 글로 남겨보아요. 우선 올 해 3월 정도에 레일즈 관련 취약점이 3개정도 올라왔었습니다. CVE-2019-5418 ~ 5420 이슈인데, 결과적으론 Rails에서 시스템 파일을 읽고, 명령 실행까지 가능한 3가지였습니...

Rails에서 routing parameters와 동일한 이름의 파라미터 처리하기

Rails에서 파라미터 값은 params를 통해 받아옵니다. 이 과정 중 레일즈에서 기본으로 설정한 값이 있어 읽어오지 못하는 경우가 있습니다. 바로 이런 케이스입니다. Request GET /testzzz HTTP/1.1 ..blahblah... {"supersecretdata":"no","action":{"params...

How to resolve duplicate mail transmission in Rails ActionMailer(중복 메일 전송 해결 방법)

Rails에서 ActionMailer를 이용하면 쉽게 메일 송/수신 로직을 처리할 수 있습니다. 그래서 ActionMailer로 여러가지 구성해서 사용하고 있는데, 특정 어플리케이션에서 메일이 중복으로 발송되는 이슈가 있었는데요, 찾아보니 정확한 이유는 모르겠지만 자체적인 버그로 보입니다. (중복 콜이 일어나는 것 같은데…)...

Send Gmail using Rails ActionMailer Class (ActionMailer를 이용하여 Gmail 전송하기)

Rails는 기본적으로 Mail 송/수신이 가능한 객체를 가지고 있습니다. 보통 웹에서 많이 사용하는 기능이기 때문에 미리 구현되어 있는 상태인데요, 라이브러리 의존성이나 복잡한 설정 없이 간단한 코드로 메일 처리가 가능합니다. 오늘은 Rails의 기본 객체인 ActionMailer를 이용하여 Gmail의 메일 송신하는 방...

Rails App 시작 시 특정 코드 실행하기(How to startup code on Ruby on Rails with initialize)

Rails 앱 구동 시 특정 작업이나 로직을 수행하고 싶을 때 어떻게 할까? 고민을 예전에 했었는데, 그때 initialize로 해결했던 기억이 있습니다. 간만에 동일한 고민을 잠깐하게 됬었는데, 겸사겸사 글로 정리해둡니다. 요약하자면 application.rb 에서 config.after_initialize로 Rails ...

Rails crono를 이용하여 스케줄링하기(Scheduling with crono on Rails)

보통 유닉스 기반 PC에선 스케줄링을 위해 crontab 또는 at를 사용하고, 윈도우에선 서비스에 등록하는식으로 사용합니다. 이를 위해선 시스템에서 crontab 같은 도구 사용이 가능해야하며, PaaS 이상의 추상화가 이루어진 플랫폼에선 사용하기 어려운 경우가 대다수입니다. 오늘은 Rails에서 crono를 이용해서 A...

Rails에서 kaminari를 이용하여 Pagination 구현하기(How to make pagination on rails(with kaminari)

Rails에서 페이지(Pagination)를 쉽게 구현할 수 있는 라이브러리는 kaminari, will_paginate 등이 있습니다. 그중에서 오늘은 kaminari를 가지고 페이지를 만드는 내용으로 글 작성해봅니다. A Scope & Engine based, clean, powerful, customizable...

Rails에서 SuckerPunch를 이용하여 비동기 작업 처리하기

Rails 구동중에 쓰레드 처리 시 아래처럼 원래 루비 구문인 Thread로 처리할 수 있습니다. Thread.new do Rails.application.executor.wrap do system('ping -c 5 127.0.0.1') result = Net::HTTP.get(URI.parse("htt...

루비에서 string-similarity로 문자열 퍼센트로 비교하기(Comparing string-similarity percent in Ruby)

한 두달? 정도전에 루비 라이브러리중에 괜찮은거 하나 봐둔게 있었느데, 이제서야 글로 작성하네요. 문자열 비교 라이브러리인데, 매칭률을 퍼센트로 뽑을 수 있습니다. 활용처가 많을듯하여 메모해둡니다. Install gem install string-similarity Code require 'string/simi...

[ Rails on Heroku ] 자주 사용하는 heroku 명령어 정리

[ Rails on Heroku ] 자주 사용하는 heroku 명령어 정리 (https://www.hahwul.com/2019/04/what-is-heroku.html) [ Rails on Heroku ] 간단한 루비 레일즈 앱 구성 및 Heroku에 배포하기 (https://www.hahwul.com/2019/04/rub...

[ Rails on Heroku ] 간단한 루비 레일즈 앱 구성 및 Heroku에 배포하기

[ Rails on Heroku ] 자주 사용하는 heroku 명령어 정리 (https://www.hahwul.com/2019/04/what-is-heroku.html) [ Rails on Heroku ] 간단한 루비 레일즈 앱 구성 및 Heroku에 배포하기 (https://www.hahwul.com/2019/04/rub...

[ Rails on Heroku ] Heroku란? 빠르게 환경 구성하기

[ Rails on Heroku ] 자주 사용하는 heroku 명령어 정리 (https://www.hahwul.com/2019/04/what-is-heroku.html) [ Rails on Heroku ] 간단한 루비 레일즈 앱 구성 및 Heroku에 배포하기 (https://www.hahwul.com/2019/04/rub...

Rails app에서 public 하위 파일을 읽어오지 못할 때(Rails not serving static files in public dir)

Rails App내 /public은 레일즈 동작과 별개로 static 한 html,css,js 등을 표현할 수 있는 디렉토리입니다. 저는 보통 static 한 테스트 코드들을 여기다가 올려두고 쓰는데, 어느날부터인가 public 하위에 있는 파일들이 정상적으로 로드되지 않았습니다.. (이 시점이 아마 command line...

Task manager app with Ruby on Rails(할일 관리 도구 만들기)

할일 관리 도구? 가 필요해서 뭐 쓸까 고민하다 걍 rails로 만들고 있는데, 별건 아니지만 그냥 글로 남겨둡니다. https://gph.is/XGFOUK Rails Setup 최근에 Vim => Rubymine 으로 개발 환경 변...

IntelliJ(RubyMine) 에디터 수정이 불편한 문제(IdeaVim Plugin)

새해 첫 포스팅은 가볍게 트러블슈팅으로 시작해봅니다. (연초인데 왜이리 정신없을까아…) 원래 골수 vim 유저인데, RubyMine으로 개발 IDE 잡으려고 세팅하는 중입니다. 그런데 갑자기 입력이 매우 불편한(?) 이슈가 있었습니다. https://me...

Ruby gem 만들기(Make ruby gem)

요즘 좀 정신없이 지내다보니 벌써 10월이네요.. 써놓은 글도 마침 없는 상태인지라 이번에도 간략한 글 작성할까 합니다. (아 10월의 첫글이 메모글이라니…) 많은 ruby application 들이 단순히 코드를 clone 해서 쓰는 형태보단 gem으로 패키징하여 배포하고 사용하는 형태를 가집니다. 오늘은 ruby gem...

Ruby IDB(iOS App 보안분석 도구) Select App 시 죽는 현상 해결 방법(iOS10, Error downloading file)

예전에 idb라는 iOS 분석도구를 공유드린적이 있습니다. 최근에 테스트 시 Select App 시 앱 리스트를 가져오는 과정에서 죽는 현상이 있었느데요, 예전에 가까운곳에서 동일한 문제가 있었고 해결방법 공유해주셨던게 기억나서 저 또한 쉽게 해결헀네요. iOS 10 이상의 디바이스에서 사용 시 발생하는 에러이고 겸사겸사 ...

Arachni 코드단에서 JSON Method 사용하기 (undefined method `parse' for Arachni::Element::JSON:Class 해결)

arachni 코드 수정 중 json 사용이 불가능한 경우가 있었습니다. [ Code ] require ‘json' JSON.parse(data) [ Error ] undefined method `parse' for Arachni::Element::JSON:Class JSON은 json library에 모듈로 정...

Ruby에서 Cookie 값을 JSON 포맷으로 변환하기(Cookie format to JSON with hash!)

테스트하던 코드 생각나서 정리해둡니다. Ruby에서 Cookie format의 데이터를 JSON으로 변환하기 위해선 hash를 이용해서 간단하게 만들 수 있습니다. require 'json' def cookie_to_json cookie # cookie 데이터를 hash로 만들기 위한 hash 객체 하나를 만들어줍니다...

JRuby Burp suite 확장 기능 개발 중 발생한 에러(failed to coerce [Lburp.IHttpRequestResponse; to burp.IHttpRequestResponse)

글 좀 쓰고 자려했는데, 잡다한 일이 꼬여.. 글은 패스하고 간단하게 메모 하나만 작성해둡니다. 어제 Burp 확장 기능을 만들던 중 이상한 에러를 하나 만났는데, 아래와 같습니다. failed to coerce [Lburp.IHttpRequestResponse; to burp.IHttpRequestResponse 코...

Crystal - Ruby와 비슷하며 빠른 프로그래밍 언어

올 초쯤에 Crystal이란 언어에 대해 잠깐 이야기들은적이 있습니다. Ruby 문법과 유사하다는 것만 듣고 드디어 조금 더 살펴봤네요. 아직 정식 릴리즈도 아닌 상태이니 어떤 언어인지 정도만 정리해둘까 합니다. Crystal? Crystal은 루비 문법 스타일과 유사한 형태를 가지며 Static typing &...

tracer을 이용한 ruby code tracing(코드 흐름 분석)

루비 코드 분석을 하던 중 흐름 추적(?), code tracing을 하기 위해 알아보다가 찾은 라이브러리 공유드립니다. 새로운 툴은 언제나 환영이야! / The world could always use more tool. tracer 라...

Rubocop auto correct를 이용하여 쉽게 코드 스타일 따라가기

최근에 루비 프로그래밍 스타일 가이드 관련해서 글을 하나 작성했었는데요, 이어서 그떄 잠깐 소개드렸던 rubocop을 이용해서 코드를 교정하는 과정에 대해 잠깐 이야기할까 합니다. auto correct in rubocop 지난번에 rubocop 사용 관련해서 지금 틈내서 개발중인 recon-raven 쪽 코드로 돌려봤는데...

Ruby Limit to number of thread in loop(반복문에서 제한된 갯수의 쓰레드 돌리기)

보통 쓰레드는 개별단위의 처리 수행이나 고 성능의 작업(요청을 엄청나게 전송한다는 둥, 빠른 계산이 필요한다는 둥)이 필요할 때 동일한 코드로 공유되는 자원을 할당받으며 처리하는 식으로 많이 구성하게 됩니다. thread를 관리하는 manager를 하나 만들고 각각 업무 큐에서 할당해주는 식으로 구현하면 좋지만, 단순하게 ...

Ruby Style Guide와 Rubocop

오늘은 루비 개발 관련해서 좋은 가이드가 있어 공유드릴까 합니다. 정말 정리가 잘 되어있습니다. 천천히 내용 읽어보면서 고쳐야할 습관들이 많이 보이네요. https://github.com/dalzony/ruby-style-guide/blob/master/README-koKR.md 대표적인 것 몇가지 보면 탭은 들여...

Ruby on Rails(ROR) 에서 SAML IdP(Identity Provider) 구현하기(SSO)

최근에 뜻밖에 SAML 관련 공부를 하고 있는지라, 몇가지 내용 메모/공유할겸 포스팅 작성해봅니다. 오늘은 Ruby on Rails에서 SAML IdP(Identity Provider)를 구성하는 방법에 대해 이야기할까 합니다. SAML(Security Assertion Markup Language)? sso 인증 방식에...

inquirer 라이브러리를 이용한 커맨드라인 기반 체크박스 만들기(Ruby/Python)

recon-raven 개발 중 커맨드라인 기반 체크박스(모듈같은거 고를 수 있도록..) 구성해보면 어떨까 해서 학생때 커맨드라인 기반 게임 만든 기억을 더듬으며 직접 만들다가 좋은 라이브러리를 찾아 쉽게 해결하였습니다. 오늘은 이를 쉽게 가능하게 해준 inquirer 라이브러리에 대해 이야기할까 합니다. inquire...

Ruby에서 Exception 처리( begin-rescue-else-ensure-end )

벌써 7월이네요.. 오늘은 매번 코드 작성할때마다 귀찮지만, 뺴먹을 수 없는 중요한 친구에 Exception, 즉 예외처리에 이야기할까 합니다. 거의 정리 차원에서 간단하게 쓰는거니 빠르게 시작하죠. begin-rescue-else-ensure-end 루비에서 Exception 처리는 begin-rescue-else-en...

ZAP Scripting으로 Code Generator 구현하기

ZAProxy와 Burp를 혼용해 쓰면서 불편한 점들을 찾고, 고쳐가고 있습니다. 오늘은 그 중 Code genertor에 대한 이야기를 할까 합니다. Code Generator? 이름 그래도 코드를 생성해주는 기능입니다. 자주 애용하던 기능이라 불편함이 바로 찾아왔는데요, 바로 Code generator 입니다. Burp...

JRuby로 Ruby와 Java 동시에 사용하기

개인적으로 BurpSuite의 Extender를 만들 때 Java를 사용했습니다. 당연히 Burp가 Java base이고, API 등의 사용성 때문에 Java로 개발하는 것이 일반적인데요, 오늘은 Jruby를 이용하여 Ruby와 Java를 혼용하여 사용하는 방법에 대해 이야기하려고 합니다. Jruby JRuby는 JVM 기...

Rails의 라우팅과 constraints를 이용하여 IP기반 ACL 만들기

Rails Application에서 접근제어를 하는 방법은 여러가지가 있습니다. 예전에 포스팅하기도 헀고, 튜토리얼에서도 기본적으로 이야기되는 HTTP Auth를 이용한 인증방식 부터 세션, 로그인 기반 인증까지 여러가지 형태로 구현이 가능하죠. 오늘은 가장 기본적인 접근제어인 IP 기반 ACL에 대한 이야기를 할까 합니다....

Rails development 환경에서 error 정보 줄이기

rails application은 기본적으로 application 실행 시 development, test, production와 같이 실행 환경을 지정할 수 있습니다. 각각 실행 환경별로 디버그, 에러 처리 여부 등 환경과 처리 방식에 대해 결정할 수 있습니다. 기본적으로 rails s 를 통해 앱을 실행하게 되면 dev...

Ruby language에서의 Symbol(심볼)이란?

언어 자체에 대한 글을 쓰는건 굉장히 오랜만인 것 같습니다. 오늘은 루비의 심볼에 대한 이야기를 하려합니다. 루비러라면 잘 아시겠지만, 루비는 모든것이 객체입니다. 그래서 일반적으로 객체라고 생각되지 않는 것들(문자열, 상수 등등) 또한 모두 객체입니다. (다른 언어도 비슷비슷하죠) 객체를 사용하기 위해서는 각 객체의 i...

MITM Proxy server in Ruby (evil-proxy와 rails를 이용한 WASE 트래픽 수집 구간 만들기)

WASE를 만들면서 MITM Proxy로 트래픽을 수집하는 서버를 만들었는데요, 이 과정에서 알아봤던거랑 기반(?)이 되었던 심플한 저의 코드 관련해서 글 작성합니다. 아 추가로.. WASE 만드는 프로젝트(?)는 전체적인 구조를 좀 많이 변경했습니다. 혹시라도 좋은 성과가 있다면.. 공유드리도록 할게요. (물론 리밋) ...

Ruby on Rails - submodel, subclass or subcontroller 만들기(references type)

우선 기준이 스케폴드로 CRUD 모델을 하나 만들어줍니다. #> rails new log #> cd log #> rails g scaffold rule name:string desc:text 이 모델 아래 복수의 데이터를 가지는 모델을 만들어봅시다. 하위에 포함될 모델 만들기, 라우팅 설정 #>...

PostgreSQL FATAL: Peer authentication failed for user Error 해결하기

rails의 db를 postgresql로 바꾸고 하는중에 이런 에러가 발생했습니다. root@cherry:/home/cherry/cherry_web# rake db:setup FATAL: Peer authentication failed for user "cherry-web" /usr/lib/ruby/vendor_ruby/...

website capture를 위한 ruby gem (feat PhantomJS)

이번 주말엔 딱히 쓸 글이 없네요.. (시간이 ㅜㅜ) 간략하게 ruby library를 이용한 웹 페이지 캡쳐 관련해서 글 작성해봅니다. 어제 저녁쯤에 필요에 의해 몇가지 스크립트를 짜던 중 웹 페이지를 캡쳐할 일이 있었는데요, ruby library 로 뭐뭐가 있나 찾아봤더니 몇가지가 있더군요 . webshot req...

[HACKING] Bug Bounty를 위한 WASE(Web Audit Search Engine) 만들기 [2] - Burp suite와 Elastic search 연동하기

우선 burp bapps에 올라와 있는 extension 으로는 2가지가 있습니다. elastic burp와 report to elastic 입니다. Burp extension for elastic search 1. Elastic Burp Burp suite를 거쳐가는 데이터에 대해 ES로 데이터를 누적합니다. https...

[HACKING] Bug Bounty를 위한 WASE(Web Audit Search Engine) 만들기 [1] - Elastic search와 ruby-rails

요즘들어 버그바운티에 대한 생각이 조금 깊어졌습니다. 일을 하는 것 이외에도 무언가 가치를 만들 수 있겠다라는 생각 때문이죠. (그냥 돈을 더 벌고싶다고 그래 =_=) 그러나 안타깝게도 시간은 항상 제한적이고, 저의 시간은 매우 모자랍니다. 그래서.. VAHA(http://vaha.hahwul.com )에 이어 버그바운티를...

[ROR] Ruby on Rails "cannot load such file -- [package]" 해결 방법

왜그런진 잘 모르겠지만 오늘 업데이트 이후에 rails 서버 시작 시 에러가 발생합니다. 내용을 보자니.. mime/types를 찾을 수 없다고 하네요. #> rails s => Booting Thin => Rails 4.2.9 application starting in development on http...

[RUBY] nokogiri install/update 에러 해결하기(An error occurred while installing nokogiri (1.8.2), and Bundler cannot continue.)

간만에 레일즈 떔에 루비 가지고 놀던 중 nokogiri가 고장났습니다. (대체로 부팅과 함께 패키지 업데이트를 하는데, 그게 문제였죠..) Using debug_inspector 0.0.3 Using i18n 0.9.3 Using tzinfo 1.2.5 The latest bundler is 1.16.1, but you ...

Vim에서의 개발을 위한 최소한의 plugin 설정

매번 느끼지만 글로 작성하지 않은 내용들은 나중에 다시 세팅하거나, 참고해야할 때 참 불편합니다. 꼭 필요할 때 보면 없다죠. 최근에도 vim 세팅을 다시 할일이 있어 하나하나 세팅하고 있는데, 한번쯤은 메모해두면 두고두고 볼 것 같다라는 생각이 들었습니다. 짧게나마 시간 내어서 글 작성해봅니다. plugin 관리자 apt...

[RUBY] 클립보드에 데이터를 복사하자! clipboard gem

예전에 python의 tkinter 라이브러리를 이용해서 clipboard 제어하고 간단한 프로그램 만드는 이야기를 했었습니다. (http://www.hahwul.com/2016/06/python-tkinter-module-clipboard.html ) 간만에 그 글을 보다보니.. 그때 참 불편하게 만들었더라구요. 니즈도 ...

Rails에서 DB Column 추가하기

rails는 database schema 등을 migration 파일로 관리합니다. 이를 이용하면 이미 만들어진 앱에서 DB Schema를 변경하거나 쉽게 Rollback할 수 있습니다. rails g migration add_<column>_to_<table>:string 이후에 코드에 따라 Mo...

RUBY에서 RQRCode를 이용하여 QR코드 생성하기

오늘은 RQRCode에 대해 작성할까 합니다. RQRCode는 Ruby에서 QR코드를 다룰 수 있는 라이브러리입니다. 간단한 코드로 쉽게 QR코드 생성이 가능하기 떄문에 QR코드 관련 서비스나 Rails 내 QR 코드 사용 등 여러가지 방면으로 활용할 수 있겠네요. 먼저 gem을 통해 설치합니다. gem install ...

[RUBY] Cuntom column sort function on Two-dimensional array

루비로 코딩하던 중 귀찮은 일이 있었습니다. 바로 array에 대한 정렬 중 2차원 이상 배열에서는 제가 지정한 열을 기준으로 정렬할 수 있는 함수가 없던것입니다.. 대체로 sort 메소드를 이용하여 정렬을 합니다. 2차원 배열에 대해 sort 메소드를 사용하면 array는 맨 앞 열을 기준으로 정렬합니다. 간단한 예시를 ...

Ruby nokogiri를 이용한 Web Spider 만들기

지난 포스팅에선 nokogiri를 이용한 parsing 을 했다면 이번에는 조금 더 발전 시켜서 간단한 Spider를 만들어볼까 합니다. 물론 훨씬 좋은 라이브러리들이 있지만 가장 기본이되는 nokogiri를 잘 안다면 많은 도움이 있을 수 있겠지요. Web Spider 물론 아시고 들어오셨겠지만, Web Spider 대한...

Ruby Nokogiri를 이용한 Web Parsing

웹 서비스를 탐색하는 도구들을 만들다 보면 많이 접하게 되는 작업이 하나 있습니다. 바로 HTML, XML 등 구조화된 문서를 파싱하는 작업인데요. 오늘은 Ruby의 강력한 파싱 라이브러리인 Nokogiri에 대해 이야기할가 합니다. Web Parsing Web Parsing이란 웹 페이지의 Response를 분석하여 Ob...

[RUBY] 루비에서 Process/command 실행하기(Execute Process and command)

C언어부터 ruby, python 등등 여러가지 언어 중 하나라도 해보셨다면 정말 반가운 함수가 있습니다. 바로 system() 함수(C언어 기준)인데요, 이 함수를 통해 시스템에 명령을 내리거나 새로운 프로세스를 생성할 수 있는 함수이지요. 이 함수로 많은 노가다 작업이 줄게되지요. 오늘은 Ruby에서 system()과 ...

Ruby WEBrick에서 서버 사이드 코드 처리하기

WEBRick 또한 웹 서비스를 위한 라이브러리이기 때문에 간단한 라우팅 기능을 지원합니다. 이를 이용하면 Static 파일만 서빙하는게 아닌 실제 웹 요청 시 원하는 코드를 동작시킬 수 있습니다. 바로 mount_proc 메소드인데요, 먼저 ruby-doc.org에서는 아래와 같이 정의되어 있습니다. mount_p...

WEBrick을 이용하여 간단한 Ruby 웹 서버 만들기

예전에 Ruby on Rails를 다루면서 알게된 webrick 웹서버 모듈입니다. 이 모듈은 쉬운 방법으로 웹 서버를 구성할 수 있도록 지원하는 좋은 모듈이지요. gem을 통해 쉽게 설치가 가능합니다. gem install webrick require로 해당 모듈을 불러온 후 WEBrick 하단 메소드를 이용하여 웹...

[RUBY] HexDump Ruby Code(루비로 헥스 정보 출력하기)

[RUBY] HexDump Ruby Code(루비로 헥스 정보 출력하기) 실행 인자값으로 받을 값(파일명) 을 hexdump라는 함수를 통해 hex값으로 출력하는 코드입니다. 이 코드의 핵심부분인 hexdump 함수에 대해 보겠습니다. filename 파라미터를 통해 받은 인자값을 File.open 으로 로드한 후 eac...

rvm, rbenv를 통한 Ruby 버전 관리

오랜만에 노트북에서 Metasploit 업데이트를 하였더니 패키지 하나가 의존성 문제가 걸렸습니다. gem 으로 설치하려 했으나, 발생하는 건 ruby 2.1 이상에서 설치 가능하다는 메시지였습니다. 이런 경우 시스템 Ruby를 직접 업그레이드하기 보단 rvm이나 rbenv 등 Environment 패키지를 사용하는 것이 ...