home.social

Search

1000 results for “Engin”

  1. 2000 tonnes of steel sliding on a few microns of oil!

    Our Extremely Large Telescope (ELT) was tilted for the first time in Oct 2026. To point anywhere in the southern sky the telescope needs to rotate on two different axes. A few months ago it rotated on its vertical axis for the first time. Now, tilting on its horizontal axis is another step in the right direction.

    More: eso.org/public/videos/potw2643

    📹 ESO/Cimolai/Apical/G. Vecchia

    #astrodon #astronomy #astrophysics #space #science #engineering

  2. I had an endpoint that sorts log lines as they come off a queue: route the ERROR ones one way, everything else another. The hot loop is one check, does this line start with "ERROR", and I'd written line.StartsWith("ERROR") without a second thought. It's the most obvious thing you can type.

    Then I had the service under load with a profiler open, and a surprising slice of time was parked inside CompareInfo and the globalization stack underneath it. For a prefix check on ASCII log lines. That's when it clicked that StartsWith(string) doesn't do what I thought it did.

    The default overload is linguistic, not literal


    Here's the thing I'd forgotten. string.StartsWith(string) and string.IndexOf(string), the overloads that take only a string, don't compare characters. They compare text, using the current culture's rules, which on most boxes means routing through ICU for a full linguistic comparison. That's the machinery that knows "ff" and "ff" are the same word, that a soft hyphen shouldn't count, that casing folds differently in Turkish. Handy when you're sorting names a person will read. Total overkill when you're asking whether a byte string begins with five known ASCII letters.

    The fix is to say what you actually meant:

    line.StartsWith("ERROR", StringComparison.Ordinal)

    Ordinal means compare the char values, in order, and stop. No culture, no collation table, no ICU.

    I counted it


    I don't trust my gut on this stuff, so I wrote the smallest thing that would show the gap. Two million log-ish lines in an array, five prefixes mixed in so the comparison has to actually look at characters:

    string[] prefixes = { "INFO ", "WARN ", "DEBUG ", "ERROR ", "TRACE " };
    var lines = new string[2_000_000];
    for (int i = 0; i < lines.Length; i++)
    lines[i] = prefixes[i % prefixes.Length] + "request " + i + " finished in " + (i % 400) + "ms";

    Then count how many start with "ERROR", the polite way and the ordinal way:

    static long CountCulture(string[] lines)
    {
    long n = 0;
    foreach (string s in lines)
    if (s.StartsWith("ERROR")) n++; // CurrentCulture
    return n;
    }

    static long CountOrdinal(string[] lines)
    {
    long n = 0;
    foreach (string s in lines)
    if (s.StartsWith("ERROR", StringComparison.Ordinal)) n++;
    return n;
    }

    The harness is nothing fancy. A stopwatch, a warmup call for each path so the JIT and the ICU tables are hot, then the best time out of seven, with the allocation counter read around each pass:

    static long Measure(Action a, out long bestMs)
    {
    bestMs = long.MaxValue;
    long bytes = 0;
    var sw = new Stopwatch();
    for (int run = 0; run < 7; run++)
    {
    long before = GC.GetAllocatedBytesForCurrentThread();
    sw.Restart();
    a();
    sw.Stop();
    bytes = GC.GetAllocatedBytesForCurrentThread() - before;
    if (sw.ElapsedMilliseconds < bestMs) bestMs = sw.ElapsedMilliseconds;
    }
    return bytes;
    }

    It's a single-file console app on .NET 10, top-level statements, nothing else in it. Here's what came back:

    StartsWith (culture) : 27 ms
    StartsWith (ordinal) : 18 ms
    ratio : 1.5x
    allocated (culture) : 0 bytes
    allocated (ordinal) : 0 bytes

    That was a bit of a letdown, if I'm honest. I'd built this up in my head as the villain and it came in at 1.5x. Real, repeatable, but not the kind of number that changes your afternoon. And neither path allocates a byte, so this is pure CPU, no garbage to chase.

    Then I ran the same question through IndexOf, because plenty of my "does this contain" checks are written the same lazy way:

    IndexOf (culture) : 109 ms
    IndexOf (ordinal) : 30 ms
    ratio : 3.6x

    There's the one that was actually hurting. A substring search under a linguistic comparison is a lot more work than a prefix check. It can't just glance at the front, it has to weigh matches at every position with full collation rules. Roughly 3.6x on the same data. That's the call I should have been worried about from the start.

    These are ratios off a Linux container, not a lab bench with the clocks pinned, so the absolute milliseconds will land somewhere else on your hardware. The shape holds up though: ordinal is cheaper, and substring search is cheaper by a lot more than a prefix check.

    Ordinal isn't a free find-and-replace


    Here's the caveat, and it's a real one. Ordinal and culture don't always give the same answer. That's the entire reason they're separate methods, and it's why you can't just sweep the codebase swapping one for the other.

    string shy = "co­op.log"; // a soft hyphen sits between "co" and "op"
    shy.StartsWith("coop"); // True - culture treats the hyphen as invisible
    shy.StartsWith("coop", StringComparison.Ordinal); // False - ordinal sees the hidden char

    Culture-aware comparison treats that soft hyphen as nothing, so it matches "coop". Ordinal sees nine characters and says no. For log routing, ordinal is exactly what I want: the literal content, invisible characters and all. For anything a human typed and expects to match "naturally", though, like search boxes, usernames, display sorting, the linguistic version is the correct one, and the extra cost is the price of being correct.

    My rule of thumb now: if the strings are protocol rather than prose, so headers, enum names, file extensions, log levels, anything machine-generated, reach for Ordinal or OrdinalIgnoreCase by default. If a person wrote it and a person will read it, leave the culture-aware comparison where it is. The analyzer CA1310 flags exactly these call sites if you switch it on, which beats grepping for them by hand.

    The quiet irony is that ordinal is both faster and usually what you meant for this kind of data. It's just not the default, and the default looks so harmless sitting there.

    So what's the laziest string comparison hiding in your hot path? Check the Contains calls first, those are IndexOf underneath.

    — still benchmarking corners of the standard library nobody asked me to#csharp #dotnet #programming #webdev #software #coding #development #engineering #inclusive #community
    StartsWith Was Asking ICU Every Time

  3. What is CI/CD? Learn continuous integration, delivery and deployment in simple words, follow one code change through a pipeline, with a GitHub Actions example.#cicd #devops #githubactions #tutorial #software #coding #development #engineering #inclusive #community
    What Is CI/CD? Continuous Integration and Delivery Explained Simply
  4. Top 20 PHP interview questions and answers for freshers: PHP basics, variables, OOP, sessions, cookies, MySQL, security and practical coding, explained simply.#php #interview #career #tutorial #software #coding #development #engineering #inclusive #community
    Top 20 PHP Interview Questions and Answers for Freshers
  5. Run curl through a proxy with -x: credentials and encoding, socks5 vs socks5h, env vars, --noproxy, timing with -w, and what exit codes 5, 7 and 97 me#proxies #webscraping #tutorial #devops #software #coding #development #engineering #inclusive #community
    curl proxy: -x, auth, SOCKS5, timing and exit codes
  6. A few years ago, I checked a dependency’s license once, at install time, and never again. That habit is getting expensive.

    License changes aren’t new, but they’re happening often enough that “it’s open source” is no longer a permanent property of a project. It’s a status that can change between releases.

    The pattern is almost always the same.


    The shift nearly always runs one way: from an OSI-approved permissive or copyleft license toward a “source-available” license the Open Source Initiative doesn’t recognize as open source.

    The Business Source License (BSL) is the most common destination. It’s a “delayed open source” license: the vendor sets restrictions up front, and each version converts to a true open-source license after a change date, typically four years out.

    It’s not just the famous cases anymore. A few from this year alone:

    • Loki Mode moved from the MIT License to BSL 1.1 effective March 19, 2026.
    • Unleash announced in June 2026 that its core repository is moving from Apache 2.0 to AGPLv3. AGPL is OSI-approved, so this one is a different kind of change, but it still affects anyone embedding the code.
    • MiniMax moved its M2.7 AI model from MIT to a non-commercial license, which drew immediate backlash.


    Who it actually hurts


    • 1. Small teams and agencies building on top: If your product depends on a library that relicenses, you now have three options: pay, migrate, or fork. Big companies have legal teams for that. A five-person shop usually doesn’t.
    • 2. Contributors: People gave their time to a project under one set of terms. When the company controlling it changes the rules, the community’s work becomes part of a product they no longer fully share in.
    • 3. Downstream projects: Plugins, integrations, and tutorials built around a tool inherit the uncertainty when its license shifts.


    The fair counterargument


    I don’t think vendors are simply villains here. Many of these changes were a response to cloud providers selling managed versions of a project without funding it. Maintainers need a sustainable model, and “be open and hope for donations” has a poor track record.

    It’s also not always one-way. Redis is back under a recognized open-source license for those who choose it, while Valkey continues to be actively developed. Competition between the original and the fork may have pushed both toward better outcomes. Broader data also suggests permissive licensing has been rising, so this isn’t a total collapse of open source.

    What I do now


    • Check who controls the project A single company controlling a project can relicense future versions at any time, while a project run by a neutral foundation with many contributing companies is much harder to change.
    • Read the license on every major upgrade, not just at install.
    • Pin versions so a surprise change doesn’t land in your next deploy.
    • Know your exit. Is there a credible fork? A foundation-backed alternative?
    • Set up license-change alerts for your critical dependencies.


    So, is open source still open?


    My honest answer: the code is still often open. The guarantee isn’t. Open source has always depended on trust, and trust now needs a little due diligence.

    Over to you: Has a license change ever forced your team to migrate? Do you think relicensing is a fair business move, or a betrayal of the community that built the project? Tell me in the comments.#opensource #webdev #discuss #devdiscuss #software #coding #development #engineering #inclusive #community
    Is Open Source Still Open? A Look at Recent License Changes and Who They Hurt

  7. Open jobs at Delivery Hero, HelloFresh, SumUp, Celonis, Helsing, N26, GetYourGuide and others: where they hire, how they label gender in titles, and how pay transparency differs between their US and German postings.#career #jobs #germany #datascience #software #coding #development #engineering #inclusive #community
    German tech companies hire mostly abroad, and none of their 279 German job ads I checked shows a salary
  8. Most teams are still trying to apply classic SEO tactics to an AI-first internet.

    But when your buyers type questions into ChatGPT, Claude, Perplexity or Gemini instead of Google, the job changes. You’re no longer just ranking pages; you’re trying to become the safest, clearest answer those models can give.

    That’s what GEO — Generative Engine Optimization — is about.

    In this article, I’ll break down a practical GEO framework you can use without buying anything: how to audit your AI visibility, close the biggest gaps, and measure progress over time.

    1. Think in entities, not just pages


    Search engines index pages. AI engines reason about entities: brands, people, products, categories.

    If you want to show up in AI-generated answers, you need to make your brand an easy-to-use entity:

    • A crisp, literal description (one sentence)
    • A short list of products / capabilities
    • Clear industries and use cases
    • Canonical URLs that always tell the same story

    A simple template that works well:

    > “[Brand] is a [category] platform for [segment] that helps them [job] using [key mechanism].”

    Drop that exact sentence on your homepage, LinkedIn, GitHub, docs, Medium bio — everywhere. It’s intentionally boring; clarity beats clever when a model has to quote you back to someone.

    2. Run a multi-engine AI visibility audit


    You can get a surprising amount of insight in 30–40 minutes.

    1. Pick 3–5 core prompts
      • “What is [Brand]?”
      • “Best tools for [your category]”
      • “Alternatives to [your competitor] for [job]”


    2. Ask the same prompts in at least 3 engines
      • For example: ChatGPT, Claude, Perplexity, Gemini, Grok.


    3. For each answer, score:
      • Brand recognition (0–3)
      • Industry classification (0–3)
      • Product coverage (0–3)
      • Recommendation strength (0–3)


    Write down what’s wrong, not just the score:

    • Are you missing entirely?
    • Is your industry wrong (e.g. “agency” instead of “product”)?
    • Are key products / modules never mentioned?
    • Are competitors recommended instead of you?

    You now have a quick map of your AI presence.

    3. Turn findings into concrete fixes


    GEO is not about gaming prompts. It is mostly about cleaning up the training data you control.

    Patterns we repeatedly see in audits — and how to address them:

    • Vague positioning: tighten your homepage hero and “About” copy using the one-sentence template above.
    • Thin product story: create a simple “Products” or “Capabilities” page that lists names, 1–2 line summaries, and who each is for.
    • Missing use cases: add short, answer-style sections that explicitly say “Use cases: …” in your docs or blog.
    • No competitive context: publish at least one neutral comparison article (“[Brand] vs [Alt]”) that explains when each tool is a good fit.

    The key is to write these assets in an answer style — factual, concise, low on hype — so AI engines feel safe quoting them.

    4. Fix your structured signals


    Your technical configuration can be a strength or a bottleneck for AI crawlers.

    Minimum viable setup:

    • Clean sitemap that includes your key product, docs, and FAQ pages
    • robots.txt that allows crawling and points to your sitemap
    • links.txt and llms.txt files that highlight your canonical URLs for LLMs
    • Basic schema: WebSite, Organization, Product, SoftwareApplication, FAQPage

    If you are already doing solid technical SEO, you are 70% of the way there — GEO just asks you to be deliberate about which URLs tell your brand’s story.

    5. Measure GEO like a product, not a campaign


    Instead of tracking only traffic or vanity metrics, track how your AI presence itself improves:

    • Number of prompts where you are mentioned at all
    • Number of engines where you show up for a query
    • Accuracy of brand description (on a simple 0–3 scale)
    • Coverage of key products and use cases
    • Relative share of recommendations vs your top 2–3 competitors

    Repeat your manual audit every 4–6 weeks. If you prefer, turn it into a small internal dashboard so marketing and product can see progress.

    Over time, a pattern usually emerges:

    • After the first round of fixes, models stop hallucinating or misclassifying you.
    • As you add answer-style content and comparisons, your brand appears in more recommendations.
    • Once external confirmations (talks, posts, reviews) accumulate, you start to displace incumbents in AI answers.


    6. GEO principles you can apply today


    To recap, a practical GEO playbook for developers and marketers looks like this:

    • Treat every public asset as potential training data.
    • Make your brand’s “one-sentence definition” absolutely obvious.
    • Give AI engines a factual, structured list of products and capabilities.
    • Provide at least one honest comparison versus the tools you actually compete with.
    • Keep your technical signals (sitemap, schema, llms.txt) clean and aligned.
    • Re-audit your AI visibility on a fixed cadence.

    You do not need to abandon SEO for this; most GEO best practices reinforce good technical SEO and content architecture.

    If anything, the AI-first internet is forcing us to write clearer docs, build better information architecture, and measure visibility in a more realistic way.

    That’s a good thing.#ai #llm #marketing #seo #software #coding #development #engineering #inclusive #community
    A Practical Framework for GEO (Generative Engine Optimization)

  9. Install REA (rea-agents) as an MCP server for Claude Code, route binaries, Electron bundles, APKs, firmware and web pages to the right tool, and stay in scope.#reverseengineering #mcp #security #ai #software #coding #development #engineering #inclusive #community
    Setting up REA for agent-driven reverse engineering in Claude Code
Share on Mastodon

Enter the server where you have an account.