Clojure in Action Ch. 1

by Amit Rathore

Preface

복잡성의 두가지
Essential complexity : 원래 복잡한 것.
Accidental complexity : 문제 외의 영역에서 초래된 복잡성.

Chapter 1. Introduction to Clojure

1.1 What is Clojure

1.1.1 Clojure – the reincarnation of Lisp

리스프의 환생.

1.1.2 How we got here

LISt Processing : LISP. 1958년에 설계된 언어.
“code as data” 의 개념.  70~80년대에 인공지능에 많은 투자가 이뤄졌지만, 대부분 실패. 그 오명을 리스프가 지게 됨.
JVM 위의 리슾 개념 : JScheme, Kawa, ABCL  등등.  하지만, 실용적으로 유용한 건 없었슴.
Rich Hickey : 창조자. 는 굉장한 일을 하였다.
클로져는 마침내 살아남은 리슾이 되었다.  –> 리슾의 미래이자 동적 프로그램 언어의 미래.

1.1.3 How this book teaches Clojure

이 책의 철학은 두 기둥에 놓여있다.
> 클로져의 첫번째 원칙을 강조하는 것.
> 그리고, 이러한 원리를 이해하기 위한 실용적인 접근.
많은 코드를 통해 이를 제공할 것이다.
클로져는 새로운 사고를 요구한다.

1.2 Understanding Clojure syntax

신택스는 호불호가 갈린다.
A Clojure expression is either < a symbol > or < a sequence >.
클로져는 배우기 지극히 간단한 언어다. (지랄. 아님) 신택스의 관점에서.. (맞아) 거의 아무것도 없다. (오케이)

1.2.1 XML and parentheses

1.2.2 Lists, vectors, and hashes

클로져는 리슾보다 더 많은 문법이 있지만, 이것이 가독성을 높여준다.
[ 벡터 ]  :  함수의 인수 리스트에 사용.  정수 인덱스 체계.
{ 해시 맵 / 사전 } : { :키 ,  값 }

1.3 The sources of Clojure’s power

1.3.1 Clojure and Lisp

1.3.2 Clojure and functional programming

> immutability, higher-order functions, laziness, concurrency semantics.

1.3.3 Clojure and the JVM

1.3.4 Clojure as a Lisp

AST (abstract syntax tree)
클로져의 런타임은 다른 언어와 다르게 작동한다. JIT 컴파일러 채용.. thanks to the JVM. 코드를 겁나 빠르게 컴파일 / 실행한다.
As alluded to, 암시…  contrive 억지스런, 고안해내다.
The Reader
리더는 소스코드를 AST 구현으로 크로져의 고유 데이터 구조를 이용하여 컨버트한다.
The Macro System
매크로는 클로져 함수. s-expression 을 인수로 받는다. s-expre.. 이 데이터 구조이므로 변형되고 반환가능하고 리턴된 값은 원래 형태로 사용된다.
이러한 코드-변형 매크로는 클로져 ‘위에’  미니 언어를 만들 수 있음.  DSLs (domain specific languages)
Metaprogramming with Macros
코드를 생산하는 코드
모든 클로져 코드는 같은 구조.  크로져 코드를 만들려면 심볼과 다른 데이터 구조를 갖는 클로져 데이터 구조를 만들면 됨.
이러한 신택스 없음과 매크로 시스템은 DSL 에 적합하게 한다.  ==> programmable programming language.
frivolous  천박한
매크로는 메타 프로그래밍의 ‘궁극’의 모습이다.

1.3.5 More advantages of Clojure

Dynamic Language
The REPL

1.3.6 Clojure as a functional language

클로져는 맵 리듀스 같은 higher-order functions 을 장려한다.
Higher-Order Functions

Advertisements

Prime31. Social Network Plugin of Unity3d

플러그인 기초

# ~~ binding.cs 가 항상 있슴.

# iOS 에서 유니티로 콜백함수를 받는 경우.  *Manager.cs 가 있슴.  콜백이 제대로 전달되기 위해 GameObject 에 할당되야 함. 런타임 시 GameObject의 이름이 클래스 이름으로 바뀜. 그러므로 클래스 이름을 바꾸지 말것. 프리팹을 쓸 경우 첫 씬에 포함하면 게임 중에 계속 살아있을 것임.

# 여러 플러그인은 *EventListener.cs 을 갖으며 프리팹에 연결되 있다. 어떻게 작동하는 지 보여주기 위해 거기 있다. 이것을 포함할 필요는 없다. 테스트 씬에서 사용할 것.

# testSupport : 이 디렉토리 안에 간단한 예제가 있슴.

어떤 플러그인은 ‘프리팹’ 디렉토리를 갖는다. 프리팹을 쓰던 *binding.cs 를 직접 쓰던 자유다. 프리팹은 코딩 없이 제공하기 위해서. manager 프리팹이 있으면 최초 로딩 씬에 포함되야 한다. 이것은 네이티브와 통신하는 역할.

‘testSupport’ 폴더에는 항상 테스트 씬이 있음. 이걸 실행하면서 Xcode 디버깅 콘솔을 볼 것.

처음 빌드할 때 Xcode 를 닫아둘 것.  Build (Build and Run이 아니라) 를 하지 않으면 세팅이 잘못 될 수 있음. 스크립트가 실행 될 때 Finder 노트가 뜰 것임.

Social Networking

최신 버전으로 실행할 것..  Facebooks Single Sign On authentication system will only work if your app is set to run in the background.  <- 백 그라운드로 실행 될 때만 작동한다 ??

–> Exit on Suspend 가 체크되면 안된다..  그래서 그렇군…

더 작업하기 전에 트위터/페북 에서 작업을 해야 한다.. (앱 등록 등등..)

대안으로 로그인 프로세스로 oAuth를 쓸 수 있다. 인앱브라우저 형식으로 트위터 페이지를 보여줘서 사용자가 로그인 하게 함.  트위터가 xAuth 를 허가하지 않으면 oAuth로 해야함.
oAuth를 선택하면 트위터 사이트에 ‘브라우저 앱’으로 당신의 앱을 셋업해야 한다.  이것은 등록 시 콜백 url 을 넣으므로 가능하다.  그건 사용되지 않지만, 인증을 위해 필요하다. 당신이 입력하는 redirect url 은 사용되든 안되든 상관없다. 구글닷컴도 완전히 유효하다.

페북 : 페북 개발자에서 셋업 필요.   FacebookBinding.init 메서드에서 어플 아이디를 써야 한다.  페북은 single sign on 을 쓴다. 이것은 info.plist 파일의  URL 셋업을 요구한다.  물론 우리는 이것들을 편하게 할 수 있는 방법을 제공한다.  더 알아보려면 Facebook SDK 를 참조하라. 추가적인 단계는 쉬우며 비디오 참조..

  • Choose “Info.plist additions” from the Prime31 menu in Unity
  • Add a new CFBundle URLScheme by setting it’s Size to 1
  • Enter “fb” followed by your Facebook application Id. (ex. fb123456)
  • Click Save Changes

그 이후에는 페북에 글을 올리거나 …. 메시지 이용… 사진을 올릴 수 있다.

좀 더 높은 수준의 graph API 를 쓰려면 …