• 1 Post
  • 57 Comments
Joined 3 years ago
cake
Cake day: July 2nd, 2023

help-circle
  • In the spirit of c/nostupidquestion’s Rule 1, asking two unrelated questions does not seem like it would accrue high-quality answers to either. And I see you’ve already added another post focusing on the first question.

    Since it doesn’t cost 50 cents to make an additional post, I would suggest giving each question its own post. It would keep the discussion more focused, and actual answers should result.


  • Consider the following three types of monopolies:

    There are monopolies where a single entity has entrenched their position by having the categorically superior product, so far ahead of any competition and while no barriers are erected to prevent competitors, there simply is no hope and they will all play second fiddle. This type of monopoly doesn’t really exist, except for a transient moment, for if there initially wasn’t a barrier, there soon will be: as market leader, the monopolist accumulates capital that at best is unavailable to the competitors (ie zero sum resources, like land or labor), and at worst stands in the way of free competition (eg brand recognition, legally -recognized intellectual property).

    The second type is the steady-state scenario following the first, which is a monopoly that benefits from or actively enforces barriers against their competitors. Intellectual property (eg Disney) can be viewed as akin to the conventional means of production (land, labor, capital), so the monopolist that controls the usable land or can hire the best labor will cement their position as monopolist. In economic terms, we could say that the cost to overturn the monopolist is very high, and so perhaps it’s economically reasonable to be a second-tier manufacturer rather than going up against the giant. The key ingredient for the monopolist is having that structure in place, to keep everyone else at bay.

    The third type is the oddball, for it’s what we might call a “natural” or “practical” monopoly. While land, labor, and capital are indeed limited, what happens when it’s actually so limited that there’s basically only one? It’s a bit hard to conceptualize having just one plot of land (maybe an island?) or having just one Dollar, but consider a single person who has such specialized knowledge that she is the only such person in the world. Do we say she is a monopolist because she can command whatever price she wants for her labor? Is she a monopolist because she does not share her knowledge-capital? What if she physically can’t, for the knowledge is actually experience, honed over a lifetime? If it took her a lifetime to develop, then she may already lack the remaining lifetime to teach someone else for their lifetime.

    I use this example to segue to the more-customary example of a natural monopoly: the local electricity distribution system, not to be confused with the electric grid at-large, which also includes long-distance power lines. The distinction is as follows: the big, long power lines can compete with each other, taking different routes over terrain, under water, or sometimes even partially conducting through the earth itself. But consider that at a local level, on a residential street, there can practically only be a single distributor circuit for the neighborhood.

    I cannot be served by Provider X’s wires while Co-Op Y’s wires serve my neighbor, and Corpo Z’s wires serve the school down the road. Going back to the convention means of production, we could say there is only one plot of land available to run these distributor circuits. So at most one entity can own and operate those wires.

    Laying all that background, let’s look at your titular question. For monopoly types 1 and 2, it’s entirely feasible to divide and collectivize those monopolies. But it’s the natural monopolies that are problematic: if you divide them up (let’s say geographically) and then collectivize them, there will still only ever be one “owner” of the distribution lines. You cannot have Collective A own a few meters of wire, and then Collective B owns a few meters in between, all while Collective C is connected at the end of the street. The movement of electric power is not amenable to such granular collectivization.

    To that end, the practical result is the same no matter how you examine it: a natural monopoly is one which cannot feasibly be split up, even when there’s the will to do so. Generalizing quite a lot, capitalists would approach a natural monopoly with intent to exploit it for pure profit, while social democrats would seek to regulate natural monopolies (eg US State’s public utilities commissions), and democratic socialists would want to push for state ownership of all natural monopolies, while communists would seek the dissolution of the state and have the natural monopoly serve everyone “according to their need”. But the monopoly still exists in all these scenarios, for it can’t be done any other way.

    Other natural monopolies exist, but even things like radio spectrum are relatively plentiful compared to local power lines, for which there really is just one place to build them. We don’t have wireless power yet.


  • I grew up in a suburban neighborhood that was built to only encourage driving and discouraged everything else, so my parents also took me most places during my teenage years. The cul-de-sacs made it particularly hard to walk to anything interesting, even though such destinations were actually fairly close by, as the crow flies.

    What I would suggest is that if there aren’t many interesting destinations to start with, perhaps the walk itself can be of interest. Unless the walk to the mall is along a surface freeway with no soundwall – an actual occurrence in my hometown – you might start with an out-and-back trek to the mall, observing whatever architecture, people, or activities are visible and audible, and then return home. Think of it like people-watching, but less awkward because you’re just passing by, not stopping to stare.

    As another commenter wrote, getting comfortable with something is a matter of doing it, first in a controlled manner and then gradually broadening your horizons.

    But if this still isn’t a workable plan, then perhaps plan a day out to the 1-hour-away park, taking some time to explore what’s just outside that park. It’s not cheating to use a car to get to a more walkable area. But the walk should be the adventure.

    I wish you the best of luck!

    P.S. One other thought: could you go walking with someone else besides your parents? They may already have their own walking paths that you may also find workable, places that you can then explore on your own.




  • Steganography is one possible way to store a message “hidden in plain sight”, and video does often make a seemingly innocuous manner to store a steganographic payload, but in that endeavor, the point is to have two messages: a video that raises no suspicions whatsoever, and a hidden text document with instructions for the secret agent.

    Encoding only the hidden message as a video would: 1) make it really obvious that there’s an encoded message, and 2) would not be compatible with modern video compression, which would destroy the hidden message anyway, if encoded directly as black and white pixels.

    When video compression is being used, the available bandwidth to store steganographic messages is much lower, due to having to be “coarse” enough to survive the compression scheme. And video compression is designed around how human vision works, so shades of color are the least likely to be faithfully reproduced – most people wouldn’t notice if a light green is portrayed slightly darker than it ought to be. The good news is that with today’s high resolution video streams, the raw video bandwidth is huge and so having even just one-thousandth of that available for encoding hidden data is probably sufficient.

    That said, hidden messages != encrypted messages: anyone who notices that there may be a hidden message can try to analyze the suspicious video and retrieve the payload. Encoding, say, English text in a video would still leave patterns, because some English letters (and thus ASCII-encoded bit patterns) will show up more frequently. But fortunately, one can encrypt data and then hide it using steganography. Encrypted data tends to approximate random noise, making it much harder to notice when hidden within the naturally-noisy video data. But bandwidth will be cut some more due to encryption.

    TL;DR: it’s very real to hide messages in plain sight, in places people wouldn’t even think of looking closely at. Have you thought about the Roman Empire today?


  • IMO, circular buffers with two advancing pointers are an awesome data structure for high performance compute. They’re used in virtualized network hardware (see virtio) and minimizing Linux syscalls (see io_uring). Each ring implements a single producer, single consumer queue, so two rings are usually used for bidirectional data transfer.

    It’s kinda obscure because the need for asynchronous-transfer queues doesn’t show up that often unless dealing with hardware or crossing outside of a single CPU. But it’s becoming relevant due to coprocessors (ie small ARM CPUs attached to a main CPU) that process offloaded requests and then quickly return the result when ready.



  • For the benefit of non-Google users, here is the unshortened URL for that Bank of England article: https://www.bankofengland.co.uk/-/media/boe/files/quarterly-bulletin/2014/money-creation-in-the-modern-economy

    With that said, while this comment does correctly describe what the USA federal government does with tax revenues, it is mixing up the separate roles of the government (via the US Treasury) and the Federal Reserve.

    The Federal Reserve is the central bank in the USA, and is equivalent to the Bank of England (despite the name, the BoE serves the entire UK). The Federal Reserve is often shortened to “the Fed” by finance people, which only adds to the confusion between the Fed and the federal government. The central bank is responsible for keeping the currency healthy, such as preventing runaway inflation and preventing banking destabilization.

    Whereas the US Treasury is the equivalent to the UK’s HM Treasury, and is the government’s agent that can go to the Federal Reserve to get cash. The Treasury does this by giving the Federal Reserve some bonds, and in turn receives cash that can be spent for employee salaries, capital expenditures, or whatever else Congress has authorized. We have not created any new money yet; this is an equal exchange of bonds for dollars, no different than what you or I can do by going to treasurydirect.gov and buying USA bonds: we give them money, they give us a bond. Such government bonds are an obligation that the government must pay in the future.

    The Federal Reserve is the entity that can creates dollars out of thin air, bevause they control the interest rate of the dollar. But outside of major financial crisis, they only permit the dollar to inflate around 2% per year. That’s 2% new money being created from nothing, and that money can be swapped with the Treasury, thus the Federal Reserve ends up holding a large quantity of federal government bonds.

    Drawing the distinction between the Federal Reserve and the government is important, because their goals can sometimes be at odds: in the late 1970s, the Iranian oil crisis caused horrific inflation, approaching 20%. Such unsustainable inflation threatened to spiral out of control, but also disincentivized investment and business opportunities: why start a new risky venture when a savings account would pay 15% interest? Knowing that this would be the fate of the economy if left unchecked, the Federal Reserve began to sell off huge quantities of its government bonds, thus pulling cash out of the economy. This curbed inflatable, but also created a recession in 1982, because any new venture needs cash but the Feds sucked it all up. Meanwhile, the Reagan administration would not have been pleased about this, because no government likes a recession. In the end, the recession subsided, as did inflation and unemployment levels, thus the economy escaped a doom spiral with only minor bruising.

    To be abundantly clear, the Federal Reserve did indeed cause a recession. But the worse alternative was a recession that also came with a collapsed US dollar, unemployment that would run so deep that whole industries lose the workers needed to restart post-recession, and the wholesale emptying of the Federal Reserve and Treasury’s coffers. In that alternate scenario, we would have fired all our guns and have lost anyway.


  • From a biology perspective, it may not be totally advantageous to grow in all three dimensions at once. Certainly, as life forms become larger, they also require more energy to sustain, and also become harder to cool (at least for the warm blooded ones). Generally speaking, keeping cool is a matter of surface area (aka skin). But growing double in each of the three dimensions would be 4x more skin than before, but would be 8x more mass/muscle. That’s now harder to keep cool.

    So growing needs to be done with intention: growing taller nets some survival benefits, such as having longer legs to run. Whereas growing wider or deeper doesn’t do very much.

    But idk mang, I’m in a food coma from holiday dinner, just shooting from the hip lol


  • I recently learned about Obsidian from a friend, but haven’t started using it yet, so perhaps I can offer a perspective that differs from current users of Obsidian or any of the other apps you listed.

    To start, I currently keep a hodge-podge of personal notes, some digitally and some in handwriting, covering different topics, using different formats, and there’s not really much that is common between any of these, except that I am the author. For example, I keep a financial diary, where I intermittently document the thinking behind certain medium/long-term financial decisions, which are retained only as PDFs. I also keep README.md files for each of the code repos that I have for electronics and Kubernetes-related projects. Some of my legacy notes are in plain-text .txt file format, where I’m free-form record what I’ve working on, relevant links, and lists of items outstanding or that are TODOs. And then there is the handwritten TODO and receivables list that I keep on my fridge.

    Amongst all of this chaos, what I would really like to have the most is the ability to organize each “entry” in each of their respective domains, and then cross-reference them. That is, I’m not looking to perform processing on this data, but I need to organize this data so that it is more easily referenced. For example, if I outline a plan to buy myself a new server to last 10 years, then that’s a financial diary entry, but it would also manifest itself with TODO list items like “search for cheap DDR5 DIMMs” (heaven help me) and “find 10 GbE NIC in pile”. It may also spawn an entry in my infrastructure-as-code repo for my network, because I track my home network router and switch configurations in Git and will need to add new addresses for this server. What I really need is to be able to refer to each of these separate documents, not unlike how DOIs uniquely identify research papers in academic journals.

    It is precisely because my notes are near-totally unstructured and disparate that I want a powerful organization system to help sort it, even if it cannot process or ingest those notes. I look at Obsidian – based on what little I know of it – like a “super filing cabinet” – or maybe even a “card catalog” but that might be too old of a concept lol – or like a librarian. After all, one asks the librarian for help finding some sort of book or novel. One does not ask the librarian to rehash or summarize or extract quotes from those books; that’s on me.


  • In the English-speaking world, you can always shorten the year from 4 to 2 digits. But whether: 1) this causes confusion or 2) do you/anyone care if it does, are the points of contention. The first is context-dependent: if a customer service agent over the phone is trying to confirm your date of birth, there’s no real security issue if you only say the 2 digit year, because other info would have to match as well.

    If instead you are presenting ID as proof of age to buy alcohol, there’s a massive difference between 2010 and 1910. An ID card and equivalent documentation must use a four digit year, when there is no other available indicator of the century.

    For casual use, like signing your name and date on a holiday card, the ambiguity of the century is basically negligible, since a card like that is enjoyed at the time that it’s read, and isn’t typically stashed away as a 100-year old memento.

    That said, I personally find that in spoken and written English, the inconvenience of the 4 digit year is outweighed by the benefit of properly communicating with non-American English users. This is because us American speak and write the date in a non-intuitive fashion, which is an avoidable point of confusion.

    Typical Americans might write “7/1/25” and say “July first, twenty five”. British folks might read that as 7 January, or (incorrectly) 25 January 2007. But then for the special holiday of “7/4/25”, Americans optionally might say “fourth of July, twenty five”. This is slightly less confusing, but a plausible mishearing by the British over a scratchy long-distance telephone call would be “before July 25”, which is just wrong.

    The confusion is minimized by a full 4 digit year, which would leave only the whole day/month ordering as ambiguous. That is, “7/1/2025” or “1/7/2025”.

    Though I personally prefer RFC3339 dates, which are strictly YYYY-mm-dd, using 4 digit years, 2 digit months, and 2 digit days. This is always unambiguous, and I sign all paperwork like this, unless it explicitly wants a specific format for the date.


  • For the objective of posting photos to an Instagram account while preserving as much privacy as possible, your approach of a separate machine and uploading using its web browser should be sufficient. That said, Instagram for web could also be sandboxed using a private browsing tab on your existing desktop. Certainly, avoiding an installed app – such as the mobile app – will prevent the most obtuse forms of espionage/tracking.

    That said, your titular question was about how to maintain an Instagram account, not just post images. And I would say that as a social media platform, this would include engagement with other accounts and with comments. For that objective, having a separate machine is more unwieldy. But even using a private browsing tab on your existing machine is still subject to the limits that Instagram intentionally imposes on their desktop app: they save all the crucial value-add features for the mobile app, where their privacy invasion is greatest.

    To use Instagram in the least obtuse manner means to play the game by their rules, which isn’t really compatible with privacy preservation. To that end, if you did want a full Instagram experience, I would suggest getting a separate, cheap mobile phone (aka a “YOLO phone”) to dedicate to this task. If IG doesn’t need a mobile number, then you won’t even need a working SIM account. Then load your intended images using USB file transfer, and use an app like Imagepipe (available on F-Droid) to strip image metadata. Turn off all location and permissions on this phone, and when not in-use, turn the phone off or in airplane mode.


  • Directly answering the question: no, not every country has such a consolidated library that enumerates all the laws of that country. And for reasons, I suspect no such library could ever exist in any real-life country.

    I do like this question, and it warrants further discussion about laws (and rules, and norms), how they’re enacted and enforced, and how different jurisdictions apply the procedural machine that is their body of law.

    To start, I will be writing from a California/USA perspective, with side-quests into general Anglo-American concepts. That said, the continental European system of civil law also provides good contrast for how similar yet different the “law” can be. Going further abroad will yield even more distinctions, but I only have so much space in a Lemmy comment.

    The first question to examine is: what is the point of having laws? Some valid (and often overlapping) answers:

    • Laws describe what is/isn’t acceptable to a society, reflecting its moral ideals
    • Laws incentivize or punish certain activities, in pursuit of public policy
    • Laws set the terms for how individuals interact with each other, whether in trade or in personal life
    • Laws establish a procedure machine, so that by turning the crank, the same answer will output consistently

    From these various intentions, we might be inclined to think that “the law” should be some sort of all-encompassing tome that necessarily specifies all aspects of human life, not unlike an ISO standard. But that is only one possible way to meet the goals of “the law”. If instead, we had a book of “principles” and those principles were the law, then applying those principles to scenarios would yield similar result. That said, exactly how a principle like “do no harm” is applied to “whether pineapple belongs on pizza” is not as clear-cut as one might want “the law” to be. Indeed, it is precisely the intersection of all these objectives for “the law” that makes it so complicated. And that’s even before we look at unwritten laws.

    The next question would be: are all laws written down? In the 21st Century, in most jurisdictions, the grand majority of new laws are recorded as written statutes. But just because it’s written down doesn’t mean it’s very specific. This is the same issue from earlier with having “principles” as law: what exactly does the USA Constitution’s First Amendment mean by “respecting an establishment of religion”, to use an example. But by not micromanaging every single detail of daily life, a document that starts with principles and is then refined by statute law, that’s going to be a lot more flexible over the centuries. For better/worse, the USA Constitution encodes mostly principles and some hard rules, but otherwise leaves a lot of details left for Congress to fill in.

    Flexibility is sometimes a benefit for a system of law, although it also opens the door for abuse. For example, I recall a case from the UK many years ago, where crown prosecutors in London had a tough time finding which laws could be used to prosecute a cyclist that injured a pedestrian. As it turned out, because of the way that vehicular laws were passed in the 20th Century, all the laws on “road injuries” basically required the use of an automobile, and so that meant there was a hole in the law, when it came to charging bicyclists. They ended up charging the cyclist with the criminal offense of “furious driving”, which dated back to an 1860s statute, which criminalized operating on the public road with “fury” (aka intense anger).

    One could say that the law was abused, because such an old statute shouldn’t be used to apply to modern-day circumstances. That said, the bicycle was invented in the 1820s or 1830s. But one could also say that having a catch-all law is important to make sure the law doesn’t have any holes.

    Returning to American law, it’s important to note that when there is non-specific law, it is up to the legislative body to fill those gaps. But for the same flexibility reasons, Congress or the state or tribal legislatures might want to confer some flexibility on how certain laws are applied. They can imbue “discretion” upon an agency (eg USA Department of Commerce) or to a court (eg Superior Court of California). At other times, they write the law so that “good judgement” must be exercised.

    As those terms are used, discretion more-or-less means having a free choice, where either is acceptable but try to keep within reasonable guidelines. Whereas “good judgement” means the guidelines are enforced and there’s much less wiggle-room for arbitraryness. And confusingly so, sometimes there’s both a component of discretion and judgment, which usually means Congress really didn’t know what else to write.

    Some examples: a District Attorney anywhere in California has discretion when it comes to filing criminal charges. They could outright choose to not prosecute person A for bank robbery, but proceed with prosecuting person B for bank robbery, even though they were working together on the same robbery. As an elected official, the DA is supposed to weigh the prospects of actually obtaining a guilty verdict, as well as whether such prosecution would be beneficial to the public or a good use of the DA office’s limited time and budget. Is it a bad look when a DA prosecutes one person but not another? Yes. Are there any guardrails? Yes: a DA cannot abuse their discretion by considering disallowed factors, such as a person’s race or other immutable characteristics. But otherwise, the DA has broad discretion, and ultimately it’s the voters that hold the DA to account.

    Another example: the USA Environmental Protection Agency’s Administrator is authorized by the federal Clean Air Act to grant a waiver of the supremacy of federal automobile emissions laws, to the state of California. That is to say, federal law on automobile emissions is normally the law of the land and no US State is allowed to write their own laws on automobile emissions. However, because of the smog crisis in the 70/80s, the feds considered that California was a special basket-case and thus needed their own specific laws that were more stringent than federal emissions laws. Thus, California would need to seek a waiver from the EPA to write these more stringent laws, because the blanket rule was “no state can write such laws”. The federal Clean Air Act explicitly says only California can have this waiver, and it must be renewed regularly by the EPA, and that California cannot dip below the federal standards. The final requirement is that the EPA Administrator shall issue the waiver if California requests it, and if they qualify for it.

    This means the EPA Administrator does not have discretion, but rather is exercising good judgement: does California’s waiver application satisfy the requirements outlined in the Clean Air Act? If so, the Administrator must issue the waiver. There is no allowance of an “i don’t wanna” reason for non-issuance of the waiver. The Administrator could only refuse if they show that California is somehow trying to do an end-run around the EPA, such as by trying to reduce the standards.

    The third question is: do laws encompass all aspects of everything?. No, laws are only what is legally enforced. There are also rules/by-laws and norms. A rule or by-law is often something enforced by something outside the legal system’s purview. For example, the penalty for violating a by-law of the homeowner’s association might be a revocation of access to the common spaces. For a DnD group, the ultimate penalty for violating a rule might be expulsion.

    Meanwhile, there are norms which are things that people generally agree on, but felt were so commonplace that breaking the norm would make everything else nonfunctional. For example, there’s a norm that one does not use all-caps lock when writing an online comment, except to represent emphasis or yelling. One could violate that norm with no real repercussions, but everyone else would dislike you for it, they might not want to engage further with you, they might not give you any benefit of the doubt, they may make adverse inferences about you IRL, or other things.

    TL;DR: there are unwritten principles that form part of the law, and there’s no way to record all the different non-law rules and social norms that might apply to any particular situation.


  • One way to make this more Pythonic – and less C or POSIX-oriented – is to use the pathlib library for all filesystem operations. For example, while you could open a file in a contextmanager, pathlib makes it really easy to read a file:

    from pathlib import Path
    ...
    
    config = Path("/some/file/here.conf").read_text()
    

    This automatically opens the file (which checks for existence), reads out the entire file as a string (rather than bytes, but there’s a method for that too), and then closes up the file. If any of those steps go awry, you get a Python exception and a backtrace explaining exactly what happened.


  • To many of life’s either-or questions, we often struggle when the answer is: yes. That is to say, two things can hold true at the same time: 1) LLMs can result in job redundancies, and 2) LLMs hallucinate results.

    But if we just stopped the analysis there, we wouldn’t have learned anything. To use this reality to terminate any additional critical thinking is, IMO, wholly inappropriate for solving modern challenges, and so we must look into the exact contours of how true these statements are.

    To wit, LLM-induced job redundancies could come from skills which have been displaced by the things LLMs can do well. For example, typists lost their jobs when businesspeople were expected to operate a typewriter on their own. And when word processing software came into existence for the personal computer, a lot of typewriter companies folded or were consolidated. In the case of LLMs, consider that people do use them to proofread letters for spelling and grammar.

    Technologically, we’ve had spell-check software for a while, but grammar was harder. In turn, an industry appeared somewhere in the late 2000s or early 2010s to develop grammar software. Imagine how the software devs at these companies (eg Grammarly) might be in a precarious situation, if an LLM can do the same work. At least with grammar checking, even the best grammar software still struggles with some of the more esoteric English sentence constructions, so if an LLM isn’t 100% perfect, that’s still acceptable. I can absolutely see the fortunes of grammar software companies suffering due to LLMs, and that means those software devs are indeed threatened by what LLMs can do.

    For the second statement, it is trivial to find examples of LLMs hallucinating, sometimes spectacularly or seemingly ironic (although an LLM would be hard-pressed to simulate the intention of irony, I would think). In some fields, such hallucinations are career-limiting moves for the user, such as if an LLM was used to advise on pharmaceutical dosage, or used to draft a bogus legal appeal and the judge is not amused. This is very much a FAFO situation, where somehow the AI/LLM companies are burdened with none of the risk and all of the upside. It’s like how autonomous driving automotive companies are somehow allowed to do public road tests of their beta-quality designs, but the liability for crashes still befalls the poor sod seated behind the wheel. Thoss companies just keep yapping about how those crashes are all “human error” and “an autonomous car is still safer”.

    But I digress.

    My point is that LLMs have quite a lot of capabilities, and people make a serious mistake when they assume its incompetence in one capacity reflects its competency in another. This is not unlike how humans assess other humans, such as how a record-setting F1 driver would probably be a very good chauffeur for a limousine company. But whereas humans have patterns that suggest they might be good (or bad) at something, LLMs are a creature unlike anything else.

    I personally am not bullish on additional LLM improvements, and think the next big push will require additional academic research, being nowhere near commercialization. But even I have to recognize that some very specific tasks are decent using today’s availabile LLMs. I just don’t think that’s good enough for me to consider using them, given their subscription costs, the possibility of becoming dependent, and being too niche.


  • Using an MSP430 microcontroller, I once wrote an assembly routine that (ab)used its SPI peripheral in order to stream a bit pattern from memory out to a GPIO pin, at full CPU clock rate, which would light up a “pixel” – or blacken it – in an analog video signal. This was for a project that superimposed an OSD onto the video feed of a dashcam, so that pertinent vehicle data would be indelibly recorded along with the video. It was for one heck of a university project car.

    To do this, I had to study the MSP430 instruction timings, which revealed that a byte could be loaded from SRAM into the SPI output register, then a counter incremented, then a comparison against a limit value in a tight loop, all within exactly 8 CPU cycles. And the SPI completes an 8-bit transfer every 8 SPI clock cycles, but the CPU and SPI blocks can use the same clock source. In this way, I can prepare a “frame buffer” of bits to write to the screen – plenty of time during the vertical blanking interval of analog video – and then blast it atop the video signal.

    I think I ended up running it at 8 MHz, which gave me sufficient pixel resolution on a 480i analog video signal. Also related was the task of creating a set of typefaces which would be legible on-screen but also be efficient to store in the MSP430’s limited SRAM and EEPROM memories. My job was basically done when someone else was able to use printf() and it actually displayed text over the video.

    This MSP430 did not have a DMA engine, and even if it did, few engines permit an N-to-1 transaction to write directly to the SPI output register. Toggling the GPIO register directly was out of the question, due to taking multiple clock cycles to toggle a single bit and load the next value. Whereas my solution was a sustained 1 bit per clock cycle at 8 MHz. All interrupts disabled too, except for the vertical and horizontal blanking intervals, which basically dictated the “thinking time” available for the CPU.



  • Restaurants (including franchises of chains) are indeed a major segment of small businesses. Looking more broadly, any industry which: 1) offers a service/product/utility, and 2) has proven to not have a tendency to inflate beyond its fundamental target audience, those are likely to be small businesses. Those are the parameters which stave off any sort of corporate takeovers and consolidations, because they won’t invest in a small business if the prospect of infinite growth isn’t there. So the business stays small. And small is often perfectly fine.

    That is to say, restaurants (humans can only eat so much food), bicycle stores (humans can only ride so much per day), and local produce shops (even in the Central Valley of California, there’s only so much produce to sell, and humans can’t eat infinite quantities) have these qualities.

    But compare those to a restaurant supply warehouse or music equipment store, since those items can be shipped and need no customization by the end user. Consolidation and corporate meddling is possible and probable.

    Then you have industries which are often local and small but are prone to financial hazards, such as real estate agents and used car lenders. Because they get paid as a percentage of the transaction size, if the price of houses or cars go up in an unchecked fashion, the profit margins also increase linearly, which makes them more tempting for corporate involvement.

    There are corporate-owned national chains of real estate agents, self storage, department stores, and payday loan offices in the USA. But I’m not aware of a national chain for bicycle or bicycle accessories. Even regional chains for bicycles are few and far between. Some consolidation has happened there, but by most definitions, a bicycle shop is very much a small business.


  • I’m not a computer engineer, but I did write this comment for a question on computer architecture. At the very onset, we should clarify that RAM capacity (# of GBs) and clock rate (aka frequency; eg 3200 MHz) are two entirely different quantities, and generally can not be used to compensate for the other. It is akin to trying to halve an automobile’s fuel tank in order to double the top-speed of the car.

    Since your question is about performance, we have to look at both the technical impacts to the system (primarily from reduced clock rate) and then also the perceptual changes (due to having more RAM capacity). Only by considering both together can be arrive as some sort of coherent answer.

    You’ve described your current PC as having an 8 GB stick of DDR4 3200 MHz. This means that the memory controller in your CPU (pre-DDR4 era CPUs would have put the memory controller on the motherboard) is driving the RAM at 3200 MHz. A single clock cycle is a square wave that goes up and then goes down. DDR stands for “Double Data Rate”, and means that a group of bits (called a transaction) are sent on both the up and the down of that single clock cycle. So 3200 MHz means the memory is capable of moving 6400 million transactions per second (6400 MT/s). For this reason, 3200 MHz DDR4 is also advertised as DDR4-6400.

    Some background about DDR versus other RAM types, when used in PCs: the DDR DIMMs (aka sticks) are typically made of 8 visually-distinct chips on each side of the DIMM, although some ECC-capable DIMMs will have 9 chips. These are the small black boxes that you can see, but they might be underneath the DIMM’s heatsink, if it has one. The total capacity of these sixteen chips on your existing stick is 8 GB, so each chip should be 512 MB. A rudimentary way to store data would be for the first 512 MB to be stored in the first chip, then the next 512 MB in the second chips, and so on. But DDR DIMMs do a clever trick to increase performance: the data is “striped” across all 8 or 16 chips. That is, to retrieve a single Byte (8 bits), the eight chips on one face of the DIMM are instructed to return their stored bit simultaneously, and the memory controller composes these into a single Byte to send to the CPU. This all happens in the time of a single transaction.

    We can actually do that on both sides of the DIMM, so two Bytes could be retrieved at once. This is known as dual-rank memory. But why should each chip only return a single bit? What if each chip could return 4 bits at a time? If all sixteen chips support this 4-bit quantity (known as memory banks), we would get 64 bits (8 Bytes), still in the same time as a single transaction. Compare to earlier where we didn’t stripe the bits across all sixteen chips: it would have taken 16 times longer for one chip to return what 16 chips can return in parallel. Free performance!

    But why am I mentioning these engineering details, which has already been built into the DIMM you already have? The reason is that it’s the necessary background to explain the next DDR hat-trick for memory performance: multi-channel memory. The most common is dual channel memory, and I’ll let this “DDR4 for Dummies” quote explain:

    A memory channel refers to DIMM slots tied to the same wires on the CPU. Multiple memory channels allow for faster operation, theoretically allowing memory operations to be up to four times as fast. Dual channel architecture with 64-bit systems provides a 128-bit data path. Memory is installed in banks, and you have to follow a couple of rules to optimize performance.

    Basically, dual-channel is kinda like having two memory controllers for the CPU, each driving half of the DDR in the system. On an example system with two 1 GB sticks of RAM, we could have each channel driving a single stick. A rudimentary use would be if the first 1 GB of RAM came from channel 1, and then the second 1 GB came from channel 2. But from what we saw earlier with dual-rank memory, this is leaving performance on the table. Instead, we should stripe/interlace memory accesses across both channels, so that each stick of RAM returns 8 Bytes, for a total of 16 Bytes in the time of a single transaction.

    So now let’s answer the technical aspect of you question. If your system supports dual-channel memory, and you install that second DIMM into the correct slot to make use of that feature, then in theory, memory accesses should double in capacity, because of striping the access across two independent channels. The downside is that for that whole striping thing to work, all channels must be running at the same speed, or else one channel would return data too late. Since you have an existing 3200 MHz stick but the new stick would be 2400 MHz, the only thing the memory controller can do is to run the existing stick at the lower speed of 2400 MHz. Rough math says that the existing stick is now operating at only 75% of its performance, but from the doubling of capacity, that might lead to 150% of performance. So still a net gain, but less than ideal.

    The perceptual impact has to do with how a machine might behave now that it has 16 GB of memory, having increased from 8 GB. If you were only doing word processing, your existing 8 GB might not have been fully utilized, with the OS basically holding onto it. But if instead you had 50 browser tabs open, then your 8 GB of RAM might have been entirely utilized, with the OS having to shuffle memory onto your hard drive or SSD. This is because those unused tabs still consume memory, despite not actively in front of you. In some very extreme cases, this “thrashing” causes the system to slow to a crawl, because the shuffling effort is taking up most of the RAM’s bandwidth. If increasing from 8 GB to 16 GB would prevent thrashing, then the computer would overall feel faster than before, and that’s on top of the theoretical 50% performance gain from earlier.

    Overall, it’s not ideal to mix DDR speeds, but if the memory controller can drive all DIMMs at the highest common clock speed and with multi-channel memory, then you should still get a modest boost in technical performance, and possibly a boost in perceived performance. But I would strongly recommend matched-speed DDR, if you can.