[-] promitheas@programming.dev 25 points 8 months ago

This seems like a good thing. As they state, instead of just using OSS they'll contribute back to existing projects and likely release some of their own stuff.

Hopefully they stick to it

[-] promitheas@programming.dev 28 points 9 months ago* (last edited 9 months ago)

Also, if anyone suggests Electron or anything involving a browser, I will find them and remove one electron from each atom of theirs, turning them into smoke.

This made me laugh, it was so unexpected xD

Also, while its not an answer for your question, look up ncurses if you dont know it. It might be a middle ground for your future projects, if you prefer staying in the terminal but having a UI.

[-] promitheas@programming.dev 23 points 9 months ago

Next step: dismantle US bases in EU and send the terrorists back whence they came from

[-] promitheas@programming.dev 20 points 10 months ago

My first lemmy account was on an instance called iusearchlinux.fyi then it just disappeared suddenly and without explanation (admin probably burnt out). Anyway, it was nice to be able to tell people i use arch linux without actually having to tell them. I miss that instance

[-] promitheas@programming.dev 19 points 11 months ago

What part of europe are you from my friend?!?

1
84
submitted 1 year ago* (last edited 1 year ago) by promitheas@programming.dev to c/boycottus@lemmy.ca
13
submitted 1 year ago* (last edited 1 year ago) by promitheas@programming.dev to c/programming@lemmy.ml

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!

11
submitted 1 year ago* (last edited 1 year ago) by promitheas@programming.dev to c/neovim@programming.dev

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.

29
submitted 1 year ago* (last edited 1 year ago) by promitheas@programming.dev to c/python@programming.dev

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.

14
submitted 1 year ago* (last edited 1 year ago) by promitheas@programming.dev to c/linuxquestions@lemmy.zip

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="my_email@here.com"
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 :)

8

Hello everyone!

I have a few projects lined up that I want to do, but I dont know where to order my parts from.

Up to now I was using grobotronics.com seeing as they ship to Cyprus which is where I am currently, because I needed basic stuff, but their stock is limited in terms of variation.

The parts I need for my project are a BNO085, Arduino Micro, and for a separate project some kind of STM32 (not sure which yet).

Anyone know a relatively cheap online store that has a wide selection of more these more specialised type components, that ships to Europe?

Thanks in advance!

[-] promitheas@programming.dev 19 points 1 year ago

Though soon to no longer be IT, i guarantee that if you bring them cookies and coffee theyll start to love you :)

10
submitted 1 year ago* (last edited 1 year ago) by promitheas@programming.dev to c/askandroid@lemdro.id

Hello guys. I have island installed and have my "work profile" installed, which contains among others my browser in the island tab. The situation is that I have several PWAs that I dont want to receive notifications for while I am at work as they are distracting and unnecessarily annoying, but I want to receive them normally while not at work.

I have been trying to figure out how to get it set up so that I can both trigger the actions at scheduled times, or manually through the quick tile I created from macrodroid (my work hours are not really stable/fixed).

However, when testing with a push notification testing site, regardless what I do I still get the notifications.

Here is my setup so far:

Macros:
Enable Work Profile
--------------------------
Triggers:
    Day/Time: 08:00 Mon, Fri
    Quick Tile On/Press

Actions:
    Action 1:
        Target: Broadcast
        Send Intent: island.intent.action.FREEZE_APP
        Extra 1: package_name = com.brave.browser
    Action 2:
        Display Notification (with a message saying work mode enabled)

Constraints: None

Disable Work Profile
--------------------------
Triggers:
    Quick Tile Off

Actions:
    Action 1:
        Target: Broadcast
        Send Intent: island.intent.action.UNFREEZE_APP
        Extra 1: package_name = com.brave.browser
    Action 2:
        Display Notification (with a message saying work mode disabled)

Constraints:
    Day of the Week: Mon
    Time of Day: 19:00 - 19:01
------------------- OR --------------------------
    Day of the Week: Fri
    Time of Day: 22:00 - 22:01

Some things to note:

I am using /e/os version 3.0.1-t-20250606498724-official-FP5 Android is version 13

What am I doing wrong here? Ideally I would like to have as few apps installed as possible to achieve a single task, but as I understand it macrodroid doesnt have the necessary permissions to affect other apps notifications (hence why island is necessary).

If there is another way which is easier to achieve what I am trying to do I'm all ears, however I do not want to use do not disturb for this purpose because obviously I need to be able to use my phone normally while at work except for those 2-3 apps I dont want to receive notifications for, but there are also situations where I want a full DND experience where I will get nothing coming through, not even alarms (e.g. meetings/classes, etc). Also for those unfamiliar with /e/os, it doesn't currently have the Focus Mode feature so that is also out of the picture.

Many thanks in advance!

26
submitted 1 year ago* (last edited 1 year ago) by promitheas@programming.dev to c/buyeuropean@feddit.uk

Hello everyone! I just wrote an extremely simply single-page tool using just HTML and Flask to convert google maps links to Osmand.net links, and I would like to host it somewhere.

I don't need any fancy bells and whistles, as long as it supports Flask as a backend.

Im no web developer, so I haven't actually hosted my own page anywhere before. As such, simplicity of use and setup is quite important. For example if it allows me to also buy the domain in the same platform thats good.

While I use Flask, there is no data being stored. All the flask app does is take the link given by the user, convert it to the osmand.net format, and return it. Super simple!

I looked on buy-european.net and found Infomaniak Web Hosting. I quite like the fact that they use 100% renewable energy to power their servers according to the page above, but I'm not sure if it would be the best option given how inexperienced with all this I am.

Would love to hear your suggestions! Thanks

Edit: Ended up going with hetzner. Site is pretty much set up right now.

gmaps2osm.de

It has some screen-reader support (still need to get it tested by visually impaired people), and is also set up so that you can install it as a PWA on your mobile device (add to home screen).

Here is the github repo: https://github.com/promitheas17j/gmaps2osm

I would really appreciate any feedback from experienced and not so experienced web developers alike :D

13
submitted 1 year ago* (last edited 1 year ago) by promitheas@programming.dev to c/piracy@lemmy.dbzer0.com

[Solution at end]

Essentially what the title sais.

I want to give this genre a try, but I also want to use mods. Also, Im on Linux so if there are any extra steps I need to do if I install through lutris/steam (as non-steam game) then I would really appreciate your input. The only reason I am currently considering steam as a non-steam game for the install method is just so I dont fragment my games library too much across multiple platforms/apps. If there is any reason not to install it in steam please also let me know.

Much appreciated!!!

[SOLUTION]

Turns out the torrent I found was just a .rar file of the game with the crack file already there. All I had to do was unpack it, then add it through Lutris as a locally installed .exe. I did have to change the runner to proton-ge as the default wine would not start the game. I also had to go into the prefix it created and apply this fix (steamcommunity link) to get it to stop displaying an annoying pop-up message every 30 minutes or so (yet to test it out, but it should work. Will edit again if it doesnt remove the pop-up message).

Also, strangely enough at least for my experience with pirating games, the in-game mod "store" worked perfectly, and I didn't need to manually move files to a mods folder, though I'm sure that would also work just as well.

EDIT 2: The workaround to edit the playtime in the game files worked and I no longer get the pop-up message.

[-] promitheas@programming.dev 34 points 1 year ago

Thank you for bringing this to my attention, I wouldn't be aware of it otherwise. For what its worth, I left my ideas as feedback there.

Also, I would just like to point out that before lemmy (and subscribing to various EU communities) I was not at all active in voicing my opinion about such things as I didn't have any idea that it was even possible/how to do it. Lemmy as a whole has helped me become more active in this regard :D

2
3

Hello once again everyone!

I've made considerable progress on my thesis thanks in part to you guys answering my previous post here. I'm already writing up the report, and have pretty much the entire system programmed through the Arduino.

However, I am still having difficulties figuring out how to initiate/force a disconnect of all BT devices connected to the HM-10 module (this is the one I got). You can refer to the post I made on the arduino forums (link in post) where I also searched for the solution but had no luck, but sadly its been almost 2 weeks and still no answer.

To cut a long story short, I have all the pins of the HM-10 wired except the BRK pin currently, even though I wired that up previously and tried sending LOW-HIGH-LOW and HIGH-LOW-HIGH pulses to try to disconnect. As far as I understand it, what I have is not exactly the HM-10 but an HM-10 mounted on a breakout board(?).

The data sheet on the website I got it from seems to be for the bare HM-10 so its a bit confusing for me. It talks about a specific pin (PIO0) which looks to be wired to a switch, but there is no switch or button on the actual module and that doesn't help me anyway as I want to initiate a disconnect from code.

So how can I make it disconnect from all devices when the user for example selects a certain option from the menu of my system?

As always, I will greatly appreciate any help, and of course if you need any more info let me know and I'll try to provide it.

[-] promitheas@programming.dev 33 points 2 years ago

This. Im not french, and while the surrender jokes can be slightly amusing at times, i feel a great sense of pride(?) everytime i see on the news that theyre protesting some new tyranny. Wish my lot were like that. Alas, we not only get trampled by the boot but kiss it as it passes by

[-] promitheas@programming.dev 22 points 2 years ago

What you do for work might be a factor, but i dont think pain to that extent is normal. I would stress to your doctor that basic tasks are painful and that youd like to get checked out anyway. Youve got nothing to lose by getting it checked, only to gain. Im in my mid 20s too and while i get aches in my knees/back occasionally its not debilitating as you describe it.

[-] promitheas@programming.dev 33 points 2 years ago

As ive grown older i find myself disagreeing more and more with the jedi whom as a child i idolised as paragons of good. But palpatine, vader, and the empire are so many things before being "poor good revolutionaries" trying to take down the status quo simply from the good of their golden hearts. Theres always more than 2 choices people :)

view more: ‹ prev next ›

promitheas

0 post score
0 comment score
joined 3 years ago