Threads for dancompton

  1. 1

    Bazel. I recommend bazel. The learning curve is steep, but the payoff is tremendous. Imagine a world where you have fully-deterministic build-artifacts (container images and binaries, code coverage, and a list of all build-actions). The level of control and insight you gain into the build, actions, and dependency-graph (querying for optimal order of service-rollout, by client dependencies, for example) is incredible. There are similar out there, like buck, but once you get past the wtf stage, bazel is just incredible (use bazelisk).

    You can take a look at my scraps in github.com/dan-compton/world. Note that I’ve got a number of things going on there – deploying nats-streaming and grpc-based bidi pub-sub, a node app, a port of migra (declarative schema management) – all of which are built and/or run by the build system. My deploys are handled via jsonnet and rules_k8s (or yaml in some cases because I’m not a fan of jsonnet (the object oriented kind)).

    With some minor effort it’s possible to deploy services to my local minikube cluster THEN TO GCP by just switching the cluster target. How cool is that!?

    1. 1

      Does bazel relate to splitting a monorepo into several small repos remotely? I don’t follow.

      1. 2

        Sure, you can create a virtual monorepo with bazel. https://www.youtube.com/watch?v=2gNlTegwQD4

        1. 1

          Does a monorepo require a monolithic build system?

    1. 2

      Regardless of the length of the interview process, the company and the candidate should be honest and up-front about the timeline and their ability to meet expectations along the way. I personally believe that most of the responsibility lies with the hiring party. Unless you’re a small start-up, it’s much more damaging to the candidate to be lead along while you negotiate contracts than it is for a candidate to lead you along while negotiating other offers.

      1. 2

        Job hunting and working on a pet project of mine, (ask.engineering website not up), which aims to co-locate feedback collection with source code and other relevant contexts. As a former member of a developer productivity team, I know first hand how important developer feedback is and how difficult it can be to get. This project aims to solve the developer feedback problem by prioritizing collection context.

        For example, lets say you want to collect freeform feedback from your platform team about pain-points in their workflow. You would create the question in the app, assign it to the github team of your choice, set a participation threshold, and the app will automatically post the question on the PRs and record the feedback which is subsequently exposed in your dashboard.

        You can take a look at the repo here: https://github.com/dan-compton/world/tree/master/platform Most of my time right now is spent trying to wrangle rules_nodejs.

        HIre me!

        1. 4

          I’ve been using this for about a month and installed it on top of vanilla ubuntu 19.04 rather than using the regolith distribution (I’m not sure why it needs to be a new distribution). Long story short, I ended up changing the color scheme, switching from st to kitty, broke the pretty i3 bar with a dist-upgrade, and probably would have been better off just doing all of this myself.

          1. 1

            But that kind of makes it interesting for me, as I have no desire to fiddle around on my work machine. But I had to a little when I installed it. (Been using i3 for a while, but I also wanted some DE integration, so having KDE Plasma as well and it’s not 100% perfect).

            So I might give this a shot and live with “only 90% what I love, but at leasti t works in a non wonky way”

            1. 1

              How does the integration with Gnome’s control center look like?

              The best thing about Gnome are all the things working together; the screen lock, the keyboard layouts, the printers, the plug-and-play displays. I prefer using tiling window managers but I invariable end-up re-creating a lot of these things, half baked.

              1. 4

                I really wish the major DEs would add a tiling mode. I really like tilling window managers but I also really like Gnome. I’ve tried a few of the tiling extensions but they all kinda suck and feel kludgey and really don’t like that I have one of my monitors oriented vertically. If Gnome had an option to force windows to tile instead of float I’d be a happy person.

                1. 2

                  Myself I find that “corner snapping” is all tiling I want in my life, and MATE does that just fine.

                  1. 1

                    I use XFCE + i3, works pretty well. You can just disable the window manager and start i3 and it works. Not sure if that would work for you (see https://github.com/benoncoffee/archlinuxconfig for the installation, dotfiles, etc.).

                  2. 2

                    Excellent, actually. Everything works – from screen lock to display. No arandr or half-baked scripts. This is a really redeeming point that I didn’t even think about. The fact that I missed this illustrates how seamless it is. I suppose I also haven’t had to make any scripts for the bar either, which is nice

                1. 3

                  does it worth to use this distro over ubuntu+ vanilla i3wvm? different configuration files can be annoying? what’s the “plus”? I ask without knowing and testing the use of regolith-linux.

                  1. 2

                    I’m not sure why it needs to be a new distribution either. The original configuration file was located in ~/.config/i3-regolith/config and a recent dist-upgrade broke the configuration file location and created new dist-specific files in i3-regolith, which broke i3.

                  1. 1

                    I’m really excited about this project, but it appears that the build is currently broken. Do you have a stable release?

                    git clone https://git.sr.ht/~sircmpwn/aerc
                    Cloning into 'aerc'...
                    ...
                    make
                    go build  \
                    	-ldflags "-X main.Prefix=/usr/local" \
                    	-ldflags "-X main.ShareDir=/usr/local/share/aerc" \
                    	-o aerc
                    ...
                    # git.sr.ht/~sircmpwn/aerc/worker/imap
                    worker/imap/worker.go:115:29: w.worker.Logger.Writer undefined (type *log.Logger has no field or method Writer)
                    
                    1. 4

                      You need go 1.12 or newer.

                      1. 2

                        Ah, thanks!

                    1. 2

                      Sounds like you want a data lineage solution perhaps alongside a task scheduler to help you manage those runtime artifacts. Perhaps

                      I definitely would not suggest trying to manage these with something like bazel.

                      1. 1

                        Thanks for this suggestion!

                        As I understand it, the Lineage part is quite orthogonal to the data management part, right? I mean, we could imagine a workflow system that tracks lineage/provenance of files without managing the names of the files, and vice versa.

                        I have not used Airflow and I honestly have trouble understanding from the docs whether Airflow falls into the first or second category of workflow systems that I wrote about in the OP, i.e., are output files placed in a common namespace with ensuing possible name collisions, or are the file names somehow local to a task?

                        The bash examples in the Airflow docs appear to do things like echo 1 into thin air, so it’s hard to judge: https://airflow.apache.org/howto/operator/bash.html

                        1. 1

                          As I understand it, the Lineage part is quite orthogonal to the data management part, right?

                          I’m not quite sure what you mean. We consider your output data as well do we not? So, the ability to query attributes of the lineage of some output – in my mind – is what replaces the necessity of unique names. You could, for example, write all of your output to an S3 bucket and use UUIDs for the file names. As long as you can determine what generated it, you can understand the file’s context without a name.

                          Data Lineage can be captured at different levels of fidelity (e.g. coarse-grained) For example, wiki says:

                          Lineage can be captured at the level of the job, using files and giving lineage tuples of form {IF i, M RJob, OF i }, lineage can also be captured at the level of each task, using records and giving, for example, lineage tuples of form {(k rr, v rr ), map, (k m, v m )}. The first form of lineage is called coarse-grain lineage, while the second form is called fine-grain lineage. Integrating lineage across different granularities enables users to ask questions such as “Which file read by a MapReduce job produced this particular output record?

                          1. 1

                            Aha, agreed! The lineage information is really useful in this sense. I did not understand from your first short reply yesterday, so thanks for clarifying.

                            In fact, the workflow system I am hacking on with a friend actually is a combination of a lineage tracker and a work scheduler, which is very close to the idea you proposed here. Not sure why I failed to understand you yesterday.

                            Also thanks for the additional note on coarse-grained vs fine-grained lineage. Right now I feel more motivated to duct tape together a working alpha of our own little workflow system, and I will definitely consider this note when doing so.

                            1. 1

                              Yeah, ! Yeah I don’t think I did a great job explaining myself yesterday. For whatever reason, It’s really difficult for me to get Bazel out of my head when thinking about this problem. I’m assuming that all of this is not really build-time though, but rather you’re managing a collection of artifacts generated at runtime. Given that bazel is so powerful with respect to managing build-time dependencies and artifacts, I wonder if you could write a collection of bazel rules executed via bazel run that would generate specific artifacts by running dependent jobs (also owned by bazel run). Can they be generated deterministically by running some collection of jobs/tasks in order?

                      1. 1

                        Adding a stage to our monorepo’s Jenkins pipeline to generate test coverage reports (cobertura XML) for our go tests. It’s a simple script that invokes bazel coverage on $(bazel query ‘kind(go_dedault_test, //platform/…))’ and subsequently cats the resultant dat files into gocov and pipes those results into gocov-xml.

                        And playing with new puppy, titus.

                        1. 1

                          This is an incorrect, tired assumption. I suspect it will be resolved or forgotten over the next 20 years as ML and BCIs change the way we interact with our development environments.

                          1. 10

                            I still can’t believe Go punted on providing a way to turn an enum value into a string without code generation. What a spectacular waste of an opportunity to do a better C.

                            1. 5

                              Dismissive comments like this are not constructive and do not belong in any environment that encourages the evolution of opinion. If you have a strong opinion about something (e.g. code-generation) then back up that opinion with a strong argument.

                              1. 3

                                please, not this discussion again.

                              1. 2

                                Looking forward to a ledger that allows participants to (1) make a data-stream (of some type) available to a subset of privileged observers, (2) weight these streams (3) block and distribute based on weight, (4) allow network participants to chain streams into new “types”

                                1. 1

                                  Curious: what is the use case for such a system?

                                  1. 3

                                    Apparently smart contracts. Coincidentally a friend just last week recommended I read up on Tezos. Take a look at the Michelson language specification in particular. https://www.tezos.com/static/papers/language.pdf

                                    1. 1

                                      Just found this, appears to be a primer on Michelson, but I haven’t looked too closely. https://www.michelson-lang.com/

                                    2. 1

                                      Enterprise integration, actually. Working on a paper, but don’t hold your breath.