1. 10

    kde-connect. With mconnect on Arch (no KDE) and weird one-off binary on Mac.

    Haven’t yet tried to build mconnect on Mac.

    Love it. Share menu on Android, CLI on laptop.

    Sorry asimpson, don’t know about Windows. And pretty sure it’s not available of iOS.

    1. 2

      I believe there is a KDE Connect binary for Windows but it’s probably broken, not sure though.

    1. 4

      I’ll continue doing the Cryptography course on Coursera and maybe try programming the LFSR used in CSS(Content Scramble System) that was used in DVDs in the 90s. I find it very interesting despite it being an insecure cipher. And if I find more time, I want to try GPU passthrough on Linux and see how usable it is out of the box to play games on a Windows VM.

      1. 2

        I just signed up for that course! Thanks for the tip!

      1. 2

        It depends how you learn best. Go is already fairly high-level.

        Here are a few things I would play with:

        • Install Wireshark. This is a tool that allows you to record and analyze your network traffic. There are a TON of options and acronyms so don’t be afraid. Just keep it around and play with it while doing the other stuff. Try the “Follow TCP stream” option. This is more to get a sense of what is happening and learn by osmosis.
        • Find some references on Berkley sockets. This is the API that is used for networking on Linux, macOS and all the other UNIX operating systems. It’s important to understand what bind(), listen(), connect() and accept() operations do.
        • Implement a small server and client in Go with the higher-level version: https://golang.org/pkg/net/ .
        • Then read their implementation. Maybe try to use the underlying syscalls directly: https://golang.org/pkg/syscall/

        That should be enough for day-to-day programming. I also encourage you to read up on how DHCP, ICMP, TCP/IP, DNS resolution works. And higher-level protocols such as HTTP.

        1. 1

          Thank you, do you have any ideas for little projects I could do after I am done learning the basics and have played around with the implementations?

          1. 2

            You could write a little file-sending tool.

            You need a client mode that opens the file and tries to forward it to a server. For example the usage could be filecli send <filename> <targethost[:port]> Eg: filecli send /etc/password myserver:8848.

            You need a server that accepts new client connections and puts the file in a per-determined location. For example the usage could be filecli recv <bind-addr:[port]> <directory>. Eg: filecli recv ./Downloads.

            At first you just want to get the raw data for each connection and store them into incremental names. Eg: ~/Download/file-1 ~/Downloads/file2. Each connection can only send one file and the file is closed at the same time as the connection.

            Once you have that, think about what issues the implementation has and how you could augment it, maybe by creating some sort of exchange protocol yourself. What happens if the connection gets interrupted during the transfer.

        1. 6

          Hey there – I had the same question a while back and compiled a list of resources/curriculum to learn networking, using Go. You can find everything here. I think once you get the networking concepts down (using for example Beej’s guide). You can translate the C code into Go code (Go in fact just makes the same system calls, with some layers of abstraction on top) and will be well on your way!

          1. 1

            Thank you! I think this is exactly what I am looking for.