thejevans

joined 2 years ago
[–] thejevans@lemmy.ml 7 points 23 hours ago (2 children)

I use the floccus extension with Nextcloud as a backend for bookmarks/tabs and wallabag for read-it-later

[–] thejevans@lemmy.ml 4 points 2 days ago (1 children)

This hugo theme works well: https://jamstackthemes.dev/theme/hugo-lynx/

for a non-self-hosted, but neat alternative: https://weird.one/

[–] thejevans@lemmy.ml 4 points 3 days ago

yeah, this is just physics. To overly simplify, swamp coolers alone cannot move the indoor climate to a comfortable state if the baseline temperature is above 40 deg C, even if there is 0 water in the air to start with. They can still help in certain climates, but require air conditioning or significant air movement to compensate.

[–] thejevans@lemmy.ml 16 points 1 week ago

kinda related: I get that you gotta make money in this world, and I'm happy to pay for a book, but it always makes me so sad when authors don't offer DRM-free eBooks, especially when the content is about ending capitalism. This is even worse because, not only do they only have a DRM-laden option, but they also only selling it on Amazon.

It's really frustrating how common this is.

[–] thejevans@lemmy.ml 17 points 1 week ago (5 children)

Hans Gruber is the antagonist in Die Hard

[–] thejevans@lemmy.ml 18 points 1 week ago (2 children)

To be a bit more charitable, my reading of this article was not that Markdown is being mistaken for something like Word or TeX, but that Word is being mistaken as necessary or even desired for a lot of what it's used for when basic markup will do the job just fine.

[–] thejevans@lemmy.ml 4 points 2 weeks ago (1 children)

I put all my apps on my home screen and I keep all non-FOSS apps in a single folder as a reminder to find replacements. The vast majority of my apps are FOSS at this point.

[–] thejevans@lemmy.ml 2 points 3 weeks ago (1 children)

OP specifically mentioned not wanting claws.

[–] thejevans@lemmy.ml 4 points 3 weeks ago* (last edited 3 weeks ago)

I recently went through the process of separating from Google as much as possible here.

As others have said, Nextcloud or Radical or Baikal are all good calendar server options to self-host

On your Android phone, DAVx5 for syncing CalDAV and CardDAV (which the servers listed above use), ICSx5 for any public Google calendars you want to subscribe to (you can almost always get an ICS calendar file link for those), and Etar to interact with said calendars on your phone.

On your computer, Thunderbird is the easiest way to go. There is also the web interface for whatever server you decide to host. There are other options, too. On Linux, I use pimsync + khal/khard.

Caveats:

  • In Etar, khal, AND the Nextcloud web UI, I have had lots of trouble with being able to apply updates to calendar events, like a new ICS file containing an updated time or place. The only calendar app I've found that handles this correctly is Thunderbird on the desktop.
  • Doing things this way separates your email account from your calendar account, which can create some annoyances. Every mainstream mail service these days tightly couples itself with a calendar. For instance, to send invitations for a calendar event that I create on Nextcloud, I also have my email account linked to Nextcloud. You can't do this if you have Proton or Tuta because of their encryption. When I had Proton, I used Postmark to have a send-only email account from Nextcloud to send out invitations.
  • If you want to subscribe to PRIVATE Google calendars (my partner still has Google, so I need to do this), you need to sync a Google account with each device you want to subscribe to that calendar on. There is no way to add it to one of these self-hosted servers. The way that I handle this is by making a throwaway Google account that is only for subscribing to calendars, syncing that to my phone with DAVx5, and while I could sync to Thunderbird on my computer, I pretty much only use Thunderbird when I need to update a calendar event. So, in my case, I use pimsync. To sync a Google account to pimsync, you need to create a fake "app" using a Google account on the Google Cloud Platform, add the CalDAV API and generate credentials, add your calendar sync account to the allowed testing users, and then add the generated credentials to pimsync. It sucks.
  • As usual, you can't sync any Microsoft calendars with anything other than Outlook.
[–] thejevans@lemmy.ml 1 points 3 weeks ago

Not self hosted necessarily, but TagStudio is an interesting project worth keeping an eye on https://docs.tagstud.io/

30
Phones suck (blog.jevans.bio)
 

Ramblings about degoogle-ing, and going further for the fun of it.

 

I just wanted to shout out TRMNL.

They have an interesting product, and they're trying to build a business that includes a lot of open source aspects.

The device that they sell is proprietary, but it's also just an ESP32, screen, enclosure, and battery, with a custom PCB for convenience. They plan to add instructions to build your own device, and their firmware is open source under a GPLv3 license.

By default, their device connects to their servers, and they have a slick web configuration tool for people who don't care about having smart devices call home, but you can easily modify the firmware to connect to your own self-hosted server instead. As of this evening, both the Phoenix and Sinatra server implementations are open source under an MIT license after I pointed out that they had no license in an issue, and they pretty much immediately updated the repositories.

There are two other repositories that they have not added a license to, but given their swift response, I'll give them the benefit of the doubt, and I would expect them to be updated shortly.

They have not shared all of the plugins that are available on their hosted service for use on a self-hosted instance, but a few are available for use and there are many plugins made by others available as well!

As soon as they update those last two repositories, I plan to pre-order one (unlike the conceptually cool VU Dials who's creators still have not added a license even after being called out by the co-creator of Rocky Linux).

 

The way he just blew off the 50/50 split criticism was pretty gross. Basing it off of Youtube's bad-relative-to-the-rest-of-the-market 45/55 split, and then making it worse is not great, especially when coming from someone who makes YouTube content for a living.

 

I'm having an annoying issue with pipewire. I have a Scarlett 8i6 audio interface. I have it set to Pro Audio so that I can access all the input and output channels, and I have virtual devices defined to allow applications to access groups of channels as discrete devices.

For some reason, all applications keep automatically switching to my secondary (mono) output. I can sometimes get them to switch to my primary stereo output, but it's only ever a one-off and they will switch back when the current media is done playing. any thoughts?

config:

context.modules = [
    {   name = libpipewire-module-loopback
        args = {
            node.description = "Primary - Focusrite Scarlett 8i6"
            capture.props = {
                node.name = "scarlett_8i6_primary"
                media.class = "Audio/Sink"
                audio.position = [ FL FR ]
            }
            playback.props = {
                node.name = "playback.scarlett_8i6_primary"
                audio.position = [ AUX0 AUX1 ]
                target.object = "alsa_output.usb-Focusrite_Scarlett_8i6_USB_F8CEK2H1B8391D-00.pro-output-0"
                stream.dont-remix = true
                node.passive = true
            }
        }
    }
    {   name = libpipewire-module-loopback
        args = {
            node.description = "Secondary (Mono) - Focusrite Scarlett 8i6"
            capture.props = {
                node.name = "scarlett_8i6_secondary"
                media.class = "Audio/Sink"
                audio.position = [ MONO ]
            }
            playback.props = {
                node.name = "playback.scarlett_8i6_secondary"
                audio.position = [ AUX2 ]
                target.object = "alsa_output.usb-Focusrite_Scarlett_8i6_USB_F8CEK2H1B8391D-00.pro-output-0"
                stream.dont-remix = true
                node.passive = true
            }
        }
    }
    {   name = libpipewire-module-loopback
        args = {
            node.description = "Microphone - Focusrite Scarlett 8i6"
            capture.props = {
                node.name = "capture.scarlett_8i6_mic"
                audio.position = [ AUX0 ]
                stream.dont-remix = true
                target.object = "alsa_input.usb-Focusrite_Scarlett_8i6_USB_F8CEK2H1B8391D-00.pro-input-0"
                node.passive = true
            }
            playback.props = {
                node.name = "scarlett_8i6_mic"
                media.class = "Audio/Source"
                audio.position = [ MONO ]
            }
        }
    }
    {   name = libpipewire-module-loopback
        args = {
            node.description = "Instrument - Focusrite Scarlett 8i6"
            capture.props = {
                node.name = "capture.scarlett_8i6_inst"
                audio.position = [ AUX1 ]
                stream.dont-remix = true
                target.object = "alsa_input.usb-Focusrite_Scarlett_8i6_USB_F8CEK2H1B8391D-00.pro-input-0"
                node.passive = true
            }
            playback.props = {
                node.name = "scarlett_8i6_inst"
                media.class = "Audio/Source"
                audio.position = [ MONO ]
            }
        }
    }
    {   name = libpipewire-module-loopback
        args = {
            node.description = "Mix - Focusrite Scarlett 8i6"
            capture.props = {
                node.name = "capture.scarlett_8i6_mix"
                audio.position = [ AUX2 AUX3 ]
                stream.dont-remix = true
                target.object = "alsa_input.usb-Focusrite_Scarlett_8i6_USB_F8CEK2H1B8391D-00.pro-input-0"
                node.passive = true
            }
            playback.props = {
                node.name = "scarlett_8i6_mix"
                media.class = "Audio/Source"
                audio.position = [ FL FR ]
            }
        }
    }
]
 

cross-posted from: https://lemmy.ml/post/11820406

Do not use 2 letter country TLDs!

 

cross-posted from: https://lemmy.ml/post/11820406

Do not use 2 letter country TLDs!

 

cross-posted from: https://lemmy.ml/post/11820406

Do not use 2 letter country TLDs!

 

Do not use 2 letter country TLDs!

115
submitted 1 year ago* (last edited 1 year ago) by thejevans@lemmy.ml to c/battlestations@lemmy.world
 

PC

  • Nobara Linux
  • Fractal Torrent
  • Asus Proart B550
  • AMD Ryzen 5800X3D
  • Noctua NH-D15
  • GSkill 2x16GB DDR4-3600
  • Powercolor Hellhound 7900XTX
  • Sabrent Rocket 4.0 1TB
  • Crucial P3 Plus 4TB
  • Asus WiFi 6E card
  • Be Quiet Dark Power 13

Husky height adjustable workbench

  • DT770 Pros
  • AT2040 Mic
  • Yamaha MG06X Mixer
  • Focusrite Scarlett 8i6 3rd gen
  • Drop BMR1 speakers
  • P.I. Engineering L-Trac
  • ESP32-S3-Box3
  • Sony Dualsense
  • BenQ lightbar

Glorious GMMK Pro

  • GMK WoB
  • holy pandas + tealios v2

Monitors

  • Gigabyte M27Q-X
  • LG Dualup

Camera

  • Sony a5100
  • Sigma 16mm f/1.4
  • no-name LED panel
  • Amaran 100d
 

cross-posted from: https://lemmy.ml/post/6395416

Faced with new laws in California and other states, big tech lobbyists want to sign a "Memorandum of Understanding" to prevent "a compliance market where lawyers drive the decisions."

 

Faced with new laws in California and other states, big tech lobbyists want to sign a "Memorandum of Understanding" to prevent "a compliance market where lawyers drive the decisions."

view more: next ›