Skip Navigation
Heavy Music @lemmy.ml jjba23 @lemmy.ml
A Fine Day to Die cover - tribute to Bathory - by Joe (jjba23)

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

> My tribute to this great pioneering Swedish black metal and viking metal band. My interpretation of "A Fine Day to Die" by Bathory. This song is from the album "Blood Fire Death". > > I play acoustic and electric guitar in several tracks, and accompanying vocals (I suck at singing haha). > > Copyright © 1988 Bathory - All rights Reserved

0
A Fine Day to Die cover - tribute to Bathory - by Joe (jjba23)

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

> My tribute to this great pioneering Swedish black metal and viking metal band. My interpretation of "A Fine Day to Die" by Bathory. This song is from the album "Blood Fire Death". > > I play acoustic and electric guitar in several tracks, and accompanying vocals (I suck at singing haha). > > Copyright © 1988 Bathory - All rights Reserved

0
A Fine Day to Die cover - tribute to Bathory - by Joe (jjba23)

My tribute to this great pioneering Swedish black metal and viking metal band. My interpretation of "A Fine Day to Die" by Bathory. This song is from the album "Blood Fire Death".

I play acoustic and electric guitar in several tracks, and accompanying vocals (I suck at singing haha).

Copyright © 1988 Bathory - All rights Reserved

0
You Can Choose Tools That Make You Happy
  • I find it funny that you call Lisps and Emacs obsolete and dead, when they are more alive than ever. I agree with most of the article, but I think you ignore what makes these two great

  • SSS (Supreme Sexp System) v2.3.24 - Friday vibes rocking Emacs, working on some Guile Scheme code, other Lisps, and overall having fun and enjoying this featureful system on Guix
  • no question is a bad question friend! a lot of people like me, and other power users, have keyboard driven workflows in their computer, and as such find title bars and window buttons to be of little use, and not justifying the screen space they take. This is mostly a window manager (WM)/ desktop environment (DE) dependent thing, regardless of distro. this is specially true when you have a tiling WM, like Hyprland.

  • Free Software @lemmy.ml jjba23 @lemmy.ml
    ggg: Guile Glypg Gen - create nice project markdown/org badges

    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.

    0
    ggg: Guile Glypg Gen - create nice project markdown/org badges

    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.

    0
    ggg: Guile Glypg Gen - create nice project markdown/org badges

    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.

    0
    Guix @lemmy.ml jjba23 @lemmy.ml
    ggg: Guile Glypg Gen - create nice project markdown/org badges

    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.

    0
    ggg: Guile Glypg Gen - create nice project markdown/org badges

    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.

    0
    SSS (Supreme Sexp System) v2.3.24 - Friday vibes rocking Emacs, working on some Guile Scheme code, other Lisps, and overall having fun and enjoying this featureful rice on Guix

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

    > SSS is a Lisp machine adventure, where the hacking culture is celebrated. Let me help you achieve GNUrvana. > > https://codeberg.org/jjba23/sss > > You can follow the project on Codeberg, or on the fediverse at Mastodon: https://mastodon.social/@sss_project > > This custom GNU + Linux setup enhances customization to infinity, encourages the hacking spirit, and offers a superior user experience thanks in part too to REPL (Read Eval Print Loop) and Lisps. > > SSS strives to have all things configured via Lisp dialects when possible and convenient, staying accessible to all kinds of users, and allowing for magical things to happen 🪄.

    0
    Unixporn @lemmy.ml jjba23 @lemmy.ml
    SSS (Supreme Sexp System) v2.3.24 - Friday vibes rocking Emacs, working on some Guile Scheme code, other Lisps, and overall having fun and enjoying this featureful system on Guix

    SSS is a Lisp machine adventure, where the hacking culture is celebrated. Let me help you achieve GNUrvana.

    https://codeberg.org/jjba23/sss

    You can follow the project on Codeberg, or on the fediverse at Mastodon: https://mastodon.social/@sss_project

    This custom GNU + Linux setup enhances customization to infinity, encourages the hacking spirit, and offers a superior user experience thanks in part too to REPL (Read Eval Print Loop) and Lisps.

    SSS strives to have all things configured via Lisp dialects when possible and convenient, staying accessible to all kinds of users, and allowing for magical things to happen 🪄.

    4
    LucidPlan - FOSS Jira alternative - v0.4.0 - powered by Lisp (Guile Scheme and SXML) - free project management for everyone
  • There are many reasons why a Lisp is a great fit for most software. More specifically, websites are tree like data structures, and you really can't beat Lisps at that, due to homoiconicity and so much more. some thoughts here:

    https://jointhefreeworld.org/blog/articles/lisps/why-i-program-in-lisp/index.html

  • Guix @lemmy.ml jjba23 @lemmy.ml
    LucidPlan - FOSS Jira alternative - v0.4.0 - powered by Lisp (Guile Scheme and SXML) - free project management for everyone

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

    > LucidPlan proudly announces version v0.4.0 of the project: > > https://codeberg.org/jjba23/lucidplan > > #foss #project #management for everyone ( #selfhosting ) > > work more #agile in your team thanks to a fast-paced no-nonsense-workflow and customizability, also thanks to being written in #lisp ( #guile #scheme ) and using #guix > > This tool results of years of experience using proprietary systems like Jira/Trello, and experiencing the frustrations they bring. > > find my live instance here: > > https://lucidplan.jointhefreeworld.org/tickets/sss

    0
    LucidPlan - FOSS Jira alternative - v0.4.0 - powered by Lisp (Guile Scheme and SXML) - free project management for everyone

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

    > LucidPlan proudly announces version v0.4.0 of the project: > > https://codeberg.org/jjba23/lucidplan > > #foss #project #management for everyone ( #selfhosting ) > > work more #agile in your team thanks to a fast-paced no-nonsense-workflow and customizability, also thanks to being written in #lisp ( #guile #scheme ) and using #guix > > This tool results of years of experience using proprietary systems like Jira/Trello, and experiencing the frustrations they bring. > > find my live instance here: > > https://lucidplan.jointhefreeworld.org/tickets/sss

    0
    LucidPlan - FOSS Jira alternative - v0.4.0 - powered by Lisp (Guile Scheme and SXML) - free project management for everyone

    als kruis­bericht geplaatst vanaf: https://lemmy.ml/post/29897788

    > LucidPlan proudly announces version v0.4.0 of the project: > > https://codeberg.org/jjba23/lucidplan > > #foss #project #management for everyone ( #selfhosting ) > > work more #agile in your team thanks to a fast-paced no-nonsense-workflow and customizability, also thanks to being written in #lisp ( #guile #scheme ) and using #guix > > This tool results of years of experience using proprietary systems like Jira/Trello, and experiencing the frustrations they bring. > > find my live instance here: > > https://lucidplan.jointhefreeworld.org/tickets/sss

    0
    LucidPlan - FOSS Jira alternative - v0.4.0 - powered by Lisp (Guile Scheme and SXML) - free project management for everyone

    LucidPlan proudly announces version v0.4.0 of the project:

    https://codeberg.org/jjba23/lucidplan

    #foss #project #management for everyone ( #selfhosting )

    work more #agile in your team thanks to a fast-paced no-nonsense-workflow and customizability, also thanks to being written in #lisp ( #guile #scheme ) and using #guix

    This tool results of years of experience using proprietary systems like Jira/Trello, and experiencing the frustrations they bring.

    find my live instance here:

    https://lucidplan.jointhefreeworld.org/tickets/sss

    2
    Supreme Sexp System v2.3.15 (SSS) - SSS is a Lisp machine adventure with GNU/Linux, Guix, Emacs, Hyprland, Waybar and much more
    mastodon.social Supreme Sexp System (SSS) (@sss_project@mastodon.social)

    Attached: 4 images SSS 🐂 (The Supreme Sexp System) proudly announces version v2.3.15 of the project: https://codeberg.org/jjba23/sss SSS is a Lisp machine adventure with #gnu #linux, #guix where the #hacking culture is celebrated. We now have a start in a declarative #firefox configuration wri...

    Supreme Sexp System (SSS) (@sss_project@mastodon.social)
    1
    Unixporn @lemmy.ml jjba23 @lemmy.ml
    Supreme Sexp System v2.3.15 (SSS) - SSS is a Lisp machine adventure with GNU/Linux, Guix, Emacs, Hyprland, Waybar and much more
    mastodon.social Supreme Sexp System (SSS) (@sss_project@mastodon.social)

    Attached: 4 images SSS 🐂 (The Supreme Sexp System) proudly announces version v2.3.15 of the project: https://codeberg.org/jjba23/sss SSS is a Lisp machine adventure with #gnu #linux, #guix where the #hacking culture is celebrated. We now have a start in a declarative #firefox configuration wri...

    Supreme Sexp System (SSS) (@sss_project@mastodon.social)
    0
    pingwing: v0.0.13: A Lisp-powered notification nexus (Guile Scheme) - Programatically send e-mail with HTML (SXML) templates, (and more things coming soon)
  • v0.0.14 now uses libcurl and works nicely :)

             (file-port (open-input-file the-file))
             (handle (curl-easy-init))
             (_ (begin
                  (curl-easy-setopt handle
                                    'url
                                    (format #f "smtp://~a:~a" access-server
                                            access-port))
                  (curl-easy-setopt handle
                                    'verbose #t)
                  (curl-easy-setopt handle
                                    'use-ssl 1)
                  (curl-easy-setopt handle
                                    'username access-key)
                  (curl-easy-setopt handle
                                    'password access-secret)
                  (curl-easy-setopt handle
                                    'mail-from from-address)
                  (curl-easy-setopt handle
                                    'mail-rcpt
                                    (list to-address))
                  (curl-easy-setopt handle
                                    'readdata file-port)
                  (curl-easy-setopt handle
                                    'upload #t)))
             (r (curl-easy-perform handle #t))
             (rr (catch #t
                        (lambda ()
                          (bytevector->string r "utf-8"))
                        (lambda (key . args)
                          r))))
    
  • pingwing: v0.0.13: A Lisp-powered notification nexus (Guile Scheme) - Programatically send e-mail with HTML (SXML) templates, (and more things coming soon)
  • i understand the mixed feelings about AI, but I think we should stop and think that we sometimes have nice and fun use cases, like image generation

  • pingwing: v0.0.13: A Lisp-powered notification nexus (Guile Scheme) - Programatically send e-mail with HTML (SXML) templates, (and more things coming soon)
  • Sorry you feel this way ! my code is completely artisanal you might say, I only use AI for code comments and docstrings that is all. in that regard it is useful as a tool. i understand the world has now very mixed feelings about it, but it's just another tool for us digital carpenters.

  • Guix @lemmy.ml jjba23 @lemmy.ml
    pingwing: v0.0.13: A Lisp-powered notification nexus (Guile Scheme) - Programatically send e-mail with HTML (SXML) templates, (and more things coming soon)

    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": "jjbigorra@gmail.com", > "reset-link": "https://gnu.org/" > }, > "sender-name": "No Reply - WikiMusic", > "sender-address": "noreply@wikimusic.jointhefreeworld.org", > "subject": "Wikimusic - Password Reset", > "recipients": [ > {"name": "Josep Bigorra", "address": "jjbigorra@gmail.com"}, > {"name": "Another Person", "address": "jjbigorra+1@gmail.com"} > ] > }' \ > '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 <noreply@wikimusic.jointhefreeworld.org> > To: Josep Bigorra <jjbigorra@gmail.com> > 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 'noreply@wikimusic.jointhefreeworld.org' --mail-rcpt 'jjbigorra@gmail.com' --mail-rcpt-allowfails --upload-file tmp/998c42eb-7472-4e12-aa5a-ffdbe754b430-noreply@wikimusic.jointhefreeworld.org-jjbigorra@gmail.com > > % 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@wikimusic.jointhefreeworld.org-jjbigorra@gmail.com > < 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:<noreply@wikimusic.jointhefreeworld.org> > < 250 Ok > > RCPT TO:<jjbigorra@gmail.com> > < 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 <jjbigorra@gmail.com> > > ;; 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)) >

    0
    Free Software @lemmy.ml jjba23 @lemmy.ml
    pingwing: v0.0.13: A Lisp-powered notification nexus (Guile Scheme) - Programatically send e-mail with HTML (SXML) templates, (and more things coming soon)

    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": "jjbigorra@gmail.com", > "reset-link": "https://gnu.org/" > }, > "sender-name": "No Reply - WikiMusic", > "sender-address": "noreply@wikimusic.jointhefreeworld.org", > "subject": "Wikimusic - Password Reset", > "recipients": [ > {"name": "Josep Bigorra", "address": "jjbigorra@gmail.com"}, > {"name": "Another Person", "address": "jjbigorra+1@gmail.com"} > ] > }' \ > '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 <noreply@wikimusic.jointhefreeworld.org> > To: Josep Bigorra <jjbigorra@gmail.com> > 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 'noreply@wikimusic.jointhefreeworld.org' --mail-rcpt 'jjbigorra@gmail.com' --mail-rcpt-allowfails --upload-file tmp/998c42eb-7472-4e12-aa5a-ffdbe754b430-noreply@wikimusic.jointhefreeworld.org-jjbigorra@gmail.com > > % 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@wikimusic.jointhefreeworld.org-jjbigorra@gmail.com > < 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:<noreply@wikimusic.jointhefreeworld.org> > < 250 Ok > > RCPT TO:<jjbigorra@gmail.com> > < 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 <jjbigorra@gmail.com> > > ;; 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)) >

    0
    pingwing: v0.0.13: A Lisp-powered notification nexus (Guile Scheme) - Programatically send e-mail with HTML (SXML) templates, (and more things coming soon)

    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": "jjbigorra@gmail.com", > "reset-link": "https://gnu.org/" > }, > "sender-name": "No Reply - WikiMusic", > "sender-address": "noreply@wikimusic.jointhefreeworld.org", > "subject": "Wikimusic - Password Reset", > "recipients": [ > {"name": "Josep Bigorra", "address": "jjbigorra@gmail.com"}, > {"name": "Another Person", "address": "jjbigorra+1@gmail.com"} > ] > }' \ > '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 <noreply@wikimusic.jointhefreeworld.org> > To: Josep Bigorra <jjbigorra@gmail.com> > 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 'noreply@wikimusic.jointhefreeworld.org' --mail-rcpt 'jjbigorra@gmail.com' --mail-rcpt-allowfails --upload-file tmp/998c42eb-7472-4e12-aa5a-ffdbe754b430-noreply@wikimusic.jointhefreeworld.org-jjbigorra@gmail.com > > % 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@wikimusic.jointhefreeworld.org-jjbigorra@gmail.com > < 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:<noreply@wikimusic.jointhefreeworld.org> > < 250 Ok > > RCPT TO:<jjbigorra@gmail.com> > < 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 <jjbigorra@gmail.com> > > ;; 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)) >

    0
    A community for the lovers of the scheme programming languages @lemmy.ml jjba23 @lemmy.ml
    pingwing: v0.0.13: A Lisp-powered notification nexus (Guile Scheme) - Programatically send e-mail with HTML (SXML) templates, (and more things coming soon)

    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": "jjbigorra@gmail.com", > "reset-link": "https://gnu.org/" > }, > "sender-name": "No Reply - WikiMusic", > "sender-address": "noreply@wikimusic.jointhefreeworld.org", > "subject": "Wikimusic - Password Reset", > "recipients": [ > {"name": "Josep Bigorra", "address": "jjbigorra@gmail.com"}, > {"name": "Another Person", "address": "jjbigorra+1@gmail.com"} > ] > }' \ > '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 <noreply@wikimusic.jointhefreeworld.org> > To: Josep Bigorra <jjbigorra@gmail.com> > 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 'noreply@wikimusic.jointhefreeworld.org' --mail-rcpt 'jjbigorra@gmail.com' --mail-rcpt-allowfails --upload-file tmp/998c42eb-7472-4e12-aa5a-ffdbe754b430-noreply@wikimusic.jointhefreeworld.org-jjbigorra@gmail.com > > % 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@wikimusic.jointhefreeworld.org-jjbigorra@gmail.com > < 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:<noreply@wikimusic.jointhefreeworld.org> > < 250 Ok > > RCPT TO:<jjbigorra@gmail.com> > < 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 <jjbigorra@gmail.com> > > ;; 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)) >

    0
    Wikimusic v0.1.6 release - the free music encyclopaedia
  • it's quite a good idea actually to have inter-instance communication! i will have to put more thought into it, but definitely added to the TODOs

  • Wikimusic v0.1.6 release - the free music encyclopaedia
  • the like system is a sort of trust score, kinda like stars in ultimate guitar, so the community can downvote entries and that will help filter out bad content

  • Wikimusic v0.1.6 release - the free music encyclopaedia
  • I think it is certainly possible to do , but I think it is not really something interesting for most people. I therefore think that it is easier to handle it all on wikimusic side, also considering permissions and content per instance, etc

  • Wikimusic v0.1.6 release - the free music encyclopaedia
  • Hey thanks for the comment @turbowafflz@lemmy.world ! Wikimusic aims to provide "musical knowledge" not only metadata (but also). This means tabs, music sheet, etc. It also aims to be a self-hosted tool, that anyone can have their own instance of.

  • Sayonara, Reddit!
  • i am in the same boat, also got banned without apparent reason, think i commented too quick.. have heard nothing back from my appeals so i will soon also delete my Reddit, viva the free fediverse

  • jjba23 jjba23 @lemmy.ml
    Posts 28
    Comments 12