두 번째 「인체 모형의 춤」
3층 과학실에 있는 인체 모형이 밤이면 밤마다 춤을 춘다고 합니다.
옛날에 숙직을 맡은 선생님이 밤늦게 학교를 순찰할 때, 문이 잠긴 과학실에서 소리가 나서 복도 창으로 슬쩍 들여다보았더니 인체 모형이 즐겁게 춤을 추고 있었다고 합니다.
-<긴키 지방의 어느 장소에 대해서> p.199
#인용
’즐겁게‘ 춤추고 있으면 좀 웃길 거 같은데. 🙄
두 번째 「인체 모형의 춤」
3층 과학실에 있는 인체 모형이 밤이면 밤마다 춤을 춘다고 합니다.
옛날에 숙직을 맡은 선생님이 밤늦게 학교를 순찰할 때, 문이 잠긴 과학실에서 소리가 나서 복도 창으로 슬쩍 들여다보았더니 인체 모형이 즐겁게 춤을 추고 있었다고 합니다.
-<긴키 지방의 어느 장소에 대해서> p.199
#인용
’즐겁게‘ 춤추고 있으면 좀 웃길 거 같은데. 🙄
BotKit 0.2.0 릴리스
BotKit 0.2.0 버전이 릴리스되었습니다! BotKit을 처음 접하시는 분들을 위해 간단히 소개하자면, BotKit은 TypeScript로 개발된 독립형 #ActivityPub 봇 프레임워크입니다. Mastodon, Misskey 등 다양한 #연합우주(#fediverse) 플랫폼과 상호작용할 수 있으며, 기존 플랫폼의 제약에서 벗어나 자유롭게 봇을 만들 수 있습니다.
이번 릴리스는 연합우주 봇 개발을 더 쉽고 강력하게 만들기 위한 여정에서 중요한 발걸음입니다. 커뮤니티에서 요청해 왔던 여러 기능들을 새롭게 선보입니다.
더 나은 봇 상호작용을 위한 여정
BotKit을 개발하면서 우리는 항상 봇이 더 표현력 있고 상호작용이 풍부하도록 만드는 데 집중해 왔습니다. 0.2.0 버전에서는 연합우주의 사회적 측면을 봇에 접목시켜 한 단계 더 발전시켰습니다.
커스텀 에모지로 봇의 개성 표현하기
가장 많이 요청받았던 기능 중 하나가 #커스텀_에모지 지원입니다. 이제 봇은 독특한 시각적 요소로 메시지를 돋보이게 하며 자신만의 개성을 표현할 수 있습니다.
// 봇의 커스텀 에모지 정의하기
const emojis = bot.addCustomEmojis({
botkit: {
file: `${import.meta.dirname}/images/botkit.png`,
type: "image/png"
},
fedify: {
url: "https://fedify.dev/logo.png",
type: "image/png"
}
});
// 메시지에 커스텀 에모지 사용하기
await session.publish(
text`BotKit ${customEmoji(emojis.botkit)}은 Fedify ${customEmoji(emojis.fedify)}의 지원을 받습니다`
);
이 새로운 API를 통해 다음과 같은 기능을 사용할 수 있습니다.
Bot.addCustomEmojis()
로 봇에 커스텀 에모지 추가하기customEmoji()
함수로 메시지에 에모지 포함하기Emoji
객체를 text
태그 템플릿에서 사용하기반응을 통한 소통
소통은 단순히 메시지를 게시하는 것만이 아닙니다. 다른 사람의 메시지에 반응하는 것도 중요합니다. 새로운 반응 시스템은 봇과 팔로워 사이에 자연스러운 상호작용 지점을 만들어 줍니다.
// 표준 유니코드 에모지로 메시지에 반응하기
await message.react(emoji`👍`);
// 또는 정의한 커스텀 에모지로 반응하기
await message.react(emojis.botkit);
// 반응을 인식하고 응답하는 봇 만들기
bot.onReact = async (session, reaction) => {
await session.publish(
text`${reaction.actor}님, 제 메시지에 ${reaction.emoji} 반응을 남겨주셔서 감사합니다!`,
{ visibility: "direct" }
);
};
이 기능을 통해 봇은 다음과 같은 작업을 수행할 수 있습니다.
Message.react()
를 사용하여 유니코드 에모지로 메시지에 반응하기Bot.onReact
와 Bot.onUnreact
핸들러로 반응 이벤트 처리하기인용을 통한 대화
토론에서는 종종 다른 사람이 말한 내용을 참조해야 할 때가 있습니다. 새로운 #인용 기능은 더 응집력 있는 대화 스레드를 만들어 줍니다.
// 봇의 게시물에서 다른 메시지 인용하기
await session.publish(
text`이 흥미로운 관점에 대한 답변입니다...`,
{ quoteTarget: originalMessage }
);
// 사용자가 봇의 메시지를 인용할 때 처리하기
bot.onQuote = async (session, quoteMessage) => {
await session.publish(
text`${quoteMessage.actor}님, 제 생각을 공유해 주셔서 감사합니다!`,
{ visibility: "direct" }
);
};
인용 기능을 통해 봇은 다음과 같은 작업을 수행할 수 있습니다.
quoteTarget
옵션으로 메시지 인용하기Message.quoteTarget
을 통해 인용된 메시지에 접근하기Bot.onQuote
이벤트 핸들러로 인용 이벤트 처리하기시각적 개선
소통은 시각적인 요소도 중요하기 때문에 봇의 표현 방식을 개선했습니다.
내부 개선: 향상된 액티비티 전파
연합우주에서 액티비티가 전파되는 방식도 개선했습니다.
이러한 개선 사항은 다양한 연합우주 플랫폼에서 봇의 상호작용이 일관되고 안정적으로 이루어지도록 보장합니다.
BotKit 0.2.0으로 첫 걸음 떼기
이러한 새로운 기능을 경험해 보고 싶으신가요? BotKit 0.2.0은 JSR에서 받을 수 있으며 간단한 명령어로 설치할 수 있습니다.
deno add jsr:@fedify/botkit@0.2.0
BotKit은 Temporal API(JavaScript에서 아직 시범적인 기능)를 사용하므로 deno.json에서 이를 활성화해야 합니다.
{
"imports": {
"@fedify/botkit": "jsr:@fedify/botkit@0.2.0"
},
"unstable": ["temporal"]
}
이 간단한 단계를 통해 최신 기능으로 연합우주 봇을 만들거나 업그레이드할 준비가 완료되었습니다.
앞으로의 전망
BotKit 0.2.0은 연합우주 봇 개발을 접근하기 쉽고, 강력하며, 즐겁게 만들기 위한 우리의 지속적인 노력을 보여줍니다. 이러한 새로운 기능들이 여러분의 봇이 연합우주 커뮤니티에서 더 매력적이고 상호작용이 풍부한 구성원이 되는 데 도움이 될 것이라고 믿습니다.
전체 문서와 더 많은 예제는 저희 문서 사이트에서 확인하실 수 있습니다.
피드백, 기능 요청, 코드 기여를 통해 이번 릴리스에 도움을 주신 모든 분들께 감사드립니다. BotKit 커뮤니티는 계속 성장하고 있으며, 여러분이 만들어낼 작품들을 기대합니다!
BotKit은 ActivityPub 서버 애플리케이션을 만들기 위한 하위 레벨 프레임워크인 Fedify의 지원을 받습니다.
어떤 말에 반응하고 어떤 말을 모르는 척해야 할지 귀신같이 아는 사람들로 가득한 타임라인 #인용 맞아 이거 땜에 지금처럼 흘러가는 형식의 슨스하는 거임...
무한한 슬픔은 크기가 같아서 더 큰 슬픔과 더 작은 슬픔이 다르지 않다고 생각했어. 아니야. 아침 햇살을 받아 선명하게 빛나는 나무를 보고 비 온 뒤에도 세상이 맑고 아름답다고 감탄했다가 원래 여기는 새벽안개가 없다는 말을 들었을 때, 나는 슬펐어. 더 작은 슬픔이 더 큰 슬픔을 게걸스럽게 먹어치우듯이 슬펐어.
-정소연 <미정의 상자> p.172
#인용
> 대통령이나 총리가 중범죄를 저지를 때, 민주주의는 그 누구도 법 위에 군림하지 않는다는 사실을 보여줘야 한다. p.331
“어떻게 극단적 소수가 다수를 지배하는가”
> 국민을 보호해야 하는 국가가 오히려 국민을 탄압하고 죽이는 행태는 한국에서도 찾아볼 수 있습니다. '제주 4·3 사건'이 그런 사례입니다. ... 과연 이 당시 한국 정부에 국가는 국민을 보호해야 한다는 개념이 있었는지를 따져 묻지 않을 수 없습니다. 국민을 지키는 일에 가장 앞장서야 할 군대와 경찰이 오히려 국민을 살해하는 도구가 되어버린 이유를 한 번쯤 생각해 봐야 합니다.
> 이처럼 일본군이 주도한 전쟁에서 특히 돌출되었던 제노사이드 문제가, 전쟁이 끝난 이후 일본의 영향을 받은 여러 동아시아 국가들에서 재현되었다는 점도 되짚어봐야 할 문제입니다. pp.619-20
> 무장한 군인이 민간인을 해치는 것은, 마치 건장한 청년이 노약자를 폭행하는 것과 마찬가지로 일방적인 폭력 행위로서, 사후에라도 반드시 엄중하게 처벌해야만 합니다. 오늘 일본이 벌인 전쟁 과정에서 자행된 제노사이드의 사례를 통해서, 이러한 문제에 대해 한 번쯤 생각해 볼 기회가 되었으면 합니다. p.621
“일본사 시민강좌”
>> 수많은 거대 기술회사가 성역 없는 토론과 '자유로운 발언'이라는 이름으로 이런 집단들을 무의식적으로 부추겨왔다. 이 잘못된 길잡이 때문에 지지자들은 '햇빛은 최고의 소독제다'라는 미국 대법원관 루이스 브랜다이스의 말을 인용하며 오픈 플랫폼이 혐오와 테라리즘의 부정을 만천하에 드러낼 것이라고 주장한다. 하지만 우리가 레딧과 트위터, 고대디, 클라우드플레어 등 다양한 플랫폼에서 얻은 교훈은 공개적인 노출이 이러한 신념을 지속적으로 일상화하고, 장려하고, 증폭시킨다는 것이다. (엘런 파오) (238쪽)
> 이렇기에 온라인 괴롭힘에 대한 소셜미디어의 안일한 대응은 그것을 양산하는 온라인 소굴을 더욱 급진화하고 통합하는 데 일조할 뿐이다. (242쪽)
> “현실감은 전혀 없지만, 그렇다면 우리는 행복한 거네.”
> “징병제도도 없고.”
> “언젠가 어떤 정치인이 우리나라에도 징병제도를 부활시켜야 한다고 발언한 적이 있지? 그때 우리 아버지가 혹시라도 그런 일이 벌어지면 무슨 수를 써서든 나는 해외로 도망치게 해준다고 했어.”
> ―내 아들에게 전쟁 따윈 시킬 수 없어.
> “좋은 얘기네.”
> “뭐, 조금 의미가 다르긴 했지만.”
> 덴코가 웃었다.
> “나도 전쟁을 해본 적이 없는데 너한테만 체험시킬 순 없다는 거였지.”
“고구레 사진관” 하, p.232
1921년 카렐 차페크는 희곡 <알유알(RUR: Rosiumis Unitesl (Robocs)>을 체코 프라하에서 최초로 공개한 뒤, 이듬해 뉴욕에서 막을 올리기 위해 대사를 영어로 번역했다. 카렐은 극에 등장하는, 공장에서 생산한 휴머노이드 노동자들에 붙일 이름이 필요했다. ’일‘을 의미하는 라틴어 ’labor'를 토대로 새로운 단어를 만들 생각이었다. 그때 그의 형 요제프가 '강제 노동'을 의미하는 옛 체코어 robota가 어떠냐고 제안했다. Robot은 그렇게 탄생했다.
-<100 단어로 본 영어의 역사> p.237
하지만 외부로 가서 가장 성공한 스코틀랜드 표현에 상을 준다면 전통적으로 새해에 부르는 로버트 번스의 시 <Auld Lang Syne>에 돌아가야 할 것이다. 이는 ‘old long since‘의 방언으로 '옛날을 위해'라는 뜻이다.
(중략)
영국의 일개 지역 방언으로서는 나쁘지 않은 성과다.
-<100단어로 본 영어의 역사> p.100
#인용
내가 짐작했던 <올드 랭 사인> 영문이 한 단어도 맞는 게 없었구만. 🙄 맨날 한글로만 봐서.
내가 보기에 가장 이상한 것은 horroshow다. 이 단어는 앤서니 버지스가 <시계 태엽 오렌지(Clockwork Orange)>에서 창조한 단어다. '훌륭한’이라는 뜻의 러시아 단어를 소리 나는 대로 쓴 것으로, 이 책을 통해 영어 속어로 편입되었다. 누군가 ‘<100단어로 본 영어의 역사>란 책은 horroshow하다'고 말해준다면 나로선 정말 기쁠 것이다.
-<100단어로 본 영어의 역사> P.97
#인용
호오...
한강 <서랍에 저녁을 넣어 두었다>
#인용