[교양] Coroutine

Coroutine

https://en.wikipedia.org/wiki/Coroutine

“Subroutines are special cases of … coroutines.” –Donald Knuth.[3]

When subroutines are invoked, execution begins at the start, and once a subroutine exits, it is finished; an instance of a subroutine only returns once, and does not hold state between invocations. By contrast, coroutines can exit by calling other coroutines, which may later return to the point where they were invoked in the original coroutine; from the coroutine’s point of view, it is not exiting but calling another coroutine.[3] Thus, a coroutine instance holds state, and varies between invocations; there can be multiple instances of a given coroutine at once. The difference between calling another coroutine by means of “yielding” to it and simply calling another routine (which then, also, would return to the original point), is that the latter is entered in the same continuous manner as the former. The relation between two coroutines which yield to each other is not that of caller-callee, but instead symmetric.

Any subroutine can be translated to a coroutine which does not call yield.[4]

To implement a programming language with subroutines requires only a single stack that can be preallocated at the start of program execution. By contrast, coroutines, able to call on other coroutines as peers, are best implemented using continuations.[citation needed] Continuations may require allocation of additional stacks, and therefore are more commonly implemented in garbage-collected high-level languages.[citation needed]Coroutine creation can be done cheaply by preallocating stacks or caching previously allocated stacks.[citation needed]

Tail call, Tail Recursion, tail call elimination(TCO-tail call optimization)

https://en.wikipedia.org/wiki/Tail_call

related post : http://stackoverflow.com/questions/24023580/does-swift-implement-tail-call-optimization-and-in-mutual-recursion-case

[Streaming] mp4 streaming 이슈

http progressive download 불가능 한 상황이 발생 했다.

나의 경우 mp4의 moov atom 순서가 가장 뒤에 있을 경우 발생 했다.

해결 방법은 ‘moov’ Container order값을 두번째로 옮기고 약간의 작업을 해주면 된다.

Solution : qt-faststart.c

안드로이드에 올리기 위해서는  ffmpeg jni 를 이용해야 하는데 빌드하고 관리하기 번거롭고 library 통째로 필요한게 아니라 qt-faststart.c만 필요했기 때문에 자바로 옮겼다.

관련 코드 git-hub에 작성해서 공유할 계획만 가지고 있다.

Reference

* java ffmpeg : https://code.google.com/p/jjmpeg/downloads/list

* Quick Time Format : https://developer.apple.com/library/mac/documentation/QuickTime/QTFF/qtff.pdf

*  http://www.onjava.com/pub/a/onjava/2003/02/19/qt_file_format.html

http://fabiensanglard.net/mobile_progressive_playback/index.php

http://fd.fabiensanglard.net/mobile_progressive_playback/qt-faststart.c

[ios] view 동적으로 크기 조정 할 때 Constraint 충돌 발생 하는 경우

일반적으로 Container가 사라졌다가(display:none) 보이는(display:block) 효과를 구현 할 때

사라진 cell의 크기를 보이도록 조정 할 때

Container의 크기를 먼저 늘리고 Container 안에 있는 Margin이나 Padding 값을 0보다 큰 값으로 올려야 한다.

그렇지 않으면 Container의 크기가 0인데 subview와 Container 사이에 Margin(top, bottom)값이 0보다 크게 되면

논리적으로 오류가 발생하며 Constraint 충돌이 발생한다.

[ios] Object Allocation, init

Allocation

alloc 메서드가 호출 될 때 중요한 필드 2개가 초기화 된다. isaretain count다.

그러나 alloc만 호출 되어서는 객체를 바로 사용할 수 없고 init 메서드가 호출 되어야 한다.

init 메서드는 각 객체의 초기화 작업과 functional object를 반환 한다고 한다.

https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaEncyclopedia/ObjectAllocation/ObjectAllocation.html#//apple_ref/doc/uid/TP40010810-CH7-SW1

Init

self = [super init];

why????

일반적인 경우 리턴값 필요 없음.

그러나 이게 FileReader를 init 한다던가 단 하나만 존재하는 객체를 init 한다면…

상황에 따라서 nil이나 이전에 생성한 객체를 반환해야 한다.

그런 클래스를 상속 받았다면 “self = [super int];” 이 의미를 가지게 된다.

결론 : 알고 쓰자 ㅋ

https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaEncyclopedia/Initialization/Initialization.html

용어 설명

isa  : “is a”

http://stackoverflow.com/questions/3405224/what-does-isa-mean-in-objective-c

Objective C는 선천적으로 C Struct 기반으로 만들어 졌다.

each Struct 들이 class 를 가리키는 pointer field를 가지고 있는데 그것이 isa다.

[Tip] build telegram open source

Telegram 오픈소스 빌드 방법

https://my.telegram.org/

1. Apply apiId, apiHash and then remove assertions.

2. TGTelegramNetworking.mm

[_context setSeedAddressSetForDatacenterWithId:1 seedAddressSet:[[MTDatacenterAddressSet alloc] initWithAddressList:@[

                    [[MTDatacenterAddress alloc] initWithIp:@"your_server_address" port:443]

                ]]];

* link :
http://stackoverflow.com/questions/29230856/telegram-new-source-code-app-id-issue-connection-api-id-invalid