Shadow

joined 2 years ago
MODERATOR OF
[–] Shadow@lemmy.ca 6 points 1 week ago

Yes, shipped to a server at my house.

[–] Shadow@lemmy.ca 5 points 1 week ago

No we launched with stripe, but if you look at our site you'll see we don't push it heavily since we pay more fees there.

[–] Shadow@lemmy.ca 15 points 1 week ago

Good idea, they all do except interac since everything routes through stripe. It's absurd the amount of transaction data they get. Thanks!

[–] Shadow@lemmy.ca 18 points 1 week ago (6 children)

As requested, here's some additional info about donation methods / sizes / volume!

@GreyEyedGhost@lemmy.ca @pglpm@lemmy.ca

[–] Shadow@lemmy.ca 6 points 1 week ago* (last edited 1 week ago) (1 children)

I like the idea of a specific fundraiser. ~~Our post 6 months ago is what drive the big spike visible on the graphs, so I was hoping for a similar boost this time.~~ If we don't get there naturally, I think that's a reasonable next step.

See below for your other question.

Edit: I was wrong, the big spike was Smorks transferring our old donations over. I forgot about that!

[–] Shadow@lemmy.ca 9 points 1 week ago

I have no problem sharing anonymized info for things like this, it's just difficult to pull.

We accept donations a few different ways, they can be one time or recurring, we don't know who people are , and we often get paid weeks after they happen once it gets reconciled by stripe.

Let me see what I can do.

Re: Lem.ee that's kinda a different problem. They weren't financial issues afaik, but admin burnout. I don't think that's a concern on our side at this time.

[–] Shadow@lemmy.ca 12 points 1 week ago (1 children)

Two hosts would cost more in colo fees and we don't need the resources. The redundancy would be nice, but this is enterprise grade hardware covered under Dell prosupport. I also have an identical box running my home systems, so I could steal parts temporarily if we had an issue.

Yeah the ram is just what the hosts came with. It's way more than we need and so everything is very over provisioned.

[–] Shadow@lemmy.ca 4 points 1 week ago (1 children)

Willing to email me your file so I can try? Shadow@lemmy.ca

[–] Shadow@lemmy.ca 4 points 1 week ago (1 children)
[–] Shadow@lemmy.ca 15 points 1 week ago (5 children)

Was this recently? I just pulled in some more fixes a few hours ago. It's still under very active development.

[–] Shadow@lemmy.ca 7 points 1 week ago (5 children)

That describes almost every comic I see on lemmy.

171
submitted 3 months ago* (last edited 3 months ago) by Shadow@lemmy.ca to c/main@lemmy.ca
 

cross-posted from: https://sh.itjust.works/post/35952239

Hey all,

Today, I’m writing to share our intention to join Fedecan, a Canadian not-for-profit organization committed to supporting the Fediverse. We believe this partnership will foster collaboration among like-minded individuals who share a common goal: to create a safe, welcoming space where people can connect freely.

Together we will help deliver a fast, reliable, and consistent experience for all and continue to be free from corporate influence and guided by the values of openness, community, and trust.

Who is Fedecan

Fedecan is a registered non-profit organization based in Canada, with the goal to provide a safe and welcoming space for people to connect with each other on the Fediverse. More information can be found here.

You may also know them by their Canadian lemmy instance lemmy.ca.

What does this mean for sh.itjust.works?

From the outside everything will stay much the same, especially with the admin team. Internally, we will collaborate on tasks related to non-profit compliance, policies, banking and common infrastructure elements such as backup/disaster recovery infrastructure. We will continue to operate separate equipment and instances in geographically isolated locations under different names. We will work towards aligning on safety and security practices in order to ensure that data is secure.

From an organizational structure, sh.itjust.works will fall under the Fedecan umbrella and will share common bylaws, policies, methodologies on best practices, security and legal considerations.

Where do donations go?

Donations to sh.itjust.works will continue to support our mission and objectives exclusively. However, users will also have the option to donate directly to Fedecan, which will allocate funds amongst its projects including sh.itjust.works. Operational costs related to running the non-profit will be shared among projects and these expenses will be transparently disclosed in annual reports published on the Fedecan website.

Option to withdrawal

sh.itjust.works will have the right to withdraw from the Fedecan umbrella should our mutual goals no longer be aligned. In such a case, a predefined provision and action plan will be in place to ensure a smooth transition back to independence.

Why Now?

As the Fediverse continues to grow, we believe it's important to collaborate more closely with others who share our values. Joining Fedecan allows us to do just that, strengthening our operation through a non-profit while staying true to our mission.

Timeline / Next Steps

Over the coming weeks, we'll begin the process of integrating with Fedecan on the organization side. You won't notice many changes but we'll keep you informed throughout the process.

Looking Ahead

We’re excited about this next chapter and the opportunities it brings. By joining forces, we’re reinforcing our commitment to the Fediverse and to the principles that brought us all together in the first place—openness, community, transparency, and trust.

Our core mission remains unchanged. We're still independent in spirit and practice and we remain committed to being a space that's not driven by profit, but by people.

I invite your questions or concerns on this thread or on our https://matrix.to/#/#sh.itjust.works:matrix.org)

Stay connected,

--The sh.itjust.works and Fedecan Team

16
DIY X-ray Machine (www.youtube.com)
 

We're now running 0.19.11, changelog here - https://join-lemmy.org/news/2025-04-08_-_Lemmy_Release_v0.19.11

44
Bernd das Brot (en.wikipedia.org)
 

If you want to watch the depressed bread yourself: https://tv.garden/de/0yjVBN9zD5VvoM

80
submitted 3 months ago* (last edited 3 months ago) by Shadow@lemmy.ca to c/main@lemmy.ca
 

For anyone that noticed the 30 seconds of downtime a few minutes ago, that was to upgrade us to lemmy 0.19.10.

Changes are listed here - https://join-lemmy.org/news/2025-03-19_-_Lemmy_Release_v0.19.10_and_Developer_AMA

This is not the version with breaking API changes, there should be no impact to any clients.

Enjoy!

37
RIP mcbarge (www.ctvnews.ca)
 

F

56
Magic smoke (en.wikipedia.org)
13
submitted 4 months ago* (last edited 4 months ago) by Shadow@lemmy.ca to c/lemmy@lemmy.ml
 

cross-posted from: https://lemmy.ca/post/40761824

Sorry everyone I know how much you love the attention she gives you, but I've implemented some quick and dirty filtering for private messaging.

We now have the ability to automatically mark PM's as deleted or read, depending on content inside of them. If we accidentally filter something you legitimately wanted (ie, not Nicole) please let me know.

If any other instances would like to implement this, here's the code. Note that you'll need to set your hostname at the top here for some reason I haven't exactly identified.

SET lemmy.protocol_and_hostname = 'https://lemmy.ca/';

CREATE TABLE private_message_filters (
    id SERIAL PRIMARY KEY,
    phrase TEXT NOT NULL,
    behavior VARCHAR(10) NOT NULL CHECK (behavior IN ('delete', 'mark_read'))
);

CREATE OR REPLACE FUNCTION filter_private_messages()
RETURNS trigger AS $$
DECLARE
    banned_phrase_record private_message_filters%ROWTYPE;
BEGIN
    FOR banned_phrase_record IN 
        SELECT * FROM private_message_filters
    LOOP
        IF LOWER(TRIM(NEW.content)) ILIKE '%' || LOWER(TRIM(banned_phrase_record.phrase)) || '%' THEN
            IF banned_phrase_record.behavior = 'delete' THEN
                NEW.deleted := true;
                RETURN NEW;
            ELSIF banned_phrase_record.behavior = 'mark_read' THEN
                NEW.read := true;
                RETURN NEW;
            END IF;
        END IF;
    END LOOP;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trg_filter_private_messages
AFTER INSERT ON private_message
FOR EACH ROW
EXECUTE FUNCTION filter_private_messages();

To add filter words:

insert into private_message_filters (behavior, phrase) values ('delete', 'spamtestdelete');
insert into private_message_filters (behavior, phrase) values ('mark_read', 'spamtestread');

If you want to quickly disable / enable filtering while testing:

ALTER TABLE private_message DISABLE TRIGGER trg_filter_private_messages;
ALTER TABLE private_message ENABLE TRIGGER trg_filter_private_messages;

I'll leave it up to you to figure out what phrases to filter on. MAKE SURE YOU TEST. If there's an error, private messaging could break completely. You should not get an error message from the UI while sending a message with a banned word.

Edit: I like flamingos-cant's solution here better: https://lemmy.ca/post/40761824/15209462

 

Sorry everyone I know how much you love the attention she gives you, but I've implemented some quick and dirty filtering for private messaging.

We now have the ability to automatically mark PM's as deleted or read, depending on content inside of them. If we accidentally filter something you legitimately wanted (ie, not Nicole) please let me know.

If any other instances would like to implement this, here's the code. Note that you'll need to set your hostname at the top here for some reason I haven't exactly identified.

SET lemmy.protocol_and_hostname = 'https://lemmy.ca/';

CREATE TABLE private_message_filters (
    id SERIAL PRIMARY KEY,
    phrase TEXT NOT NULL,
    behavior VARCHAR(10) NOT NULL CHECK (behavior IN ('delete', 'mark_read'))
);

CREATE OR REPLACE FUNCTION filter_private_messages()
RETURNS trigger AS $$
DECLARE
    banned_phrase_record private_message_filters%ROWTYPE;
BEGIN
    FOR banned_phrase_record IN 
        SELECT * FROM private_message_filters
    LOOP
        IF LOWER(TRIM(NEW.content)) ILIKE '%' || LOWER(TRIM(banned_phrase_record.phrase)) || '%' THEN
            IF banned_phrase_record.behavior = 'delete' THEN
                NEW.deleted := true;
                RETURN NEW;
            ELSIF banned_phrase_record.behavior = 'mark_read' THEN
                NEW.read := true;
                RETURN NEW;
            END IF;
        END IF;
    END LOOP;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trg_filter_private_messages
AFTER INSERT ON private_message
FOR EACH ROW
EXECUTE FUNCTION filter_private_messages();

To add filter words:

insert into private_message_filters (behavior, phrase) values ('delete', 'spamtestdelete');
insert into private_message_filters (behavior, phrase) values ('mark_read', 'spamtestread');

If you want to quickly disable / enable filtering while testing:

ALTER TABLE private_message DISABLE TRIGGER trg_filter_private_messages;
ALTER TABLE private_message ENABLE TRIGGER trg_filter_private_messages;

I'll leave it up to you to figure out what phrases to filter on. MAKE SURE YOU TEST. If there's an error, private messaging could break completely. You should not get an error message from the UI while sending a message with a banned word.

view more: ‹ prev next ›