Spyke

Posts

buyeuropean·Buy Europeanbypromitheas

'Shame!': Germany, Italy Block Effort to Suspend EU-Israel Trade Pact Over Gaza Genocide, West Bank Attacks | Common Dreams

In light of Germany and Italy essentially being the only two EU member states against the suspension of trade with Israel - to be expected since they are the second and third biggest arms traders with Israel, respectively - would an internal boycot of their goods be something feasible to do to put pressure on them to change how they vote? Since they care about their profit given their arms trade with Israel, let's hit them right there.

What does everyone think?

'Shame!': Germany, Italy Block Effort to Suspend EU-Israel Trade Pact Over Gaza Genocide, West Bank Attacks | Common Dreamshttps://www.commondreams.org/news/eu-israel-trade-2676794384Open linkView original on programming.dev
degoogle·DeGoogle Yourselfbypromitheas

Success - Startmail Now Allowed On Steam

A few days ago I made a post here inquiring as to why startmail addresses couldn't be used on steam, and what people thought I should/could do.

In the end after some suggestions, I opened a support ticket with steam asking why startmail was not supported, and in the end managed to convince them to support it as a valid email address (unless it gets abused - more on that later). For the record, here is my entire back-and-forth with them:

Me on Feb 13 @ 10:35am

Dear Steam Support,

I recently changed my email provider to startmail.com, but when I try to update it in my steam account to this address I get an error that its not valid or unsupported.

Since startmail.com is a paid service based in Europe, I would like clarification on why it is not supported by steam, and hopefully have it added to the valid email providers for steam.

The fact that its a paid service means scammers/people trying to abuse it is unlikely (it costs around 60 euro a year), so I really think there should be no issue accepting it as an email address.

I would really appreciate having this issue resolved so that I can change my email address to my new one, and close my previous email account eventually.

Thank you in advance, [My name]

Steam on Feb 14 @ 6:27pm

Hello,

Thank you for contacting Steam Support.

The email address you're trying to use on your Steam account is not currently valid for use with Steam. Typically this is because the email service has been identified as offering disposable emails, but it may also be because the email address domain or domain suffix has been marked as prohibited for use with Steam for one of a number of reasons.

At this time Steam does not offer an option to bypass this restriction. Please select a different address on a different domain/service to use with your Steam account.

Steam Support [Steam Support Person A's Name]

Me on Feb 14 @ 6:44pm

You are correct that they offer disposable addresses, but they have the format @use.startmail.com

The main address looks like @startmail.com

Is there any possibility of having a team look into this, and blacklist the disposable format but allow the regular format (of which you can only have a single address, like your main email).

Besides, gmail (which is my current address) also allows for creating disposable addresses: https://www.geeksforgeeks.org/techtips/how-to-create-a-disposable-email-address-with-gmail/

I think many people, myself included, would like to move away from big tech companies such as microsoft (hotmail) and google (gmail) and so would appreciate your consideration on the matter.

Many thanks, [My name]

Steam on Feb 16 @ 5:44am

Sorry about the previous message. We misunderstood your issue.

Anyway, we're unable to do your request, but we can help you update the email address on the account.

Please provide your new email address. Once we have your alternate address, we will update the account.

Steam Support [Steam Support Person B's Name]

Me on Feb 16 @ 7:56am

Hello, no worries.

I hope Im not misunderstanding your reply myself now, but as I understand it, you will manually change my account email to my new startmail address?

If that's the case, here it is:

[email protected]

Just in case I have not yet managed to convince you to whitelist the regular startmail addresses, here is an article discussing this from them: https://support.startmail.com/hc/en-us/articles/360007297457-Personal-Aliases

Note this paragraph: "Personal alias allows you to send and receive email at an email address different from your main StartMail account address. These email aliases end in @use.startmail.com instead of @startmail.com." (if address has use in it, is an alias, otherwise its the regular type)

Many thanks for your help. If I misunderstood what you need from me, I apologise, please clarify it for me.

Best regards, [My name]

Steam on Feb 17 @ 3:39am

Hello,

I'm sorry, it looks like our team provided some incorrect information that ended up being misleading.

Steam Support will occasionally manually allow single email addresses that use a personal domain, but large scale services like Startmail do not match what's intended for those cases. We're sorry the team provided false information above.

Your report will be passed on to Steam's developers, but please understand that Steam does not make decisions regarding email / domain viability lightly. When a domain is blocked, it's usually because that email service offers disposable or public email services which are by their very nature incompatible with Steam, or their requirements to sign up for a new email account are extremely permissive and thus allow wide scale misuse of emails on that service for hijacking, fraud, and even potentially illegal activity. Email services are only blocked from use with Steam after demonstrated, large scale misuse from users of that service.

Valve [Steam Support Person C's Name]

Me on Feb 17 @ 7:16am

Very well, however please pass on the following information to your team as well, which can be easily verified from startmail's own page and may be helpful in making a decision:

"their requirements to sign up for a new email account are extremely permissive and thus allow wide scale misuse of emails on that service for hijacking, fraud, and even potentially illegal activity."

As mentioned, startmail is a paid service. It costs about 60 euro a year to create an account. Thats not exactly permissive, certainly not more so than gmail for example.

"Email services are only blocked from use with Steam after demonstrated, large scale misuse from users of that service."

Again, as mentioned in my previous replies and the information available on their own page, they have 2 email formats - not unlike gmail with their '+ email addresses'. The @startmail.com is the main one, of which you can ONLY have one, and the aliases which are probably what your team determined might lead to abuse, have the format @use.startmail.com. It would be a terrific resolution if steam could start allowing the single main addresses (@startmail.com) and blocking only the alias addresses (@use.startmail.com).

https://www.startmail.com/pricing/ (Payment details required on account creation, and the not exactly inexpensive prices of the service)

Again, thank you for taking time to speak with me about this, and for forwarding to your developers for conaideration.

Steam on Feb 19 @ 1:47am

It looks like Steam's developers have decided to open access to startmail. This has been done despite their disposable email service which is not compatible with how Steam expects its users maintain their email account with Steam. The service will be monitored and blocked again if further misuse is detected.

Valve [Steam Support Person C's Name]

Me on Feb 19 @ 2:44am

Thats great to hear! I hate to repeat myself like a broken record, but in the interest of protecting every steam user, as well as the continued allowance of startmail, please only allow the @startmail.com addresses and BLOCK the @use.startmail.com addresses (alias format).

Once again, thank you for your patience, understanding, and consideration in this issue. I will now close my ticket if able to, otherwise please do feel free to close it for me.

[My name]

I haven't checked if they actually blocked the @use.startmail.com address format, but I successfully changed my steam email to my main @startmail.com address. Hopefully they go through with blocking the aliases, and keep the regular address format as valid.

https://programming.dev/post/45324898Open linkView original on programming.dev
degoogle·DeGoogle Yourselfbypromitheas

Success - Startmail Now Allowed On Steam

A few days ago I made a post here inquiring as to why startmail addresses couldn't be used on steam, and what people thought I should/could do.

In the end after some suggestions, I opened a support ticket with steam asking why startmail was not supported, and in the end managed to convince them to support it as a valid email address (unless it gets abused - more on that later). For the record, here is my entire back-and-forth with them:

Me on Feb 13 @ 10:35am

Dear Steam Support,

I recently changed my email provider to startmail.com, but when I try to update it in my steam account to this address I get an error that its not valid or unsupported.

Since startmail.com is a paid service based in Europe, I would like clarification on why it is not supported by steam, and hopefully have it added to the valid email providers for steam.

The fact that its a paid service means scammers/people trying to abuse it is unlikely (it costs around 60 euro a year), so I really think there should be no issue accepting it as an email address.

I would really appreciate having this issue resolved so that I can change my email address to my new one, and close my previous email account eventually.

Thank you in advance, [My name]

Steam on Feb 14 @ 6:27pm

Hello,

Thank you for contacting Steam Support.

The email address you're trying to use on your Steam account is not currently valid for use with Steam. Typically this is because the email service has been identified as offering disposable emails, but it may also be because the email address domain or domain suffix has been marked as prohibited for use with Steam for one of a number of reasons.

At this time Steam does not offer an option to bypass this restriction. Please select a different address on a different domain/service to use with your Steam account.

Steam Support [Steam Support Person A's Name]

Me on Feb 14 @ 6:44pm

You are correct that they offer disposable addresses, but they have the format @use.startmail.com

The main address looks like @startmail.com

Is there any possibility of having a team look into this, and blacklist the disposable format but allow the regular format (of which you can only have a single address, like your main email).

Besides, gmail (which is my current address) also allows for creating disposable addresses: https://www.geeksforgeeks.org/techtips/how-to-create-a-disposable-email-address-with-gmail/

I think many people, myself included, would like to move away from big tech companies such as microsoft (hotmail) and google (gmail) and so would appreciate your consideration on the matter.

Many thanks, [My name]

Steam on Feb 16 @ 5:44am

Sorry about the previous message. We misunderstood your issue.

Anyway, we're unable to do your request, but we can help you update the email address on the account.

Please provide your new email address. Once we have your alternate address, we will update the account.

Steam Support [Steam Support Person B's Name]

Me on Feb 16 @ 7:56am

Hello, no worries.

I hope Im not misunderstanding your reply myself now, but as I understand it, you will manually change my account email to my new startmail address?

If that's the case, here it is:

[email protected]

Just in case I have not yet managed to convince you to whitelist the regular startmail addresses, here is an article discussing this from them: https://support.startmail.com/hc/en-us/articles/360007297457-Personal-Aliases

Note this paragraph: "Personal alias allows you to send and receive email at an email address different from your main StartMail account address. These email aliases end in @use.startmail.com instead of @startmail.com." (if address has use in it, is an alias, otherwise its the regular type)

Many thanks for your help. If I misunderstood what you need from me, I apologise, please clarify it for me.

Best regards, [My name]

Steam on Feb 17 @ 3:39am

Hello,

I'm sorry, it looks like our team provided some incorrect information that ended up being misleading.

Steam Support will occasionally manually allow single email addresses that use a personal domain, but large scale services like Startmail do not match what's intended for those cases. We're sorry the team provided false information above.

Your report will be passed on to Steam's developers, but please understand that Steam does not make decisions regarding email / domain viability lightly. When a domain is blocked, it's usually because that email service offers disposable or public email services which are by their very nature incompatible with Steam, or their requirements to sign up for a new email account are extremely permissive and thus allow wide scale misuse of emails on that service for hijacking, fraud, and even potentially illegal activity. Email services are only blocked from use with Steam after demonstrated, large scale misuse from users of that service.

Valve [Steam Support Person C's Name]

Me on Feb 17 @ 7:16am

Very well, however please pass on the following information to your team as well, which can be easily verified from startmail's own page and may be helpful in making a decision:

"their requirements to sign up for a new email account are extremely permissive and thus allow wide scale misuse of emails on that service for hijacking, fraud, and even potentially illegal activity."

As mentioned, startmail is a paid service. It costs about 60 euro a year to create an account. Thats not exactly permissive, certainly not more so than gmail for example.

"Email services are only blocked from use with Steam after demonstrated, large scale misuse from users of that service."

Again, as mentioned in my previous replies and the information available on their own page, they have 2 email formats - not unlike gmail with their '+ email addresses'. The @startmail.com is the main one, of which you can ONLY have one, and the aliases which are probably what your team determined might lead to abuse, have the format @use.startmail.com. It would be a terrific resolution if steam could start allowing the single main addresses (@startmail.com) and blocking only the alias addresses (@use.startmail.com).

https://www.startmail.com/pricing/ (Payment details required on account creation, and the not exactly inexpensive prices of the service)

Again, thank you for taking time to speak with me about this, and for forwarding to your developers for conaideration.

Steam on Feb 19 @ 1:47am

It looks like Steam's developers have decided to open access to startmail. This has been done despite their disposable email service which is not compatible with how Steam expects its users maintain their email account with Steam. The service will be monitored and blocked again if further misuse is detected.

Valve [Steam Support Person C's Name]

Me on Feb 19 @ 2:44am

Thats great to hear! I hate to repeat myself like a broken record, but in the interest of protecting every steam user, as well as the continued allowance of startmail, please only allow the @startmail.com addresses and BLOCK the @use.startmail.com addresses (alias format).

Once again, thank you for your patience, understanding, and consideration in this issue. I will now close my ticket if able to, otherwise please do feel free to close it for me.

[My name]

I haven't checked if they actually blocked the @use.startmail.com address format, but I successfully changed my steam email to my main @startmail.com address. Hopefully they go through with blocking the aliases, and keep the regular address format as valid.

https://programming.dev/post/45324898Open linkView original on programming.dev
degoogle·DeGoogle Yourselfbypromitheas

Changing Steam Email to My New Startmail One - Not Accepted

Hey everyone. I recently created and started transitioning to my Startmail email address. I'm changing emails for all my accounts bit by bit, as new emails get forwarded to my new inbox from my old gmail (which I plan on leaving as is with forwarding for about a year). Just now I decided to update my steam email. I first created an alias from startmail's aliases UI, but steam didnt like that. It specifically gave me this message:

It appears you've entered a disposable email address, or are using an email provider that cannot be used on Steam. Please provide a different email address.

So then I decided to add my regular startmail address, but I got the exact same message.

How can I deal with this? Ideally I would love to contact them and explain and request that they allow startmail (I mean, its a paid service so unlikely people will be generating multiple email addresses - as for aliases, they could just disallow the @use.startmail.com addresses, which are the aliases).

What do you guys think is my best bet for this issue?

View original on programming.dev
degoogle·DeGoogle Yourselfbypromitheas

Yet another email advice thread

Hello everybody! One of the last google software I use is my gmail, mainly since I've had it for so long and migrating seems daunting. It's time however.

I do eventually want to self-host my own email, possibly with something like this: https://docker-mailserver.github.io/docker-mailserver/latest/

But to do that I'd need to set up and maintain stability on a home lab for a short time first, something I can't do yet because of my living arrangements, which means self-hosted email may be a few years away.

In the mean time, I looked at https://www.startmail.com/ and https://tuta.com/secure-email (since tuta is very highly recommended on lemmy). Sadly, while tuta sounds great, it has the deal breaker (for me) that I can only use their clients.

That's why I'm leaning more towards startmail, though of course I'll take advantage of the 7 day free trial before committing to it.

Meanwhile, is there anything else that you can recommend which is:

  • an EU company
  • privacy and customer first
  • crucially can be used with Thunderbird
  • that will save me 59.88 Euro a year
  • That allows for the creation of folders in the Inbox (I use this constantly for organisation)

A very big bonus would be if I could somehow import my gmail emails to it, in a sensible manner, like I see startmail offering to do. CalDAV support would also be really nice.

Also, I'm thinking for about a year I keep both gmail and whatever I switch to, while having gmail forward everything to the new one, so that I make sure everything has been migrated over there.

Thanks in advance!

Edit: While looking at reviews for various services, I came across a video offering a startmail discount link, so I can now get it at 29.94 Euro for the first year. This makes it a lot more attractive even if I don't stick with it for more than a year, but I would still love to hear your suggestions or thoughts :)

Edit: since i found that discount link from the video, i decided to try startmail. Im still on the 7 day trial (just meaning i havent been billed yet), but so far i really like it. Ive already started changing my apps/services/websites emails to aliases i set up (the unlimited aliases of startmail are a godsend in this regard), and the importing tool they have really easily copied my gmail emails/folders over to the startmail account. From there, it was a simple matter of moving the folders from the resultant gmail folder to my actual SM inbox where i wanted them, adding the account to thunderbird, and re-setting up the rules for the SM account in Thunderbird. Id still love to hear all your suggestions in case I do decide SM isnt what i need, but so far it seems like its a winner

View original on programming.dev
buyeuropean·Buy Europeanbypromitheas

With regards to Politico

Ive noticed several posts here linking to politico articles, which I find strange for this community given their history and affiliations.

To everyone reading, just give the wiki page on them a read, follow the references cited in it, and make up your own mind on whether you want to trust it as a source for EU news.

To everyone who posts their articles in here, I hope its just because you weren't aware of all this, rather than anything else.

https://en.wikipedia.org/wiki/PoliticoOpen linkView original on programming.dev
archlinux·Arch Linuxbypromitheas

Mute discord notification sound when muting all notifications through sxhkd

Hello again guys.

I'd like to be able to mute discord notification sounds in addition to toggling off the dunst popup (the latter of which I already have working) but I cant seem to be able to find a way to do so, and control it through the sxhkd keybind.

Here is my keybind to disable notifications:

# Toggle notifications on/off
super + shift + comma
	sh -c 'if dunstctl is-paused | grep -q "true"; then dunstctl set-paused false; notify-send -t 2500 "Notifications enabled"; else notify-send -t 2500 "Notifications disabled"; sleep 2.5; dunstctl set-paused true; fi'

However even after I toggle notifications off, I still hear the discord pings which frankly is annoying when I'm trying to concentrate on something, or watching a movie or whatever.

Anyone have any idea how to do this without breaking too much of my setup haha?

Thanks in advance as always, and of course if you need more info do ask.

View original on programming.dev
thenetherlands·theNetherlandsbypromitheas

Suggestions for children's books in Dutch to help learn the language and develop vocabulary

Hello everyone!

I won't drag the post out too much since most of the info is already in the title, but I would love to hear some suggestions for some children's books to help me develop comfort with, and vocabulary in Dutch.

In terms of my level with the language, I have been doing some Duolingo for over 3 years, but I really started learning and understanding rules and such a couple months ago when I started online lessons.

Thanks in advance!

Edit: A couple people suggested Annie M.G. Schmidt so I looked at the first book in the Jip en Janneke books, but it seems that its too advanced for my level. I'll need to work my way up to that slowly. In the meantime, any suggestions for books aimed more towards 2-3 year olds? I feel like that would be more my current vocabulary level, and I can work my way up from there. Thanks

View original on programming.dev
archlinux·Arch Linuxbypromitheas

Discord crashes randomly and kills my polybar, sxhkd, forcing me to hard restart using PC power button

Hello everyone, I've had an issue with discord on Arch Linux for a long time, but only now had the time to document the error (had to photograph it with phone and transcribe it).

Its a weird one, buckle up.

At random times, discord crashes which causes my polybar to crash, as well as my sxhkd, which obviously means my computer is practically useless until I hard shutdown using the power button on my case. Whats weird is that sometimes it will go weeks without crashing, and other times it will crash frequently in a short time span (e.g. it crashed a couple times yesterday, and once today).

Here is the error as I photographed it:

And here it is after I manually copied it into a text editor (keep in mind I might have missed a character here or there because of this).

A JavaScript Error occurred in the main process

Uncaught exception:
Error: EROFS: read-only file system, write
	at writeSync (node:fs:923:3)
	at SyncWriteStream._write (node:internal/fs/sync._write_stream:275)
	at writeOrBuffer (node:internal/streams/writable:572:12)
	at _write (node:internal/streams/writable:501:10)
	at Writeable.write (node:internal/streams/writable:510:10)
	at console.value (node:internal/console/constructor:298:16)
	at console.warn (node:internal/console/constructor:405:26)
	at transport.writeFn (/opt/discord/resources/app.asar/node_modules/electron-log/src/node/transports/console.js:45:7)
	at transport (/opt/discord/resources/app.asar/node_modules/electron-log/src/node/transports/console.js:51:15)
	at Logger.processMessage (/opt/discord/resources/app.asar/node_modules/electron-log/src/core/Logger.js:175:11)

Anyone have any idea how I can troubleshoot this?

I also tried checking the following directory but it doesn't exist on my PC:

/opt/discord/resources/app.asar/node_modules/electron-log/src/core/

I only have the file /opt/discord/resources/app.asar So obviously something is going on there that shouldn't be happening.

I've got no idea how to troubleshoot node apps, so would appreciate any help from those of you who have those skills.

Thanks in advance! Please let me know if you need more info or need me to run commands and show you the output, and Ill do so.

View original on programming.dev
fairphone·Fairphonebypromitheas

Cleaning Blue Case After Normal Use

Hey everyone! I think its been about a year since I got my FP5 from murena, with the blue case. I noticed early on that from normal use it got stained and a bit dirty. Keep in mind I live in a really hot country (summers reach around 45°C) so sweating is unavoidable, especially if Im helping a relative with their garden/general house maintenance, or similar activities that equal unclean hands + sweat.

Ive tried wiping it with a wet wipe, but the stains remain.

Any ideas for what I can use to clean it without damaging the material? Im thinking of trying rubbing alcohol but Id like some advice before I try anything new, to avoid damaging it since its a non-standard recycled material.

Id also like to keep this colour of case since I really like the blue :)

View original on programming.dev
archlinux·Arch Linuxbypromitheas

[BSPWM] Prevent windows (e.g. games) from being pulled out of fullscreen when a new window is opened on the same workspace

Hello everyone!

I would like certain windows to remain in full screen even if another tiled/floating window is opened on the same workspace. I would also like the tiled/floating windows to remain above the full screen window so that they don't disappear if I click on the full screen window.

The primary use case for this is games such as Eve Online, where I use a number of external tools which may or may not spawn new windows over the game window (e.g. the Rift Intel tool, which spawns a new small floating window whenever someone writes in one of the intel channels you set Rift to monitor). I dont want it to exit full screen mode. If a tiled or floating window is opened on the same window then Eve also goes into tiled mode.

Reading up a little about this I came across the concept of layers in bspwm, but I'm not entirely sure if they fit for this use case. Here's an example of what I don't want to happen:

(The Hostile Reported popup window is from Rift and spawns wherever focus is)

Normally I have it be entirely fullscreen. I'd like to be able to interact with these and other popup windows in tiled/floating mode without pulling Eve out of fullscreen.

How can I begin to work on this? Of course if you would like more info please ask and I'll provide it.

Thanks in advance!

[SOLUTION (I think)] I had to add this rule for my Eve client:

bspc rule -a "steam_app_8500" state=fullscreen layer=below border=off focus=on

but also had to add this rule for the Rift Intel tool:

bspc rule -a "dev-nohus-rift-MainKt" state=floating layer=above

I guess this is the way to do it for any set of programs where you want one to keep its fullscreen status but have others above it

NOTE: This also applied the same behaviour to the eve launcher since the way steam proton works both the launcher and the clients have the same WM_CLASS. If anyone knows any way to distinguish them in bspwm please let me know. Here is what I get for each when running xprop:

$ xprop | grep -E 'CLASS|NAME'
_NET_WM_NAME(UTF8_STRING) = "EVE Launcher" WM_ICON_NAME(STRING) = "EVE Launcher" WM_NAME(STRING) = "EVE Launcher" WM_LOCALE_NAME(STRING) = "en_US.UTF-8" WM_CLASS(STRING) = "steam_app_8500", "steam_app_8500"
# Click on launcher

$ xprop | grep -E 'CLASS|NAME'
_NET_WM_NAME(UTF8_STRING) = "EVE" WM_ICON_NAME(STRING) = "EVE" WM_NAME(STRING) = "EVE" WM_LOCALE_NAME(STRING) = "en_US.UTF-8" WM_CLASS(STRING) = "steam_app_8500", "steam_app_8500"
# Click on client

Ive tried rewriting the rule as such:

bspc rule -a "steam_app_8500:steam_app_8500:EVE" state=fullscreen layer=below

and also adding a rule for the launcher specifically (before the client rule):

bspc rule -a "steam_app_8500:steam_app_8500:EVE Launcher" state=tiled layer=normal

But the launcher still opens in fullscreen. The client however seems to be fine - it opens in fullscreen on the 'below' layer so when a new window is opened on the same workspace it isn't forced into tiled mode.

View original on programming.dev
archlinux·Arch Linuxbypromitheas

Checking for available updates + kernel mismatch on every new terminal - How can I speed it up?

Hello everyone :)

I have this in a script which I call from my .zshrc:

#!/bin/zsh

# ~/.bin/check_last_update.sh

GREEN='\033[92m'
YELLOW='\033[93m'
RED='\033[91m'
RESET='\033[0m'

# Check if there are available updates for packages
num_packages_to_update=$(checkupdates | wc -l)

if (( num_packages_to_update >= 0 && num_packages_to_update <= 20 )); then
	echo -e "${GREEN}Available updates: $num_packages_to_update${RESET}" >> /dev/tty
elif (( num_packages_to_update > 20 && num_packages_to_update <= 50 )); then
	echo -e "${YELLOW}Available updates: $num_packages_to_update${RESET}" >> /dev/tty
else
	echo -e "${RED}Available updates: $num_packages_to_update${RESET}" >> /dev/tty
fi

# Kernel version check
running_kernel=$(uname -r)
installed_kernel=$(pacman -Q linux | awk '{print $2}' | cut -d '-' -f1 | cut -d '.' -f1,2,3)

running_kernel_base=$(echo "$running_kernel" | cut -d '-' -f1)

if [[ "$running_kernel_base" != "$installed_kernel" ]];
then
	echo -e "${RED}Kernel mismatch detected. Reboot recommended.${RESET}" >> /dev/tty
fi

It works, but when I open a new terminal it may take up to 2 seconds for the prompt to show up. Is there a way of speeding this up?

Would it be a good idea to perform the checks in the background every hour or so, maybe with a systemd timer or something, and cache the results (or possibly to make it even more efficient, just store a file somewhere out of the way containing the number of updates and if there is a kernel mismatch - maybe on separate lines so when I open a terminal I can easily query the file and get exactly what I need) so that when I open a new terminal instead of checking with the live repositories it checks the cached data? Also, I guess this would mean that if a package has become available for update after the last time the check script runs, then the number it tells me will be less than the actual number of available updates, right?

Thanks in advance!

View original on programming.dev
ece·Electrical and Computer Engineeringbypromitheas

Question about KiCAD footprints for breakout boards with right angle male headers sticking outside the "box" of the board

Hello guys.

I'm trying to learn some more KiCAD and general electronics design from scratch by continuing my thesis project after I've submitted it and its all done, but by taking it to the next step and actually getting a PCB and soldering everything on. This is to get experience through the entire process from design to assembly.

Where I'm stuck is at creating the footprints for my components. I've watched a bunch of videos about the topic, but they all seem to be for boards with no header pins attached to them, or for pins that are vertical (perpendicular to the actual board). The two boards I have are breakout boards for a DS3231 RTC and an HM-10 BLE module, and they both have right-angle male header pins sticking out, which obviously made prototyping on a breadboard really easy, but I'm struggling with converting them to PCB.

Here are some photos to make it clearer:

HM-10:

DS3231:

I know one of my options is to desolder the right-angle header pins and add straight pins to them, but I'd like to avoid that so that I can easily use them in any future projects by simply disconnecting them from the eventual PCB and using them in a breadboard.

As such, I know that I would like there to be female headers on the final PCB, and ideally the female headers will also be at a right-angle so that the final PCB is a little more compact and there aren't just some boards sticking out from it.

So, after getting some measurements with my calipers, how can I translate them into the KiCAD footprint editor knowing the footprint should include the female right-angle header pins (which will of course extend the length of the modules beyond what I have currently measured), and also take their height into account so that they don't have any obstacles between them and the PCB as they are laying parallel to it?

I hope I made myself clear enough, but if not please feel free to ask me for any clarification.

Thanks in advance for any replies :)

View original on programming.dev
programming·General Programming Discussionbypromitheas

[Question/Advice] How would you approach creating a library to dynamically resize and position ncurses windows for flexible and relatively complex TUIs?

Hello everyone!

I decided to learn ncurses a few days ago so I can do a project I've been thinking about lately, and in the process I figured since I'll go to the trouble of solving a bunch of the problems with writing relatively complicated TUIs with ncurses, I might as well generalise the solutions into a library or two for future me and anyone else who will find them useful.

Anyway, enough introduction, heres what I want to do with the library:

I want it to dynamically manage size and position of ncurses windows. This means windows should be able to be added, and removed (just those for now, I don't know if I'll implement resizing windows from the perspective of someone using the library to have that functionality), and have the size and position of the windows update automatically.

Initially I thought a binary space partitioning tree situation might be a good way to tackle this, but I want it to be a bit more flexible. For example, the dev using the library should be able to set certain windows to behave differently than leaves in a bsp (think persistent status bar at the bottom of the application, taking up the entire width but only a couple lines in height for example, or toggle-able file explorer on the left/right of the application like neovim's NERDTree).

How would you guys go about designing something like this, while still keeping the code relatively simple and efficient?

Here is a badly drawn diagram of what I mean:

Steps here refer to how someone using the library might go about creating each element (window) of their UI in their own project.

Until step 4 a bsp tree makes sense, but after that when I want to add a window which doesnt conform to the rules of a bsp tree, it gets a bit difficult.

Also, Im thinking there should be some way for windows to have some idea of their neighbours so that when a change occurs, they can adapt to it.

Anyways, essentially I'm looking for your thoughts on how you would go about implementing something like this.

Much appreciated!

View original on programming.dev

Clangd Hover - Is it possible, and if so how, to include parameter names along with their type?

Hello guys, my question is basically in the title. I would really like to be able to have the parameter names included when I cursor over a function and open the 'hover' window to show basic info about it. Currently it only shows me the expected types, which while still useful I feel is only a piece of the puzzle when working either with a new library, or a codebase you're not familiar with.

As an example I'm learning ncurses these past couple days, and its significantly flow-breaking to have to switch focus away from the editor to either search on the web what a particular function takes as parameters, or open a separate terminal to read the man page for it. I'm still not familiar with the library so I frequently need to look up what a parameter represents in the context of the code, in addition to what type I should give it. Is there any way to do this while still using clangd as my lsp server?

Ive also included a screenshot of one such hover window for the ncurses function mvprintw.

View original on programming.dev

Flask App to Convert Google Maps URLS to OSM format

Hello guys, Ive built a super simple web app to convert google maps urls to the osm format, mainly for my personal use but also for anyone who has this use case as well.

Most link formats work, but there are a couple that have been giving me particular trouble. Here are the formats that work as expected:

https://www.google.com/maps/place/Eiffel+Tower/@48.8584,2.2945,17z
https://google.com/maps/place/Statue+of+Liberty/@40.6892,-74.0445,17z
https://maps.app.goo.gl/SoDFgcPJKVPeZXqd8
https://www.google.co.uk/maps/place/Buckingham+Palace/@51.5014,-0.1419,17z
https://www.google.de/maps/place/Brandenburger+Tor/@52.5163,13.3777,17z

These 2 formats dont work on the server, but if I run the app locally they work and give a correct osm formatted link:

https://maps.app.goo.gl/jXqDkM2NWN55kZcd9?g_st=com.google.maps.preview.copy
https://maps.google.com/maps?q=Big+Ben%2C+London

You can test it on the actual website (gmaps2osm.de), but essentially if you try to convert links of this format on the actual website you get an Internal Server Error after around 10 seconds of it thinking.

Right now Im focusing on the .preview.copy formatted links. As you will see from the code below, I am using playwright to headlessly handle googles annoying redirects and consent forms:

from typing import final
from flask import Flask, request, render_template, jsonify
from datetime import datetime
import re
import urllib.parse
import requests
from playwright.sync_api import sync_playwright

# Test urls for regex:
# https://www.google.com/maps/place/Eiffel+Tower/@48.8584,2.2945,17z
# https://google.com/maps/place/Statue+of+Liberty/@40.6892,-74.0445,17z
# https://maps.google.com/maps?q=Big+Ben%2C+London # has an issue, doesnt work
# https://maps.app.goo.gl/4jnZLELvmpvBmFvx8
# https://maps.app.goo.gl/jXqDkM2NWN55kZcd9?g_st=com.google.maps.preview.copy
# https://www.google.co.uk/maps/place/Buckingham+Palace/@51.5014,-0.1419,17z
# https://www.google.de/maps/place/Brandenburger+Tor/@52.5163,13.3777,17z

debug_enabled = False
is_headless = not debug_enabled
print(f"is_headless: {is_headless}")
log_file_path = ""
app = Flask(__name__)

GMAPS_URL_RE = re.compile(
	r"""(?x)  # Verbose mode
	^https?://
	(
		(www\.)?
		(google\.[a-z.]+/maps)			  |		# www.google.com/maps, google.co.uk/maps, etc.
		(maps\.google\.[a-z.]+)			  |		# maps.google.com
		(goo\.gl/maps)					  |		# goo.gl/maps
		(maps\.app\.goo\.gl)					# maps.app.goo.gl
		# (maps\.app\.goo\.gl.*\.preview\.copy)	# maps.app.goo.gl(...).preview.copy
	)
	""",
	re.IGNORECASE
)

# ---- Dispatcher
def extract_coordinates(url: str):
	if ".preview.copy" in url:
		return handle_preview_copy_url(url)
	if "maps?q=" in url:
		return handle_browser_resolved_url(url)
	else:
		return handle_standard_url(url)

# ---- Handler: preview.copy links
def handle_preview_copy_url(url: str):
	url = url.split('?')[0]
	input_url = resolve_initial_redirect(url)
	if "consent.google.com" in input_url:
		parsed = urllib.parse.urlparse(input_url)
		query = urllib.parse.parse_qs(parsed.query)
		continue_url = query.get("continue", [""])[0]
		if continue_url:
			input_url = urllib.parse.unquote(continue_url)
		else:
			log_msg("ERROR", "No 'continue' parameter found.")
			return None, input_url
	final_url = extract_with_playwright(input_url)
	coord = extract_coords_from_url(final_url)
	return coord, final_url

# ---- Handler: links with only a query containing place names (https://maps.google.com/maps?q=Big+Ben%2C+London)
def handle_browser_resolved_url(url: str):
	input_url = resolve_initial_redirect(url)
	if "consent.google.com" in input_url:
		parsed = urllib.parse.urlparse(input_url)
		query = urllib.parse.parse_qs(parsed.query)
		continue_url = query.get("continue", [""])[0]
		if continue_url:
			input_url = urllib.parse.unquote(continue_url)
		else:
			log_msg("ERROR", "No 'continue' parameter found.")
			return None, input_url
	final_url = extract_with_playwright(input_url)
	coord = extract_coords_from_url(final_url)
	return coord, final_url

# ---- Handler: standard links
def handle_standard_url(url: str):
	try:
		# Follow redirect to get final destination
		response = requests.head(url, allow_redirects=True, timeout=10)
		final_url = response.url
		log_msg("DEBUG", "Final URL:", final_url)
	except requests.RequestException as e:
		raise RuntimeError(f"Failed to resolve standard URL: {e}")
	coords = extract_coords_from_url(final_url)
	return coords, final_url

# ---- Utility: redirect resolver
def resolve_initial_redirect(url: str):
	try:
		response = requests.get(url, allow_redirects=True, timeout=10)
		return response.url
	except Exception as e:
		log_msg("ERROR", "Redirect failed: ", e)
		return url

# ---- Utility: use playwright to get the final rendered URL
def extract_with_playwright(url:str):
	with sync_playwright() as p:
		browser = p.chromium.launch(headless=is_headless)
		page = browser.new_page()
		page.goto(url)
		# Click reject button if necessary
		try:
			page.locator('button:has-text("Reject all")').first.click(timeout=5000)
		except:
			pass # No reject button
		page.wait_for_function(
				"""() => window.location.href.includes('/@')""",
				timeout=15000
		)
		final_url = page.url
		log_msg("DEBUG", "Final URL: ", final_url)
		browser.close()
		return final_url

# ---- Utility: extract coordinates with regex patterns
def extract_coords_from_url(url: str):
	patterns = [
		r'/@([-.\d]+),([-.\d]+)',				 # Matches /@lat,lon
		r'/place/([-.\d]+),([-.\d]+)',			 # Matches /place/lat,lon
		r'/search/([-.\d]+),\+?([-.\d]+)',
		r'[?&]q=([-.\d]+),([-.\d]+)',			 # Matches ?q=lat,lon
		r'[?&]ll=([-.\d]+),([-.\d]+)',			 # Matches ?ll=lat,lon
		r'[?&]center=([-.\d]+),([-.\d]+)',		 # Matches ?center=lat,lon
		r'!3d([-.\d]+)!4d([-.\d]+)'				 # Matches !3dlat!4dlon
	]
	for pattern in patterns:
		match = re.search(pattern, url)
		if match:
			return match.groups()
	return None

# ---- Utility: logging function to output and write to file
def log_msg(level: str, msg: str, optional_arg = None):
	ts = datetime.now()
	iso_ts = ts.isoformat()
	if level == "DEBUG" and debug_enabled == False:
		return
	if optional_arg:
		log_line = f"[{iso_ts}]:[{level}]: {msg} {optional_arg}"
	else:
		log_line = f"[{iso_ts}]:[{level}]: {msg}"
	print(log_line)
	with open(log_file_path+"gmaps2osm_logs.txt", "a") as log_file:
		log_file.write(log_line+"\n")

@app.route("/", methods=["GET", "POST"])
def index():
	result = {}
	if request.method == "POST":
		url = request.form.get("gmaps_url", "").strip()
		log_msg("DEBUG", "URL:", url)
		if not url:
			result["error"] = "Please enter a Google Maps URL."
			log_msg("DEBUG", "Not a URL")
		else:
			try:
				if not GMAPS_URL_RE.search(url):
					result["error"] = "Please enter a valid Google Maps URL."
				else:
					coords, final_url = extract_coordinates(url)
					log_msg("DEBUG", "coords:", coords)
					if coords:
						lat, lon = coords
						result["latitude"] = lat
						result["longitude"] = lon
						result["osm_link"] = f"https://osmand.net/map?pin=%7Blat%7D%2C%7Blon%7D#16/{lat}/{lon}"
					else:
						raise ValueError("No coordinates found in the URL.")
			except ValueError as e:
				result["error"] = f"Error resolving or parsing URL: {e}"
	return render_template("index.html", **result)

if __name__ == "__main__":
	app.run(debug=True)

You can view all the code at the github: https://github.com/promitheas17j/gmaps2osm

But essentially its running as a docker container (my first project using docker woowoo) and this is the output of the logs on the server when I enter such a link:

$ docker logs -f gmaps2osm
[2025-08-15 17:42:00,132] ERROR in app: Exception on / [POST]
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/dist-packages/flask/app.py", line 1511, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.10/dist-packages/flask/app.py", line 919, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.10/dist-packages/flask/app.py", line 917, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.10/dist-packages/flask/app.py", line 902, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)  # type: ignore[no-any-return]
  File "/app/app.py", line 164, in index
    coords, final_url = extract_coordinates(url)
  File "/app/app.py", line 42, in extract_coordinates
    return handle_preview_copy_url(url)
  File "/app/app.py", line 61, in handle_preview_copy_url
    final_url = extract_with_playwright(input_url)
  File "/app/app.py", line 113, in extract_with_playwright
    page.wait_for_url("**/@**", timeout=15000)
  File "/usr/local/lib/python3.10/dist-packages/playwright/sync_api/_generated.py", line 9162, in wait_for_url
    self._sync(
  File "/usr/local/lib/python3.10/dist-packages/playwright/_impl/_sync_base.py", line 115, in _sync
    return task.result()
  File "/usr/local/lib/python3.10/dist-packages/playwright/_impl/_page.py", line 584, in wait_for_url
    return await self._main_frame.wait_for_url(**locals_to_params(locals()))
  File "/usr/local/lib/python3.10/dist-packages/playwright/_impl/_frame.py", line 263, in wait_for_url
    async with self.expect_navigation(
  File "/usr/local/lib/python3.10/dist-packages/playwright/_impl/_event_context_manager.py", line 33, in __aexit__
    await self._future
  File "/usr/local/lib/python3.10/dist-packages/playwright/_impl/_frame.py", line 239, in continuation
    event = await waiter.result()
playwright._impl._errors.TimeoutError: Timeout 15000ms exceeded.
=========================== logs ===========================
waiting for navigation to "**/@**" until 'load'
============================================================

This was when I gave this URL as input: https://maps.app.goo.gl/jXqDkM2NWN55kZcd9?g_st=com.google.maps.preview.copy

Anyone have any idea why playwright is throwing errors at me?

Thanks in advance, I really appreciate any help you can give me. Ive been banging my head about this issue on and off the past couple of months.

View original on programming.dev
linuxquestions·Linux Questionsbypromitheas

Trying to set up email alerts for ssh logins on my server with PAM. Getting error code 2

Hello everyone!

As the title says, I am trying to set up email alerts on my server whenever there is a successful ssh connection (will also setup the same for failed connections with fail2ban later). I already have the email script created and it works (I use it to monitor the directories containing all of these security scripts for changes so that I also get notified if anything critical is modified or deleted in those directories).

I also created a very basic user called test for - you guessed it - testing purposes. This user doesn't have a home directory or anything like that.

Here are the relevant scripts:

$ cat /usr/local/bin/login-alert.sh
#!/bin/bash

# Sends alerts only for real terminals not cron jobs
if [[ -n "$SSH_CONNECTION" ]]; then
	USERNAME=$(whoami)
	IP=$(echo $SSH_CONNECTION | awk '{print $1}')
	HOST=$(hostname)
	DATETIME=$(date)
	/usr/local/bin/semail \
		-s "[CRITICAL] SSH Login to $HOST" \
	 	-b "Login detected:\n\nUser: $USERNAME\nIP: $IP\nTime: $DATETIME\nTTY: $SSH_TTY"
fi

$ cat /usr/local/bin/semail
#!/bin/bash

# Default values
TO="[email protected]"
FROM="notifications@my_server.com"
SUBJECT=""
BODY=""
BODY_FILE=""


# Help function
show_help() {
cat <<EOF
Usage: $0 [OPTIONS]

Send a test email using Postfix.

Options:
  -t, --to EMAIL            Recipient email address (default: $TO)
  -s, --subject TEXT        Subject of the email (required)
  -b, --body TEXT           Body text of the email
  -f, --body-file FILE      File to read body text from (overrides --body)
  -h, --help                Show this help message

If no body or body-file is provided, you will be prompted to enter the body interactively.

Examples:
  $0 -s "Test subject" -b "Hello\nThis is a test"
  $0 --subject "Test" --body-file message.txt
EOF
}

# Parse arguments
while [[ "$#" -gt 0 ]]; do
	case "$1" in
		-t|--to)
			TO="$2"
			shift 2
			;;
		-s|--subject)
			SUBJECT="$2"
			shift 2
			;;
		-b|--body)
			BODY="$2"
			shift 2
			;;
		-f|--body-file)
			BODY_FILE="$2"
			shift 2
			;;
		-h|--help)
			show_help
			exit 0
			;;
		*)
			echo "Unknown option: $1"
			show_help
			exit 1
			;;
	esac
done

# Validate required parameters
if [[ -z "$SUBJECT" ]]; then
	echo "Error: --subject is required."
	show_help
	exit 1
fi

# Handle body input
if [[ -n "$BODY_FILE" ]]; then
	if [[ ! -f "$BODY_FILE" ]]; then
		echo "Error: Body file '$BODY_FILE' does not exist."
		exit 1
	fi
	BODY=$(<"$BODY_FILE")
elif [[ -z "$BODY" ]]; then
	echo "Enter the body of the email (end with Ctrl-D):"
	BODY=$(</dev/stdin)
fi

# Send email
{
	echo "From: $FROM"
	echo "To: $TO"
	echo "Subject: $SUBJECT"
	echo "Content-Type: text/plain; charset=UTF-8"
	echo
	printf "%b\n" "$BODY"
} | /usr/sbin/sendmail -t -f "$FROM"

# /usr/sbin/sendmail -f "$FROM" "$TO" <<EOF
# From: $FROM
# To: $TO
# Subject: $SUBJECT

# $BODY
# EOF

echo "Email sent to $TO"

And here is the output I see when I login as the test user:

ssh test@my_server.com
test@my_server.com's password:
dir=/ failed: exit code 2
dir=/ failed: exit code 2
Linux my_server 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Aug 15 07:08:24 2025 from my_ip_address
Could not chdir to home directory /home/test: No such file or directory

I don't get email alerts for any user, neither the test user nor my regular admin user.

Here is my /etc/pam.d/sshd relevant lines:

# Standard Un*x session setup and teardown.
account optional pam_exec.so seteuid dir=/ /usr/local/bin/login_notify.sh
@include common-session

I also tried with session instead of account and without the dir=/ part.

Can anyone help me troubleshoot this please?

Thanks in advance. Of course if you need any more info I'll do my best to provide it :)

View original on programming.dev