This is why I love linux
  • "Initials" by "Florian Körner", licensed under "CC0 1.0". / Remix of the original. - Created with dicebear.comInitialsFlorian Körnerhttps://github.com/dicebear/dicebearN0
    N0x0n
    7h ago 100%

    I had a similar experience with a "wow the Linux community is beautiful" feeling after booting into Debian on an old rockchip CPU TV box !

    Have a look at the armbian community. Those guys are on another level 😁.


    Edit

    To my surprise, I even discovered that you can boot Armbian on these inexpensive boxes and use them as a lightweight desktop

    Oupsi ! It's late here so I didn't read till the end ! Sorry about that 😅

    17
  • Linux and your family
  • "Initials" by "Florian Körner", licensed under "CC0 1.0". / Remix of the original. - Created with dicebear.comInitialsFlorian Körnerhttps://github.com/dicebear/dicebearN0
    N0x0n
    23h ago 100%

    Haha, dunno about Garuda, but EndeavourOS is a tad difficult if you never used any Linux based distro before ! Granted it's easier to setup and maintain than Arch, but still...

    This reminds me of how in the past the swimming instructor just throw you in the pool even If you can't swim... Some learned the hard way others were traumatized for life.

    1
  • BlockTheSpot compromised or false positive?
  • "Initials" by "Florian Körner", licensed under "CC0 1.0". / Remix of the original. - Created with dicebear.comInitialsFlorian Körnerhttps://github.com/dicebear/dicebearN0
    N0x0n
    1d ago 50%

    Not the whole code but only the part that triggers those flags. Not everyone is versed in C to "verify the code" himself... That's a stupid take, It's like saying to a toddler to change his diapers on his own when it's dirty.

    Strangely enough It went from 1 trigger to 29 triggers after 1 update? Seems rather sketchy :/ In the past (pirated games/software) I would have ignored those warnings and add an exception into my firewall... But nowadays with all the crypto schemes and obfuscated code, I won't go near anything like that.

    0
  • How to install up-to-date python for a user only?
  • "Initials" by "Florian Körner", licensed under "CC0 1.0". / Remix of the original. - Created with dicebear.comInitialsFlorian Körnerhttps://github.com/dicebear/dicebearN0
    N0x0n
    2d ago 100%

    I Gave it a try on macOS a few days ago because brew and python is a dependencie hell and way to much workarounds to make some scripts to work properly when specific versions of packages are needed...

    Miniconda actually made it work fine, without to much hassle. I'm kinda impressed.

    3
  • Is this true about Generation gap in Piracy?
  • "Initials" by "Florian Körner", licensed under "CC0 1.0". / Remix of the original. - Created with dicebear.comInitialsFlorian Körnerhttps://github.com/dicebear/dicebearN0
    N0x0n
    2d ago 100%

    VLC is still the best media player... But only on Windows systems. When I switched from Win->Linux I had to relearn a lot of new things that were common knowledge on Windows but work differently on Linux.

    Specially Win11... Eewww !

    2
  • Does anybody here still wish the Fediverse just had more people?
  • "Initials" by "Florian Körner", licensed under "CC0 1.0". / Remix of the original. - Created with dicebear.comInitialsFlorian Körnerhttps://github.com/dicebear/dicebearN0
    N0x0n
    5d ago 100%

    Yeah and it depends. The fact that there is no easy way to search the fedi for similar posts right now is a bit cumbersome for sure.

    I see a lot of new users post something that has already been answered a 10000x times (What's the best Linux distro? It depends !) And luckily there's always someone to give a mature and comprehensive answer to a new comer without scaring him or down voting him to oblivion. This shows that there are a lot of people who believe in Lemmy and are ready to repeat themselves to keep Lemmy alive and give new comers a warmly welcome ! However I have only seen that kind of interaction in the Linux/self-hosted communities... Most memes/ask Lemmy/political views/... Communities seems rather hostile on their own opinions and quickly become a cesspool of anger and hate :/.

    Also a lot of people think because some communities have a lower user base they won't get any answer or interaction I was quite surprised to get a comprehensive answer and help in the bash@lemmy.ml community which has only 50 users/month !

    5
  • Tanks in advance
  • "Initials" by "Florian Körner", licensed under "CC0 1.0". / Remix of the original. - Created with dicebear.comInitialsFlorian Körnerhttps://github.com/dicebear/dicebearN0
    N0x0n
    6d ago 58%

    I heard that after this scene he just disappeared and was never found?

    If I'm right it was the population who fraught back their oppressive regime but I can't remember exactly when or where (if someone could give me some Info's here?)

    It was a very very hard time for this country and this image was and IS a symbol for freedom.

    If any historian could chime in :)

    3
  • [Question] Best way to access Jellyfin remotely on linux + docker + vpn?
  • "Initials" by "Florian Körner", licensed under "CC0 1.0". / Remix of the original. - Created with dicebear.comInitialsFlorian Körnerhttps://github.com/dicebear/dicebearN0
    N0x0n
    7d ago 100%

    Hi there ! Sorry my English is not that good, but I'm doing the best I can !

    Actually, I do not have a VPS. I use an old spare laptop as server which handles everything.

    I have Wireguard barebone installed with a a second external wireguard interface and some iptables to send all traffic to ProtonVPN.

    All my containers,on the same laptop, are directly reachable via this configuration and HTTPS is handle by Treafik with my self-signed local certificates (root CA with intermediate CA).

    Eg: From my mobile over WiFi or 4G I can access all my containers where ever I'm. My endpoint in my Wireguard's confirguration (on my phone) being my home's public IP.

    I hope I answered your question? If not I'm willing to give you a diagram of my setup, this will probably clear up the confusion/question? And will probably be way more explicit than my broken English 😄.

    1
  • A fever is your body heating to fight a disease, why do we lower it down with paracetamol?
  • "Initials" by "Florian Körner", licensed under "CC0 1.0". / Remix of the original. - Created with dicebear.comInitialsFlorian Körnerhttps://github.com/dicebear/dicebearN0
    N0x0n
    1w ago 100%

    I heard everything and it's contrary. But that's more of a how many times/week you do it thing IMO.

    I'm not a doctor or any specialist but rather on the safe side of things. It's the dose that makes the difference. If you drink 5 liters of water in less than 1 min, it will probably kill you... But that doesn't stop me drinking water every day.

    And yes I can imagine all Nordic people doing it like 5 time a week? Is probably way to much... It also depends on other factors (genetics?).

    Just my 2cent, don't take it for granted.

    2
  • [Question] Best way to access Jellyfin remotely on linux + docker + vpn?
  • "Initials" by "Florian Körner", licensed under "CC0 1.0". / Remix of the original. - Created with dicebear.comInitialsFlorian Körnerhttps://github.com/dicebear/dicebearN0
    N0x0n
    1w ago 100%

    Probably what you're looking for is the following setup:

    docker <-> services <-> reverse proxy <-> VPN <-> Internet

    1. Your next step is to chose a reverse proxy to handle your requests and serve your services on port 80 and port 443. There are several choice and you have to somehow stick with it, because each reverse proxy has it's up and downsides and learning curve:
    • Treafik (that's the one I use and is specifically made for containers)
    • Caddy (Never used it but heard only good things about it)
    • Nginx (this one is a beast to tame, however I heard it's easier to setup with nginx proxy manager)

    Those are the 3 big players I'm aware of.

    1. You reverse proxy ready and functional you need something to access them outside your LAN. There are also several ways to achieve the same goal. The one I use and are happy with is to configure Wireguard on your server and only open the port needed to connect to it.

    This is also a big part and probably this is the route of a tinkerer and have lot of personal time to spare... There are easier AIO routes that will probably save you time and energy. (Others will point you to the right direction)

    1. Bonus tip

    You will rapidly understand the necessity of DNS. Reaching out to your services by IP:PORT will annoy you over time, even if you save them as bookmarks. Also if you don't assign a static IP to your containers they will change every time you restart them or reboot your server. Not very practical !!

    Here you have 2 choices:

    • personal mini certificate authority (totally free and personal local domains but harder to setup)
    • cheap domain name with automatic certificate generation.

    I personally chose the tinkerer route and learning process. But I have time to spare and while I prefer this route... It's very time consuming and involves a lot of web crawling and books reading.

    If you are interested I can recommend you a good ebook on how to setup your own mini-CA :).


    Hope it helps, you are halfway through !

    6
  • A fever is your body heating to fight a disease, why do we lower it down with paracetamol?
  • "Initials" by "Florian Körner", licensed under "CC0 1.0". / Remix of the original. - Created with dicebear.comInitialsFlorian Körnerhttps://github.com/dicebear/dicebearN0
    N0x0n
    1w ago 94%

    That's what a sauna is about !

    A 20min session (10min/1min pause/10min) and jumping in cold water will give you a dizziness state, lay down and enjoy !

    You will feel refreshed, new-born, all negativity drown away, no-invasive thoughts of your subconscious... Just a climax-feeling of peacefulness ! (Until you're back to you 10-17 routine...)

    Sauna sessions are awsome !

    15
  • AdGuard Home Docker & TLS certificates
  • "Initials" by "Florian Körner", licensed under "CC0 1.0". / Remix of the original. - Created with dicebear.comInitialsFlorian Körnerhttps://github.com/dicebear/dicebearN0
    N0x0n
    2w ago 100%

    Trying to add a direct path to files doesn't work.

    Dunno what's wrong here, but I do add a files direct path to /etc/ssl into a docker container and works as expected.

    I think It's related to miniflux and have my self-signed certificate in its truststore to communicate with wallabag (inter-docker communication).

    I can't give you a snipped of my compose but will gladly edited my comment when home.

    1
  • Findroid is a native android jellyfin client.
  • "Initials" by "Florian Körner", licensed under "CC0 1.0". / Remix of the original. - Created with dicebear.comInitialsFlorian Körnerhttps://github.com/dicebear/dicebearN0
    N0x0n
    2w ago 100%

    I have no idea what streamlabs or Android TV boxes uses as backend player, but after a lot of debugging MPV solved all my subtitles issues on mobile (android) and desktop (Linux).

    It made me kinda sad because VLC was the defacto application I installed on Windows for years !! But since I'm on Linux, MPV is the new standard in my default applications.

    Maybe have a look if you can change the default player?

    1
  • Findroid is a native android jellyfin client.
  • "Initials" by "Florian Körner", licensed under "CC0 1.0". / Remix of the original. - Created with dicebear.comInitialsFlorian Körnerhttps://github.com/dicebear/dicebearN0
    N0x0n
    2w ago 100%

    Haha I'm to late :( Not available anymore. You sure it isn't about the external player used by jellyfin on mobile?

    Cauz' I remember I had issues with .ASS subtitles only on mobile when VLC was used as external player.

    1
  • Hi everyone ! ### Intro Was a long ride since 3 years ago I started my first docker container. Learned a lot from how to build my custom image with a Dockerfile, loading my own configurations files into the container, getting along with docker-compose, traefik and YAML syntax... and and and ! However while tinkering with vaultwarden's config and changing to postgresSQL there's something that's really bugging me... ### Questions --- - **How do you/devs choose which database to use for your/their application? Are there any specific things to take into account before choosing one over another?** --- - **Does consistency in database containers makes sense? I mean, changing all my containers to ONLY postgres (or mariaDB whatever)?** --- - **Does it make sense to update the database image regularly? Or is the application bound to a specific version and will break after any update?** --- - **Can I switch between one over another even if you/devs choose to use e.g. MariaDB ? Or is it baked/hardcoded into the application image and switching to another database requires extra programming skills?** --- Maybe not directly related to databases but that one is also bugging me for some time now: - **What's redis role into all of this?** I can't the hell of me understand what is does and how it's linked between the application and database. I know it's supposed to give faster access to resources, but If I remember correctly, while playing around with Nextcloud, the redis container logs were dead silent, It seemed very "useless" or not active from my perspective. I'm always wondering "Humm redis... what are you doing here?". Thanks :)

    11
    5

    ### Edit After a long process of roaming the web, re-runs and troubleshoot the script with this wonderful community, the script is functional and does what it's intended to do. The script itself is probably even further improvable in terms of efficiency/logic, but I lack the necessary skills/knowledge to do so, feel free to copy, edit or even propose a more efficient way of doing the same thing. I'm greatly thankful to [@AernaLingus@hexbear.net](https://hexbear.net/u/AernaLingus), [@GenderNeutralBro@lemmy.sdf.org](https://lemmy.sdf.org/u/GenderNeutralBro), [@hydroptic@sopuli.xyz](https://sopuli.xyz/u/hydroptic) and Phil Harvey (exiftool) for their help, time and all the great idea's (and spoon-feeding me with simple and comprehensive examples ! ) #### How to use Prerequisites: - `parallel` package installed on your distribution Copy/past the below script in a file and make it executable. Change the `start_range/end_range` to your needs and install the `parallel` package depending on your OS and run the following command: `time find /path/to/your/image/directory/ -type f | parallel ./script-name.sh` This will order only the pictures from your specified time range into the following structure `YEAR/MONTH` in your current directory from 5 different time tag/timestamps (DateTimeOriginal, CreateDate, FileModifyDate, ModifyDate, DateAcquired). You may want to swap `ModifyDate` and `FileModifyDate` in the script, because `ModifyDate` is more accurate in a sense that `FileModifyDate` is easily changeable (as soon as you make some modification to the pictures, this will change to your current date). I needed that order for my specific use case. From: `'-directory<$DateAcquired/' '-directory<$ModifyDate/' '-directory<$FileModifyDate/' '-directory<$CreateDate/' '-directory<$DateTimeOriginal/'` To: `'-directory<$DateAcquired/' '-directory<$FileModifyDate/' '-directory<$ModifyDate/' '-directory<$CreateDate/' '-directory<$DateTimeOriginal/'` As per exfitool's documentation: > ExifTool evaluates the command-line arguments left to right, and latter assignments to the same tag override earlier ones. ``` #!/bin/bash if [ $# -eq 0 ]; then echo "Usage: $0 <filename>" exit 1 fi # Concatenate all arguments into one string for the filename, so calling "./script.sh /path/with spaces.jpg" should work without quoting filename="$*" start_range=20170101 end_range=20201230 FIRST_DATE=$(exiftool -m -d '%Y%m%d' -T -DateTimeOriginal -CreateDate -FileModifyDate -DateAcquired -ModifyDate "$filename" | tr -d '-' | awk '{print $1}') if [[ "$FIRST_DATE" != '' ]] && [[ "$FIRST_DATE" -gt $start_range ]] && [[ "$FIRST_DATE" -lt $end_range ]]; then exiftool -api QuickTimeUTC -d %Y/%B '-directory<$DateAcquired/' '-directory<$ModifyDate/' '-directory<$FileModifyDate/' '-directory<$CreateDate/' '-directory<$DateTimeOriginal/' '-FileName=%f%-c.%e' "$filename" else echo "Not in the specified time range" fi ``` --- --- Hi everyone ! Please no `bash-shaming`, I did my outmost best to somehow put everything together and make it somehow work without any prior bash programming knowledge. It took me a lot of effort and time. While I'm pretty happy with the result, I find the execution time very slow: `16min for 2288 files`. On a big folder with approximately 50,062 files, this would take over 6 hours !!! If someone could have a look and give me some easy to understand hints, I would greatly appreciate it. #### What Am I trying to achieve ? Create a bash script that use `exiftool` to stripe the date from images in a readable format (20240101) and compare it with an `end_range` to order only images from that specific `date range` (ex: 2020-01-01 -> 2020-12-30). Also, some images lost some EXIF data, so I have to loop through specific time fields: - DateTimeOriginal - CreateDate - FileModifyDate - DateAcquired #### The script in question ``` #!/bin/bash shopt -s globstar folder_name=/home/user/Pictures start_range=20170101 end_range=20180130 for filename in $folder_name/**/*; do if [[ $(/usr/bin/vendor_perl/exiftool -m -d '%Y%m%d' -T -DateTimeOriginal "$filename") =~ ^[0-9]+$ ]]; then DateTimeOriginal=$(/usr/bin/vendor_perl/exiftool -d '%Y%m%d' -T -DateTimeOriginal "$filename") if [ "$DateTimeOriginal" -gt $start_range ] && [ "$DateTimeOriginal" -lt $end_range ]; then /usr/bin/vendor_perl/exiftool -api QuickTimeUTC -r -d %Y/%B '-directory<$DateTimeOriginal/' '-FileName=%f%-c.%e' "$filename" echo "Found a value" echo "Okay its $(tput setab 22)DateTimeOriginal$(tput sgr0)" fi elif [[ $(/usr/bin/vendor_perl/exiftool -m -d '%Y%m%d' -T -CreateDate "$filename") =~ ^[0-9]+$ ]]; then CreateDate=$(/usr/bin/vendor_perl/exiftool -d '%Y%m%d' -T -CreateDate "$filename") if [ "$CreateDate" -gt $start_range ] && [ "$CreateDate" -lt $end_range ]; then /usr/bin/vendor_perl/exiftool -api QuickTimeUTC -r -d %Y/%B '-directory<$CreateDate/' '-FileName=%f%-c.%e' "$filename" echo "Found a value" echo "Okay its $(tput setab 27)CreateDate$(tput sgr0)" fi elif [[ $(/usr/bin/vendor_perl/exiftool -m -d '%Y%m%d' -T -FileModifyDate "$filename") =~ ^[0-9]+$ ]]; then FileModifyDate=$(/usr/bin/vendor_perl/exiftool -d '%Y%m%d' -T -FileModifyDate "$filename") if [ "$FileModifyDate" -gt $start_range ] && [ "$FileModifyDate" -lt $end_range ]; then /usr/bin/vendor_perl/exiftool -api QuickTimeUTC -r -d %Y/%B '-directory<$FileModifyDate/' '-FileName=%f%-c.%e' "$filename" echo "Found a value" echo "Okay its $(tput setab 202)FileModifyDate$(tput sgr0)" fi elif [[ $(/usr/bin/vendor_perl/exiftool -m -d '%Y%m%d' -T -DateAcquired "$filename") =~ ^[0-9]+$ ]]; then DateAcquired=$(/usr/bin/vendor_perl/exiftool -d '%Y%m%d' -T -DateAcquired "$filename") if [ "$DateAcquired" -gt $start_range ] && [ "$DateAcquired" -lt $end_range ]; then /usr/bin/vendor_perl/exiftool -api QuickTimeUTC -r -d %Y/%B '-directory<$DateAcquired/' '-FileName=%f%-c.%e' "$filename" echo "Found a value" echo "Okay its $(tput setab 172)DateAcquired(tput sgr0)" fi elif [[ $(/usr/bin/vendor_perl/exiftool -m -d '%Y%m%d' -T -ModifyDate "$filename") =~ ^[0-9]+$ ]]; then ModifyDate=$(/usr/bin/vendor_perl/exiftool -d '%Y%m%d' -T -ModifyDate "$filename") if [ "$ModifyDate" -gt $start_range ] && [ "$ModifyDate" -lt $end_range ]; then /usr/bin/vendor_perl/exiftool -api QuickTimeUTC -r -d %Y/%B '-directory<$ModifyDate/' '-FileName=%f%-c.%e' "$filename" echo "Found a value" echo "Okay its $(tput setab 135)ModifyDate(tput sgr0)" fi else echo "No EXIF field found" done ``` #### Things I have tried 1) Reducing the number of `if` calls But it didn't much improve the execution time (maybe a few ms?). The syntax looks way less readable but what I did, was to add a lot of or ( || ) in the syntax to reduce to a single `if` call. It's not finished, I just gave it a test drive with 2 EXIF fields (DateTimeOriginal and CreateDate) to see if it could somehow improve time. But meeeh :/. ``` #!/bin/bash shopt -s globstar folder_name=/home/user/Pictures start_range=20170101 end_range=20201230 for filename in $folder_name/**/*; do if [[ $(/usr/bin/vendor_perl/exiftool -m -d '%Y%m%d' -T -DateTimeOriginal "$filename") =~ ^[0-9]+$ ]] || [[ $(/usr/bin/vendor_perl/exiftool -m -d '%Y%m%d' -T -CreateDate "$filename") =~ ^[0-9]+$ ]]; then DateTimeOriginal=$(/usr/bin/vendor_perl/exiftool -d '%Y%m%d' -T -DateTimeOriginal "$filename") CreateDate=$(/usr/bin/vendor_perl/exiftool -d '%Y%m%d' -T -CreateDate "$filename") if [ "$DateTimeOriginal" -gt $start_range ] && [ "$DateTimeOriginal" -lt $end_range ] || [ "$CreateDate" -gt $start_range ] && [ "$CreateDate" -lt $end_range ]; then /usr/bin/vendor_perl/exiftool -api QuickTimeUTC -r -d %Y/%B '-directory<$DateTimeOriginal/' '-directory<$CreateDate/' '-FileName=%f%-c.%e' "$filename" echo "Found a value" echo "Okay its $(tput setab 22)DateTimeOriginal$(tput sgr0)" else echo "FINISH YOUR SYNTAX !!" fi fi done ``` 2) Playing around with find To recursively find my image files in all my folders I first tried the `find` function, but that gave me a lot of headaches... When my image file name had some spaces in it, it just broke the image path strangely... And all answers I found on the web were gibberish, and I couldn't make it work in my script properly... Lost over 4 yours only on that specific issue ! To overcome the hurdle someone suggest to use `shopt -s globstar` with `for filename in $folder_name/**/*` and this works perfectly. But I have no idea If this could be the culprit of slow execution time? 3) Changing all `[ ]` into `[[ ]]` That also didn't do the trick. #### How to Improve the processing time ? I have no Idea if it's related to my script or the exiftool call that makes the script so slow. This isn't that much of a complicated script, I mean, it's a comparison between 2 integers not a hashing of complex numbers. I hope someone could guide me in the right direction :) Thanks !

    7
    25

    Hi everyone :). Just getting started with Manjaro as daily drive to get some easier arched based distro. Except for the LVM bug with calamares everything is pretty smooth :). But at first boot, I saw they have added their personal Manjaro logo on boot and I directly though of the bug exploit [logoFAIL](https://www.blackhat.com/eu-23/briefings/schedule/index.html#logofail-security-implications-of-image-parsing-during-system-boot-35042) I heard a few month ago and It made me curious if this is something that could be exploitable by Manjaro. Probably not, this would harm their image and hard worked system, but I'm still curious... If someone smarter/more knowledgeable than me could chime in and give some valuable information on this topic regarding Manjaro, I would really appreciate it ! Thank you !

    27
    29

    Hi everyone. I'm curious to understand what could happened to simpleX if the new "security" plan in EU gets voted? Because I'm not versed enough with the political and legal wording in thoses papers I've got a hard time to actually understand. - Will simpleX be obligated to comply? - Will simpleX retire from EU? - Would It be illegal to use simpleX if the bill passes? - Could we still use simpleX with a proxy/VPN from a country outside of EU? - ... I'm genuinely concerned about what I'm reading here and there on lemmy... I hope someone could give me some interesting point of view. Thanks.

    8
    4

    cross-posted from: https://lemmy.ml/post/15968883 Hello everyone ! Nobody seems to have an answer on !networking@sh.itjust.works (or maybe they are not interested because it's an enteprise network community?) and !homenetworking@selfhosted.forum seems dead? Anyway, If anyone could guide me or direct me to the right direction, I would really appreciate it ! --- TL:DR What is encapsulated into the frame that makes everyone understand: "OHHH that’s for 10.0.0.8, your docker container on bridge network br-b1de on the veth2b interface !!! " --- Hi everyone ! I'm scratching my head in finding an actual answer on how virtual networking in docker actually works (mostly on the packets/frame level) or some good documentation to improve my understanding on how everything fits together. Because I'm probably lacking the correct network terminology I made a simple network topology of my network. Don't hesitate to correct any network mistake. ![](https://lemm.ee/api/v3/image_proxy?url=https%3A%2F%2Flemmy.ml%2Fpictrs%2Fimage%2Fb4ea08a8-92d7-4d50-b3f9-8645f1f9026c.png) In my scenario, my docker container with the virtual interface `veth2b22c98` and the following ip (10.0.0.8) connects to bridge network `br-b1de95b5ea89`. When I curl, from my conntainer, `lemmy.ml` the packets/frame is send to my enp4s0 and goes through my wireguard tunnel to my VPN provider which sends back the packet/frame/handshake... I probed every interface with tcpdump (enp4s0, wg0, br-b1,veth2b): - enp4s0: Every packet/frame is encapsulated into the wireguard protocol with my physical interface's IP (192.168.1.30) and no DNS is visible on that interface (like expected) and sends it out to my ISP's public IP. - wg0: Shows every packet/frame with the actual protocol with my wireguard's interface IP (192.168.2.1) with the destination IP of lemmy.ml (Dst: 54.36.178.108) - br-b1: Shows every packet/frame with the actual protocol with my containers IP (10.0.0.8) with the destination IP of lemmy.ml (Dst: 54.36.178.108) --- I know there is a mix of 2 different concepts in my scenario (wireguard tunnel and virtual networking) but I really do not understand how the frame gets back to my docker container. When I look at the frames on wg0, there is no mention of either the MacAddress of my container or the actual IP of my container. How/when/what ? is exactly happening to my frame so that it gets to the correct target between my physical interface, virtual interface, bridge ? I mean with VLAN's there's a **VLAN tag** on the frame, so you can easily identify with Wireshark where it should go. But here, I cannot find any clue who or what is doing the magic so the frame finds it's way back to my docker container. **What is encapsulated into the frame that makes everyone understand: "OHHH that's for 10.0.0.8, your docker container on bridge network br-b1de on the veth2b interface !!! "** --- Sorry for my broken English and lack of networking terminology and thank you for those who beared with me and are willing the give me some hints/proper networking lesson.

    2
    2

    Edit: Whoops I just read that networking@sh.itjust.works is for enterprise networks? I hope my small homelab question doesn't break the rules? If so I will redirect my question. --- Hi everyone ! I'm scratching my head in finding an actual answer on how virtual networking in docker actually works (mostly on the packets/frame level) or some good documentation to improve my understanding on how everything fits together. Because I'm probably lacking the correct network terminology I made a simple network topology of my network. Don't hesitate to correct any network mistake. ![](https://lemm.ee/api/v3/image_proxy?url=https%3A%2F%2Flemmy.ml%2Fpictrs%2Fimage%2Fb4ea08a8-92d7-4d50-b3f9-8645f1f9026c.png) In my scenario, my docker container with the virtual interface `veth2b22c98` and the following ip (10.0.0.8) connects to bridge network `br-b1de95b5ea89`. When I curl, from my conntainer, `lemmy.ml` the packets/frame is send to my enp4s0 and goes through my wireguard tunnel to my VPN provider which sends back the packet/frame/handshake... I probed every interface with tcpdump (enp4s0, wg0, br-b1,veth2b): - enp4s0: Every packet/frame is encapsulated into the wireguard protocol with my physical interface's IP (192.168.1.30) and no DNS is visible on that interface (like expected) and sends it out to my ISP's public IP. - wg0: Shows every packet/frame with the actual protocol with my wireguard's interface IP (192.168.2.1) with the destination IP of lemmy.ml (Dst: 54.36.178.108) - br-b1: Shows every packet/frame with the actual protocol with my containers IP (10.0.0.8) with the destination IP of lemmy.ml (Dst: 54.36.178.108) --- I know there is a mix of 2 different concepts in my scenario (wireguard tunnel and virtual networking) but I really do not understand how the frame gets back to my docker container. When I look at the frames on wg0, there is no mention of either the MacAddress of my container or the actual IP of my container. How/when/what ? is exactly happening to my frame so that it gets to the correct target between my physical interface, virtual interface, bridge ? I mean with VLAN's there's a **VLAN tag** on the frame, so you can easily identify with Wireshark where it should go. But here, I cannot find any clue who or what is doing the magic so the frame finds it's way back to my docker container. **What is encapsulated into the frame that makes everyone understand: "OHHH that's for 10.0.0.8, your docker container on bridge network br-b1de on the veth2b interface !!! "** Sorry for my broken English and lack of networking terminology and thank you for those who beared with me and are willing the give me some hints/proper networking lesson. --- Edit: Changed something on my network diagram (wireguard is not in a container it's bare bone on the server) and some typo.

    11
    1
    "Initials" by "Florian Körner", licensed under "CC0 1.0". / Remix of the original. - Created with dicebear.comInitialsFlorian Körnerhttps://github.com/dicebear/dicebearHO
    homelab N0x0n 5mo ago 85%
    [Questions] Beginner homelab (router/switch)

    Hi everyone :) It's time to switch and give my home network a proper minimal hardware upgrade. Right now everything is managed by my ISP's AIO firewall/router combo. Which works okayish, but I'm already doing some firewall/dns/VPN stuff on my minimal spare laptop server to bypass most of my ISP's restrictions. So it's time to get a little bit "crazy" ! While I do have some "power user" knowledge regarding Linux/server/selfhosted services/networking, I'm a bit clueless hardware wise, specially regarding my ISP's 2.5G ethernet port. I do have a 5giga connection from my Internet provider (Obtic fiber) which is divided into 4 ethernet ports (Eth1 2.5G, Eth2 1G, Eth3 1G, Eth4 0,500G or something in that range). And right now the Eth1 port is connected through an old 1G switch. 1) To take full advantage of my ISP's 2.5G ethernet port do I need a router **AND** a switch capable of 2.5G througput ? Or only the router and the switch is going to divid it accordingly between all connected devices on a 1G switch? I'm also looking for some recommendation/personal experience for a router and a switch with a budget of 250e. First I was interested into a BananaPI as a router, to tinker a bit, but it seems a bit of a hassle to flash it with OpenWRT, then I found an interesting post on Lemmy talking about the Intel N100 Celeron N5105, which looks like more what I'm looking for but I'm not sure ? 2) I have no idea what's the best bet, a SBC (bananapi mini, orange pi, raspberry pi...) a fully fleged router (like TP-Link AX1800 and flash it with opensense/openwrt) or an Intel N100 Celeron N5105 Soft Router ? The capabilities I'm looking for: - VLAN capable - AP VLAN capabable to segment wifi - Taking advantage of my ISP's 2.5G ethernet port - Firewall customization capabilities I have an eye on a managed switch I found on amazon ([SODOLA 6 Port 2.5G Web Managed](https://www.amazon.com/2-5G-Managed-10G-Aggregation-Multi-Gigabit/dp/B0CHRNLP4F/ref=sr_1_2_sspa?crid=2A2CT62HYOC3E&dib=eyJ2IjoiMSJ9.UxHGTabksxLQxBh4HH5T5H1HrMKYG1psG6y3CU-oSz33F3CTJG8dO2aJe1CyBGv02J2vyb9lwMAGt1R-8aBQ6s6YLJ113OILLPL9n24hzocDZuhoMcOZ4MO-j8BvjSv1lIwA_aJ-vUZsAemaB8iEi9nzN23iu55INuse5aebAVKILX3RCfYOWxE12BjxzpMMjpKEU4lI4wc5CbS76T4PUFgoEPKK1Xe5jXjE2bqzMTs.tqrljXT4Qn0SY9SO2NFAVHV5H11uEjHiCCxrLAE6BXs&dib_tag=se&keywords=managed%2Bswitch%2B2.5gb&sprefix=managed%2Bswitch%2B2.5gb%2Caps%2C525&sr=8-2-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9hdGY&th=1)) but I have no idea how reliable they are, I have never heard of SODOLA. 3) Any good recommendation I should look at for a managed switch that would work great with the same capabilities above? 4) Probably last question, is regarding wifi APs. Is it possible to make an access point from my router even tough it hasn't atennas? If I connect an access point directly to my router, will it be capable of giving away wifi connection? Thanks for reading though, I'm a bit unsure how I should spend my money to have a minimal but reliable/capable homelab setup. Every advice is welcome. But keep in mind, I want to keep it minimal, a good enough routing capbability with intermediate firewall customisation. I'm already hosting a few containers with a spare laptop and the traffic isn't going to be to crazy.

    10
    6

    Hi everyone ! Right now I can't decide wich one is the most versatile and fit my personal needs, so I'm looking into your personal experience with each one of them, if you mind sharing your experience. It's mostly for secure shared volumes containing ebooks and media storage/files on my home network. Adding some security into the mix even tough I actually don't need it (mostly for learning process). More precisely how difficult is the NFS configuration with kerberos? Is it actually useful? Never used kerberos and have no idea how it works, so it's a very much new tech on my side. **I would really apreciate some indepth personal experience and why you would considere one over another !** Thank you !

    61
    64

    Hello ! Getting a bit annoyed with permission issues with samba and sshfs. If someone could give me some input on how to find an other more elegant and secure way to share a folder path owned by root, I would really appreciate it ! # Context - The following folder path is owned by root (docker volume): `/var/lib/docker/volumes/syncthing_data/`_data/folder - The child folders are owned by the user server /var/lib/docker/volumes/syncthing_data/`_data/folder` - The user server is in the `sudoers` file - Server is in the docker groupe - `fuse.conf`has the `user_allow_other` uncommented # Mount point with sshfs `sudo sshfs server@10.0.0.100:/var/lib/docker/volumes/syncthing_data/_data/folder /home/user/folder -o allow_other` > Permission denied # Things I tried - Adding other options like `gid 0,27,1000` `uid 0,27,1000` `default_permissions`... - Finding my way through stackoverflow, unix.stackexchange... # Solution I found 1) Making a bind mount from the root owned path to a new path owned by server `sudo mount --bind /var/lib/docker/volumes/syncthing_data/_data/folder /home/server/folder` 2) Mount point with sshfs `sshfs server@10.0.0.100:/home/server/folder /home/user/folder` # Question While the above solution works, It overcomplicates my setup and adds an unecessary mount point to my laptop and fstab. Isn't there a more elegant solution to work directly with the user server (which has root access) to mount the folder with sshfs directly even if the folder path is owned by root? I mean the user has root access so something like: `sshfs server@10.0.0.100:/home/server/folder /home/user/folder -o allow_other` should work even if the first part of the path is owned by root. Changing owner/permission of the path recursively is out of question ! Thank you for your insights !

    16
    14

    Hi everyone :) For those interested, I share my just finished personal Firefox `user.js`. It's based on the latest arkenfox and has the same privacy features, with some personal tweaks to fit my workflow. And also easier to read 😅. https://github.com/KalyaSc/fictional-sniffle/blob/main/user.js --- ## KEEP IN MIND Except for the privacy focused entries, some are personal choices for an easy drop-in Firefox preferences backup. This is what I consider a good privacy model and some entries could break YOUR workflow, especially if you don't have self-hosted alternatives ([Vaultwarden](https://github.com/dani-garcia/vaultwarden), [Linkding](https://github.com/sissbruecker/linkding), [Wallabag](https://github.com/wallabag/wallabag)). I'm not an expert, but most of those entries are the same as [Arkenfox's user.js](https://github.com/arkenfox/user.js/blob/master/user.js). I really encourage you to read their file for better understanding on what each entrie does. While my file is easier to read, one downside is the lack of documentation for each entries. Also, this is not just a COPY/PAST. It took a lot of effort, time, reading, testing and understanding. I kept a similar naming scheme for cross referencing. I learned a few things and hope that you also will enjoy, edit, read and learn new interesting things. Happy hardening ! --- ## Features - Automatic dark mode theme (Keep in mind you still need [Dark Reader ](https://darkreader.org) or similar plugin for web pages in dark mode.) - Deep clean history on every Firefox quit. Only cookies as exception are kept. I need them for my self hosted services. - Disable password/auto-fill/breache. Vaultwarden takes care of everything. - All telemetry disabled by default except for the crash reports. To also disable the crash reports, comment the begining of the following lines with `//`: ``` user_pref("breakpad.reportURL", ""); user_pref("browser.tabs.crashReporting.sendReport", false); user_pref("browser.crashReports.unsubmittedCheck.enabled", false); user_pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false); ``` - DoH disabled (got my personal VPN with DoH enabled) ``` user_pref("network.trr.mode", 5); ``` - Disable WebRTC. If you need it for video calling, meetings, video chats: Comment the following line: ``` user_pref("media.peerconnection.enabled", false); ``` Uncomment the following (arkenfox default, it will force WebRTC inside your configured proxy) ``` //user_pref("media.peerconnection.ice.default_address_only", true); //user_pref("media.peerconnection.ice.proxy_only_if_behind_proxy", true); ``` - FIxed Width and Height (1600x900) (Finger print resistant) arkenfox's default - Resist Fingerprinting (RFP) which overrides finger print protection (FPP) - Alot of other tweaks you can discover while reading through the file. ## How to use/test this file ? Open firefox, type `about:profiles` and create a test profile. Open the corresponding root folder, put in the `user.js` and launch profile in a new browser. After testing and happy with the result, `BACKUP` your main Firefox profile somewhere safe and put the `user.js` in your main profile to see if it fits your workflow. ## Room for improvement / TODO. Alot of the settings in the 5000 range form arkenfox's user.js need further testing and investigation, because they could breake and cause performance/stability issues. - JS exploits: ``` - javascript.options.baselinejit - javascript.options.ion - javascript.options.wasm - javascript.options.asmjs ``` - Disable webAssembly - ... TODO - Disable non-modern cipher suites - Control TLS versions - Disable SSL session IDs [FF36+] Also those settings are another beast that needs further testing/investigation on how they work. ## The user.js file https://github.com/KalyaSc/fictional-sniffle/blob/main/user.js ## WARNING Arkenfox advise agianst addons who scramble and randomize your fingerprint characteristics (like [chameleon](https://addons.mozilla.org/en-US/firefox/addon/chameleon-ext/)). WHY? Because resist fingerprint takes care of most things. See [4500: RFP (resistFingerprinting)](https://github.com/arkenfox/user.js/blob/master/user.js) in arkenfox user.js. ``` [WARNING] DO NOT USE extensions to alter RFP protected metrics 418986 - limit window.screen & CSS media queries (FF41) 1281949 - spoof screen orientation (FF50) 1330890 - spoof timezone as UTC0 (FF55) 1360039 - spoof navigator.hardwareConcurrency as 2 (FF55) FF56 1333651 - spoof User Agent & Navigator API version: android version spoofed as ESR (FF119 or lower) OS: JS spoofed as Windows 10, OS 10.15, Android 10, or Linux | HTTP Headers spoofed as Windows or Android 1369319 - disable device sensor API 1369357 - disable site specific zoom 1337161 - hide gamepads from content .... Very long list ! ``` ## Final words I'm open for any constructive criticism or any constructive comment that could help me out to improve or understand something new or something I misunderstood. Sure that's not 100% my work, but as I said it took a lot of time, testing, searching, reading... Please don't be a crazy Panda... ## Credits [https://github.com/arkenfox/user.js](https://github.com/arkenfox/user.js) [https://github.com/pyllyukko/user.js/](https://github.com/pyllyukko/user.js/) [https://wiki.archlinux.org/title/Firefox/Privacy](https://wiki.archlinux.org/title/Firefox/Privacy)

    49
    6

    After the discussion in the following [post](https://lemmy.ml/post/13144346) I dug a bit deeper the rabbit hole. While I mostly relied on [Exodus](https://github.com/exodus-privacy/exodus) to see if an app has trackers in it... I was baffle to see all the sketchy requests it made while dumping the DNS requests with [PCAPdroid](https://github.com/emanuele-f/PCAPdroid)... Over 200 shady requests in a few seconds after login... here's a preview: ![](https://lemmy.ml/pictrs/image/2f5823c3-880a-4d71-9728-115f7c9f1a82.png) While I don't use AdguardVPN, I have Adguard Home as my DNS server in my homelab... I think It's time to switch to pi-hole ! Edit: VPN pcapdroid ![](https://lemmy.ml/pictrs/image/626369ed-874b-4c5c-b878-727a5e1d526a.jpeg) ![](https://lemmy.ml/pictrs/image/0ec9993f-3757-4132-9f22-529d9e1d7a33.jpeg)

    19
    8

    Hello again :) **I'm not talking about a broken wg connection, everything works as expect through the CLI and systemctl.** But the NetworkManger GUI in Gnome shows my Wireguard connection as it was "not connected" and when I click on the switch it actually disconnects my wg interface. Also when I try to edit my connection through `nmcli connection modify wg0 connection.autoconnect yes` and restart my wireguard connection with `systemctl restart wg-quick@wg0` It recreates a new wireguard interface. While everything works as expected with the usual tools (wg-quick, systemctl...) the GUI seems "broken". Someone else noticed or is this somehow related to my setup? ``` Debian 12 bookworm Gnome nmcli tools 1.42.4 ```

    17
    2

    ### Solved After interesting/insightful inputs from different users, here are the takeaways: - It doesn't have some critical or dangerous impact or implications when extracted - It contains the tared parent folder (see below for some neat tricks) - It only overwrites the owner/permission if `./` itself is included in the tar file as a directory. - Tarbombs are specially crafted tar archives with absolute paths `/` (by default (GNU) tar strips absolute paths and will throw a warning except if used with a special option `–absolute-names or -P`) - Interesting read: [Path-traversal vulnerability](https://sintonen.fi/advisories/tar-extract-pathname-bypass.txt) (`../`) ### Some neat trick I learned from the post Temporarily created subshell with its own environment: ``` Let’s say you’re in the home directory that’s called /home/joe. You could go something like: > (cd bin && pwd) && pwd /home/joe/bin /home/joe ``` [source](https://lemmy.ml/comment/9194801) ### Exclude parent folder and `./` `./file` from tar There are probably a lot of different ways to achieve that expected goal: `(cd mydir/ && tar -czvf mydir.tgz *)` `find mydir/ -printf "%P\n" | tar -czf mytar.tgz --no-recursion -C mydir/ -T -` [source](https://stackoverflow.com/questions/939982/how-do-i-tar-a-directory-of-files-and-folders-without-including-the-directory-it/39530409#39530409) --- ~~The absolute path could overwrite my directory structure (tarbomb) [source](https://www.linfo.org/tarbomb.html) Will overwrite permission/owner to the current directory if extracted. [source](https://unix.stackexchange.com/questions/669074/how-to-prevent-tar-extract-from-changing-the-permssions-for-current-directory)~~ I'm sorry if my question wasn't clear enough, I'm really doing my best to be as comprehensible as possible :/ --- Hi everyone ! I'm playing a bit around with tar to understand how it works under the hood. While poking around and searching through the web I couldn't find an actual answer, on what are the implication of `./` and `./file` structure in the tar archive. ### Output 1 ```sh sudo find ./testar -maxdepth 1 -type d,f -printf "%P\n" | sudo tar -czvf ./xtractar/tar1/testbackup1.tgz -C ./testar -T - ``` ``` #output > tar tf tar1/testbackup1.tgz text.tz test my file.txt .testzero test01/ test01/never.xml test01/file.exe test01/file.tar test01/files test01/.testfiles My test folder.txt ``` ### Output 2 ```sh sudo find ./testar -maxdepth 1 -type d,f | sudo tar -czvf ./xtractar/tar2/testbackup2.tgz -C ./testar -T - ``` ``` #output >tar tf tar2/testbackup2.tgz ./testar/ ./testar/text.tz ./testar/test ./testar/my ./testar/file.txt ./testar/.testzero ./testar/test01/ ./testar/test01/never.xml ./testar/test01/file.exe ./testar/test01/file.tar ./testar/test01/files ./testar/test01/.testfiles ./testar/My test folder.txt ./testar/text.tz ./testar/test ./testar/my ./testar/file.txt ./testar/.testzero ./testar/test01/ ./testar/test01/never.xml ./testar/test01/file.exe ./testar/test01/file.tar ./testar/test01/files ./testar/test01/.testfiles ./testar/My test folder.txt ``` The outputs are clearly different and if I extract them both the only difference I see is that the second outputs the parent folder. But reading [here](https://stackoverflow.com/questions/939982/how-do-i-tar-a-directory-of-files-and-folders-without-including-the-directory-it/39530409#39530409) and [here](https://stackoverflow.com/questions/939982/how-do-i-tar-a-directory-of-files-and-folders-without-including-the-directory-it/3035446#3035446) this is not a good solution? But nobody actually says why? Has anyone a good explanation why the second way is bad practice? Or not recommended? Thank you :)

    34
    33

    Hello everyone ! I have no idea if I’m in the right community, because it’s a mix of hardware and some light code/command to extract the power consumption out of my old laptop. I need some assistance and if someone way more intelligent than me could check the code and give feedback :) **Important infos** - 12 year old ASUS N76 laptop - Bare bone server running Debian 12 - **No battery** (died long time ago) Because I have no battery connected to my laptop It's impossible to use tools like `lm-sensors`, `powerstat`, `powertop` to output the wattage. But from the [following ressource](https://www.baeldung.com/linux/power-consumption) I can estimate the power based on the Energy. ``` time=1 declare T0=($(sudo cat /sys/class/powercap/*/energy_uj)); sleep $time; declare T1=($(sudo cat /sys/class/powercap/*/energy_uj)) for i in "${!T0[@]}"; do echo - | awk "{printf \"%.1f W\", $((${T1[i]}-${T0[i]})) / $time / 1e6 }" ; done ``` While It effectively outputs something, I'm not sure if I can rely on that to estimate the power consumption and if the code is actually correct? :/ Thanks :). # Edit: My goal is to calculate the power drawn from my laptop without any electric appliance (maybe a worded my question/title wrong?). While It could be easily done with the `top package` or `lm-sensors`, this only work by measuring the battery discharge, which in my case is impossible because my laptop is directly connected to the outlet with his power cord (battery died years ago). I dug a bit further through the web and found someone who asked the same question on [superuser.com](https://superuser.com/questions/1708665/different-results-for-power-measurement-on-ubuntu-using-powertop-and-energy-uj). While this gives a different reference point, nobody actually could answer the question. This seems a bit harder than I though and is actually related to the `/sys/class/powercap/*/energy_uj` files and though someone could give me a bit more details on how this works and what the output actually shows. This is also related to the [power capping framework](https://www.kernel.org/doc/html/latest/power/powercap/powercap.html) in the linux kernel? And as per the documentation this is representing the `CPU packages` current energy counter in micro joules. So I came a bit closer in understanding how it works and what it does, even tough I’m still not sure what am I actually looking at :\ .

    40
    16

    # Edit: Sorry for the bad posting :/. If someone is interested here is my actual post at [https://lemmy.ml/post/12594067](https://lemmy.ml/post/12594067) --- Hello everyone ! I have no idea if I’m in the right community, because it’s a mix of hardware and some light code/command to extract the power consumption out of my old laptop. I need some assistance and if someone way more intelligent than me could check the code and give feedback :) **Important infos** - 12 year old ASUS N76 laptop - Bare bone server running Debian 12 - No battery (died long time ago) - Running a dozens docker containers. Because I have no battery connected to my laptop I’m unable to use tools like `lm-sensors`, `powerstat`, `powertop`. But from the [following ressource](https://www.baeldung.com/linux/power-consumption) I can estimate the power based on the Energy. ``` time=1 declare T0=($(sudo cat /sys/class/powercap/*/energy_uj)); sleep $time; declare T1=($(sudo cat /sys/class/powercap/*/energy_uj)) for i in "${!T0[@]}"; do echo - | awk "{printf \"%.1f W\", $((${T1[i]}-${T0[i]})) / $time / 1e6 }" ; done ``` While It effectively outputs something, I'm not sure if I can rely on that to estimate the power consumption. Thanks :).

    6
    0

    Hi everyone :) I'm slowly getting used on how to navigate and edit things in the terminal without leaving the keyboard and arrow keys. I'm getting faster and It improved my workflow in the terminal (Yeahhii). ``` ctrl + a e f b u k ... alt + f b d ... ``` But yesterday I had such a bad experience while editing a backup bash script with `nano`. It took me like an hour to completely edit small changes like a caveman and always broke the editor when I used memory reflex terminal shortcuts. This really pissed me... I know nano also has minimal/limited shortcuts but having to memorize and switch between different one for different purpose seems like a waste of time. I think I tried emacs a few month ago but It didn't clicked. I didn't spend enough time though, tried it for a few minutes and deleted it afterwards. Maybe I should give it a second try? I also gave Vim a try, but that session is still open and can't exit (😂 )! Vim seems rather to complex for my workflow, I'm just a self-taught poweruser making his way through linux. Am I wrong? Isn't there something more "universal" ? That works everywhere I go the same? Something portable, so I can use it everywhere I go? I'm very interested in everyone's thought, insight, personal experience and tip/tricks to avoid what happened yesterday ! Thanks !

    20
    19

    First of all, thank you to all the amazing things you do for the self-hoster, FOSS comunity ! We won't be able to have those shiny things without you ! I'm not a dev and have just played arround with python (and I know how most of you feel about it 🤫) so I have very limited knowledge regarding programming languages. I know whats a low level language (C, C#, rust?), general scripting tools and even heard about assembly. And it always baffles me how all those coding lines rule and make our microchips communicate and understand each other, but that's another story ! This is about golang ! --- As a self-hoster enthousiast, when I'm looking at a github repository, I always check the programing language used, even though I have no idea if those integrate well with each other or if it's the best programming language for that kind of application. And **everytime** I see golang, It makes me smile and have a feeling it's going to be a good application. I know it also depends on the programmer skills and creativity, but all my self-hosted Go apps works like a charm. Traefik is the best example, I never had any issue or strange behavior, except for wrong configuration files on my side, Or navidrome a music server compatible with subsonic, also written in go, is working great and fast AF ! Or Vikunja, the todo app... and many more ! I'm probably biased because I have no idea of how the programing realm works, but I have the feeling that Golang is a certificate for good working and fast applications. Just to bad it's backed/supported by google (uuhhg) Feel free to debate and give me your personal opinion of the Go language, if my feelings are right or Am I just beeing silly :). Thanks for reading through 👋

    22
    11