@juliank@mastodon.social
@juliank@mastodon.social avatar

juliank

@juliank@mastodon.social

Debian Developer, Ubuntu Core Developer, Software Engineer II at Canonical. Your friendly neighborhood APT maintainer. Vegan. He/him.

Love cooking, cycling, walking, music, and netflix.

This profile is from a federated server and may be incomplete. Browse more on the original instance.

juliank, (edited ) to random
@juliank@mastodon.social avatar

Owning books seems like a weird concept when you could just lend them from a library and return them when you're done. Like they're single use items, there's no need to own them.

juliank, to random
@juliank@mastodon.social avatar

Basically any car overtaking you on your bike in windy conditions is kind of dangerous when you are riding 45mm deep wheels.

First you get pulled towards the opposing traffic lane as the wind gets blocked by the car and stops blowing you to the outside of your lane.

Then when the car gets ahead of you the wind returns and blows you to the other side, gotta stay on the road man.

juliank, to random
@juliank@mastodon.social avatar

Good news everyone, my HRV is well again, it went upwards of the 60 day mean + standard deviation.

juliank, to random
@juliank@mastodon.social avatar

I seem to have forgotten to wipe down the knife yesterday so now it has a black tip. Oh noes.

image/jpeg

juliank,
@juliank@mastodon.social avatar

Quickly restored the knife to reasonable capacity. Quick rub with some magic sponge thing, dry, a minute of dry sharpening on a ceramic stick, nothing fancy, no need to get out the whetstones.

image/jpeg

juliank,
@juliank@mastodon.social avatar

Ikea FLAKSA ceramic sharpening rod, it's like 10€ or so. Heavily recommended tool.

juliank, to random
@juliank@mastodon.social avatar

See so when you're building images, like in a Dockerfile, you are fine with apt install removing manually installed packages, you'll tweak the file until it does the right thing.

On your desktop however, you don't want to lose your important tool on a dist-upgrade or when installing another tool but be told about the conflict to be able to make an explicit decision (I already told you, people just blindly answer yes to prompts and then complain it removed the stuff it said it removes).

juliank, to random
@juliank@mastodon.social avatar

You know the star wars universe is just an alternative matrix the machines set up to enslave humans

juliank, to random
@juliank@mastodon.social avatar

One of the differences between a classic SAT solver and what I do is that I want to have all (discovered) clauses satisfied (or optional and skipped); whereas a classic SAT solver will want every variable assigned (it picks the next unassigned literal generally and it terminates when there are no more).

So e.g. a classic SAT solver on foo: Depends: A | B will need to select A, not B, whereas we don't really care about the state of B - it can be undefined.

juliank,
@juliank@mastodon.social avatar

One of the upcoming improvements I believe is that we'll go and stuff all our clauses into a deque.

Currently we move clauses around because we keep them in a heap, but in the next generation it will do full discovery before entering the Solve() loop, so it can just do a single sort at the start.

This allows us to just move our read pointer forward, and backward on backtracking; combined with watched literals, backtracking becomes free.

juliank, (edited ) to random
@juliank@mastodon.social avatar

Making Sencha

  • preheat clay pot with 70°C water rinse
  • fill 3.5g of tea leaves
  • add 200ml of 60°C water
  • steep for 90s
  • slowly pour into cup (this takes 30-60s)
juliank, to random
@juliank@mastodon.social avatar

Ah yes, new episode of Dark Matter I should watch.

juliank, to random
@juliank@mastodon.social avatar

Watching the legacy mutants series "Legion" from I think it was back in 2017. I forgot I forgot to watch it.

And everything else is dead anyway. Nothing interesting.

juliank, to random
@juliank@mastodon.social avatar

FWIW, this is the confusion matrix of characters that APT hashes the same.

0 '\x00' ' '
1 '\x01' !
2 '\x02' "
3 '\x03' #
4 '\x04' $
5 '\x05' %
6 '\x06' &
7 '\x07' '
8 '\x08' (
9 '\t' )
10 '\n' *
11 '\x0b' +
12 '\x0c' ,
13 '\r' -
14 '\x0e' .
15 '\x0f' /
16 '\x10' 0
17 '\x11' 1
18 '\x12' 2
19 '\x13' 3
20 '\x14' 4
21 '\x15' 5
22 '\x16' 6
23 '\x17' 7
24 '\x18' 8
25 '\x19' 9
26 '\x1a' :
27 '\x1b' ;
28 '\x1c' <
29 '\x1d' =
30 '\x1e' >
31 '\x1f' ?
64 @ `
91 [ {
92 \ |
93 ] }
94 ^ ~
95 _ '\x7f'

juliank, (edited )
@juliank@mastodon.social avatar

It simply does character | 0x20 to lower case it; so it loses some information ;)

That said this is still a perfect hash function; none of the left values are valid in the places we use the hash function.

juliank,
@juliank@mastodon.social avatar

I just realized there's a bug in the hash function in which we do needless unaligned multi-byte reads.

i.e. if we compare 5 byte strings, we read the first byte and then 4 bytes at once, rather than 4 bytes first and then the remaining byte.

This may well be faster, I don't know, it's certainly odd.

juliank,
@juliank@mastodon.social avatar

I haven't touched the hash generator (https://github.com/julian-klode/triehash) in 7 years and it is a Perl script because Guillem wanted it to be one so I'm not sure I can still fix it without rewriting it!

juliank,
@juliank@mastodon.social avatar

Like seriously, 700 lines of Perl code manipulating tries and rendering them as C++ code with elaborate multi-byte logic thrown in is a bit hard.

juliank,
@juliank@mastodon.social avatar

Shit yeah the multi byte code it generates are essentially radix trees, it's just that all edges must have 1, 4, or 8 characters (unaligned 2 byte access would be too expensive)

juliank,
@juliank@mastodon.social avatar

Oh but e.g. this trie is stupid in some sense it does single-character evaluation of Vcs-{Bzr,Cvs,Git,Mtn,Svn}.

Rather presumably what it should do is get to Vcs and then compare the 4 byte suffixes.

Or yes at the parent level you could argue that maybe it should check for Vcs-, but the trie also contains the words Depends, Package, Section, Version.

This is fairly reasonable because it's only one additional comparison for "not in the trie" but it could look way worse.

juliank,
@juliank@mastodon.social avatar

We can reasonably implement a tail compression where we go merge -Bzr, -Cvs, etc.

It's not clear to me how to implement better compression algorithms but I'm sure someone thought about this and knows.

juliank, to random
@juliank@mastodon.social avatar

Shoot:

could not balance this transaction:
real postings' sum should be 0 but is: 0.0083659€

And my Go decimal class knows that there is a value != 0 left but it just prints out 0.

juliank,
@juliank@mastodon.social avatar

Ah well then I have a posting for missing bits but it is "0.00418296376 €" and hledger says it is 0.

juliank,
@juliank@mastodon.social avatar

Ah good, just tacking the 0.004€ on top of the other 1.50€ posting fixes it.

juliank, (edited ) to random
@juliank@mastodon.social avatar

I think I had a revelation about source-based pinning upgrading. It's path-dependent.

It's like if you add Breaks: binary (<< ${version-of-the-binary-in-the-source}) for each binary in your source package.

So you have three binaries A,B,C, they all depend on each other, e.g. A depends: B (>= 1), C (>= 1).

Now version 2 comes along and removes C; you are left with A Depends: B (>= 2), B: Depends: A (>= 2).

Upgrading either A or B will upgrade the other package, but C can remain installed.

juliank,
@juliank@mastodon.social avatar

So what do we do? When we mark A=3 for install, we iterate over all binaries in the source package and reject other versions.

The annoying bit is only rejecting binaries still available in the latest source version; because a source version does not yet exist, so we can only iterate over all the binaries.

  • All
  • Subscribed
  • Moderated
  • Favorites
  • JUstTest
  • mdbf
  • ngwrru68w68
  • cubers
  • magazineikmin
  • thenastyranch
  • rosin
  • Durango
  • InstantRegret
  • Youngstown
  • slotface
  • khanakhh
  • kavyap
  • DreamBathrooms
  • provamag3
  • tacticalgear
  • osvaldo12
  • tester
  • modclub
  • normalnudes
  • everett
  • GTA5RPClips
  • ethstaker
  • Leos
  • anitta
  • megavids
  • cisconetworking
  • lostlight
  • All magazines