𝕽𝖚𝖆𝖎𝖉𝖍𝖗𝖎𝖌𝖍

       🅸 🅰🅼 🆃🅷🅴 🅻🅰🆆. 
 𝕽𝖚𝖆𝖎𝖉𝖍𝖗𝖎𝖌𝖍 𝖋𝖊𝖆𝖙𝖍𝖊𝖗𝖘𝖙𝖔𝖓𝖊𝖍𝖆𝖚𝖌𝖍 
  • 2 Posts
  • 554 Comments
Joined 2 years ago
cake
Cake day: August 26th, 2022

help-circle


  • I’m 100% with you. I want a Light Phone with a changeable battery and the ability to run 4 non-standard phone apps that I need to have mobile: OSMAnd, Home Assistant, Gadget Bridge, and Jami. Assuming it has a phone, calculator, calendar, notes, and address book - the bare-bones phone functions - everything else I use on my phone is literally something I can do probably more easily on my laptop, and is nothing I need to be able to do while out and about. If it did that, I would probably never upgrade; my upgrade cycle is on the order of every 4 years or so as is, but if you took off all of the other crap, I’d use my phone less and upgrade less often.

    The main issue with phones like the Light Phone is that there are those apps that need to be mobile, and they often aren’t available there.



  • since all apps are designed to run well on budget phones from 5 years ago, there’s no reason to upgrade.

    5 years, maybe, but any more is stretching it. And not getting system upgrades anymore is problematic. Unless you own a particular model of phone, de-Googled Android can be hard to come by.

    For example, I have a 7-year old Pixel C. By the time Google stopped using system updates for it, I wasn’t wanting them as every release made the device slower and more unstable. After some effort, I was finally able to install a version of Lineage, which itself has problems including no updates in years. There’s a lot of software that is incompatible with my device, both from Aurora and FDroid.

    Android isn’t Linux; Google doesn’t care about maintaining backward compatability on old devices, much less performance, and there’s no army of engineers making sure it is because there’s a served running in walled-up closet no one can find.

    Google deprecates features and ABIs in Android, apps update and suddenly aren’t backwards compatible.

    5 years, maybe. The entire industry is addicted to users upgrading their phones, and everyone gets a piece of that pie. There’s no actors, except perhaps app developers, who have any interest in keeping old phones running. Telecoms upgrade their wireless network - the internet connection in my 8 y/o car, and half its navigation features, died the day AT&T decided to stop supporting 3G; Phone makers make no money if you don’t buy new phones; and maintaining backwards compatibility costs Google money which they’d rather siphon off to shareholders.




  • Thanks for the input

    You’re welcome!

    I haven’t used assembly in a long while, so I know where to look to understand all the instructions, but I can’t tell right off the bat what a chunk of assembly code does.

    Oh, me neither. And that’s not what I think is necessary; what’s important is that you can generally imagine the sorts of operations which are going on under the hood for any given line of code. That there’s no magic “generate a hash for a string” CPU operation, and that, ultimately, something is going to be iterating over a series of memory locations and performing several math operations on each to produce a numeric output. I think this awareness is enormously valuable in developers, and helps them think about the code they’re writing in a certain way, and usually in a way that improves their code.

    Algorithms, I am terrible at these because I rarely use them.

    You use them all the time! Anything longer than a single operation is an algorithm.

    Nobody is going to ask you to write a search function; however, being aware of Big-O notation, and being able to reason about time and space complexity, is important. On the backbend, it’s critical. It’s important if you’re a front end developer - I blame the whole NodeJS library fiasco on not enough awareness of dependency complexity by a majority of JS developers.

    I tend to work in finite state machine which is close to algorithms, but it’s not quite it.

    I’d absolutely call FSM work “algorithms”, and it sounds as if the projects you’re working on is where these fundamentals are most important. Interfaces between hardware components? It’s the most fraught topic in CIS! So. Many. Pitfalls. Shit, you probably have to worry about clock speeds and communication sheer; there’s absolutely a huge corpus of material about algorithms for handling stuff you’re working with, like vector clocks. That’s a fabulous, interesting field. It’s also super tedious, and requires huge attention to detail which I lack, so in a way I envy you, but an also glad I’m not you.





  • I should know more about what’s happening under the hood.

    You’ve just identified the most important skill of any software developer, IMO.

    The three most valuable topics I learned in college were OS design basics, assembly language, and algorithms. They’re universal, and once you have a grasp on those, a lot off programming language specifics become fairly transparent.

    An area where those don’t help are paradigm specifics: there’s theory behind functional programming and OO programming which, if you don’t understand, won’t impeded you from writing in that language, but will almost certainly result in really bad code. And, depending on your focus, it can be necessary to have domain knowledge: financial, networking, graphics.

    But for what you’re taking about, those three topics cover most of what you need to intuit how languages do what they do - and, especially C, because it’s only slightly higher level than assembly.

    Assembly informs CPU architecture and operations. If you understand that, you mostly understand how CPUs work, as much as you need to to be a programmer.

    OS design informs how various hardware components interact, again, enough to understand what higher level languages are doing.

    Algorithms… well, you can derive algorithms from assembly, but a lot of smart people have already done a ton of work in the field, and it’s silly to try to redo that work. And, units you’re very special, you probably won’t do as good a job as they’ve done.

    Once you have those, all languages are just syntactic sugar. Sure, the JVM has peculiarities in how its garbage collection works; you tend to learn that sort of stuff from experience. But a hash table is a hash table in any language, and they all have to deal with the same fundamental issues of hash tables: hashing, conflict resolution, and space allocation. There are no short cuts.


  • It’s listed as the “profile” in the screenshots you’re listing, but that’s the ruleset you’re altering.

    I used nft or iptables, and my interaction with ufw has been sparse, and mostly through the UI, because the rulesets the GUI generates are incomprehensible. There should be a command in ufw to report which profile is active.

    I’m going to guess this is a dead-end, since you’ve been using the CLI and I have to believe it uses the active profile by default, unless you tell it otherwise. However, in the GUI, if you edit rules in a profile it doesn’t automatically apply to your current ruleset. And if you alter your current ruleset, it doesn’t automatically persist it. So, even if you change a rule on the Home profile, and the Home profile is active, it doesn’t automatically get applied to the running ruleset; you have to take another action to apply it.

    Mind you, that’s all through the UI; I’ve never used the ufw command line, so this is (again) probably a red herring. I find ufw to be obtuse at best, because of the Byzantine rulesets it generates.




  • Huh. It’s a little off in some details, but does a pretty good neckbeard.

    I’ve been using Arch for several years, including off-beat offshoots like Artix, and have never once compiled a kernel on it. The last time I compiled a kernel was a couple of decades ago when I was running Gentoo.

    Arch is mainly a precomputed precompiled binary distribution; AUR is where you get the compile from source packages, and that’s the community repos.

    Arch users may have a reputation for acting superior, and I’ll admit that they Arch wiki justifies a lot of “look it up yourself” mentality, must because it’s so comprehensively good. But I think GPT misses the mark on a couple of points, like extra fingers on a Stable Diffusion person.


  • I use it for everything, but then, I wrote it. All of the desktop secret service tools have desktop dependencies (Gnome’s uses Gnome libraries, KDE’s pulls some KDE libraries) and run through DBUS; since I don’t use a DE, it’s a fair bit of unnecessary bloat. And I don’t like GUI apps that just hang around in the background consuming resources. I open KeePassXC when I need to make changes to the DB, and then I shut it down. Otherwise, it hangs out in my task bar, distracting me.

    Rook is for people who want to run on headless systems, or want to minimize resources usage, or don’t use a desktop environment (such as Gnome or KDE), or don’t run DBUS, or don’t run systemd. It’s for people who don’t want a bunch of applications running in the background in their task bar. KeePassXC providing a secret service is great, but it’s overkill if that’s most of what it’s providing for you, most of the time.

    I don’t think took is for everyone, or even for most people. It’s for people who like to live mostly in the command line, or even in VTs.


  • KeePassXC can’t be run in headless mode, and the GUI is tightly coupled to the app. You have to have all of X installed, and have a display running, to run it.

    Here’s the runtime dependencies of KeePassXC:

    linux-vdso.so.1
    libQt5Svg.so.5
    libqrencode.so.4
    libQt5Concurrent.so.5
    libpcsclite.so.1
    libargon2.so.1
    libQt5Network.so.5
    libQt5Widgets.so.5
    libbotan-3.so.5
    libz.so.1
    libminizip.so.1
    libQt5DBus.so.5
    libusb-1.0.so.0
    libQt5X11Extras.so.5
    libQt5Gui.so.5
    libQt5Core.so.5
    libX11.so.6
    libstdc++.so.6
    libm.so.6
    libgcc_s.so.1
    libc.so.6
    /lib64/ld-linux-x86-64.so.2
    libgssapi_krb5.so.2
    libproxy.so.1
    libssl.so.3
    libcrypto.so.3
    libbz2.so.1.0
    liblzma.so.5
    libsqlite3.so.0
    libdbus-1.so.3
    libudev.so.1
    libGL.so.1
    libpng16.so.16
    libharfbuzz.so.0
    libmd4c.so.0
    libsystemd.so.0
    libdouble-conversion.so.3
    libicui18n.so.75
    libicuuc.so.75
    libpcre2-16.so.0
    libzstd.so.1
    libglib-2.0.so.0
    libxcb.so.1
    libkrb5.so.3
    libk5crypto.so.3
    libcom_err.so.2
    libkrb5support.so.0
    libkeyutils.so.1
    libresolv.so.2
    libpxbackend-1.0.so
    libgobject-2.0.so.0
    libcap.so.2
    libGLdispatch.so.0
    libGLX.so.0
    libfreetype.so.6
    libgraphite2.so.3
    libicudata.so.75
    libpcre2-8.so.0
    libXau.so.6
    libXdmcp.so.6
    libcurl.so.4
    libgio-2.0.so.0
    libduktape.so.207
    libffi.so.8
    libbrotlidec.so.1
    libnghttp3.so.9
    libnghttp2.so.14
    libidn2.so.0
    libssh2.so.1
    libpsl.so.5
    libgmodule-2.0.so.0
    libmount.so.1
    libbrotlicommon.so.1
    libunistring.so.5
    libblkid.so.1
    

    I don’t know why it links to a systemd library. Here are the runtime dependencies of rook:

    linux-vdso.so.1
    libresolv.so.2
    libc.so.6
    /lib64/ld-linux-x86-64.so.2
    

    Don’t get me wrong: KeePassXC is one of my favorite programs. But don’t leave it running all the time, and it can’t be run on headless systems.