{"feed":[{"post":{"uri":"at://did:plc:tnzzspwdryr77okfilhuh6bd/app.bsky.feed.post/3mbnhicscys2e","cid":"bafyreiguf4kefo6qhbkun6fv5oyb37yqxrjkhma6fggvf5crwdz2jlncru","author":{"did":"did:plc:tnzzspwdryr77okfilhuh6bd","handle":"ryjo.codes","displayName":"","avatar":"https://cdn.bsky.app/img/avatar/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreigvdo6zpc5hirpttppfcrhip5mbvtn4lcw3oqpevfvudjni7khxv4","associated":{"activitySubscription":{"allowSubscriptions":"followers"}},"labels":[],"createdAt":"2025-05-14T14:45:59.042Z"},"record":{"$type":"app.bsky.feed.post","createdAt":"2026-01-05T03:07:38.453Z","embed":{"$type":"app.bsky.embed.images","images":[{"alt":"A screenshot of the CLIPSmqueue GitHub repository. The original post attempts to call attention to a tiny green checkmark located in the upper area of the image slightly off-center to the right. It is to the right of text that reads \"mrryanjohnston Return exit code 1 or 0 if fails or succeeds tests. Add gith...\". It is to the left of the git commit sha, the text \"2 minutes ago,\" and \"2 commits.\"\n\nBelow this area lists the files in the repository.\n\nBelow this section is the rendered README.md file.\n\nTo the right of both of these sections is an \"About\" section which reads \"A POSIX message queue library for CLIPS.\"\n\nAt the top of the page is the title of the project \"CLIPSmqueue.\"","aspectRatio":{"height":776,"width":1258},"image":{"$type":"blob","ref":{"$link":"bafkreienjciky5ikmat4rkqf4ldtg7hmuhx4k3tojxjfgtkieaqbrjocki"},"mimeType":"image/jpeg","size":224795}}]},"facets":[{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"programming"}],"index":{"byteEnd":255,"byteStart":243}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"coding"}],"index":{"byteEnd":263,"byteStart":256}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"github"}],"index":{"byteEnd":271,"byteStart":264}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"CLIPS"}],"index":{"byteEnd":278,"byteStart":272}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"mqueue"}],"index":{"byteEnd":286,"byteStart":279}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"rulesengines"}],"index":{"byteEnd":300,"byteStart":287}}],"langs":["en"],"text":"Just added a GitHub action to my CLIPSmqueue repo[1] that runs the full test suite when new commits are pushed. Seeing that little green checkmark next to the commit message is so satisfying.\n\n[1]https://github.com/mrryanjohnston/CLIPSmqueue\n\n#programming #coding #github #CLIPS #mqueue #rulesengines"},"embed":{"images":[{"thumb":"https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreienjciky5ikmat4rkqf4ldtg7hmuhx4k3tojxjfgtkieaqbrjocki","fullsize":"https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreienjciky5ikmat4rkqf4ldtg7hmuhx4k3tojxjfgtkieaqbrjocki","alt":"A screenshot of the CLIPSmqueue GitHub repository. The original post attempts to call attention to a tiny green checkmark located in the upper area of the image slightly off-center to the right. It is to the right of text that reads \"mrryanjohnston Return exit code 1 or 0 if fails or succeeds tests. Add gith...\". It is to the left of the git commit sha, the text \"2 minutes ago,\" and \"2 commits.\"\n\nBelow this area lists the files in the repository.\n\nBelow this section is the rendered README.md file.\n\nTo the right of both of these sections is an \"About\" section which reads \"A POSIX message queue library for CLIPS.\"\n\nAt the top of the page is the title of the project \"CLIPSmqueue.\"","aspectRatio":{"height":776,"width":1258}}],"$type":"app.bsky.embed.images#view"},"bookmarkCount":0,"replyCount":0,"repostCount":0,"likeCount":2,"quoteCount":0,"indexedAt":"2026-01-05T03:07:40.635Z","labels":[]}},{"post":{"uri":"at://did:plc:tnzzspwdryr77okfilhuh6bd/app.bsky.feed.post/3m7kxi6eck22f","cid":"bafyreib4au7bfrmnhezazjcpbs4vtt7hqhydlesejzk6w3gk5emjeb76bi","author":{"did":"did:plc:tnzzspwdryr77okfilhuh6bd","handle":"ryjo.codes","displayName":"","avatar":"https://cdn.bsky.app/img/avatar/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreigvdo6zpc5hirpttppfcrhip5mbvtn4lcw3oqpevfvudjni7khxv4","associated":{"activitySubscription":{"allowSubscriptions":"followers"}},"labels":[],"createdAt":"2025-05-14T14:45:59.042Z"},"record":{"$type":"app.bsky.feed.post","createdAt":"2025-12-09T16:25:31.200Z","facets":[{"features":[{"$type":"app.bsky.richtext.facet#link","uri":"https://public.api.bsky.app/xrpc/app.bsky.feed.getAuthorFeed?actor=ryjo.codes"}],"index":{"byteEnd":120,"byteStart":85}}],"langs":["en"],"reply":{"parent":{"cid":"bafyreieleuslw22gpbuyeeqazhbix6gyotc6v32xtw4catqf333ylylspu","uri":"at://did:plc:64uzkaydbwywtrvn7ogol22r/app.bsky.feed.post/3m7jdh4jg2c2y"},"root":{"cid":"bafyreieg4zcf22kungqml5fpueelyeyizw3tst36n636h2exdsff6bqsni","uri":"at://did:plc:64uzkaydbwywtrvn7ogol22r/app.bsky.feed.post/3m7jdazz2ec2y"}},"text":"Definitely possible. Get the content with a `curl` command and save to a file: `curl public.api.bsky.app/xrpc/app.bsk... | jq '.feed[].post | [ .record.text, .indexedAt ]' > index.html`. Run an http server in that file and visit localhost:3000 in IE7. Voila"},"bookmarkCount":0,"replyCount":0,"repostCount":0,"likeCount":0,"quoteCount":0,"indexedAt":"2025-12-09T16:25:33.235Z","labels":[]},"reply":{"root":{"uri":"at://did:plc:64uzkaydbwywtrvn7ogol22r/app.bsky.feed.post/3m7jdazz2ec2y","cid":"bafyreieg4zcf22kungqml5fpueelyeyizw3tst36n636h2exdsff6bqsni","author":{"did":"did:plc:64uzkaydbwywtrvn7ogol22r","handle":"ari.express","displayName":"Ariad?n[ae]","pronouns":"she/her","avatar":"https://cdn.bsky.app/img/avatar/plain/did:plc:64uzkaydbwywtrvn7ogol22r/bafkreih3dk26n6slnyvmcmg7a7d443ipyzpysodm62vdfd5uivjybc567m","associated":{"chat":{"allowIncoming":"all"},"activitySubscription":{"allowSubscriptions":"followers"},"germ":{"showButtonTo":"usersIFollow","messageMeUrl":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}},"labels":[],"createdAt":"2024-10-29T01:20:33.305Z","status":{"uri":"at://did:plc:64uzkaydbwywtrvn7ogol22r/app.bsky.actor.status/self","cid":"bafyreidfyehzmf52fow3c664d6ha3njj45zzwqu2ytjh4ehee6wxxpvhku","record":{"$type":"app.bsky.actor.status","createdAt":"2026-01-17T06:16:43.728Z","durationMinutes":240,"embed":{"$type":"app.bsky.embed.external","external":{"$type":"app.bsky.embed.external#external","description":"配信を基本を学び、スキルを磨いたり、同じ道を歩んだストリーマーからアドバイスやテクニックを得たりしましょう。虫よけスプレーや日焼け止め、安っぽい歌も必要ありません。（少しだけ歌を歌うことはあるかも…？）","thumb":{"$type":"blob","ref":{"$link":"bafkreigj6rn4dbrk5rqhiyte6b2merini6tuxaznylrowx2qecpdhf43ta"},"mimeType":"image/jpeg","size":290407},"title":"Twitchクリエイターキャンプへ","uri":"https://www.twitch.tv/creatorcamp/ja-jp/"}},"status":"app.bsky.actor.status#live"},"status":"app.bsky.actor.status#live","embed":{"external":{"uri":"https://www.twitch.tv/creatorcamp/ja-jp/","title":"Twitchクリエイターキャンプへ","description":"配信を基本を学び、スキルを磨いたり、同じ道を歩んだストリーマーからアドバイスやテクニックを得たりしましょう。虫よけスプレーや日焼け止め、安っぽい歌も必要ありません。（少しだけ歌を歌うことはあるかも…？）","thumb":"https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:64uzkaydbwywtrvn7ogol22r/bafkreigj6rn4dbrk5rqhiyte6b2merini6tuxaznylrowx2qecpdhf43ta"},"$type":"app.bsky.embed.external#view"},"labels":[],"expiresAt":"2026-01-17T10:16:43.728Z","isActive":false}},"record":{"$type":"app.bsky.feed.post","createdAt":"2025-12-09T00:50:57.181Z","langs":["en"],"text":"Kinda wanna try making a Web 1.0 bluesky client, I wonder if it's even possible"},"bookmarkCount":0,"replyCount":4,"repostCount":0,"likeCount":25,"quoteCount":0,"indexedAt":"2025-12-09T00:50:58.232Z","labels":[],"$type":"app.bsky.feed.defs#postView"},"parent":{"uri":"at://did:plc:64uzkaydbwywtrvn7ogol22r/app.bsky.feed.post/3m7jdh4jg2c2y","cid":"bafyreieleuslw22gpbuyeeqazhbix6gyotc6v32xtw4catqf333ylylspu","author":{"did":"did:plc:64uzkaydbwywtrvn7ogol22r","handle":"ari.express","displayName":"Ariad?n[ae]","pronouns":"she/her","avatar":"https://cdn.bsky.app/img/avatar/plain/did:plc:64uzkaydbwywtrvn7ogol22r/bafkreih3dk26n6slnyvmcmg7a7d443ipyzpysodm62vdfd5uivjybc567m","associated":{"chat":{"allowIncoming":"all"},"activitySubscription":{"allowSubscriptions":"followers"},"germ":{"showButtonTo":"usersIFollow","messageMeUrl":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}},"labels":[],"createdAt":"2024-10-29T01:20:33.305Z","status":{"uri":"at://did:plc:64uzkaydbwywtrvn7ogol22r/app.bsky.actor.status/self","cid":"bafyreidfyehzmf52fow3c664d6ha3njj45zzwqu2ytjh4ehee6wxxpvhku","record":{"$type":"app.bsky.actor.status","createdAt":"2026-01-17T06:16:43.728Z","durationMinutes":240,"embed":{"$type":"app.bsky.embed.external","external":{"$type":"app.bsky.embed.external#external","description":"配信を基本を学び、スキルを磨いたり、同じ道を歩んだストリーマーからアドバイスやテクニックを得たりしましょう。虫よけスプレーや日焼け止め、安っぽい歌も必要ありません。（少しだけ歌を歌うことはあるかも…？）","thumb":{"$type":"blob","ref":{"$link":"bafkreigj6rn4dbrk5rqhiyte6b2merini6tuxaznylrowx2qecpdhf43ta"},"mimeType":"image/jpeg","size":290407},"title":"Twitchクリエイターキャンプへ","uri":"https://www.twitch.tv/creatorcamp/ja-jp/"}},"status":"app.bsky.actor.status#live"},"status":"app.bsky.actor.status#live","embed":{"external":{"uri":"https://www.twitch.tv/creatorcamp/ja-jp/","title":"Twitchクリエイターキャンプへ","description":"配信を基本を学び、スキルを磨いたり、同じ道を歩んだストリーマーからアドバイスやテクニックを得たりしましょう。虫よけスプレーや日焼け止め、安っぽい歌も必要ありません。（少しだけ歌を歌うことはあるかも…？）","thumb":"https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:64uzkaydbwywtrvn7ogol22r/bafkreigj6rn4dbrk5rqhiyte6b2merini6tuxaznylrowx2qecpdhf43ta"},"$type":"app.bsky.embed.external#view"},"labels":[],"expiresAt":"2026-01-17T10:16:43.728Z","isActive":false}},"record":{"$type":"app.bsky.feed.post","createdAt":"2025-12-09T00:54:21.141Z","langs":["en"],"reply":{"parent":{"cid":"bafyreiah6yhfn2x5wbqs57uu2s4pg4mt7cocrhltinmidxg5hafbotchle","uri":"at://did:plc:64uzkaydbwywtrvn7ogol22r/app.bsky.feed.post/3m7jdfmsavs2y"},"root":{"cid":"bafyreieg4zcf22kungqml5fpueelyeyizw3tst36n636h2exdsff6bqsni","uri":"at://did:plc:64uzkaydbwywtrvn7ogol22r/app.bsky.feed.post/3m7jdazz2ec2y"}},"text":"But like the goal of the project should be to be able to use the website on IE 7 with no JavaScript"},"bookmarkCount":0,"replyCount":4,"repostCount":0,"likeCount":7,"quoteCount":0,"indexedAt":"2025-12-09T00:54:21.937Z","labels":[],"$type":"app.bsky.feed.defs#postView"},"grandparentAuthor":{"did":"did:plc:64uzkaydbwywtrvn7ogol22r","handle":"ari.express","displayName":"Ariad?n[ae]","pronouns":"she/her","avatar":"https://cdn.bsky.app/img/avatar/plain/did:plc:64uzkaydbwywtrvn7ogol22r/bafkreih3dk26n6slnyvmcmg7a7d443ipyzpysodm62vdfd5uivjybc567m","associated":{"chat":{"allowIncoming":"all"},"activitySubscription":{"allowSubscriptions":"followers"},"germ":{"showButtonTo":"usersIFollow","messageMeUrl":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}},"labels":[],"createdAt":"2024-10-29T01:20:33.305Z","status":{"uri":"at://did:plc:64uzkaydbwywtrvn7ogol22r/app.bsky.actor.status/self","cid":"bafyreidfyehzmf52fow3c664d6ha3njj45zzwqu2ytjh4ehee6wxxpvhku","record":{"$type":"app.bsky.actor.status","createdAt":"2026-01-17T06:16:43.728Z","durationMinutes":240,"embed":{"$type":"app.bsky.embed.external","external":{"$type":"app.bsky.embed.external#external","description":"配信を基本を学び、スキルを磨いたり、同じ道を歩んだストリーマーからアドバイスやテクニックを得たりしましょう。虫よけスプレーや日焼け止め、安っぽい歌も必要ありません。（少しだけ歌を歌うことはあるかも…？）","thumb":{"$type":"blob","ref":{"$link":"bafkreigj6rn4dbrk5rqhiyte6b2merini6tuxaznylrowx2qecpdhf43ta"},"mimeType":"image/jpeg","size":290407},"title":"Twitchクリエイターキャンプへ","uri":"https://www.twitch.tv/creatorcamp/ja-jp/"}},"status":"app.bsky.actor.status#live"},"status":"app.bsky.actor.status#live","embed":{"external":{"uri":"https://www.twitch.tv/creatorcamp/ja-jp/","title":"Twitchクリエイターキャンプへ","description":"配信を基本を学び、スキルを磨いたり、同じ道を歩んだストリーマーからアドバイスやテクニックを得たりしましょう。虫よけスプレーや日焼け止め、安っぽい歌も必要ありません。（少しだけ歌を歌うことはあるかも…？）","thumb":"https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:64uzkaydbwywtrvn7ogol22r/bafkreigj6rn4dbrk5rqhiyte6b2merini6tuxaznylrowx2qecpdhf43ta"},"$type":"app.bsky.embed.external#view"},"labels":[],"expiresAt":"2026-01-17T10:16:43.728Z","isActive":false}}}},{"post":{"uri":"at://did:plc:4hsqnjpqwr6typ4353xtjpsm/app.bsky.feed.post/3m6znyy6kks2c","cid":"bafyreie4qvxktycewastupotcqdgss3qtm7d3x3f4wuyl37dkrxtl7j23y","author":{"did":"did:plc:4hsqnjpqwr6typ4353xtjpsm","handle":"veni.dev","displayName":"Veni Kunche","avatar":"https://cdn.bsky.app/img/avatar/plain/did:plc:4hsqnjpqwr6typ4353xtjpsm/bafkreigmkfv2rojqmedqad7tuzxece43p2mboc6wk2qrdneivofvbwxt6y","associated":{"activitySubscription":{"allowSubscriptions":"followers"}},"labels":[],"createdAt":"2023-04-21T04:35:55.867Z"},"record":{"$type":"app.bsky.feed.post","createdAt":"2025-12-02T19:20:42.176Z","langs":["en"],"text":"I'm looking through my resume as I need to update it\n\nI think half off these frameworks and tools aren't used any more\n\nOracle ADF, Raphael.js, Backbone.js, Mercurial, Java Server Pages, Servlets, XSLT\n\nAnyway, focus on the fundamentals folks. These frameworks will come and go"},"bookmarkCount":0,"replyCount":6,"repostCount":1,"likeCount":40,"quoteCount":0,"indexedAt":"2025-12-02T19:20:42.334Z","labels":[]},"reason":{"by":{"did":"did:plc:tnzzspwdryr77okfilhuh6bd","handle":"ryjo.codes","displayName":"","avatar":"https://cdn.bsky.app/img/avatar/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreigvdo6zpc5hirpttppfcrhip5mbvtn4lcw3oqpevfvudjni7khxv4","associated":{"activitySubscription":{"allowSubscriptions":"followers"}},"labels":[],"createdAt":"2025-05-14T14:45:59.042Z"},"uri":"at://did:plc:tnzzspwdryr77okfilhuh6bd/app.bsky.feed.repost/3m6zwrci3672y","cid":"bafyreiftnnbsj4h4edu7jvmloyax2fnb2vmwyzo3fnzirknuddfqyobw7m","indexedAt":"2025-12-02T21:57:28.731Z","$type":"app.bsky.feed.defs#reasonRepost"}},{"post":{"uri":"at://did:plc:tnzzspwdryr77okfilhuh6bd/app.bsky.feed.post/3m6pugecgs22l","cid":"bafyreidegerhw6z3c2ysiopf7lmjm3tgebf53pxppmzrp5l5atx6w7zcie","author":{"did":"did:plc:tnzzspwdryr77okfilhuh6bd","handle":"ryjo.codes","displayName":"","avatar":"https://cdn.bsky.app/img/avatar/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreigvdo6zpc5hirpttppfcrhip5mbvtn4lcw3oqpevfvudjni7khxv4","associated":{"activitySubscription":{"allowSubscriptions":"followers"}},"labels":[],"createdAt":"2025-05-14T14:45:59.042Z"},"record":{"$type":"app.bsky.feed.post","createdAt":"2025-11-28T21:48:56.161Z","embed":{"$type":"app.bsky.embed.external","external":{"description":"Use the CLIPS programming language from within Ruby - mrryanjohnston/clipsruby","title":"GitHub - mrryanjohnston/clipsruby: Use the CLIPS programming language from within Ruby","uri":"https://github.com/mrryanjohnston/clipsruby"}},"facets":[{"features":[{"$type":"app.bsky.richtext.facet#link","uri":"https://rubygems.org/gems/clipsruby"}],"index":{"byteEnd":197,"byteStart":170}},{"features":[{"$type":"app.bsky.richtext.facet#link","uri":"https://github.com/mrryanjohnston/clipsruby"}],"index":{"byteEnd":224,"byteStart":198}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"programming"}],"index":{"byteEnd":238,"byteStart":226}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"coding"}],"index":{"byteEnd":246,"byteStart":239}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"ruby"}],"index":{"byteEnd":252,"byteStart":247}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"CLIPS"}],"index":{"byteEnd":259,"byteStart":253}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"C"}],"index":{"byteEnd":262,"byteStart":260}}],"langs":["en"],"text":"Took a break from my next biggest CLIPS library (tm) to add some more functionality to clipsruby. Now you can call CLIPS Deffunctions from within your Ruby application.\n\nrubygems.org/gems/clipsruby\ngithub.com/mrryanjohnst...\n\n#programming #coding #ruby #CLIPS #C"},"embed":{"external":{"uri":"https://github.com/mrryanjohnston/clipsruby","title":"GitHub - mrryanjohnston/clipsruby: Use the CLIPS programming language from within Ruby","description":"Use the CLIPS programming language from within Ruby - mrryanjohnston/clipsruby"},"$type":"app.bsky.embed.external#view"},"bookmarkCount":0,"replyCount":0,"repostCount":0,"likeCount":2,"quoteCount":0,"indexedAt":"2025-11-28T21:48:56.733Z","labels":[]}},{"post":{"uri":"at://did:plc:tnzzspwdryr77okfilhuh6bd/app.bsky.feed.post/3lzzhipxuzs2i","cid":"bafyreihl7hah6siam6cx34lqqbzcn72dwkbhvtlby7wspzppdtvmaaombi","author":{"did":"did:plc:tnzzspwdryr77okfilhuh6bd","handle":"ryjo.codes","displayName":"","avatar":"https://cdn.bsky.app/img/avatar/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreigvdo6zpc5hirpttppfcrhip5mbvtn4lcw3oqpevfvudjni7khxv4","associated":{"activitySubscription":{"allowSubscriptions":"followers"}},"labels":[],"createdAt":"2025-05-14T14:45:59.042Z"},"record":{"$type":"app.bsky.feed.post","createdAt":"2025-09-30T02:18:16.107Z","embed":{"$type":"app.bsky.embed.images","images":[{"alt":"The CLIPS logo with the SQLite logo mashed together. The green silhouette of a man's face, a blue square to the right of it and behind it, a blue feather to the right of the blue square. Underneath of this, all capitals CLIPS followed by QLite from the CLIPS and SQLite logos respectively.","aspectRatio":{"height":800,"width":860},"image":{"$type":"blob","ref":{"$link":"bafkreicqp2ryoecyzvs2mtnkmgi335xkbbvibbksgqw4wic56c4kh5tadi"},"mimeType":"image/jpeg","size":274760}}]},"facets":[{"features":[{"$type":"app.bsky.richtext.facet#link","uri":"https://github.com/mrryanjohnston/CLIPSQLite"}],"index":{"byteEnd":140,"byteStart":114}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"rulesengine"}],"index":{"byteEnd":154,"byteStart":142}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"CLIPS"}],"index":{"byteEnd":161,"byteStart":155}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"coding"}],"index":{"byteEnd":169,"byteStart":162}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"programming"}],"index":{"byteEnd":182,"byteStart":170}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"C"}],"index":{"byteEnd":185,"byteStart":183}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"SQLite"}],"index":{"byteEnd":193,"byteStart":186}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"SQL"}],"index":{"byteEnd":198,"byteStart":194}}],"langs":["en"],"text":"I put together another CLIPS library, this time for SQLite. Run SQL queries from within your CLIPS rules engine!\n\ngithub.com/mrryanjohnst...\n\n#rulesengine #CLIPS #coding #programming #C #SQLite #SQL"},"embed":{"images":[{"thumb":"https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreicqp2ryoecyzvs2mtnkmgi335xkbbvibbksgqw4wic56c4kh5tadi","fullsize":"https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreicqp2ryoecyzvs2mtnkmgi335xkbbvibbksgqw4wic56c4kh5tadi","alt":"The CLIPS logo with the SQLite logo mashed together. The green silhouette of a man's face, a blue square to the right of it and behind it, a blue feather to the right of the blue square. Underneath of this, all capitals CLIPS followed by QLite from the CLIPS and SQLite logos respectively.","aspectRatio":{"height":800,"width":860}}],"$type":"app.bsky.embed.images#view"},"bookmarkCount":0,"replyCount":0,"repostCount":0,"likeCount":2,"quoteCount":0,"indexedAt":"2025-09-30T02:18:20.655Z","labels":[]}},{"post":{"uri":"at://did:plc:tnzzspwdryr77okfilhuh6bd/app.bsky.feed.post/3lxpdk7syo22t","cid":"bafyreiaeo3uv7h3lnrj2pfz22ju5pd4brpe654piopdxkovhi5wmr2dhbq","author":{"did":"did:plc:tnzzspwdryr77okfilhuh6bd","handle":"ryjo.codes","displayName":"","avatar":"https://cdn.bsky.app/img/avatar/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreigvdo6zpc5hirpttppfcrhip5mbvtn4lcw3oqpevfvudjni7khxv4","associated":{"activitySubscription":{"allowSubscriptions":"followers"}},"labels":[],"createdAt":"2025-05-14T14:45:59.042Z"},"record":{"$type":"app.bsky.feed.post","createdAt":"2025-08-31T14:50:30.668Z","embed":{"$type":"app.bsky.embed.images","images":[{"alt":"The logo for CLIPSX11. It features the green CLIPS fact with the X.Org logo replacing the black starburst in the upper right hand corner. It is composed of the CLIPS logo and the X.Org logo (CC BY-SA 3.0, via Wikimedia Commons).","aspectRatio":{"height":2000,"width":1734},"image":{"$type":"blob","ref":{"$link":"bafkreibz26swfl7f7ohglsyxqijhvw6nmy3tyb45zffn5kdkoffccpau3y"},"mimeType":"image/jpeg","size":816913}}]},"facets":[{"features":[{"$type":"app.bsky.richtext.facet#link","uri":"https://github.com/mrryanjohnston/CLIPS1wm"}],"index":{"byteEnd":217,"byteStart":191}},{"features":[{"$type":"app.bsky.richtext.facet#link","uri":"https://github.com/mrryanjohnston/CLIPSX11"}],"index":{"byteEnd":244,"byteStart":218}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"programming"}],"index":{"byteEnd":302,"byteStart":290}}],"langs":["en"],"text":"I'm on a roll lately! I just made the CLIPSX11 and CLIPS1wm repos public. The first is a wrapper library around X11, the second is a window manager written using the former. Check them out:\n\ngithub.com/mrryanjohnst...\ngithub.com/mrryanjohnst...\n\nNow back to my other side project 🤯🤓\n\n#programming"},"embed":{"images":[{"thumb":"https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreibz26swfl7f7ohglsyxqijhvw6nmy3tyb45zffn5kdkoffccpau3y","fullsize":"https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreibz26swfl7f7ohglsyxqijhvw6nmy3tyb45zffn5kdkoffccpau3y","alt":"The logo for CLIPSX11. It features the green CLIPS fact with the X.Org logo replacing the black starburst in the upper right hand corner. It is composed of the CLIPS logo and the X.Org logo (CC BY-SA 3.0, via Wikimedia Commons).","aspectRatio":{"height":2000,"width":1734}}],"$type":"app.bsky.embed.images#view"},"bookmarkCount":0,"replyCount":0,"repostCount":0,"likeCount":1,"quoteCount":0,"indexedAt":"2025-08-31T14:50:38.210Z","labels":[]}},{"post":{"uri":"at://did:plc:tnzzspwdryr77okfilhuh6bd/app.bsky.feed.post/3lsr6c6sfgc2o","cid":"bafyreigrysinrmrgsr2yedjc4ncjai5odiuby5aqugm4txl57hyat2bqb4","author":{"did":"did:plc:tnzzspwdryr77okfilhuh6bd","handle":"ryjo.codes","displayName":"","avatar":"https://cdn.bsky.app/img/avatar/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreigvdo6zpc5hirpttppfcrhip5mbvtn4lcw3oqpevfvudjni7khxv4","associated":{"activitySubscription":{"allowSubscriptions":"followers"}},"labels":[],"createdAt":"2025-05-14T14:45:59.042Z"},"record":{"$type":"app.bsky.feed.post","createdAt":"2025-06-29T17:15:53.798Z","langs":["en"],"reply":{"parent":{"cid":"bafyreiarj2vbrguhmzly6jhwxsnudhmvzwt3yrrurhsl32lp6dxyoxorhe","uri":"at://did:plc:tnzzspwdryr77okfilhuh6bd/app.bsky.feed.post/3lsr6b3qssc2o"},"root":{"cid":"bafyreiemswhyoapqwfmdamsp5ldluz2gat73nm5iskyqowvqspmbdusi7y","uri":"at://did:plc:tnzzspwdryr77okfilhuh6bd/app.bsky.feed.post/3lsr67mxnmk2o"}},"text":"> In particular, readers are cautioned to pay close attention to the twisted details involving repeated (and in some cases nested) conversions between character encodings and byte sequences. Unfortunately the format is in widespread use due to the prevalence of HTML forms.\n\nOuch."},"bookmarkCount":0,"replyCount":0,"repostCount":0,"likeCount":0,"quoteCount":0,"indexedAt":"2025-06-29T17:15:56.339Z","labels":[]},"reply":{"root":{"uri":"at://did:plc:tnzzspwdryr77okfilhuh6bd/app.bsky.feed.post/3lsr67mxnmk2o","cid":"bafyreiemswhyoapqwfmdamsp5ldluz2gat73nm5iskyqowvqspmbdusi7y","author":{"did":"did:plc:tnzzspwdryr77okfilhuh6bd","handle":"ryjo.codes","displayName":"","avatar":"https://cdn.bsky.app/img/avatar/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreigvdo6zpc5hirpttppfcrhip5mbvtn4lcw3oqpevfvudjni7khxv4","associated":{"activitySubscription":{"allowSubscriptions":"followers"}},"labels":[],"createdAt":"2025-05-14T14:45:59.042Z"},"record":{"$type":"app.bsky.feed.post","createdAt":"2025-06-29T17:14:27.987Z","embed":{"$type":"app.bsky.embed.external","external":{"description":"ALT: a man in a suit and tie is standing in front of a sign that says \" my spouse is sleeping around \"","thumb":{"$type":"blob","ref":{"$link":"bafkreidnwbkouqet5hgw4vydek5634woysbjypxqvv5llwizojnut4azpu"},"mimeType":"image/jpeg","size":832247},"title":"a man in a suit and tie is standing in front of a sign that says \" my spouse is sleeping around \"","uri":"https://media.tenor.com/F-Ow1FgNvXwAAAAC/idiotic-happy.gif?hh=373&ww=498"}},"facets":[{"features":[{"$type":"app.bsky.richtext.facet#link","uri":"https://url.spec.whatwg.org/#application/x-www-form-urlencoded"}],"index":{"byteEnd":134,"byteStart":99}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"programming"}],"index":{"byteEnd":148,"byteStart":136}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"webdev"}],"index":{"byteEnd":156,"byteStart":149}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"coding"}],"index":{"byteEnd":164,"byteStart":157}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"developer"}],"index":{"byteEnd":175,"byteStart":165}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"html"}],"index":{"byteEnd":181,"byteStart":176}}],"langs":["en"],"text":"The WHATWG official spec for application/x-www-form-urlencoded giving serious Billy Madison vibes\n\nurl.spec.whatwg.org#application/...\n\n#programming #webdev #coding #developer #html"},"embed":{"external":{"uri":"https://media.tenor.com/F-Ow1FgNvXwAAAAC/idiotic-happy.gif?hh=373&ww=498","title":"a man in a suit and tie is standing in front of a sign that says \" my spouse is sleeping around \"","description":"ALT: a man in a suit and tie is standing in front of a sign that says \" my spouse is sleeping around \"","thumb":"https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreidnwbkouqet5hgw4vydek5634woysbjypxqvv5llwizojnut4azpu"},"$type":"app.bsky.embed.external#view"},"bookmarkCount":0,"replyCount":1,"repostCount":0,"likeCount":1,"quoteCount":0,"indexedAt":"2025-06-29T17:14:31.941Z","labels":[],"$type":"app.bsky.feed.defs#postView"},"parent":{"uri":"at://did:plc:tnzzspwdryr77okfilhuh6bd/app.bsky.feed.post/3lsr6b3qssc2o","cid":"bafyreiarj2vbrguhmzly6jhwxsnudhmvzwt3yrrurhsl32lp6dxyoxorhe","author":{"did":"did:plc:tnzzspwdryr77okfilhuh6bd","handle":"ryjo.codes","displayName":"","avatar":"https://cdn.bsky.app/img/avatar/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreigvdo6zpc5hirpttppfcrhip5mbvtn4lcw3oqpevfvudjni7khxv4","associated":{"activitySubscription":{"allowSubscriptions":"followers"}},"labels":[],"createdAt":"2025-05-14T14:45:59.042Z"},"record":{"$type":"app.bsky.feed.post","createdAt":"2025-06-29T17:15:17.046Z","langs":["en"],"reply":{"parent":{"cid":"bafyreiemswhyoapqwfmdamsp5ldluz2gat73nm5iskyqowvqspmbdusi7y","uri":"at://did:plc:tnzzspwdryr77okfilhuh6bd/app.bsky.feed.post/3lsr67mxnmk2o"},"root":{"cid":"bafyreiemswhyoapqwfmdamsp5ldluz2gat73nm5iskyqowvqspmbdusi7y","uri":"at://did:plc:tnzzspwdryr77okfilhuh6bd/app.bsky.feed.post/3lsr67mxnmk2o"}},"text":"To quote:\n\n> The application/x-www-form-urlencoded format is in many ways an aberrant monstrosity, the result of many years of implementation accidents and compromises leading to a set of requirements necessary for interoperability, but in no way representing good design practices."},"bookmarkCount":0,"replyCount":1,"repostCount":0,"likeCount":0,"quoteCount":0,"indexedAt":"2025-06-29T17:15:19.445Z","labels":[],"$type":"app.bsky.feed.defs#postView"},"grandparentAuthor":{"did":"did:plc:tnzzspwdryr77okfilhuh6bd","handle":"ryjo.codes","displayName":"","avatar":"https://cdn.bsky.app/img/avatar/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreigvdo6zpc5hirpttppfcrhip5mbvtn4lcw3oqpevfvudjni7khxv4","associated":{"activitySubscription":{"allowSubscriptions":"followers"}},"labels":[],"createdAt":"2025-05-14T14:45:59.042Z"}}},{"post":{"uri":"at://did:plc:tnzzspwdryr77okfilhuh6bd/app.bsky.feed.post/3lsr6b3qssc2o","cid":"bafyreiarj2vbrguhmzly6jhwxsnudhmvzwt3yrrurhsl32lp6dxyoxorhe","author":{"did":"did:plc:tnzzspwdryr77okfilhuh6bd","handle":"ryjo.codes","displayName":"","avatar":"https://cdn.bsky.app/img/avatar/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreigvdo6zpc5hirpttppfcrhip5mbvtn4lcw3oqpevfvudjni7khxv4","associated":{"activitySubscription":{"allowSubscriptions":"followers"}},"labels":[],"createdAt":"2025-05-14T14:45:59.042Z"},"record":{"$type":"app.bsky.feed.post","createdAt":"2025-06-29T17:15:17.046Z","langs":["en"],"reply":{"parent":{"cid":"bafyreiemswhyoapqwfmdamsp5ldluz2gat73nm5iskyqowvqspmbdusi7y","uri":"at://did:plc:tnzzspwdryr77okfilhuh6bd/app.bsky.feed.post/3lsr67mxnmk2o"},"root":{"cid":"bafyreiemswhyoapqwfmdamsp5ldluz2gat73nm5iskyqowvqspmbdusi7y","uri":"at://did:plc:tnzzspwdryr77okfilhuh6bd/app.bsky.feed.post/3lsr67mxnmk2o"}},"text":"To quote:\n\n> The application/x-www-form-urlencoded format is in many ways an aberrant monstrosity, the result of many years of implementation accidents and compromises leading to a set of requirements necessary for interoperability, but in no way representing good design practices."},"bookmarkCount":0,"replyCount":1,"repostCount":0,"likeCount":0,"quoteCount":0,"indexedAt":"2025-06-29T17:15:19.445Z","labels":[]},"reply":{"root":{"uri":"at://did:plc:tnzzspwdryr77okfilhuh6bd/app.bsky.feed.post/3lsr67mxnmk2o","cid":"bafyreiemswhyoapqwfmdamsp5ldluz2gat73nm5iskyqowvqspmbdusi7y","author":{"did":"did:plc:tnzzspwdryr77okfilhuh6bd","handle":"ryjo.codes","displayName":"","avatar":"https://cdn.bsky.app/img/avatar/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreigvdo6zpc5hirpttppfcrhip5mbvtn4lcw3oqpevfvudjni7khxv4","associated":{"activitySubscription":{"allowSubscriptions":"followers"}},"labels":[],"createdAt":"2025-05-14T14:45:59.042Z"},"record":{"$type":"app.bsky.feed.post","createdAt":"2025-06-29T17:14:27.987Z","embed":{"$type":"app.bsky.embed.external","external":{"description":"ALT: a man in a suit and tie is standing in front of a sign that says \" my spouse is sleeping around \"","thumb":{"$type":"blob","ref":{"$link":"bafkreidnwbkouqet5hgw4vydek5634woysbjypxqvv5llwizojnut4azpu"},"mimeType":"image/jpeg","size":832247},"title":"a man in a suit and tie is standing in front of a sign that says \" my spouse is sleeping around \"","uri":"https://media.tenor.com/F-Ow1FgNvXwAAAAC/idiotic-happy.gif?hh=373&ww=498"}},"facets":[{"features":[{"$type":"app.bsky.richtext.facet#link","uri":"https://url.spec.whatwg.org/#application/x-www-form-urlencoded"}],"index":{"byteEnd":134,"byteStart":99}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"programming"}],"index":{"byteEnd":148,"byteStart":136}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"webdev"}],"index":{"byteEnd":156,"byteStart":149}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"coding"}],"index":{"byteEnd":164,"byteStart":157}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"developer"}],"index":{"byteEnd":175,"byteStart":165}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"html"}],"index":{"byteEnd":181,"byteStart":176}}],"langs":["en"],"text":"The WHATWG official spec for application/x-www-form-urlencoded giving serious Billy Madison vibes\n\nurl.spec.whatwg.org#application/...\n\n#programming #webdev #coding #developer #html"},"embed":{"external":{"uri":"https://media.tenor.com/F-Ow1FgNvXwAAAAC/idiotic-happy.gif?hh=373&ww=498","title":"a man in a suit and tie is standing in front of a sign that says \" my spouse is sleeping around \"","description":"ALT: a man in a suit and tie is standing in front of a sign that says \" my spouse is sleeping around \"","thumb":"https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreidnwbkouqet5hgw4vydek5634woysbjypxqvv5llwizojnut4azpu"},"$type":"app.bsky.embed.external#view"},"bookmarkCount":0,"replyCount":1,"repostCount":0,"likeCount":1,"quoteCount":0,"indexedAt":"2025-06-29T17:14:31.941Z","labels":[],"$type":"app.bsky.feed.defs#postView"},"parent":{"uri":"at://did:plc:tnzzspwdryr77okfilhuh6bd/app.bsky.feed.post/3lsr67mxnmk2o","cid":"bafyreiemswhyoapqwfmdamsp5ldluz2gat73nm5iskyqowvqspmbdusi7y","author":{"did":"did:plc:tnzzspwdryr77okfilhuh6bd","handle":"ryjo.codes","displayName":"","avatar":"https://cdn.bsky.app/img/avatar/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreigvdo6zpc5hirpttppfcrhip5mbvtn4lcw3oqpevfvudjni7khxv4","associated":{"activitySubscription":{"allowSubscriptions":"followers"}},"labels":[],"createdAt":"2025-05-14T14:45:59.042Z"},"record":{"$type":"app.bsky.feed.post","createdAt":"2025-06-29T17:14:27.987Z","embed":{"$type":"app.bsky.embed.external","external":{"description":"ALT: a man in a suit and tie is standing in front of a sign that says \" my spouse is sleeping around \"","thumb":{"$type":"blob","ref":{"$link":"bafkreidnwbkouqet5hgw4vydek5634woysbjypxqvv5llwizojnut4azpu"},"mimeType":"image/jpeg","size":832247},"title":"a man in a suit and tie is standing in front of a sign that says \" my spouse is sleeping around \"","uri":"https://media.tenor.com/F-Ow1FgNvXwAAAAC/idiotic-happy.gif?hh=373&ww=498"}},"facets":[{"features":[{"$type":"app.bsky.richtext.facet#link","uri":"https://url.spec.whatwg.org/#application/x-www-form-urlencoded"}],"index":{"byteEnd":134,"byteStart":99}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"programming"}],"index":{"byteEnd":148,"byteStart":136}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"webdev"}],"index":{"byteEnd":156,"byteStart":149}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"coding"}],"index":{"byteEnd":164,"byteStart":157}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"developer"}],"index":{"byteEnd":175,"byteStart":165}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"html"}],"index":{"byteEnd":181,"byteStart":176}}],"langs":["en"],"text":"The WHATWG official spec for application/x-www-form-urlencoded giving serious Billy Madison vibes\n\nurl.spec.whatwg.org#application/...\n\n#programming #webdev #coding #developer #html"},"embed":{"external":{"uri":"https://media.tenor.com/F-Ow1FgNvXwAAAAC/idiotic-happy.gif?hh=373&ww=498","title":"a man in a suit and tie is standing in front of a sign that says \" my spouse is sleeping around \"","description":"ALT: a man in a suit and tie is standing in front of a sign that says \" my spouse is sleeping around \"","thumb":"https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreidnwbkouqet5hgw4vydek5634woysbjypxqvv5llwizojnut4azpu"},"$type":"app.bsky.embed.external#view"},"bookmarkCount":0,"replyCount":1,"repostCount":0,"likeCount":1,"quoteCount":0,"indexedAt":"2025-06-29T17:14:31.941Z","labels":[],"$type":"app.bsky.feed.defs#postView"}}},{"post":{"uri":"at://did:plc:tnzzspwdryr77okfilhuh6bd/app.bsky.feed.post/3lsr67mxnmk2o","cid":"bafyreiemswhyoapqwfmdamsp5ldluz2gat73nm5iskyqowvqspmbdusi7y","author":{"did":"did:plc:tnzzspwdryr77okfilhuh6bd","handle":"ryjo.codes","displayName":"","avatar":"https://cdn.bsky.app/img/avatar/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreigvdo6zpc5hirpttppfcrhip5mbvtn4lcw3oqpevfvudjni7khxv4","associated":{"activitySubscription":{"allowSubscriptions":"followers"}},"labels":[],"createdAt":"2025-05-14T14:45:59.042Z"},"record":{"$type":"app.bsky.feed.post","createdAt":"2025-06-29T17:14:27.987Z","embed":{"$type":"app.bsky.embed.external","external":{"description":"ALT: a man in a suit and tie is standing in front of a sign that says \" my spouse is sleeping around \"","thumb":{"$type":"blob","ref":{"$link":"bafkreidnwbkouqet5hgw4vydek5634woysbjypxqvv5llwizojnut4azpu"},"mimeType":"image/jpeg","size":832247},"title":"a man in a suit and tie is standing in front of a sign that says \" my spouse is sleeping around \"","uri":"https://media.tenor.com/F-Ow1FgNvXwAAAAC/idiotic-happy.gif?hh=373&ww=498"}},"facets":[{"features":[{"$type":"app.bsky.richtext.facet#link","uri":"https://url.spec.whatwg.org/#application/x-www-form-urlencoded"}],"index":{"byteEnd":134,"byteStart":99}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"programming"}],"index":{"byteEnd":148,"byteStart":136}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"webdev"}],"index":{"byteEnd":156,"byteStart":149}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"coding"}],"index":{"byteEnd":164,"byteStart":157}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"developer"}],"index":{"byteEnd":175,"byteStart":165}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"html"}],"index":{"byteEnd":181,"byteStart":176}}],"langs":["en"],"text":"The WHATWG official spec for application/x-www-form-urlencoded giving serious Billy Madison vibes\n\nurl.spec.whatwg.org#application/...\n\n#programming #webdev #coding #developer #html"},"embed":{"external":{"uri":"https://media.tenor.com/F-Ow1FgNvXwAAAAC/idiotic-happy.gif?hh=373&ww=498","title":"a man in a suit and tie is standing in front of a sign that says \" my spouse is sleeping around \"","description":"ALT: a man in a suit and tie is standing in front of a sign that says \" my spouse is sleeping around \"","thumb":"https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreidnwbkouqet5hgw4vydek5634woysbjypxqvv5llwizojnut4azpu"},"$type":"app.bsky.embed.external#view"},"bookmarkCount":0,"replyCount":1,"repostCount":0,"likeCount":1,"quoteCount":0,"indexedAt":"2025-06-29T17:14:31.941Z","labels":[]}},{"post":{"uri":"at://did:plc:tnzzspwdryr77okfilhuh6bd/app.bsky.feed.post/3lphduzdbls2b","cid":"bafyreifvvqj3t5ioevgfiw6usdge6zrq55aem2wa6bexbgmjrvpqelydta","author":{"did":"did:plc:tnzzspwdryr77okfilhuh6bd","handle":"ryjo.codes","displayName":"","avatar":"https://cdn.bsky.app/img/avatar/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreigvdo6zpc5hirpttppfcrhip5mbvtn4lcw3oqpevfvudjni7khxv4","associated":{"activitySubscription":{"allowSubscriptions":"followers"}},"labels":[],"createdAt":"2025-05-14T14:45:59.042Z"},"record":{"$type":"app.bsky.feed.post","createdAt":"2025-05-18T15:13:42.035Z","embed":{"$type":"app.bsky.embed.external","external":{"description":"Parsing JSON using CLIPS's Object Oriented Language, COOL! - mrryanjohnston/COOLJSON","thumb":{"$type":"blob","ref":{"$link":"bafkreigpjtf5nb5m5csv6m425balto5kyahhpxi45hnj4nbopnea4sqhde"},"mimeType":"image/jpeg","size":349556},"title":"GitHub - mrryanjohnston/COOLJSON: Parsing JSON using CLIPS's Object Oriented Language, COOL!","uri":"https://github.com/mrryanjohnston/COOLJSON"}},"facets":[{"features":[{"$type":"app.bsky.richtext.facet#link","uri":"https://github.com/mrryanjohnston/COOLJSON"}],"index":{"byteEnd":109,"byteStart":83}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"programming"}],"index":{"byteEnd":268,"byteStart":256}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"rulesengines"}],"index":{"byteEnd":282,"byteStart":269}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"JSON"}],"index":{"byteEnd":288,"byteStart":283}},{"features":[{"$type":"app.bsky.richtext.facet#tag","tag":"coding"}],"index":{"byteEnd":296,"byteStart":289}}],"langs":["en"],"text":"Today I published a JSON parser written in COOL, CLIPS's Object Oriented Language: github.com/mrryanjohnst...\n\nThis is the culmination of a few years of learnings and plenty of failed attempts along the way. Feels good to get something working finally :)\n\n#programming #rulesengines #JSON #coding"},"embed":{"external":{"uri":"https://github.com/mrryanjohnston/COOLJSON","title":"GitHub - mrryanjohnston/COOLJSON: Parsing JSON using CLIPS's Object Oriented Language, COOL!","description":"Parsing JSON using CLIPS's Object Oriented Language, COOL! - mrryanjohnston/COOLJSON","thumb":"https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:tnzzspwdryr77okfilhuh6bd/bafkreigpjtf5nb5m5csv6m425balto5kyahhpxi45hnj4nbopnea4sqhde"},"$type":"app.bsky.embed.external#view"},"bookmarkCount":0,"replyCount":0,"repostCount":0,"likeCount":1,"quoteCount":0,"indexedAt":"2025-05-18T15:13:44.749Z","labels":[]}}]}