Posts
-
F#
[F#] F# Computation Expression 톺아보기
F# 의 Computation Expression 의 표현력은 세계 제일! 서론. 모나드와 Expression Haskell 이나 Scala 같은 타 함수형 언어의 경우 Monad 를 위한 문법으로 Do/For 와 같은 Expression 이 존재한다.C# 이나 Kotlin 또는 JS/TS 같은 경우는 Future Monad 에 대해서만 유효한 async / await 문법이 존재하고, Null(Optional) Monad 에 대한 ?. (옵셔널 체이닝) 문법이 존재한다.위 문법은 Syntax Sugar 이며, 없어도 대게 메서드 체이닝으로 쓸수는 있다.즉 함수형에 가까운 언어는 Do/For 와 같이 그냥 "Monad" 자체에 대한 문법을 제공해서 내가 모나드를 설계하면 동작하고,그렇지 않은 언어는 언어..
-
JAVA | Kotlin
Behavioral Programming 라이브러리를 코틀린에서 구현해보자 feat Channel
Clojureverse 는 지식의 원천Clojureverse를 돌아다니다가 Behavioral Programming이라는 작은 패러다임에 관한 포스팅을 발견했다. 이 글을 보고 Behavioral Programming에 대해 좀 더 찾아봤는데, 주류는 아니지만 개인적으로 흥미가 생겼다.BThread라는 독립적인 Behavioral을 작성하고, BThread들이 조합되면서 하나의 BProgram이 완성되는 구조다. 복잡하게 얽히고 설킨 소프트웨어의 레고 블록들을 sync라는 공통된 이벤트 기반 시스템으로 관리하여 완성시킨다는 이론이다.절차 지향부터 함수형에 이르기까지 모든 소프트웨어가 공통적으로 추구하는 방향성은 모듈화와 그로 인한 레고처럼 조립하는 시스템이다. Behavioral Programming의 ..
-
토이
대한 축구 협회 프로그래밍 랭기지를 만들어보자 되도록 튜링완전하게..
대한축구협회 프로그래밍 랭기지 KFAlang 의 레포는 여기Lee-WonJun/KFAlang: 축구협회 프로그래밍 랭기지 (github.com) GitHub - Lee-WonJun/KFAlang: 축구협회 프로그래밍 랭기지축구협회 프로그래밍 랭기지. Contribute to Lee-WonJun/KFAlang development by creating an account on GitHub.github.com누군가 내 임기 도중 이뤄냈던 실적 에 대해 점수를 매겨보라고 한다면 10점 만점에 720점 정도는 된다고 대답하고 싶다누군가 내 임기 도중 이뤄냈던 명예 에 대해 점수를 매겨보라고 한다면 10점 만점에 690점 정도는 된다고 대답하고 싶다누군가 내 임기 도중 이뤄냈던 축협 에 대해 점수를 매겨보라고 한..
-
JAVA | Kotlin
Kotlin DSL 에 다양한 제약사항을 적용해 보자 Feat [Contract]
필자는 Fluent API DSL 보다 Kotlin Type safe builder 를 활용한 DSL 을 좋아하는데, 보기에 좀더 깔끔하기 때문이다.Flunet API 는 Chaining 신경써야 하고 Depth 파악이 더 어렵기 때문그러나 Fluent API의 경우 Class Method Chaining 을 기반으로 하기 때문에 Class base 로 제약조건을 걸기가 좀더 쉽다. 예를들어, Name Age Email 을 받아서 User 를 만드는 Builder 를 설계한다고 해보자.제약 조건은 다음과 같다.1. age 는 Optional2. Name -> Email 순으로 받아야 하며, Required Field 이다 (일종의 Step)물론 해당 조건은 Compile Time 에 해당 제약 조건이 적..
-
Functional Study
[Monad] 내멋대로 Monad 이해하기 - Kleisli🐟
모나드 다 제끼고, 아래와 같은 함수가 있다고 하자type User = {id:int}let nonSafeParse (str:string) = match Int32.TryParse str with | true, value -> value | _ -> raise (ArgumentException("Invalid input"))let nonSafeCreateUser (id:int) = if id = 0 then raise (ArgumentException("Invalid input")) else {id=id}let nonSafeParseAndCreateUser = nonSafeParse >> nonSafeCreateUserlet nonSafeWay1 = "1" |> n..
-
JAVA | Kotlin
[Ktor] + kts 활용해서 Dynamic Endpoint 만들기
Lee-WonJun/ktor-dynamic-endpoint-kts: Ktor-based server application sample that dynamically creates endpoints based on uploaded Kotlin script (.kts) files. (github.com) GitHub - Lee-WonJun/ktor-dynamic-endpoint-kts: Ktor-based server application sample that dynamically creates endpoints based onKtor-based server application sample that dynamically creates endpoints based on uploaded Kotlin scrip..
-
JAVA | Kotlin
Kotlin 초기화 코드 제너레이터
Lee-WonJun/reverse-dummy-kt (github.com) GitHub - Lee-WonJun/reverse-dummy-ktContribute to Lee-WonJun/reverse-dummy-kt development by creating an account on GitHub.github.com예전에 dotnet 판을 만들었었는데, 이번에는 Kotlin 판.. 리플렉션 확인겸..사족) kotest 에서 string 이 컴파일 가능한지 확인하는 extension 이 있는데, 예전에는 잘됫는데.. extension 으로 분리되고부터 뭔가 잘안되서 그냥 string 비교로 검사함..
-
JAVA | Kotlin
코틀린으로 살펴보는 Y 컴비네이터 (Feat Fixed Point)
- Y-Combinator를 사용한 함수 고정점 소개 과 [Kotlin Pearls 8] Recursion, Tail Recursion and Y Combinator | by Uberto Barbini | ProAndroidDev 의 Y Combinator 부분 간단한 요약임 재귀함수간단한 재귀함수를 짜보자// 재귀 함수를 짜보자fun factorial (n: Int): Int { if (n == 0) return 1 return n * factorial(n - 1)}짜잔!재귀는 자기 자신을 호출하므로, factorial 내부에서 factorial 을 호출하면 된다. 람다로 짜보자val factorialLambda: (Int) -> Int = { n -> if (n == 0) 1 els..
-
Clojure
Clojure 의 매크로 시스템의 튜링완전 (애매한) 증명 feat SKI
우리가 하는 일반적 (Generic) 프로그래밍 언어는 튜링완전하다.즉 튜링완전 관점에서 완전히 동치이고, 튜링완전한 언어 A 에서 가능한 일은 이론적으로 B 에서도 가능하다. Scala / Haskel / F# .... TypeScript 등 언어의 "타입 시스템" 구조 자체가 튜링 완전하며, Type System 만을 이용해서 모든 기능을 이론적으로 구현 할 수 있다. - 타입스크립트 타입 레벨 프로그래밍 (velog.io) 참고타입 레벨 프로그래밍이라고도 하는데, 정적타입언어에서 안전한 프로그래밍을 만들기 위하여 종종 쓰는 패턴이다 암튼, 튜링완전 조건은 다음과 같은데 (나무위키 피셜)- 조건 분기문이 있다. if (...) then goto (...). 또는 branch if zero 등. fo..
-
기타 정보
[DB] 현재는 모든 과거의 필연적인 산물이다 - Bitemporal 을 곁들인 타임머신
현재는 모든 과거의 필연적인 산물이다 Block Chain은 일종의 불변 + 분산 데이터베이스로 간주될 수 있다.이러한 불변성이 적용된 데이터베이스 시스템도 있는데, 이를 불변(immutable) 데이터베이스라고 한다.Datomic을 예로 들 수 있다.Datomic - Overview Datomic - OverviewNever Forget Critical insights come from knowing the full story of your data, not just the most recent state. Datomic stores a record of immutable facts, which gives your applications strong consistency combined with ..
-
JAVA | Kotlin
Hibernate Query Plan 으로 인한 OOM 방지
한 2년전에 발생한 문제인데, Query Plan QueryPlanCache (Hibernate JavaDocs) (jboss.org) QueryPlanCache (Hibernate JavaDocs)Obtain the parameter metadata for given native-sql query. for native-sql queries, the param metadata is determined outside any relation to a query plan, because query plan creation and/or retrieval for a native-sql query depends on all of the return typesdocs.jboss.org 간단히 말하면SQL -> 쿼리..
-
OSS | 컨트리뷰션
안전모를 쓰고 Base Chain 을 여행하는 나그네를 위한 쉼터
, 쉼표 [Comma] 쉼표 [Comma], 그 아름다움은 쉼표라는 이름 그 자체에서 느껴진다. 그 중요성은 이루 말할 수 없다. 동방의 작은 나라의 개발자가 찾은 쉼표의 가치는 음속을 넘어 광속의 속도로 전 세계 모든 개발자들과 공유되리라. 개발자로서의 여정은 때로는 고독하고 때로는 흥미진진하다. 그 여정에서 쉼표 같은 순간은 정말 소중하다. 최근 나에게는 그런 쉼표 같은 순간이 있었다. 바로 BASE-CHAIN 프로젝트의 공식 컨트리뷰터로서 첫 발을 내딛게 된 것이다. 개발하면서 혼자 나는 누구? "BASE-CHAIN OFFICIAL CONTRIBUTOR" 하면서 웃으니까 기분도 좋아지네. 이래서 자리가 사람을 만든다는말이 나온것 같다 ... Fix Typo in hardhat.md by Lee-Wo..
-
기타 정보
AppSync Subscription Data Field가 DB 에는 있지만, null 로 오는 경우 (Feat GraphQL)
그래프ql (AWS AppSync) 에서 에서 저장된 데이터를 실시간으로 땡겨오기 위하여 Subscription 을 사용 할 수 있는데띠용 분명히 DB 에는 데이터가 있는데, Subscription 하니까 특정 field 가 null 로 오는 경우가 발생..무엇이 문제인고 하니..Event fields - Real-time data with subscriptions - Building GraphQL APIs with AWS AppSync (graphql-on-aws-appsync-book.com) AppSync only fills the subscription events with the fields that the mutation defined. AppSync 는 (다른 그래프ql 은 몰?루) mu..
-
토이
주술회전 대사로 프로그래밍을 해보자
Lee-WonJun/Jujutsu-Kaisen-lang: 주술회전 명대사 프로그래밍 언어 (github.com) GitHub - Lee-WonJun/Jujutsu-Kaisen-lang: 주술회전 명대사 프로그래밍 언어주술회전 명대사 프로그래밍 언어. Contribute to Lee-WonJun/Jujutsu-Kaisen-lang development by creating an account on GitHub.github.com 일전에 [LolChatLang] 롤챙 프로그래밍 언어를 만들어보자 (tistory.com) 에서 F# 으로 프로그래밍언어를 만들어 봤는데, 이때는 monadic parser 를 사용하지 않고 한땀 한땀 만들었다. 이번 설 연휴에 뭐라도 해볼까 하다가, monadic parser를 ..
-
Functional Study
부분함수 (Currying) 에서 Generic 유지하기 in Kotlin / F#
함수형 패러다임에서는 OOP Style 로 변수들을 모아두는 대신, closure 캡쳐식으로 유지하는데, 보통 Currying 이 자동으로 적용되서, 부분함수를 쉽게 만들수 있다. let add (a: int) (b: int) = a + b let addOne = add 1 let result = addOne 2 parameter 2개를 받는 함수 add 에 파라미터를 한개만 넣으면, 자동으로 해당 값은 캡쳐되고 파라미터 한개를 받는 함수 (부분적 으로 적용된 함수 -> 즉 부분 함수 PartialFunction이다 ) 그리고 이렇게 걍 파라미터를 들 적으면 알아서 부분함수가 되는게 Currying 이라고 한다. Kotlin 은 어디까지나 기본 철학은 OOP 위에 쌓여있는 언어이기 때문에 Currying..
-
토이
트랙볼을 활용한 가난한자의 레이싱휠 제작
서피스 다이얼을 볼때 마다 생각했다.. 저거 빙글빙글 돌아가는거면, 레이싱휠로 쓸수있는거 아닌감? 그렇게 생각하고 어언 4년이 다되가는데, 오늘 갑자기 진짜 레이싱휠을 로 만들수 있지 않을까 생각하다가, 저 쓰잘때기 없는 서피스 다이얼을 살까 고민까지 했다.. 근데 12만원이라는 창렬한 가격에 고민하던 도중.. 옆을 봣는데 엥 여기 있는 빙글빙글 휠 쓰면 되는거 아님? 영웅은 고민따위 하지않는법 일반 마우스휠이라, 별도 서피스다이얼(Windows Wheel) 라이브러리 같은것도 필요없이 걍 마우스 휠 이벤트 후킹해서 가져오면된다. (따라서 그냥 마우스 휠로도 조작이 된다) 다만 휠처럼 부드럽게 움직이지는 않으므로 적당히 감안해서.. (여담. 이거아니었으면, 한 만원되는 볼륨조절용 노브사서, 음량에 따라 ..
-
대외활동 기록
Ethcon Korea 2023
이번에는 Ethcon Korea 2023에서 Senshilabs 팀으로 참가했다. 이더리움 이벤트 중에도 꽤나 규모가 있는 행사라서 기대 반, 긴장 반으로 갔는데, 전날에도 야근하고.. 해커톤와서 진짜 2박 3일동안 개발하니까. 정신이 어질어질 프로젝트로는 'Decohacks'라는 탈중앙화 기반의 해커톤 플랫폼을 만들었고, 기술 스택으로는 이더리움 Layer2의 optimism과 linea(요건 결국 동작 몬함 ㅠㅠ) 를 활용하였고 여기에 PSE 의 Semaphore 를 이용하여 zkp 익명투표를 구현하였다. 솔리디티는 진짜 오랜만에 짜봐서, 환경세팅하는데 시간이 좀 걸렸고, 특히 나는 지금까지 고냥 remix 에 한두개 작성하는게 끝이었던 터라.. 진짜 솔리디티환경에서 개발하는게 쵸큼 빡셋다. 해커톤에..
-
대외활동 기록
Hackathon in Undefined Hacker House Tokyo feat Astar Chain
무려 도쿄까지 가서 해커톤을 진행했다. (꽁으로 항공비 지원 개꿀) 그렇기 때문에 발표도 영어로 진행 우리 프로젝트는 NINJA[Ninja is an Interface for NFTs and a Junction of AI] 로 AI 툴인 ComfyUI 에 Blockchain 을 결합한 커스텀 플러그인을 제공하는 프로젝트이다. Astar Chain 이 후원사기 때문에, Astar Chain 과 연동하는걸 위주로 좀 진행했고, 조금 신생 체인이라, 고생 (억까) 을 좀 했다. 또, XVM 이라고 솔리디티도 지원하고 Rust 도 지원하는 멀티 VM 인데, 우리팀은 둘다 타게팅해서 개발하였다. 온라인으로 열흘정도 + 오프라인 2일이라, 온라인시즌중 주말에 날밤을 새가며.. 만들었고, 오프라인 기간중에는 Asta..
-
대외활동 기록
Hackathon in Sui Builder House Seoul / 2nd 수상
오랜만에 하는 해커톤이자, 정말~~~ 오랜만에 만져보는 Blockchain 도메인.. 팀 Senshilabs 로 나를 포함하여 꼴랑 2명.. 이서 참가해서 사실 상은 기대도 안했는데.. 개발자 틱이 강한 팀이라 암묵적인 가산점이 있었던 것인지... 아니면 우리의 프로젝트가 그만큼 인상적이었던 것인지는 모르겠지만, 이게 왠걸! 무려 2등이 되어버렸다. 다사다난 Sui 의 경우 Smart Contract 를 Move 라는 언어로 작성하게 되는데, 프로그래밍 랭기지에 대한 철학을 즐기는 본인으로써, 첫인상은 확실히 좋았다. 하지만 처음 해보는건 처음해보는 것. 언어, 초기 세팅, 설치, Docs 모든것이 처음이었고, 해당 해커톤은 꼴랑 10:00 am ~ 00:00 am 까지 14시간밖에 주어지지 않는 해커톤..
-
토이
[CodePaper] 코드들을 하나의 md 문서에 모으기
킹갓 GPT 한테 코드를 물어보거나 리뷰 받을때가 있는데 이 친구가 import 한 다른 code 는 잘 모르기 때문에, 가끔 이상하게 리뷰해준다. 근데 그럼 다른 코드 다 긁어와서 알려달라고 하면 되는거 아닌감? 하는 생각에 특정 폴더의 특정 확장자를 전무 모아서 하나의 md 문서에 모아주는 SW 를 만들었다. 를... GPT 한테 물어봐서 만들었다. 정확하는 90 퍼는 GPT 가 만들고 내가 10퍼정도 수정함. GPT 한테 코드를 물어보기위한 코드를 GPT 를 통해서 만들었다. 물어본 김에 Readme 도 만들어 달라고함. Lee-WonJun/CodePaper: CodePaper is a command-line interface (CLI) program written in F# that reads a..
-
토이
[GPT] AI-Powered 심리테스트
저어어언부 AI 한테 맞기고 나는 답변 전달하는 API 하나만 Fastapi 로 뚫어서 만들어보았다. AI-Powered 심리테스트 돈쓰기 싫어서 오라클 평생무료 VM 하나 뚫어서 올려두었다. 돈쓰기 싫어서 지금 GPT API 기본 7달러? 무료로 주는것만 사용하도록해서, 사용자가 조금 많아지면 바로그냥 Error 뿜뿜 + 4월 1일인가 만료 ㅠㅠ 원래 애니메이션 기반으로 결과가 나오도록 했는데, GPT 이 친구가 서브컬쳐에는 조예가 없는지 자꾸 가상의 애니메이션만 추천하길래, 그냥 GPT 가 모를리 없는 원소번호랑 매칭시키도록 했다. 참고로 AI 가 결과를 만드는거라, 좀 오래걸리고, 같은 응답이라도 결과가 변경될 수 있다. (캐시를 먹이긴 했는데, 의도적 시간이 지나고 다시하면 다른결과가 나오도록 캐..
-
JAVA | Kotlin
Kotlin ServerResponse 에 대한 DSL 을 구축해보자!
[Spring Boot] + Kotlin 에서 Route + Beans DSL 을 사용해보자 (tistory.com) [Spring Boot] + Kotlin 에서 Route + Beans DSL 을 사용해보자 전통적인 Spring 의 방식 (MVC) 는 컨트롤러 + 서비스 + 레포를 어노테이션으로 등록하고, Spring 이 Bean으로 등록해서 슈슈슉 뜨는 방식인데, 나도 Spring 쓸때는 이렇게 작성하긴 하는데 개인적으로 선 see-ro-e.tistory.com 일전에 요 Post 에서 Kotlin Spring Boot 에서 Route Dsl 을 사용하는것을 확인했고 Kotlin SQL DSL 을 구축해보자! 쓸 수 있는 방법을 전부 동원해봐서! (tistory.com) Kotlin SQL DSL ..
-
토이
[ChatGPT] API 가 나온 기념 AI 끼리 신나게 놀게 해보자
GPT API 야 원래 부터 있었는데, 이번에 아주 싸게, 그리고 성능좋게 GPT turbo 모델을 사용할수 있다고한다. 또 개발자로써 이런건 함 써줘야 인지상정 뭘 짜볼까 고민하다가, 예전에 본 짤로 AI 끼리 대화시키는게 있었는데 그게 생각나서 AI 끼리 무제한 토론을 시켜보았다. 처음에는 잘못짜서 그냥 매번 새롭게 대화해서 하루죙일 인사만 서로 인사만 하더라 Lee-WonJun/Humans-are-not-necessary-in-this-conversation: Chat GPT 끼리 대화를 시켜보고 싶다 (github.com) GitHub - Lee-WonJun/Humans-are-not-necessary-in-this-conversation: Chat GPT 끼리 대화를 시켜보고 싶다 Chat GP..
-
JAVA | Kotlin
[Spring Boot] + Kotlin 에서 Route + Beans DSL 을 사용해보자
전통적인 Spring 의 방식 (MVC) 는 컨트롤러 + 서비스 + 레포를 어노테이션으로 등록하고, Spring 이 Bean으로 등록해서 슈슈슉 뜨는 방식인데, 나도 Spring 쓸때는 이렇게 작성하긴 하는데 개인적으로 선호하는 방식은 아니다. 개인적으로는 route data (혹은 function) 으로 조합가능하게 짜는 방식이 더 우아하다고 생각한다. 다만 Webflux 의 경우 (Java 에서도) Route Function (Functional Endpoints) 방식을 사용할수있는데. MVC 는 딱히 없는걸로 알고있었다. 근데 JAVA 라 DSL 그렇게 이쁘지는 않다. LinkedIn post 를 보다가, JetBrains 에서 발표한 자료에서 Kotlin Beans DSL 이 있는것을 보고 좀 ..
-
JAVA | Kotlin
Kotlin SQL DSL 을 구축해보자! 쓸 수 있는 방법을 전부 동원해봐서!
라이브러리를 설계하는 일은 사실 언어를 설계하는 일이다 (벨 연구소 격언) C# 언어에는 LINQ 라는 문법이 존재한다. SQL의 Query 문과 유사한 문법으로 map/reduce/filter 를 수행 할 수 있으며, ORM (엔티티 프레임워크) 에서도 지원되서 진짜 쿼리짜듯이 C# 코드내 작성이 가능하다. 당연히 언어에 내장된 DSL 이기 떄문에, 컴파일체크도 되고, IDE 의 도움도 받을수 있고, 원하는 대로 조작할수도 있다. (함수 조합이 가능하다.) C# 으로 일하다가 Kotlin (JAVA 계열) 로 넘어와서 느끼는 가장 불편한 점중 하나는 이런 SQL 을 위한 DSL 이 없다는점이다. Spring boot 의 JPA 방식인 function name 으로 sql 을 생성하는 기괴한 방식은 말할..
-
토이
[PassThrough] 지하철역 근처 음식점 포장 주문
친구랑 지하철 적자에 대하여 토론하다가 [지하철 타는 시간] 이 아까워서 이때 뭔가를 할수있어야한다. 라는 논리로 개발을 시작한 어플리케이션 PassThrough 이다. 처음에는 어마어마하게 큰 규모로, 이런 전용 플랫폼을 구축하고.. 가맹점을 찾고.. 해야하나 생각하다가 그냥 이미 있는 포장/배달 어플에서 좌표만 찍어주면 되는거 아닌가 해서 쓱 찾아보니까 네이버 주문 url 로 lat,long 을 받길래 + 내가 못찾은 건지 모르겠는데 네이버 주문이 역 근처 검색하기가 조금 불편하길래, 이걸 개선해서 역을 찾으면 WebView 로 네이버 주문을 띄워주도록 했다. 즉 내가 한건 아무것도 없고 다 네이버 주문님께서 만든 페이지에 기생했다는 의미.. (수익 창출 목적이 아니니까 괜찮겠지...?) 개발환경은 ..
-
토이
[IHFK] 짜증나는 키오스크 개 뿌수는 게임
가끔있다. 쓰면쓸수록 화가나는 키오스크가... (특히 결제 버튼 숨겨둔 M 사.. 의 이전버전 키오스크) 그래서 친구랑 만들었다. I HATE FXXKING KIOSK 일명 키오스키 개뿌수기 게임 레포는 Mini-Tech-Meetup/IHFK: [WIP] "I Hate F**king Kiosk" Game (github.com) GitHub - Mini-Tech-Meetup/IHFK: [WIP] "I Hate F**king Kiosk" Game [WIP] "I Hate F**king Kiosk" Game. Contribute to Mini-Tech-Meetup/IHFK development by creating an account on GitHub. github.com 게임은 I Hate FXXKing K..
-
Functional Study
[Algebraic Effect] 내 멋대로 대수적 효과 이해하기 feat Continuation
[Effect 가 싫어요]Functional Programming 에서는 효과(== 사이드 이펙트) 를 분리해서 Monad 로 순수하게 디자인하는 패턴이 아주 흔하다,Haskell 의 IO 모나드가 가장 대표적인 예시 인데, 이런 "모나딕" 한 방식이 아니지만, 효과를 분리해서 처리하는 다른 디자인중에 하나가 Algebraic Effect [대수적 효과] 이다 이번에 Epic Games 에서 Verse 라는 언어를 발표했는데 이 언어는 Effect 를 Monadic 이 아닌 Effect system 으로 처리한다고 하는데, 정확한 내용은 안나왔지만 아마 Algebraic Effect 방식으로 추측된다.Algebraic Effect 을 기반으로 설계된 언어는 Eff , Unison 등이 있고 보면 알수있..
-
토이
[LolChatLang] 롤챙 프로그래밍 언어를 만들어보자
지인이 말한 all 함수 편하다 -> 올 ㅋㅋ -> 함수명이 올 ㅋㅋ 으로 지어도될듯 -> 진짜/시발/근데/아니 짤 -> 이거 롤 채팅 아니냐? 라는 기적의 야크털 깎기식 논법으로 프로그래밍 언어를 하나 만들어보자는 생각이 들었고 주말동안 뚝딱 만들었다. (사실 밤샘) 언어 롤챙 (LolChatLang) 이다 https://github.com/Lee-WonJun/LolChatLang GitHub - Lee-WonJun/LolChatLang: 롤채팅식 프로그래밍 언어 [롤챙] 롤채팅식 프로그래밍 언어 [롤챙]. Contribute to Lee-WonJun/LolChatLang development by creating an account on GitHub. github.com 이러한 파서를 만들때, 구문만..
-
Functional Study
[함수형 미세 팁] 파라미터 3개 이상의 Function 으 로 Reduce 하기
reduce / fold 는 함수형 프로그래밍의 hello world 같은 존재로 요즘에는 뭐 워낙 많이쓰기 때문에 자세한 설명이 필요없겠지만 간단하게 도식화 하자면 다음과 같다 위 예시는 [1 2 3 4 5 6 7] 의 시퀀스에 + 로 reduce 돌린 결과다. reduce 는 다루기 위험한 index 기반 for문의 아주 휼륭한 대체제로, 단순히 값을 계산해 내는 방법부터, reduce 로 ListA 에서 ListB 로 변환 (map) / ListA 에서 특정 추출 (filter) 도 reduce / fold 함수로 구현할수있다. (즉 List[A] 를 reduce 한다고 A 가 나오는건 아니라는거) 뭐 이게 중요한게 아니고 위와 같이 동작하다보니, reduce 에서 받는 함수는 기본적으로 F(X,Y..
-
Functional Study
[liftIO] 빠르게 올리는 함수형 컨퍼런스 liftIO 2022 후기
liftIO 2022 | Festa! liftIO 2022 | Festa! Festa에서 당신이 찾는 이벤트를 만나보세요. festa.io 작년에 이어 liftIO 가 올해도 개최되었다. 작년과 다르게 Offline 이라는점 우리같은 힙스터 함슬람에게 그린랩스 Dev 와 liftIO 는 몇 안되는 컨퍼런스이기 때문에 이번에도 참석하게 되었다. 참고로 [liftIO] 함수형 컨퍼런스 liftIO 후기 (tistory.com) 이건 liftIO 2021 후기 저번에 받은 lift IO 티셔츠를 입고갔다가 주최자분이 알아봐 주셔서 잠시나마 네트워킹 시간도 가졌다. 구조적 귀납증명 / PBT / TypeClass / Haskell DSL(?) / Elixir ... 등등 유용한 세션이 있었고 개인적으로는 1. ..
-
JAVA | Kotlin
Kotlin 의 Lambda 문법으로 DSL 을 구축해보자
DSL 을 Kotlin / Scala 에서 구현할때 자주 사용하는 기법중 하나는 Last Parameter 의 람다 를 {} FileWriter(outPath).use { fileWriter -> fileWriter.write(fileReader.readText()) } } // DSL 쓸때 fileScope(inPath, outPath) { (fileReader, fileWriter) -> fileWriter.write(fileReader.readText()) } } // DSL 용 헬퍼 Class / 함수 data class Rewriter(val fileReader: FileReader, val fileWriter: FileWriter) fun fileScope(inPath: String, outP..
-
Functional Study
Delimited Continuations 가 대체 뭔데?
본 포스팅은 후속문 자체의 정의와 설명에 관한 내용이 아니므로 후속문의 개념은 너무나도 잘 쓰여진 아래 링크 참조 (거의 유일한 한글자료이자 아주 상세하게 쓰여진 자료) Computat ergo est: 후속문(Continuation) : 제1부. 개념과 call/cc (guruma.github.io) Delimited Continuations 이 무엇인지 파악하기 위하여 Continuations(후속문) 을 개념적인 Level 에서 훑어 보자 CPS (Continuations Passing Style) 흔히 callback 이라고 부르는 방식이다. Continuations (후속 작업을) Passing(넘기는) Style(스타일) First-Class Continuation 후속문 자체를 1급 시민으로..
-
토이
[Toy] GitDot - Canvas로써 의 Github
Github 의 Profile 에서는 Commit (contribution) 내역을 볼수있다. 활동을 하면 하면수록 해당 날짜에 해당하는 Cell 이 더 밝은 초록색이 되는데, 그래서 보통 "잔디" 심는다고 표현한다. 1일 1커밋으로 모든 셀을 다 초록색으로 만드는 사람도 있는가 하면, 이걸로 그림을 그리는 사람도 있다. 다만 git은 기본적으로 local 에서도 돌아가도록 설계되어있으므로 Commit 의 시간은 진짜 commit id 의 time 을 따라가게 된다. 즉 Local 에서 Commit Time 을 변경하고 Push 하면 그 변경된 Time 에 잔디가 심어지는 것이다. 뭐.. 나는 애초에 1일 1커밋같은거 신경도 안쓰고 있기 때문에 굳이 조작해서 커밋을 늘릴 생각은 없는데, 윈도우 작업관리자..
-
Functional Study
[Monad] 시퀀스를 여행하는 모나드를 위한 안내서
제목이 저런 이유는 Sequence / Traverse 에 관한 내용이기 때문.. Sequence 개발을 하다가 보면 List 같은 형태의 Option/Result 가 필요한 경우가 생기게 된다. 실무에서 자주쓰는 대표적인 예시중에 다음 같은것이 있다. N 개의 URI 에 응답을 조합한다, N개중 1개라도 응답이 오지않으면 Fail 이다. MSA 에서 API Composition 할때나, FE 에서 Server 에 여러번 요청을 할때 등등.. 상당히 많이 쓰이는 로직이다. 간단하게 예시를 들어서 다음과 같다고 해보자, 편의를 위하여 가장 기본적인 Type만 사용하였다. 내 블로그에서 001~003 까지 결과를 알려주는 함수 MyBlog 를 짠다. 요청해야할 URI : ["see-ro-e.tistory.c..
-
F#
[F#/Fabulous] fabulous version 2 로 안드로이드 앱 만드는 기나긴 여정
BE 엔지니어가 FE 프로그래밍을 하면서 생긴 [마이너(F#) X 마이너(멀티플랫폼) X 마이너(Fabulous) X 마이너(Version 2)] 의 환장의 콜라보 발단 - 회사의 식대카드중 하나의 사용자 기록을 내가 기록하게됨 - 슬랙에 매번 작성하는데 먹은 사람들 이름 적는게 너무 귀찮음 - 그렇다고 완전 자동화 SW 를 짜기는 너무 어려움 - 그럼 관리를 도와주는 Helper SW 를 짜자! 라는 기적의 논리로 앱을 하나 짤 계획을 세웠다. 최종결과물은 아래와 같은 아주~~~ 간단한 앱이다. 가격, 장소를 입력하고 먹은 사람들은 버튼을 눌러서 추가하고 SEND 를 보내면 슬랙으로 Noti가 오는 그런 시스템.. 너무 간단한 SW 이기 때문에.. 업무에서 사용하고있는 Kotlin 이나 아니면 뭐 MA..
-
JAVA | Kotlin
[Jackson] Subtype 별 Polymorphic De/Serialization 을 제공하는 Deduction
Jackson 은 JVM 진영에서 주로 사용하는 JSON 역/직렬화 라이브러리로 JSON 은 이제 Web 에서 빼놓을수없는 포맷이므로.. 자주 사용하게 된다. 그러나 JSON 은 근본이 동적언어인 js 의 (사실상) 표준 포맷이므로, 이를 완전한 정적언어인 Java/Kotlin 등에서 사용할떄 충돌(불일치) 이 발생하게된다. JS 는 같은 이름의 필드지만, 안에 내용물은 쓱싹쓱싹 바뀔수있고, 특히 본인의 경우 가장 신경쓰이는것이, 바로 이질 (Heterogeneous) 적인 Array 이다 {"myset":[ {"name":"Tanker","def":100}, "Dealer", 10]} JS 같은 언어는 Array 에 아무타입이나 전부 들어갈 수 있기 때문에, 막 담아서 보내줄수있는데, 이걸 Jackso..
-
Functional Study
[HKT] Value / Type / Kind 와 Higher Kinded Type (Feat. 고차함수)
시작 하기에 앞서서.. 함수도 값이라는것을 이해해야 한다. 고차함수란 개념 Order (일반적으로 차수) 란 일종의 단계이다 (Higher order function : 고차함수) 이차함수의 차수는 2 다 -> 이차함수의 order는 2다 예시는 Kotlin , 일부 Scala Value 의 세계 Value 와 타입 우리는 일반적으로 프로그래밍을 할때, Value(값) 를 다룬다, 이 Value 을 분류하는 방법을 Type 이라고 한다. val intValue : Int = 5 val doubleValue : Double = 5.0 val functionValue : (Int) -> Int = { x : Int -> x*2 } val highOrderFunctionValue : ((Int) -> Int)..
-
Functional Study
[Expression Problem] 객체 대수 (Object algebras) 와 Tagless Final
[Expression Problem] 표현 문제란? [Expression Problem] Open classes , Protocol , 그리고 확장 메서드 [Expression Problem] Type classes [Expression Problem] Mutiple Dispatch (Feat Visitor / Multi Method) [Expression Problem] 객체 대수 (Object algebras) 와 Tagless Final -> 지금 여기 솔직히 말하면 먼소리는 모르겠는데, 일단 포스팅 이전 장에서 나온 Visitor pattern 의 고오오급 패턴? 같은건데 대수학 (algebra) 개념을 객체에 적용 했다고 보면 될 듯 하다. [해당 글] 을 기준으로, 함수형 예시로 매번나오는 E..
-
Functional Study
[Expression Problem] Mutiple Dispatch (Feat Visitor / Multi Method)
[Expression Problem] 표현 문제란? [Expression Problem] Open classes , Protocol , 그리고 확장 메서드 [Expression Problem] Type classes [Expression Problem] Mutiple Dispatch (Feat Visitor / Multi Method) -> 지금 여기 [Expression Problem] 객체 대수 (Object algebras) 와 Tagless Final Mutiple dispatch 가 무엇인가 부터 알아보도록 하자 dispatch 는 대충 함수 호출이라고 보면 되고, 어느 함수가 호출될까를 결정하는것이 dynamic 하게 dispatch (== 런타임) mutiple (모든 파라미터) 에 따라서 ..
-
Functional Study
[Expression Problem] Type classes
[Expression Problem] 표현 문제란? [Expression Problem] Open classes , Protocol , 그리고 확장 메서드 [Expression Problem] Type classes -> 지금 여기 [Expression Problem] Mutiple Dispatch (Feat Visitor / Multi Method) [Expression Problem] 객체 대수 (Object algebras) 와 Tagless Final type class 는 Haskell (및 Scala + implicit .. , Rust) 에서 주로 사용하는 기능으로 adhoc (임시적) 다형성을 제공하는 기술이다. (Haskell 을 해본적이 없어서 설명이나 예시가 정확하지는 않음..) ty..
-
Functional Study
[Expression Problem] Open classes , Protocol , 그리고 확장 메서드
[Expression Problem] 표현 문제란? [Expression Problem] Open classes , Protocol , 그리고 확장 메서드 -> 지금 여기 [Expression Problem] Type classes [Expression Problem] Mutiple Dispatch (Feat Visitor / Multi Method) [Expression Problem] 객체 대수 (Object algebras) 와 Tagless Final Open Classes , 일명 Monkey patching, 은 확장에 열려있는 Class 를 의미한다. Ruby 에서 주로 땜빵할때 많이 사용하는 기술이다. OOP 식 접근법에서 발전?된 솔루션으로 볼 수 있다. 많이 다르지만, 대충보면 비슷한 ..
-
Functional Study
[Expression Problem] 표현 문제란?
[Expression Problem] 표현 문제란? -> 지금 여기 [Expression Problem] Open classes , Protocol , 그리고 확장 메서드 [Expression Problem] Type classes [Expression Problem] Mutiple Dispatch (Feat Visitor / Multi Method) [Expression Problem] 객체 대수 (Object algebras) 와 Tagless Final 프로그래밍에서 Expression Problem 란 기능을 확장할때 발생하는 문제이다. 표현문제라는 것을 들어본적이 없어도, 분명 경험해본 문제일것이며, 예시를 보면 "아~ 이런적이 있지" 라고 생각할것이다. 어떻게 기능을 확장 할 것인가? OOP ..
-
Functional Study
[Optics/Lens] 내 멋대로 Optics 이해하기 Feat) arrow-kt
불변(Immutable) 은 이미 대세라고 할정도로 중요한 개념으로 자리 잡았고, 대수적 데이터 타입(ADT) 로 디자인해서 이케 저케.. 썸타입이 어쩌고, 곱타입이 어쩌고.. 하는게 요즘 스타일인데, 비단 Haskell / Scala 같은 정통적(?) 인 FP 뿐만 아니라 C# / Kotlin 에서도 ADT 디자인을 위한 목적으로 data class 나 sealed class 를 제공해준다. (따지고 보면 다 ADT 이기도 하고) 그냥 내가 하는 소리가 아니라 진짜 Kotlin release 에서 그렇게 사용한다고 적혀있다. (참고로 한국어 버전에서는 OOP 에서 자주 사용하는 용어인 abstract data type 으로 잘못 번역되어있는데, 영어버전에는 algebraic data type 으로 되어..
-
고찰
[책 리뷰] 유연한 소프트웨어를 만드는 설계 원칙 오버뷰
SICP 저자에 리치 히키 추천사? 이건 봐야지~ 라고 가벼운마음에 도전했는데.. 상상이상으로 어렵다.. 충격과 공포의 1장을 제쳐 두더라도, 내용이 좀 어렵다 ㅜ.ㅜ 나는 클로저를 좀 하니까.. 예시가 스킴이더라도 그냥 술술 읽을 수 있을줄 알았는데, 조금 방심하면 무슨내용인지 하나도 모르겠다. 나는 개발서적을 읽을때 빠르게 속독하는데 (의의나 가벼운 내용만 기억해둿다가, 나중에 필요한 부분만 다시 읽는편) 이책은 그러기 쉽지 않다. 이런기분은 대학교때 전공서적 읽을때 이후로 오랜만인듯 단어부터가 너무 고급지고, 예시도 뭔가 와닫지는 않는다. (아니 실제로 SICP 가 하버드 전공서적이었으니까 당연한건가?) 아직 초반부만 읽고있어서 그런가... 그나마 초반부가 내가 이미 알고있는 기술들이라 더 쉬워야되..
-
토이
[SUMM-Calculator] 숨덕용 가짜 계산기
계산기 인척 하는 계산기로, (모 종교의 이지한 계산기과 관계없음) 사실상 다른 어플리케이션을 실행하는 런처 이다 다른 어플리케이션을 LINK 하고 계산기에서 해당 코드를 입력하면 그 어플리케이션을 실행한다 숨덕을 위해서 홈화면에서는 알아서 어플 숨김처리하고(??) 이 어플리케이션으로 몰래 실행할수있다 ㅋㅋ 백엔드 개발자이기 때문에 안드로이드는 잘몰라서, LINK 레이아웃이 좀 깨질수도 있는데, 오히려 계산기 자체는 아주 좋은 오픈소스 그대로 사용해서(..) 정상적이다 숨 계산기 - Google Play 앱 숨 계산기 - Google Play 앱 다른 어플리케이션을 몰래 실행하는 계산기 play.google.com
-
토이
[Parallel-Woard] 병렬적 사고(?) 를 키워주는 게임
clojure script 로 게임을 만들고 싶어서 cljs + reagent 조합으로 만든 아주 간단한 게임 게임은 심플하게 공을 골인지점까지 넣는게임인데. 스테이지가 늘어날수록 한번에 병렬적으로움직어야하는 공이많아진다. FE 는 잘 모르기때문에 그냥 Position : absolute 박고 pixel 로 계산했다 (..) Parallel-Woard 게임 주소
-
카테고리 없음
[DIYA] DIYA 프로젝트의 개인 정보 처리 방침
('https://see-ro-e.tistory.com/'이하 'SeeRoE')은(는) 「개인정보 보호법」 제30조에 따라 정보주체의 개인정보를 보호하고 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 하기 위하여 다음과 같이 개인정보 처리방침을 수립·공개합니다. ○ 이 개인정보처리방침은 2022년 2월 23부터 적용됩니다. 제1조(개인정보의 처리 목적) ('https://see-ro-e.tistory.com/'이하 'SeeRoE')은(는) 다음의 목적을 위하여 개인정보를 처리합니다. 처리하고 있는 개인정보는 다음의 목적 이외의 용도로는 이용되지 않으며 이용 목적이 변경되는 경우에는 「개인정보 보호법」 제18조에 따라 별도의 동의를 받는 등 필요한 조치를 이행할 예정입..
-
JAVA | Kotlin
[JVM] Typereference 와 Type Erasure (타입 소거)
기본적으로 JAVA 를 포함한 JVM 기반 언어는 제네릭에있어서 불완전하다 "타입 소거" 가 되기 때문 (어느 번역서에서는 타입 지우개라고 적혀있던데.. 암튼) 이는 하위호환성을 유지하기 위하여 JAVA 가 택한 방법이고... 이로 인하여 JVM 기반언어는 타입 소거에서 자유로울수가 없다. 킹갓 닷넷은 다르다 킹갓 닷넷과는! 간단히 말하자면 타입안정성을 얻기 위하여 제네릭(제네릭에 내가 쓸 타입을 적어두었음)을 썻는데. 런타임에는 이 안정성이 보장되지 않는다는 소리 (내가 써둔 타입 정보가 사라짐)다. 따라서 JVM 상에서는 T든 U 든 써둔건 런타임에 죄다 Object 다. //List 제네릭 타입이 있다고 가정 List genericIntList = new List()//이거나 List generic..
-
OSS | 컨트리뷰션
2021 오픈소스 컨트리뷰톤 장려상 수상 - Azure Functions OpenAPI Extensions
2019 년에는 수상을 하지 못했는데, 2021 리벤지 오픈소스 컨트리뷰톤 에서는 장려상을 수상하였다! 나는 Azure Functions OpenAPI Extensions 팀에 참가하였고 컨트리뷰터가 되었다. 내가 진행한 PR 은 아래 두개 (3개 였는데 하나는 다른 PR 에서 수정되면 필요없어지기 때문에 Close 되었다) Azure/azure-functions-openapi-extension - #234 Support "Base Object (root of all classes)" type - #202 Fix broken link in integrate-with-apim.md 2021년 오픈소스 컨트리뷰톤은 행사 자체가 [Challenges / Masters 시스템], [1/2차 발표] 등 2019 ..
-
Functional Study
[liftIO] 함수형 컨퍼런스 liftIO 후기
함수형같은 마이너한걸 파다보면 한국자료를 찾기가 힘들다... 컨퍼런스같은건 더 없고.. 이런 상황에서 Clojure Korea 에 글이 하나 올라왔는데 단돈 5000원에 티셔츠와 "실제 함수형을 업무에 적용중인 사람들" 의 발표를 들을 수 있는 기회가 되어서 신청하게 되었다. 틈만 나면 열리는 다른 컨퍼런스와 다르게 한국에서 열리는 함수형 컨퍼런스는 찾기 힘들기 때문 ㅜ.ㅜ Clojure / Scala /Haskell 까지! (Fsharp은 없고연..) 다만 발표시간이 좀 짧아서 인지, Deep 한 이야기까지는 끌고가지 못한것 같다. 그리고 Haskell 발표는 상류타입(HKT) 에 대한 이야기같은데 1도 못알아 들었다 행사가 끝나고 함수형 퀴즈 타임이 열렸는데 2등을 차지했다! 상품도 있다 (5000원..
-
Functional Study
Realworld functional 을 위한 자료들
Realworld gothinkster/realworld: "The mother of all demo apps" — Exemplary fullstack Medium.com clone powered by React, Angular, Node, Django, and many more 🏅 (github.com) 한국사이트가 망해부라서 원문으로 대체 Clojure Design Patterns (mishadoff.com) Clojure Design Patterns Clojure Design Patterns Quick overview of the classic Design Patterns in Clojure Disclaimer: Most patterns are easy to implement because we u..
-
고찰
[고찰] 나는 왜 Interal DSL를 이해하기 그토록 어려웠는가? [Feat. 마틴 파울러]
DSL 에 대한 내 이해가 틀릴 수 있음! 이 글은 정답이 아님! DSL 이 뭔지는 생략하고 외부 DSL 은 나에게 명확했다. SQL을 통한 DB 조작 , XML, JSON 을 통한 설정파일, 또는 사용자가 정의한 text 파일을 파싱해서 컨트롤하는것. 내부 DSL 은 이해가 되려고하면 안되고, 안되려고 하면 되고... 하던 느낌이었다. 왜 방해가 되었는가? 하면 크게 2가지 개념이 충돌해서 였다. kotlin / Scala / Lisp(Clojure) 에서 DSL 을 구축하기 위해 쓰는 테크닉 C# / JAVA 에서 Fluent API 를 DSL 이라고 함 "DSL" 이라는것을 구축하기 위해서, 또는 이해하기 위해서 공부하거나, 또는 "모나드" (특히 Free Monad) 등을 공부할때, 또는 Lisp..
-
기타 정보
주둥아리 주도 개발 (JDD)
Lee-WonJun/JDD-Description: Ju-Dung-A-Li Driven Development (github.com) GitHub - Lee-WonJun/JDD-Description: Ju-Dung-A-Li Driven Development Ju-Dung-A-Li Driven Development. Contribute to Lee-WonJun/JDD-Description development by creating an account on GitHub. github.com 심심해서 블라인드 에 주둥아리 주도 개발을 위한 지침서 라고이라고 정리해서 올렸었는데, 미세한 호응을 얻었다. 그래서 내용을 추가해서 지침2 를 올렸다가, 더 미세한 호응을 얻었다. 그중에서 댓글로 누가 github에 올려달..
-
토이
Azure HackLearn 후기 (Feat E-Ppa-Jin)
devrel-kr/HackaLearn: HackaLearnx Korea 2021 (github.com) GitHub - devrel-kr/HackaLearn: HackaLearnx Korea 2021 HackaLearnx Korea 2021. Contribute to devrel-kr/HackaLearn development by creating an account on GitHub. github.com MS 사에서 후원하는 HackLearn 이라는 이벤트가 있다. 해커톤 + Learn 이라는 컨셉으로 이루어진 해커톤인데, 사실 해커톤보다는 학습에 가깝다. (Azure 를 홍보하기 위함이 큰듯 하다) 지인 4명과 함께 모여서 팀을 이루고 시작했는데.. 교육에 가깝다 보니, 아이디어를 내거나 어떤 아이디어..
-
Clojure
[clojure] clj-oauth2 를 통해서 github Oauth 를 가져와 보자
주요 코드 (ns ossss.routes.oauth (:require [ossss.config :refer [env]] [mount.core :refer [defstate]] [clj-http.client :as http] [clj-oauth2.client :as oauth2] [ring.util.http-response :as response])) ;; env 에 있는값을 쓰기 위해서 defstate 사용 (defstate github-oauth2 :start {:authorization-uri (env :authorize-uri) :access-token-uri (env :access-token-uri ) :redirect-uri "http://localhost:3000/oauth/callback" ..
-
Functional Study
[Functional Programming] 함수형 훑어보기
같이 공부하는 동아리 사람들에게 함수형에 대하여 알려주기 위하여 공용 Notion 에 정리한 글을 이왕 정리한 김에 블로그에도 같이 올리려고합니다. 친한 지인들께 설명하기 위한 글 + 알려주기 위한글 이므로 완전 초심자가 보기에도 전문가가 보기에도 부족할 내용이지만, 말 그대로 한번 훑어보면서 이러한것이 있구나 정도로 파악하시는데 쓰시면 좋을 듯 합니다. 또한, 무조건적으로 제가 쓴글이 옳은건은 아니지만, 설명하는 내용 특성상 단언하는듯이 적힌 내용이 있습니다. 함수형 패러다임이란 무엇인가? "자, 빠르게 대답해보라. 함수형 프로그래밍이 무엇을 의미하는가? 틀렸다." 함수형의 시초는 존 메카시의 LISP 이며, 이는 알론소 처치의 람다계산법을 컴퓨터 언어로 만든것이다. "세 번째 패러다임은 최근에 들어서..
-
Clojure
[Clojure] Clojure 에서 Runtime 함수를 생성해보자
Clojure 에는 intern 이라는 함수가 존재한다. Finds or creates a var named by the symbol name in the namespace ns (which can be a symbol or a namespace), setting its root binding to val if supplied. The namespace must exist. The var will adopt any metadata from the name symbol. Returns the var. 네임스페이스에 새로운 var 를 추가할수있는데, 함수또한, var 에 바인된것에 불과하므로 intern 을 이용하여 함수를 런타임에 추가할수있다! functional programming - Clojure: ..
-
고찰
[고찰] Why Data-Driven?
"데이터는 데이터다" 이는 Clojure 에서 중요한 개념이며, 요즘 유행하는 불변 Record 를 활용한 디자인도 이러한 "데이터" 의 강점을 활용하는 디자인이라고 생각한다. 데이터의 강점을 활용하기 위하여 DSL 을 "데이터" 로 표현하는 방법이 꽤 많이 존재하는데 (Free 모나드도 그러한 특성을 조금 지니는듯..?) 데이터의 장점을 뽑자면 여러가지가 있다, 언어 독립적 (-> 디커플링적인 요소로써 활용이 가능하다) 선언적인 표현이 가능 가공할수있다! (Code as Data / Data as Code 도 Data 의 장점을 프로그래밍 언어에서 십분 활용하는 Feature 라고 생각) 물론 함수가 1급 시민인 FP 에서는 함수자체를 컨트롤할수있는 요소로써 사용할수있지만, "데이터" 그 자체가 가지는..
-
기타 정보
[Memory 관리] 프로그래밍 언어별 메모리 관리 이해
https://deepu.tech/memory-management-in-programming/ 🚀 Demystifying memory management in modern programming languages Let us take a look at how modern programming languages manage memory. deepu.tech 필자는 개인적으로는, 개발할때 언어의 내부 메모리 관리 원리를 알고있어야할 필요가 없다고 생각한다. 그걸 몰라도 되도록 추상화를 한것이니까. 그래서 딱히 외우거나 하지는 않는데, 그래도 가끔 필요할때가 있다. 성능 튜닝이라던지, 누수관리라던지까지 않아도 단순 호기심일수도 있고.... 아무튼 알아야될 순간이왔을때, JVM 메모리관리, GC 원리 이런식으로 ..
-
고찰
[고찰] 힙스터 개발자 회고
#이뭐야? :반올림이요 :#은 전처리기 지시자 이다 전처리기 지시자가 뭔데 :컴파일하기 전에 처리해야할일을 수행하는 프로그램 컴파일이 뭔데? :고급언어를 저급언어를거처 기계어로 변경하는 프로그램 고급언어가 뭔데? :인간이 이해하는 자연어와 가까운언어 저급언어는 뭔데? :어셈블리와 같이 기계어와 가까운 언어 어셈블리가뭔데 :기계어와 1대1 대응되는 언어 기계어가 뭔데? :0과1로 이루어진 언어 컴파일하면 뭐가 나오는데 :목적파일 (.obj/.su) 등이 나온다 목적파일은 실행하면되는것인가? :목적파일은 실 동작방법이 없기때문에 링킹과정을 거쳐야함 링킹이 뭔데? :링커가 목적파일과 라이브러리 파일을 연결해주는 과정 라이브러리가 뭔데? :프로그램이 참조할 일종의 모듈 여기서 목적파일이 ["Hello World..
-
토이
"이" 만 쏙쏙 골라 빼주는 사이트 [이빠진/E-ppa-jin]
😁-Ppa-Jin (lee-wonjun.github.io) 😁-Ppa-Jin lee-wonjun.github.io HTML/CSS 같은건 쥐약이니까 Free Contact Form v10 - HTML/CSS Template 2021 - Colorlib 요거 고대로 썻다 너무너무너무너무 간단한 사이트라 그냥 프론트 로직에 다 박고 github 꽁 호스팅 낄낄 인터넷 하다가 본 짤방으로부터 아이디어를 얻어 친구랑 낄낄 대면서 만듬 2/e/E/이/ 이 + 모음에서 이를 전부 제거해줌 무슨 짤방인지는 고소당할꺼같으니까 여기까지...
-
OSS | 컨트리뷰션
[Microsoft/PowerToys] 마이크로소프트 파워토이 컨트리뷰트
윈도우 OS 를 쓰면서 개인적으로 잘 쓰고 있는 유틸리티중 하나인 파워토이 윈도우 진영에서는 나름 유명한 확장 프로그램이며, Github기준 Star 도 무려 50K 가 넘는 메가 프로젝트이다. 필자의 경우 그중에서도 "파워토이 런" 기능을 애용하고 있다. PowerToys Github microsoft/PowerToys Windows system utilities to maximize productivity. Contribute to microsoft/PowerToys development by creating an account on GitHub. github.com PowerToys Run 리뷰 [Windows] 다용도 검색창 PowerToy Run 아아아아아주 예전에 Windows에는 Window..
-
Clojure
[Clojure/Luminus] Luminus + Intellij 시작 설정
Luminus 는 Clojure Fullstack Web framework 이며, 얕게 여러가지 프레임워크를 경험해본 결과, Luminus 가 제일 깔끔하고 자료도 많고 초보자한테는 딱 좋은 물건이다. 특히 Clojure + ClojureScript 환경의 Fullstack 템플릿이 아주 좋다 [기본 도큐먼트] 도 나름 충실하고, [예시 프로젝트] 도 많이 있다. 프로젝트 만들기 Clojure 의 필수툴인 개미핥기, 라이닝엔으로 새프로젝트를 만들수 있다. 나는 야근관련(...) 홈페이지를 만들기 위하여 yageun 이라는 프로젝트에 re-frame 을 추가하였다. lein new luminus +추가 종속성들.. luminus 의 장점중 하나가 풍부한 추가 프로파일들이다. 본인경우 ClojureScrip..
-
고찰
[고찰] 확장 가능한 언어 (Extensible Programming Language) feat 모나드/메크로
분쟁이 생길수 있는 부분이기 때문에 미리 말하자면, 언어 자체에 우열을 가리고, 언어철학에 더 좋고 나쁨이 있을수는 없다. 언어는 기술에 따라가는 요소로 보는 사람도 있고, 기술보다 언어적 철학이 우선시되는 사람이 있을수도 있다. 이또한 무엇이 옳다 그르다 명확하게 할수있는 요소가 아니다. 다만, 개인적인 생각을 적어내는 포스팅 특성상, 내가 선호하는 요소를 그냥 좋다, 나쁘다로 표현하도록 하겠다. 대부분의 사람들이 선호하는 언어가 바뀌는 무렵은 내가 사용하고있는 언어가 장황하고 이해하기 어렵다고 생각할때, Simple 하면서도, 가려운 부분을 긁어주는 Feature 가 있는 언어를 만났을때 이다. 특히 그러한 언어를 처음 사용할때에는 하루종일 감탄을 하면서 시간을 보내게 된다. 이것이 특정 프로그래밍 ..
-
Windows
[Windows/초 미세 팁] 파일 익스플로러 주소창으로 Visual Studio Code 실행
빠른 방법 : [code .] 대신에 [code.cmd .] 를 쳐야함 code . 대신에 code.cmd . 을 쳐야 해당 폴더에서 VSC 가 켜진다. 이유는 요기 github.com/microsoft/vscode/issues/79638 VS Code fails to open from file explorers address bar · Issue #79638 · microsoft/vscode Issue Type: Bug VS Code fails to open from windows file explorer address bar (when writing "code" + enter). Instead it prompts an "Open with..." dialog. When chosing Visual Stu..
-
고찰
[고찰] 함수형 미신
글을 읽기에 앞서서, 나는 딱히 FP 를 잘하는것도 아니며, FP 만이 이 세상의 유일한 해결법이라고 생각하지 않는다, OOP 에 대한 모든 이해를 한 마스터도 아니다. 단지 패러다임에 관한 다른사람들의 글을 봣을때, FP의 난이도에 대한 많은 비난(...?)을 보고 느낀점을 쓴것뿐이다. 모나드, 재귀, 일급함수, 파이프, 순수함수, 수학적 함수, 불변 기타등등... 함수형 패러다임이라는것을 처음접했을때, 머리가 지끈거리는 단어들이 생각이 난다. 반면 OOP 의 경우는 우리가 친숙한 for문, if 문, while 문, 변수, 패턴, SOLID .. 우리가 친숙하고 이해할수있는 단어들만 생각이난다. 그래서 다음과 같은 결론이 나온다. OOP 는 인간이 생각하는 방식을 그대로 사용해서 배우기 쉽고 실용적인..
-
AI
[AI/WSL] WSL2 환경에서 Pix2Pix 사용할려다 징징대는 글
결론부터 말하자면 망할 황가놈이 일을 안해서 몬쓴다 see-ro-e.tistory.com/306 [AI] 신비한 캬루콘 생성기 (feat. 뒤틀린 황천의 캬루콘) 인터넷을 하다보면 댓글에 다음과 같은 이상하게 귀엽게 생긴 캐릭터가 짤로 자주 나온다. 해외에서 밈으로써 쓰이는 "우는 고양이"나 " Woman Yelling at a Cat" 을 기반으로 프리코네라는 게임의 등 see-ro-e.tistory.com 위 포스팅을 작성하던중에 그림작가님께서 트위터에는 원본 이미지를 같이 올린다는걸 알게됬는데 그래서 Pix2Pix 로 머신러닝을 돌려보고자 했다. github.com/phillipi/pix2pix phillipi/pix2pix Image-to-image translation with condition..
-
AI
[AI] 신비한 캬루콘 생성기 (feat. 뒤틀린 황천의 캬루콘)
인터넷을 하다보면 댓글에 다음과 같은 이상하게 귀엽게 생긴 캐릭터가 짤로 자주 나온다. 해외에서 밈으로써 쓰이는 "우는 고양이"나 " Woman Yelling at a Cat" 을 기반으로 프리코네라는 게임의 등장하는 주인공 "캬루" 로 한국인 작가 [pixiv 링크]분께서 다시 그린것이다. 일명 "신비한 캬루콘" 이라고 불린다. 보다 자세한 설명은 킹무갓키를 참고하기 바란다. 저 캐릭터가 어떤 캐릭터인지는 중요한게 아니고 암튼나무위키에 보면 "신비한 캬루콘 모음들과 원본 사진들" 링크가 있는데 이걸보고 내가 든 생각중에 하나는"야 이 정도면 머신러닝 돌려도 되겠는데?" 안타깝게도 필자는 컴퓨터 엔지니어지 머신러닝 리서처는 아니므로, AI 에 관하여 잘아는 후배에게 물어봤다 쌉가능하다는 말을듣고 바로 머..
-
GameEngine
[Unreal] Unreal Editor 에서 급격한 프레임 저하
Unreal 을 실행시키면 이렇게 에디터 자체의 FPS 를 확인할수가 있는데, 이게 사양이 안되는것도 아니고, SSD 에 설치하고, Viewport 상에 암것도 없어도 20프레임정도에서 안올라가는 경우가 있다. 재설치 / 복구 등을 해도 고쳐지지 않고, 너무느려서 편집이 불가능한 상황인데 (짜증나게 아주 가끔식 정상적으로 실행됨) 인터넷에서 있는 해결방안들(드라이버 업뎃, 지포스 오버레이 끄기, MSI 니헤먹인가 먼가하는 음장끄기)의 별짓을 다해도 고쳐지지 않는경우... 위 그림처럼 -DX12 를 옵션으로 주고 Epic 런처가 아닌 바로가기로 실행해보자... (에디터 내의 그래픽 API (DX/OpenGL 및 Openl XR) 등을 선택할수있는 방법이 있는지는 모르겠음) 물론 Unreal 이놈이 워낙 큰..
-
F#
[C#/F#] C# 초기화 코드 제너레이터
github.com/Lee-WonJun/reverse-dummy Lee-WonJun/reverse-dummy C# initialization code generator. Contribute to Lee-WonJun/reverse-dummy development by creating an account on GitHub. github.com C# 프로그램 (닷넷 프로그램)상에 메모리에 올라가있는 인스턴스의 C# 코드를 생성해주는 라이브러리. 사실 실제 SW 용 라이브러리라기 보단, 지금 사용하고있는 소프트웨어의 엔티티 코드를 얻을수있도록, 라이브러리로 만들었다. 참조만 걸면 바로 사용할수있으므로.. F# 이 패턴매칭/ADT 등으로 Type 별로 디스패치하기 더 쉽기때문에 F# 으로 작성했다. 닷넷 환경이므..
-
고찰
[고찰] 프로그래밍 통찰력 (Programming Insight)
요즈음 개발에대한 수요가 급증하고, 프론트 백 할것없이 기술 수준이 나날히 높아지고, 채용시장에서 요구하는 기술스펙이 다양해지고 있다. 취업을 대비하여 거의 모든 부트캠프들이 리엑트나 스프링을 가르치고, 이 기술이 아닌 기술을 공부하는것은 취업에 도움도 안되는것에 시간을 쏟는 멍청이. 블라인드 같은데서는 쿠버니타스정도는 백엔드의 기본 소양이고, MSA 가 아닌 아키텍쳐는 구 시대의 다루기도 힘든 레거시 코드취급에 서비스회사가 아닌 SI 업계는 배울것 하나없는 개발자의 무덤 솔직히 말해서 나는 요즘에 저런 기술 중심의 메타나, 서비스 기업에서 사용하는 기술만이 온 세상의 중심인거처럼 생각하는것이 마음에 들지 않는다. 왜냐하면 기술은 결국 취사 선택의 문제 이기 떄문이다. 그래서 그게 뭐가 그리 잘났는데? ..
-
기타 정보
[Visual Studio] 비주얼 스튜디오 창 분할 (code split) 시 비정상적으로 종료 되는 문제
developercommunity.visualstudio.com/content/problem/1323017/unexpected-vs-crash-when-docking-or-splitting-wind.html Unexpected VS crash when docking or splitting windows - Developer Community Sign in Visual Studio Visual Studio for Mac .NET C++ Azure DevOps Azure DevOps Server (TFS) Topics Problems Features Users Badges developercommunity.visualstudio.com 빠른 해결법을 찾는 사람을 위하여 해결방법부터 VS 가 설치된 폴더와, ..
-
Clojure
[Clojure] Idiomatic Clojure - Code Smells (관용적인 클로저 - 코드 스멜)
2021 첫글은 역시 Clojure프로그래밍 언어를 공부할때, 문법다음으로 공부해하는것이 Idiom 이다.Idiom 을 아는것은, ~~ 스러운 코딩을 하는데 도움을 준다, (ex. python 스럽게 코딩하기, Java 를 Java 답게 코딩하기..)그래서 Clojure/F# 에 대한 Idiom 을 찾아보던중 좋은 포스팅을 발견하였다.Idiomatic Clojure: Code Smells (bsless.github.io) Idiomatic Clojure: Code SmellsWe all make mistakes. We have all written bad pieces of code at some point of our lives. They might have been non-idiomatic, unrea..
-
Clojure
[Clojure] Clojure Reactive 와 Clojure CSP(clojure.async)
swannodette.github.io/2013/07/12/communicating-sequential-processes/ Communicating Sequential Processes Communicating Sequential Processes 12 July 2013 With the arrival of core.async, ClojureScript provides a powerful advantage over other popular compile to JavaScript languages like CoffeeScript, Dart, and TypeScript. These languages fail to address the sing swannodette.github.io CSP (고루틴) 의 구현체..
-
Clojure
[Clojure] Clojure 프로젝트 시작 템플릿 확인
clj-templates.com/ clj-templates clj-templates.com Leiningen / Boot 에서 새프로젝트를 만들때 사용할수 있는 템플릿을 쉽게 확인할수있다. lein new Clojars 에서 템플릿만 뚝딱 가져온단다. 빌드툴 아이콘에 마우스를 가져다대면 바로 명령어를 확인할수있고 클릭하면 카피된다.
-
Clojure
[Clojure] 종합선물세트(?) 같은 라이브러리
github.com/cloojure/tupelo cloojure/tupelo Tupelo: Clojure With A Spoonful of Honey. Contribute to cloojure/tupelo development by creating an account on GitHub. github.com Tupelo: Clojure With A Spoonful of Honey 다양한 Helper 함수들을 제공해주는 라이브러리, Clojure의 기본 함수들은 정말 강력하고 까리한데.. 가아끔 아니 이게 없다고? 할때가 있다. 특히 string 다룰때 그때 Java interop 해서 쓰면 왠지 지는기분인데.. 전반적으로 유용한 함수들을 적절히 모아놓은 라이브러리가 바로 이것 설명에서는 꿀 한 스푼과 클로..
-
OSS | 컨트리뷰션
[Github] Dark Theme
마참내! github 에도 Dark Theme가 등장! Beta 버전이긴한데 (뭔 테마에 베타버전까지나..) 표시된 부분을 클릭하면 바로 Theme가 변경된다 github.com/settings/appearance 로 접속해서 바꿔도 된다. 역시 다크테마가 까리하다~
-
Linux | WSL
[GWSL] WSL 에서 GUI 프로그램을 쉽게 사용하자
WSL2 에서 GUI 공식 지원해주기전까지는 이방법이 제일 쉽고 간편한듯하다. 보통 x서버 설치 -> wsl bashrc (또는 zshrc) 에 export 등록하고 사용하는데 이건 한번에 해주고, 뭔가 있어보이게 띄워준다. -> 최근에는 바로 안된다 ㅡㅡ... 그냥 곧있으면 공식(WSLg)으로 나오니까 기다리거나 preview를 쓰자 www.microsoft.com/ko-kr/p/gwsl/9nl6kd1h33v3?activetab=pivot:overviewtab GWSL 구매 - Microsoft Store ko-KR GWSL - The Feature-Packed, Highly-Integrated Windows 10 XServer www.microsoft.com opticos.github.io/gwsl/..
-
Linux | WSL
[Googler] 터미널에서 구글검색을 하자
github.com/jarun/googler jarun/googler :mag: Google from the terminal. Contribute to jarun/googler development by creating an account on GitHub. github.com 말 그대로 터미널에서 구글검색을 하게 해주는 프로그램 우분투 16 에서는 apt 로 설치가 안되므로 (구버전이 깔리며, wsl에서만 그런지는 모르겟으나 검색도 안됨) github.com/jarun/googler/releases/tag/v4.3.1 요기서 맞는버전을 다운받고 설치하면 된다. dpkg 로 설치하면 사용가능하다. --count 는 띄울개수 (안하면 기본 10개인듯) -x 는 검색할때 오타수정 사용안함. 이제 우분투 명령..