Skip Navigation
That Nim Flashbacks
  • I didn't know the answer either, but usually you can compose solution from solutions of smaller problems.

    solution(0): There are no disks. Nothing to do. solution(n): Let's see if I can use solution(n-1) here. I'll use solution(n-1) to move all but last disk A->B, just need to rename the pins. Then move the largest disk A->C. Then use solution(n-1) to move disks B->C by renaming the pins. There we go, we have a stack based solution running in exponential time.

    It's one of the easiest problem in algorithm design, but running the solution by hand would give you a PTSD.

  • What're some of the dumbest things you've done to yourself in Linux?
  • How I lost a Postgres database:

    1. Installed Postgres container without configuring a volume
    2. Made a mental note that I need to configure a volume
    3. After a few days of usage, restarted the container to configure the volume
    4. ...
    5. Acceptance
  • Indian Government to block ProtonMail after bomb threats were sent using a ProtonMail account
  • I don't know either, but from what I know, bureaucracy and corruption is often a result of bad organizational structure. Some "designated officer" raises a finger which gets approved by the Secretary who is appointed by the minister who is appointed by the PM who is nominated by the Lok Sabha, and we lose yet another privacy protecting service. I think we should have more direct control in these matters.

    For now, if we cannot expect a proper functioning web, they cannot expect stability under their seats. Vote them out.

  • How exactly does linux use prefix length assigned to network interface?
  • Just did some basic testing on broadcast addresses using socat, broadcast is not working at all with /32 addresses. With /24 addresses, broadcast only reaches nodes that share a subnet. Nodes that don't share the subnet aren't reachable by broadcast even when they're reachable via unicast.

    Edit1: Did more testing, it seems like broadcast traffic ignores routing tables.

    On 192.168.0.2, I am running socat -u udp-recv:8000,reuseaddr - to print UDP messages.

    Case 1: add 192.168.0.1/24

    # ip addr add 192.168.0.1/24 dev eth0
    # # Testing unicast
    # socat - udp-sendto:192.168.0.2:8000 <<< "Message"
    # # Worked
    # socat - udp-sendto:192.168.0.255:8000,broadcast <<< "Message"
    # # Worked
    

    Case 2: Same as above but delete 192.168.0.0/24 route

    # ip addr add 192.168.0.1/24 dev eth0
    # ip route del 192.168.0.0/24 dev eth0
    # # Testing unicast
    # socat - udp-sendto:192.168.0.2:8000 <<< "Message"
    2024/02/13 22:00:23 socat[90844] E sendto(5, 0x5d3cdaa2b000, 8, 0, AF=2 192.168.0.2:8000, 16): Network is unreachable
    # # Testing broadcast
    # socat - udp-sendto:192.168.0.255:8000,broadcast <<< "Message"
    # # Worked
    
  • How exactly does linux use prefix length assigned to network interface?

    I was exploring direct links between machines, and basically failed to break something.

    I assigned IP address 192.168.0.1/24 to eth0 in two ways.

    A. Adding 192.168.0.1/24 as usual ```

    ip addr add 192.168.0.1/24 dev eth0

    ping -c 1 192.168.0.2

    PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data. 64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=0.051 ms

    --- 192.168.0.2 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.051/0.051/0.051/0.000 ms

    ```

    B: Adding 192.168.0.1/32 and adding a /24 route ```

    ip addr add 192.168.0.1/32 dev eth0

    # 192.168.0.2 should not be reachable.

    ping -c 1 192.168.0.2

    ping: connect: Network is unreachable

    # But after adding a route, it is.

    ip route add 192.168.0.0/24 dev eth0

    ping -c 1 192.168.0.2

    PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data. 64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=0.053 ms

    --- 192.168.0.2 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.053/0.053/0.053/0.000 ms

    ```

    Does this mean that adding an IP address with prefix is just a shorthand for adding the IP address with /32 prefix and adding a route afterwards? That is, does the prefix length has no meaning and the real work is done by the route entries?

    Or is there any functional difference between the two methods?

    Here is another case, these two nodes can reach each other via direct connection (no router in between) but don't share a subnet.

    Node 1: ```

    ip addr add 192.168.0.1/24 dev eth0

    ip route add 192.168.1.0/24 dev eth0

    # Finish the config on Node B

    nc 192.168.1.1 8080 <<< "Message from 192.168.0.1"

    Response from 192.168.1.1 ```

    Node 2: ```

    ip addr add 192.168.1.1/24 dev eth0

    ip route add 192.168.0.0/24 dev eth0

    # Finish the config on Node A

    nc -l 0.0.0.0 8080 <<< "Response from 192.168.1.1"

    Message from 192.168.0.1 ```

    20
    POV: You are a CPU fan
  • I was confused for a moment, because intuitively a CPU fan would look in the same direction as it blows air, so it should look into the heatsink. The fan looking away from the heatsink seems weird to me.

    Or the owner installed the fan in the wrong direction.

  • no.. just no
  • I was thinking along the lines of

    Plenty of libraries can build the XML using structs/classes. e.g. with serde:

    //Data type for row
    #[derive(serde::Serialize)]
    pub struct Foo {
    	pub status: String,
    	pub name: String,
    }
    
    //Example row
    let ent = Foo {
        status: "paid".into(),
        name: "bob".into(),
    }
    
    //Example execution
    sqlx::query(&serde_xml_rs::to_string(&InsertStmt{
    	table: "foo".into(),
    	value: &ent,
    })?).execute(&conn)?;
    

    Or with jackson-dataformat-xml:

    //Data type for row
    public class Foo {
        public string status;
        public string name;
    }
    
    //Example row
    Foo ent = new Foo();
    foo.status = "paid";
    foo.value = "bob";
    
    //Example execution
    XmlMapper xmlMapper = new XmlMapper();
    String xml = xmlMapper.writeValueAsString(new InsertStmt("foo", ent));
    try (Statement stmt = conn.createStatement()) {
        stmt.executeUpdate(xml)
    }
    

    I don't do JS (yet) but maybe JSX could also do similar things with XML queries.

    No more matching $1, $2, ... (or ? for mysql) with individual columns, I could dump entire structs/objects into a query and it would work.

  • Birds don't really fly, they are swimming through the air.
  • 1 a : to propel oneself in water by natural means (such as movements of the limbs, fins, or tail) b : to play in the water (as at a beach or swimming pool) 2 : to move with a motion like that of swimming : glide a cloud swam slowly across the moon 3 a : to float on a liquid : not sink b : to surmount difficulties : not go under sink or swim, live or die, survive or perish— Daniel Webster 4 : to become immersed in or flooded with or as if with a liquid potatoes swimming in gravy 5 : to have a floating or reeling appearance or sensation

    https://www.merriam-webster.com/dictionary/swim

    Apparently, swimming inherently requires a liquid.

  • no.. just no
  • Better than parameterized queries. Yes, we have stuff like query("INSERT INTO table(status, name) VALUES ($1, $2);").bind(ent.status).bind(ent.name).execute..., but that's kind of awful isn't it? With XML queries, we could use any of the XML libraries we have to create and manipulate XML queries without risking 'XML injection'. e.g we could convert ordinary structs/classes into column values automatically without having to use any ORM.

  • Should I move to Docker?
  • Thank you... I had to learn kubernetes for work and it was around 2 weeks of time investment and then I figured out I could use it to fix my docker-compose pains at home.

    If you run a lot of services, I can attest that kubernetes is definitely not overkill, it is a good tool for managing complexity. I have 8 services on a single-node kubernetes and I like how I can manage configuration for each service independent of each other and also the underlying infrastructure.

  • Should I move to Docker?
  • don't create one network with Gitlab, Redmine and OpenLDAP - do two, one with Gitlab and OpenLDAP, and one with Redmine and OpenLDAP.

    This was the setup I had, but now I am already using kubernetes with no intention to switch back.

  • Anyone else wants a one box replacement to a switch attached to USB NICs?

    I am building my personal private cloud. I am considering using second hand dell optiplexes as worker nodes, but they only have 1 NIC and I'd need a contraption like this for my redundant network.

    Then this wish came to my mind. Theoretically, such a one box solution could be faster than gigabit too.

    34
    I see no point of taking pictures of monuments or tourist spots.

    Let alone including yourself in the picture. I know how you look like.

    Let alone including your loved ones in the picture.

    Even when their disappointment of having to face away from the monument is clearly visible in the photo.

    And then you make them do stuff like 'hold the sun in your hands' or whatever.

    40
    InitialsDiceBearhttps://github.com/dicebear/dicebearhttps://creativecommons.org/publicdomain/zero/1.0/„Initials” (https://github.com/dicebear/dicebear) by „DiceBear”, licensed under „CC0 1.0” (https://creativecommons.org/publicdomain/zero/1.0/)AK
    akash_rawal @lemmy.world
    Posts 6
    Comments 73