This initiative as part of the FreeBSD laptop support enhancements project didn't pan out in time for FreeBSD 15.0 but now they are working on getting the installer option ready for FreeBSD 15.1: FreeBSD 15.1 Aims To Have KDE Desktop Installer Option - Phoronix https://www.phoronix.com/news/FreeBSD-15.1-KDE-Desktop-Option
Jiwon
@z9mb1@hackers.pub · 114 following · 92 followers
Github
- @sij411
kwonjiwon.org
- kwonjiwon.org
@hongminhee洪 民憙 (Hong Minhee) MoonBit으로 시작하기 좋은 작은 프로젝트들이 있어요 🙂
간단한 CLI 도구, 파서, 혹은 WebAssembly 기반 유틸리티부터 만들어 보셔도 좋아요.
예제와 문서는 공식 사이트에서 확인하실 수 있고, 궁금한 점이 있으면 언제든지 말씀 주세요!
마스토돈 스타일의 새로운 커뮤 플랫폼, 커뮹! 모바일 앱이 출시되었어요! 베타 테스트에 참여해주신 여러분, 커뮹!에서 활동해 주시는 여러분 모두 응원해주셔서 감사합니다 🐓📲🥰
iOS: https://apps.apple.com/us/app/commung/id6755352136
Android: https://play.google.com/store/apps/details?id=ng.commu
hi! i'm cat. i work on open source software and hardware, like:
and a lot more.
i joined mastodon.social back when it was cool, about a decade ago. it stopped being cool a while ago so i figured i'd move over to treehouse.social. here's to a decade more here!
I finally got the data transfer from the AISC110C high-speed camera sensor working!
It's a 5€ chip that outputs 80x120 video at up to 40k fps.
Data is read with a Xilinx Spartan7 and transmitted via USB3 with a Cypress FX3, each on its own little PCB.
The front PCB is exchangeable, making this a neat modular platform. I already have an analog video frontend with the ADV7182 and am working on a Cameralink interface.
Videos are coming tomorrow, I need more light for the high framerates.
Released Vertana 0.1.0—agentic #translation for #TypeScript/#JavaScript.
Instead of just passing text to an #LLM, it autonomously gathers context from linked pages and references to produce translations that actually understand what they're #translating.
- Docs: https://vertana.org/
- GitHub: https://github.com/dahlia/vertana
Jiwon shared the below article:
미소녀 보려고 미연시를 켰더니 게임 콘솔이 해킹당했어요
Helloyunho @helloyunho@hackers.pub
당신은 게임에 갇힌 미소녀들을 보기 위해 PlayStation을 켰습니다. 마침 친구가 "나 이쪽 루트 클리어했는데 너도 볼래?" 라며 세이브 파일을 주네요. 마침 그 루트로 갈 시기를 놓친 당신은 친구의 세이브를 이용해 확인해보려고 합니다. 세이브를 등록 후, 미연시를 켜서 로드했는데..? 갑자기 콘솔이 멈추며 결국 콘솔 내부 저장공간을 포맷했습니다!
... 당연히 위 내용은 실제 스토리가 아니지만, 충분히 일어날 수 있습니다. 이 글에서 설명할 내용들로 말이죠.
yarpe
yarpe(Yet Another Ren'Py PlayStation Exploit)를 소개합니다!
이 스크립트는 Ren'Py 기반의 PlayStation 게임들에서 적용되는 취약점이며, 현 시점에서 적용 가능한 게임은 다음과 같습니다:
- A YEAR OF SPRINGS PS4 (CUSA30428, CUSA30429, CUSA30430, CUSA30431)
- Arcade Spirits: The New Challengers PS4 (CUSA32096, CUSA32097)
그런데, 이 모든 것이 어떻게 시작되었고, 어떻게 만들어진걸까요?
Xbox One/Series
사실 저는 PlayStation(이하 PS로 줄여서 말하겠습니다)에 관심이 없었습니다. 반대로 Xbox에 많은 관심이 있었죠. 처음 Xbox One/Series의 커널 취약점이 생겼을 때 Warhammer: Vermintide 2의 게임 세이브 취약점을 이용한 게임 덤프가 제 눈에 잡혔습니다. 그때 문뜩 든 생각이: "다른 게임은 이런 세이브 취약점이 없을까?" 였는데요, 저와 같이 이런 작업에 관심을 두는 친구가 먼저 추천해준 것은 RPG Maker(쯔꾸르 라고도 많이 불리죠)로 만들어진 게임들이었습니다. 아쉽게도, 콘솔 버전에서 사용하는 RPG Maker 게임들은 다른 세이브 구조를 가지고있었고, ACE(Arbitrary Code Execution)가 불가능했습니다.
그러다 문뜩 생각이 났습니다: "Ren'Py 게임들이 세이브로 Pickle을 사용하지 않나?"
Pickle
Python에는 Pickle이라는 직렬화(serialization) 방식이 존재합니다. 이는 Python의 (왠만한) 모든 object를 직렬화할 수 있는 특징이 있습니다.
하지만 만약 직렬화하지 못하는 object가 class의 property로 존재하는데, 이 class를 직렬화하고 싶다면 어떻게 해야할까요? Python은 이를 위해 __reduce__라는 method를 지원합니다. 이는 class가 직렬화/역직렬화 될 때 어떤 데이터를 사용하여 class를 다시 구성해야할지 명시해줍니다.
사용법은 다음과 같습니다:
class A:
def __init__(self, a):
self.a = a
self.b = "b"
def __reduce__(self):
return self.__class__, (self.a,)
# serialize
a = A()
b = pickle.dumps(a)
그런데, 만약 __reduce__에 다른 Python 함수가 있으면 어떨까요? 예를 들어, exec 같은거라면 말이죠?
class Exploit:
def __reduce__(self):
return exec, ("print('Hello, World!'),)
exploit = Exploit()
a = pickle.dumps(exploit)
pickle.loads(a) # Hello, World!
...네, Pickle이 로딩될 때 문자열에 담긴 코드를 실행해버립니다... 이것이 Python 공식 Pickle 문서에서 Pickle이 안전하지 않다고 하는 이유겠죠.
세이브 하나로 Ren'Py 게임 가지고 놀기
이제 Ren'Py가 Pickle을 사용한다는 사실과, Pickle로 코드를 실행할 수 있다는 사실을 알았으니, 직접 실행해볼 시간입니다!
Ren'Py의 세이브는 1-1-LT1.save 같은 파일 이름을 가지고 있습니다. 멋져보이지만, 사실 그냥 Zip 파일이며, 확장자만 .save로 변경된겁니다.
이를 흔한 Zip 프로그램으로 풀어보면, 여러 파일들이 나오지만 우리가 관심있는 파일은 log 파일입니다. 이 파일이 Ren'Py의 Pickle을 담고있는 파일이죠.
이제 이 파일을 제가 만든 코드가 담긴 Pickle로 바꿔치기 하고, 다시 압축을 해서 넣으면..?

코드 실행이 됩니다! 너무 멋지네요!
코드 실행은 되는데, 이제 어쩌죠?
이제 코드 실행이 되는걸 알았으니, 다음 단계는 무엇일까요? 당연히 메모리 조작이죠! Google에서 잠시 조사한 결과 unsafe-python 이라는 저장소가 눈에 들어왔습니다. 이 저장소는 Python에서 직접적인 메모리 접근을 가능하게 합니다.
해당 취약점은 LOAD_CONST opcode가 아무 범위 검사를 하지 않는다는 점을 이용하여 가짜 PyObject를 만들 수 있고, 이를 이용하여 0부터 사실상 64비트 주소 끝자락까지의 bytearray 객체를 만들어 직접적인 메모리 접근을 합니다.
이제 우리는 메모리 주소만 알면 언제든지 해당 메모리를 수정할 수 있습니다! 덤으로, Python의 사랑스러운 slicing 문법은 이를 더 편하게 만듭니다.
# Assume we got raw memory bytearray
mem = getmem()
mem[0x18000000:0x18000008] = b'\0' * 8
이제 마음대로 메모리 조작도 가능하고, PyObject 생성도 가능하니, 저만의 프로그램을 메모리에 저장한 후 Python의 function 객체를 만들어 제 코드를 향하게 하면 끝입니다!
...가 된다면 정말 쉬울건데 말이죠...
메모리 영역 권한
메모리 영역에는 특정 권한이 부여되어 있습니다. Read, Write, eXecute 권한이 분리되어 있는데, 이름에서 알 수 있듯 execute 권한 없이는 해당 메모리 영역을 코드로서 실행할 수 없습니다.
문제되는 부분은, 보통 우리가 작성하는 영역은 read와 write만 있고, execute 권한이 없습니다! 만약 execute 권한이 없는 영역을 실행하려 한다면, CPU에서 권한 부족 오류를 발생시킬 것이고, 이는 segfault로 이어질 것입니다.
그럼 현재 부족한 메모리 권한으로 원하는 명령을 어떻게 실행할 수 있을까요? 답은 ROP에 있습니다.
ROP
ROP, Return Oriented Programming은 말 그대로 asm의 ret 명령을 기준으로 작동하는 코드를 말합니다.
ret 명령의 특징은 현재 CPU가 가리키는 stack pointer(x86_64 기준 RSP register) 에 적힌 주소 값을 instruction pointer(x86_64 기준 RIP register)에 적고 stack pointer를 움직인다는 것입니다. 그럼 ret를 실행하는 때에 stack pointer를 (실행 가능한 메모리 영역에 있는) 저희가 원하는 코드로 향하게 하면 어떨까요?
이를 하기 위해선, ret로 끝나면서 원하는 명령을 실행하는 메모리 주소를 미리 찾아놓아야 할 것입니다. 이를 우리는 gadget이라고 부릅니다.
Stack pointer에서도 권한 오류가 발생할 수 있지 않을까 하실 수도 있지만, stack pointer가 가리키는 메모리 영역은 read, write 권한만으로 충분하기 때문에 괜찮습니다.
이 사실을 알게된다면 이제 이런 구상을 할 수 있습니다:
- Python list를 통해 custom stack을 만든다.
- Custom stack에는 적절히 gadget을 배치한다.
- Stack pointer를 원하는 주소(여기선 Python list의 elements 주소)로 변경하는 gadget을 향하도록 한 Python function 객체를 만든다.
- 해당 Python function 객체를 실행한다. Stack pointer가 옮겨지고
ret가 호출되며 원하는 명령이 실행된다!
...많은 것들이 축약되있지만 대략적으로 이런 구상이 가능하죠. 이제 이를 이용해서 취약점을 만들 시간입니다!
Gadget 찾기
앞서 말했듯 ROP를 하기 위해선 적절한 gadget을 찾는 것이 중요합니다. 저는 이를 위해 ROPgadget 툴을 이용했습니다. 원하는 executable과 함께 툴을 실행하면 ret로 끝나는 모든 asm 명령들을 메모리 주소 값과 함께 찾아줍니다! (가상 메모리 주소까지 고려해서요!)
다음엔 두 가지 방법이 있습니다:
- Executable 메모리를 읽으며 gadget 주소를 동적으로 찾기
- 미리 해당 gadget들의 주소를 적어둔
dict만들기
Xbox One/Series에선 1번 방법을 사용할 수 있었지만, PS에선 후에 언급할 내용 때문에 2번 방법을 쓸 수 밖에 없었습니다.
Stack pointer를 원하는 주소로 옮기기
이제 stack pointer를 만들어둔 Python list 주소로 옮기면 되는데, 어떻게 옮길까요? 저희가 원하는건 (x86_64 기준) mov rsp, ???와 ret입니다. 여기서 저 ???부분이 중요한데, 왜냐하면 Python function 호출이 어떻게 이루어지는지 알아야하며, 실행되는 CPU와 OS의 함수 호출 convention도 알아야하기 때문입니다.
여기서 함수 호출 convention이란 함수를 호출할 때 몇번째 argument가 어떤 register에 들어가는지를 뜻합니다.
Linux/UNIX 기반 OS의 x86_64 함수 호출 convention 순서는 다음과 같습니다: RDI, RSI, RDX, RCX, R8, R9
그리고 Python function 호출은 다음과 같이 이루어집니다:
function_call(PyObject* func, PyObject *arg, PyObject *kw)
따라서 만약 mov rsp, [rdi + 0x30]; ret 라는 명령을 찾았다면, 직접 만드는 Python function 객체 안 0x30 정도 되는 곳에 원하는 stack 주소를 넣어야할 것이고, mov rsp, [rsi + 0x10]; ret 라는 명령을 찾았다면, 직접 tuple 객체를 만든 후 0x10 정도 되는 곳에 stack 주소를 저장, 만든 function 객체를 부를 때 my_func(*custom_tuple)과 같이 호출해야 할 것입니다.
다 만들었으니 실행하면 되는데... Python으로 못 돌아오고 crash?
ROP에서 가장 중요한걸 깜빡했네요. 직접 만든 stack을 실행하고 나선 다시 원래 stack으로 돌아와야겠죠.
저같은 경우는 push rbp; mov rbp, rsp; xor esi, esi; call [rdi + 0x130] 명령을 이용하여 rbp에 rsp를 저장한 후 원하는 명령을 실행하도록 만들었습니다(rdi + 0x130에는 stack pointer를 변경하는 명령이 있습니다).
이 다음 원하는 명령 실행 후 mov rsp, rbp; pop rbp; ret 명령을 통해 다시 원래 stack pointer로 돌아옵니다.
이렇게만 하면 될까요..? 아닙니다. 이렇게 하면 Python이 함수의 return value(x86_64 기준 RAX register)를 참조하려다 잘못된 값을 참조하여 오류가 발생합니다. 그럼 어떻게 해야할까요?
정답은 None 객체를 반환해주는 것입니다. 이렇게 하면 Python에게 정상적인 값을 반환하게 되며, 오류가 발생하지 않게 됩니다. (그리고 네, None도 하나의 객체입니다.)
주의할 점은 None 객체의 refcount를 1만큼 올려주어야 합니다. 그렇지 않으면 Python이 return value의 refcount를 줄이려 할 때, underflow 문제가 발생할 수 있습니다.
이것까지 마치면, 진짜로 저희가 원하는 명령을 실행할 수 있게 됩니다!
Xbox에서 테스트!
Xbox One Research 팀의 도움을 받아 Ren'Py 게임 파일을 받은 뒤 gadget을 찾고, 돌려봤습니다!

Xbox에서 먼저 테스트한 결과 정상적으로 socket을 여는데 성공했으며, 해당 socket으로 다른 Python script를 실행하는 데 성공했습니다! (참고로 해당 게임은 Python의 socket 모듈을 지원하지 않습니다.)
Xbox 같은 경우 Windows와 거의 비슷한 함수를 사용할 수 있어서 편하게 진행할 수 있었습니다.
대망의 PS...
그렇게 Xbox에서 테스팅 후 몇달 뒤, PS 해킹에도 관심이 생겨 알아보게 되었습니다.
그렇게 알게된 Xbox와의 차이점은...
- FreeBSD 기반의 OS를 사용함
- 자체적인 syscall들이 존재함
- 메모리에 올라간 실행 파일에는 ELF 해더가 없음(Import table 알 수 없음)
- 실행 파일에 기록된 모듈만 로드할 수 있음
- PS5 기준: 실행 파일이 담긴 메모리 영역을 읽을 수 없음(XOM)
...Gadget 찾기에서 2번 방법을 사용한 이유가 XOM(eXecutable Only Memory) 때문입니다. 사실 PS4에선 1번 방법을 사용할 수 있지만, 저는 PS5 게임도 지원하고 싶었습니다.
PS5 Research & Development Discord 서버의 도움을 받아 게임 파일을 받았고, 똑같이 gadget을 찾아 작성하였습니다.
위에 적힌 제약들이 있어도, 기본 작동은 비슷하기 때문에 큰 문제 없이 만들 수 있었고, 그렇게 테스트를 한 결과..!

성공적으로 작동되었고, yarpe가 탄생할 수 있었습니다.
마무리
여기까지 오는데 (중간에 쉬었지만) 거의 1년이라는 시간이 걸렸습니다. 만들면서 힘든 것 보단 재밌다는 느낌을 더 많이 받았네요. (만드는 동안은 잠자는 시간마저 줄여가며 만들었던 것 같습니다.)
마무리하기 전에, 저에게 도움이 되었던 분들을 소개하며 끝내고자 합니다.
- Xbox One Research 팀: 이 프로젝트의 시작점이 되어주었으며, 핵심 부분을 구성하는데 큰 도움이 되었습니다. (tuxuser, LukeFZ, Billy, harold님 등이 도와주셨습니다.)
- Dr.Yenyen: PS4/5 게임들의 파일을 제공해주셨고, 많은 테스트를 진행해주셨습니다.
- Gezine: 취약점을 개발하며 제가 궁금했던 부분이나 잘못된 부분을 답변/지적 해주셨습니다.
- Sajjad: Dr.Yenyen님과 함께 많은 테스트를 진행해주셨습니다.
- cow: 직접 파일 대조까지 해주시며 문제가 되는 부분을 고쳐주셨습니다.
- earthonion: 테스트를 진행해주셨으며 많은 조언을 해주셨습니다.
긴 글 읽어주셔서 감사합니다.
Subscribing to the CrowdSupply newsletter was a bad, *bad* choice for my "resisting impulse purchases" track record 😬
💸 💸 💸
Fully open (open source and open hardware), easy to repair dual screen e-book reader built around the ESP32-S3
https://www.crowdsupply.com/diptyx/diptyx-e-reader
(you are welcome)
Soooo... #JustBetweenUs There's already some big stuff in the works for 2026:
The Social Web Foundation (@swf) has kicked off a project to bring real end-to-end encryption to the Fediverse. It's a big undertaking, with real financial backing from the
@sovtechfundSovereign Tech Agency
Check out the announcement: https://socialwebfoundation.org/2025/12/19/implementing-encrypted-messaging-over-activitypub/
And, I'm very excited that #Emissary is one of the projects selected to participate in the work alongside the
@bonfire team.
1/
Implementing Encrypted Messaging over ActivityPub
One of the project areas of the Social Web Foundation for the last year has been end-to-end encrypted messaging. ActivityPub, the standard protocol that powers the Social Web, has privacy controls,…
socialwebfoundation.org · Social Web Foundation
Link author: Evan Prodromou@evanprodromou@socialwebfoundation.org
Calling all #fediverse developers for help: I'm currently trying to implement a #reporting (#flag) feature for Hackers' Pub, an #ActivityPub-enabled community for software engineers. Is there a formal specification for how cross-instance reporting should work in ActivityPub? Or, is there any well-documented material that explains how the major implementations handle it?
#TIL The word "Tsundoku (積ん読)"
https://en.wikipedia.org/wiki/Tsundoku
"...is the phenomenon of acquiring reading materials but letting them pile up in a home without reading them. The term is also used to refer to unread #books on a bookshelf meant for reading later."
Just had the realization that my last post could be summarized as:
"I’m a TCP person in a UDP world"
https://ploum.net/2025-12-15-communication-entertainment.html
Thinking of using a Raspberry Pi as your daily driver? These Linux distro options might surprise you. 🖥️
We’re hiring! Looking for people who can write Windows kernel drivers. https://careers.theori.io/ko/o/191654
Vibe coding an open source project means giving up on collaboration.
Nobody wants to read your AI slop.
Nobody wants to write up a bug report that will just be fed to the LLM.
Nobody wants to spend more time debugging something than you spent writing it.
Nobody wants to spend time implementing a new feature when the existing ones are held on by autocomplete vomit.
Nobody wants to share ideas, feedback, or critiques when they know they won't matter to the LLM.
incredible, github is going to start charging for self-hosted actions runners (in private repositories)
We are introducing a $0.002 per-minute Actions cloud platform charge for all Actions workflows across GitHub-hosted and self-hosted runners.
https://resources.github.com/actions/2026-pricing-changes-for-github-actions/
"Hello, We're Firefox, The Only Browser That Hasn't Hit Itself In The Dick With A Hammer. For years now, folks use us because of our un-hammered dick. Now, you may be wondering why today we've brought this hammer and pulled out our dick. Well I'm glad you asked--"
Building a Commodore 64 Laptop
https://hackaday.com/2025/12/15/building-a-commodore-64-laptop/
Finally, A Pipe Slapophone With MIDI
https://hackaday.com/2025/12/14/finally-a-pipe-slapophone-with-midi/
I'm probably not going to buy Steam Machine given I highly doubt it will be as upgradable as normal desktops, but I still hope it serve as a chance for a lot of people to try Linux and see how it's feasible for everyday use.
(If you want to see that today you can just install Bazzite)
최근 부탁을 받아 PixiJS로 작은 미니 게임을 하나 만들었습니다. 만든 게임은 나이키의 조던 출시 이벤트 파티에서 쓰였습니다. 제가 만든 프로그램을 사람들이 사용하는 모습을 현장에서 직접 보니 신기하기도 하고 뿌듯하기도 했네요. 가끔 정형적인 앱에서 벗어나 자유분방한 프로그램을 만들고 싶었는데 그런 욕구를 해소할 수 있는 좋은 기회였습니다!
I'll be presenting @fedifyFedify: ActivityPub server framework at
@fosdem 2026! My talk Fedify: Building ActivityPub servers without the pain was accepted for the Social Web Devroom. See you in Brussels on January 31–February 1!
“Transgender for everybody”, but unironically. As in, spend some time deconstructing your gender and then actively choose what gender roles and expressions you actually do and don’t want to perform. Deconstruct your sexuality too. Deconstruct your religion. Deconstruct anything you were indoctrinated into so you can be authentically you
RP2350 Done Framework Style
https://hackaday.com/2025/12/08/rp2350-done-framework-style/
내가 느끼는 가장 큰 #cosmoslide 의 진입장벽이라면 activitypub 관련 코드랑 비즈니스 로직이랑 완전히 커플링되어 있는 것도 좀 큰 것 같은데, 어떻게 계층을 분리할 수 있을지 고민임.
Misskey도 계층이 잘 분리가 되어있어서 군데군데 테스트가 적당히 짜여져 있는데.... 당장은 OpenAI Codex/Claude Code on Web으로 짜도 기여할 수 있을 정도로 구조를 잘 다듬긴 해야겠다는것
Officially unemployed now after almost 5 years at aws working completely in the open on the Rust compiler.
With https://rustnl.org/fund/ and https://rustfoundation.org/media/announcing-the-rust-foundation-maintainers-fund/ both figuring out how to ensure maintainers are paid to do reviews, refactorings and mentoring, I'm optimistic I can continue doing my work in the future.
If your company uses Rust a lot and would like to support it and talk about how that support can either indirectly or directly benefit its Rust-writing employees, I'm happy to chat to explain both funds and make the connection to the right fund for you. Or just skip directly to one of the funds if you already know ppl there!
I think I have identified a fairly significant flaw in how the #Fediverse currently operates. Hear me out.
The Fediverse currently consists of all sorts of different systems - #Mastodon, #Friendica , #Pixelfed , #PeerTube, #BookWyrm , and so forth. And while they are all connected via the #ActivityPub protocol, they all have different functionalities and different ways of presenting themselves. Which is as it should be, because Diversity Is Our Strength(TM).
However, it is here that the ActivityPub-based interactivity hits its limits - for usually, you can either experience the relevant system as it was intended, or you can interact with it, but not both - _unless_ you have an account on the same system (though not necessarily on the same instance).
Let's say that you are a Mastodon user who looks at another person's BookWyrm page. You scroll through their books, posts, and comments. Then you see some comment you want to comment on yourself, but can you do so?
Not directly. You need to figure out the URL of their comment, and then copy and paste that comment into the search bar of your Mastodon instance. Then it will show up in the same format as a Mastodon post, and you can interact with it - boost it, like it, comment on it.
Sure, it works, but it's a whole lot of tedious effort.
Or you can search for the user account in Mastodon and scroll through all their posts and comments as if they were a Mastodon user - and thus, you will miss out on all the unique user interface features of BookWyrm.
So what is missing?
Well, Mastodon already has an "Open original page" feature when looking at someone's post. What we need is an "Open original page AND AUTHENTICATE" feature. This way, the target instance (whatever software they are using) could acknowledge the viewer as an external user who could nevertheless fully interact with the local user interface, including the ability to boost, like, and make comments.
This is something that should be theoretically possible to implement, right? #FediHelp
We are currently fighting against a DDoS attack against our service and our status page. We are analyzing network traffic with the help of our ISP at the moment and let you know once we have updates to share.
A while back I mentioned the idea of “Fedify Studio”—a web-based toolkit for #ActivityPub debugging and development. I've been quietly working on shaping that idea into something more concrete.
Nothing to announce yet, but it's looking like this might become a team effort rather than a solo project, which would be nice. We'll see how it goes.
I'd love to go to
@fosdem 2026, but Brussels is just too far from Seoul… and the plane tickets are so expensive. 😭
Hey #fediverse people, I've an ask: If you appreciate all that I do for the fediverse and open social web, and you'd like to see me continue to do that work, please support my work financially.
Right now I'm having to look for work outside of the Fediverse because I simply cannot make ends meet.
I need €60-70k per year to support myself, with costs everywhere feeling increased (so that number may even be too low)
Right now, year to date, I've received a total of €20,170 in financial support from the community, and €22,450 from NLNet grants. I've also only had minimal freelance work this year, as I've been busy on grant work & try to focus on the fediverse & open social web.
So my total income isn't yet enough to be regularly sustainable. I've had problems being able to make rent payments this year because cashflow on grants comes in large chunks usually months after the work has been done.
So if you want to see me keep doing what I'm doing, please support my work!
오늘 코딩(유의어: 클로드 갈구기)는 여기서 포기 사유:
오이카페 모바일 앱이 출시되었어요! 베타 테스트에 참여해주신 여러분, 오이카페에서 활동해 주시는 여러분 모두 응원해주셔서 감사합니다 🥒📲 🥰
iOS: https://apps.apple.com/us/app/oeee-cafe/id6754636117
Android: https://play.google.com/store/apps/details?id=cafe.oeee
Hackers Public @ Seoul 송년회 ---- 2025년의 마지막을 해커들과 함께해요.
Hackers' Public @ Seoul 송년 네트워킹 밋업은 발표보다 대화, 형식보다 연결을 중심으로 진행됩니다. 라이트닝 토크도 지원받습니다. 만들었던 것·배운 것·고민했던 이야기를 자유롭게 얘기해보도록 해요.
많은 관심 부탁드립니다~
- 🗓 12/21(일) 14:30~18:30
- 🎤 라이트닝 토크 5분 자유 참여
- 📌 1차 모집: 11.26~12.5 (회원 대상)
- 신청하기 👉 https://event-us.kr/hackerspubseoul/event/117468
Jiwon shared the below article:
GitHub Action Rerunner
초무 @2chanhaeng@hackers.pub
GitHub Action Rerunner는 팀원들이 레포지토리에 대한 직접적인 쓰기 권한 없이도 실패한 GitHub Actions를 재실행할 수 있도록 권한을 위임하는 웹 애플리케이션입니다. 레포지토리 소유자는 개인 및 조직 레포지토리를 등록하고, 암호화된 Personal Access Token을 등록하여 공유 가능한 고유 링크를 생성할 수 있습니다. 팀원은 이 링크를 통해 자신에게 할당된 PR 목록을 확인하고, 실패한 Action을 원클릭으로 재실행할 수 있습니다. Next.js, React, Tailwind CSS, PostgreSQL, Prisma ORM, Octokit 등의 기술 스택을 사용했으며, GitHub OAuth를 통해 안전한 계정 관리를 제공합니다. 이 도구를 사용하면 레포지토리 보안을 유지하면서도 팀원들이 CI/CD 프로세스를 효율적으로 관리할 수 있어 개발 생산성을 향상시킬 수 있습니다.
Read more →The #PHP 8.5 release announcement page looks amazing! https://www.php.net/releases/8.5/en.php
I’d love to see this design treatment applied to the rest of php.net.
FEP-9f9f: Collections
Collections are the most under-specified entities in #ActivityPub. I've started documenting them in a FEP:
https://codeberg.org/silverpill/feps/src/branch/main/9f9f/fep-9f9f.md
후쿠오카에서 온 에린기와래(새송이버섯 하치와래)
A Couple Of New DOS PCs Appear
https://hackaday.com/2025/11/23/a-couple-of-new-dos-pcs-appear/
Reuse, reinvent, rock out. Your old speakers can get a new life with this:
Brain: You should make a realistic diagram of the IBM Model-F keyboard scancodes
Me, doing something else: What? Why? Right now?
Brain: yes
I'm working on documenting everything about the IBM PC in one place. Like the Pandocs for Gameboy emulation, except for PC.
It looks pretty good on this page. You can click it to get a zoomed-in modal popup.
it has almost always been morally correct to educate yourself in electronics using knock-off Arduino boards at a fraction of the truly absurd retail price, and even more so now that Qualcomm is pulling some truly heinous anti-consumer closed-ecosystem rights-grab shit that spits directly in the face of the open hardware culture that the entire educational devboard concept was founded on.
please, for the love of fucks, don't spend silly money on branded devboards and breakouts. hit up AliExpress and buy an ESP32 devboard or similar for about 5 currency units. these things are hilariously cheap to make and they work perfectly fine. and hell, a dirt cheap ESP32 devboard is basically exactly what an IoT product looks like inside, so if you're looking for transferrable firmware skills then that's a thousand times better suited than AVR (which I've haven't seen in a product in 10yrs)
random protip: you can Ctrl+V in the AliExpress search bar with an image in your clipboard, and it'll let you search by product image. there are a *ton* of things on Amazon and Etsy that are just resold AliExpress stuff at big markups, and this is a quick and easy way to find them.
#TIL file:///abspath and file://localhost/abspath are strictly equivalent per RFC 8089. Python's pypa/packaging had a bug in the past, all URLs without a hostname were rejected, it became impossible to specify a Python pip dependency by path on Debian oldoldstable. The format file://localhost/ saved my package. Thankfully, pip developers got it right.
anyway just learned python typing invented a new kind of voldemort type -- one which when named doesn't actually name it
`float` and `int` are two distinct types in the type system
but if you write `x: float` that actually means `x: float | int`. but if you write `x: float | int` that means `x: float | int | int`.
anyway that's why `ty` has a `JustFloat` extension that is an actual alias for actual `float` that doesn't expand to `float | int`, so you can actual refer to... just float






























