12월 152013
 

숫자를 쓰는 몇가지 방법

  • 3.14
  • 31415.9e-4
  • 123456789
  • 12_345_678_910
  • 0x3D3A

문자열 (아래는 같은 문자열임)

  • “Hello World”
  • ‘Hello World’
  • %q!Hello World!
  • %Q!Hello World!
  • %q/Hello World/
  • %{Hello World}

HERE 문서 기능

print << HERE
Hello 
World 
!!
HERE`

1번째 줄의 HERE부터 마지막줄 HERE까지 하나의 문자열로 봄
즉 자동으로 개행문자를 붙여 줌

상수/변수

  • 대문자 Only : 상수
  • 그 이외 : 변수

큰따옴표 문자열 안에 변수 값 삽입

puts "My name is #{name}." #{}를 이용하여 해결한다.

간단한 입출력 예제

print please enter your name: 
gets
chomp
puts "Your name is #{$_}."
  1. gets$_에 키보드로 입력한 문자열을 저장한다.
  2. chomp$_ 뒤에 개행 문자를 제거한다.
  3. #{$_}를 입력받은 결과물을 출력한다.

심볼

C언어 enum에서 쓰는 값과 유사한 것이다. :data와 같은 형식으로 이용한다.

C언어와 다른 연산자

  • ** : Exponential(누승)
  • <=> : 작으면 음수, 같으면 0, 크면 양수 반환
  • == : 같다
  • === : case문의 when절에서 사용하는 동치 연산자
  • =~ : 정규 표현식 패턴 검사 연산자
  • defined? : 어떤 심볼이 정의되어 있으면 참
  • begin, end : 블록 표현식
  • if, unless, while, until : 실행문

배열 첨자 차이

array\[start, count] : 리턴값은 start부터 갯수 만큼의 원소를 가져온다.

해 쉬

res = {"first" => "Gildong", "last" => "Hong"} : 형식으로 사용

res["first"] : res에서 first라는 값을 가져온다

범 위(range)

1..4 : 1, 2, 3, 4

1...4 : 1, 2, 3

배열 변환

.to_a 라는 메소드를 이용

  • (1..4).to_a : [1,2,3,4]
  • (1...3).to_a : [1,2,3]

오름차순을 이용해야 배열로 변환 가능

12월 132013
 

윈도우에서 mysql2 ruby gem이 아래와 유사한 이유로 설치가 안되는 경우 해결방법. (rails4, ruby2 에서 확인)

Building native extensions. This could take a while…
ERROR: Error installing mysql2:
ERROR: Failed to build gem native extension.C:/Ruby200-x64/bin/ruby.exe extconf.rb
checking for ruby/thread.h… yes
checking for rb_thread_call_without_gvl() in ruby/thread.h… yes
checking for rb_thread_blocking_region()… yes
checking for rb_wait_for_single_fd()… yes
checking for rb_hash_dup()… yes
checking for rb_intern3()… yes
checking for mysql_query() in -lmysqlclient… no
checking for main() in -lm… yes
checking for mysql_query() in -lmysqlclient… no
checking for main() in -lz… no
checking for mysql_query() in -lmysqlclient… no
checking for main() in -lsocket… no
checking for mysql_query() in -lmysqlclient… no
checking for main() in -lnsl… no
checking for mysql_query() in -lmysqlclient… no
checking for main() in -lmygcc… no
checking for mysql_query() in -lmysqlclient… no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options.

Provided configuration options:
–with-opt-dir
–without-opt-dir
–with-opt-include
–without-opt-include=${opt-dir}/include
–with-opt-lib
–without-opt-lib=${opt-dir}/lib
–with-make-prog
–without-make-prog
–srcdir=.
–curdir
–ruby=C:/Ruby200-x64/bin/ruby
–with-mysql-dir
–without-mysql-dir
–with-mysql-include
–without-mysql-include=${mysql-dir}/include
–with-mysql-lib
–without-mysql-lib=${mysql-dir}/
–with-mysql-config
–without-mysql-config
–with-mysql-dir
–without-mysql-dir
–with-mysql-include
–without-mysql-include=${mysql-dir}/include
–with-mysql-lib
–without-mysql-lib=${mysql-dir}/
–with-mysqlclientlib
–without-mysqlclientlib
–with-mlib
–without-mlib
–with-mysqlclientlib
–without-mysqlclientlib
–with-zlib
–without-zlib
–with-mysqlclientlib
–without-mysqlclientlib
–with-socketlib
–without-socketlib
–with-mysqlclientlib
–without-mysqlclientlib
–with-nsllib
–without-nsllib
–with-mysqlclientlib
–without-mysqlclientlib
–with-mygcclib
–without-mygcclib
–with-mysqlclientlib
–without-mysqlclientlib
Gem files will remain installed in C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/mysql2-0.3.14 for inspection.
Results logged to C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/mysql2-0.3.14/ext/mysql2/gem_make.out

 

 1. 이 유


1. mysqlclient 또는 mysql connector가 설치되어 있지 않기 때문

2. mysql connector가 설치되어 있다 하더라도 경로 지정이 안되있는 경우

 

2. 해결방법


1) mysql c connector를 설치한다. [http://dev.mysql.com/downloads/connector/c/] (설치되어 있는 경우 생략)

2) 아래와 같은 방법으로 설치한다. 굵은 글씨 부분은 mysql connector가 설치된 환경에 맞게 수정한다.

C:\>gem install mysql2 –platform=ruby — ‘–with-mysql-lib=”C:\Program Files\MySQL\MySQL Connector C 6.1\lib” –with-mysql-include=”C:\Program Files\MySQL\MySQL Connector C 6.1\include”‘

 

Reference

[1] http://stackoverflow.com/questions/5836959/cant-install-mysql2-for-rails-3-on-windows

11월 292013
 

요즘 간단한 홈페이지를 만들고 있다. 어떻게 만들까 고민하다가, 새로운 기술을 배울 겸 node.js를 이용하여 구현해보았다. 최신버젼을 경험하는 것을 좋아하다 보니, 간단한 기능을 추가할 때 마다 에로사항이 꽃피고 있다.  기존에 나와 있는 node.js책에 있는 내용들의 일부분은 deflcated되어 사용될 수 없는 상황이 대부분이였다. connect의 미들웨어 router 등등. 비슷한 기능을 하는 것을 만들어서 해결할 수 있다고 하였지만 그냥 express framework를 사용하기로 하였다. 그런데 이 조차도 최신 버젼(>=3.0)에서 레이아웃이 작동되지 않는다는 것을 알게 되었다[1].

조사해 보았더니, 해결 방안은 jade의 기능을 이용하라는 것이였다.

아래는 index.jade이다.

extends layout
block title
    =title

block contents
    p Hello World@!@!@

아래는 레이아웃 역할을 하는 layout.jade이다.

!!!  5
html
    head
        title
            block title
        link(rel = 'stylesheet', href = '/css/bootstrap.min.css')
        link(rel = 'stylesheet', href = '/css/bootstrap.theme.min.css')
    body
        block contents

아래는 node.js를 통해 실행된 결과물이다.

		

Hello World@!@!@

요는 jade기능인 “extends”와 “block”을 쓰면 되는 것이다. index.jade에 extends layout 명령을 통해 layout.jade를 읽어 들이고 block 구분에 적혀져 있는 내용이 자동으로 치환되게 된다. 물론 extends <<파일명>> 형태로 사용하고, block <<레이블>> 형태로 맞춰주면 된다.

최근에 나온 프레임워크는 어떻게 튀어나갈지 몰라서 안정된 환경을 원할 경우에는 좋은 선택이 못되는 듯 하다.

[1] http://stackoverflow.com/questions/13783687/the-layout-jade-is-not-working-why

7월 032011
 

아래의 홈페이지에 들어가서 문서를 확인한다.

약 두가지 방법이 있다.
1. csrf를 끄는 방법

    from django.views.decorators.csrf import csrf_exempt

    @csrf_exempt

    def your_Function(request):

        …

 

2. 아래의 코드를 추가하기

https://docs.djangoproject.com/en/dev/ref/contrib/csrf/

영어를 읽기 귀찮으신 분들을 위해…
– JQuery를 사용하는 경우 아래의 코드를 ajax호출이 담긴 .js파일의 적당한 위치에 복사하면 됩니다.

$(document).ajaxSend(function(event, xhr, settings) {

    function getCookie(name) {

        var cookieValue = null;

        if (document.cookie && document.cookie != ”) {

            var cookies = document.cookie.split(‘;’);

            for (var i = 0; i < cookies.length; i++) {

                var cookie = jQuery.trim(cookies[i]);

                // Does this cookie string begin with the name we want?

                if (cookie.substring(0, name.length + 1) == (name + ‘=’)) {

                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));

                    break;

                }

            }

        }

        return cookieValue;

    }

    function sameOrigin(url) {

        // url could be relative or scheme relative or absolute

        var host = document.location.host; // host + port

        var protocol = document.location.protocol;

        var sr_origin = ‘//’ + host;

        var origin = protocol + sr_origin;

        // Allow absolute or scheme relative URLs to same origin

        return (url == origin || url.slice(0, origin.length + 1) == origin + ‘/’) ||

            (url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + ‘/’) ||

            // or any other URL that isn’t scheme relative or absolute i.e relative.

            !(/^(\/\/|http:|https:).*/.test(url));

    }

    function safeMethod(method) {

        return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));

    }

    if (!safeMethod(settings.type) && sameOrigin(settings.url)) {

        xhr.setRequestHeader(“X-CSRFToken”, getCookie(‘csrftoken’));

    }

});

 

그러면, 아마 문제가 해결되실 겁니다.