1
4
submitted 3 weeks ago by [email protected] to c/[email protected]

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

Generate SVG images for handy useful glyphs, org/markdown badges and more, from Lisp (Guile Scheme)

https://codeberg.org/jjba23/ggg

Be proud and appreciate technologies and techniques you use, distinguish clearly supported versions of things, etc. With flexible support for badges between one and three parts.

Through SVG generation from Lisp (Guile Scheme) we leverage a beautiful DSL and apply some mathematical knowledge to build pixel perfect badges. These SVG can then be easily converted without quality loss to any desired format.

With GGG, you have the power to create your own badges and images with a consistent and clean aesthetic.

2
-2
submitted 1 month ago by [email protected] to c/[email protected]

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

The free and open Lisp-powered notification nexus (https://codeberg.org/jjba23/pingwing)

Do you want to work the complexity away of sending e-mail, Slack or other notifications, from every other program? Specially if you use a (micro)service oriented architecture?

pingwing, a key component of the jointhefreeworld ecosystem, emerges as a robust and extensible solution. Architected in the elegant and powerful dialect of Lisp known as Guile Scheme, this tool gives you power (via REST API and more) to become the central notification system for your platform.

At its core, pingwing exposes a programmatic interface (and more!) allowing you to dispatch messages, electronic mail, and critical alerts with finesse. Forget juggling disparate notification mechanisms; pingwing harmonizes these streams, routing them to your chosen endpoints.

Initial support includes SMTP for email delivery, with a pending integration for Slack (expect webhook wizardry soon!).

The architecture is designed for future expansion, promising connectivity to a diverse range of notification sinks.

This project is powered by Lisp (Guile Scheme), curl , make , SXML and the GNU Artanis web framework, SQLite, among others.

This is free software, licensed under the GNU General Public License 3 or newer.

This tool is compatible with any SMTP provider you can think of, thanks to its simple and agnostic approach.

All you need to do to interact with pingwing is call the /api/v1/tasks with a POST method and give your preferences. See app/api/v1.scm for more details on the API, and lib/pingwing/tasks.scm for more.

curl -v \
     -H "Content-Type: application/json" \
     -d '{
         "task-type": "send-email",
         "template": "password-reset",
         "template-vars": {
           "system-name": "WikiMusic",
           "user": "[email protected]",
           "reset-link": "https://gnu.org/"
         },
         "sender-name": "No Reply - WikiMusic",
         "sender-address": "[email protected]",
         "subject": "Wikimusic - Password Reset",
         "recipients": [
           {"name": "Josep Bigorra", "address": "[email protected]"},
           {"name": "Another Person", "address": "[email protected]"}
         ]
       }' \
     'http://localhost:50077/api/v1/tasks'

You can submit tasks at super high rates to pingwing since the ingestion and processing are done completely separately. This ensures that we can do a reliable retry mechanism and can handle high volumes of data.

After the task has submitted and picked up by the worker, a message like this will be produced:

MIME-Version: 1.0
Subject: WikiMusic - Password Reset 998c42eb-7472-4e12-aa5a-ffdbe754b430
From: No Reply - WikiMusic <[email protected]>
To: Josep Bigorra <[email protected]>
Content-Type: multipart/alternative; boundary="pingwing-message-multipart-boundary-33c2b557-7f27-4339-9a85-2385e7ecde9b"

--pingwing-message-multipart-boundary-33c2b557-7f27-4339-9a85-2385e7ecde9b
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Reset your password: 
We have received a request to reset the password for your user account:
User.............

--pingwing-message-multipart-boundary-33c2b557-7f27-4339-9a85-2385e7ecde9b
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" />..............

--pingwing-message-multipart-boundary-33c2b557-7f27-4339-9a85-2385e7ecde9b--

Send mail message via SMTP with curl And the worker will pick it up and send it (programatically for you):

>>= sending mail to email-smtp.eu-west-3.amazonaws.com

curl --verbose --ssl-reqd --url smtp://email-smtp.eu-west-3.amazonaws.com:587 --user "AK*****:*************" --mail-from '[email protected]' --mail-rcpt '[email protected]' --mail-rcpt-allowfails --upload-file tmp/998c42eb-7472-4e12-aa5a-ffdbe754b430-noreply@[email protected]

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Host email-smtp.eu-west-3.amazonaws.com:587 was resolved.
 IPv6: (none)
 IPv4: 15.236.217.177, 15.236.68.209, 15.237.2.166
   Trying 15.236.217.177:587...
 Connected to email-smtp.eu-west-3.amazonaws.com (15.236.217.177) port 587
< 220 email-smtp.amazonaws.com ESMTP SimpleEmailService-d-I
> EHLO 998c42eb-7472-4e12-aa5a-ffdbe754b430-noreply@[email protected]
< 250-email-smtp.amazonaws.com
< 250-8BITMIME
< 250-STARTTLS
< 250-AUTH PLAIN LOGIN
< 250 Ok
> STARTTLS
< 220 Ready to start TLS
.........................
< 235 Authentication successful.
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0> MAIL FROM:<[email protected]>
< 250 Ok
> RCPT TO:<[email protected]>
< 250 Ok
> DATA
< 354 End data with <CR><LF>.<CR><LF>q
} [3028 bytes data]
 We are completely uploaded and fine
< 250 Ok 011301968c239ad5-72018cb8-ab51-42dd-8ea6-fd6395124272-000000
100  3028    0     0  100  3028      0   5653 --:--:-- --:--:-- --:--:--  5649
 Connection #0 to host email-smtp.eu-west-3.amazonaws.com left intact`___`

example of how simple a template definition can be:

;;; pingwing -- the free and open Lisp-powered notification nexus

;; Copyright © Josep Bigorra <[email protected]>

;; pingwing is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.

;; pingwing is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with pingwing.  If not, see <https://www.gnu.org/licenses/>.

(define-module (pingwing templates system-alert)
  #:use-module (ice-9 time)
  #:use-module (ice-9 format)
  #:use-module (ice-9 rdelim)
  #:use-module (ice-9 textual-ports)
  #:use-module (ice-9 regex)
  #:use-module (srfi srfi-1)
  #:use-module (srfi srfi-64)
  #:use-module (pingwing css)
  #:use-module (pingwing html)
  #:use-module (ice-9 string-fun)
  #:use-module (sxml simple)
  #:use-module (ice-9 iconv))

(begin
  (define* (system-alert-html-template #:key system-name alert-value)
    (let* (
           (tree `((html (head ,meta-charset
                               ,meta-ie
                               ,meta-responsive
                               ,meta-color-scheme
                               ,meta-supported-color-schemes
                               (title ,(gettext "System Alert"))
                               (style ,mail-style))
                         (body (h1 (span ,(gettext
                                           "System Alert: "))
                                   (span ,system-name))
                               (p ,(gettext
                                    "An alert has been triggered from your system"))
                               (hr (@ (style ,(->style '((margin-top . "1.4em") (margin-bottom . "1.4em"))))))
                               (p ,alert-value)
                               ,mail-footer)))))
      (with-output-to-string (lambda ()
                               (sxml->xml tree)))))
  (export system-alert-html-template))

(begin
  (define* (system-alert-plain-template #:key system-name alert-value)
    (let* ((content (list (gettext "System Alert")
                          (gettext
                           "An alert has been triggered from your system:")
                          system-name
                          "----------------------------------"
                          alert-value
                          "----------------------------------"
                          (gettext
                           "this e-mail was powered by pingwing - the free and open Lisp-powered notification nexus")
                          "https://codeberg.org/jjba23/pingwing"
                          (gettext "see pingwing's source code on Codeberg"))))
      (string-join content "\n")))
  (export system-alert-plain-template))
3
1
PeerTube v6.3 released! (joinpeertube.org)
submitted 9 months ago by [email protected] to c/[email protected]

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

cross-posted from: https://lemmy.world/post/19900393

PeerTube is a decentralized and federated alternative to YouTube. The goal of PeerTube is not to replace YouTube but to offer a viable alternative using the strength of ActivityPub and P2P protocols.

Being built on ActivityPub means PeerTube is able to be part of a bigger social network, the Fediverse (the Federated Universe). On the other hand, P2P technologies help PeerTube to solve the issue of money, inbound with all streaming platform : With PeerTube, you don't need to have a lot of bandwidth available on your server to host a PeerTube platform because all users (which didn't disable the feature) watching a video on PeerTube will be able to share this same video to other viewers.

If you are curious about PeerTube, I can't recommend you enough to check the official website to learn more about the project. If after that you want to try to use PeerTube as a content creator, you can try to find a platform available there to register or host yourself your own PeerTube platform on your own server.

The development of PeerTube is actually sponsored by Framasoft, a french non-for-profit popular educational organization, a group of friends convinced that an emancipating digital world is possible, convinced that it will arise through actual actions on real world and online with and for you!

Framasoft is also involved in the development of Mobilizon, a decentralized and federated alternative to Facebook Events and Meetup.

If you want to contribute to PeerTube, feel free to:

4
1
submitted 1 year ago by [email protected] to c/[email protected]
5
1
Kanipaan Loves GNU (kanipaan.codeberg.page)
submitted 1 year ago by [email protected] to c/[email protected]
6
1
submitted 2 years ago by [email protected] to c/[email protected]

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

Forty years ago, Richard Stallman announced the plan to develop the GNU operating system, which would be entirely composed of free software. The existence of a free operating system would enable people to operate their computers in freedom, throwing off the power of the developers of nonfree software. The GNU Project has also built the global free software movement.

7
1
submitted 2 years ago by [email protected] to c/[email protected]
8
1
submitted 2 years ago by [email protected] to c/[email protected]

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

Education technology, or EdTech, is increasingly shaping and influencing the day-to-day experiences of students, teachers, and administrators. Recognizing the importance of education to the digital economy, corporations are capturing emerging markets in schools and higher education institutions through the process of digital colonialism.

9
1
submitted 2 years ago by [email protected] to c/[email protected]

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

Richard Stallman was right since the very beginning. Every warning, every prophecy realised. And, worst of all, he had the solution since the start. The problem is not Richard Stallman or the Free Software Foundation. The problem is us. The problem is that we didn’t listen.

10
1
submitted 2 years ago by [email protected] to c/[email protected]

The European Parliament today voted in favour of the AI Act with 499 votes in favour, 28 against, and 93 abstentions. Free Software is given safeguards, these rules must now be defended in the trilogue and transferred to the Cyber Resilience Act and the Product Liability Directive.

11
1
submitted 2 years ago* (last edited 2 years ago) by [email protected] to c/[email protected]

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

Today, we are taking the first step in building out an initiative to create opportunities for people to help build the Fediverse and create an organizational structure which can allow developers to coordinate their efforts where most needed.

We call upon anyone with both the skills and motivation to join us and the Guild we are starting, Guild Alpha. Read the announcement linked to learn more and find out how you can participate!

If anything discussed here has your interest or you want to help grow free-software and the Fediverse, fill out this form to let us know!

12
1
zrythm audio production (www.zrythm.org)
submitted 3 years ago by [email protected] to c/[email protected]

https://git.zrythm.org/zrythm/zrythm

free open source audio production

13
1
submitted 3 years ago by [email protected] to c/[email protected]

I wrote, composed, and recorded my own song, then I turned it into karaoke! And I did it all using Free Software apps. Here's how I did it.

14
1
submitted 4 years ago by [email protected] to c/[email protected]
15
1
submitted 4 years ago by [email protected] to c/[email protected]

Currency strength meter is a way to represent the relative strength of each currency graphically. The indicator shows which currencies are strong and which are weak.

16
1
submitted 4 years ago* (last edited 4 years ago) by [email protected] to c/[email protected]

While our primary mission is freedom for software users, we want to be clear, the FSF board unanimously condemns misogyny, racism,and other bigotry as well as defamation, intimidation, and unfair attacks on free thought and speech.

17
1
submitted 4 years ago by [email protected] to c/[email protected]

we are on the 2d room "LibreAdventure"

18
1
submitted 4 years ago by [email protected] to c/[email protected]
19
1
Why MuWire (muwire.com)
submitted 4 years ago by [email protected] to c/[email protected]

Previously posted on Reddit by the owner of MuWire. Source

I wrote a short piece on why MuWire is needed and why I'm working on it. It is available here

Some of the features mentioned (like messaging) are not released yet, but will be very soon. (Now available from v0.8.3)

About MuWire MuWire is a file publishing and networking tool that protects the identity of its users by using I2P technology. Anyone with a desktop computer and an internet connection can create a unique anonymous online persona and publish information of any kind without fear of censorship or persecution.

Users can then use their MuWire identities to publish files, search for files published by others, subscribe to each other’s publications and communicate through chat and messaging. Furthermore, users can establish trust-based relationship with each other where they assign a “trust level” to their contacts.

Example use case An example use case is that of Alice, a whistle-blower that wishes to remain anonymous in order to publish sensitive material on an ongoing basis. She creates a MuWire identity (which cannot in any way be linked to her real-world identity) and uses it to distribute information. Alice adds the files containing the sensitive material to her MuWire library and leaves MuWire running.

Bob is a journalist who does not know anything about Alice, but is interested in the type of material she publishes. Furthermore, Bob doesn’t want Alice to know his real-world identity either. He creates a MuWire identity and uses MuWire to search for relevant keywords. Alice’s MuWire node receives those queries and responds with results automatically. Bob then downloads the material from Alice’s MuWire node and verifies that it is genuine and of interest to him. Alice publishes regularly, so Bob subscribes to her publication feed and his MuWire node fetches automatically everything that Alice has made public. MuWire also offers mailbox messaging and chat functionality, so Bob can ask Alice for specific material and even have a real-time chat with her.

The relationship between Alice and Bob is completely anonymous and neither party can learn more about the other without consent.

Behind the scenes MuWire uses the I2P network which is known to work even during the strictest internet clampdowns in countries like China and Iran. The technology provides protection against Deep Packet Inspection firewalls and other tools used by state surveillance. From an outside observer the traffic that MuWire/I2P generates is indistinguishable from random static.

Motivation My motivation for creating MuWire is to enable every human being to share information without fear. MuWire is just a tool, use it for good!

20
1
submitted 4 years ago by [email protected] to c/[email protected]

MuWire is an easy to use file-sharing program which offers anonymity using I2P technology. It works on any platform Java works on, including Windows, MacOS, Linux, Rapsberry Pi.

The current stable release - 0.7.7 is available for download at https://muwire.com/. The latest plugin build and instructions how to install the plugin are available inside I2P at http://muwire.i2p.

You can chat with other MuWire users anonymously through the MuWire chat system. It is very similar to IRC.

Free Software

397 readers
8 users here now

founded 4 years ago
MODERATORS