- Build: An Unorthodox Guide to Making Things Worth Making - Tony Fadell
- The Phoenix Project: A Novel about IT, DevOps, and Helping Your Business Win - Gene Kim, Kevin Behr, George Spafford
- The Hard Thing About Hard Things: Building a Business When There Are No Easy Answers - Ben Horowitz
- Structure and Interpretation of Computer Programs - Harold Abelson, Gerald Jay Sussman, Julie Sussman
-
@Outsideris
-
찰스 페졸드의 CODE
-
브루스 테이트의 세븐 랭귀지
-
-
@_Akamig
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Variables used by Scriptable. | |
// These must be at the very top of the file. Do not edit. | |
// icon-color: gray; icon-glyph: magic; | |
// depend on `Cache` | |
// https://github.com/evandcoleman/scriptable/blob/main/src/lib/cache.js | |
// inline `Req` module | |
// https://gist.github.com/yoav-lavi/11e6b9e8e5b807ff20ddbb7d9d515229 | |
const Req = { | |
form: async ({ url, body, headers = {} }) => { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const { createServer: server } = require('http') | |
server((req, res) => { | |
delete require.cache[require.resolve('./run.js')] | |
require('./run.js')(req, res) | |
}).listen(8080) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name = 'image.jpg' | |
with open(name, 'rb') as f: | |
content = f.read() | |
head = content[0:3].hex() | |
mime = 'jpg' | |
if head == '89504e': mime = 'png' | |
elif head == '474946': mime = 'gif' | |
# else head == 'ffd8ff': mime = 'jpg' |
튜토리얼에 있는대로 간단하게 Ok(result.asJson)
만 썼는데도 뭘 고쳐도 계속 에러가 나는 경우가 있다. 이 에러들 중 대부분은
value Ok in trait Statuses does not take parameters
라는 메시지일텐데, http4s 튜토리얼을 따라하다보면 자주 만나는 에러 중 하나다.
상태(status)에 정보(body)만 담아서 클라이언트에게 반환을 하려는 경우에 이런 문제가 왜 생기는지 짚어보자.
이렇게 Ok()
처럼 상태를 생성하고 싶을 때는 Status.apply
가 호출될 것 같지만, 이런저런 변환을 통해
Entity를 생성하는 로직으로 흐르게 되고 그 과정에서 생성하기 위한 인코더(EntityEncoder) 정보를 필요로 하게 된다. 여기까지가 간단한 이유였고 소스를 살펴보자.
Entity를 생성하는 경우는 3가지가 있다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
type passport = { | |
byr: option<int>, | |
iyr: option<int>, | |
eyr: option<int>, | |
hgt: option<(int, string)>, | |
hcl: option<string>, | |
ecl: option<string>, | |
pid: option<string>, | |
// cid: option<string>, |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function inspect(obj, keyword, curr) { | |
if(!obj) return [] | |
const keys = Object.keys(obj) | |
let ret = [] | |
for(let i=0; i<keys.length; i++) { | |
const value = obj[keys[i]] | |
if(typeof value == 'object') { |
함수형 프로그래밍에 중점을 둔 스칼라 책들은 훌륭한게 많지만 초심자부터 전문가까지 단계별로 가이드할 수 있는 커리큘럼을 추천하려고한다.
- 초보자거나 스칼라 입문이라면:
- 데이브 거넬과 노엘 웰시의 크리에이티브 스칼라(무료). 스칼라를 배우려는 입문자들을 위한 책이고 재미있다.
- 노엘 웰시와 데이브 거널의 에센셜 스칼라(무료). 견고하고 성능좋고 스칼라다운 코드를 짜도록 도와준다. 다른 언어의 경험이 있는 개발자들을 대상
- 더 심도있는 개념을 원하면:
- 폴 키우사노와 루나르 비아르드나손의 스칼라로 배우는 함수형 프로그래밍($36, 2.8만). 객체지향의 디자인패턴처럼 함수형 프로그래밍에서 자주 쓰이는 패턴인 데이터와 타입클래스들이 어떤 개념인지 직접 구현해보는 책. 스칼라 문법 정도는 익힌 개발자 대상.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
object Main extends App { | |
// boilerplate | |
import scala.reflect.runtime.universe._ | |
def show[T](value: T)(implicit tag: TypeTag[T]) | |
= tag.toString.replace("Main.", "") | |
// type-level programming |
NewerOlder