Amazon Lumberyard

아마존에서 개발한 무료 크로스 플랫폼 게임엔진으로 렌더러, 게임 시스템과 빌드 툴을 포함한다.

설치는 다음과 같은 순으로 진행한다.

  • 럼버야드 다운로드
  • 럼버야드 설치
  • 럼버야드 환경 설정 및 실행


Step 1 : 럼버야드 다운로드


1. 다운로드 홈페이지 이동

https://aws.amazon.com/ko/lumberyard/downloads/

2. 럼버야드 최신 버전 다운로드 (현 1.17)


Step 2 : 럼버야드 설치


1. 다운로드 한 럼버야드 설치

2. 설치 후 럼버야드 설치 도우미 실행


Step 3 : 럼버야드 환경 설정 및 실행


1. Launch 실행

2. AWS (Amazon Web Services) 로그인



Reference



전자우편 주소:
/^[a-z0-9_+.-]+@([a-z0-9-]+\.)+[a-z0-9]{2,4}$/

URL:
/^(file|gopher|news|nntp|telnet|https?|ftps?|sftp):\/\/([a-z0-9-]+\.)+[a-z0-9]{2,4}.*$/

HTML 태그 - HTML tags:
/\<(/?[^\>]+)\>/

전화 번호 - 예, 123-123-2344 혹은 123-1234-1234:
/(\d{3}).*(\d{3}).*(\d{4})/

날짜 - 예, 3/28/2007 혹은 3/28/07:
/^\d{1,2}\/\d{1,2}\/\d{2,4}$/

jpg, gif 또는 png 확장자를 가진 그림 파일명:
/([^\s]+(?=\.(jpg|gif|png))\.\2)/

1부터 50 사이의 번호 - 1과 50 포함:
/^[1-9]{1}$|^[1-4]{1}[0-9]{1}$|^50$/

16 진수로 된 색깔 번호:
/#?([A-Fa-f0-9]){3}(([A-Fa-f0-9]){3})?/

적어도 소문자 하나, 대문자 하나, 숫자 하나가 포함되어 있는 문자열(8글자 이상 15글자 이하) - 올바른 암호 형식을 확인할 때 사용될 수 있음:
/(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,15}/






숫자만 가능 : [ 0 ~ 9 ] 주의 : 띄어쓰기 불가능
/^[0-9]+$/

 

 이메일 형식만 가능

/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/

 

한글만 가능 : [ 가나다라 ... ] 주의 : ㄱㄴㄷ... 형식으로는 입력 불가능 , 띄어쓰기 불가능
/^[가-힣]+$/

 

한글,띄어쓰기만 가능 : [ 가나다라 ... ] 주의 : ㄱㄴㄷ... 형식으로는 입력 불가능 , 띄어쓰기 가능
/^[가-힣\s]+$/

 

영문만 가능 :
/^[a-zA-Z]+$/

 

 영문,띄어쓰기만 가능
/^[a-zA-Z\s]+$/

 

전화번호 형태 : 전화번호 형태 000-0000-0000 만 받는다. ]
/^[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}$/

 

도메인 형태, http:// https:// 포함안해도 되고 해도 되고
/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/

 

도메인 형태, http:// https:// 꼭 포함
/^((http(s?))\:\/\/)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/

 

도메인 형태, http:// https:// 포함하면 안됨
/^[^((http(s?))\:\/\/)]([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/

 

한글과 영문만 가능
/^[가-힣a-zA-Z]+$/;

 

숫자,알파벳만 가능
/^[a-zA-Z0-9]+$/;

 

주민번호, -까지 포함된 문자열로 검색
/^(?:[0-9]{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[1,2][0-9]|3[0,1]))-[1-4][0-9]{6}$/


Jquery 에서는 $.test() 메서드로,

 PHP 에서는 preg_match() 함수로 사용



정규표현식의 기본 문법

정규표현식은 소프트웨어에 따라서 방식이나 지원 범위가 다를 수 있습니다.

^TheThe로 시작하는 문자열
of despair$of despair로 끝나는 문자열
^abc$abc로 시작하고 abc로 끝나는 문자열 (abc 라는 문자열도 해당됨)
noticenotice가 들어 있는 문자열


ab*a 다음에 b가 0개 이상 (a, ab, abbb 등등)
ab+a 다음에 b가 1개 이상 (ab, abbb 등등)
ab?a 다음에 b가 있거나 없거나 (ab 또는 a)


ab{2}a 다음에 b가 2개 있는 문자열 (abb)
ab{2,}a 다음에 b가 2개 이상 (abb, abbbb 등등)
ab{3,5}a 다음에 b가 3개에서 5개 사이 (abbb, abbbb, 또는 abbbbb)

*+?는 각각 {0,}{1,}{0,1}과 같습니다.

( )는 문자열을 묶음 처리할 때 사용
a(bc)*a 다음에 bc가 0개 이상 (묶음 처리)
a(bc){1,5}a 다음에 bc가 1개에서 5개 사이


hi|hellohi hello가 들어 있는 문자열
(b|cd)efbef 또는 cdef
(a|b)*ca와 b가 섞여서 여러번 나타나고 그뒤에 c가 붙어있는 패턴


. (점)임의의 한 문자
^.{3}$3문자로만 되어 있는 문자열


[ ]괄호 안에 있는 내용 중 임의의 한 문자
[^ ]첫문자로 ^를 쓰면 괄호 내용의 부정. 즉 괄호 안에 포함되지 않는 한 문자
[ab]또는 b (a|b 와 동일한 표현)
[a-d]소문자 a에서 d까지 (a|b|c|d 또는 [abcd] 와 동일)
^[a-zA-Z]영문자로 시작하는 문자열
[0-9]%% 문자 앞에 하나의 숫자가 붙어 있는 패턴
%[^a-zA-Z]%두 % 문자 사이에 영문자가 없는 패턴


특수 문자 자체를 검색하기 및 사용하기
\^^\..
\[[\$$
\((\))
\||\**
\++\??
\{{\\\
\n줄넘김 문자\r리턴 문자
\w알파벳과 _ (언더바)\W알파벳과 _ 가 아닌 것
\s빈 공간(space)\S빈 공간이 아닌 것
\d숫자\D숫자가 아닌 것
\b단어와 단어 사이의 경계\B단어 사이의 경계가 아닌 것
\tTab 문자\xnn16진수 nn에 해당하는 문자

[ ] 안에서는 특수 문자가 모두 효력을 잃게 됩니다.

검색 + 치환을 위한 하부식(부분식)
( )로 둘러싼 부분은 각각 하나의 덩어리로 취급해서,
검색시 ( ) 안에 해당되는 내용들을 변경할 내용에서 그대로 가져다 이용할 수 있습니다.
검색된 각각의 ( )안에 해당되는 내용은 변경할 내용에서 $1, $2, .. 등으로 지정해서 쓸 수 있습니다.
예제) mp3파일 이름 바꾸기
검색 : (.*) - (.*)\.mp3 .*은 길이에 상관없이 임의의 문자열, \.은 점
치환 : $2 - $1.mp3 앞에서 검색한 ( )안에 해당되는 내용끼리 순서 바꾸기
ex) "제목 - 연주자.mp3" Þ "연주자 - 제목.mp3"
앞에서 정의한 하부식을 다시 활용하기 (제가 잘못 이해한 것일 수도 있는데)
\n은 ( ) 하부식 중에서 n번째 하부식을 가리킵니다.
예제) (.+)\1+
\1로 되어 있으니까 첫번째 부분식 (.+)를 가리킵니다. 위 내용을 해석하자면, 일단 (.+)가 있으니까 이에 해당되는 내용을 찾고, \1+이 있으니까 첫번째 부분식 (.+)와 똑같은 내용이 그 뒤에 1번 이상 있는 문자열을 찾습니다.
예제) abab같은 문자열이 위에 해당되는데, 일단 (.+) 즉 임의의 문자열 ab를 찾고 그 뒤에 \1+로 첫번째 부분식을 다시 1번 이상 있는 것을 찾으니까 뒤의 ab가 이에 해당합니다.


변경자 ? 검색 방식 변경
(?i)대소문자 무시 (기본값)
(?-i)대소문자 구분
(?g)"greedy" 모드로 전환 (기본값)
(?-g)"greedy" 모드 해제, 따라서 "+"는 "+?"과 동일한 것으로 인식



  • 작성한 정규식을 바로 확인해 볼 수 있는 곳.
    regexpal.com
  • 정규식 문법
    바로가기


  • 출처: http://gocoding.tistory.com/93 [Developer Factory]

    python 명령어는 잘되는데 sudo python 명령어에서 python library 경로를 못찾아서 에러가 난다.

    sudo의 경우에 path 경로 설정이 달라서 명령어에 경로 설정을 해주면 된다.

    $ sudo LD_LIBRARY_PATH=/usr/local/python2.7/lib/ python setup.py install


    - Reference

    https://superuser.com/questions/232231/how-do-i-make-sudo-preserve-my-environment-variables

    permission denied message filtering

    $ find / -name $FILE_NAME 2>/dev/null


    - Reference

    http://ohyecloudy.com/ddiary/2017/05/17/til-bash-exclude-all-permission-denied-messages-from-find/

    파이썬 버전 업데이트 이후에 yum이 다음 메시지와 함께 동작이 안되어서 재설치를 하였다.

    yum-no-module-named-yum

    centos 버전에 따라서 centos-VERSION 폴더에서

    i386(32비트) / x86_64(64비트) 확인을 잘해서 package를 설치한다.

    http://mirror.centos.org/centos-6/6/os/x86_64/Packages/


    # rpm -e --nodeps yum
    # rpm -e --nodeps python

    # rpm -Uvh --nodeps --force http://mirror.centos.org/centos-6/6/os/x86_64/Packages/${RPM_FILE_NAME}

    ## RPM_FILE_NAMES

    sudo rpm -Uvh --nodeps --force http://mirror.centos.org/centos-6/6/os/x86_64/Packages/yum-3.2.29-81.el6.centos.noarch.rpm

    sudo rpm -Uvh --nodeps --force http://mirror.centos.org/centos-6/6/os/x86_64/Packages/python-2.6.6-66.el6_8.x86_64.rpm

    sudo rpm -Uvh --nodeps --force http://mirror.centos.org/centos-6/6/os/x86_64/Packages/python-devel-2.6.6-66.el6_8.x86_64.rpm

    sudo rpm -Uvh --nodeps --force http://mirror.centos.org/centos-6/6/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.30-41.el6.noarch.rpm

    sudo rpm -Uvh --nodeps --force http://mirror.centos.org/centos-6/6/os/x86_64/Packages/yum-metadata-parser-1.1.2-16.el6.x86_64.rpm

    sudo rpm -Uvh --nodeps --force http://mirror.centos.org/centos-6/6/os/x86_64/Packages/python-libs-2.6.6-66.el6_8.x86_64.rpm

    yum list python 쳐보면 잘 동작한다.


    - Reference

    http://alloe.tistory.com/64

    pip 에서 버전 충돌이 문제인지 다음과 같은 에러 메세지로 작동이 잘 안되어서 재설치를 하였다.

    pkg_resources.DistributionNotFound: The 'pip==8.1.2' distribution was not found and is required by the application


    wget https://pypi.python.org/packages/e7/a8/7556133689add8d1a54c0b14aeff0acb03c64707ce100ecd53934da1aa13/pip-8.1.2.tar.gz
    
    tar -xzvf pip-8.1.2.tar.gz
    
    cd pip-8.1.2
    
    sudo python setup.py install


    Reference : https://github.com/pypa/pip/issues/3776

    정규식 패턴 표현

    패턴설명예제
    ^이 패턴으로 시작해야 함^abc : abc로 시작해야 함 (abcd, abc12 등)
    $이 패턴으로 종료되어야 함xyz$ : xyz로 종료되어야 함 (123xyz, strxyz 등)
    [문자들]문자들 중에 하나이어야 함. 가능한 문자들의 집합을 정의함.[Pp]ython : "Python" 혹은 "python"
    [^문자들][문자들]의 반대로 피해야할 문자들의 집합을 정의함.[^aeiou] : 소문자 모음이 아닌 문자들
    |두 패턴 중 하나이어야 함 (OR 기능)a | b : a 또는 b 이어야 함
    ?앞 패턴이 없거나 하나이어야 함 (Optional 패턴을 정의할 때 사용)\d? : 숫자가 하나 있거나 없어야 함
    +앞 패턴이 하나 이상이어야 함\d+ : 숫자가 하나 이상이어야 함
    *앞 패턴이 0개 이상이어야 함\d* : 숫자가 없거나 하나 이상이어야 함
    패턴{n}앞 패턴이 n번 반복해서 나타나는 경우\d{3} : 숫자가 3개 있어야 함
    패턴{n, m}앞 패턴이 최소 n번, 최대 m 번 반복해서 나타나는 경우 (n 또는 m 은 생략 가능)\d{3,5} : 숫자가 3개, 4개 혹은 5개 있어야 함
    \d숫자 0 ~ 9\d\d\d : 0 ~ 9 범위의 숫자가 3개를 의미 (123, 000 등)
    \w문자를 의미\w\w\w : 문자가 3개를 의미 (xyz, ABC 등)
    \s화이트 스페이스를 의미하는데, [\t\n\r\f] 와 동일\s\s : 화이트 스페이스 문자 2개 의미 (\r\n, \t\t 등)
    .뉴라인(\n) 을 제외한 모든 문자를 의미.{3} : 문자 3개 (F15, 0x0 등)


    출처 : http://pythonstudy.xyz/python/article/401-%EC%A0%95%EA%B7%9C-%ED%91%9C%ED%98%84%EC%8B%9D-Regex

    참조 : http://www.nextree.co.kr/p4327/


    #!/usr/bin/env python

    # -*- coding: utf-8 -*-

    import os, sys, django

    sys.path.append(".")

    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "demo.settings")

    django.setup()

    from brand.models import *

    import json


    class ProductDB():

      def __init__(self, model):

        self.model = model

      def create(self, pid, cat1id, cat2id, cat3id, pname, brand, imgurl):

        if self.model == Product:

          p = Product(pid=pid, cat1id=cat1id, cat2id=cat2id, cat3id=cat3id, pname=pname, brand=brand, imgurl=imgurl)

          p.save()


    class DataFile():

      def __init__(self, fp):

        self.f = open(fp, 'r')

      def read(self):

        line = self.f.readline().strip()

        return line

      def json_data(self):

        line = self.f.readline().strip()

        data = json.loads(line)

        return data


    def main():

      data_dir = "./data/json.txt"

      f = DataFile(data_dir)


      while(True):

        data = f.json_data()

        if not data:  break

        pid = data['id']

        cat1id = data['category1Id']

        cat2id = data['category2Id']

        cat3id = data['category3Id']

        pname = data['productName']

        brand = data['brand']

        imgurl = data['imageUrl']


        p = ProductDB(Product)

        p.create(pid, cat1id, cat2id, cat3id, pname, brand, imgurl)


    ####################################################

    # main

    ####################################################

    if __name__ == '__main__':

      main()



    장고 bootstrap templates 활용해서 아이템 이쁘게 정돈하기

    1. modulus (%) 연산 함수를 정의

    vi templatetags/utils.py

    # -*- coding: utf-8 -*-

    from django.template.defaulttags import register


    @register.filter

    def mod( value, arg ):

      return value % arg

    * templatetags 디렉토리 안에 __init__.py 파일 생성


    2. 기본 html 수정

    {% extends "brand/basic_frame.html" %}

    {% block content %}

    {% load utils %} 


    <div class="pagination">

      <span class="step-links">

        <ul class="pagination">

        {% if contacts.has_previous %}

          <li><a href="?page={{ contacts.previous_page_number }}"> prev </a></li>

        {% endif %}

          <li><a href="#"> Page {{ contacts.number }} of {{ contacts.paginator.num_pages }}. </a></li>

        {% if contacts.has_next %}

          <li><a href="?page={{ contacts.next_page_number }}"> next </a></li>

        {% endif %}

      </ul>

      </span>

    </div>


    <div class="container">

      {% for d in contacts %}

        {% ifequal forloop.counter|mod:3 0 %}

        <div class="row">

        {% endifequal %}

          <div class="col-sm-4">

            <div class="panel panel-success">

              <div class="panel-heading"> {{forloop.counter}} {{d.pname}}</div>

              <div class="panel-body"><img src="{{d.imgurl}}" class="img-responsive" style="width:100%" alt="Image"></div>

              <div class="panel-footer">{{d.brand}}</div>

            </div>

          </div>

        {% ifequal forloop.counter|mod:3 0 %}

        </div>

        {% endifequal %}

      {% endfor %}

    </div><br>


    {% endblock %}


    3. 기본 html에서 동작 확인


    1. Paginator 함수로 아이템 분할

    vi views.py

    # -*- coding: utf-8 -*-

    from __future__ import unicode_literals


    from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

    from django.shortcuts import render

    from django.views import View

    from .models import *


    # Create your views here.

    class basic(View):

      def get(self, request, *args, **kwargs):

        #data = Product.objects.all()

        catid = '000006'

        if 'catid' in kwargs:

          catid = kwargs['catid']

        data = Product.objects.filter(cat1id=catid)


        # item number per page

        num_page = 10

        paginator = Paginator(data, num_page)

        page = request.GET.get('page')

        try:

          contacts = paginator.page(page)

        except PageNotAnInteger:

          # If page is not an integer, deliver first page.

          contacts = paginator.page(1)

        except EmptyPage:

          # If page is out of range (e.g. 9999), deliver last page of results.

          contacts = paginator.page(paginator.num_pages)


        return render(request, 'brand/basic.html', context={'catid':catid,'contacts':contacts})


    2. 기본 html 에 pagination 생성

    {% extends "brand/basic_frame.html" %}

    {% block content %}


    <div class="pagination">

      <span class="step-links">

        <ul class="pagination">

        {% if contacts.has_previous %}

          <li><a href="?page={{ contacts.previous_page_number }}"> prev </a></li>

        {% endif %}

          <li><a href="#"> Page {{ contacts.number }} of {{ contacts.paginator.num_pages }}. </a></li>

        {% if contacts.has_next %}

          <li><a href="?page={{ contacts.next_page_number }}"> next </a></li>

        {% endif %}

      </ul>

      </span>

    </div>


    <div class="container-fluid bg-3 text-center">

      <div class="row">

        {% for d in contacts %}

        <div class="col-sm-4">

          <div class="media">

            <div class="media-left media-middle">

              <img src="{{d.imgurl}}" class="media-object" width="100" height="100">

            </div>

            <div class="media-body">

              <h4> {{d.pname}} </h4>

              <p> {{d.brand}} </p>

            </div>

          </div>

        </div>

        {% endfor %}

      </div>

    </div>


    {% endblock %}


    3. pagination 동작 확인




    - Reference

    https://www.w3schools.com/bootstrap/bootstrap_pagination.asp

    + Recent posts