Souk's Notes - Unofficial Summaries

Unofficial, machine-generated summaries, as of 2026-11-11.

Crosstalk SolutionsWorth It?? T-Mobile 5G Home Internet Speed Tests and Overview
  • T-Mobile Home Internet is cheap, contract-free and easy to start. It cost the host $50 a month ($25 for existing T-Mobile phone customers), with a $100 sign-up rebate, and he walked out of a store with the modem in 30 minutes. He says he has no affiliation with T-Mobile and pays for the service himself; it needs solid local 5G coverage.
  • The modem double-NATs and offers no bridge mode or static IP. Plugged into a UniFi UDM Pro's WAN it handed out a private 192.168.x address, and the host found no static-IP option on either the home or small-business service. The UDM Pro at first negotiated at 100 Mbps instead of 1 Gbps, which cleared after swapping the modem's two gigabit ports and rebooting.
  • Measured speeds were high and fairly consistent over a month. A wired Raspberry Pi running a speed-test CLI client every 30 minutes, graphed in Grafana, showed up to about 600 Mbps at night and 250–300 Mbps by day; an iPhone 14 on the modem's Wi-Fi 6 regularly saw about 350 Mbps daytime.
  • Occasional sluggish spells make it unfit as a business primary. About half a dozen times in a month browsing stalled for a couple of minutes, sending the host back to his Comcast Business 600x40 line at almost $350 a month. He judges double NAT bad for VoIP and other real-time services, and a missing static IP a problem where a business WAN IP cannot be dynamic.
  • The host rates it fine for ordinary homes and ideal as backup. For basic browsing and streaming he calls it totally usable, and faster and cheaper than his $110-a-month Starlink at 80–150 Mbps, though Starlink works remotely. He is keeping it as failover on a dual-WAN router, or to carry guest and non-critical traffic.
Polis PanditWhy Ron DeSantis is the Most Dangerous U.S. Politician Today
  • This post includes paid content that is not available publicly. See the original source.
Technology and FriendsKira Soderstrom on Power Platform [TECHNOLOGYANDFRIENDS 737]
  • Low code pairs subject experts with pro developers in hybrid architectures. Soderstrom, a Microsoft engineer on a Power Platform team for about a year, describes building rapidly on the platform's services while adding high-code components where needed, with citizen developers such as accountants or project managers building alongside, or sometimes without, pro developers. Rather than listing what the platform is wrong for, she looks for pieces to incorporate: an MLOps pipeline stays on Azure Machine Learning, but can draw on Dataverse.
  • Built-in security and privacy is the platform's biggest selling point. She calls both moving targets that the platform handles, leaving teams to configure access controls; she says security left until late in a project can block it and cost days, and possibly thousands of hours, of development time.
  • Extend through connectors, custom code and existing patterns. Soderstrom points to hundreds of out-of-the-box connectors such as SharePoint and Adobe Sign, custom connectors to any API, as she built on a recent project for a client's middleware team, custom JavaScript, HTML and CSS, and portal access for external identity providers; she advises first searching for a pattern someone in the same industry has already built.
  • Solutions fit standard CI/CD as diffable configuration files. The Power Platform CLI pulls a solution of Dataverse tables, flows and connectors down as XML and YAML that can go into source control and through validation, CI and CD pipelines, with checks available as Azure DevOps tasks or from the CLI; she says the files are harder to read than code but show changes between versions, and Dataverse is also backed up automatically.
  • She found Playwright workable for end-to-end testing of portals. In a spike eight or nine months earlier, where Selenium was not built in for portals, she says Playwright offered built-in video, screenshots and code generation from clicking through the browser, and could be swapped in and out of her testing pipelines to verify that a flow updated a status in a given row.
Technology and FriendsBrian Korzynski on Machine Learning Challenges for a C# Developer [TECHNOLOGYANDFRIENDS 736]
  • C# developers no longer have to switch to Python for machine learning. Korzynski says that around 2020 he had to choose between C# and machine learning and went to Python, but now does both: ML.NET has matured since 2017, and C# wrappers or ports exist for TensorFlow, Keras, NumPy, Pandas and PyTorch. NumPy.NET wraps the real Python library with all its features, while NumSharp is a native port with about 98% of them.
  • ONNX lets data scientists and application developers each use their own tools. He asks his modelers for an ONNX file, built in whatever framework they prefer, and runs it in C# without Python dependencies, in ML.NET, or hosted in Azure Machine Learning or AWS SageMaker; he describes it as a common format for a neural network's weighted graph, created in about 2017 by Microsoft and Facebook. His reason is that Python's ecosystem suits modeling but its tooling for dependency injection, project structure and UIs does not suit enterprise applications.
  • GPU inference comes from adding a single NuGet package. Some of his document extraction models are large enough to need a GPU even at prediction time, as can vision models like YOLO; he says the ONNX runtime's GPU package brings CUDA and optimizers such as TensorRT without setting up CUDA himself.
  • Building the model is the easy part; data and integration are hard. Korzynski says getting well-labeled data and fitting a model into a C# codebase are the difficult stages, and a cloud-hosted model called over REST simplifies integration; latency matters less than expected because most workloads are not real-time, as with a 5,000-page document where OCR alone takes at least about a second per page.
  • Deploying many models multiplies infrastructure beyond an ordinary app. On premises, he says, an application with 50 models could need 50 Docker containers, several instances of each under Kubernetes, and custom routing between them; his company digitizes microfilm and microfiche, and a project he just finished processed about 2 billion documents, requiring models run across Hadoop. He says some companies chase ML as a buzzword when they do not need it.
Polis PanditWhy TikTok Will Be Banned or Divested in the United States
  • This post includes paid content that is not available publicly. See the original source.
Technology and FriendsJeffrey Miller on Building a Second Brain [TECHNOLOGYANDFRIENDS 735]
  • Capture should be frictionless, but it is not hoarding. Miller presents Tiago Forte's CODE method (Capture, Organize, Distill, Express) from the book Building a Second Brain, which he taught as a Codemash workshop; at capture the point is to get an idea from email, articles or podcasts into a notes app before it evaporates, though he now asks whether he will really benefit from it, having hoarded in the past.
  • Organize notes for actionability, not by subject. Forte's PARA sorts everything into Projects (a goal and an end date), Areas of responsibility (an ongoing quality standard such as health or finances), Resources (reference and hobby material) and Archives (kept but out of the way); Miller says projects usually stem from areas, the same item can fall in different buckets depending on your role, and he has applied the scheme beyond his notes app to OneDrive, Google Drive and Outlook.
  • Distill in layers, each time you return to a note. Under Forte's "progressive summarization", the first read bolds whatever stands out, the next pass reads only the bold and highlights within it, and a later pass adds your own summary at the top; Miller says only the material that keeps energizing you gets the later passes, and each one saves your future self time.
  • Build output from your own stored pieces, choosing them before ordering them. Miller cites Forte's aim of starting no project he is not already 80% done with from prior "intermediate packets", and his advice not to go to Google when it is time to write; Forte's "archipelago of ideas" splits the work into selecting the pieces and then sequencing them in a separate pass, which Miller says he finds hard to do at once.
  • Software can resurface what you read and capture podcast moments. Miller says Readwise, a paid service, pulls in Kindle highlights and shows five a day by default, and he was on a roughly 300-day review streak at recording; Snipd, a free podcast app, clips and transcribes the moment around a triple-tap on his earbuds and sends it to Readwise and Notion (he uses Notion's free tier, with Evernote kept as an archive).
Technology and FriendsPeter Ritchie on Naming Things in Software Projects [TECHNOLOGYANDFRIENDS 734]
  • A team should agree one word per meaning and record it. Ritchie, a software architect, says using update, change and modify interchangeably creates ambiguity, so a team might fix "change" to mean replacing an entity and "modify" to mean altering its attributes; he wants decisions kept somewhere such as SharePoint or GitHub, in the style of architectural decision records, with a domain vocabulary that defines each term, and for teams of teams a weekly or bi-weekly meeting to air them.
  • An "and" in a method name signals it does too much. Ritchie says a long name is fine if it is the correct term in context, but a name that needs "and" usually means the method should be split, which then gives shorter names.
  • Start with placeholder names and rename as understanding grows. He warns against analysis paralysis over perfect names: "test method one" is fine to begin with, so long as names are refactored, or things split into several, as the team's understanding of the problem improves.
  • An interface name should describe a behavior, usually as an adjective. Rather than prefixing a class name with "I", Ritchie suggests turning the verb into an adjective, his example being "transmit" into "transmissive", because the interface should say what something does, not just provide a point for injection.
  • Code should use the business's own language, not a technical one. Ritchie draws on domain-driven design's "ubiquitous language": one vocabulary shared with the business avoids mapping between technical and business terms, which he says introduces ambiguity; understanding the technical vision narrows the words needed, and since customers often cannot say what they want, names will change as feedback comes in. He collects his material in a GitHub repo, which he says holds far more than his hour-long talk.
GCastAzure Active Directory Bulk User Operations [GCast 145]
  • Bulk operations replace the one-at-a-time user form at scale. Under Azure Active Directory's Users blade, Bulk operations offers bulk create, bulk invite and bulk delete; Giard says the web form is fine for a few users but not practical for hundreds or thousands. All three work the same three steps: download a template, edit it (and save it, which the page does not say), then upload it.
  • The CSV template has a required version line and marked required columns. The create template ("user create template.csv") opens with "version:v1.0" on the first line, which must be present; the second row holds the column headers, and columns marked "required" (name, username, initial password, block sign-in yes/no) must be filled or the row fails. Optional fields such as first and last name, job title, department and location can be added later, though Giard notes they matter if you base conditional access on those properties.
  • Upload results are reported per row, with a failure reason. After submitting, a status link shows success and failure counts and, in each row's details, a failure reason beyond the unhelpful "bad request". His demo hit three errors: a username whose domain was not one of the tenant's verified domains (contoso.com and microsoft.com were rejected; only the tenant's initial domain was valid), a leading space before an email address, and a blank line at the end of the file. One row can succeed while another fails, so he removed the user already created before re-uploading.
  • Bulk invite and bulk delete need far fewer columns. The invite template uses the same version line and header format, with only the email address and redirection URL required. The delete template needs only the username, which Giard suggests for removing many accounts at once, such as after divesting a company or dropping a contractor firm.
  • Giard expects the CSV to come from an automated process. He suggests a nightly batch that exports from another system and transforms the data into the template, then checking the status report for rows that failed. He advises keeping the file as CSV rather than converting it to Excel, and renaming and archiving each file as a history of what was attempted.
Crosstalk SolutionsEasy Raspberry Pi Projects for 2023!
  • Pi-hole is the easiest project and the one he uses most. The host says it runs in under 30 minutes as a network-wide ad blocker and DNS server; his dashboard shows it blocking over 30% of outbound queries, and he values it most on his IoT network against devices such as a Roku phoning home. He suggests pairing it with a filtering upstream DNS such as Cisco's FamilyShield for malware and adult content.
  • PiVPN makes a home VPN server simple to stand up. It builds an OpenVPN or WireGuard server for remote access to home files and servers or to use the home connection while travelling, and generates QR codes to set up clients. The host runs it on his own home network and credits its maintainers with keeping it current and easy.
  • OctoPrint is a must-have for anyone with a 3D printer. At its simplest it monitors prints and sends jobs over the network instead of by SD card; plugins add temperature monitors, touchscreen control and Octolapse time-lapses. The host has no tutorial of his own but says the OctoPi image flashes straight from the official Raspberry Pi Imager.
  • Home Assistant is the deepest project and can automate almost anything networked. The open-source server auto-detects smart switches, bulbs, thermostats, vacuums and cameras; the host runs his office lighting from one Stream Deck button, his fish-tank lights and air pump, and his 3D printer's smart power strip on it. He has made no videos on it and points to dedicated channels.
  • His newest build is a scheduled internet speed-test appliance graphed in Grafana. Built to test T-Mobile Home Internet, it layers the Ookla Speedtest CLI on Raspberry Pi OS, writes timestamped results to InfluxDB and graphs them in Grafana, and can be dropped into any network. He says the Grafana install can monitor other data too, and plans a video on it.
GCastManaging Azure Active Directory Groups [GCast 144]
  • Security groups carry permissions; Microsoft 365 groups carry messages. Created from Azure Active Directory > Groups > New group, a security group lets permissions assigned to the group flow automatically to its users or devices. Giard describes a Microsoft 365 group as what used to be a distribution list, so one message reaches everyone in it.
  • A group can optionally be made assignable to Azure AD roles. Answering yes reveals a roles section for picking which built-in roles the group gets; Giard leaves it at no for the demo.
  • Membership is either assigned explicitly or computed by a rule. Assigned, the default, lets you pick users and even other groups as members, plus an owner (Giard says only one owner can be added). Dynamic user and dynamic device membership instead use expressions joined with "and" (meet all criteria) or "or" (meet either), such as city equals Chicago and a given department, or device OS type equals iOS.
  • Members can be added after the group exists. Giard creates a security group with three assigned members, finds it by search in the groups list, and adds more people through its Members page.
Polis PanditThe Dangerous Game of Debt Ceiling Chicken
  • This post includes paid content that is not available publicly. See the original source.
GCastInvite External Users to Azure Active Directory [GCast 143]
  • Inviting brings an outside account in, unlike creating an internal user. Building on creating a user in episode 136, Giard uses Azure Active Directory

    Users > New user > "Invite external user", filling in a name, email address and first and last name. An optional personal message goes into the invitation email, and the user can be pre-placed in groups or a role other than the default user role.

  • Block sign-in holds an invited user until they should start. Giard's example is a contractor who does not begin until the first of next month; he sets it to no so access starts immediately.
  • Optional profile fields pay off in conditional access policies. Location, job title, department, company name and manager are not required, but Giard says they let policies filter on things like users in the United States.
  • Accepting the emailed invitation grants sign-in, not permissions. The email carries an "Accept invitation" link and a consent page; afterwards he signs in at portal.azure.com with his own address but can see almost nothing until an administrator grants access to applications.
GCastSecurity Defaults in Azure Active Directory [GCast 142]
  • Security defaults are a fast baseline, not complete security. Giard calls them "not perfect" but a good way to get started in a hurry. They are switched on under Azure Active Directory > Properties > "Manage security defaults" at the bottom of the blade, by choosing yes and saving.
  • Security defaults cannot coexist with conditional access policies. Any existing conditional access policies must be disabled first, and the security defaults dialog warns you if any remain.
  • The defaults force MFA registration and block legacy protocols. Every user must register for multi-factor authentication before using applications; older protocols such as SMTP and POP3 and certain proprietary ones are refused; and MFA is required for high-security areas, his examples being the Azure portal and the Azure CLI.
  • Turning them off asks only for a reason. Setting it to no prompts for why, then save. Giard expects people to do this when they want the extra flexibility of conditional access policies.
GCastConditional Access Policies in Azure Active Directory [GCast 141]
  • Conditional access policies cannot run alongside security defaults. Giard says security defaults must be deactivated before conditional access policies can be used. Policies are created in Azure Active Directory under the Security tab, Conditional access blade, by creating a new policy and giving it a name.
  • Assignments say which users and applications a policy covers. Users can be all users, specific users or groups, guests and external users, or directory roles; applications can be all cloud apps or selected ones, with a filter builder that requires custom attributes to be configured. Nearly every choice has include and exclude, so a policy can apply to a selection or to everyone except it, and Giard warns against a policy that locks yourself out.
  • Conditions narrow when the policy fires, by risk, device and location. User risk flags a user on a leaked-credential list or behaving strangely; sign-in risk flags unusual activity such as signing in from two distant locations at once, each set to high, medium or low. Other conditions are device platform (e.g. apply to Linux, or to everything except Windows), locations (trusted, selected, or a list of forbidden countries or hostile IP ranges), client app (browser versus mobile app) and a device filter built from expressions on attributes such as device ID or manufacturer.
  • Grant either blocks access or adds a required step first. Giard calls the required steps "speed bumps": multi-factor authentication, a password change, or accepting terms of service before access is allowed. The Session settings set how often the step repeats, for example a sign-in frequency of 4 hours, or not again within the same browser session, since he says repeating MFA on every page request would be an inconvenience.
  • A policy can be created on, off, or report-only. Off lets an administrator configure a policy ahead of time, such as for the start of a quarter, and switch it on later. Report-only, which Giard finds useful, records who would match the policy without enforcing it, to learn whether it is needed at all.
Crosstalk SolutionsDon't Fall For This Email Phishing Attack!
  • The scam email genuinely comes from PayPal, so authentication checks pass. The host's two emails came from service@paypal.com with SPF, DKIM and DMARC all passing, because the scammer sends a real invoice through PayPal's invoicing system; the "View and pay invoice" link and every other link point to real PayPal pages. He guesses the scammer knew from some past leak that he was a Coinbase customer.
  • Logging into PayPal directly is the surest way to expose it. The email claimed a $479 USD payment to Coinbase and warned that cancellation after 48 hours would not be refunded; logging into the account without clicking any link shows no such transaction. The host reads the deadline as pressure to act.
  • The scam pays out through a careless payer or a phone call. The host suspects it hopes someone, such as an accounting department paying invoices without scrutiny, simply pays it, or calls the "help desk" number, where scammers try to take over the caller's computer. He urges sharing the warning with anyone who pays PayPal invoices.
  • The phone numbers were the weakest tell, and both were already dead. One email gave an 888 toll-free number and the other a 213 Los Angeles number, odd for a Silicon Valley company but easy to miss. Calling both from a fresh VoIP number a day after receiving them, the host was hung up on immediately; he infers scammers rotate numbers once one is flagged.
Andrej KarpathyLet's build GPT: from scratch, in code, spelled out.
synopsis

Working in a Google Colab notebook, he builds a decoder-only Transformer from an empty file up to a working character-level Shakespeare generator — the same architecture underlying ChatGPT, minus its fine-tuning stages — training a roughly 10-million-parameter model on the ~1-million-character "tiny Shakespeare" dataset until validation loss falls from an untrained ~4.87 down to 1.48, at which point its output starts to look like recognizable (if nonsensical) Shakespearean-formatted text. The build closely mirrors his own nanoGPT repository, and he closes by mapping every piece back onto GPT-3's actual scale and onto what ChatGPT adds on top.

Data and the simplest possible model. The dataset is tokenized at the character level — a deliberately simple choice, contrasted with GPT's byte-pair or SentencePiece subword tokenizers, which trade a larger vocabulary for shorter sequences. Text becomes a single long tensor of integers, split 90/10 into train and validation sets, and sampled in fixed-length chunks (block size) so the model sees every context length from one token up to the maximum, which matters later during generation. The first working model is a bigram: each token, in isolation, uses an embedding table lookup to directly predict logits for the next token, with no communication between positions. Trained with Adam, this baseline's loss falls from about 4.7 to roughly 2.5 — proof the optimization loop works, but the output is gibberish because each character predicts the next based only on its own identity.

The mathematical trick behind attention. To let earlier tokens influence a later prediction without expensive looping, he shows that multiplying a token sequence by a row-normalized lower-triangular matrix computes a running causal average in one matrix multiplication — averaging in a token's own vector with all preceding ones while never looking ahead. Expressed as a masked softmax (zeroing future positions to negative infinity before normalizing), this same operation becomes the scaffold for self-attention once the uniform triangular weights are replaced by learned, data-dependent ones.

Self-attention itself. Each token emits three vectors via separate linear projections: a query ("what am I looking for"), a key ("what do I contain"), and a value (what actually gets aggregated once another token finds it interesting). Attention weights come from the dot product of every query against every key, masked to block future positions, then softmaxed and used to weight-sum the values — meaning tokens dynamically decide, based on their own content, how much to attend to each earlier token, rather than always averaging uniformly. A critical detail: the raw dot products are divided by the square root of the head size before the softmax, because otherwise their variance grows too large at initialization, driving softmax toward near one-hot outputs that let each token learn from effectively only a single other token. He's careful to frame attention as a general communication mechanism over a directed graph, not something intrinsically tied to language — the causal, future-blind mask is specifically what makes it a decoder rather than the fully-connected encoder used in tasks like sentiment classification, and cross-attention (queries from one source, keys/values from another) is what lets an encoder-decoder system like the original machine-translation Transformer condition generation on a separately-encoded input sequence.

Multi-head attention and computation. Running several smaller attention heads in parallel and concatenating their outputs — analogous to grouped convolutions — lets different heads specialize in different relationships (e.g., a vowel token searching specifically for nearby consonants) rather than forcing one attention pattern to do everything; this dropped validation loss from 2.4 to 2.28. Because attention only lets tokens communicate, without giving them time to "think" about what they gathered, a small per-token feedforward MLP (linear → ReLU → linear) is added after each attention step, further improving loss to 2.24.

Why depth needs residual connections and LayerNorm. Simply stacking multiple communicate-then-compute blocks made the network start to degrade rather than improve, a classic deep-network optimization problem. The fix, borrowed directly from the 2015 ResNet paper, is residual (skip) connections: each block forks off the main pathway, transforms, and adds its output back in, so gradients have an unimpeded "highway" back to the input during backpropagation, with each block's contribution initialized near zero and growing in over training. Paired with LayerNorm (which, unlike BatchNorm, normalizes each token's own feature vector rather than across the batch) applied before rather than after each sub-layer — a deliberate deviation from the original paper's post-norm design, adopted because it works better in practice — this let him stack six full blocks and reach a validation loss of 2.06, with dropout added to control overfitting as the model grew.

Scaling up and comparison to GPT-3. With block size raised to 256, embedding dimension to 384, six attention heads, six layers, and dropout at 0.2 — about 15 minutes of training on an A100 GPU — validation loss reaches 1.48, and generated text starts to visually resemble the structure of the source play. He then sets this ~10-million-parameter model, trained on roughly 300,000 GPT-vocabulary-equivalent tokens, against GPT-3's actual specs: architecturally near-identical hyperparameter choices, but scaled to 175 billion parameters trained on 300 billion tokens — a roughly millionfold increase, requiring thousands of coordinated GPUs rather than one.

Why pretraining alone isn't ChatGPT. A model trained only this way is a "document completer": given a question, it may just continue with more questions or drift into unrelated text, because it has only learned to imitate whatever an internet document containing that text tends to look like. Turning that into an assistant requires a separate, mostly non-public alignment pipeline he did not implement here: supervised fine-tuning on a smaller set of curated question-and-answer-formatted conversations, followed by training a reward model from human rankings of candidate responses, followed by using that reward model to further tune the policy via PPO reinforcement learning — the process OpenAI describes in its ChatGPT blog post, and which nanoGPT itself only covers up through the pretraining stage.

  • A lower-triangular matrix, row-normalized to sum to one, computes a causal running average via a single matrix multiply. He demonstrates this trick concretely — multiplying a triangular matrix of ones (or a softmax over a triangular mask of zeros/negative-infinity) against a value matrix reproduces the same result as an explicit loop averaging each token with only its past — and this is the computational core self-attention builds on.
  • Self-attention makes that averaging data-dependent by having each token emit a query, a key, and a value. Affinities come from the dot product of one token's query against every other token's key, scaled by 1/√(head size) specifically to keep the softmax input from initializing too "peaky" — without that scaling, softmax collapses toward one-hot vectors and each token ends up aggregating information from essentially only one other token.
  • Residual (skip) connections and pre-norm LayerNorm are what make a deep, multi-block Transformer actually trainable. Validation loss on the tiny-Shakespeare data set improved step by step as each piece was added — roughly 2.5 for the bare bigram model, 2.4 with one self-attention head, 2.28 with multi-head attention, 2.24 after adding a per-token feedforward layer, and down to 2.06 once residual connections and LayerNorm let the network stack six blocks without the optimization degrading — reaching 1.48 once the model was scaled up in size and training time.
  • Pretraining alone produces a document completer, not a helpful assistant. He compares his ~10-million-parameter model trained on ~300,000 tokens to GPT-3's architecturally near-identical but far larger 175-billion-parameter model trained on 300 billion tokens, and explains that turning either into something like ChatGPT requires a separate, largely non-public alignment stage — supervised fine-tuning on question/answer-formatted data, then training a reward model from human rankings of candidate responses, then using that reward model to fine-tune the policy with PPO reinforcement learning.
Polis PanditAvatar: The Way of Water Uses Common Tropes but With Important Messages
  • This post includes paid content that is not available publicly. See the original source.
Crosstalk SolutionsOrange Pi 5 - Easy Setup and Overview!
synopsis

The host presents the Orange Pi 5 as an in-stock alternative to the scarce Raspberry Pi, and ends with it booting Ubuntu 22.04 from an M.2 NVMe SSD with no microSD card, benchmarking about ten times faster than SD.

Hardware and trade-offs. The board pairs a Rockchip 8-core CPU, up to 32 GB of RAM and a Mali-G610 GPU with gigabit Ethernet, full-size HDMI and an M.2 slot. Its gaps are no Wi-Fi or Bluetooth, which can only be added by giving up the SSD slot, a single HDMI port, and thin documentation for a board still new.

First boot from microSD. He flashes Orange Pi's Ubuntu Jammy desktop image with balenaEtcher, boots, finds the DHCP address, connects by SSH as root (password "orangepi"), and runs orangepi-config and updates.

Moving to the SSD. The 16 MB SPI flash decides the boot device. If it or the NVMe already holds partitions, they must be deleted with gdisk first, or the bootloader install fails for lack of space. He copies the image across by SCP, installs the bootloader to SPI flash through orangepi-config, and writes the image to the NVMe with dd.

Result. With the card removed it boots in about 10 seconds as a fresh system on a new IP address, so earlier settings must be redone. A reused microSD needs a new UUID or it takes precedence. On pibenchmarks.com the SSD scored 19,924 against roughly 2,000 for SD cards.

  • The Orange Pi 5 is a powerful Raspberry Pi alternative you can actually buy. It has a Rockchip 8-core 64-bit CPU, 4, 8, 16 or 32 GB of RAM, a Mali-G610 GPU rated for 8K at 60 fps, gigabit Ethernet, full-size HDMI and an M.2 slot. The host doubts most buyers need 32 GB on a single-board computer, and would move to an Intel NUC at that point.
  • Its onboard M.2 slot forces a choice between storage and wireless. There is no built-in Wi-Fi or Bluetooth, so adding them means using the M.2 slot for a combo card instead of an NVMe SSD; the Raspberry Pi 4 also keeps dual HDMI. The host found documentation and community answers scarce: the official Orange Pi OS folder was empty, and Armbian added a page only weeks after he got the board.
  • Booting from NVMe works by flashing the bootloader to SPI flash. He boots Orange Pi's Ubuntu 22.04 desktop image from microSD, copies the image over by SCP, installs the bootloader to the 16 MB SPI flash through orangepi-config (System, Install, option 7), then writes the image to the NVMe with dd. Default login is root with password "orangepi"; he says the same process worked for Armbian.
  • A reused SPI flash or microSD card will defeat the M.2 boot. SPI flash that already holds partitions throws a no-space error until they are deleted with gdisk, as must old partitions on the NVMe. The microSD's data volume shares the SSD's UUID and takes precedence if reinserted, so it needs a randomized UUID. The NVMe install is a fresh system with a new DHCP address and settings.
  • The NVMe SSD benchmarked about ten times faster than microSD. On pibenchmarks.com his Kioxia 128 GB NVMe scored 19,924, about sixth among the site's fastest SSD averages (top: 24,307), against roughly 2,000 for SD cards. Cold boot from the SSD took about 10 seconds; the drive cost under $20 on Amazon, and the M.2 needed hot glue for lack of a fitting screw.
Polis PanditAmerican Aid to Ukraine Is Not Free
  • This post includes paid content that is not available publicly. See the original source.
GeoHussarWestern Europe was stupid about its energy policy
  • Western Europe's energy crisis is self-inflicted. The speaker says it declined to drill at home, relied on Russia for more than 40% of its natural gas and on former colonies for other needs, and condemned the US for extracting its own fossil fuels. It is now scrambling to cover oil and gas deficits and complaining about prices.
  • Europe had domestic gas it chose not to develop. The speaker says France has over a hundred years of natural gas deposits and Germany about 40, and that Europe could have built Mediterranean and Atlantic pipelines or invested in Southeastern Europe. The speaker predicts it will take years to recover.
GeoHussarThe US military is $20 trillion ahead in defense spending of everyone else
  • No rival can close America's cumulative military spending lead. The speaker puts total military spending since 1980 at about $1.7 trillion for Russia and $2.1 trillion for China, against $20 trillion for the US from 1980 to 2022, on top of already having the world's best military in 1980. The speaker calls the US $18 trillion ahead, China far behind, and Russia "a pitiful joke in Ukraine".