Advertisement · 728 × 90
#
Hashtag
#publ
Advertisement · 728 × 90
Preview
Las islas negras: Una trilogía canaria: 570 (Nuevos Tiempos) Las islas negras: Una trilogía canaria: 570 (Nuevos Tiempos) : Ravelo, Alexis, Mallo, Ernesto: Amazon.es: Books

NOVEDAD
Las islas negras: Una trilogía canaria, Alexis Ravelo
👇
amzn.to/4cI6W0W
La ceguera del cangrejo, Un tío con una bolsa en la cabeza y Los nombres prestados, grandes obras que convirtieron a Alexis Ravelo en un referente de la novela negra en español. #publ

1 1 0 0

AI compañías buscan nuevas formas de quemar dinero más allá de darlo a los hiperscaladores para entrenamiento de modelos. Ahora están invirtiendo en publicidad para ChatGPT. #Publ https://fefd.link/hqwEc

0 0 0 0
Post image

Serving After Surviving — DUI Crash Survivor Becomes Reserve Police Officer for a second department.

#VLEOA #VolunteerLawEnforcementOfficerAlliance #PoliceReserve #ReserveOfficer #VolunteerInBlue #ServeAndProtect #BryanClark #Publ… www.policereserve.org/post/serving...

0 0 0 0
Finally fixed login Login on this site has been a bit flaky for a while since in my never-ending fight against AI bots I had switched to a multiprocess configuration to give the site a bit more robustness, but which had the side effect of most logins only having a 50% chance of working due to fiddly details inside Publ (or, more precisely, Authl, which defaults to only being safe for single-process configurations). So, Publ finally implements multiprocess-safe token storage, which is something I’d been meaning to add since approximately forever ago (although it seems I never opened an actual issue to track it, oops), and this should make user login reliable again. Thanks to Spud who finally lit a fire under my butt to fix this annoying issue. I am, incidentally, doing okay, but frustrated at the state of the world, especially because of how shitty the Internet’s gotten and how annoying it is to maintain software projects in light of the utter brokenness of a world of vibe-coded nonsense and the non-stop onslaught of AI in seemingly every facet of my life these days. I’m not strictly anti-AI (and I even see some, albeit _limited_ , value in AI-assisted programming these days) but holy _crap_ do certain things make it hard for me to want to approve of it. Pluribus only scratches the surface by analogy. But at least I got to spend some time with some choir folks tonight and that felt good, and I’m making some progress on some projects and that feels good too. I think I want to finally learn Rust, and I also want to finally build a player for Canimus, and maybe those two things can go together. The bulk of it is just going to be some database ETL stuff and I don’t see Rust being particularly well-suited for that, and I was looking at media metadata parsing libraries for the private collection server but none of them are even remotely as robust as mutagen either, so I think I’m gonna stick with Python for that part as well. Alllllthough, Faircamp is written in Rust, and I was planning on contributing Canimus publishing support to Faircamp……… okay, I have my excuse now. Neat.

busybee: fluffy rambles: Finally fixed login https://beesbuzz.biz/blog/3993-Finally-fixed-login #MentalHealth #Programming #Canimus #Python #Blog #Meta #Publ #Rust

0 0 0 0
Finally fixed login Login on this site has been a bit flaky for a while since in my never-ending fight against AI bots I had switched to a multiprocess configuration to give the site a bit more robustness, but which had the side effect of most logins only having a 50% chance of working due to fiddly details inside Publ (or, more precisely, Authl, which defaults to only being safe for single-process configurations). So, Publ finally implements multiprocess-safe token storage, which is something I’d been meaning to add since approximately forever ago (although it seems I never opened an actual issue to track it, oops), and this should make user login reliable again. Thanks to Spud who finally lit a fire under my butt to fix this annoying issue. I am, incidentally, doing okay, but frustrated at the state of the world, especially because of how shitty the Internet’s gotten and how annoying it is to maintain software projects in light of the utter brokenness of a world of vibe-coded nonsense and the non-stop onslaught of AI in seemingly every facet of my life these days. I’m not strictly anti-AI (and I even see some, albeit _limited_ , value in AI-assisted programming these days) but holy _crap_ do certain things make it hard for me to want to approve of it. Pluribus only scratches the surface by analogy. But at least I got to spend some time with some choir folks tonight and that felt good, and I’m making some progress on some projects and that feels good too. I think I want to finally learn Rust, and I also want to finally build a player for Canimus, and maybe those two things can go together. The bulk of it is just going to be some database ETL stuff and I don’t see Rust being particularly well-suited for that, and I was looking at media metadata parsing libraries for the private collection server but none of them are even remotely as robust as mutagen either, so I think I’m gonna stick with Python for that part as well. Alllllthough, Faircamp is written in Rust, and I was planning on contributing Canimus publishing support to Faircamp……… okay, I have my excuse now. Neat.
2 3 0 0
Preview
The Corporation for Public Broadcasting Is Dissolving Rather Than Be ‘vulnerable to Additional Attacks’ from the Trump Administration The Corporation for Public Broadcasting is dissolving to protect public media from political attacks. Join the fight for free expression! #CPBDissolves #Publ...

The Corporation for Public Broadcasting Is Dissolving Rather Than Be ‘vulnerable to Additional Attacks’ from the Trump Administration

The Corporation for Public Broadcasting is dissolving to protect public media from political attacks. Join the fight for free expression! #CPBDissolves #Publ...

0 0 0 0
The state of the fluffy (late December 2025 edition) Time for another proverbial cheese sandwich post1. Thinking about the end of the year and what’s coming up for me. This isn’t my annual aspiration wrap-up post; that’ll come later. ### Mental state I am currently very fatigued. I have a lot of music I’d like to be working on but I’m having trouble gathering the energy to do so. I have so many on-hold backburnered projects and looking at the list of things I want to do is starting to feel pretty overwhelming. I need some sort of spark to ignite the next album’s nucleation. The weather’s been particularly dreadful this winter and that hasn’t helped things at all. Constant flooding and wind and so on has kept me pretty much indoors all the time, aside from the brief respites which allowed me to buy the Corolla and do some work on it. Also, even though the Corolla is fun to drive and work on, I still feel a wave of fatigue hit me when I take it out anywhere. I would still like to figure out where the fatigue comes from. I also get the same fatigue when I ride my ebike, but the ebike at least I don’t worry about killing someone else while riding it (but I do worry about getting killed on it, as the street I take to get anywhere is not _technically_ a stroad but people sure treat it like one). I’m also having my usual chronic pain flareups, which is locked in an eternal spiral with the depression and anxiety. Fun times. My house is also a disaster area and I really need to get organized. I see a lot of spring cleaning in my future, and also ideally selling/donating a _lot_ of shit. ### Music stuff This past weekend I performed at two shows in VRChat, both of which went pretty well for different reasons. The first one, Gilly’s Winter Melodies, was a nice little chill show with a bunch of people just hanging out casually. I just did an acoustic set, which I hadn’t done in a while, and afterwards I hung out with a few musicians I like and wanted to get to know better, and it was great. The other one, VRelium’s Furever Christmas show, was a much bigger deal, and I think I had the largest audience ever for a full set. For this one I did a spectacle with visuals and backing tracks, and during my performance the audience was mostly super great (aside from one jerk who shouted out “When do we start the main act?!” in the middle of it, but everyone around them told them to shut up). During the outro of Safety in Numbers people were **_SINGING ALONG_** with the call-and-response and holy **_fuck_** that felt _amazing_. I don’t think that’s ever happened to me before! Afterwards I had several people come up to me and tell me how much they liked my music (and most of them said they’d seen me a few times before too), and during the whole event I had a lot of other great conversations with folks who were super excited to hear me perform. I feel like that’s a big turning point for me. Both of these are recorded and I’ll be putting them on YouTube and the live shows page as soon as I can get them edited. Gilly’s Winter Melodies I have everything I need (and it’ll just take a few minutes to edit), while VRelium will be a bit longer since I’m waiting for the recorded footage from the show itself. My booking agent has already found a couple of shows for me in January. I’m still waiting on details on those though. #### Song Fight! rumination It’s been about 25 years since I first found Song Fight!. On that note, I have a song in the current fight and sometime today I hope to record one for next week’s. Even though I’ve been feeling pretty divorced from Song Fight! for a while I still want to see it thrive, and really I think it’s the lack of it thriving that’s made me feel this way. I’ve been getting more proactive about trying to get musicians and musician-curious folks I know to join in, but it’s been tough. I think there’s a bunch of issues that get in the way: * Established musicians have no reason to participate * People who aren’t yet “good at music” think that they need to be “good at music” in order to participate (which is very much **_not the case_**) * Too many newcomers to making music think that pushing a button in Suno is enough (when that is one of the few things that is specifically disallowed) * People who don’t make music yet don’t see the value in trying to learn, even if they want to, _because_ of AI and oversaturation and so on I just want to say that if you don’t make music but you want to, the best time to start is right now. ### Car stuff Things I need to do on the car: * Take it to the mechanic for a proper inspection and tune-up (no, I didn’t get it inspected when I bought it, yes I know that’s foolish) * Try to figure out why I can’t get keyfob pairing to work, which mostly means opening up the passenger-side C pillar, and probably finding a new RKE module for it (because either the one that’s there is broken, or there isn’t one at all; both are possible and the latter is more likely) * Figure out if I should repaint the trunk, which has exposed metal on it at this point * Replace the glove box latch * Improve the cable management for the handsfree mic for the head unit (it’s _fine_ but technically a hazard since it could theoretically get tangled around the brake pedal which would be, y'know, _bad_) * Install my dashcam * Maybe install a backup camera as well (although that requires a _lot_ of additional wiring I don’t really want to deal with) * Fix the switch on the dome light * Sticker None of these are big deals but several of them are waiting for parts to arrive and others I’m not super interested in doing with the weather as it is (since it’s cold and wet out and I don’t have a garage). ### Finances Insurance is getting expensive again, groceries and medications continue to be expensive, housing costs are getting more expensive (utilities and property taxes, mostly), and so on. However, assuming there isn’t a massive stock market crash and that my interest income matches inflation (and historically I’ve done a bit better than inflation), my current savings runway is until around 2033, so it isn’t time for me to worry about things just yet. If I manage to get disability that jumps up to 2045, and then after that I’ll be old enough to cash out my retirement accounts which gives me another 14 years (under the same assumptions), and that gets me all the way to 80. So I think I’m doing fine there. It’s much more likely I’ll die in a freak coffee-roasting accident before then. ### So anyway I don’t know how to end this post. Note: I may earn a commission on affiliated product links in this article. 1. I don’t know why I can no longer find this term actually defined anywhere, but back in the 90s this was a derisive term used for Usenet posts where someone was, basically, blogging about their day, e.g. “today I had a cheese sandwich.” ↩

busybee: fluffy rambles: The state of the fluffy (late December 2025 edition) beesbuzz.biz/blog/5701-The-state-of-t... #MentalHealth #Bandcrash #Blogging #Finances #NewYear #Music #Blog #Publ #Car

0 0 0 0
The state of the fluffy (late December 2025 edition) Time for another proverbial cheese sandwich post1. Thinking about the end of the year and what’s coming up for me. This isn’t my annual aspiration wrap-up post; that’ll come later. ### Mental state I am currently very fatigued. I have a lot of music I’d like to be working on but I’m having trouble gathering the energy to do so. I have so many on-hold backburnered projects and looking at the list of things I want to do is starting to feel pretty overwhelming. I need some sort of spark to ignite the next album’s nucleation. The weather’s been particularly dreadful this winter and that hasn’t helped things at all. Constant flooding and wind and so on has kept me pretty much indoors all the time, aside from the brief respites which allowed me to buy the Corolla and do some work on it. Also, even though the Corolla is fun to drive and work on, I still feel a wave of fatigue hit me when I take it out anywhere. I would still like to figure out where the fatigue comes from. I also get the same fatigue when I ride my ebike, but the ebike at least I don’t worry about killing someone else while riding it (but I do worry about getting killed on it, as the street I take to get anywhere is not _technically_ a stroad but people sure treat it like one). I’m also having my usual chronic pain flareups, which is locked in an eternal spiral with the depression and anxiety. Fun times. My house is also a disaster area and I really need to get organized. I see a lot of spring cleaning in my future, and also ideally selling/donating a _lot_ of shit. ### Music stuff This past weekend I performed at two shows in VRChat, both of which went pretty well for different reasons. The first one, Gilly’s Winter Melodies, was a nice little chill show with a bunch of people just hanging out casually. I just did an acoustic set, which I hadn’t done in a while, and afterwards I hung out with a few musicians I like and wanted to get to know better, and it was great. The other one, VRelium’s Furever Christmas show, was a much bigger deal, and I think I had the largest audience ever for a full set. For this one I did a spectacle with visuals and backing tracks, and during my performance the audience was mostly super great (aside from one jerk who shouted out “When do we start the main act?!” in the middle of it, but everyone around them told them to shut up). During the outro of Safety in Numbers people were **_SINGING ALONG_** with the call-and-response and holy **_fuck_** that felt _amazing_. I don’t think that’s ever happened to me before! Afterwards I had several people come up to me and tell me how much they liked my music (and most of them said they’d seen me a few times before too), and during the whole event I had a lot of other great conversations with folks who were super excited to hear me perform. I feel like that’s a big turning point for me. Both of these are recorded and I’ll be putting them on YouTube and the live shows page as soon as I can get them edited. Gilly’s Winter Melodies I have everything I need (and it’ll just take a few minutes to edit), while VRelium will be a bit longer since I’m waiting for the recorded footage from the show itself. My booking agent has already found a couple of shows for me in January. I’m still waiting on details on those though. #### Song Fight! rumination It’s been about 25 years since I first found Song Fight!. On that note, I have a song in the current fight and sometime today I hope to record one for next week’s. Even though I’ve been feeling pretty divorced from Song Fight! for a while I still want to see it thrive, and really I think it’s the lack of it thriving that’s made me feel this way. I’ve been getting more proactive about trying to get musicians and musician-curious folks I know to join in, but it’s been tough. I think there’s a bunch of issues that get in the way: * Established musicians have no reason to participate * People who aren’t yet “good at music” think that they need to be “good at music” in order to participate (which is very much **_not the case_**) * Too many newcomers to making music think that pushing a button in Suno is enough (when that is one of the few things that is specifically disallowed) * People who don’t make music yet don’t see the value in trying to learn, even if they want to, _because_ of AI and oversaturation and so on I just want to say that if you don’t make music but you want to, the best time to start is right now. ### Car stuff Things I need to do on the car: * Take it to the mechanic for a proper inspection and tune-up (no, I didn’t get it inspected when I bought it, yes I know that’s foolish) * Try to figure out why I can’t get keyfob pairing to work, which mostly means opening up the passenger-side C pillar, and probably finding a new RKE module for it (because either the one that’s there is broken, or there isn’t one at all; both are possible and the latter is more likely) * Figure out if I should repaint the trunk, which has exposed metal on it at this point * Replace the glove box latch * Improve the cable management for the handsfree mic for the head unit (it’s _fine_ but technically a hazard since it could theoretically get tangled around the brake pedal which would be, y'know, _bad_) * Install my dashcam * Maybe install a backup camera as well (although that requires a _lot_ of additional wiring I don’t really want to deal with) * Fix the switch on the dome light * Sticker None of these are big deals but several of them are waiting for parts to arrive and others I’m not super interested in doing with the weather as it is (since it’s cold and wet out and I don’t have a garage). ### Finances Insurance is getting expensive again, groceries and medications continue to be expensive, housing costs are getting more expensive (utilities and property taxes, mostly), and so on. However, assuming there isn’t a massive stock market crash and that my interest income matches inflation (and historically I’ve done a bit better than inflation), my current savings runway is until around 2033, so it isn’t time for me to worry about things just yet. If I manage to get disability that jumps up to 2045, and then after that I’ll be old enough to cash out my retirement accounts which gives me another 14 years (under the same assumptions), and that gets me all the way to 80. So I think I’m doing fine there. It’s much more likely I’ll die in a freak coffee-roasting accident before then. ### So anyway I don’t know how to end this post. Note: I may earn a commission on affiliated product links in this article. 1. I don’t know why I can no longer find this term actually defined anywhere, but back in the 90s this was a derisive term used for Usenet posts where someone was, basically, blogging about their day, e.g. “today I had a cheese sandwich.” ↩
0 1 0 0
Post image

#BigDaddy #bigdick #hung #pierceddicks #ALPHA #beard #BeardedGuy #socks #gearguy #HairyGuys #anon #jockstrap #hairyscruffhomo #kink4life #spit #gooner #leather #Leatherdaddy #Vers #mature #BigDickDaddy #BDSM #hairygaymen #pup #cum #pits #watersports #briefs #tightywhites #swallow #bigass #publ

32 2 0 0
Post image

#BigDaddy #bigdick #hung #pierceddicks #ALPHA #beard #BeardedGuy #socks #gearguy #HairyGuys #anon #jockstrap #hairyscruffhomo #kink4life #spit #gooner #leather #Leatherdaddy #Vers #mature #BigDickDaddy #BDSM #hairygaymen #pup #cum #pits #watersports #briefs #tightywhites #swallow #bigass #publ

23 3 0 0

Descubra cómo Videotel ha estado en el mundo de la publicidad digital durante 44 años y patrocina el podcast 16:9 PODCAST IS SPONSORED BY SCREENFEED DIGITAL SIGNAGE CONTENT. #Publ https://fefd.link/EgYIl

0 0 0 0

Aichi Prefectural Police are launching new initiatives to boost public safety and community trust. Focus on improved communication, proactive policing, and stronger community ties. Details on the official announcement. Japan #Aichi #Police #CommunitySafety #Publ... Link

0 0 0 0

CTA is your key to experiencing Chicago's vibrant music festivals! This guide offers transportation tips for navigating the city's music scene via public transit. Skip the parking hassle and enjoy the shows! #ChicagoMusic #CTAtravel #MusicFestivals #Publ... Link

0 0 0 0
Preventing bot scraping on Publ and Flask This morning I was once again thinking about how to put some proper antibot behavior onto my websites, without relying on Cloudflare. There are plenty of fronting proxies like Anubis and Go Away which put a simple proof-of-work task in front of a website. This is pretty effective, but it adds more of an admin tax (and is often quite difficult to configure for servers that host multiple websites, such as mine), and sometimes the false positive rates can have some other bad effects, such as disallowing feed readers and the like. I started going down the path of how to integrate antibot stuff directly into Flask, using an `@app.before_request` rule that would do much of the same work as Anubis et al, but really the various bots are very stupid and the reason the challenge even works is because they aren’t running any JavaScript at all. This made me think that a better approach would be to have it just look for a simple signed cookie, and if that cookie isn’t there, insert an interstitial page that sets it via form POST (with a Javascript wrapper to automatically submit the form). But then I realized, Publ already provides this sort of humanity test: the login page! So anyway, here’s a recipe that seems to work for Publ, assuming authentication is enabled. It requires adding the user-agents package to the environment (with e.g. `poetry add user-agents`). import publ.user import user_agents import werkzeug.exceptions @app.before_request def antiscraper(): # Flag bots to remove page elements if user_agents.parse(flask.request.headers.get('User-Agent', '')).is_bot: flask.g.is_bot = True # Logged-in users have passed the test already if publ.user.get_active(): return # Send possible crawlers to the login page if (('id' in flask.request.args and 'tag' in flask.request.args) or len(flask.request.args.getlist('tag')) > 1): raise werkzeug.exceptions.Unauthorized("Sentience test") return Then the other thing I did was changed my page templates to only show tag browsers if `g.is_bot` isn’t set; for example, on my entry template: {%- if not g.is_bot and entry.tags -%}{%- block entrytags scoped %}<nav class="tags"> <ul>{%- for tag in entry.tags -%} <li><a class="p-category" rel="tag" href="{{view(tag=tag).link(template=template)}}">{{tag}}</a></li> {%- endfor -%}</ul> This isn’t really relevant to the antiscraper thing so much as to prevent search indexes from seeing pages that don’t do them any good to begin with. (Unfortunately, `rel="noindex nofollow"` et al don’t actually stop most search engines from indexing the combinatoric explosion of tag combinations, which is where the scrapers become a problem for Publ sites to begin with.) Notably, after enabling this simple test, there’s no significant CPU load difference whether I have Cloudflare’s antibot rules active or not. Anyway. This should be pretty easy to adapt to any Flask application that already supports a login mechanism. For things that don’t have a login mechanism I might end up building a simple Flask version of the form-posting thing I mentioned.

busybee: Code: Preventing bot scraping on Publ and Flask beesbuzz.biz/code/13497-Preventing-bo... #Python #Flask #Code #Bots #Publ #AI

0 0 0 0
Preventing bot scraping on Publ and Flask This morning I was once again thinking about how to put some proper antibot behavior onto my websites, without relying on Cloudflare. There are plenty of fronting proxies like Anubis and Go Away which put a simple proof-of-work task in front of a website. This is pretty effective, but it adds more of an admin tax (and is often quite difficult to configure for servers that host multiple websites, such as mine), and sometimes the false positive rates can have some other bad effects, such as disallowing feed readers and the like. I started going down the path of how to integrate antibot stuff directly into Flask, using an `@app.before_request` rule that would do much of the same work as Anubis et al, but really the various bots are very stupid and the reason the challenge even works is because they aren’t running any JavaScript at all. This made me think that a better approach would be to have it just look for a simple signed cookie, and if that cookie isn’t there, insert an interstitial page that sets it via form POST (with a Javascript wrapper to automatically submit the form). But then I realized, Publ already provides this sort of humanity test: the login page! So anyway, here’s a recipe that seems to work for Publ, assuming authentication is enabled. It requires adding the user-agents package to the environment (with e.g. `poetry add user-agents`). import publ.user import user_agents import werkzeug.exceptions @app.before_request def antiscraper(): # Flag bots to remove page elements if user_agents.parse(flask.request.headers.get('User-Agent', '')).is_bot: flask.g.is_bot = True # Logged-in users have passed the test already if publ.user.get_active(): return # Send possible crawlers to the login page if (('id' in flask.request.args and 'tag' in flask.request.args) or len(flask.request.args.getlist('tag')) > 1): raise werkzeug.exceptions.Unauthorized("Sentience test") return Then the other thing I did was changed my page templates to only show tag browsers if `g.is_bot` isn’t set; for example, on my entry template: {%- if not g.is_bot and entry.tags -%}{%- block entrytags scoped %}<nav class="tags"> <ul>{%- for tag in entry.tags -%} <li><a class="p-category" rel="tag" href="{{view(tag=tag).link(template=template)}}">{{tag}}</a></li> {%- endfor -%}</ul> This isn’t really relevant to the antiscraper thing so much as to prevent search indexes from seeing pages that don’t do them any good to begin with. (Unfortunately, `rel="noindex nofollow"` et al don’t actually stop most search engines from indexing the combinatoric explosion of tag combinations, which is where the scrapers become a problem for Publ sites to begin with.) Notably, after enabling this simple test, there’s no significant CPU load difference whether I have Cloudflare’s antibot rules active or not. Anyway. This should be pretty easy to adapt to any Flask application that already supports a login mechanism. For things that don’t have a login mechanism I might end up building a simple Flask version of the form-posting thing I mentioned.
0 1 0 0
RFK Jr. claims that older adults with autism do not exist. #autism #publ…

RFK Jr. claims that older adults with autism do not exist. #autism #publ

0 0 0 0
The original Publ design doc <div class="body" id="preamble"> <p>I was just going through some old files while preparing some hardware migration stuff (ugh) and I came across a file entitled <code>distributed social network.md</code>, dated December 13, 2014. This was the start of my ideas about what would eventually result in <a href="https://publ.beesbuzz.biz/">Publ</a>.</p><p>Obviously things drifted a lot between 2014 and 2017 when I finally started implementing Publ, and a lot has changed with my goals since then as well.</p><p>Don’t use this as a roadmap, is what I’m saying.</p> </div><div id="more"> <blockquote> <h2 id="6742_h2_1_Design-goals"><a class="toc_link" href="https://beesbuzz.biz/blog/6742-The-original-Publ-design-doc#6742_h2_1_Design-goals"></a>Design goals</h2> <ul> <li>Easy to install and administer</li> <li>Able to be deployed to pretty much any cheap shared webhosting</li> <li>Easy to use</li> <li>Scalability/reliability; Minimal database dependency <ul> <li>Use a static generation model to reduce runtime database dependency</li> <li>Backend should work on anything that can do simple indexed key-value storage (SQLite, DynamoDB, bdb, etc.)</li> <li>Work on a publication-queue model by default</li> </ul></li> <li>Secure and privacy-focused by default (e.g. all non-public data should assume non-authorized and require proof of auth)</li> <li>Anyone can join in; no lock-in on protocol. Use OpenID, RSS/Atom, and standard Web extensions for everything to work.</li> </ul> <h2 id="6742_h2_2_Key-components"><a class="toc_link" href="https://beesbuzz.biz/blog/6742-The-original-Publ-design-doc#6742_h2_2_Key-components"></a>Key components</h2><p>The distributed social network needs the following components:</p> <ul> <li>Identification</li> <li>Authorization</li> <li>Publication</li> <li>Subscription (dashboard)</li> <li>Browser extensions</li> </ul> <h2 id="6742_h2_3_Identification"><a class="toc_link" href="https://beesbuzz.biz/blog/6742-The-original-Publ-design-doc#6742_h2_3_Identification"></a>Identification</h2><p>All identification is simply provided via OpenID. The URL should be associated with one’s own primary presence, or perhaps their profile page. The profile page itself can be managed by the publication system, or it can be provided by the identity provider and simply provide basic information like name, websites, etc.</p><p>For a first pass, an existing provider such as SimpleID can be used, although for a turnkey solution it should be integrated into the distribution, and ideally tightly coupled into the publication engine.</p><h2 id="6742_h2_4_Authorization"><a class="toc_link" href="https://beesbuzz.biz/blog/6742-The-original-Publ-design-doc#6742_h2_4_Authorization"></a>Authorization</h2><p>The core authorization service should allow people to provide their identity, and then maps that identity to an internal “profile.” That profile can then be assigned to permissions groups by the site owner. The profile should also support multiple auth mechanisms (OpenID, Twitter/Tumblr/etc. OAuth, emailed single-login tokin) to be bound to the individual profile, so that subscribers can change their auth mechanism or support multiple things on different devices.</p><p>On the server side, it should provide an easily-queried library that, given a session ID, provides the profile link and the permissions groups the user is in.</p><p>It should also provide a random (and revokable) random token that can be used for persistent sessionless authentication, e.g. for an RSS reader.</p><p>New authorization requests, auth stats, etc. should go into an RSS feed for the admin to view (so that they know to grant permissions to people or whatever).</p><h2 id="6742_h2_5_Publication"><a class="toc_link" href="https://beesbuzz.biz/blog/6742-The-original-Publ-design-doc#6742_h2_5_Publication"></a>Publication</h2><p>The publication engine should go for as much of a static-publication thing as possible; however, this requires some dynamic scripting support (for authorization), so this either means emitting PHP directly (that then hooks into the authorization library), or having some sort of very simple request router that then serves up mostly-statically-generated rendered things with a per-perimssion-group sandbox.</p><p>The publication engine should allow for different page types to have different URL schemata, templates, etc. The templating sytem should be based on something intended for static publication; I like Movable Type’s templating system, but there are many open-source templating systems which may be more appropriate.</p><p>For example, blog entries should be able to map to something like /blog/category/id-title, /blog/year/month/id-title, etc., with appropriate previous/next links between them; webcomic entries should be able to map to /comic/series/id-title, /comic/year/month/day/id-title, etc., with previous/next links within the series or between comic entries or whatever, and the ability to show any associated news posts with the comic as well.</p><p>The user interface should make it easy for users to “reblog” content (i.e. import a snippet from elsewhere on the web and optionally comment on it, with attribution back to the original link).</p><p>There should also be provisions for queued (e.g. “post N items per day between these hours”) and scheduled (e.g. “post this item at 12:00 PM on Sunday”) content.</p><h3 id="6742_h3_6_Filtering"><a class="toc_link" href="https://beesbuzz.biz/blog/6742-The-original-Publ-design-doc#6742_h3_6_Filtering"></a>Filtering</h3><p>When an item is published, it should be very very simple to render out, and it should have all the data for things like previous/next links “baked in” for all the possible affected ACLs. For example, if item 5 is public, 6 is friends-only, 7 is family-only, 8 is friends-or-family, and 9 is public, the metadata should look like this for item 7:</p> <ul> <li>Display: only if user is in the “family” group</li> <li>Previous link: 6 if user is in “friends,” 5 if otherwise</li> <li>Next link: 8 if user is in “friends” or “family,” 9 otherwise</li> </ul> <p>and for item 8:</p> <ul> <li>Display: only if user is in “friends” or “family”</li> <li>Previous link: 7 if user is in “family”, 6 if user is in “friends”, 5 otherwise</li> <li>Next link: 9</li> </ul> <p>Again, to keep this system scalable, the actual rendered content would be part of these itemsm (with all of the filtering logic baked into them), and it would be either the request router or the page itself (using simple embedded PHP) that would make these decisions, and if it’s unable to contact the auth server, the assumption would be that the ACL group is “none.”</p><p>If display is limited by an ACL, there should also be a <code>&lt;meta&gt;</code> tag on the page to reflect that, which would disable (or at least put up a warning for) simple reblogging functionality. (Obviously nothing stops people from copy-pasting the entry itself, but that’s no different than any other social network.)</p><h3 id="6742_h3_7_Formatting"><a class="toc_link" href="https://beesbuzz.biz/blog/6742-The-original-Publ-design-doc#6742_h3_7_Formatting"></a>Formatting</h3><p>The “lingua Franca” of the publication engine should be something simple to use but which doesn’t get in the way of using advanced HTML features; for example, Markdown or MediaWiki syntax or the like. It should also be able to drop into pure HTML. There should also be a WYSIWYG editor that makes it easy for people to edit without learning any markup, and this should also support drag-and-drop of assets that automatically upload and then inline-insert the asset into the item.</p><h3 id="6742_h3_8_Assets"><a class="toc_link" href="https://beesbuzz.biz/blog/6742-The-original-Publ-design-doc#6742_h3_8_Assets"></a>Assets</h3><p>Asset management should be set up in a way that people can upload assets to any sort of backing storage that they want; generally, uploading a file should just generate a SHA hash of the content that then maps onto the asset store at render time. This asset store could be then backed by a basic file store or an S3 bucket or the like. Using the original content hash also solves the problem of asset invalidation and so on.</p><p>Whatever fronts the asset retrieval should be able to transcode (and cache) things as appropriate; images should be able to be fetched at various resolutions (driven by the layout template), audio should be transcodable to wav/ogg/flac/etc., animated gifs should be convertible to WebM/m4v/etc., and so on.</p><p>The asset retrieval service should also be set up such that it can be trivially fronted by a caching CDN, so that high-traffic users have the option of using e.g. CloudFront or <a href="http://coralcdn.org/">Coral CDN</a> or the like.</p><h3 id="6742_h3_9_Metrics"><a class="toc_link" href="https://beesbuzz.biz/blog/6742-The-original-Publ-design-doc#6742_h3_9_Metrics"></a>Metrics</h3><p>The pages should also be able to log to a very simple analytics engine; this should keep track of page views with originating IP address, HTTP referer, viewer identity, and so on, and this should be made visible to the site owner. There will of course need to be some basic anti-spam measures (e.g. only reporting referers that come from multiple IP addresses and aren’t just from the root page of a site or the like). Daily/weekly/monthly reports would be useful as well.</p><h3 id="6742_h3_10_Comments"><a class="toc_link" href="https://beesbuzz.biz/blog/6742-The-original-Publ-design-doc#6742_h3_10_Comments"></a>Comments</h3><p>Pages should be able to accept comments directly on them (if so selected by the owner of the site). The comment engine doesn’t have to be that fancy from the posters' perspective; just supporting a minimal subset of Markdown should be enough. The site owner should be able to limit commenting to specific auth groups.</p><p>There should also be the ability for people to “like” an item, which would simply add their viewer profile to the list of “likes” for that page. (Or it could just post a stub comment, similar to what Tumblr does.)</p><h3 id="6742_h3_11_Publicaton-queue"><a class="toc_link" href="https://beesbuzz.biz/blog/6742-The-original-Publ-design-doc#6742_h3_11_Publicaton-queue"></a>Publicaton queue</h3><p>There should be a queue of items which need to be updated; when an item is edited, commented on, scheduled, etc. it should go into the publication queue. Any action that could trigger a render should also immediately start a publication worker up, so that the results of the publication become available as soon as there are sufficient server resources to have completed this publication (e.g. someone posting a comment would republish the page it’s on, but could also cause another page to re-render if it was scheduled for posting by now).</p><p>The user should of course also have a cron job that pumps the publication queue, but it shouldn’t have to run that often; it’s mostly to handle scheduled posts.</p><p>Using this model means there are more server resources in use when something on the site is changing, but fewer in use during the 99.99% case of the site simply existing (and thus allows for far more readers to concurrently access the site).</p><h3 id="6742_h3_12_RSS-feeds"><a class="toc_link" href="https://beesbuzz.biz/blog/6742-The-original-Publ-design-doc#6742_h3_12_RSS-feeds"></a>RSS feeds</h3><p>There should be the capability of people creating their own RSS feed that draws from whichever site section(s) they want. This RSS feed should also have the sessionless auth token.</p><p>If the site sees someone authorized but their auth token hasn’t been used to fetch a feed in a while, it should display a notification to the reader reminding them that they can subscribe, and provide a link to the feed customizer.</p><p>There should always be a <code>&lt;link rel="alternate"&gt;</code> feed link that goes to the “everything” link, with the current auth token appended, if any. There should also probably be one that’s specific to the current site section, as well.</p><h2 id="6742_h2_13_Subscription"><a class="toc_link" href="https://beesbuzz.biz/blog/6742-The-original-Publ-design-doc#6742_h2_13_Subscription"></a>Subscription</h2><p>The subscription engine should just be an RSS/Atom reader. A basic implementation would just fetch all the subscribed feeds and then provide a river of content, sorted by time. A more interesting implementation would provide an “inbox” view with the ability to mark items read, increase/decrease the priority of certain kinds of items (based on user-specified filters or based on machine learning), and so on.</p><p>The feed fetching should be based on dynamically-adjusting intervals, similar to the dynamic update support added to <a href="https://github.com/plaidfluff/Feed-on-Feeds">Feed On Feeds</a>.</p><p>There should also be provisions for subscribing to non-RSS/Atom content sources; for example, being able to fetch someone’s Tumblr or Facebook dashboards via OAuth, shared calendars via CalDAV or iCal, or site-specific features such as subscribing to phpBB forums or the like. It should be easy to write content-fetching plugins.</p><p>Calendar-type entries (or RSS/Atom entries including a .ics enclosure or the like) should be re-exportable via an iCal feed.</p><p><a href="https://code.google.com/p/pubsubhubbub/">PubSubHubBub</a> support would be great, as well.</p><p>Items should of course have a quick link back to the publication engine’s “reblog” mechanism.</p><h2 id="6742_h2_14_Browser-extensions"><a class="toc_link" href="https://beesbuzz.biz/blog/6742-The-original-Publ-design-doc#6742_h2_14_Browser-extensions"></a>Browser extensions</h2><p>Websites should offer a simple means of logging in, via a <code>&lt;meta&gt;</code> tag that states that an OpenID login would be accepted, and where to send the credentials.</p><p>Browser extensions can then store the user’s OpenID URL, and if this <code>&lt;meta&gt;</code> tag exists, prompt the user for whether to provide that identity.</p><p>A browser extension can also see that there’s an RSS/Atom URL and then forward that along to the dashboard subscription thing. (This isn’t really any different than existing mechanisms for RSS discovery, but it’s worth pointing out here, especially since most modern browsers have eschewed built-in RSS discovery.)</p><p>There should also be an extension for posting an item from another page on the Internet (i.e. “reblogging”). An example UI for that would be selecting a portion of the page to quote, and then clicking on a “share” button.</p><p>These extensions could also be implemented as bookmarklets.</p></blockquote> </div>

busybee: fluffy rambles: The original Publ design doc beesbuzz.biz/blog/6742-The-original-P... #Blogging #Blog #Publ

0 0 0 0
Sockpuppet website updates! <div class="body" id="preamble"> <p>I finally got a bunch of stuff working on <a href="https://sockpuppet.band/">the new Sockpuppet website</a>, including the <a href="https://sockpuppet.band/releases/">music browser</a>. Now people will have the ability to actually find something in my vast sea of content!</p><p>I still need to finish tagging a bunch of stuff to make it useful but having the functionality in place gives me motivation to do so.</p><p>I’ve also improved the “buy box” and added way more streaming providers to the sources (which of course requires more content to be filled out, too), and there’s a bunch of other functionality like being able to browse lyrics and song notes and such from album pages.</p><p>The really neat thing is that most of this stuff, even the dynamic stuff, is done using pure CSS! There’s a little bit of Javascript for a couple of things but I have some ideas about how I can remove that stuff, and it’s not like the javascript is particularly heavyweight anyway.</p><p>At some point I should release the templates as Publ samples, so that others can use this as a basis for building their own music sites too. Or something. I’m doing a lot of stuff that’s really taking advantage of Publ functionality under the hood.</p><p>Anyway, for those who follow me via a feed reader but haven’t added that site yet, it’s definitely ready to be added at this point, and I’ll be posting most of my music-related blogging over there from now on.</p> </div>

busybee: fluffy rambles: Sockpuppet website updates! beesbuzz.biz/blog/1977-Sockpuppet-web... #Sockpuppet #WebDesign #Music #Blog #Publ

0 0 0 0
Preview
a cat is laying on the floor in front of a fan with the words ventilador no me abandones ALT: a cat is laying on the floor in front of a fan with the words ventilador no me abandones

Tive que trabalhar debaixo do sol justo hoje, o dia mais quente de toda a história da humanidade

Um oferecimento de pomada hipoglós e amido de milho Maizena #publ-

0 0 0 0