The Anti-Data-Center Movement Is Reshaping Michigan Politics
Climate activist Will Lawrence cofounded the Sunrise Movement. Now, he has shifted his focus in his attempt to compete for a swing-district seat by calling for a data center moratorium.
找到 1389 篇相关文章
Climate activist Will Lawrence cofounded the Sunrise Movement. Now, he has shifted his focus in his attempt to compete for a swing-district seat by calling for a data center moratorium.
Flexion Robotics, a startup founded by ex-Nvidia engineers, has a clever way of training robots to do useful work.
When Logs and Metrics Aren't Enough You have great dashboards. Your log aggregation is solid. But when a user reports "the checkout page is slow," you still spend 30 minutes jumping between services trying to find the bottleneck. That's the gap distributed tracing fills. What Tracing Actually Shows You A trace is a complete picture of a single request as it flows through your system: User Request → API Gateway → Auth Service → Product Service → DB → Cache → Response 5ms 12ms 45ms 120ms 3ms ^ This is your bottleneck Without tracing, you'd see: API Gateway: latency looks fine Auth Service: latency looks fine Product Service: latency is HIGH but why? With tracing, you see the exact DB query inside Product Service that's taking 120ms. Getting Started with OpenTelemetry OpenTelemetry is the standard. Here's a minimal setup: # Python example with Flask from opentelemetry import trace from opentelemetry.instrumentation.flask import FlaskInstrumentor from opentelemetry.instrumentation.requests import RequestsInstrumentor from opentelemetry.instrumentation.sqlalchemy import SQLAlchemyInstrumentor from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter # Setup provider = TracerProvider () provider . add_span_processor ( BatchSpanProcessor ( OTLPSpanExporter ( endpoint = " http://otel-collector:4317 " )) ) trace . set_tracer_provider ( provider ) # Auto-instrument everything FlaskInstrumentor (). instrument_app ( app ) RequestsInstrumentor (). instrument () SQLAlchemyInstrumentor (). instrument ( engine = db . engine ) That's it. Three auto-instrumentations cover 80% of what you need. Custom Spans for the Other 20% Auto-instrumentation gives you HTTP calls and DB queries. Add custom spans for business logic: tracer = trace . get_tracer ( __name__ ) def process_order ( order ): with tracer . start_as_current_span ( " process_order " ) as sp
Would you trust a sci-fi author to program critical AI systems for humanity? No? Yet, that's what we've been doing. Years ago, I remember hearing the argument: "Why don't we just prompt LLMs with Asimov's three laws of robotics ?" It sounds elegant. The laws were designed to constrain artificial minds. Why not use them? Because the model has already read every story where they fail. LLMs are statistical engines designed to autocomplete text. Imagine a story that starts like this: Once upon a time, there was a good little robot who followed the 3 laws of robotics to the letter. Now take human literature and complete the story. Does it end well? ‹ › (function() { var container = document.currentScript.closest('.ltag-slides--carousel'); var track = container.querySelector('.ltag-slides__track'); var slides = track.querySelectorAll('.ltag-slide'); var prevBtn = container.querySelector('.ltag-slides__nav--prev'); var nextBtn = container.querySelector('.ltag-slides__nav--next'); var dotsContainer = container.querySelector('.ltag-slides__dots'); var current = 0; var total = slides.length; for (var i = 0; i < total; i++) { var dot = document.createElement('button'); dot.className = 'ltag-slides__dot' + (i === 0 ? ' ltag-slides__dot--active' : ''); dot.setAttribute('aria-label', 'Go to slide ' + (i + 1)); dot.dataset.index = i; dot.addEventListener('click', function() { goTo(parseInt(this.dataset.index)); }); dotsContainer.appendChild(dot); } function goTo(index) { current = ((index % total) + total) % total; track.style.transform = 'translateX(-' + (current * 100) + '%)'; var dots = dotsContainer.querySelectorAll('.ltag-slides__dot'); for (var i = 0; i < dots.length; i++) { dots[i].classList.toggle('ltag-slides__dot--active', i === current); } } prevBtn.addEventListener('click', function() { goTo(current - 1); }); nextBtn.addEventListener('click', function() { goTo(current + 1); }); })(); It doesn't. Because the entire body of fiction built around those laws exists to explo
Clicking on the links now reveals blank pages and empty PDFs. "Intellectually, it’s not acceptable.”
I recently completed an exploratory data analysis project on the NHANES (National Health and Nutrition Examination Survey) dataset from Kaggle. It's a real-world health survey collected by the CDC covering body measurements, lifestyle habits, and demographic data from thousands of US adults. In this article I'll walk you through exactly what I did — from loading and cleaning the data all the way to running statistical tests — and share what I found along the way. The Dataset The dataset has 5,735 rows and 28 columns , but for this project I focused on 8 columns that were relevant to the questions I wanted to answer: Column Description smoking Has the person smoked at least 100 cigarettes? gender Male or Female age Age in years education Highest level of education weight Weight in kg height Height in cm bmi Body Mass Index Step 1 — Loading and Selecting Columns import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns db = pd . read_csv ( ' NHANES.csv ' ) data = db . loc [:, ( ' SEQN ' , ' SMQ020 ' , ' RIAGENDR ' , ' RIDAGEYR ' , ' DMDEDUC2 ' , ' BMXWT ' , ' BMXHT ' , ' BMXBMI ' )] data = data . rename ( columns = { ' SEQN ' : ' id ' , ' SMQ020 ' : ' smoking ' , ' RIAGENDR ' : ' gender ' , ' RIDAGEYR ' : ' age ' , ' DMDEDUC2 ' : ' education ' , ' BMXWT ' : ' weight ' , ' BMXHT ' : ' height ' , ' BMXBMI ' : ' bmi ' }) One thing worth knowing about NHANES: all the columns come in as numeric codes. 1 means Male, 2 means Female. 1 means the person smoked, 2 means they didn't. You have to map these to readable labels before doing any analysis, otherwise your charts are meaningless. Step 2 — Cleaning the Data Drop the ID column and remove nulls data . drop ( ' id ' , axis = 1 , inplace = True ) data . dropna ( inplace = True ) This brought us from 5,735 rows down to 5,406 — about 6% lost, which is acceptable. Remove outliers using the IQR method The IQR (Interquartile Range) method flags values that fall too far outside the middle 50% of
Despite trade restrictions, China has reclaimed the title of the world's fastest supercomputer for the first time since 2018. LineShine has pushed El Capitan out of number one on the TOP500 ranking. That's despite strict limits on what high-powered computing components can be sold to China by US firms, which dominate the list, with America […]
The fine can now potentially hit 99 million AUD, or $68 million.
In the previous article on hosting a Next.js app on a VPS , I'd left the deployment pipeline as a rough sketch: four lines to say "it ships to production on its own when you push." That's the piece I want to open up here, because it's what separates a VPS you fuss over by hand from infrastructure you can forget about. There's a stubborn myth that CI/CD is a big-company thing, with a dedicated DevOps team and six-figure tooling. Not true. The pipeline that deploys this portfolio fits in two YAML files, you can read it in five minutes, and it gives me back exactly the comfort I liked about Vercel: I push to master , I go grab a coffee, the app is live when I'm back. The one thing I gained along the way is knowing precisely what happens between the git push and the running container. Four steps, in this order Deployment is a chain. On every push to master , GitHub Actions runs lint, security scan, image build, and deploy. What matters is the needs : as long as a step fails, the following ones don't start. A critical vulnerability caught by the scan, and the image never gets built. At all. jobs : lint : # ESLint runs-on : ubuntu-latest # ... security : # Trivy scan (reusable workflow) uses : ./.github/workflows/security.yml build-push : # build the Docker image → push to GHCR needs : [ lint , security ] # ... deploy : # SSH to the VPS → docker compose pull && up -d needs : [ build-push ] # ... Lint first, because it's the cheapest step and there's no point building an image if ESLint is already screaming. The scan next, as a barrier. Then the build, which produces the Docker image and pushes it to GHCR, GitHub's container registry (private, in my case). And finally the deploy, which connects over SSH to the VPS, pulls the new image and restarts the container. Four links, each blocking the next. That's the whole secret. The security scan is in the path, not in a review "for later" This is the one I won't budge on. Dependency security, in a lot of projects, is a Dependabo
You ask the AI for a bibliography. It hands you a title, authors, a journal, a year, a well-formed DOI. Everything is plausible, everything is clean. And one reference in two doesn't exist. Not "approximate": nonexistent. The DOI resolves to nothing, the paper was never written. The reflex is to ask the model again: "are you sure this source is real?" It says yes. Always. You just asked the forger about the authenticity of his forgery. Hallucination is plausible by construction An LLM doesn't store a database of publications. It generates likely sequences of words. A citation, to it, is a shape: a surname, an initial, two more names, a capitalized journal, a recent year, ten DOI digits. It produces that shape perfectly, because that's exactly what it's good at. The content doesn't need to be true to be plausible, it just needs to resemble. That's why a hallucinated reference is so vicious: it doesn't look like an error. A wrong calculation jumps out. An invented citation looks like a real one, until you click. Don't ask the culprit The golden rule fits in one sentence: never ask the model that hallucinated a citation whether that citation is real. For two reasons that compound. First, it doesn't have the information: it has no access to a registry, it can only regenerate something plausible. Second, even if it doubted, its self-evaluation bias pushes it to confirm what it already produced. You get a "yes" worth nothing. Verification has to come from elsewhere. From a source the model neither controls nor can invent: a metadata API. Three filters: existence, credibility, fidelity In my pipeline for writing technical dossiers, no reference enters the document before clearing three filters, in this order. Existence. The DOI must resolve. It's binary, and it's free. Crossref exposes its whole database: curl -s "https://api.crossref.org/works/10.1145/3290605.3300233" \ | jq '.message.title[0], .message.author[0].family, .message["published"]' If the API returns a title a
As the billionaire class gets richer, the growing online community is offering tips on how to survive with very little.
The Euclid space telescope's stunning photo of our galaxy's “crowded heart” captures more than 60 million stars.
Eight kids, eight chairs, one rule: explaining FIFA's best-thirds draw to my 8-year-old Rahul Devaskar Rahul Devaskar Rahul Devaskar Follow Jun 27 Eight kids, eight chairs, one rule: explaining FIFA's best-thirds draw to my 8-year-old # webdev # soccer # math # worldcup Add Comment 14 min read
Instagram users could soon see more ways to tune their content.
Do the benefits of features like dimming and scheduling make up for the constant energy draw needed for connectivity?
The opening kickoff of Super Bowl LVII was still three weeks away when sharp bettors began their work. While casual fans were scrolling through prop bets and debating quarterback matchups on social media, a handful of disciplined bettors with sophisticated models were already identifying the first exploitable edges. Within hours, sportsbooks registered the shift: Kansas City opened at -2.5, but sharp action pushed the line to -3. By game day, it had settled at -2.5 again after public money flooded in on the Chiefs. This seemingly minor dance of numbers contains profound lessons about market efficiency, behavioral psychology, and where consistent value in sports betting actually exists. The difference between sharp money and public money isn't merely a matter of skill—it's a window into how financial markets process information in real time. For researchers, data scientists, and anyone interested in understanding how markets function under uncertainty, betting lines offer a peculiar advantage: instantaneous, objective outcomes. You can know within hours whether your hypothesis was correct. This article explores what line movement data reveals about market inefficiencies, the methodology behind detecting them, and what this teaches us about information asymmetry in competitive markets. The Hidden Market Beneath the Surface Most bettors see a line and make a decision: is this price fair or favorable? But they miss the crucial information happening before they ever see that number. Sportsbooks don't set lines based on game probability—they set them based on where they predict the money will flow. This distinction transforms betting markets into fascinating research subjects. Consider the structure: A sportsbook's primary goal isn't prediction; it's profit through balanced exposure. They're market makers, not forecasters. When sharp bettors arrive first with informational advantages, they move the line. When public money arrives later with no informational advantage but
When the referee checks their watch in the 85th minute, something predictable happens in soccer—but almost nobody is modeling it correctly. I spent three months analyzing 1,085 professional soccer matches using StatsBomb's open data, focusing specifically on goal-scoring patterns in the final 15 minutes of regulation play and stoppage time. What I found challenges the conventional wisdom that late goals are chaotic, random events determined purely by desperation and fortune. Instead, the data revealed a structured pattern that, when properly identified, has produced an 79.3% accuracy rate in backtesting across multiple leagues and seasons. The bookmakers aren't missing this pattern because the pattern doesn't exist—they're missing it because it requires looking at the problem completely differently than traditional sports analytics approaches it. The Setup: Why Late Goals Matter Before diving into methodology, let's establish why this question even matters. Late goals are the most emotionally charged moments in soccer. They're also economically significant. A goal in the 88th minute creates a cascade of outcomes: It flips match results It triggers goal-line drama and potential VAR decisions It creates dramatic shifts in market odds It validates or destroys betting positions The conventional narrative treats late goals as the result of two factors: increased urgency from trailing teams and increased vulnerability from leading teams. This is directionally correct but strategically useless. It's like saying "stock prices move when sentiment changes"—technically true, but not actionable. The real question isn't whether late goals happen more frequently. The real question is: which teams score them, under which specific conditions, with what measurable precursors? Methodology: Building the Dataset I used StatsBomb's open data repository, which contains event-level information from 1,085 professional matches across multiple seasons and competitions. StatsBomb's data inclu
The Night Everything Changed It was 87 minutes into a Premier League match. The score was 1-1. The home team had controlled possession for most of the second half, but their shots were consistently blocked or saved. Then something happened that's been happening for decades, yet nobody seems to adequately explain it: a late goal completely shifted the match outcome. This scene repeats thousands of times across professional soccer every season. But here's what most analysts miss—late goals aren't chaotic, unpredictable events. They follow patterns. Measurable, quantifiable patterns that exist independently of team quality or circumstance. Over the past 18 months, I analyzed 1,085 professional soccer matches using StatsBomb's publicly available open data. What emerged from this analysis wasn't revolutionary in isolation, but when combined with standard soccer metrics, it revealed something striking: late-game scoring (goals in the final 15 minutes of regulation) follows predictable behavioral and tactical patterns that, when properly identified, show a 79.3% correlation with specific pre-match and in-match conditions. This isn't about predicting individual goals with certainty. It's about understanding that late goals exist within a framework—one governed by fatigue, tactical desperation, compressed time, and predictable defensive adjustments. And once you see this framework, you can't unsee it. The Data Foundation Before diving into patterns, let me establish what we're working with. StatsBomb's open data includes detailed shot maps, pass completion sequences, player positioning, and event-by-event timelines from top-tier professional matches. When they made portions of this data publicly available, it created an unusual opportunity: examining thousands of matches with granular timing and contextual information. My analysis focused specifically on: 1,085 professional matches across five seasons (2017-2022) Shot events in the final 15 minutes of regulation (minutes 75-
The sportsbook odds for UFC 287 showed Sean Strickland at +340 against Dricus du Plessis. Most bettors saw a reasonable risk-reward opportunity. What they didn't see—what the market systematically misses—is that fighters in Strickland's exact statistical profile win substantially more often than their odds suggest. When Strickland knocked out du Plessis in the second round, it wasn't luck. It was a textbook case of market inefficiency that data reveals happens repeatedly in MMA. I spent six months building a comprehensive dataset of 500 UFC fights, cross-referencing striking accuracy, takedown defense, fight duration patterns, and historical betting odds against actual outcomes. What emerged was clear: the UFC betting market is inefficient in predictable ways. Certain underdog profiles generate consistent positive return on investment (ROI) that would be impossible if prices reflected true win probabilities. This isn't hindsight bias or cherry-picked examples. This is systematic analysis of where prediction markets get MMA wrong—and how you can identify it before the bell rings. The UFC Analytics Ecosystem: Why Data Matters More Than Ever Five years ago, serious MMA analytics barely existed outside Reddit threads and YouTube channels. Today, the landscape has transformed completely. UFCStats.com provides granular fight data that didn't exist in the sport's early years. Betting markets across DraftKings, FanDuel, and international books generate millions in handle. Meanwhile, fighter training data, coaching staff analytics, and institutional scouting reports are becoming increasingly sophisticated. Yet there's a persistent gap between information availability and information utilization . The casual bettor sees a -250 favorite and assumes the math is settled. Sportsbooks, operating on relatively thin margins and managing liability across thousands of bets, often make conservative assumptions. They price based on public perception, recent results, and popularity rathe
Operating system, a thing that everybody uses but no one talks about. While reading Operating Systems: Three Easy Pieces (OSTEP), my background in C and C++ fueled a growing fascination with memory allocation, virtualization, scheduling, and the intricate mechanics of operating systems. This would be a series of article, the number i am not sure, it will be the amount of content that someone might comfortably read in a 10 min Article. Keeping each piece to a solid 10-minute read is the perfect sweet spot for a developer to read over a cup of coffee. It gives you enough runway to explain a core concept, show the math, and link a practical C/C++ experiment without making their eyes glaze over. Why this Article ? We are often warned against “reinventing the wheel.” However, I firmly believe that building and optimizing modern software is impossible without a fundamental grasp of virtualization, memory allocation, and concurrency. Consider Docker: it functions almost entirely on OS-level virtualization features like Namespaces, cgroups, and isolated filesystems. Similarly, the highly optimized Memory Manager in PostgreSQL only works because it leverages the robust memory management systems already written into the OS kernel. This article aims to bring the core concepts of OSTEP to life through practical experimentation. By accompanying the theory with an open-source repository, my goal is to provide a clear, interactive learning experience that demystifies operating systems. I am not an operating system guru or a Principal Engineer with years of experience, but I hope to become one someday (assuming AI doesn’t replace me first… HeHe ). What I can do is dive in, explore, and try to understand these concepts by actually building things. Because of that, my goal here is to present the findings and experiments I explore rather than giving strong opinions — I’ll leave the comment section for those! Any support, feedback, or contributions from the community will be incredibly