Corbin

joined 2 years ago
[–] Corbin@programming.dev 2 points 5 hours ago (1 children)

Also, the author has a standalone blog post on the topic from 2011, Expression Parsing Made Easy.

[–] Corbin@programming.dev 2 points 1 day ago

Put a rescue distro on a USB stick. When you first boot the laptop, use the rescue distro. Write down the USB IDs (lsusb) and PCI IDs (lspci). Read through the kernel boot log (sudo dmesg | less) and write down the names of any kernel drivers that might matter; WiFi, GPUs, USB bridges, and keyboard layouts are important in particular. For laptops, look up manufacturer-specific drivers for keyboards, fans, and power management.

Linux requires about 8MiB of RAM to boot. The entire netbook movement relied on machines with 2GiB or less; I remember putting Linux onto a 2GiB Sony VAIO that had struggled to boot Windows. Your laptops aren't too small, but you may be choosing distros with poor hardware support or large monolithic packages. I bet that one of Debian, Gentoo, or NixOS would boot on those machines that still work; of those, Debian is probably easiest.

Old laptops sucks. Windows use to be very efficient. XP and 7 has held up very well after all these years. And most importantly Linux isn’t a one size fits all solution.

Nah, Windows sucked back then too. If a machine boots Windows XP or Windows 7, then it can easily be made to boot an out-of-the-box Linux distro. The Asus machine you listed might have some boot issues, but the Acer and Dell do not appear different from any of the Acers or Dells that I've put Linux on in the past decade. My daily driver is a $150 refurbished Dell Latitude 5390 running NixOS.

 

Bret Victor wants to sell Dynamicland to cities.

I'm submitting this for public comment because Victor is a coward who cannot take peer review in public. Ironically, this is part of the problem with his recent push to adapt Dynamicland for public spaces; Victor's projects have spent years insisting that physical access control is equivalent to proper capability safety, and now he is left with only nebulous promises of protecting the public from surveillance while rolling out a public surveillance system -- sorry, a "computational public space."

[–] Corbin@programming.dev 7 points 1 day ago

It's not even an analogy; pointers and reference mechanics are the same concept in programming and linguistics. See the page on referents for an example blend of viewpoints.

[–] Corbin@programming.dev 0 points 1 week ago

Why not? What tone would you take if you wanted folks to regret posting unpaid advertisements?

[–] Corbin@programming.dev 5 points 1 week ago (7 children)

I would rather use Magic Wormhole if I have to have an intermediate server operated by somebody else.

Your protocol isn't documented enough to allow interoperability. It is important for folks to be able to develop their own clients and frontends; the ecosystem becomes richer and more resilient to attacks when there are many different implementations.

I'm not sensing an awareness of capabilities. Access to a file is one of the classic examples of a capability and a file-sharing system should be oriented around ensuring that references to files are unforgeable and copyable.

The terms of service are unacceptable and I won't be trying out the product. I can point at exactly what's wrong; talk to your attorney for details.

Users are expected to respect the intellectual property rights of others when using the app.

You don't understand what file-sharing technology is used for.

We reserve the right to introduce tools and technologies for monitoring the performance of the app and improving its functionality. By using the app, you acknowledge and agree to this potential monitoring.

Ah yes, because telemetry has never been met with user backlash.

The company does not collect user data, apart from what is needed for monitoring tools to ensure the app's stability and to make improvements.

You don't need user data for that. Y'know what's a lot easier? Just don't collect user data!

We may also use Sentry.io for error monitoring and NLevel Software for analytics.

I block those.

The app may include functionality to report users, and we reserve the right for this functionality to send necessary details for any investigation.

Ah yes, completely fair that somebody accused of misbehavior gets their local data exfiltrated too.

Meanwhile Magic Wormhole merely tells us that it is MIT licensed and we can do whatever we like with it.

[–] Corbin@programming.dev 3 points 1 week ago

And here we see the self-Godwin in the wild. Masterful play, sir.

Neither the CFO nor CEO are saying that Google ought to be not broken up. They are saying that Mozilla existentially depends on Google. This is actually more of a central point in the lawsuit than you think; in the original complaint, part 6 of the background is about revenue-sharing agreements (RSAs) between Google and various other companies who would normally compete in search, browsers, and other venues. That is, nobody is disputing that:

Today, Google has RSAs with nearly every significant non-Google browser (other than those distributed by Microsoft) including Mozilla's Firefox, Opera, and UCWeb. These agreements generally require the browsers to make Google the preset default general search engine for each search access point on both their Web and mobile versions.

If Mozilla did want to petition the court, then they are welcome to file as amici, but they haven't! Nor have any court filings included a reference to the CFO's testimony so far, although to be fair the testimony isn't yet available to read. There is no evidence that Mozilla will stand in the way of whatever the court decides to do with Google. Rather, in their post, the CEO is asking lawmakers to figure out some way to ensure that the browser market remains competitive:

Mozilla calls on regulators and policymakers to recognize the vital role of independent browsers and take action to nurture competition, innovation, and protect the public interest in the evolving digital landscape.

Courts aren't regulators or policymakers. The complaint before the court is not the same as the underlying principles of antitrust which motivated the complaint. A request to improve the future is not the same as a request to forestall the present.

[–] Corbin@programming.dev 32 points 2 weeks ago (3 children)

The author would do well to look up SGML; Markdown is fundamentally about sugaring the syntax for tag-oriented markup and is defined as a superset of HTML, so mistaking it for something like TeX or Word really demonstrates a failure to engage with Markdown per se. I suppose that the author can be forgiven somewhat, considering that they are talking to writers, but it's yet another example of how writers really only do research up to the point where they can emit a plausible article and get paid.

It’s worth noting that Microsoft bought PowerPoint, GitHub, LinkedIn, and many other things—but it did in fact create Word and Excel. Microsoft is, in essence, a sales company. It’s not too great at designing software.

So close to a real insight! The correct lesson is that Microsoft, like Blizzard, is skilled at imitating what's popular in the market; like magpies, they don't need to have a culture of software design as long as they have a culture of software sales. In particular, Microsoft didn't create Word or Excel, but ripped off WordPerfect and Lotus 1-2-3.

[–] Corbin@programming.dev 3 points 2 weeks ago (2 children)

Forget about your job for a moment. In general, why are you willing to set a threshold on how accessible your work is? I urge you to forget about how callous your employer wants you to be.

[–] Corbin@programming.dev 10 points 2 weeks ago

across the Internet ... doesn't require storing data twice

A flavor of the CAP theorem applies here; if you want your data to be available even during network partitions (and those are going to happen on the Internet!) then it has to be duplicated somehow. For example, I still have a soft spot for Tahoe-LAFS, which allows users to control how much duplication will be used and typically is configured to have some redundancy. Typical cloud providers build redundancy into their storage products; for example, it's known that Google's Colossus storage system uses Reed-Solomon to trade space for durability.

[–] Corbin@programming.dev 5 points 3 weeks ago (2 children)

Pick a language like Perl, where some packages are written in C and some are written in pure Perl, and you'll get to experience the same cryptic GCC errors, sometimes. There's no secret to pip; many Python developers upload wheels with pre-compiled binaries, including Windows-compatible binaries, and so you don't have to run GCC because they already did it for you.

[–] Corbin@programming.dev 6 points 3 weeks ago

I'm a fan of putting factored expressions into their own files and importing those files as NixOS modules. For example, let's say that we want to install vim. We might start with a vim.nix:

{ pkgs, ... }: {
  environment.systemPackages = [ pkgs.vim ];
}

Then in the main configuration, this can be imported by path:

{
    imports = [ ./vim.nix ];
}

Adding the import is like enabling the feature, but without any options or config. Later on, the feature can be customized without changing the import-oriented usage pattern:

{ pkgs, ... }:
let
  vim = ...;
in {
  environment.systemPackages = [ vim ];
}

Since the imported file is a complete NixOS module, it can carry other configuration. Here's a real example, adb.nix, which adds Android debugger support:

{ pkgs, ... }: {
  programs.adb.enable = true;
  environment.systemPackages = [ pkgs.pmount ];
  users.users.corbin.extraGroups = [ "adbusers" ];
}
[–] Corbin@programming.dev 2 points 1 month ago

Good notes. Another trick is to replace /etc/hosts (which is usually a symlink to /etc/static/hosts) with a custom file; for example, copy all of the hosts from /etc/static/hosts and then add new hostnames for the failing caches. This can turn an indefinite network timeout into a fairly quick connection-failed error.

Personally I think it's a design deficit in Nix that is compounded by the serial, one-at-a-time, timeout-based way of operating. A Nix implementation should have a sense of trading off disk, bandwidth, compute, and time; a substitution should only be preferred when it is likely to save at least one of those resources, and abandoned if it isn't making progress.

 

I'm happy to finally release this flake; it's been on my plate for months but bigger things kept getting in the way.

Let me know here or @corbin@defcon.social if you successfully run any interpreter on any system besides amd64 Linux.

 

The abstract:

This paper presents μKanren, a minimalist language in the miniKanren family of relational (logic) programming languages. Its implementation comprises fewer than 40 lines of Scheme. We motivate the need for a minimalist miniKanren language, and iteratively develop a complete search strategy. Finally, we demonstrate that through sufcient user-level features one regains much of the expressiveness of other miniKanren languages. In our opinion its brevity and simple semantics make μKanren uniquely elegant.

 

Everybody's talking about colored and effectful functions again, so I'm resharing this short note about a category-theoretic approach to colored functions.

view more: next ›