midas+son의 크리에이티브(creative) 이야기

파이썬 입문

공부/Python2017. 4. 11. 11:28

코다카데미 사이트(Pro는 유료지만 기본은 무료)에서 파이썬이 있어서 입문해 보았다.(이틀 전부터...)

2년 전에 cocos2D 처음 설치해볼 때 python이 필요해서

그 때 처음 존재를 알았고 관심이 있었지만 이제서야 입문한다.


이틀동안 잠자기 전에 조금씩 다루면서

다르다고 느낀 점은

자료형 지정이 없다,

;(세미콜론)사용안해도 된다,

whitespace에 민감하다,

지수 연산은 ^이 아니라 **이다.

정도? 

개인적으론 var나 auto 자료형도 좋아하지 않는데 

자료형 자체가 없다니 참 재미진 언어다.


회사에 찌들고 

개인 프로젝트 하느라 시간이 없어도

꾸준하게 잠자기 전에 조금씩 해볼 생각이다.

[이태리까스]

홍대에서의 점심
이태리까스

10900원
치즈듬뿍 토마토베이스소스
돈까스

별미이지만 다시 기억할만큼은 아니다.

'개인사 > ' 카테고리의 다른 글

20170417_편도  (0) 2017.04.17
20170414_라멘  (0) 2017.04.16
20170408_돼지고기  (0) 2017.04.08
20170407_치맥  (0) 2017.04.07
20170407_코케뽕  (0) 2017.04.07


서울숲 나들이
여친의 맛난 도시락
나는 과일 담당

메론과 파인애플 한입크기로
잘라서 이쁘게담아갔다♥

여친님 도시락 메뉴는
유부초밥.
계란말이.
문어소세지.
등등
사랑과 정성이라는 조미료ㅋㅋ♥

카메라 가져 오신 여친님과
사진은 많이찍었지만
공개는 불가라 도시락샷만 업로드

미세먼지가 심했지만
가족단위, 연인, 대학생 모임 등등
많은 사람들이 돗자리 깔고
옹기조기 모여 나들이를 즐기고 있었다.

서울숲이 꽤 넓어서
많은 사람들이 모여도
자리가 여유있어 좋았다.
꽃도 이쁘고
걷기도 좋고
가깝고
사랑하는 사람 옆에 있고
정말 나들이하기 좋았다.

http://blog.naver.com/moeblog/220976604276

참고 사이트 : 대한민국 교육부 공식 블로그


위 url을 통해서 직접 블로그 기자단의 글을 보시기 바랍니다.

글 마지막 부분의 무료 소프트웨어교육 사이트 소개 되었습니다.

하지만 블로그 글에 걸려 있는 링크들이 주소가 잘못되어져 있으므로

아래에 정상 링크로 나열하겠습니다.


∎ 칸아카데미 (https://ko.khanacademy.org/)


∎ 구름EDU (http://edu.goorm.io/)


∎ Swift Playground (ios 애플리케이션 http://www.apple.com/swift/playgrounds/)


∎ MakeCode (https://makecode.com/)


∎ Codecademy (https://www.codecademy.com/)


'공부 > 기타' 카테고리의 다른 글

캐릭터 제작론  (0) 2017.04.24
IT관련 무료 책 받기 - packtpub  (0) 2017.04.13
assimp 라이브러리 만드는 방법  (0) 2017.03.14
소스 정적분석툴 비교 참고사이트  (0) 2017.02.12
한글 유니코드에 대해  (0) 2017.01.11

[삼겹살+항정살]

왕십리 주변에 있는 고깃집
돈구어

여친이랑 데이트 후 방문

쌈밥 메인인 가게이지만
돼지고기가 먹고싶어서
삼겹살 1, 항정살 1인분 시켰다.

첫 사진처럼 통으로 나오는데
어떻게 구워야하지? 고민했었다.
고민이 무색하게
사장님이 친히 구워주셨다.
완전 잘구워주시고
먹기좋게 잘라주시고
고기가 고급진거라 하셨는데
진짜 맛나더라.

사장님의 친절함에
마음으로도 맛나게 먹었다.

외식으로 구워먹은 고기중엔
맛으론 최상급인듯 했다.
 1인분 200g에 13000원 이다.
저렴하진 않지만
맛과 서비스로 납득됐다.

이 집의 좋은 점중 하나는
셀프바의 쌈채소다.
쌈정식이나 고기 메뉴 주문자는
여러가지 쌈채소를 맘껏 양껏
가져다 먹을수 있다.

나중에 친구들이랑도 와볼 생각이다.

'개인사 > ' 카테고리의 다른 글

20170414_라멘  (0) 2017.04.16
20170410_이태리까스  (0) 2017.04.10
20170407_치맥  (0) 2017.04.07
20170407_코케뽕  (0) 2017.04.07
20170406_편도,컵라면  (0) 2017.04.06

20170407_치맥

개인사/밥2017. 4. 7. 22:48

[순살반반]

노랑통닭에서 간만에 치맥
신촌점이 점원들
파이팅이 넘쳐서 좋다

치킨은 평이 필요없다.
생맥은 거들뿐

반반 가격은 17000원
생맥은 한잔 착한가격 3500원

'개인사 > ' 카테고리의 다른 글

20170410_이태리까스  (0) 2017.04.10
20170408_돼지고기  (0) 2017.04.08
20170407_코케뽕  (0) 2017.04.07
20170406_편도,컵라면  (0) 2017.04.06
20170404_회덮밥  (0) 2017.04.04

[코케뽕]

뽕신에서 파는
토마토랑 해물들어간
코케뽕 처음 먹어봄
가격은 7500원

이건 내취향 아님
여친님이 주문하신
백뽕이 해물크림파스타 같아서
더 맛있었음

'개인사 > ' 카테고리의 다른 글

20170408_돼지고기  (0) 2017.04.08
20170407_치맥  (0) 2017.04.07
20170406_편도,컵라면  (0) 2017.04.06
20170404_회덮밥  (0) 2017.04.04
20170403_편도  (0) 2017.04.03

[주먹밥 도시락&볶음진짬뽕]

GS25에서 산
2800원짜리 주먹밥도시락
작지만 맛있다.

그리고 처음 먹어본 볶음진짬뽕
1600원이라니
비싸구나.
하지만 괜찮은맛이다.

편의점에서 밥먹으면
점심시간에 30분 여유가 생겨서
좋구나(˘ω˘)

'개인사 > ' 카테고리의 다른 글

20170407_치맥  (0) 2017.04.07
20170407_코케뽕  (0) 2017.04.07
20170404_회덮밥  (0) 2017.04.04
20170403_편도  (0) 2017.04.03
20170401_덮밥  (0) 2017.04.01

https://wiki.unrealengine.com/Iterators:_Object_%26_Actor_Iterators,_Optional_Class_Scope_For_Faster_Search

참고 사이트


UWorld* myWorld = nullptr;

UDataSingleton* dataSingleton = Cast<UDataSingleton>(GEngine->GameSingleton);

if (dataSingleton)

{

AGameMode* gameMode = dataSingleton->gameMode;

if (gameMode)

{

myWorld = gameMode->GetWorld();

}

}


if (myWorld == nullptr) return;


for (TActorIterator<AItemActor> ActorItr(myWorld); ActorItr; ++ActorItr)

{

AItemActor *Mesh = *ActorItr;

if (Mesh && Mesh->inventoryIndex != -1)

{

this->ApplyItemInInventory(Mesh, Mesh->inventoryIndex);

}

}

UWorld를 받아와서 TActorIterator<액터클래스명>을 받아와 반복문을 돌리는 형태이다.

현재 레벨의 World에서 Spwan된 모든 Actor를 검사하여 <AItemActor>로 캐스팅 되는 것을 찾아

이터레이터 형식으로 변환된다고 생각된다.(내부 코드를 보지 않아 정확하진 않다.)

//4.12.5에서 사용한 코드

//FString path;//인자값

//std::string filename(TCHAR_TO_UTF8(*path));

//인코딩 문제 발생 : https://docs.unrealengine.com/latest/INT/Programming/UnrealArchitecture/StringHandling/CharacterEncoding/


const wchar_t* ptr = *path;

int csize = 1024; //글자 바이트 제한

char* tempFileName = new char[csize];

char def = '?';


//함수 참고 Url : https://msdn.microsoft.com/en-us/library/windows/desktop/dd374130(v=vs.85).aspx

WideCharToMultiByte(CP_ACP, 0, ptr, -1, tempFileName, csize, &def, NULL);


std::string fileName(tempFileName);

delete[] tempFileName;

4.12.5 버전에서는 #include <Windows.h>를 하여 

WideCharToMultiByte를 사용하였었다.

하지만 4.15.1로 오면서 #include <Windows.h> 를 사용하면

Winnt.h 에서 TEXT 매크로 재정의 Warning이 발생하는 등

여러 문제가 발생하여 #include <Windows.h>를 사용하지 않게 바꾸기로 했다.


wchar_t를 char*나 string으로 바꾸는 방법을 구글링으로 열심히 찾았으나

다 의미없는 소스와 블로그 글들 뿐이었다.

한글에 대한 처리가 고려되지 않는 글들도 많았다.

공식 MSDN이나 언리얼에서도 명확한 해결법을 주지 않았다.


UTF-16과 UTF-8에 대한 컨버팅 구조는 찾았으나

CP949로 가는 구조는 못찾았다.


2일째 고민하던 중 찾은 방법은 codecvt을 사용한 방법이었다.

저 헤더는 처음 봤다.(자세한 설명은 맨 위의 참고사이트 링크에 들어가보자.)

컨버트용 헤더로 생각된다.


//include해야 하는 헤더들

#include <string> 

#include <vector> 

#include <codecvt> 

#include <locale>

//4.15.1에서 새로 작성한 코드

std::wstring str = *FilePath;

typedef std::codecvt<wchar_t, char, std::mbstate_t> codecvt_t;

//std::locale loc = std::locale("ko_KR.UTF-8"); // windows 에서는 사용이 안됨

std::locale loc = std::locale("Korean"); // windows 용

codecvt_t const& codecvt = std::use_facet<codecvt_t>(loc);

std::mbstate_t state = std::mbstate_t();

std::vector<char> buf((str.size() + 1) * codecvt.max_length());

wchar_t const* in_next = str.c_str();

char* out_next = &buf[0];

std::codecvt_base::result r = codecvt.out(state,

str.c_str(), str.c_str() + str.size(), in_next,

&buf[0], &buf[0] + buf.size(), out_next);

if (r == std::codecvt_base::error)

throw std::runtime_error("can't convert wstring to string");    //실제 에러가 난다. 언리얼 로그로 바꾸어도 된다.

std::string fileName(&buf[0]);

위와 같이 바꾸니 Warning없이 정상적으로 동작한다.

복잡해보이니 아래와 같이 함수로 바꾸어 사용했다.(참고사이트에 있는 것 복붙 + 약간 수정)

std::string CommonFunc::WCStoMBCS(std::wstring const& str, std::locale const& loc /*= std::locale("")*/)

{

//loc에 std::locale("")로 들어오면 자동으로 OS의 locale을 찾는것 같다.(확인 필요), std::locale()로 하면 에러 난다.

typedef std::codecvt<wchar_t, char, std::mbstate_t> codecvt_t;

codecvt_t const& codecvt = std::use_facet<codecvt_t>(loc);

std::mbstate_t state = std::mbstate_t();

std::vector<char> buf((str.size() + 1) * codecvt.max_length());

wchar_t const* in_next = str.c_str();

char* out_next = &buf[0];

std::codecvt_base::result r = codecvt.out(state,

str.c_str(), str.c_str() + str.size(), in_next,

&buf[0], &buf[0] + buf.size(), out_next);

if (r == std::codecvt_base::error)

throw std::runtime_error("can't convert wstring to string");    //실제 에러가 난다. UELOG로 바꾸어도 된다.

return std::string(&buf[0]);

}

마이그레이션 하던 것 중 제일 골치 아팠던 게 해결 되었다.

굿굿!!