Skip to content

Instantly share code, notes, and snippets.

View jooyunghan's full-sized avatar

Jooyung Han jooyunghan

View GitHub Profile
@jooyunghan
jooyunghan / chapter10-reactive.md
Last active December 17, 2018 12:28
개미수열 10장 리액티브 스트림

10장 리액티브 스트림

이 장에서는 개미 수열을 웹으로 출력해 보자. 개미 수열의 100 번째 줄을 알고 싶으면 http://ant-seq.com/100 에서 볼 수 있게. 그러는 중에 뭔가 새로운 개념을 하나 살펴볼 것이다. 이 장에서 살펴볼 개념은 바로 리액티브 스트림이다.

노드로 시작

노드(Node)를 이용하여 개미 수열을 출력하는 서버를 만들어보자. "Hello World" 예제를 조금 바꿔서 빠르게 구현해 보자.

@jooyunghan
jooyunghan / EntityBody.java
Last active October 7, 2018 18:18
Java Nested Multipart
package com.jooyunghan;
import org.apache.http.HttpEntity;
import org.apache.http.entity.mime.content.ContentBody;
import java.io.IOException;
import java.io.OutputStream;
public class EntityBody implements ContentBody {
private final HttpEntity entity;
@jooyunghan
jooyunghan / main.go
Created October 4, 2018 14:52
multipart writer example with json
package main
import (
"bytes"
"encoding/json"
"fmt"
"mime"
"mime/multipart"
"mime/quotedprintable"
"net/http"
@jooyunghan
jooyunghan / crypto_example.go
Created September 18, 2018 17:30
Crypto example in Go
package main
import (
"bytes"
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"fmt"
)
@jooyunghan
jooyunghan / interpreter.js
Created January 27, 2018 15:37
generator/interpreter 설명 예제
const data = {
users: {
u1: "UserName1",
u2: "UserName2",
u3: "UserName3",
u4: "UserName4"
},
groups: {
FP: ["u1", "u2", "u3"],
OOP: ["u2", "u3"]
@jooyunghan
jooyunghan / fetch.js
Last active January 24, 2018 02:17
Fetch/Batch
// Blog example
const getPostIds = () => dataFetch({ type: 'FetchPosts' });
const getPostInfo = id => dataFetch({ type: 'FetchPostInfo', id });
function* blog() {
let [ids, x] = yield [getPostIds(), getPostIds()];
return yield ids.map(id => getPostInfo(id));
}
@jooyunghan
jooyunghan / rdparser.js
Created January 15, 2018 09:18
RD with CPS
const FAIL = {};
const CALL = {};
let _input;
let _pos;
function parse(input) {
_input = input;
_pos = 0;
@jooyunghan
jooyunghan / 댓글.md
Last active January 14, 2018 16:43
hikaMaeng 님께 답글

hikaMaeng 님께서 질문 주신 글에 대한 답변입니다.

FAIL??

FAIL 같은 건 좀 필요없어 보이기도 하네요. 흠. 그냥 파서 함수 코드를 읽기 쉽게 하려다 보니 쉽게 접근한거 같습니다.

먼저 Recursive Descent Parser를 짧게 소개하면서 "문법에 따라 거의 기계적으로 만들 수 있기 때문에"라고 했습니다.

바로 이 부분을 강조하려고 하다보니 이러한 모양이 나왔습니다.

@jooyunghan
jooyunghan / gen-rd.js
Created January 12, 2018 13:57
RD parser using Generator
const FAIL = {};
let _input;
let _pos;
function parse(input) {
_input = input;
_pos = 0;
let stack = [parens()];
@jooyunghan
jooyunghan / trampoline.js
Created January 12, 2018 13:26
trampoline을 이용한 상호재귀
function even(n) {
if (n === 0) return true;
else return () => odd(n-1);
}
function odd(n) {
if (n === 0) return false;
else return () => even(n-1);
}
function trampoline(f) {
while (typeof f === 'function') {