Skip to content

Instantly share code, notes, and snippets.

View ltlapy's full-sized avatar
๐Ÿฑ
Make sure you have meals regularly, 3 times a day

Ryu jongheon ltlapy

๐Ÿฑ
Make sure you have meals regularly, 3 times a day
View GitHub Profile
@ltlapy
ltlapy / dsm-nginx.sh
Created May 16, 2026 04:14
Helper script for managing nginx user configuration of Synology DSM Web station
#!/bin/bash
# dsm-nginx - Synology DSM nginx custom config manager
#
# DSM periodically regenerates nginx config files, but includes 'include path*'
# directives pointing to files it never creates. This script manages those
# user-owned files, which survive DSM resets.
#
# Custom config hooks per Web Station portal:
# conf.d/<service-id>/user.conf โ€” server block context
# conf.d/<service-id>/proxy.conf โ€” proxy_pass location context
@ltlapy
ltlapy / notes-purge.aiscript
Last active September 5, 2025 00:30
๋…ธํŠธ ์ฒญ์†Œ๊ธฐ
// @ 0.19.0
// ๋…ธํŠธ ์ฒญ์†Œ๊ธฐ: ์ผ์ • ์‹œ๊ฐ„์— ์˜ค๋ž˜๋œ/์ƒˆ๋กœ์šด ๋…ธํŠธ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค
// ๊ฐ™์€ ๊ณ„์ •์—์„œ ๋…ธํŠธ ์ฒญ์†Œ๊ธฐ๊ฐ€ ๋™์ž‘ ์ค‘์ผ๋•Œ์—๋Š” ์ ˆ๋Œ€๋กœ ๋‹ค๋ฅธ ์ฐฝ/๊ธฐ๊ธฐ์—์„œ ๋™์‹œ์— ์‹คํ–‰ํ•˜์ง€ ๋งˆ์„ธ์š”
// (์ƒˆ๋กœ๊ณ ์นจํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์ง„ํ–‰๋˜์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋”๋ผ๋„ ์ฒญ์†Œ๊ธฐ๊ฐ€ ๊ณ„์†ํ•ด์„œ ๋™์ž‘ํ•˜๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค)
// v 0.5.5 ๋…ธํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ์˜ ์ฒ˜๋ฆฌ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๋ฌธ์ œ ํ•ด๊ฒฐ
// v 0.5.4 REMOVE_FROM_NEW ๊ด€๋ จ ์•ˆ๋‚ด ์˜ค์ž‘๋™ ํ•ด๊ฒฐ
// v 0.5.3 REMOVE_FROM_NEW ๊ด€๋ จ ์•ˆ๋‚ด ์ถ”๊ฐ€
// v 0.5.2 ๊ตฌ๋ฌธ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ
// v 0.5.1 ๊ตฌ๋ฌธ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ
// v 0.4 ๋…ธํŠธ ์กฐํšŒ ์‹œ ๋ฐœ์ƒํ•˜๋Š” Rate limit๋ฅผ ๋ฌด์‹œํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ. ์•Œ๋ฆผ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
@ltlapy
ltlapy / deleted_emoji_dump.aiscript
Created May 11, 2025 02:04
ํŠน์ • ์œ ์ €๊ฐ€ ์ง€์ •ํ•œ ์‹œ์  ์ดํ›„์— ์‚ญ์ œํ•œ ์ปค์Šคํ…€ ์ด๋ชจ์ง€ ๋คํ”„
// ํŠน์ • ์œ ์ €๊ฐ€ ์ง€์ •ํ•œ ์‹œ์  ์ดํ›„์— ์‚ญ์ œํ•œ ์ปค์Šคํ…€ ์ด๋ชจ์ง€ ๋ณต๊ตฌ
// !! ์‚ฌ์šฉ ์ „ API ๋ฆฌ๋ฐ‹ ํ•ด์ œ
let userId = 'a4ap7lwhjy'
let timeAfter_timestamp = '2025-05-05T09:00:00.000Z'
var lastLogId = "ffffffffffffffffffffff" // ํŠน์ • id ์ด์ „์˜ ํŽธ์ง‘ ๋กœ๊ทธ๋ถ€ํ„ฐ ์‚ดํ”ผ๋ ค๋ฉด ์‚ฌ์šฉ
// ---
var emojis = []
let timeAfter = Date:parse(timeAfter_timestamp)

Sharkey ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋กค๋ฐฑ

ํ™˜๊ฒฝ

์–ผ๋งˆ ์ „ Firefish์—์„œ Sharkey๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ ๋‹ค์Œ, Iceshrimp๋กœ ๋‹ค์‹œ ์ด์ „ํ•˜๋ ค๋Š” ์ƒํ™ฉ์ด๋‹ค. Sharkey 2024.9.0

์ผ๋ถ€ ์ปฌ๋Ÿผ ๋ฐฑ์—…

movedToUri, alsoKnownAs, (isIndexable,) speakAsCat, preventAiLearning, silencedHosts ๋Š” iceshrimp(/firefish)์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋กค๋ฐฑ ์ค‘์— ์†Œ์‹ค๋œ๋‹ค. ์ด๋ฅผ ๋ฏธ๋ฆฌ ๋ฐฑ์—…ํ•œ๋‹ค.

ALTER TABLE "user" ADD "ices_movedToUri" character varying(512);
ALTER TABLE "user" ADD "ices_alsoKnownAs" TEXT;
COMMENT ON COLUMN "user"."ices_movedToUri" IS 'The URI of the new account of the User';
@ltlapy
ltlapy / revert-1680582195041-cleanup.sql
Last active October 5, 2024 19:38
misskey dropped notification table during migration, and rollback of the table is not implemented
-- from init
CREATE TABLE "notification" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "notifieeId" character varying(32) NOT NULL, "notifierId" character varying(32) NOT NULL, "type" character varying(32) NOT NULL, "isRead" boolean NOT NULL DEFAULT false, "noteId" character varying(32), "reaction" character varying(128), "choice" integer, CONSTRAINT "PK_705b6c7cdf9b2c2ff7ac7872cb7" PRIMARY KEY ("id"));
CREATE INDEX "IDX_b11a5e627c41d4dc3170f1d370" ON "notification" ("createdAt") ;
CREATE INDEX "IDX_3c601b70a1066d2c8b517094cb" ON "notification" ("notifieeId") ;
ALTER TABLE "notification" ADD CONSTRAINT "FK_3c601b70a1066d2c8b517094cb9" FOREIGN KEY ("notifieeId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION;
ALTER TABLE "notification" ADD CONSTRAINT "FK_3b4e96eec8d36a8bbb9d02aa710" FOREIGN KEY ("notifierId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION;
ALTER TABLE "notification" ADD CONSTRAINT "FK_769cb6b73a1efe22ddf733ac453" FOREIGN KEY
@ltlapy
ltlapy / userBatchAddToList.aiscript
Last active May 10, 2024 07:51
์—ฌ๋Ÿฌ ๋ช…์˜ ์œ ์ €๋ฅผ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๋Š” ์•„์ด์Šคํฌ๋ฆฝํŠธ
// ----------------------------------
// ์•„๋ž˜ ํ•ญ๋ชฉ์„ ์ฑ„์šฐ๊ณ  ์Šคํฌ๋ž˜์น˜ ํŒจ๋“œ์—์„œ ์‹คํ–‰
// ์‹คํ–‰ ์ „ API ๋ฆฌ๋ฐ‹ ํ•ด์ œ ์—ฌ๋ถ€ ๋ฐ˜๋“œ์‹œ ํ™•์ธ
// ----------------------------------
let listId = "xxxxxxxxx"
let userHandles = [
// @username
// @username@host
]
@ltlapy
ltlapy / UnsetLocalOnlyEmoji.aiscript
Last active March 2, 2024 16:03
Misskey์˜ ๋ชจ๋“  ์ด๋ชจ์ง€์— ์„ค์ •๋œ ๋กœ์ปฌ ์ „์šฉ์„ ํ•ด์ œ
/// @ 0.15.0
// ***์‹คํ–‰ ์ „ API ์ œํ•œ์„ ํ•ด์ œํ•  ๊ฒƒ(0%)***
var Emojis = []
var LastFetchedId = 'zzzzzzzzzzzzzzzzzzzzz'
<: '์ด๋ชจ์ง€ ๊ฐ€์ ธ์˜ค๋Š” ์ค‘...'
loop {
let res = Mk:api("admin/emoji/list", {
allowPartial: true
@ltlapy
ltlapy / killUser.aiscript
Last active February 17, 2024 00:50
AiScript ์œ„์ ฏ: ๊ณ„์ • ๋ง์†Œ๊ธฐ
var handle = ""
var logTxt = ""
let logClear = @() {
logTxt = ""
Ui:get('killUserLog').update({ text: logTxt })
}
let log = @(s) {
logTxt = `{logTxt}{Str:lf}{s}`
Ui:get('killUserLog').update({ text: logTxt })
@ltlapy
ltlapy / timestamp_purge.aiscript
Last active February 20, 2024 02:20
ํŠน์ • ์‹œ์  ์ด์ „์˜ ๊ณ„์ •์„ ๋ฒŒํฌ ์‚ญ์ œํ•˜๋Š” ๊ด€๋ฆฌ์ž์šฉ ์Šคํฌ๋ฆฝํŠธ
let host = 'example.com'
let timeBefore_timestamp = '2100-12-31T23:59:59.999Z'
// ----
var offset = 0
var accounts = []
let timeBefore = Date:parse(timeBefore_timestamp)
<: `{host} ์˜ ๊ณ„์ •์„ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค...`
loop {
let res = Mk:api('admin/show-users', {
@ltlapy
ltlapy / misc.py
Last active April 10, 2023 18:31
VTX ๋ฒกํ„ฐ ๊ทธ๋ž˜ํ”ฝ
# ๋จผ์ € ์‹คํ–‰ํ•˜์‹œ์˜ค(๊ธฐ๋ฐ˜ ํ•จ์ˆ˜๋“ค)
def str_chunk(data, size):
return [data[i:i+size] for i in range(0, len(data), size)]
# ์ฃผ์–ด์ง„ ์ •์ˆ˜๋ฅผ n๋น„ํŠธ ๋‹จ์œ„๋กœ ์ชผ๊ฐฌ
def bit_chunk(data: int, bit, size=0, significant='MSB') -> list:
res = []
while data > 0:
res.append(data % (2 ** bit))