Posts
-
토이
모든 함수 호출을 대수적 Effect로 만들어보자 ACE Lang
바이브~ 하게 검증한 POC, WASM 으로 웹에서 실행도 할수있다.대수적 효과가 무엇인가? 하믄https://see-ro-e.tistory.com/350 [Algebraic Effect] 내 멋대로 대수적 효과 이해하기 feat Continuation[Effect 가 싫어요]Functional Programming 에서는 효과(== 사이드 이펙트) 를 분리해서 Monad 로 순수하게 디자인하는 패턴이 아주 흔하다,Haskell 의 IO 모나드가 가장 대표적인 예시 인데, 이런 "모나딕" 한see-ro-e.tistory.com이거 되시겟다. 개발하다 보면 비슷한 패턴이 계속 나온다.로깅을 위해 함수를 감싼다.테스트를 위해 mock 을 끼운다.DI 로 구현체를 바꾼다.Middleware 로 요청 전후를 가..
-
대외활동 기록
[AI 소프트웨어 마에스트로] 소마 멘토 야호~
근황토크. 소마야호~ 요즘 SW 마에스트로 멘토로 활동 중이다. 사실 활동한 지는 좀 됐는데, 위촉장이 얼마 전에 나와서 이제야 올려본다. 10년 전에는 내가 여기 멘티였는데, 이제는 멘토로 다시 오게 됐다. 시간 지나서 다시 같은 프로그램에 멘토라는 이름으로 돌아오게 되니 감개가 무량하구먼물론 그렇다고 내가 갑자기 엄청난 멘토가 됐다거나.. 그런 건 전혀 아니고. 막상 멘토로 와보니 대단한 멘토진도 너무 많고, 각자 자기 분야에서 오래 쌓아온 경험들이 있다 보니 오히려 내가 더 배우는 게 많은 것 같다. 연수생들 프로젝트를 보면서도 “요즘은 이런 식으로 문제를 정의하는구나” “이걸 벌써 이렇게까지 만들었다고?” 싶은 순간들이 꽤 많다. 분명 멘토링을 하러 간 건데, 가끔은 내가 더 자극받고 오는 느낌...
-
대외활동 기록
[Hackathon] 사내(PFCT) 1회 해커톤 특별상 수상
https://blog.pfct.co.kr/hackathon/ 제1회 PFCT 해커톤, 모두가 메이커가 되는 날! » PFCT 공식블로그 '피플로그'지난 2월, PFCT는 생성형 AI를 활용해 9시간 만에 기획부터 개발·발표까지 완주하는 ‘제1회 PFCT 해커톤’을 진행했어요. 반짝반짝 빛나는 아이디어들이 AI의 도움을 받아 빠르게 완성된 순간, 지blog.pfct.co.kr AI 심사위원이 평가한다고해서 오~ 하긴했는데 진짜 AI 가 다 평가했자너 ㅠ암튼 AI 심사위원 점수를 합산한 종합 순위에서는 수상권 밖이었지만, 현장 투표는 1등이라 해커톤 헌터로서의 체면은 지킨듯... 처음엔 사내 대회니까 좀 가볍게 생각했는데, 막상 시작해보니 생각보다 훨씬 재밌었다. 같은 회사 사람들끼리, 같은 도메인을 공유..
-
OSS | 컨트리뷰션
[Avro4K] 야호 나도 Avro4K 컨트리뷰터!
https://github.com/avro-kotlin/avro4k/issues/425 Add Field Naming Strategy Support to Gradle Plugin · Issue #425 · avro-kotlin/avro4kIs your feature request related to a problem? Please describe. Currently, when generating Kotlin code using the avro4k Gradle plugin, Avro schema field names are used as-is for Kotlin property name...github.com 링크드인만 올리고 여기는 안올리고 있었네.현재 회사에서는 AWS Glue를 Schema Regis..
-
대외활동 기록
야호 나도 AWS Krug 소모임 발표자
2025 추석 목표 1 Contribution 1 Language 1 PPT 중 1 PPT 담당나한테는 Linkedin 이 인스타그램이기 때문에.. 얼마전 AWS Q 해커톤 수상관련해서 Linkedin 에도 포스팅했었다.감사하게도 그걸보고 AWS Krug (한국 사용자 그룹) 의 AI-Engineering 소모임 에서 관련 내용 발표를 부탁하셔서 바로 수락을 했고,추석기간에 관련 발표준비를 하였다.근데 한 20~30분이 할당됬는데,내가 실제 해커톤에서 발표한시간이 한 6분... 남짓이라나머지 15분을 어떻게 채울까 고민하다, 그냥 나의 PR 과.. 자랑과... 회사 소개로 채웠는데, (결과론적으론) 반응이 좋았던듯.. 그렇다고 보고싶은 사람은 없겠지만.. 그래도 올려보자면 ( 용량문제로 pdf 변환해서..
-
OSS | 컨트리뷰션
[Microsoft/PowerToys CmdPal] 야호 나도 MS 파워토이 CmdPal WindowWalker 컨트리뷰터!
2025 추석 목표 1 Contribution 1 Language 1 PPT 중 1 Contribution 담당예전에 Ms PowerToys 의 PowerToy Run 이라는, Window 판 알프레드같은것에 PR 날린적이 있다.[Microsoft/PowerToys] 야호 나도 MS 파워토이 컨트리뷰터이게 거의 4년 전인데, 그 이후 PowerToy Run 은, 명령팔레트 (Cmd Pal) 로 완전 새롭게 업데이트되었다. 아무튼.. Cmd Pal 의 기본 기능들중에는, 앱을 찾아서 키는것, 그리고 열려있는 앱을 빠르게 찾고 전환하는것 (== WindowWalker) 기능이 포함되어있는데,위 첨부한 사진을 보면, Calendar 의 를 키는것은, Calendar 아이콘이 잘 나오는데, 이 Calenda..
-
토이
사내 유행어로 프로그래밍 언어를 만들어보자 Feat F# Bolero WASM
2025 추석 목표 1 Contribution 1 Language 1 PPT 중 1 Language 담당현 회사 CoreBanking 팀에서 유행하는 말투가 있는데, 바로 팀장님 말투를 따라하는것그래서 만들었다CoreBanking Programming Language - [Cobang]Lee-WonJun/CobangLang: PFCT 코어뱅킹 프로그래밍 랭기지 GitHub - Lee-WonJun/CobangLang: PFCT 코어뱅킹 프로그래밍 랭기지PFCT 코어뱅킹 프로그래밍 랭기지. Contribute to Lee-WonJun/CobangLang development by creating an account on GitHub.github.com 기존의 KFALang 와 문법은 거의 비슷하여 Pars..
-
대외활동 기록
[Hackathon] Amazon Q Develper Hackathon 비즈니스 가치상 수상
요즘 회사에서 제일 주력으로 쓰는게 Q cli 인데, Linkedin 에서 관련 해커톤이 열린다고 해서 참가했다.Amazon Q Developer Hackathon 2025 인데1. 금토인데, 금은 온라인, 토는 오프라인인 해커톤이다. 즉 금욜에 퇴근하고 부터 해도 가능2. 토요일 오프라인 행사가 집앞임.3. 그래도 Q 관련 컨트리뷰트까지 했는데 참가해줘야지4. 모름지기 개발자라면 주기적으로 해커톤을 나가줘야한다... 라는 개인적인 생각.. 마지막 이더콘이 2년이 다 되가길래 참가 같은 이유로 참가하게 되었다.우리 아이디어는 Qube [큐베라고 읽음] 이고이친구 이름에서 따왔다.Q 해커톤이니까 Q 는 들어가야 된다! 라는 논리에서 시작해서팀원의 열렬한 반대에도 불구하고 이걸 채택했다. 내가 팀장인데 어..
-
OSS | 컨트리뷰션
[AWS/aws-toolkit-jetbrains] 야호 나도 amazon Q 컨트리뷰터
죽어도 안고쳐줘서.. 사실 죽어도 안 고쳐줄것 같아서 직접 고쳣다 흑흑대 AI 시대. claude, cursor, gemini에 aws q까지 (솔직히… 싸서…😁) 골고루 쓰고 있다. 특히 Q 는 주력으로 쓰는편.CLI 위주로 쓰지만, VSCode/IDEA 플러그인도 붙여서 쓴다. 나는 WSL 를 아주 사랑하므로.. WSL 에 프로젝트 만들고, 이걸 vscode 나 IDEA에서 여는데. 이론상 완벽하지만... IDEA 는 문제가 좀 많다.[Intellj] WSL 쓸 때 generated Path 를 C:\\ 에서 찾는 문제 억지로 고치기 이런거.. WSL 에 윈도우 ide 붙여서 쓰는 사람이 별로없어서 이런 세상의 억까를 버티면서 살아야한다. 암튼.. 적당히 타협하면서 쓰면 되는데, aws q 의 id..
-
OSS | 컨트리뷰션
[Gemini-CLI] 야호 Key Binding 리펙터링으로 구글 Gemini-cli 컨트리뷰터
한달..? 좀 더 전에 Gemini-cli 에 PR 을 올려 둔게 있는데,처음에는 Home/End 가 안먹어서, 이거 관련해서 코드좀 보다가, 모든 단축키들이 코드에 magic number 마냥 하드코딩 되어있는걸 보고 issue 랑, 이런식으로 Centralize 해두면, 추후 Customizing 이 가능할거다~ 라는 PR 을 올렷다Home/End 이 안되던건, 다른 사람이 올려둔 PR 이 있었고, 이 PR 이 머지되면, 내 PR은 바로 충돌날껄 알고있어서, 그냥 이랬으면 좋겠다~ 라는 차원에서 올려두고 잊고있었는데,예전 PR 을 살펴보는데 괜찮아보이니까 Re Open 해달라길래 reopen 해주었다..https://github.com/google-gemini/gemini-cli/pull/5356 C..
-
OSS | 컨트리뷰션
[Gemini-CLI] 야호 나도 구글 Gemini 컨트리뷰터
처음 Gemini-CLI를 써봤을 때는 솔직히 베타버전인줄.. 클로드 코드에 비해서 UX가 어색하고, 명령어나 설정 흐름이 매끄럽지 못해서 이슈도 여러 번 남겼었다... (천하의 구글이!)MCP 서버 설정 부분에서는 기능이 제대로 동작하지 않아 직접 이슈를 레이징하고 PR도 제출했는데, 혹시나 예측 불가능한 case 가 있을까봐 테스트 코드변경 안하게 하는방향 + 추후 이런 settings case 가 있으면 바로 추가 가능하도록 짜야지 하고 굳이 몇번 고쳣는데 진짜 폭포수처럼 쏟아지는 이슈와 PR 속에 묻혀버렸다.. 나중에 다른 사람의 다른 PR에서 해당 이슈가 나와서 태그되긴 했는데 그 사람의 코드의 방식이 머지되서 컨트리뷰트는 되지 못했다는 서글픈 추억이..아무튼, 이렇게 이슈랑 PR 이 쏟아져서 ..
-
Windows
[Intellj] WSL 쓸 때 generated Path 를 C:\\ 에서 찾는 문제 억지로 고치기
Gradle WSL project: EAP 5 fails to find files generated by annotation processor : IDEA-264036 Gradle WSL project: EAP 5 fails to find files generated by annotation processor : IDEA-264036What steps will reproduce the issue? I have a Gradle project in WSL which I imported the other day to EAP 5. This project uses mapstruct and build.gradle has the annotatioprocessor "annotationProcessor "org.maps..
-
OSS | 컨트리뷰션
[Spring AI] 야호 나도 Spring AI 컨트리뷰터
최근에 RAG 관련해서 Spring AI 를 사용할 일이 있었는데,PDF / HTML 같은걸 Vector DB 에 담아야한다.Vector DB 에 담기전에, 보통 청크 -> 청크한걸 임베딩 모델을 통해서 벡터화 -> 벡터DB 에 삽입하는데 (ETL 파이프라인)Spring AI 를 쓰게 되면 위 전 과정을 설정코드만 가지고 쓸수 있다.그러니까 "청크" 하는 라이브러리도 Spring AI 에 포함인셈 PDF 의 경우 `PagePdfDocumentReader` 를 사용하는데예시 코드는 다음과 같다.@Componentpublic class MyPagePdfDocumentReader { List getDocsFromPdf() { PagePdfDocumentReader pdfReader = new PagePdfD..
-
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 -> 쿼리..
-
기타 정보
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] 짜증나는 키오스크 개 뿌수는 게임
5.6 SOL 이 나와서 대규모(??) 업데이트 했다 후후 가끔있다. 쓰면쓸수록 화가나는 키오스크가... (특히 결제 버튼 숨겨둔 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.gi..
-
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 ..