393 karma · joined May 7, 2018
All of the other languages you bring up are great for authoring code, but have a non-zero amount of friction when running code in the wild. Python may be omnipresent, but you can rarely count on a specific version or the presence of specific libraries. Go requires compiling platform-specific binaries. Even JVM- or JS-based software requires installing a separate toolchain first.
If you want to write some code (e.g., a launcher, installer, utility code, etc...) that is almost certainly going to run on any computing device created in the last several decades, bash is your language.
Is the added investment necessary to scale out specific features, or is it to address challenges related to profitability?
(Albeit based on sorted runs rather than trees, as in the more recent variations of the idea)
From a data modeling and query optimization perspective, however, there's some value in distinguishing attributes uniquely related to identity (e.g., keys, or group-by attributes) and attributes that we're only interested in computing statistics over. This makes it easier to automatically create e.g., data cubes or similar indexes, and many useful statistics can be modeled using a nice mathematical structure like a ring or semiring [1], who's properties (commutativity, associativity, distributivity) are very helpful when optimizing queries.
Classical Datalog, in particular, is entirely based on the former type of attribute; value (dependent) attributes always need to be hacked in, in some way.
Value attributes make it much easier to express most forms of aggregation (sum, min, max), so you'll find very similar patterns in practical datalog variants e.g., RelationalAI's Rel [1], DBToaster's AGCA [2], etc...
Apart from that, and a syntax that seems to resemble map-style collection programming a bit more than datalog, yeah, this basically looks like datalog.
[1] https://docs.relational.ai/getting-started/rel/my-first-rel-... [2] https://dbtoaster.github.io/
It makes sense that creators focus their efforts on cultivating personal relationships with a small, but loyal base. You're not their target demographic.
[1] https://www.nytimes.com/2010/01/14/nyregion/14watchlist.html
The core of NYC has walkable infrastructure and an amazing public transportation infrastructure (at least compared to much of the rest of the country). For those commuting in from suburbs, park-and-rides are already a far more cost-efficient option.
https://www.cs.cornell.edu/~wmwhite/papers/2007-SIGMOD-Games...
Immutable structures can help significantly in reducing race conditions in parallel code, as it is impossible for one thread to modify part of a data structure while another thread is accessing it. Each thread sees a consistent 'version' of the data structure until the code explicitly replaces it with a new version.
Immutability can also help with memory optimizations: A node of one data structure can be safely re-used in another data structure. For example, if you need to retain older versions of a tree, you can share common nodes (this is how GIT encodes version changes).
It is definitely possible to design assessments on which cheating is difficult. For example, oral examinations or personalized per-student projects or exams. The problem is that this style of personalized assessment fundamentally does not scale past a few dozen students in a classroom.
You want a classroom that small, it's going to cost you. Just instructor salaries for would run each student 10-30k per year, and that's before paying for infrastructure (classrooms, tech, offices) and (admittedly not always useful) administration.
Since the phone has to already be unlocked for this privilege to be granted, it can't be used to bypass authentication.
The hardware is already installed by this point, so if it's 'spying' it can do that. The user's choice has no impact on the hardware's ability to record and/or deliver information.
At best, the replacement hardware would be able to unlock the phone for the attacker at some later time. However, the cost of getting this customized unlocking device into the phone seems high given that the attacker needs physical access to the device to embed the hardware in the first place, and then again at a later time to get into the device.
This is effectively what Apple does already. The usual difficulties with asking users to make security choices don't really apply here: Physical changes to the hardware are requires, so security fatigue isn't as big a deal. Maybe you get some protection from wrench attacks by not having the authority to pair new internal hardware, but that seems like a very specialized use case...
- Users were notified that the posts were written in collaboration with a bot
- Human authors oversaw the posts, including having the ability to edit posts and having responsibility for hitting send.
The lack of informed consent from study participants would likely have killed this experiment in a normal IRB review, but they didn't just sic ChatGPT loose on people seeking psychological help.
= floor( [Strength:$Value] / 2 - 5, 1)
These labels are purely descriptive. The underlying reference is still B:$2, but it makes formulas infinitely more readable without needing to manually define named ranges for everything.(Among many other nice features Numbers has... one of the few things I miss since my switch to Linux)
Like programming, start with the main argument (API) and then work your way backwards: What doesn't the reader know or agree with? What fact/claim would convince them? Why should they believe it? Repeat recursively as needed.
Finally, I have a list of 'weasel words': "this", "that", "it", "these", "them". Words like 'these' are referential, and it's really easy to use 'them' without actually referencing anything (uninitialized pointers?). If you see 'this' in your writing, force yourself to replace 'it' with few words summarizing the referential target.
This is one of the biggest challenges I see people struggling with as they learn programming: Cutting out the implicit assumptions that humans make every time they communicate with each other, and interactively working to understand *exactly* what needs to happen and why.
Interactive AIs (e.g., Copilot, ChatGPT), in principle, could address the specification problem. Unfortunately, in their current state, they have no concept of what they don't know or understand. Gaps in the specification are filled in with assumptions, and one of the main criticisms of these tools at the moment is that they have no way to reason about how appropriate these assumptions are. It seems likely that we'll eventually reach a point where simple AIs can replace devs for the relatively simple tasks that low/no-code solutions target. However, for this to happen, (i) the AI would need the ability to reason about uncertainty/incompleteness in the prompt it's given, and (ii) the AI would need to be able to interactively work with the user to refine the specification.
Relatedly, although it still exists, Apple Numbers is one of the few pieces of software that I really miss since my move to Linux. It has lots of subtle design choices that gently nudge you towards good data organization habits (e.g., If you keep an index column and title row for each dataset, you get rewarded with readable cell references).