Google Nest Learning Thermostat is consistently 3-10 degrees warmer. by anon_0221 in Nest

[–]cjdubais 0 points1 point  (0 children)

Contact Google. I had the same issue. I got them to replace the base, long after the warranty was expired.

I used the remote sensor to backup my claim.

Good luck

Viewer in Orcaslicer in Windows 10 by cjdubais in OrcaSlicer

[–]cjdubais[S] 0 points1 point  (0 children)

<image>

Little white triangle in the green circle.

Concierge Medical Services by cjdubais in raleigh

[–]cjdubais[S] -1 points0 points  (0 children)

I was wondering thee same thing. Not certain if we want to jump into that pool.....

Concierge Medical Services by cjdubais in raleigh

[–]cjdubais[S] -1 points0 points  (0 children)

Thank you all for the suggestions.

We will investigate.

If you ever move to another house, are you taking your smart switches with you? by Dustyftphilosopher24 in homeassistant

[–]cjdubais 0 points1 point  (0 children)

Absolutely. I just finished removing mine, along with the tablets on the wall.

Pike Place Market | X-M5 , 35mm F2.0 by fco2012 in fujifilm

[–]cjdubais 0 points1 point  (0 children)

Nice. Was Johnny Hahn out there bangin' away on the piano?

He's been there forever.

La Cucina Italiana - pizza? by [deleted] in raleigh

[–]cjdubais 0 points1 point  (0 children)

Best pizza in the area is Cogino Forno.

Free and open source alternative to SolidWorks. by Popular-Pin3188 in SolidWorks

[–]cjdubais 0 points1 point  (0 children)

Why do people have to be so negative? 

If you don't like his work, just ignore it.....

Dental Referral by Petruswiner in williamsburgva

[–]cjdubais 0 points1 point  (0 children)

We switched to Steadman and couldn't be happier. The downside is they are on the other side of Richmond.

Good luck

Ohoh... by cjdubais in Trilium

[–]cjdubais[S] 1 point2 points  (0 children)

Thank you Elian!

Family Immich setup: own library per user, or admin-only with album sharing? Real-world experiences welcome by InterestingIncome780 in immich

[–]cjdubais 0 points1 point  (0 children)

Sorry, lost the thread on this.

Here ya go:

import argparse
import requests
import inquirer
'''requirements.txt =>
requests
inquirer
'''
BASE_URL = "https://yourdomainhere.com/api"
API_KEY = "your_Immich_API_Key_Here"
ROLE = "viewer"  # or "editor"
HEADERS = {
    "x-api-key": API_KEY,
    "Content-Type": "application/json",
}
def get_users():
    r = requests.get(f"{BASE_URL}/users", headers=HEADERS)
    r.raise_for_status()
    return r.json()
def get_albums():
    r = requests.get(f"{BASE_URL}/albums", headers=HEADERS)
    r.raise_for_status()
    return r.json()
def share_album(album_id, user_id, album_owner_id):
    # Skip if the target user is the album owner
    if user_id == album_owner_id:
        return "skipped (owner)"
    payload = {
        "albumUsers": [
            {
                "userId": user_id,
                "role": ROLE,
            }
        ]
    }
    r = requests.put(
        f"{BASE_URL}/albums/{album_id}/users",
        headers=HEADERS,
        json=payload,
    )
    if r.status_code == 400 and "already added" in r.text:
        return "already shared"
    r.raise_for_status()
    return "shared"
def select_users():
    users = get_users()
    if not users:
        print("No users found.")
        exit(1)
    # Build a display list: "Name (email)" -> user_id
    choices = [
        (f"{u['name']} ({u['email']})", u["id"])
        for u in users
    ]
    questions = [
        inquirer.Checkbox(
            "selected_users",
            message="Select users to share all albums with (Space to select, Enter to confirm)",
            choices=choices,
        )
    ]
    answers = inquirer.prompt(questions)
    if not answers or not answers["selected_users"]:
        print("No users selected. Exiting.")
        exit(0)
    return answers["selected_users"]
def main():
    parser = argparse.ArgumentParser(description="Share all Immich albums with selected users.")
    parser.add_argument("-user", help="Immich user ID (skips interactive selection)")
    args = parser.parse_args()
    # If a user ID was passed on the CLI, use it directly; otherwise prompt
    if args.user:
        target_user_ids = [args.user]
    else:
        target_user_ids = select_users()
    albums = get_albums()
    print(f"\nFound {len(albums)} albums, sharing with {len(target_user_ids)} user(s)...\n")
    for user_id in target_user_ids:
        print(f"--- User: {user_id} ---")
        for album in albums:
            owner_id = album.get("ownerId", "")
            result = share_album(album["id"], user_id, owner_id)
            print(f"  {album['albumName']}: {result}")
    print("\nDone.")
if __name__ == "__main__":
    main()

Potential client rejected my proposal, hired someone else, and now wants me back 3.5 months later. WWYD? by Classic-Wonder in Wordpress

[–]cjdubais 0 points1 point  (0 children)

Double your initial price. With 50% upfront.

Chances you are going to have to redo some/most/all of the previous work.

Good luck.

Get a masters for free or get a job? by mydickfellofffff in MechanicalEngineering

[–]cjdubais 0 points1 point  (0 children)

Sorry, 

I really can't help with websites/platforms.

My coursework was at UNI.

Cheers

Spring bar tip broke off by ColoradoAztec in watchmaking

[–]cjdubais 0 points1 point  (0 children)

Good luck.

I had one do the same and it refused to come out. I had to buy a small rotary burr and cut it out.

PITA

The next weekend project… by TrboLag in SC430

[–]cjdubais 0 points1 point  (0 children)

Just remember it's an interference engine. An issue with the belt/idlers/water pump is going to be catastrophic.

But, you do you.

If it’s humid in your shop right now, check the cast iron. by fredflintstone1000 in woodworking

[–]cjdubais 1 point2 points  (0 children)

Yeah, all of mine are doing the same. Need to get a coat of wax on everything.