<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Bevan Philip</title><description>Recent content from Bevan Philip</description><link>https://bphilip.uk/</link><item><title>Student Loan advertising and perverse incentives</title><link>https://bphilip.uk/blog/2026-02-08-student-loan-advertising-and-perverse-incentives/</link><guid isPermaLink="true">https://bphilip.uk/blog/2026-02-08-student-loan-advertising-and-perverse-incentives/</guid><description>Were a generation of students mislead?</description><pubDate>Sun, 08 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It feels weird to truly understand the terms of your loan nearly a decade after it started, and nearly three years after you started repaying it. Frankly, it feels bad to admit. But that is the case for many of us with the UK Plan 2 Student Loan.&lt;/p&gt;
&lt;p&gt;Of course, the onus was on us. We had the ability to read the Government websites and truly understand the terms, before making the decision. Many of us would have probably made the same decision anyway.&lt;/p&gt;
&lt;p&gt;But students are already overworked. The hardest exams so far are on the horizon. We’ve got to actually apply, and pick our five universities. Some may even be working part-time jobs.&lt;/p&gt;
&lt;p&gt;So, when teachers and trusted adults tell us to effectively ignore the loan, many of us do. &lt;a href=&quot;https://www.theguardian.com/money/2026/feb/06/graduates-student-loans-finances&quot;&gt;So many of us were blind to the true scale of what we were taking on.&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;She was 17 when she first began looking into student finance and 18 when she signed up for it. She says the scale and longevity of the debt was not fully explained. “The way it was explained, it didn’t really capture the long-term nature of it,” she says. “It was underplayed.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;She says the advice from teachers was that the loans would be a tiny percentage of their pay, and it was unlikely they would be repaid in full, with the outstanding balance written off after 30 years.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr/&gt;
&lt;p&gt;I was pretty extensive in my university research. I was trawling through Unistats (now DiscoverUni), to the point where I designed a &lt;a href=&quot;https://github.com/bevan-philip/unistats-cli-browser&quot;&gt;TUI&lt;/a&gt; to extract the data I really wanted from the website, so that I could quickly trawl through the myriad of universities, and the different course permutations that existed.&lt;/p&gt;
&lt;p&gt;Before I’d even started my career, I was already aware of my likely earnings, based on those who had travelled the same path.&lt;/p&gt;
&lt;p&gt;So, despite the fact that I &lt;em&gt;knew&lt;/em&gt; I’d be a high earner, I was still blind to the fact that my interest rate would be doubled once I reached that point. All of my decision making was less about minimizing the loan, but more about maximizing my student experience.&lt;/p&gt;
&lt;p&gt;Looking back, there are a lot of forks in the road, where I made a decision partially based on my naïve understanding of the system. And while, even with the knowledge, I may have made the same decision, I just wish I had the full picture to make it.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;Did teachers have perverse incentives to get us to ignore the realities of the loans?&lt;/p&gt;
&lt;p&gt;We’ve already seen this with the English Baccalaureate. Many students, myself included, were driven to this path by false promises from our teachers, that the EBacc would improve our university admission odds. Of course, anyone who has gone through the system now knows this is false - the EBacc does not matter for any good university&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;However, part of this adoption was driven by Government pressures. &lt;a href=&quot;https://www.sec-ed.co.uk/content/news/the-ebacc-effect-teachers-anger-at-narrowing-curriculum&quot;&gt;Teachers&lt;/a&gt; were &lt;a href=&quot;https://www.tes.com/magazine/archived/no-one-wins-race-perverse-incentives&quot;&gt;actively&lt;/a&gt; &lt;a href=&quot;https://teacherhead.com/2015/06/13/ebacc-for-all-shackles-on-or-off/&quot;&gt;pushing&lt;/a&gt; students towards it, because it would lead to &lt;a href=&quot;https://www.bbc.co.uk/news/education-42568038&quot;&gt;higher placements in league tables&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Just as with the EBacc, institutional incentives may have influenced how student loans were presented to us. Sixth forms and colleges must publish “destination data”, which shows the short-term outcomes for students at the institution. Inevitably, this is used as advertising material.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/1.DZ1EjjLa_ZFUPCP.webp&quot; alt=&quot;Image 1&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1002&quot; height=&quot;59&quot;&gt;&lt;/p&gt;
&lt;p&gt;Given the cultural reverence for university attendance by parents &amp;amp; students, they’ll want to boost the statistics here, even when it isn’t the right option.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;Similarly, did the various Governments have incentives to push students towards this path? A ridiculously high interest rate, and a long-term commitment, allow the Government to extract a lot of wealth from your high earners, all without it being a tax.&lt;/p&gt;
&lt;p&gt;As we now &lt;a href=&quot;https://blog.moneysavingexpert.com/2026/01/beware-plan-2-student-loan-repayment-freeze/&quot;&gt;watch fiscal drag&lt;/a&gt; being applied to the loan, Governments can grow this base of “high earners”, totally separated from the underlying financial data.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;The obvious fix here is properly communicating the reality of the loan. Producing material that communicates the loan in real terms to financially illiterate teenagers. Having educators truly make students understand the reality of the choice they are taking. The loan is complicated, and only grows in complexity throughout your career: you have to communicate as much of this as early as possible, to give students the best foundation to make informed decisions. Even Martin Lewis knows how difficult it is.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It’s impossible to do it accurately. There are too many variables and assumptions, both on your career, income and on what will happen to the economy. I know you’ll hate that answer […]&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.moneysavingexpert.com/2026/01/beware-plan-2-student-loan-repayment-freeze/#ai:~:text=It%27s%20impossible%20to%20do%20it%20accurately%2E%20There%20are%20too%20many%20variables%20and%20assumptions%2C%20both%20on%20your%20career%2C%20income%20and%20on%20what%20will%20happen%20to%20the%20economy%2E&quot;&gt;Martin Lewis&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;But the reality is, will the various parties be interested in this change, while the perverse incentives exist? The loans have only gotten longer: Plan 5 is now 40 years (but without the high earner trap). Demographic change &lt;a href=&quot;https://www.londoncentric.media/p/london-primary-schools-competition-places-amazon-voucher-instagram-adverts&quot;&gt;is only driving schools to more insane methods to gain students&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It is heartening to see the campaign against this rising, but those campaigns need to widen their focus to ensure the next generation doesn’t face the same trap as us.&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;Most universities did this via omission, but I distinctly remember Cambridge University actively calling it out as something they did not consider. &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>The tacit feel of a game</title><link>https://bphilip.uk/blog/2026-01-05-the-tacit-feel-of-a-game/</link><guid isPermaLink="true">https://bphilip.uk/blog/2026-01-05-the-tacit-feel-of-a-game/</guid><description>How game developers and players perceive a game differently.</description><pubDate>Mon, 05 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Something feels wrong with Counter-Strike 2. But nobody knows quite what, if anything.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;My one wish for next season… for Counter Strike to improve their gameplay and their sub-tick if they want to stick to it
&lt;a href=&quot;https://xcancel.com/BLASTPremier/status/2005587095570772097&quot;&gt;NiKo, CS2 professional&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Game developers have a lot of tacit and explicit knowledge about their titles. They know the systems and the interactions between them, and what results they produce.&lt;/p&gt;
&lt;p&gt;But players of a game have a tacit &lt;em&gt;feel&lt;/em&gt; about the game. They can evaluate the end result of these systems far more accurately than most developers can. In Counter-Strike, most complex movement is out of reach of developers (&lt;a href=&quot;https://www.youtube.com/watch?v=ew0xTcLHeiY&quot;&gt;see this incredible example from ropz&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;With the move from CS:GO to CS2, the networking model was overhauled. While the old tick based system runs under the hood, a separate timestamp is networked with each action, to allow for more precise modelling of game events&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. The underlying tick based system has been hardcoded to 64 updates per second.&lt;/p&gt;
&lt;style&gt;.diagram-container {
  margin: 2rem 0;
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
}
.diagram-box {
  border: 2px solid #d1d5db;
  background-color: #f3f4f6;
  border-radius: 0.5rem;
  padding: 0.5rem;
}
@media (prefers-color-scheme: dark) {
  .diagram-box {
    border-color: #6b7280;
    background-color: #374151;
  }
}
.diagram-svg {
  width: 100%;
  max-width: 100%;
  height: auto;
}&lt;/style&gt;
&lt;div class=&quot;diagram-container&quot;&gt;&lt;div class=&quot;diagram-box&quot;&gt;&lt;svg viewBox=&quot;0 0 800 300&quot; class=&quot;diagram-svg text-gray-700 dark:text-gray-300&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;style&gt;.tick-line { stroke: #9CA3AF; }
      .tick-label { fill: #6B7280; }
      .dark .tick-label { fill: #9CA3AF; }
      .event-label { fill: currentColor; }
      .title-text { fill: currentColor; font-weight: bold; }
      .caption-text { fill: #6B7280; }
      .dark .caption-text { fill: #9CA3AF; }&lt;/style&gt;&lt;g id=&quot;csgo-system&quot;&gt;&lt;text x=&quot;400&quot; y=&quot;40&quot; text-anchor=&quot;middle&quot; font-size=&quot;22&quot; class=&quot;title-text&quot;&gt;CS:GO (Tick-Based)&lt;/text&gt;&lt;g id=&quot;csgo-ticks&quot;&gt;&lt;line x1=&quot;120&quot; y1=&quot;80&quot; x2=&quot;120&quot; y2=&quot;220&quot; class=&quot;tick-line&quot; stroke-width=&quot;2.5&quot;&gt;&lt;/line&gt;&lt;text x=&quot;120&quot; y=&quot;65&quot; text-anchor=&quot;middle&quot; font-size=&quot;14&quot; class=&quot;tick-label&quot;&gt;0ms&lt;/text&gt;&lt;line x1=&quot;280&quot; y1=&quot;80&quot; x2=&quot;280&quot; y2=&quot;220&quot; class=&quot;tick-line&quot; stroke-width=&quot;2.5&quot;&gt;&lt;/line&gt;&lt;text x=&quot;280&quot; y=&quot;65&quot; text-anchor=&quot;middle&quot; font-size=&quot;14&quot; class=&quot;tick-label&quot;&gt;15.6ms&lt;/text&gt;&lt;line x1=&quot;440&quot; y1=&quot;80&quot; x2=&quot;440&quot; y2=&quot;220&quot; class=&quot;tick-line&quot; stroke-width=&quot;2.5&quot;&gt;&lt;/line&gt;&lt;text x=&quot;440&quot; y=&quot;65&quot; text-anchor=&quot;middle&quot; font-size=&quot;14&quot; class=&quot;tick-label&quot;&gt;31.3ms&lt;/text&gt;&lt;line x1=&quot;600&quot; y1=&quot;80&quot; x2=&quot;600&quot; y2=&quot;220&quot; class=&quot;tick-line&quot; stroke-width=&quot;2.5&quot;&gt;&lt;/line&gt;&lt;text x=&quot;600&quot; y=&quot;65&quot; text-anchor=&quot;middle&quot; font-size=&quot;14&quot; class=&quot;tick-label&quot;&gt;46.9ms&lt;/text&gt;&lt;/g&gt;&lt;g id=&quot;csgo-events&quot;&gt;&lt;circle cx=&quot;120&quot; cy=&quot;150&quot; r=&quot;7&quot; fill=&quot;#10B981&quot;&gt;&lt;/circle&gt;&lt;text x=&quot;120&quot; y=&quot;120&quot; text-anchor=&quot;middle&quot; font-size=&quot;15&quot; class=&quot;event-label&quot;&gt;Move&lt;/text&gt;&lt;circle cx=&quot;220&quot; cy=&quot;150&quot; r=&quot;7&quot; fill=&quot;#EF4444&quot; opacity=&quot;0.6&quot;&gt;&lt;/circle&gt;&lt;text x=&quot;220&quot; y=&quot;195&quot; text-anchor=&quot;middle&quot; font-size=&quot;13&quot; class=&quot;tick-label&quot;&gt;12ms&lt;/text&gt;&lt;line x1=&quot;227&quot; y1=&quot;150&quot; x2=&quot;273&quot; y2=&quot;150&quot; stroke=&quot;#EF4444&quot; stroke-width=&quot;2&quot; stroke-dasharray=&quot;5,4&quot; opacity=&quot;0.7&quot;&gt;&lt;/line&gt;&lt;polygon points=&quot;273,150 265,154 265,146&quot; fill=&quot;#EF4444&quot; opacity=&quot;0.7&quot;&gt;&lt;/polygon&gt;&lt;circle cx=&quot;280&quot; cy=&quot;150&quot; r=&quot;7&quot; fill=&quot;#EF4444&quot;&gt;&lt;/circle&gt;&lt;text x=&quot;280&quot; y=&quot;120&quot; text-anchor=&quot;middle&quot; font-size=&quot;15&quot; class=&quot;event-label&quot;&gt;Shot&lt;/text&gt;&lt;circle cx=&quot;380&quot; cy=&quot;150&quot; r=&quot;7&quot; fill=&quot;#3B82F6&quot; opacity=&quot;0.6&quot;&gt;&lt;/circle&gt;&lt;text x=&quot;380&quot; y=&quot;195&quot; text-anchor=&quot;middle&quot; font-size=&quot;13&quot; class=&quot;tick-label&quot;&gt;28ms&lt;/text&gt;&lt;line x1=&quot;387&quot; y1=&quot;150&quot; x2=&quot;433&quot; y2=&quot;150&quot; stroke=&quot;#3B82F6&quot; stroke-width=&quot;2&quot; stroke-dasharray=&quot;5,4&quot; opacity=&quot;0.7&quot;&gt;&lt;/line&gt;&lt;polygon points=&quot;433,150 425,154 425,146&quot; fill=&quot;#3B82F6&quot; opacity=&quot;0.7&quot;&gt;&lt;/polygon&gt;&lt;circle cx=&quot;440&quot; cy=&quot;150&quot; r=&quot;7&quot; fill=&quot;#3B82F6&quot;&gt;&lt;/circle&gt;&lt;text x=&quot;440&quot; y=&quot;120&quot; text-anchor=&quot;middle&quot; font-size=&quot;15&quot; class=&quot;event-label&quot;&gt;Jump&lt;/text&gt;&lt;/g&gt;&lt;text x=&quot;400&quot; y=&quot;260&quot; text-anchor=&quot;middle&quot; font-size=&quot;15&quot; class=&quot;caption-text&quot;&gt;Events snapped to nearest tick boundary&lt;/text&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div class=&quot;diagram-box&quot;&gt;&lt;svg viewBox=&quot;0 0 800 280&quot; class=&quot;diagram-svg text-gray-700 dark:text-gray-300&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;style&gt;.tick-line { stroke: #9CA3AF; }
      .tick-label { fill: #6B7280; }
      .dark .tick-label { fill: #9CA3AF; }
      .event-label { fill: currentColor; }
      .title-text { fill: currentColor; font-weight: bold; }
      .caption-text { fill: #6B7280; }
      .dark .caption-text { fill: #9CA3AF; }&lt;/style&gt;&lt;g id=&quot;cs2-system&quot;&gt;&lt;text x=&quot;400&quot; y=&quot;40&quot; text-anchor=&quot;middle&quot; font-size=&quot;22&quot; class=&quot;title-text&quot;&gt;CS2 (Sub-Tick)&lt;/text&gt;&lt;g id=&quot;cs2-ticks&quot;&gt;&lt;line x1=&quot;120&quot; y1=&quot;80&quot; x2=&quot;120&quot; y2=&quot;200&quot; class=&quot;tick-line&quot; stroke-width=&quot;2.5&quot;&gt;&lt;/line&gt;&lt;text x=&quot;120&quot; y=&quot;65&quot; text-anchor=&quot;middle&quot; font-size=&quot;14&quot; class=&quot;tick-label&quot;&gt;0ms&lt;/text&gt;&lt;line x1=&quot;280&quot; y1=&quot;80&quot; x2=&quot;280&quot; y2=&quot;200&quot; class=&quot;tick-line&quot; stroke-width=&quot;2.5&quot;&gt;&lt;/line&gt;&lt;text x=&quot;280&quot; y=&quot;65&quot; text-anchor=&quot;middle&quot; font-size=&quot;14&quot; class=&quot;tick-label&quot;&gt;15.6ms&lt;/text&gt;&lt;line x1=&quot;440&quot; y1=&quot;80&quot; x2=&quot;440&quot; y2=&quot;200&quot; class=&quot;tick-line&quot; stroke-width=&quot;2.5&quot;&gt;&lt;/line&gt;&lt;text x=&quot;440&quot; y=&quot;65&quot; text-anchor=&quot;middle&quot; font-size=&quot;14&quot; class=&quot;tick-label&quot;&gt;31.3ms&lt;/text&gt;&lt;line x1=&quot;600&quot; y1=&quot;80&quot; x2=&quot;600&quot; y2=&quot;200&quot; class=&quot;tick-line&quot; stroke-width=&quot;2.5&quot;&gt;&lt;/line&gt;&lt;text x=&quot;600&quot; y=&quot;65&quot; text-anchor=&quot;middle&quot; font-size=&quot;14&quot; class=&quot;tick-label&quot;&gt;46.9ms&lt;/text&gt;&lt;/g&gt;&lt;g id=&quot;cs2-events&quot;&gt;&lt;circle cx=&quot;120&quot; cy=&quot;140&quot; r=&quot;7&quot; fill=&quot;#10B981&quot;&gt;&lt;/circle&gt;&lt;text x=&quot;120&quot; y=&quot;115&quot; text-anchor=&quot;middle&quot; font-size=&quot;15&quot; class=&quot;event-label&quot;&gt;Move&lt;/text&gt;&lt;text x=&quot;120&quot; y=&quot;170&quot; text-anchor=&quot;middle&quot; font-size=&quot;13&quot; fill=&quot;#10B981&quot;&gt;0.0ms&lt;/text&gt;&lt;circle cx=&quot;220&quot; cy=&quot;140&quot; r=&quot;7&quot; fill=&quot;#EF4444&quot;&gt;&lt;/circle&gt;&lt;text x=&quot;220&quot; y=&quot;115&quot; text-anchor=&quot;middle&quot; font-size=&quot;15&quot; class=&quot;event-label&quot;&gt;Shot&lt;/text&gt;&lt;text x=&quot;220&quot; y=&quot;170&quot; text-anchor=&quot;middle&quot; font-size=&quot;13&quot; fill=&quot;#EF4444&quot;&gt;12.0ms&lt;/text&gt;&lt;circle cx=&quot;380&quot; cy=&quot;140&quot; r=&quot;7&quot; fill=&quot;#3B82F6&quot;&gt;&lt;/circle&gt;&lt;text x=&quot;380&quot; y=&quot;115&quot; text-anchor=&quot;middle&quot; font-size=&quot;15&quot; class=&quot;event-label&quot;&gt;Jump&lt;/text&gt;&lt;text x=&quot;380&quot; y=&quot;170&quot; text-anchor=&quot;middle&quot; font-size=&quot;13&quot; fill=&quot;#3B82F6&quot;&gt;28.0ms&lt;/text&gt;&lt;/g&gt;&lt;text x=&quot;400&quot; y=&quot;240&quot; text-anchor=&quot;middle&quot; font-size=&quot;15&quot; class=&quot;caption-text&quot;&gt;Events occur at precise sub-tick timestamps&lt;/text&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;&lt;p class=&quot;text-center text-sm text-gray-600 dark:text-gray-400 mt-2 italic&quot;&gt;Comparison of networking systems: CS:GO forces events to tick boundaries, while CS2 preserves precise timing&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;One assumption that immediately wrong from the developer side, was that sub-tick would rectify differences in grenade trajectories across tick rates (grenade throws involving jumping behave different from 64-tick to 128-tick). This did not prove to be the case, and was “resolved” by hard-coding the tick rate.&lt;/p&gt;
&lt;p&gt;But beyond all of this, players have continually complained about the game feeling “off”. This is a vague feeling, that is difficult to appreciate. And indeed, the first thing that comes to mind is an anecdote from Minh Le, where he describes &lt;a href=&quot;https://youtu.be/-yDM9XRK2lU?t=500&quot;&gt;artificially lowering the ping&lt;/a&gt; on the scoreboard to make the game appear more responsive, which tricked people.&lt;/p&gt;
&lt;p&gt;However, saying that players cannot identify minute differences through game play alone is not accurate. In an experiment, &lt;a href=&quot;https://www.youtube.com/watch?v=6f5fEgSRAKg&quot;&gt;professional player ropz&lt;/a&gt; was able to accurately identify the tick rate of the server he was playing on through aim and movement.&lt;/p&gt;
&lt;p&gt;When a large group of them say something is wrong… there is something worth exploring. I’m reminded of the anecdote of &lt;a href=&quot;https://youtu.be/0zqeTYuXUig?t=149&quot;&gt;Jim Clark&lt;/a&gt; noticing that a single wheel bearing was starting to wear while driving, which was not noticeable without completely disassembling the car&lt;/p&gt;
&lt;p&gt;The problem is: how do you test for this? A “feeling” is not empirical evidence. Even &lt;a href=&quot;https://www.reddit.com/r/GlobalOffensive/comments/1blc8ks/when_will_crouchjumping_be_fixed/kw4flqo/&quot;&gt;inconsistent bugs&lt;/a&gt; can be difficult for developers to reproduce&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;, if they don’t have the requisite understanding of the game mechanic.&lt;/p&gt;
&lt;p&gt;Developers don’t need to be hyper-skilled to produce great games. Personally, the game &lt;em&gt;design&lt;/em&gt; of Counter-Strike continues to be fantastic, despite the developers not being outrageously skilled. However, Counter-Strike is predicated on being a simplistic&lt;sup&gt;&lt;a href=&quot;#user-content-fn-3&quot; id=&quot;user-content-fnref-3&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; game, where players advantage themselves through precise gameplay. For a game like this, solving this gap is crucial to providing the best experience for players.&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;This is an oversimplification of the network model. But it is good enough to understand the base premise. &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;This bug was not the most difficult to replicate: even I, a relatively middle of the road player, could do so frequently enough. This demonstrates how different the experience for a developer can be. This would cause furore a day later, when a &lt;a href=&quot;https://www.youtube.com/clip/UgkxKyBDq-2LKYp2LIsbiUHcJAcn3lD3q8Ujj&quot;&gt;player lost a round&lt;/a&gt; in the on-going Valve sponsored event, because of this bug. &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-3&quot;&gt;
&lt;p&gt;In contrast to the closest competitor VALORANT, where agent abilities can dictate a round. &lt;a href=&quot;#user-content-fnref-3&quot; data-footnote-backref aria-label=&quot;Back to reference 3&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>How the world changed around Far Lands or Bust</title><link>https://bphilip.uk/blog/2025-10-05-how-the-world-changed-around-far-lands-or-bust/</link><guid isPermaLink="true">https://bphilip.uk/blog/2025-10-05-how-the-world-changed-around-far-lands-or-bust/</guid><description>Nostalgic retrospection on a Minecraft adventure</description><pubDate>Sun, 05 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;On October 4th 2025, kurtjmac completed his fourteen and a half year long journey to walk to the Far Lands in Minecraft. The first to take on daunting challenge, it was a great moment to watch.&lt;/p&gt;
&lt;p&gt;Kurtjmac is not the first to have reached it through walking in the Overworld, though. While there are hundreds of thousands of points on the Minecraft map Kurt reached first, throughout the years, people have taken on the mantle, and frankly blitzed it.&lt;/p&gt;
&lt;p&gt;To me, this is not a failure of Kurt: but rather, a reflection of how the world around Far Lands or Bust (FLoB) has changed so dramatically.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;This is what YouTube looked like when FLoB #1 (originally a regular episode of a Let’s Play series) was uploaded on March 6th, 2011.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/1.BLhJgdCW_Zx7h5H.webp&quot; alt=&quot;Internet Archive screenshot of the YouTube homepage in 2011&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1038&quot; height=&quot;840&quot;&gt;
OK, so I think the Internet Archive’s strange activity has made the recommended videos strange. At least they’re related to the videos the person was watching…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The earliest archive of the upload page looks like this:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/2.BvV_NJ2t_Z1ugbP3.webp&quot; alt=&quot;Internet Archive screenshot of YouTube watch page of FLoB #1&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1043&quot; height=&quot;654&quot;&gt;&lt;/p&gt;
&lt;p&gt;It was &lt;a href=&quot;https://www.youtube.com/watch?v=LAVHpMJdA9c&quot;&gt;March 28th, 2011&lt;/a&gt; where he would officially convert the series from a Let’s Play, to an expedition to the Far Lands.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;To put this all into perspective,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Minecraft was at Beta 1.3 for the start of his adventure (he would stop upgrading after Minecraft Beta 1.7.3, as the Far Lands was fixed after this),&lt;/li&gt;
&lt;li&gt;Minecraft was 2 years into development, and would release version 1.0 at the end of the year,&lt;/li&gt;
&lt;li&gt;Roughly &lt;a href=&quot;https://archive.is/fgmAx&quot;&gt;~2 million copies&lt;/a&gt; of the game were sold at this time,&lt;/li&gt;
&lt;li&gt;Baby by Justin Bieber would be the most viewed video on the platform, with &lt;a href=&quot;https://web.archive.org/web/20110307092428/https://www.youtube.com/watch?v=kffacxfA7G4&quot;&gt;481 million views&lt;/a&gt;,&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/3.CWk0DClN_Xlibf.webp&quot; alt=&quot;Internet Archive screenshot of Justin Bieber&apos;s Baby in March 2011&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;670&quot; height=&quot;1021&quot;&gt;
We look to still have been in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Reply_girl&quot;&gt;Reply Girl&lt;/a&gt; era of the platform.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;YouTube still used Adobe Flash,&lt;/li&gt;
&lt;li&gt;Ray William Johnson was the most subscribed YouTuber at this time, with 3 million (!) subscribers,&lt;/li&gt;
&lt;li&gt;PewDiePie, who would later become the first and only gamer to take the top spot, had 8,000 subscribers at this time (his forgotten password main channel was ~20,000),&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Outside of the worlds of YouTube &amp;amp; Minecraft,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Samsung Galaxy S2 was launched a month earlier,&lt;/li&gt;
&lt;li&gt;The iPhone 4 was the newest available iPhone at the time - the first iPhone with a front-facing camera, and the first one with FaceTime,&lt;/li&gt;
&lt;li&gt;Twitch was spun out of Justin.tv 3 months after the start of FLoB,&lt;/li&gt;
&lt;li&gt;Vine would be launched a year later, and died in 2016,&lt;/li&gt;
&lt;li&gt;Twitter would IPO a year later,&lt;/li&gt;
&lt;li&gt;Instagram was acquired by Facebook a year later, and WhatsApp 3 years later,&lt;/li&gt;
&lt;li&gt;Snapchat was launched in September of that year,&lt;/li&gt;
&lt;li&gt;Funkmaster Flex would preview &lt;a href=&quot;https://www.youtube.com/watch?v=xNH43Xf24nQ&quot;&gt;Otis&lt;/a&gt;, the 2nd single from Jay-Z and Kanye’s Watch The Throne, a month later,&lt;/li&gt;
&lt;li&gt;Red by Taylor Swift was over a year and a half away,&lt;/li&gt;
&lt;li&gt;The Number #1 song in America was Lady Gaga’s Born This Way,&lt;/li&gt;
&lt;li&gt;The Number #1 song in the UK was Adele’s Someone Like You,&lt;/li&gt;
&lt;li&gt;Bin Laden would be killed 2 months later,&lt;/li&gt;
&lt;li&gt;We would still be years out from gay marriage being legalised across the United States,&lt;/li&gt;
&lt;/ul&gt;
&lt;hr/&gt;
&lt;p&gt;Social media usage has sky rocketed. Phone ownership went &lt;a href=&quot;https://www.pewresearch.org/internet/fact-sheet/mobile/&quot;&gt;from 35% of the population to 95%&lt;/a&gt;. Facebook, the deadest of social networks, &lt;a href=&quot;https://www.zdnet.com/article/facebook-has-over-425-million-mobile-users/&quot;&gt;went from 845 million DAU&lt;/a&gt; to &lt;a href=&quot;https://www.sec.gov/Archives/edgar/data/1326801/000132680120000013/fb-12312019x10k.htm&quot;&gt;1.66 billion&lt;/a&gt; by 2019 (other than aggregation services like Statista, this data isn’t the easiest to find).&lt;/p&gt;
&lt;p&gt;Twitch’s monthly hours watched in 2016 was 600,000. In 2025, it is 2.5 million, down from a peak of 3 million in 2021.&lt;/p&gt;
&lt;p&gt;When Kurt started his adventure, YouTube was still not a firmly established full time job except for those at the top. The idea of spending all of your time in Minecraft was not only culturally strange, it was financially irresponsible. Remember: Minecraft,&lt;/p&gt;
&lt;p&gt;When KilloCrazyMan dedicated 9 months to this feat, it was no longer a absurd thing to do. While he started before the pandemic, it would only enable him to dedicate more hours to the effort. These days, people are putting in &lt;a href=&quot;https://www.youtube.com/playlist?list=PL50KQ_8ZpFRnoAc8NlMvgrw2HS3Szp0hi&quot;&gt;multiple 11 hour shifts&lt;/a&gt; to speedrun the game. Throughout, he appears to abuse a boat exploit to go as fast as possible.&lt;/p&gt;
&lt;p&gt;Kurt was doing a few hour long videos per week, along with occasional subathons where he would dedicate more time (even still, these were short compared to the competition). But more than that: Kurt took his time. The journey had multiple charity events, and raised over half a million for various organisations. Even on the stream where he planned to reach the Far Lands, he stopped multiple times to take pictures of unique generation, create monuments for milestones, and investigate spawners. And of course, his dog “Wolfie” was a constant companion to him throughout the entire adventure.&lt;/p&gt;
&lt;p&gt;The end of Far Lands or Bust is meaningful to me because it feels like a relic from a bye-gone era. I’m sure there are smaller YouTubers continuing on this style, but mainstream internet culture seems to have moved along.&lt;/p&gt;
&lt;p&gt;Whatever the case: well done, Kurt.&lt;/p&gt;</content:encoded></item><item><title>Server owners are beginning to badly optimise again</title><link>https://bphilip.uk/blog/2025-09-01-server-owners-are-beginning-to-badly-optimise-again/</link><guid isPermaLink="true">https://bphilip.uk/blog/2025-09-01-server-owners-are-beginning-to-badly-optimise-again/</guid><pubDate>Mon, 01 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;CYBERSHOKE is a large CS2 community server provider (see &lt;a href=&quot;https://bphilip.uk/blog/2025-08-25-the-cs2-server-browser-where-community-goes-to-die/&quot;&gt;my previous post for a hint of their size&lt;/a&gt;). One of their gimmicks has been “optimising” the performance of the game, as the game has a lot to be desired on this front.&lt;/p&gt;
&lt;p&gt;They recently &lt;a href=&quot;https://x.com/M0st1ce/status/1958368095376167398&quot;&gt;raised the point&lt;/a&gt; that CS2 does not engage in occlusion culling: not rendering objects and players outside of the viewable distance. The predecessor, CS:GO, did.&lt;/p&gt;
&lt;p&gt;This is bad for both performance and for combating cheating&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;CYBERSHOKE decided to deploy their own implementation on their servers… and boy is it flawed.&lt;/p&gt;
&lt;p&gt;This was on a 5v5 competitive server.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Teammates don’t send information out of distance, causing the tooltip above their head to spontaneously disappear.&lt;/li&gt;
&lt;li&gt;The bomb position does not update when you leave an area. If the bomb moves while you’re away, the game still believes the bomb is there even when you return. It shows up on the radar, and a phantom bomb light can be occasionally seen, but not the bomb.&lt;/li&gt;
&lt;li&gt;The radar position seems to have serious update rate issues.&lt;/li&gt;
&lt;li&gt;The sound to distance mapping is broken: the sound is inconsistent to their actual distance, or what you’d expect in standard Valve matchmaking.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To add to this, the pperformance uplift to clients is pretty marginal: nowhere near the 10-20% promised.&lt;/p&gt;
&lt;p&gt;I don’t want to blame CYBERSHOKE here: they’ve earnestly tried to do something useful. But this harks back to the days when server operators tried to weasle additional performance out of their servers by performing all sorts of arcane hacks. And the end result worked, but bugs would be festered all over the place.&lt;/p&gt;
&lt;p&gt;This practice stopped because CS:GO eventually became heavily optimised out of the box. CS2 isn’t, and so we can expect this to continue, until it is.&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;Some information about this in a &lt;a href=&quot;https://bphilip.uk/blog/2024-07-29-evaluating-kernel-level-anti-cheats-as-a-consumer/#server-side-measures&quot;&gt;previous article I wrote&lt;/a&gt;. &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Exploring the tragedy of the Counter-Strike 2 server browser</title><link>https://bphilip.uk/blog/2025-08-25-the-cs2-server-browser-where-community-goes-to-die/</link><guid isPermaLink="true">https://bphilip.uk/blog/2025-08-25-the-cs2-server-browser-where-community-goes-to-die/</guid><description>An examination of the mess that is the CS2 server browser.</description><pubDate>Mon, 25 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;For those who enjoy Counter-Strike community servers, the situation in Counter-Strike 2 is rather dire.&lt;/p&gt;
&lt;p&gt;An avalanche of spam has rendered the server browser unusable. The transition from Global Offensive killed multiple small communities. And large server providers have taken advantage of these problems to monopolise the market.&lt;/p&gt;
&lt;p&gt;Trying to find a server either involves capitulating to these big vendors, or trawling through a trench of spam.&lt;/p&gt;
&lt;p&gt;Scraping the server browser allows us to have some insight into the state of the market.&lt;/p&gt;
&lt;h2 id=&quot;getting-the-servers&quot;&gt;Getting the servers&lt;/h2&gt;
&lt;p&gt;The first task was extracting servers from Valve’s master list.&lt;/p&gt;
&lt;p&gt;This is not a trivial matter: Valve provide a REST endpoint for doing so, but the endpoint is restricted to ~10-50k results per query, and does not provide any pagination support. This is because the data is extremely volatile, changing on every single query.&lt;/p&gt;
&lt;p&gt;You can provide query parameters to change what servers are returned. By performing multiple segmented queries (i.e. by polling for maps individually, querying by different regions), and polling over a long period of time, we can gather a lot more servers. We store the maximum player count, so that we can get a feel for how occupied a server is.&lt;/p&gt;
&lt;p&gt;The best way to approach this technique would have been to replicate Steam’s server browser. However, this would still require segmentation (due to the volume of servers), and has a messier authentication story.&lt;/p&gt;
&lt;p&gt;After pulling this data, I threw it into a DuckDB database to analyse.&lt;/p&gt;
&lt;h2 id=&quot;the-spam-problem&quot;&gt;The spam problem&lt;/h2&gt;
&lt;p&gt;Across an hour period with ~1.1m active players, we pulled ~92,000 community servers with ~500,000 players. We pulled ~144,000 Valve servers, with ~910,000 players.&lt;/p&gt;
&lt;p&gt;There is already a problem here: there are nearly 400,000 unexpected players.&lt;/p&gt;
&lt;p&gt;Our method of sampling does have double-counting issues: if a player moves servers, they will be counted twice in the data set.&lt;/p&gt;
&lt;p&gt;However, another issue is causing us trouble: fake servers. These are servers that report high player counts, but in reality, they have no players at all.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/2.ZJJh2Wml_Zv1nj5.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2555&quot; height=&quot;1200&quot;&gt;
For a regular user, this is the experience of trying to find a community server.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Counter-Strike is usually a 5v5 game, but community servers can go up to 32 players. If we remove all servers above 32 players from our data set, we remove 200,000 players from our data set.&lt;/p&gt;
&lt;p&gt;This still only captures a portion of the spam:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/1.DjXU7vst_Z12KK8M.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1388&quot; height=&quot;332&quot;&gt;
This query eliminates many legitimate servers, but we can still find spam here.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Beyond fake servers, another form of spam is simply having a lot of real servers occupy the server list.&lt;/p&gt;
&lt;p&gt;Here are a sample of servers that are spam, either by being fake, or by suffocating the list:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1290 servers with the name &lt;code&gt;&amp;#39;Registre-se e jogue @ gamersclub.com.br&amp;#39;&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;These are legitimate but inaccessible servers for the third party matchmaking service GamersClub. Ideally, these would not be visible on the server list.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;650 servers with the name &lt;code&gt;MIRAGE | ЧИЛОВЫЙ СЕРВЕР #3&lt;/code&gt;, and another 650 servers with the name &lt;code&gt;MIRAGE | ЧИЛОВЫЙ СЕРВЕР #1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;~2000 servers with the prefix &lt;code&gt;stalnoy&lt;/code&gt;, with a total of 0 players.&lt;/li&gt;
&lt;li&gt;Servers with the name &lt;code&gt;GPT*&lt;/code&gt; had a combined total of 1238 players across 18 servers, for an average of 69 players per server.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-and-why&quot;&gt;How, and why?&lt;/h2&gt;
&lt;p&gt;Valve requires game servers to be registered, using Game Server Login Tokens (GSLTs). These are associated with your Steam ID, and require you to have an account that owns the game and is in good standing.&lt;/p&gt;
&lt;p&gt;But this system has been largely evaded. For one, this system requires enforcement from Valve to provide any meaningful results. The other big problem is that spammers have access to a lot of Counter-Strike accounts. Sites offer Counter-Strike 2 accounts for sale for less than a £1.&lt;/p&gt;
&lt;p&gt;The main reason people engage in spam is advertisement. If players can only see your server… they might try it out. While the servers may be fake, they can proxy you to real servers, albeit without the player numbers that were advertised.&lt;/p&gt;
&lt;h2 id=&quot;the-big-fish&quot;&gt;The big fish&lt;/h2&gt;
&lt;p&gt;Amongst the spam, a significant portion of the market has been captured by large providers.&lt;/p&gt;
&lt;p&gt;To identify server providers, the server name was broken down per word (and cleaned up), common words (like “mirage”) were removed, and then for each word, a cumulative total of various statistics was gathered.&lt;/p&gt;















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align:right&quot;&gt;Rank&lt;/th&gt;&lt;th style=&quot;text-align:left&quot;&gt;Keyword&lt;/th&gt;&lt;th style=&quot;text-align:left&quot;&gt;Total Players&lt;/th&gt;&lt;th style=&quot;text-align:right&quot;&gt;Server Count&lt;/th&gt;&lt;th style=&quot;text-align:right&quot;&gt;Avg Players per Server&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;1&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;fb-csru&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;58,755&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;1654&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;35.5&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;2&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;cybershokenet&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;15,233&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;2177&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;7&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;3&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;napas&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;13,528&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;303&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;44.6&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;4&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;csbullnet&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;8,615&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;239&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;36&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;5&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;cybersm9s&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;6,033&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;159&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;37.9&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;From the get-go, we can spot some problems. If the average number of players per server is above ~30, the likelihood of it being spam is high.&lt;/p&gt;
&lt;p&gt;“fb-cs.ru” report ~300 active players on their own website, a vast discrepancy from what we see in the server browser. That is nearly 58,000 fake players within our data set.&lt;/p&gt;
&lt;p&gt;When removing all servers over 32 players, you get this slightly better, but still filled with fakes list. Nevertheless, it gives a good idea as to the lay of the land.&lt;/p&gt;










































































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align:right&quot;&gt;Rank&lt;/th&gt;&lt;th style=&quot;text-align:left&quot;&gt;Keyword&lt;/th&gt;&lt;th style=&quot;text-align:left&quot;&gt;Total Players&lt;/th&gt;&lt;th style=&quot;text-align:right&quot;&gt;Server Count&lt;/th&gt;&lt;th style=&quot;text-align:right&quot;&gt;Avg Players per Server&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;1&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;cybershokenet&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;15,162&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;2175&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;7&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;2&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;fb-csru&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;11,354&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;862&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;13.2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;3&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;napas&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;4,349&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;153&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;28.4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;4&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;legcs2ru&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;4,335&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;4144&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;5&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;xplaygg&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;3,462&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;905&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;3.8&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;6&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;tverpubspace&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;2,729&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;172&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;15.9&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;7&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;r0对战平台天梯服务器&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;2,097&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;500&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;4.2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;8&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;csbullnet&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;1,678&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;129&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;13&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;9&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;r0对战平台天梯服&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;1,616&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;164&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;9.9&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;10&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;fastcupnet&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;1,549&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;328&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;4.7&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;11&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;cybersm9s&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;1,298&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;67&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;19.4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;12&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;m9snoi&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;1,128&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;73&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;15.5&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;13&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;discordggcolateam&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;1,010&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;42&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;24&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;14&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;pracccom&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;961&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;457&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;2.1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;15&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;hollycs&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;919&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;45&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;20.4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;16&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;refraggg&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;908&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;937&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;17&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;gamersclubcombr&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;863&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;1293&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;0.7&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align:right&quot;&gt;18&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;registre-se&lt;/td&gt;&lt;td style=&quot;text-align:left&quot;&gt;857&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;1292&lt;/td&gt;&lt;td style=&quot;text-align:right&quot;&gt;0.7&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;CYBERSHOKE is the primary English speaking provider, and dwarf their competition in xplay.gg.&lt;/p&gt;
&lt;p&gt;Whereas server providers &lt;em&gt;used&lt;/em&gt; to target a small smattering of game modes, they have a smorgasbord of options:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/3.BmibdmJc_ZfRSj9.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2047&quot; height=&quot;979&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;spam-benefits-these-big-providers&quot;&gt;Spam benefits these big providers&lt;/h2&gt;
&lt;p&gt;These big providers have every single popular game mode, a large user base, and an attractive website with all of their servers. As the server browser becomes less and less useful, users will gravitate towards one-stop shops.&lt;/p&gt;
&lt;p&gt;While server groups have existed before, this is a whole new level in size and scope.&lt;/p&gt;
&lt;p&gt;When you become this big, you no longer need to rely on volunteer work to maintain servers: you can hire full-time developers and administrators.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/4.CxxHDG-5_Z2ieb17.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1929&quot; height=&quot;664&quot;&gt;
A translated screenshot of an &lt;a href=&quot;https://hlmod.net/threads/cs2-poisk-c-razrabotchika-cybershoke.67551/&quot;&gt;advert from Cybershoke&lt;/a&gt;, searching for a C++ developer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/5.DDGH6TdD_ZQ014e.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1324&quot; height=&quot;264&quot;&gt;
Job vacancy for a marketing employee on a &lt;a href=&quot;https://hh.ru/vacancy/89899410&quot;&gt;Russian job board&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;small-providers-will-have-a-harder-time&quot;&gt;Small providers will have a harder time&lt;/h2&gt;
&lt;p&gt;If you invented a novel game mode, you had a first movers advantage. But if you are a small provider, this is no longer the case.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Advertising your game mode is harder, because the server list is broken, and the market is top heavy,&lt;/li&gt;
&lt;li&gt;If your game mode proves successful, the top servers will have it cloned quickly, because they have the developers to do so,&lt;/li&gt;
&lt;li&gt;As a smaller provider, you will be outdeveloped because the bigger providers have the resources,&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The CS:GO to CS2 transition is a large part of the problem. Previously, these game modes and server communities developed naturally, leading to many small minnows.&lt;/p&gt;
&lt;p&gt;But as the transition required a total re-write, these big providers could quickly establish first movers’ advantage by hiring full-time employees to replicate all the game modes before everyone else could.&lt;/p&gt;
&lt;p&gt;I was personally fond of a group called XGC, who had these wonderful execute servers (from what I understand, they mostly pioneered the format). The transition to CS2 killed them: first because they struggled to port over the game mode, and then they were outcompeted by these mega groups.&lt;/p&gt;
&lt;p&gt;The two groups offering executes now are CYBERSHOKE and hjemezez. hjemezez operates similarly to CYBERSHOKE.&lt;/p&gt;
&lt;h2 id=&quot;alternative-server-browsers&quot;&gt;Alternative server browsers&lt;/h2&gt;
&lt;p&gt;In the wake of the spam, people began creating their own wrappers around the server browser.&lt;/p&gt;
&lt;p&gt;One prominent one was &lt;code&gt;cs2browser.com&lt;/code&gt;. After a period of unusable server browsers, this offered hope that the community could work around the lack of moderation. Alas, good things don’t last, and they were acquired and integrated by a gambling provider.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In Clash news, We have purchased &lt;code&gt;cs2browser.com&lt;/code&gt;, we will be adding this tool to stash and make it the largest map/server database for all of CS2. More big updates coming to Clash, RustClash and CasesGG soon!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://x.com/HobbesHD/status/1941999298104680624&quot;&gt;Twitter&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://store.steampowered.com/app/2315530/Saido&quot;&gt;Saido&lt;/a&gt; was a competitor launched around the same time, but never gained any traction and now lays dead.&lt;/p&gt;
&lt;p&gt;From what I can see, &lt;a href=&quot;https://cs2serverlist.com/&quot;&gt;CS2ServerList&lt;/a&gt; and &lt;a href=&quot;https://cs2browser.net&quot;&gt;CS2Browser.net&lt;/a&gt; serve as viable replacement projects.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/smltr/findservers&quot;&gt;FindServers&lt;/a&gt; is a niche project trying to replicate the look and feel of the Source 1 server browser. That being said, having used their code as a reference for this project, I suspect they’re only pulling 30% of the available servers.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;When people yearn for the days of community servers, this is not what they’re expecting to see. Small groups, with admins so readily available, they could be your friends.&lt;/p&gt;
&lt;p&gt;The biggest names in the space aren’t communities. They’re faceless corporations.&lt;/p&gt;
&lt;p&gt;For communities to grow, the environment has to be acceptable to it. The old environment, with a usable server browser, keeping the costs of advertisement low, no longer exists. To compete in this space, you have to reach your users somehow, and the big providers have all of the weapons to pummel you before you even start.&lt;/p&gt;
&lt;p&gt;Evidently, Valve should do something, at least about the spam. But they’ve been asleep at the wheel for years now.&lt;/p&gt;
&lt;p&gt;This should be a warning sign to any game wanting to have community servers. This is not a feature you leave running in the background. It requires maintenance. When your game becomes big, bad actors will emerge into your space.&lt;/p&gt;
&lt;p&gt;Leave it too long, and community servers cease to be a community at all.&lt;/p&gt;
&lt;h2 id=&quot;post-script&quot;&gt;Post-script&lt;/h2&gt;
&lt;h3 id=&quot;skin-changers-ws&quot;&gt;Skin changers: &lt;code&gt;!ws&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;!ws&lt;/code&gt; is a command that allows players to change the skins on their guns. This was a standard plugin for many years, until Valve banned it in &lt;a href=&quot;https://blog.counter-strike.net/server_guidelines/&quot;&gt;2015&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However, looking at the server list, you wouldn’t realise this. CYBERSHOKE actively advertises it as a feature of their Premium subscription.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/8.DDjdweab_ZWCQTf.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;764&quot; height=&quot;605&quot;&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Valve never actually enforced this in any meaningful way. Outside of a wave of bans in 2015 and 2016, this has mostly been ignored.&lt;/p&gt;
&lt;h3 id=&quot;economics&quot;&gt;Economics&lt;/h3&gt;
&lt;p&gt;Historically, server networks were paid for in the following ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The generosity of the owners,&lt;/li&gt;
&lt;li&gt;Advertising, either via the Message of the Day, or chat messages,&lt;/li&gt;
&lt;li&gt;A small group of generous donators.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/6.DYjcyll7_Z2jhIJK.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1280&quot; height=&quot;720&quot;&gt;
An example of a MOTD loading a HTML page. &lt;a href=&quot;https://forums.alliedmods.net/showthread.php?t=218135&quot;&gt;Pinion&lt;/a&gt; was an infamous group for using this vector to serve adverts.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In the modern meta, big server networks have “premium” subscriptions, and have advertising from gambling providers directly in-game.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/7._qvfT8-F_Z1OG5p4.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;592&quot; height=&quot;188&quot;&gt;&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>Fixing VALORANT crashing my network drivers</title><link>https://bphilip.uk/blog/2025-05-26-fixing-valorant-crashing-my-network-drivers/</link><guid isPermaLink="true">https://bphilip.uk/blog/2025-05-26-fixing-valorant-crashing-my-network-drivers/</guid><pubDate>Mon, 26 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In a sweet irony, given I published a post about &lt;a href=&quot;./2024-07-29-evaluating-kernel-level-anti-cheats-as-a-consumer.md&quot;&gt;Evaluating kernel level anti-cheats as a consumer&lt;/a&gt;, some aspect of VALORANT, &lt;em&gt;likely&lt;/em&gt; Vanguard, ended up soft bricking my internet whenever I tried to play the game.&lt;/p&gt;
&lt;p&gt;While this was a soft brick - only happened when playing the game, and it would fix itself after exiting the game - it was incredibly frustrating to run into. Here is what I learned and what eventually fixed it.&lt;/p&gt;
&lt;h2 id=&quot;synopsis&quot;&gt;Synopsis&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Opening VALORANT, hopping into the practice range, resulted in my networking failing after around ~10-90 seconds.&lt;/li&gt;
&lt;li&gt;It crashes both my Ethernet, and my WiFI. My Ethernet connection was my only active connection.&lt;/li&gt;
&lt;li&gt;The game itself would report the network disconnecting. Nothing interesting there, though.&lt;/li&gt;
&lt;li&gt;The ethernet restored itself after exiting the game, after around ~2 minutes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-appears-to-have-been-the-final-fix&quot;&gt;What appears to have been the final fix&lt;/h2&gt;
&lt;p&gt;Updating Realtek driver to the latest version from &lt;a href=&quot;https://www.realtek.com/Download/List?cate_id=584&quot;&gt;Realtek themselves&lt;/a&gt;&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, and switching from NDIS to NetAdapterCX. Unclear if the switch in driver technology made any discernible difference.&lt;/p&gt;
&lt;h2 id=&quot;relevant-machine-information&quot;&gt;Relevant machine information&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Windows 11&lt;/li&gt;
&lt;li&gt;MSI MAG B560 TOMAHAWK WIFI ATX LGA1200 Motherboard&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;attempts-to-fix-the-issue&quot;&gt;Attempts to fix the issue&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Flashing BIOS to the latest version,&lt;/li&gt;
&lt;li&gt;Updating Realtek driver to the latest version provided by my motherboard manufacturer,&lt;/li&gt;
&lt;li&gt;Updating WiFi &amp;amp; Bluetooth drivers from Intel,&lt;/li&gt;
&lt;li&gt;Updating NVIDIA Graphics drivers,&lt;/li&gt;
&lt;li&gt;Enabling Core Isolation (it was disabled because of my racing wheel’s drivers not supporting it),&lt;/li&gt;
&lt;li&gt;Reinstalling Riot Vanguard,&lt;/li&gt;
&lt;li&gt;TPM &amp;amp; Secure Boot was already enabled.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;further-information&quot;&gt;Further information&lt;/h2&gt;
&lt;p&gt;The following is visible within Event Viewer. This was captured after updating all drivers from Intel, NVIDIA &amp;amp; the motherboard manufacturer, but before updating the ethernet driver from Realtek.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;The network interface &amp;quot;Realtek PCIe 2.5GbE Family Controller&amp;quot; has begun resetting.  There will be a momentary disruption in network connectivity while the hardware resets. Reason: The network driver detected that its hardware has stopped responding to commands. This network interface has reset 1 time(s) since it was last initialized.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;The description for Event ID 5007 from source Netwtw14 cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;If the event originated on another computer, the display information had to be saved with the event.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;The following information was included with the event: &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;\Device\NDMP8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Intel(R) Wi-Fi 6E AX210 160MHz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;The message resource is present but the message was not found in the message table&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Intel(R) Wi-Fi 6E AX210 160MHz : Has encountered an internal error and has failed.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Intel(R) Wi-Fi 6E AX210 160MHz : Has determined that the network adapter is not functioning properly.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8;overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Intel(R) Wi-Fi 6E AX210 160MHz : Has encountered an internal error and has failed.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;The file ended up being around 5MB. This is relevant because the Realtek download site appears to have a transfer speed limit of 30KB/s. &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Nostalgiacraft (reliving old Minecraft versions)</title><link>https://bphilip.uk/blog/2025-04-21-nostalgiacraft-reliving-old-minecraft-versions/</link><guid isPermaLink="true">https://bphilip.uk/blog/2025-04-21-nostalgiacraft-reliving-old-minecraft-versions/</guid><description>Some notes from my experience in recapturing my childhood</description><pubDate>Mon, 21 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you’re interested in revisiting Minecraft from the Beta era, here are some notes.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://multimc.org/&quot;&gt;MultiMC&lt;/a&gt; is a third-party Minecraft launcher that allows you to have multiple separate instances of Minecraft versions, with a great interface to manage it. It isn’t required, but I’d recommend using it.&lt;/p&gt;
&lt;h2 id=&quot;playing-on-17-itself&quot;&gt;Playing on 1.7 itself&lt;/h2&gt;
&lt;p&gt;It is trivial to use play Minecraft 1.7.3 itself. The official launcher &amp;amp; MultiMC can be used to easily spin up an instance.&lt;/p&gt;
&lt;p&gt;My primary issue with playing older versions of Minecraft is the janky mouse input: it frequently skips &amp;amp; accelerates unnaturally, making it difficult to control.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.minecraftforum.net/forums/mapping-and-modding-java-edition/minecraft-mods/3150500-back2beta-1-7-9-mod-for-beta-1-7-3&quot;&gt;Back2Beta&lt;/a&gt; is a mod for Minecraft 1.7.3 that adds a number of fixes to the game, without changing the core gameplay. If you’re going to play this version, this is a good mod to install.&lt;/p&gt;
&lt;p&gt;It does have raw mouse input support, but it doesn’t work for me.&lt;/p&gt;
&lt;h2 id=&quot;playing-the-latest-version-with-old-features&quot;&gt;Playing the latest version, with old features&lt;/h2&gt;
&lt;p&gt;It turns out people have replicated significant portions of old gameplay onto modern Minecraft.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://modrinth.com/mod/moderner-beta&quot;&gt;Moderner&lt;/a&gt; allows you to generate worlds with the generation from Beta 1.7. &lt;a href=&quot;https://www.curseforge.com/minecraft/mc-mods/nostalgic-tweaks&quot;&gt;Nostalgic Tweaks&lt;/a&gt; brings back old gameplay features, such as pre-Adventure health.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://modrinth.com/modpack/1to1-beta&quot;&gt;1:1 Beta&lt;/a&gt; is a mod pack combines these mods, and others, to create a faithful 1.7 experience.&lt;/p&gt;
&lt;p&gt;This has yielded the best results for me. The modern engine gives you better performance &amp;amp; reliable mouse input, but the mods make the experience near indistinguishable from Beta 1.7.3. Additionally, should you want to mix and match gameplay between versions (i.e. adding sprint with old health), you can do so.&lt;/p&gt;
&lt;p&gt;Some notes (written for 1:1 Beta 2.1.3, downloaded from Modrinth using MultiMC),&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The default option in world generation is vanilla. Make sure to modify it to Moderner, and to tweak the custom options in the mod to disable deepslate generation.&lt;/li&gt;
&lt;li&gt;In Nostalgic Tweaks, you’ll want to fix sheep punching behaviour (it seems to think you want shears enabled),&lt;/li&gt;
&lt;li&gt;Dripstone still spawns at lower levels.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>There should be a standard LLM rule format</title><link>https://bphilip.uk/blog/2025-04-20-a-standard-ai-rule-format/</link><guid isPermaLink="true">https://bphilip.uk/blog/2025-04-20-a-standard-ai-rule-format/</guid><pubDate>Sun, 20 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Cursor, Claude Code &amp;amp; Cline all have different formats for writing reusable instructions for agents that are automatically embedded into requests.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview#manage-claudes-memory&quot;&gt;Claude Code&lt;/a&gt; takes a file called &lt;code&gt;CLAUDE.md&lt;/code&gt; with a variety of directory configurations.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.cursor.com/context/rules&quot;&gt;Cursor&lt;/a&gt; used to be a file called &lt;code&gt;.cursorrules&lt;/code&gt;, but is now a folder called &lt;code&gt;.cursor/rules&lt;/code&gt;, with the rules being individual “MDC”&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; files.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cline.bot/faq&quot;&gt;Cline&lt;/a&gt; supports &lt;code&gt;.clinerules&lt;/code&gt; (or &lt;code&gt;.cursorrules&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It seems to me that we should be standardising this, much like &lt;a href=&quot;https://www.anthropic.com/news/model-context-protocol&quot;&gt;Model Context Protocol&lt;/a&gt;.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;strong&gt;Update 2026-01:&lt;/strong&gt;
Since I wrote this, the industry coalesced around &lt;a href=&quot;https://agents.md/&quot;&gt;AGENTS.md&lt;/a&gt;, rendering this complaint moot.&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;A Markdown variant invented by Cursor. It appears to be Markdown, with some additional metadata, that allows the engine to decide whether to include the rule in a request. &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Can I have an RSS feed without ads?</title><link>https://bphilip.uk/blog/can-i-have-an-rss-feed-without-ads/</link><guid isPermaLink="true">https://bphilip.uk/blog/can-i-have-an-rss-feed-without-ads/</guid><description>Stop clogging up my NetNewsWire</description><pubDate>Fri, 28 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;As a subscriber to The Verge &amp;amp; WIRED, it is rather annoying that the RSS feeds that both provide are &lt;em&gt;littered&lt;/em&gt; with product recommendation listicles, designed to generate revenue through affiliate links.&lt;/p&gt;
&lt;p&gt;While they may be useful to some people, and generate an additional revenue stream, I am paying you. It is frustrating to still be advertised to, especially for something that promotes continual spending, something I’m cutting back on.&lt;/p&gt;
&lt;p&gt;This excludes product reviews, which while I don’t particularly desire either, I can appreciate their value to people.&lt;/p&gt;
&lt;p&gt;WIRED, unlike The Verge, does not have subscriber specific RSS feeds. Today, the affiliate articles were:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;7 Best Bike Locks (2025): Litelok, Abus, Hiplok, KryptoLok Compared,&lt;/li&gt;
&lt;li&gt;The 103 Best Amazon Spring Sale Deals for March 2025,&lt;/li&gt;
&lt;li&gt;4 Best Smart Displays (2025): Google Assistant and Amazon Alexa,&lt;/li&gt;
&lt;li&gt;5 Best Phones With Headphone Jacks (2025): Tested and Revieed,&lt;/li&gt;
&lt;li&gt;50% Off DoorDash Promo Code &amp;amp; Coupons&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Verge does have a subscriber specific RSS feed. Today, the affiliate articles in that feed were:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The 30 best Amazon Big Spring Sale deals under $30,&lt;/li&gt;
&lt;li&gt;Amazon’s big spring sale continues, and we found the 101 best deals,&lt;/li&gt;
&lt;li&gt;Here are the best streaming service deals available right now.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>A new look</title><link>https://bphilip.uk/blog/2025-03-18-a-new-look/</link><guid isPermaLink="true">https://bphilip.uk/blog/2025-03-18-a-new-look/</guid><pubDate>Tue, 18 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Just under 10 years ago was when I first registered this domain, but I’ve had some form of website on the internet for 13 years. Despite the readership of this website probably hovering around ~0, this has been a nice, quiet place to put things I’m proud of online.&lt;/p&gt;
&lt;p&gt;But as with anything, this site has evolved over time, and has probably had the biggest change in content philosophy over the past month. The technical philosophy has ebbed and flowed over time - this was once a Bootstrap theme, written in plain HTML, then it was moved to Jekyll + Webpack, and now it lives as a Hugo bog - but the content philosophy remained the same.&lt;/p&gt;
&lt;p&gt;This site has always had three sections: A blog, a resume, and a projects page. It served to be the showcase of who I am, to try and encourage people to look at me, especially for potential jobs. It was also a way to stuff up the website with content, at a time when I didn’t write a whole lot.&lt;/p&gt;
&lt;p&gt;(Some of this came from inspirations, &lt;a href=&quot;https://web.archive.org/web/20130724154702/https://robsterlini.co.uk/&quot;&gt;such as the website of designer Rob Sterlini&lt;/a&gt;, who designed many of the pages of YouTubers I watched.)&lt;/p&gt;
&lt;p&gt;But… the website has been in a state of constant atrophy. Keeping the resume in sync with the PDF version was never trivial, and generating the PDF from the web contents was never particularly desirable to me: the layout was never “ATS” friendly, and these days I keep it simple with a variant of JakeCV.&lt;/p&gt;
&lt;p&gt;The projects section never really filled up. It was still listing a project I wrote before I started university, and while it was fine, there was little passion in the way I wrote about it - which wasn’t meant to reflect anything about the project itself, but the style I was writing at the time. And these days, I don’t find it interesting, so there is little desire to rewrite it.&lt;/p&gt;
&lt;p&gt;Anything newer and more interesting… I’d just write a blog post.&lt;/p&gt;
&lt;p&gt;And that really is the point of this design. Anything interesting I do, I usually write about, so the site should be focused around it. And as I did years ago, I’ve aped some of the design cues from &lt;a href=&quot;https://simonwillison.net/&quot;&gt;Simon Willison’s blog&lt;/a&gt;, which I’ve become a huge fan of lately. Hopefully it has enough distinction to stand on its own.&lt;/p&gt;
&lt;p&gt;I hope you like it.&lt;/p&gt;</content:encoded></item><item><title>Syncing bank transactions to my budget, and experimenting with Cursor</title><link>https://bphilip.uk/blog/2025-03-09-chase-bank-sync/</link><guid isPermaLink="true">https://bphilip.uk/blog/2025-03-09-chase-bank-sync/</guid><description>Some personal learnings from trying vibe coding.</description><pubDate>Sun, 09 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;YNAB is my budgeting tool of choice. It works, and I don’t want the hassle of maintaining my own instance of &lt;a href=&quot;https://actualbudget.org/&quot;&gt;Actual Budget&lt;/a&gt; .&lt;/p&gt;
&lt;p&gt;YNAB has support for Open Banking sync, which I do use. However, their API vendor, TrueLayer, continues to lack Chase UK Open Banking support, despite it being available for ~1 year now. Other tools, like Moneyhub, have supported it for yonks now.&lt;/p&gt;
&lt;p&gt;Using the direct bank API yourself is impossible (regulatory requirements), but you can use a intermediary vendor. GoCardless is particularly cool because they offer free access (albeit limited), something with Actual Budget uses for their &lt;a href=&quot;https://actualbudget.org/docs/advanced/bank-sync/gocardless/&quot;&gt;sync implementation&lt;/a&gt;. It should be easy to replicate this for YNAB.&lt;/p&gt;
&lt;p&gt;With some spare time, and a desire to dig into agentic LLM tools, I decided to give it a shot. I’m &lt;a href=&quot;https://github.com/bevan-philip/ynab-gocardless-sync&quot;&gt;pretty happy with the outcome&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;desires&quot;&gt;Desires&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;I didn’t want to pay anything additional (I’m trying to budget here…),&lt;/li&gt;
&lt;li&gt;I wanted the tool to be local-only: that way, I only have to trust GoCardless &amp;amp; YNAB.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This ruled out the already existing GoCardless-based tool, &lt;a href=&quot;https://synci.io/&quot;&gt;Synci&lt;/a&gt;. I’m sure it absolutely works great, has a bunch of features my tool will never have, and is risk-free. But better to be safe than sorry.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Doesn’t need to be particularly user-friendly. While I made the best attempt to make it user friendly (as much as a CLI tool can be), the only person it has to be work for is me. Anyone else is a bonus :).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;thoughts-while-building-this&quot;&gt;Thoughts while building this,&lt;/h2&gt;
&lt;p&gt;This project was built a lot on &lt;a href=&quot;https://simonwillison.net/2025/Feb/6/andrej-karpathy/&quot;&gt;vibe coding&lt;/a&gt;. It was a fun experiment, and after some effort, absolutely got me where I wanted to. On the way, I learned a bunch of stuff.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;At work, I’m currently using Roo Code (primarily because our only AI tech is access to a Claude API key). Roo is pretty good, and absolutely does the job.&lt;/li&gt;
&lt;li&gt;But man, Cursor is awesome. The UI is beautiful, and the agentic implementation seems to be just a bit better than Roo. It has the extra layer of polish. Genuinely tempted to shell out for Pro whenever I work on a new project (without Cursor, I’m just manually shelling out for Claude tokens).
&lt;ul&gt;
&lt;li&gt;Oh, and the completions are actually really good.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;AI can do a lot of the scaffolding right.&lt;/li&gt;
&lt;li&gt;When the conversation becomes too long, it completely fails to do anything novel or interesting. &lt;a href=&quot;https://youtu.be/EWvNQjAaOHw?t=1024&quot;&gt;Kaparthy’s recent video on LLMs comes with a great explainer&lt;/a&gt; for this behaviour.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.cursor.com/context/rules-for-ai&quot;&gt;Cursor rules&lt;/a&gt; are great in theory, but I couldn’t get it to click.
&lt;ul&gt;
&lt;li&gt;For instance, I asked it to &lt;em&gt;never&lt;/em&gt; suggest installing something, and yet it continued to do so.&lt;/li&gt;
&lt;li&gt;I asked it to use uv to do package management and program invoking. It sometimes did.
&lt;ul&gt;
&lt;li&gt;&lt;img src=&quot;/_astro/uv-rule.BYdAxgvk_Z1BqAbg.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;390&quot; height=&quot;540&quot;&gt;&lt;/li&gt;
&lt;li&gt;I’m not pretending my instructions are even good, but argh, this is frustrating.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;For a bit, I went purely YOLO, and let it go purely agentic… this had some bad results,
&lt;ul&gt;
&lt;li&gt;It installed a bunch of crap to my system pip in a vain attempt to get packages right.&lt;/li&gt;
&lt;li&gt;(The issue here was a bad Python version: 3.8 was too old for some of the packages, and 3.13 was too bleeding edge for many to have distributions: on 3.13, there is no numpy version so it kept trying to compile it, which is a recipe for disaster on Windows).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Interesting quirks,
&lt;ul&gt;
&lt;li&gt;It sometimes get stuck in using older tech.
&lt;ul&gt;
&lt;li&gt;For instance, when it, out of its own volition, implemented a progress bar, it decided to use &lt;code&gt;tqdm&lt;/code&gt; instead of &lt;code&gt;rich&lt;/code&gt; (which was already added to the project).&lt;/li&gt;
&lt;li&gt;And practically everytime it wanted to get the current date, it used &lt;code&gt;utcnow()&lt;/code&gt;, instead of &lt;code&gt;now(datetime.UTC)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The initial plan suggested &lt;code&gt;requests&lt;/code&gt;. Nothing wrong with &lt;code&gt;requests&lt;/code&gt;, but I find &lt;code&gt;httpx&lt;/code&gt; a much better choice.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;It could not resolve an issue where a particular bank account would randomly bomb out: the underlying source being the default &lt;code&gt;httpx&lt;/code&gt; timeout of 5 seconds.&lt;/li&gt;
&lt;li&gt;It used &lt;code&gt;httpx&lt;/code&gt; clients… but insisted on creating one for every request. That’s basically pointless.&lt;/li&gt;
&lt;li&gt;The tool used &lt;code&gt;asyncio&lt;/code&gt; for the implementation. Nothing wrong with that, but wholly unnecessary for a project only performing one REST request at a time (I suspect &lt;code&gt;httpx&lt;/code&gt; is linked quite heavily with &lt;code&gt;asyncio&lt;/code&gt;, so it felt like it &lt;em&gt;had&lt;/em&gt; to use it).&lt;/li&gt;
&lt;li&gt;Disappointed it never attempted to use &lt;a href=&quot;https://docs.python.org/3/library/dataclasses.html&quot;&gt;dataclasses&lt;/a&gt;, until I prompted it to do so.&lt;/li&gt;
&lt;li&gt;For some reason, it hallucinated that the YNAB API did not accept negative numbers (it does, and &lt;em&gt;you need to use negative numbers&lt;/em&gt; for outflow). I suspect this is because YNAB doesn’t support negative numbers, but that’s because it forces you to use a &lt;a href=&quot;https://en.wikipedia.org/wiki/Double-entry_bookkeeping&quot;&gt;double-entry bookkeeping&lt;/a&gt; style in the UI.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;GoCardless’ API limits made debugging issues a pain.. but equally, I should have intervened with my own abilities far earlier. One of the problems of vibe coding is that it is very easy to forget your own cognitive ability. I find I have this problem less at work, likely because I use it less &amp;amp; have to intervene way more often. &lt;a href=&quot;https://simonwillison.net/2025/Mar/6/vibe-coding/&quot;&gt;Simon Willison’s recent take&lt;/a&gt; roughly aligns with what I’m thinking.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;xkcd-1205&quot;&gt;&lt;a href=&quot;https://xkcd.com/1205/&quot;&gt;xkcd #1205&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Historically, this sort of project I wouldn’t have looked at due to the unlikely nature I’d save any time here. As much as it seemed cool, I had other projects I wanted to prioritise.&lt;/p&gt;
&lt;p&gt;But LLMs change the dynamics a lot: it takes substantially less time to get you almost there.&lt;/p&gt;
&lt;p&gt;That being said, you’ve still got to read everything it outputs, build up that mental model, and get stuck in if is unable to deliver the proper solution, which, even in a relatively simple like this one, I find it does shockingly often.&lt;/p&gt;
&lt;p&gt;Either way, I’ll be exploring more ideas that come to me with this tech, and I think that’s a really neat outcome.&lt;/p&gt;</content:encoded></item><item><title>A small CLI tool for reliving reddit history</title><link>https://bphilip.uk/blog/reddit-year-browser/</link><guid isPermaLink="true">https://bphilip.uk/blog/reddit-year-browser/</guid><pubDate>Sun, 23 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It’s quite hard to relive history on reddit. I wanted to write a piece about “2015 CS esports”, and one of the best ways to do so would be to view a “top of 2015” for a /r/GlobalOffensive. Sadly, I couldn’t find anything for this (at least not via a quick Google search).&lt;/p&gt;
&lt;p&gt;The closest I can find is &lt;a href=&quot;https://www.reddit.com/r/changelog/comments/k663qy/introducing_rereddit_go_back_in_time_to_see_top/&quot;&gt;rereddit&lt;/a&gt;, which is a platform feature to find the top posts for the entire website for a particular year or month, which is at least something. A user made something called &lt;a href=&quot;https://news.ycombinator.com/item?id=23644067&quot;&gt;Boreddit&lt;/a&gt; which is the closest thing, but is sadly no longer around.&lt;/p&gt;
&lt;p&gt;So, I wrote that out, and realised it should be fairly trivial to replicate this with &lt;a href=&quot;https://pullpush.io/&quot;&gt;PullPush&lt;/a&gt; and Claude to do the brunt-work. And you know what, it was! &lt;a href=&quot;https://github.com/bevan-philip/reddit-time-traveller/&quot;&gt;reddit-time-traveller&lt;/a&gt; is a quick and dirty Python CLI tool, that allows you to search for the top posts for a given year, for a given subreddit.&lt;/p&gt;
&lt;p&gt;(Interesting quirk of using Claude: Claude didn’t know about PullPush, but did know about PushShift, which PullPush is based from. It was trivial to translate from one to the other, but an interesting quirk nonetheless.)&lt;/p&gt;</content:encoded></item><item><title>Kernel-level anti-cheats: a necessary devil</title><link>https://bphilip.uk/blog/2024-07-29-evaluating-kernel-level-anti-cheats-as-a-consumer/</link><guid isPermaLink="true">https://bphilip.uk/blog/2024-07-29-evaluating-kernel-level-anti-cheats-as-a-consumer/</guid><description>Understanding the nuances on why game developers have choosen to go to kernel to defend their games</description><pubDate>Mon, 29 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Cheating is an increasingly endemic problem to multiplayer video games on PCs, and as a response, we’ve seen the “Cambrian explosion” of anti-cheats designed to combat this situation.&lt;/p&gt;
&lt;p&gt;However, a vast majority of these products are choosing to run with the highest privileges possible on your system: the kernel-level. This choice has caused a lot of scrutiny from customers over the possible ramifications of this decision on their usage of their computer: particularly, over the privacy, security and stability of their PCs.&lt;/p&gt;
&lt;p&gt;Unfortunately, this discussion is messy, and has a lot of misinformation. This is an attempt to face this issue, from the perspective of a customer evaluating the option of installing these pieces of software.&lt;/p&gt;
&lt;h2 id=&quot;the-lay-of-the-land&quot;&gt;The lay of the land&lt;/h2&gt;
&lt;p&gt;A brief primer on what “kernel-level” means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kernel-level: software running at the highest possible level on the machine, at the same level as your operating system.&lt;/li&gt;
&lt;li&gt;User-mode: software running at the regular level on your machine: take your browser, Discord, or most applications you run on a day-by-day basis.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(There are multiple levels “rings” in the middle, but we’re not going to go too in-depth here.)&lt;/p&gt;
&lt;p&gt;There are a lot of anti-cheat tools available right now. From generic technology providers, to bespoke solutions developed by studios, this table attempts to give an outline of the more known providers:&lt;/p&gt;













































































































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Name&lt;/th&gt;&lt;th&gt;Developer&lt;/th&gt;&lt;th&gt;Kernel-level?&lt;/th&gt;&lt;th&gt;Generic provider&lt;/th&gt;&lt;th&gt;Examples of games using it&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Vanguard&lt;/td&gt;&lt;td&gt;Riot Games&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;VALORANT, League of Legends&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;BattleEye&lt;/td&gt;&lt;td&gt;BattleEye&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Fortnite, Escape From Tarkov&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Easy Anti-Cheat&lt;/td&gt;&lt;td&gt;Epic Games&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Fortnite, Apex Legends&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RICOCHET&lt;/td&gt;&lt;td&gt;Activision Blizzard&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Call of Duty Modern Warfare II (2022)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;EA Anticheat&lt;/td&gt;&lt;td&gt;Electronic Arts&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Battlefield 5, EA FC 24&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;EQU8&lt;/td&gt;&lt;td&gt;1047 Games&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;No &lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td&gt;Splitgate&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;FACEIT AC&lt;/td&gt;&lt;td&gt;FACEIT&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Third-party&lt;/td&gt;&lt;td&gt;Counter-Strike (FACEIT)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;EMAC LAB&lt;/td&gt;&lt;td&gt;EMAC&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Third-party&lt;/td&gt;&lt;td&gt;Counter-Strike (GamersClub)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Akros&lt;/td&gt;&lt;td&gt;Akros&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Third-party&lt;/td&gt;&lt;td&gt;Counter-Strike (ChallengerMode)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ESPORTAL AC&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td&gt;ESPORTAL&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Third-party&lt;/td&gt;&lt;td&gt;Counter-Strike (ESPORTAL)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;XIGNCODE3&lt;/td&gt;&lt;td&gt;Wellbia&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Black Desert&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;PunkBuster&lt;/td&gt;&lt;td&gt;PunkBuster&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Call of Duty 4: Modern Warfare, Battlefield 4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GameGuard&lt;/td&gt;&lt;td&gt;nProtect&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Helldivers 2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Denuvo AC&lt;/td&gt;&lt;td&gt;Denuvo&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;(Formerly DOOM Eternal)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Valve Anti-Cheat (VAC)&lt;/td&gt;&lt;td&gt;Valve Corporation&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Counter-Strike, generic Steam titles&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Warden&lt;/td&gt;&lt;td&gt;Activision Blizzard&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;World of Warcraft&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Defense Matrix&lt;/td&gt;&lt;td&gt;Activision Blizzard&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Overwatch 2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Arbiter&lt;/td&gt;&lt;td&gt;343 Technologies&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Halo Infinite&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;TenProtect&lt;/td&gt;&lt;td&gt;Tencent&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Rings of Elysium&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;mhyprot2&lt;/td&gt;&lt;td&gt;miHoYo&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Genshin Impact&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Anti-Cheat Expert&lt;/td&gt;&lt;td&gt;Tencent&lt;/td&gt;&lt;td&gt;Yes (Probably)&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;League of Legends (China)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;FairFight&lt;/td&gt;&lt;td&gt;i3d (formerly Gamebloks)&lt;/td&gt;&lt;td&gt;No (server-side only)&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Battlefield 4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;mail.ru AntiCheat Service&lt;/td&gt;&lt;td&gt;mail.ru&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;td&gt;Conqueror’s Blade&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;Generic provider: they are not specific to one company or game, but are rather free to purchase for game developers.&lt;/li&gt;
&lt;li&gt;Third-party: an anti-cheat not bundled with the game, but rather applied on top of, or instead of the provided anti-cheat solution. For instance, Counter-Strike comes with VAC, but FACEIT disables it in favour of protecting it with their own anti-cheat solution.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;the-privacy-impact-is-minimal&quot;&gt;The privacy impact is minimal&lt;/h2&gt;
&lt;p&gt;A major focus of the kernel-level AC debate is the idea that escalating to the kernel would allow surreptitious extraction of user data, and with the ownership of some of these companies, potentially leave you vulnerable to manipulation, harm, and other ill wills.&lt;/p&gt;
&lt;p&gt;Strictly speaking, this is &lt;em&gt;true&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;But… it’s also true if you just install the game, without installing anything in the kernel.&lt;/p&gt;
&lt;p&gt;Without a kernel-level driver, or even administrative rights, software on your computer can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Steal browser cookies, allowing them to access the account sessions of anything logged in, &lt;sup&gt;&lt;a href=&quot;#user-content-fn-3&quot; id=&quot;user-content-fnref-3&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Steal the tokens of most logged in applications: Steam, Discord, Teams, and Slack,&lt;/li&gt;
&lt;li&gt;Steal non-encrypted browser data: such as Auto-Fill information (if this includes your credit card information, they can make purchases&lt;sup&gt;&lt;a href=&quot;#user-content-fn-4&quot; id=&quot;user-content-fnref-4&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;),&lt;/li&gt;
&lt;li&gt;Listen for keystrokes in non-privileged applications (that is, basically every application you use),&lt;/li&gt;
&lt;li&gt;Establish persistence, and background processes: enabling your computer to be part of a botnet,&lt;/li&gt;
&lt;li&gt;Read your clipboard,&lt;/li&gt;
&lt;li&gt;Mine cryptocurrency (&lt;a href=&quot;https://play.esea.net/forums/492102&quot;&gt;ESEA famously did this in 2013&lt;/a&gt;, and it appears it was done without their kernel-level anti-cheat, as it was present in &lt;code&gt;eseaclient.exe&lt;/code&gt;, the user-mode interface: either way, cryptocurrency does not require kernel-level permissions to mine, and &lt;a href=&quot;https://www.theverge.com/2017/9/26/16367620/showtime-cpu-cryptocurrency-monero-coinhive&quot;&gt;has been done entirely within the browser&lt;/a&gt;),&lt;/li&gt;
&lt;li&gt;If a UAC exploit (like Fodhelper) exists on your Windows machine of choice, establish even further persistence,&lt;/li&gt;
&lt;li&gt;Steal all of your files, or encrypt them for ransom,&lt;/li&gt;
&lt;li&gt;Take a screenshot of your machine,&lt;/li&gt;
&lt;li&gt;Listen in on your microphone (modern versions of Windows should indicate to the user when this is happening),&lt;/li&gt;
&lt;li&gt;Watch your webcam surreptitiously (well-design webcams should at least give you a sign by making the indicator light tied to the same circuit as the webcam, meaning you can’t have one without the other),&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is unfortunately the nature of modern desktop operating systems: there are no safeguards to prevent applications without administrator access from reading data accessible to non-administrators. Mobile operating systems are designed differently, to prevent one app from reading anything other than the relevant data for the application to work.&lt;/p&gt;
&lt;p&gt;With a kernel-level driver, you gain these additional abilities,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Establish persistence beyond the point anti-virus tooling can probe into,&lt;/li&gt;
&lt;li&gt;Disable anti-virus solutions (&lt;a href=&quot;https://www.pcgamer.com/ransomware-abuses-genshin-impacts-kernel-mode-anti-cheat-to-bypass-antivirus-protection/&quot;&gt;this actually happened: mhyprot2 had a vulnerability, that was abused by a threat actor&lt;/a&gt; to disable popular AV software),&lt;/li&gt;
&lt;li&gt;The ability to do everything possible without kernel-level access, but more surreptitiously&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is not a lot gained.&lt;/p&gt;
&lt;p&gt;If you do not trust the publisher of a game to protect the privacy of your computer, you should not install their software, full stop. Drawing the line at a kernel-level driver is arbitrary, and naïve.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;However, if your beef is only about data privacy at Riot, running the game client or running Vanguard makes not one bit of difference. Data can still be retrieved from user-mode, and we’re all engineers for the same studio with the same goals, none of which are collecting your personal information. If Riot hasn’t earned your trust, do not run our software.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.leagueoflegends.com/en-us/news/dev/dev-vanguard-x-lol/&quot;&gt;/dev: Vanguard x LoL&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The ability for kernel-level vendors to do mass data surveillance is also neutered by the fact that they know they are under constant vigilance by opponents: cheat developers. Cheat developers are constantly evaluating the state of kernel-level ACs, and are pouncing at the bit to discredit them to consumers, because it increases the likelihood for it to be removed.&lt;/p&gt;
&lt;p&gt;When cheat developers revealed that VAC was reading the DNS cache of systems (basically, seeing what websites your computer had visited), there was a mass outcry, forcing &lt;a href=&quot;https://www.reddit.com/r/gaming/comments/1y70ej/valve_vac_and_trust/&quot;&gt;Gabe Newell&lt;/a&gt; to make a statement on reddit, clarifying the details around such a check.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There is also a social engineering side to cheating, which is to attack people’s trust in the system. If “Valve is evil - look they are tracking all of the websites you visit” is an idea that gets traction, then that is to the benefit of cheaters and cheat creators. VAC is inherently a scary looking piece of software, because it is trying to be obscure, it is going after code that is trying to attack it, and it is sneaky. For most cheat developers, social engineering might be a cheaper way to attack the system than continuing the code arms race, which means that there will be more Reddit posts trying to cast VAC in a sinister light.&lt;/p&gt;
&lt;p&gt;Gabe Newell, &lt;a href=&quot;https://www.reddit.com/r/gaming/comments/1y70ej/valve_vac_and_trust/*&quot;&gt;Valve, VAC, and trust : r/gaming&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;security&quot;&gt;Security&lt;/h2&gt;
&lt;p&gt;As mentioned prior, there can be security-related issues.&lt;/p&gt;
&lt;p&gt;One potential risk is a supply chain attack. The concept is that someone could hack the vendor of an anti-cheat, and utilise that access to send out malicious software to customers. It’s hard to quantify the real risk behind this prospect. This could happen to any piece of software on your machine, including the operating system you run, or common applications you use on a day-to-day basis. As discussed earlier, being the kernel does not give you substantially higher access to a machine.&lt;/p&gt;
&lt;p&gt;The other risk is the ability for a kernel-level driver to allow arbitrary applications to elevate themselves. This could be used by a piece of malware to elevate themselves to the kernel, and disable anti-virus solutions (which, as mentioned earlier, &lt;a href=&quot;https://www.pcgamer.com/ransomware-abuses-genshin-impacts-kernel-mode-anti-cheat-to-bypass-antivirus-protection/&quot;&gt;has already happened&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;There is a responsibility for game developers to design these tools with security as a core focus, beyond what is applicable to user-mode software.&lt;/strong&gt; Whether game developers are up to the task is going to be something we’re evaluating for a long time.&lt;/p&gt;
&lt;p&gt;That being said, user-mode security is important, too. And game developers have had failures here for far longer.&lt;/p&gt;
&lt;h3 id=&quot;a-brief-section-about-attacks-done-with-user-mode-game-software&quot;&gt;A brief section about attacks done with user-mode game software&lt;/h3&gt;
&lt;p&gt;In 2014, a worm spread through Garry’s Mod. Known as the &lt;a href=&quot;https://www.pcgamer.com/garrys-mod-cough-virus-is-cured-but-it-could-have-been-worse/&quot;&gt;Cough Virus&lt;/a&gt;, servers would infect users, who would have their Steam name changed, spam their friends and servers with a “cough” message, and attempt to hack other servers.&lt;/p&gt;
&lt;p&gt;In 2015, reddit user bsadams joined a Counter-Strike: Source server. The server exploited a Source engine exploit to gain remote-code execution (RCE) privileges on his computer. Using those privileges, &lt;a href=&quot;https://www.reddit.com/r/GlobalOffensive/comments/3jpyhh/do_not_join_unkown_cs_source_servers_via_ip/&quot;&gt;they proceeded to steal his Steam, ESEA and CEVO&lt;/a&gt; accounts, stole his skins, and used his account to cheat. He only re-gained access due posting his story publicly.&lt;/p&gt;
&lt;p&gt;In 2023, Call of Duty: Modern Warfare 2 (2009) had to be taken down because an attacker was &lt;a href=&quot;https://www.dexerto.com/tech/modern-warfare-2-virus-2229607/&quot;&gt;abusing an RCE exploit in the game&lt;/a&gt; (one of many) to propagate a worm. The exploit was reported to Activision &lt;a href=&quot;https://techcrunch.com/2023/07/31/call-of-duty-worm-malware-used-to-hack-players-exploits-years-old-bug/&quot;&gt;in 2018&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In 2024, the Apex Legends Global Series &lt;a href=&quot;https://www.theverge.com/2024/3/18/24104666/apex-legends-postpones-algs-competition-hack-concerns&quot;&gt;was put on hold&lt;/a&gt; after multiple professional players were hacked live on air with an RCE vulnerability, and forced to play with cheats (contrary to some initial hypotheses, this had &lt;em&gt;nothing&lt;/em&gt; to do with the kernel-level anti-cheat: it was a usermode vulnerability).&lt;/p&gt;
&lt;p&gt;In April 2021, researchers revealed that multiple RCE exploits were present in CS:GO, and remained unpatched despite having been reported to Valve months and years ago.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/the_secret_club/status/1380868759129296900&quot;&gt;Reported in 2019, patched in 2021&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/bienpnn/status/1381616325391384577&quot;&gt;Reported in 2020, patched in 2021&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/chirun02/status/1383835641222340613&quot;&gt;Reported in 2020, patched in 2021&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/teapotddd/status/1383145340988182530&quot;&gt;Multiple vulnerabilities reported to Valve over the course of 2019-2021, patched in 2021&lt;/a&gt;, including one that would allow people to replicate &lt;a href=&quot;https://x.com/teapotddd/status/1383527700707479554&quot;&gt;what happened to bsadams in 2015&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Reported in early 2021, patched &lt;a href=&quot;https://x.com/the_secret_club/status/1380960120725733376&quot;&gt;after April 2021&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/the_secret_club/status/1380966170522750979&quot;&gt;Reportedn in December 2020, patched after April 2021&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To me, this is the real worry when we talk about security within video games. Game developers have a litany of failures to look back on, and there are countless examples of big names being lax.&lt;/p&gt;
&lt;h2 id=&quot;stability&quot;&gt;Stability&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/2024_CrowdStrike_incident&quot;&gt;July 2024 Crowdstrike incident&lt;/a&gt; shows just how wrong writing software in the kernel-level can go.&lt;/p&gt;
&lt;p&gt;To summarise the technical aspect: Crowdstrike delivered a bad upgrade to data used by their kernel-level driver, which revealed a bug. This bug caused machines to enter into a bootloop, which it could never&lt;sup&gt;&lt;a href=&quot;#user-content-fn-5&quot; id=&quot;user-content-fnref-5&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; recover from without intervention. Resolving it required booting into safe mode, and manually deleting the driver update file.&lt;/p&gt;
&lt;p&gt;Incidents like that should never happen. Users should never have to boot into safe mode.&lt;/p&gt;
&lt;p&gt;This is not a problem if the driver does not start at boot. If a crash is caused by the user opening a piece of software, they can avoid the crash by not opening that piece of software, and the developer can put out a fix without much issue.&lt;/p&gt;
&lt;p&gt;But some anti-cheat vendors do start at boot. The most infamous is Vanguard. Now that they have chosen to do this, they must be aware of the great responsibility placed upon them.&lt;/p&gt;
&lt;p&gt;I have not minced words about how game developers have failed at securing their user-mode software. One only hopes that they take the stability of their kernel-level software more seriously.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.leagueoflegends.com/en-gb/news/dev/dev-vanguard-x-lol/&quot;&gt;An early version of Vanguard&lt;/a&gt; disabled &lt;strong&gt;vulnerable&lt;/strong&gt; (i.e. usable to cheat, or exploit your system) device drivers. However, these device drivers powered peripherals, leading to users finding out that features such as keyboard RGB, or game monitoring, suddenly became unusable. This didn’t permanently brick any computers, but was an early warning of the risks.&lt;/p&gt;
&lt;p&gt;(While there are some reports around Vanguard bricking computers, they mostly appear to be inaccurate: see the post-script for further commentary about this).&lt;/p&gt;
&lt;h2 id=&quot;where-do-we-go-from-here&quot;&gt;Where do we go from here?&lt;/h2&gt;
&lt;p&gt;As much as kernel-level anti-cheat software might not be the devil it is portrayed to be, it is an expensive, and ultimately risky piece of software for game companies to develop and maintain. And given the requirement for these solutions to be game specific, practically every game developer on the planet is now creating new software to be installed at the kernel level. Some even install multiple, and randomize which one you use.&lt;/p&gt;
&lt;p&gt;This state of affairs is not sustainable, not by a long shot. Trust in these solutions is already low, and any vendor messing up risks permanent damage on the entire industry. Worse, developers are unlikely to want to keep pouring money forever into this state of affairs.&lt;/p&gt;
&lt;p&gt;To me (and I must stress: I am not within the anti-cheating space), we are doomed to have one, or a mix of the possible futures:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We continue this path. Games become more and more expensive to maintain, and we risk a bad game developer mass bricking PCs,&lt;/li&gt;
&lt;li&gt;Game developers give up on PCs, and pivot to exclusively console, where the problems are far more limited&lt;sup&gt;&lt;a href=&quot;#user-content-fn-6&quot; id=&quot;user-content-fnref-6&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;. With proper KB+M support, the problem of switching users over is a lesser hurdle,&lt;/li&gt;
&lt;li&gt;Microsoft takes on the mantle: utilizing their extreme control over the system, and new hardware-level attestation features, they create a mode for games that allow them to validate no malicious software has been injected in the game, and no malicious hardware component is reading the memory. On the one hand, &lt;a href=&quot;https://secret.club/2021/06/28/windows11-tpms.html&quot;&gt;this removes agency from the user&lt;/a&gt;, over their own hardware. But it likely deals a massive blow to cheating within multiplayer titles.&lt;/li&gt;
&lt;li&gt;Microsoft, emboldened by the CrowdStrike disaster, takes steps to prevent any application from running within the kernel-level, instead choosing to provide that functionality via user-mode APIs, such as System Extensions on macOS, or eBPF on Linux. This changes the nature of the game, as neither the cheaters nor the defenders can elevate themselves to the kernel-level anymore.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The third option seems likeliest, with an outside chance of it happening alongside option 4. Kernel-level anti-cheat providers are already enforcing similar requirements for usage of their software, and it makes sense that Microsoft will step it to streamline this process. For users, from a “reduce the amount of crap on the system” perspective, this is the best hope.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hopefully one day soon, the platforms our games run on will offer developers the security features required to prevent cheating without necessitating extracurricular software.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.leagueoflegends.com/en-us/news/dev/dev-vanguard-x-lol/&quot;&gt;/dev: Vanguard x LoL&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There is already some optimism here: Microsoft have begun conversations with security partners (who are the biggest hindrance to removing user code from the kernel) about moving code out of the kernel, and &lt;a href=&quot;https://x.com/ItsGamerDoc/status/1816815420206194858&quot;&gt;along with security features like VBS Enclaves&lt;/a&gt;, present a pathway out.&lt;/p&gt;
&lt;p&gt;It is a sad state of things where developers must invest so much effort into providing a playable multiplayer experience. But we cannot do much but live with the state of things, as they are.&lt;/p&gt;
&lt;h2 id=&quot;further-reading&quot;&gt;Further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://secret.club/2020/04/17/kernel-anticheats.html&quot;&gt;Why anti-cheat software utilize kernel drivers | secret club&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Side note: secret.club is an excellent resource for anyone interested in the technical innards of cheats, and anti-cheat solutions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://secret.club/2020/04/28/anticheat_blocking_overclocking_tools.html&quot;&gt;Why anti-cheats block overclocking tools | secret club&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pushtotalk.gg/p/the-gamers-do-not-understand-anti-cheat&quot;&gt;The Gamers Do Not Understand Anti-Cheat - by Ryan K. Rigney&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.leagueoflegends.com/en-us/news/dev/dev-vanguard-x-lol/&quot;&gt;/dev: Vanguard x LoL - League of Legends&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.leagueoflegends.com/en-us/news/dev/dev-null-anti-cheat-kernel-driver/&quot;&gt;/dev/null: Anti-Cheat Kernel Driver - League of Legends&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://archive.is/JoWAl&quot;&gt;Gaffer on Games | Never Trust the Client&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/Diabotical/comments/cqtewi/equ8_anticheat_findings/&quot;&gt;EQU8 anti-cheat findings : r/Diabotical&lt;/a&gt; (as mentioned in the footnotes, EQU8 is no longer the technical solution for Diabotical following their acquisition by 1047 Games)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.xda-developers.com/dma-ai-riot-interview/&quot;&gt;DMA and AI are the next frontier of online cheating, but Riot has a plan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/RiotBrightmoon/status/1743311702652014778&quot;&gt;Riot’s position on macOS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;post-script&quot;&gt;Post-script&lt;/h2&gt;
&lt;h3 id=&quot;what-about-linux-and-mac&quot;&gt;What about Linux and Mac?&lt;/h3&gt;
&lt;p&gt;As sad as it is, the userbase is not significantly high enough for companies to invest into these platforms (yes, this is a chicken and egg problem). It is likely the cost for developing on Windows alone is exorbitantly high. The lay of the land will continue until developers have sufficient reason to change what they’re doing.&lt;/p&gt;
&lt;p&gt;The other problem is the inherent difficulty of protecting Linux.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It’s the same thing when we’re talking about why we can’t support Linux. The distributions have become bespoke and so freely customizable, we have no real viable way to attest to the security of its kernel. The whole operating system itself could be the cheat. (2/4)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://x.com/deteccphilippe/status/1778586679001108869&quot;&gt;Phillip Koskinas, head of Riot Vanguard&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;the-reports-around-vanguard-bricking-computers-appear-to-inaccurate-as-of-writing&quot;&gt;The reports around Vanguard bricking computers appear to inaccurate, as of writing&lt;/h3&gt;
&lt;p&gt;Riot have denied them, and the symptoms do not appear consistent with a kernel-level driver failure (as we have so aptly seen with Crowdstrike).&lt;/p&gt;
&lt;p&gt;What appears to have happened is the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vanguard requires specific hardware features to enabled on computers. These settings are required to protect game integrity,&lt;/li&gt;
&lt;li&gt;When users were informed that they did not have these settings enabled, many enabled them, without reading the appropriate documentation,&lt;/li&gt;
&lt;li&gt;What that documentation would have revealed is that their computer may not support those features being enabled.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To call this Riot’s fault is a bit much, and takes away agency from the people using the computer. Riot did not automatically turn them on.&lt;/p&gt;
&lt;p&gt;Riot are allowed to require those features.&lt;/p&gt;
&lt;p&gt;This may have been a lapse in user communication, and Riot should attempt to document this in a clearer fashion to avoid users falling into this trap.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.reddit.com/r/ValorantTechSupport/comments/wqcc93/valorant_turning_off_internet_every_time_it_opens/&quot;&gt;There is a potential issue with Vanguard improperly interfering with WiFi drivers&lt;/a&gt;, based on user reporting. While this does not brick computers, it does prevent normal operating.&lt;/p&gt;
&lt;h3 id=&quot;lets-bring-back-server-communities-of-old&quot;&gt;Let’s bring back server communities of old&lt;/h3&gt;
&lt;p&gt;A common retort is that we should abandon modern matchmaking solutions, and instead rely upon people to operate servers, who can then manually ban cheaters.&lt;/p&gt;
&lt;p&gt;While I agree that all modern titles should offer options for users to host their own servers, I do not believe this to be a viable defence strategy.&lt;/p&gt;
&lt;p&gt;For one, server admins (and other players) are not fantastic judges of whether people are cheating. Take this &lt;a href=&quot;https://www.youtube.com/watch?v=zP5OLmL0hBE&quot;&gt;2009 clip of 3kliksphilip&lt;/a&gt; being banned from a CSS server for… well, to be blunt, incredibly mediocre gameplay by modern standards. This is during the heyday of community servers, so I do not find it convincing that things would be better today.&lt;/p&gt;
&lt;p&gt;Quite frankly, I &lt;em&gt;was&lt;/em&gt; that server admin at points. So, from experience, I understand how problematic making decisions on players is. Unless the cheater is obvious, leaving judgements to other humans leads to problems.&lt;/p&gt;
&lt;p&gt;High-level cheaters present an even more impossible challenge. When you know how to disguise your cheating effectively, or limit your cheating to information only, you become extremely difficult to ban.&lt;/p&gt;
&lt;h3 id=&quot;sue-them-all-to-death&quot;&gt;Sue them all to death?&lt;/h3&gt;
&lt;p&gt;Game developers do occasionally take legal action against cheat developers. Could they scale this up to fight them?&lt;/p&gt;
&lt;p&gt;Alas, this is hardly sustainable. For one, lawsuits are expensive, and it is unclear whether game developers will ever recoup the money. They’re slow, meaning competitors will have ample time to step in, and users plenty of opportunity to transition.&lt;/p&gt;
&lt;p&gt;The biggest problem, like with ransomware operators, is that many operate outside of areas where game developers can enact legal action. It’s basically worthless to try and fight anyone based out of Russia.&lt;/p&gt;
&lt;h3 id=&quot;hardware-cheats-make-this-all-moot-no&quot;&gt;Hardware cheats make this all moot, no?&lt;/h3&gt;
&lt;p&gt;Cheats have escalated to the point where they are components, installable into your computer, that read the memory of your computer to get you your cheats. But both &lt;a href=&quot;https://blog.faceit.com/developer-blog-new-updates-on-faceit-anti-cheat-aa7a47cc90da&quot;&gt;FACEIT&lt;/a&gt;, and Vanguard claim the ability to detect them. So, already, hardware cheats are not impervious to anti-cheat providers.&lt;/p&gt;
&lt;p&gt;But critically: forcing cheats to run within this environment increases the barrier for users to cheat. You need to purchase a hardware component, and tamper with your PC to install it. This raises the costs, and the effort required, and forces users away from this.&lt;/p&gt;
&lt;h3 id=&quot;server-side-measures&quot;&gt;Server-side measures&lt;/h3&gt;
&lt;p&gt;A logical solution to reduce the efficacy of information cheats is to reduce the amount of information sent to game clients. For instance, you only need to send the location of an enemy player right as you are about to see him.&lt;/p&gt;
&lt;p&gt;The reality is that this is a rather old idea, and has been implemented by many games: see &lt;a href=&quot;https://technology.riotgames.com/news/demolishing-wallhacks-valorants-fog-war&quot;&gt;Riot’s article for their VALORANT implementation&lt;/a&gt;. CS:GO implemented this same idea in 2015, although a cursory glance seems to reveal that this stopped working with the release of CS2. Examples of the community anti-cheat &lt;a href=&quot;https://www.youtube.com/watch?v=qkhQgYB4lAA&quot;&gt;SMAC&lt;/a&gt; implementing it can be seen as far back as 2012 (although SMAC’s implementation/FACEIT’s config of SMAC was too aggressive, leading to pop-in scenarios when peeking corners).&lt;/p&gt;
&lt;p&gt;Does it work? Yes? Does it solve the problem entirely? No, dear god, no.&lt;/p&gt;
&lt;p&gt;Beyond that, most game developers have already elected not to trust the client for information, which prevents clients from saying “I have infinite health”, and the server going “OK, that seems legitimate”. Of course, in peer-to-peer titles where a user is the server, you can bypass that by forcibly making yourself the host, and then you are the server validating this information - hence why, after a period of P2P titles, games have reverted to servers hosted by the developer.&lt;/p&gt;
&lt;h3 id=&quot;ai-anti-cheat&quot;&gt;AI anti-cheat?&lt;/h3&gt;
&lt;p&gt;In the spirit of moving things away from the client, some technology providers are exploring using artificial intelligence to automatically detect cheats from user behaviour.&lt;/p&gt;
&lt;p&gt;Valve are the most famous example, deploying a solution called “VACNet” to detect suspicious behaviour, and sending them to the manual review service “Overwatch”, for players to judge.&lt;/p&gt;
&lt;p&gt;Whether or not this is working is difficult to tell. For one, after the launch of CS2, Valve appears to have temporarily disabled the solution when it was &lt;a href=&quot;https://www.youtube.com/watch?v=fiGarzzt9dQ&amp;#38;t=0s&quot;&gt;accidentally banning players for spinning their mouse too fast&lt;/a&gt;. It appears to have been brought back online since.&lt;/p&gt;
&lt;p&gt;It also does not ban informational cheats (i.e. wallhacks, ESPs, radar hacks).&lt;/p&gt;
&lt;p&gt;Riot seem skeptical of the efficacy of AI anti-cheats for detecting aimbots.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;And even solely for aimbots, recall just isn’t that great. The best models can only identify around 30-50% of cheats on server-sided player input alone, and this is not sufficient for a free competitive game with literally no barriers to reentry. Worse, aimbot developers have already started offering “humanization” features to prevent player reports, and while they’re still mostly goofy pseudo-random noise generators, at some point, a particularly enterprising young cheater will spend the weekend training a model to “move the mouse like it’s a real boy.”&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.leagueoflegends.com/en-gb/news/dev/dev-vanguard-x-lol/&quot;&gt;/dev: Vanguard x LoL&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;ai-behaviour-grouping&quot;&gt;AI behaviour grouping?&lt;/h3&gt;
&lt;p&gt;Valve also have another ace up their sleeves. Using AI, they attempt to rank Steam accounts by the likelihood of them cheating. Data points such as their interactions on Steam, behaviour within the game, and whether they are running CS2 in “Trusted Mode”, inform an AI classifier to group you. You are then only matchmaked with players within the same group.&lt;/p&gt;
&lt;p&gt;Within CS:GO, I would rate this system as having worked &lt;strong&gt;for me&lt;/strong&gt;. Within CS2, the system was not working for me, or my trust ranking unexpectedly dropped (very little transparency to the user on this).&lt;/p&gt;
&lt;p&gt;Critically, it’s difficult to evaluate the system, because it will be different for each user. How will the experience be for a new, but legitimate user? There won’t be many data points for them, so will it automatically put them in the low trust tier, forcing them to play with cheaters? &lt;a href=&quot;https://www.reddit.com/r/GlobalOffensive/comments/11w0cl4/csgo_for_new_players_is_a_hellish_experience/&quot;&gt;At least one user has reported this as an issue&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;wait-how-many-third-party-anti-cheats-exist-for-cs&quot;&gt;Wait, how many third-party anti-cheats exist for CS?&lt;/h3&gt;
&lt;p&gt;As you may have seen in the table, there are at least 4 different providers for external anti-cheats for Counter-Strike. &lt;a href=&quot;https://www.reddit.com/r/Steam/comments/3kehge/is_it_just_me_or_does_easyanticheat_esports_seem/&quot;&gt;Easy Anti-Cheat&lt;/a&gt; used to provide esport services for Counter-Strike too.&lt;/p&gt;
&lt;p&gt;ESL had an anti-cheat, but shut it down in 2021. For all intents and purposes, the anti-cheat was dead in 2015, when ESL acquired ESEA, who had a more renowned anti-cheat. ESEA’s anti-cheat would too be subsumed when ESL merged with FACEIT.&lt;/p&gt;
&lt;p&gt;CEVO, a now defunct competitor to ESEA/FACEIT, had their own anti-cheat.&lt;/p&gt;
&lt;p&gt;To put it simply, the community has universally decided that the default anti-cheat solution provided with Counter-Strike is not sufficient enough for high-level gameplay (and especially tournament gameplay), and as such has created an entire ecosystem of competitors to try and defend the game.&lt;/p&gt;
&lt;p&gt;The most damning confirmation of the above claim is that qualifiers for Valve events have to be ran with a proprietary, third-party anti-cheat. A cause of controversy during the qualifiers for the PGL Copenhagen Major 2024 was that the third-party AC, Akros, was not good enough. The vendor, for their part, responded in a now deleted Twitter post, claiming &lt;a href=&quot;https://web.archive.org/web/20240111205526/https://twitter.com/AkrosAC/status/1745506435662782890&quot;&gt;cheating is out of control&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;game-developers-would-love-to-not-make-kernel-level-anti-cheats&quot;&gt;Game developers would love to not make kernel-level anti cheats&lt;/h3&gt;
&lt;p&gt;A general point: making kernel-level anti-cheats is an absolutely insane proposition for a company to take on, without there being the need to do so.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The additional scrutiny from customers is unwanted,&lt;/li&gt;
&lt;li&gt;The requirement to hire capable developers of building these systems safely,&lt;/li&gt;
&lt;li&gt;The potential blowback if the system does fall over,&lt;/li&gt;
&lt;li&gt;The monetary impact of trying to deal with the above problems.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I do not see why a company would willingly take this on, without feeling that their products are genuinely at risk without a capable anti-cheat.&lt;/p&gt;
&lt;h2 id=&quot;footnotes&quot;&gt;Footnotes&lt;/h2&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;Used to be a generic technology provider, but was acquired by 1047 Games for exclusive use in first-party titles. &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;During the writing of this piece, ESPORTAL declared bankruptcy. &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-3&quot;&gt;
&lt;p&gt;Banks (at least within the UK) are typically wise to these sorts of attacks: session times are extremely short, and transactions likely require confirmation on your phone, with some form of verification. Some UK challenger banks don’t even provide websites. The end result is that stealing your bank session, while bad, is not catastrophic. &lt;a href=&quot;#user-content-fnref-3&quot; data-footnote-backref aria-label=&quot;Back to reference 3&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-4&quot;&gt;
&lt;p&gt;Caveat: more and more websites require confirmation for card purchases, on a second-factor. &lt;a href=&quot;#user-content-fnref-4&quot; data-footnote-backref aria-label=&quot;Back to reference 4&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-5&quot;&gt;
&lt;p&gt;Never is not strictly true: it was reported that &lt;a href=&quot;https://www.theverge.com/2024/7/19/24201927/microsoft-crowdstrike-update-fix-turn-off-on-pc&quot;&gt;roughly 15 reboots&lt;/a&gt; of a computer could resolve the issue. Each reboot would download a little bit more of the update to solve the issue (I think). &lt;a href=&quot;#user-content-fnref-5&quot; data-footnote-backref aria-label=&quot;Back to reference 5&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-6&quot;&gt;
&lt;p&gt;There are no active exploits for the latest version of game consoles, and the few hardware exploits, such as XIM, are expensive, and a far smaller attack surface to detect. &lt;a href=&quot;#user-content-fnref-6&quot; data-footnote-backref aria-label=&quot;Back to reference 6&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Will Counter-Strike coaching evolve?</title><link>https://bphilip.uk/blog/2024-07-14-will-cs-coaching-evolve/</link><guid isPermaLink="true">https://bphilip.uk/blog/2024-07-14-will-cs-coaching-evolve/</guid><description>Thinking about how aim coaching might be a stepping stone to more advanced coaching</description><pubDate>Sun, 14 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Recently, CS professionals STYKO and EliGE have shared the fact that they have employed the services of aim coaches. Such moves are relatively new to Counter-Strike: while aiming is considered an important aspect to Counter-Strike, professionals usually improve their skill in this venture with deathmatching, or training with Counter-Strike maps such as “aim_botz”, or full bespoke suites such as Refrag (EliGE partly owns Refrag, after acquiring it from ESEA).&lt;/p&gt;
&lt;p&gt;CS, as is typical, is late to the party. VALORANT and Overwatch have diverse aim coaching scenes, and professionals have been already engaging the services of professionals.&lt;/p&gt;
&lt;p&gt;But aiming is just one of many potential areas of the game where an external observer might be useful.&lt;/p&gt;
&lt;h2 id=&quot;lets-take-a-look-at-traditional-sports&quot;&gt;Let’s take a look at traditional sports&lt;/h2&gt;
&lt;p&gt;Shooting coaches are present in both football, basketball, and hockey, even if the meaning of shooting differs. Football also has coaches for each of the positions on the pitch, such as a defensive coach. Baseball has pitching, hitting and fielding coaches. Tennis has serving and footwork coaches.&lt;/p&gt;
&lt;p&gt;In short, there are a lot of skill isolation practices embedded in traditional sports. It makes sense, when you think about it. Coaches may be fantastic at individual aspects of a sport, but not capable of putting the entire piece together for themselves: but they can impart their knowledge to those who can.&lt;/p&gt;
&lt;p&gt;Esports are continually learning from traditional sports: it makes sense to follow in their footsteps in how we train elite individuals.&lt;/p&gt;
&lt;h2 id=&quot;making-the-unintended-deliberate&quot;&gt;Making the unintended, deliberate&lt;/h2&gt;
&lt;p&gt;All professional players have exceptional aim: but for most, it comes without deliberate effort. The risk here is that, without extrinsically understanding what makes you great, these silent habits could disappear, and compromise your skill level.&lt;/p&gt;
&lt;p&gt;From my amateur analysis, ZywOo is a textbook example of “calm aim”, a descriptor within aiming communities to describe players who maintain a low tension within their aim for the majority of their gameplay. This is one of the things that allows him to have the exceptional accuracy that he does. It would be inappropriate to change it, but it might be valuable for him to have the insight into that aspect of his skill.&lt;/p&gt;
&lt;p&gt;Xyp9x, towards the end of his career, demonstrated the exact opposite. Watching him felt like seeing someone vice-grip his mouse, and it meant that during close engagements, his aim would be shaky and inaccurate. At the time I posited that his mouse was too light, but maybe his aiming technique had atrophied during his extended sick leave, and actually, what he needed was an aiming coach to help him understand what had gone wrong, and unlock the aim that he had years ago.&lt;/p&gt;
&lt;h2 id=&quot;what-else-could-you-isolate&quot;&gt;What else could you isolate?&lt;/h2&gt;
&lt;p&gt;As mentioned earlier, aiming has emerged as a mini-industry. Aim coaches and specialised aim training software has emerged to allow players to optimise this specific skill. Aiming has, itself become a competitive game.&lt;/p&gt;
&lt;p&gt;But aiming is hardly the only skill present in Counter-Strike: if it were, aim coaches would be playing the game, rather than helping from the sidelines.&lt;/p&gt;
&lt;p&gt;Take movement. The way that you navigate the map, and position your character, helps give you advantages over your opposition: whether it is getting to a location faster because you efficiently take your steps, or by making your player character as difficult as possible to hit&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. With isolation game modes for movement already existing in the form of KZ, and a plethora of talented individuals within that community, why not enlist one of them to coach you?&lt;/p&gt;
&lt;p&gt;Taking a leaf out of football’s book, what about abstracting aspects of team play? You could translate a set-piece coach into an executes coach. Refrag already has tooling to simulate defending against executes, as well as game modes such as executes&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; and retakes. Attack and defence coaches translate into coaches for specific roles.&lt;/p&gt;
&lt;p&gt;But we might be getting ahead of ourselves here.&lt;/p&gt;
&lt;p&gt;For one, budgetary constraints mean that teams may not be able to afford all of this extra personnel. Equally, with only 5 players to coach, it may make more sense for the primary coach to take on these roles. Football teams have 20-30 people to train, and to get playing on the same page, which means that you need assistance. A 5 man team does not face this issue.&lt;/p&gt;
&lt;p&gt;Another caveat is that with 5 players, each player has much more space to play uniquely, compared to football. Taking away that individuality might do more harm than help, if coaches are too prescriptive. It dulls their natural instinct, but also, makes them more predictable and readable. If role coaches do come into fashion, they will need to take care to manage the balance.&lt;/p&gt;
&lt;h2 id=&quot;if-phil-jackson-came-back-still-no-coaching-me&quot;&gt;”If Phil Jackson came back, still no coaching me”&lt;/h2&gt;
&lt;p&gt;ZywOo is one of the all-time Counter-Strike greats. He has never been below the 2nd best player in the world throughout this professional career.&lt;/p&gt;
&lt;p&gt;He is notable in that he doesn’t play deathmatch. He does play KZ and surf, but only for fun. His primary mode of practice is just playing the game as intended, a 5v5 game against other players.&lt;/p&gt;
&lt;p&gt;donk is a phenom, equalling the all-time Big Event record at his debut at Katowice, at the age of 16 years old. He is the best rifler in the world right now. He too does not play deathmatch, choosing to prefer 5v5 competitive games.&lt;/p&gt;
&lt;p&gt;You cannot ignore these two stories. Some of the best talents in the game eschew traditional wisdom, and instead rise to greatness by just playing the game as intended. If these players don’t even play the pre-requisites to employing aim coaching, how can we expect them to go that step further?&lt;/p&gt;
&lt;p&gt;It spills cold water on the idea that aim training is necessary to be a good player.&lt;/p&gt;
&lt;p&gt;Counter-Strike has always looked away from the latest advances in technology. ZOWIE mice, despite having been leapfrogged technically, remain stalwarts amongst top players. Aim trainers have had limited take up, with players sticking to deathmatch, and custom maps such as aim_botz&lt;sup&gt;&lt;a href=&quot;#user-content-fn-3&quot; id=&quot;user-content-fnref-3&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;. Yet despite this, players who struggle to break through in Counter-Strike go on to light up the world in other titles: and this has led to a tradition within CS to keep things the way that they are.&lt;/p&gt;
&lt;p&gt;More than just being exceptions, these players actively inhibit the growth of coaching in the scene. New players will always follow in the example of those ahead of them. From taking configs and gear, copying is rampant, and the routines of professionals are studied by many. EliGE is a truly elite level player, and his uptake of coaching has changed the course of it’s use in Counter-Strike, but until the once-in-a-lifetime player emerges, backed by coaches aplomb, convincing the rest of the scene will be a difficult endeavour.&lt;/p&gt;
&lt;hr/&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;donk’s &lt;a href=&quot;https://www.youtube.com/watch?v=391BV8buysQ&quot;&gt;movement mechanics&lt;/a&gt; have become a massive point of analysis following his stratospheric rise. &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;This hasn’t been ported over to CS2, unfortunately. &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-3&quot;&gt;
&lt;p&gt;It might be unfair to characterise aim_botz as not having once been state of the art. It likely influenced VALORANT’s warm up map. However, aim trainers have evolved to have substantially more depth. &lt;a href=&quot;#user-content-fnref-3&quot; data-footnote-backref aria-label=&quot;Back to reference 3&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>The Simple Phone should have rung alarm bells to Simple Mobile Tools&apos; future</title><link>https://bphilip.uk/blog/2023-12-06-simple-phone-should-have-rung-alarm-bells/</link><guid isPermaLink="true">https://bphilip.uk/blog/2023-12-06-simple-phone-should-have-rung-alarm-bells/</guid><description>Thoughts on why Simple Mobile Tools ended up being sold to an Israeli app emporium</description><pubDate>Wed, 06 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Simple Mobile Tools are a set of open-source “shareware” apps. Examples of applications included in the suite include “Simple Gallery”, “Simple Calendar” and “Simple Contacts”.&lt;/p&gt;
&lt;p&gt;While the applications are open-source, the developer made money through proprietary app stores versions. From the Play Store, the Gallery is only free for 14 days, before you are required to buy a license. F-Droid and GitHub were options for acquiring fully-free binaries, but not often used by regular users.&lt;/p&gt;
&lt;p&gt;My personal experiences with their products have been fine. They aim to provide the essentials, but not much else. To Android aficionados, this is valuable.&lt;/p&gt;
&lt;p&gt;This month, it was uncovered that they were acquired by Israeli app developer ZipoApps&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. From their website&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; and Play Store page&lt;sup&gt;&lt;a href=&quot;#user-content-fn-3&quot; id=&quot;user-content-fnref-3&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;, ZipoApps’ business model can be deciphered: acquire existing apps that are popular, and then load them full of ads and expensive subscriptions to extract as much value from the user base they already have.&lt;/p&gt;
&lt;p&gt;Alarm bells have begun screaming within the user base.&lt;/p&gt;
&lt;h2 id=&quot;the-alarm-bells-should-have-been-ringing-a-year-ago&quot;&gt;The alarm bells should have been ringing a year ago&lt;/h2&gt;
&lt;p&gt;In 2022, the project announced a bizarre pivot: they would be creating a phone, that would be powered by the Simple Mobile Tools set of applications&lt;sup&gt;&lt;a href=&quot;#user-content-fn-4&quot; id=&quot;user-content-fnref-4&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;#user-content-fn-5&quot; id=&quot;user-content-fnref-5&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Nothing indicated that this would work. For a start, a phone consisting of Simple Mobile Apps, microG and F-Droid (i.e. no Google products) is a hard sell, even to the extreme enthusiast user base. Regular users are entirely out of the equation, as getting apps would be much more difficult for them.&lt;/p&gt;
&lt;p&gt;The device itself was made using budget components from 2018. Looking at the pictures, it appears to be a rebadged Coolpad Cool S &lt;sup&gt;&lt;a href=&quot;#user-content-fn-6&quot; id=&quot;user-content-fnref-6&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;#user-content-fn-7&quot; id=&quot;user-content-fnref-7&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;. As a company, Coolpad don’t have the greatest record, having shipped phones with malware twice &lt;sup&gt;&lt;a href=&quot;#user-content-fn-8&quot; id=&quot;user-content-fnref-8&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;8&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;#user-content-fn-9&quot; id=&quot;user-content-fnref-9&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;9&lt;/a&gt;&lt;/sup&gt;. Given that this is the ODM who are likely providing the firmware, this should be a point of concern.&lt;/p&gt;
&lt;p&gt;Simple Mobile Tools are user-mode applications, with the majority of work being done by a lone developer. Nothing indicated that the company had the requisite expertise to provide a version of Android for the phone. This is a task that major companies struggle with &lt;sup&gt;&lt;a href=&quot;#user-content-fn-10&quot; id=&quot;user-content-fnref-10&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;10&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;The device contained the software package “Simple OS”, itself based on a platform called “Lunar OMP”. Nothing is clear about what Lunar OMP actually is. Their website consists of vague marketing material &lt;sup&gt;&lt;a href=&quot;#user-content-fn-11&quot; id=&quot;user-content-fnref-11&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;11&lt;/a&gt;&lt;/sup&gt;, with broken links to both their documentation &lt;sup&gt;&lt;a href=&quot;#user-content-fn-12&quot; id=&quot;user-content-fnref-12&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;12&lt;/a&gt;&lt;/sup&gt; and Gerrit &lt;sup&gt;&lt;a href=&quot;#user-content-fn-13&quot; id=&quot;user-content-fnref-13&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;13&lt;/a&gt;&lt;/sup&gt;. The linked GitHub account contains nothing of note&lt;sup&gt;&lt;a href=&quot;#user-content-fn-14&quot; id=&quot;user-content-fnref-14&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;14&lt;/a&gt;&lt;/sup&gt;. Lunar OMP may have had more information accessible when the Simple Phone was being promoted, but it has not lasted the year.&lt;/p&gt;
&lt;p&gt;In the end, while the product page indicates there were some sales, the project was marked as discontinued within a year&lt;sup&gt;&lt;a href=&quot;#user-content-fn-15&quot; id=&quot;user-content-fnref-15&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;15&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;&lt;a href=&quot;#user-content-fn-16&quot; id=&quot;user-content-fnref-16&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;16&lt;/a&gt;&lt;/sup&gt; by the lead/sole developer.&lt;/p&gt;
&lt;p&gt;What this means for long-term support of the phone is unclear, especially with the sale of the apps.&lt;/p&gt;
&lt;h2 id=&quot;this-was-always-going-to-be-the-outcome&quot;&gt;This was always going to be the outcome&lt;/h2&gt;
&lt;p&gt;Simple Phone never made much sense, outside of the decrepit product it produced.&lt;/p&gt;
&lt;p&gt;For people focused on privacy or security, there has always been a much better option. Buy a Pixel, and install GrapheneOS on it. GrapheneOS is a serious project, with endorsement from &lt;a href=&quot;https://twitter.com/Snowden/status/1175430722733129729&quot;&gt;Snowden&lt;/a&gt; amongst others. The project has had a laser focus on being secure, and outsteps Google here. Even price wise, a 2nd hand Pixel 5a and Graphene is the better choice. If you really wanted Simple’s apps, one could download them from F-Droid.&lt;/p&gt;
&lt;p&gt;The phone, and more deeply, the project, faced a more existential threat.&lt;/p&gt;
&lt;p&gt;In the 8 years since Simple Gallery was created, Android OEMs became adept at producing software, to the point where most people would not seek out an alternative. Samsung, for example, abandoned the lacklustre TouchWiz, for OneUI, abandoning the noose they had placed on the performance and usability of their phones.&lt;/p&gt;
&lt;p&gt;Not only does this inhibit sales of the phone, but it reduces the marketshare for the apps themselves. Furthermore, as the apps are one-time purchases, the reduction in interest likely caused revenue to dry up. As time drew on, it must have become clearer that the future is small for the set of apps, and it was time to let go.&lt;/p&gt;
&lt;h2 id=&quot;was-the-phone-an-act-of-desperation&quot;&gt;Was the phone an act of desperation&lt;/h2&gt;
&lt;p&gt;From that lens, the phone might have been a last ditch effort to create a valuable ecosystem around his apps. While it is a bold play to say the least, it might have been one of the few, ethical ways for the enterprise to not stagnate.&lt;/p&gt;
&lt;p&gt;Once it failed, the project was doomed to a slow death. The final act, where the corpse is scavenged by predators, was inevitable.&lt;/p&gt;
&lt;h2 id=&quot;whats-next&quot;&gt;What’s next&lt;/h2&gt;
&lt;p&gt;While the total addressable market is small, the enthusiast nature of the apps’ users will keep it alive. The zombie of QuickPic, purchased by ad fraud company Cheetah Mobile&lt;sup&gt;&lt;a href=&quot;#user-content-fn-17&quot; id=&quot;user-content-fnref-17&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;17&lt;/a&gt;&lt;/sup&gt;, has been kept alive for the near decade it has been under their control&lt;sup&gt;&lt;a href=&quot;#user-content-fn-18&quot; id=&quot;user-content-fnref-18&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;18&lt;/a&gt;&lt;/sup&gt;, without any access to the source code.&lt;/p&gt;
&lt;p&gt;Simple Tools are open source, so forking is trivial, and at least one fork&lt;sup&gt;&lt;a href=&quot;#user-content-fn-19&quot; id=&quot;user-content-fnref-19&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;19&lt;/a&gt;&lt;/sup&gt; is already in progress. Given the deliberately minimal nature, this fork can take on a maintenance role: ensure it continues to work, but do little else. While the compatibility of apps across Android versions is good, breaking changes, such as the axing of 32-bit apps, do happen.&lt;/p&gt;
&lt;p&gt;For phone users, one can expect the experience to atrophy.&lt;/p&gt;
&lt;p&gt;For many, this app will serve as a continued warning against closed source apps, especially ones owned by smaller enterprises. All it takes is a change of heart by a single person, and the footing under these apps can disappear. The temptations of Chrome extension developers are well known&lt;sup&gt;&lt;a href=&quot;#user-content-fn-20&quot; id=&quot;user-content-fnref-20&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;20&lt;/a&gt;&lt;/sup&gt;. Without a shadow of a doubt, Android app developers get the same emails. Were it not open source, users might have been marshalled into the ad filled future. Instead, they have been given a ray of hope to move onwards.&lt;/p&gt;
&lt;h2 id=&quot;sourcesfootnotes&quot;&gt;Sources/footnotes&lt;/h2&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;GitHub issue, link to a comment by the creator confirming the sale: &lt;a href=&quot;https://github.com/SimpleMobileTools/General-Discussion/issues/241#issuecomment-1837102917&quot;&gt;Simple Mobile Tools bought by ZipoApps? · Issue #241 · SimpleMobileTools/General-Discussion · GitHub&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;ZipoApps website: &lt;a href=&quot;https://zipoapps.com/&quot;&gt;Home&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-3&quot;&gt;
&lt;p&gt;ZipoApps Play Store listing: &lt;a href=&quot;https://play.google.com/store/apps/developer?id=ZipoApps&amp;#38;hl=en_US&amp;#38;gl=US&quot;&gt;Android Apps by ZipoApps on Google Play&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-3&quot; data-footnote-backref aria-label=&quot;Back to reference 3&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-4&quot;&gt;
&lt;p&gt;Article: &lt;a href=&quot;https://liliputing.com/simple-phone-is-a-e399-google-free-android-phone-with-simple-mobile-apps-and-a-4-year-old-processor/&quot;&gt;Simple Phone is a €399 Google-free Android phone with Simple Mobile Apps (and a 4-year-old processor) - Liliputing&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-4&quot; data-footnote-backref aria-label=&quot;Back to reference 4&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-5&quot;&gt;
&lt;p&gt;Website: &lt;a href=&quot;https://simplephone.tech/eu/&quot;&gt;Reclaim your privacy with Simple Phone&lt;/a&gt;, archive: &lt;a href=&quot;https://archive.is/ejIq5&quot;&gt;Simple Phone - By the creators of Simple Mobile Tools&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-5&quot; data-footnote-backref aria-label=&quot;Back to reference 5&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-6&quot;&gt;
&lt;p&gt;Coolpad Cool S: &lt;a href=&quot;https://www.gsmarena.com/coolpad_cool_s-10685.php&quot;&gt;Coolpad Cool S - Full phone specifications&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-6&quot; data-footnote-backref aria-label=&quot;Back to reference 6&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-7&quot;&gt;
&lt;p&gt;Website: &lt;a href=&quot;https://simplephone.tech/eu/&quot;&gt;Reclaim your privacy with Simple Phone&lt;/a&gt;, archive: &lt;a href=&quot;https://archive.is/ejIq5&quot;&gt;Simple Phone - By the creators of Simple Mobile Tools&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-7&quot; data-footnote-backref aria-label=&quot;Back to reference 7&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-8&quot;&gt;
&lt;p&gt;Coolpad installing malware: &lt;a href=&quot;https://www.pcmag.com/news/malicious-software-found-on-coolpad-android-phones&quot;&gt;Malicious Software Found on Coolpad Android Phones | PCMag&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-8&quot; data-footnote-backref aria-label=&quot;Back to reference 8&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-9&quot;&gt;
&lt;p&gt;XHelper malware found on Coolpad phones: &lt;a href=&quot;https://old.reddit.com/r/Android/comments/dot30u/new_unremovable_xhelper_malware_has_infected/&quot;&gt;New ‘unremovable’ xHelper malware has infected 45,000 Android devices : Android&lt;/a&gt; (note: Symantec rely on online threads discussing the issue, where Coolpad comes up) &lt;a href=&quot;#user-content-fnref-9&quot; data-footnote-backref aria-label=&quot;Back to reference 9&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-10&quot;&gt;
&lt;p&gt;Article about Google’s 911 failures: &lt;a href=&quot;https://www.androidauthority.com/psa-google-pixel-911-emergency-calling-issues-3362990/&quot;&gt;PSA: Some Pixel owners still can’t dial 911 during an emergency&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-10&quot; data-footnote-backref aria-label=&quot;Back to reference 10&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-11&quot;&gt;
&lt;p&gt;Good Phone Foundation page on Lunar OMP: &lt;a href=&quot;https://goodphone.foundation/lunar/&quot;&gt;Open-source mobile OS - Get to know the Lunar OMP&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-11&quot; data-footnote-backref aria-label=&quot;Back to reference 11&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-12&quot;&gt;
&lt;p&gt;GPF Doc page: &lt;a href=&quot;https://docs.goodphone.foundation/en/LunarOS&quot;&gt;Site Unreachable&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-12&quot; data-footnote-backref aria-label=&quot;Back to reference 12&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-13&quot;&gt;
&lt;p&gt;GPF Gerrit: &lt;a href=&quot;https://gerrit.goodphone.foundation/&quot;&gt;Site Unreachable&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-13&quot; data-footnote-backref aria-label=&quot;Back to reference 13&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-14&quot;&gt;
&lt;p&gt;GPF GitHub: &lt;a href=&quot;https://github.com/goodphonefoundation&quot;&gt;goodphonefoundation (Good Phone Foundation) · GitHub&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-14&quot; data-footnote-backref aria-label=&quot;Back to reference 14&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-15&quot;&gt;
&lt;p&gt;reddit post from creator: &lt;a href=&quot;https://old.reddit.com/r/SimpleMobileTools/comments/16npqao/what_happened_to_the_simple_phone/&quot;&gt;What happened to the simple phone? : SimpleMobileTools&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-15&quot; data-footnote-backref aria-label=&quot;Back to reference 15&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-16&quot;&gt;
&lt;p&gt;reddit post: &lt;a href=&quot;https://old.reddit.com/r/SimpleMobileTools/comments/135v9q1/did_simple_phone_die/&quot;&gt;Did Simple Phone die? : SimpleMobileTools&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-16&quot; data-footnote-backref aria-label=&quot;Back to reference 16&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-17&quot;&gt;
&lt;p&gt;Cheetah being banned from GPlay: &lt;a href=&quot;https://www.androidpolice.com/2020/02/27/cheetah-mobile-apps-disappeared-play-store/&quot;&gt;Google has removed almost all Cheetah Mobile apps from the Play Store&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-17&quot; data-footnote-backref aria-label=&quot;Back to reference 17&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-18&quot;&gt;
&lt;p&gt;QuickPic fork: &lt;a href=&quot;https://xdaforums.com/t/mod-app-gallery-quickpic-2023.3790425/&quot;&gt;[MOD] (APP) Gallery QuickPic (2023) | XDA Forums&lt;/a&gt;, unclear if actually based on latest version, but people were modding 4.7.4 for at least 4 years after the acquistion: &lt;a href=&quot;https://xdaforums.com/t/app-quickpic-v4-5-2-classic-version.3204543/page-27#post-78970532&quot;&gt;[APP] QuickPic v4.5.2 (Classic version) | Page 27 | XDA Forums&lt;/a&gt;. &lt;a href=&quot;#user-content-fnref-18&quot; data-footnote-backref aria-label=&quot;Back to reference 18&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-19&quot;&gt;
&lt;p&gt;Fork of Simple Mobile Apps, previously called FossifyX: &lt;a href=&quot;https://github.com/FossifyOrg&quot;&gt;Fossify · GitHub&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-19&quot; data-footnote-backref aria-label=&quot;Back to reference 19&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-20&quot;&gt;
&lt;p&gt;HoverZoom+ thread on offers: &lt;a href=&quot;https://github.com/extesy/hoverzoom/discussions/670&quot;&gt;Temptations of an open-source browser extension developer · extesy/hoverzoom · Discussion #670 · GitHub&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-20&quot; data-footnote-backref aria-label=&quot;Back to reference 20&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>We need more online CS</title><link>https://bphilip.uk/blog/2023-11-06-we-need-more-online-cs/</link><guid isPermaLink="true">https://bphilip.uk/blog/2023-11-06-we-need-more-online-cs/</guid><description>A look to a more profitable, and competitive environment for Counter-Strike esports.</description><pubDate>Mon, 06 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The mundanity of seeing online CS during the pandemic has electrified a transition that was already happening - the end of tier 1 online events. The leagues were the last victims, with FLASHPOINT’s last event setting the framework for future online events.&lt;/p&gt;
&lt;p&gt;But the pandemic also unearthed a deeper scar tissue within the scene - the economics stopped making sense a long time ago. The industry has tried to paper over this with agreements such as the Louvre Agreement - tournament organisers would sell a fixed number of slots, which would guarantee you access to tier 1 offline events. If your team falls off, no need to worry - you will still be appearing at these events.&lt;/p&gt;
&lt;p&gt;But that in itself has lowered the competitive level of the entire high level CS - T2 teams can no longer breach the boundary, other than at Majors, where they frequently upset.&lt;/p&gt;
&lt;p&gt;With Valve coming to crackdown on closed ecosystems, and macroeconomic factors impacting spending, the question keeps popping up - how do we make this make sense?&lt;/p&gt;
&lt;p&gt;What if we’ve been overlooking something obvious?&lt;/p&gt;
&lt;h2 id=&quot;bring-back-tier-1-online-events&quot;&gt;Bring back tier 1 online events.&lt;/h2&gt;
&lt;p&gt;There are a number of costs involved with costing an offline event. From the arena to the equipment, there is a lot of responsibility.&lt;/p&gt;
&lt;p&gt;Online events require monumentally fewer resources. A server, 5 players, a solid anti-cheat client (with human moderation)&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, and two casters to join a TeamSpeak. If you really want to be cheap, you could make the casters themselves stream the event &lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;The DDoS scourge that afflicted online play was vanquished long ago, once the industry abandoned Skype. Internet connections and more optimal routing tech have caused pings to plummet.&lt;/p&gt;
&lt;p&gt;Illegal gambling is a genuine concern, but it is already a problem. Adding tier 1 teams into that circuit won’t dramatically change the nature of the problem.&lt;/p&gt;
&lt;p&gt;I’m not saying to move all events online, but to have more of them. The Leagues would be a great start.&lt;/p&gt;
&lt;p&gt;Esports has the unique luxury of being possible from our homes. Why are we not utilizing it?&lt;/p&gt;
&lt;h2 id=&quot;lower-stakes&quot;&gt;Lower stakes&lt;/h2&gt;
&lt;p&gt;Not every week in the Premier League is a big week, and not every big week is a big week for all the teams.&lt;/p&gt;
&lt;p&gt;Online tournaments (again, mainly leagues) provide low stakes action. A appetizer for high stakes, high octane LAN games. Without a crowd, players will play differently, and that isn’t necessarily a bad thing.&lt;/p&gt;
&lt;p&gt;By reducing the stress placed upon players, you’d also be able get more games without inducing the burn out that we’ve become accustomed to.&lt;/p&gt;
&lt;p&gt;Lower stakes gives more opportunities for smaller teams to dip their toes against top teams, compared to the difficulty of making it to a top tier LAN, and playing against an audience.&lt;/p&gt;
&lt;h2 id=&quot;we-can-include-more-teams&quot;&gt;We can include more teams&lt;/h2&gt;
&lt;p&gt;Adding a new team to a LAN event requires more hotels, flights, food and a longer event to accommodate them.&lt;/p&gt;
&lt;p&gt;Online? Those costs are near nothing. You would require extra games, sure, but these games are far cheaper to run. The offline ESL Pro League has 24 teams, where we used to have 32 across EU and NA, with another 16 in Asia and Oceania.&lt;/p&gt;
&lt;p&gt;When ESL Pro League Season 13 started, Heroic were the #13th best team in the world, and not an ESL partner. They would go on to top their group, and win in dramatic fashion against the world #4 in Gambit (who themselves rose to prominence online).&lt;/p&gt;
&lt;h2 id=&quot;a-hope-for-regional-scenes&quot;&gt;A hope for regional scenes&lt;/h2&gt;
&lt;p&gt;Counter-Strike has become European centric. The North and South American scenes have withered. There is very little regional competition, and the top teams abandon ship to move to Europe.&lt;/p&gt;
&lt;p&gt;By making it possible for teams to stay at home, while participating in competition, you might have top level teams going back and enriching their scenes more.&lt;/p&gt;
&lt;p&gt;(or maybe not: (&lt;a href=&quot;/blog/2023-09-12-na-cs-is-dead-but-maybe/&quot;&gt;NA CS is dead, but maybe it was always going to be&lt;/a&gt;)&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;LAN events are the bread and butter of the Counter-Strike world - but how about we leave them as just the butter?&lt;/p&gt;
&lt;p&gt;Online events are a unique aspect to esports, that allow us to emulate the better parts of league sports - a oscillation in the intensity of matches, an opportunity for more teams to participate, all while doing so at a fraction of the budget.&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;Yes, we did have the coach cheating scandal, something which could have only happened online. While it was a wide reaching scandal, the impact on tier 1 competition (our main target here) would be far more minimal. &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;I don’t mean that as a far-fetched example - this was how it was done back in the day. &lt;a href=&quot;https://www.youtube.com/watch?v=_gPHWTCapqk&quot;&gt;This is a clip of Semmler casting an insane moment by rain in the qualifiers for ESL One Cologne 2014&lt;/a&gt; at 720p, with his settings clearly configured wrong. This was because Anders, who was meant to be doing the main stream (&lt;a href=&quot;https://www.youtube.com/watch?v=Nt81eVYCcX8&quot;&gt;and did so on the first map&lt;/a&gt;), was DDoSed. This was for a MAJOR. How far we’ve come. &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>NA CS is dead, but maybe it was always going to be</title><link>https://bphilip.uk/blog/2023-09-12-na-cs-is-dead-but-maybe/</link><guid isPermaLink="true">https://bphilip.uk/blog/2023-09-12-na-cs-is-dead-but-maybe/</guid><description>Looking a bit wider than NA reveals some common trends.</description><pubDate>Tue, 12 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;North American Counter-Strike is dead, or in the middle of dying.&lt;/p&gt;
&lt;p&gt;Team Liquid, the prototypical NA team, now fields a primarily European roster, while Cloud9’s roster is Russian. The remaining stalwarts in Complexity and EG are not competitive internationally.&lt;/p&gt;
&lt;h2 id=&quot;this-isnt-unique-to-north-america&quot;&gt;This isn’t unique to North America.&lt;/h2&gt;
&lt;p&gt;This death of the national team is framed as a problem endemic to North America. But one only needs to look in Europe to see that the concept as a whole, is withering away.&lt;/p&gt;
&lt;p&gt;In 2015, the top 5 consisted of fnatic, EnVy, Na’Vi, TQM (ex-TSM) and Virtus Pro. Sweden, France, CIS, Denmark, and Poland. In 2023, there are no elite Swedish, French, or Polish line ups. Na’Vi abandoned their fully Russian speaking lineup. Only Denmark remains, with Heroic and Astralis.&lt;/p&gt;
&lt;p&gt;While international teams had been around before, FaZe’s Antwerp victory changed the course irreversibly. The dreaded language barrier was no longer a problem.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/hltv-pgl.Dfc4snRQ_NKVsu.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;653&quot; height=&quot;652&quot;&gt;
&lt;em&gt;A smattering of EU flags at Stockholm 2021&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/hltv-cologne.oWC-JWtw_2aDonv.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;654&quot; height=&quot;641&quot;&gt;
&lt;em&gt;At Cologne 2023, the last big CS:GO event, the EU flags have truly taken over. And Monte and NiP barely count as national rosters, as they are English-speaking international rosters.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;talent-comes-from-everywhere&quot;&gt;Talent comes from everywhere&lt;/h2&gt;
&lt;p&gt;A language barrier was a gate for new talent. You might have been a better player than SmithZz, but could you speak French? And no top team was going to switch languages, while they were within touching distance of each other.&lt;/p&gt;
&lt;p&gt;The scene has evolved, and the ceiling for raw mechanical talent is higher than ever. New teams are capitalizing on the wealth of available talent by being English from the start, and formerly established teams are transitioning to keep up.&lt;/p&gt;
&lt;p&gt;Israeli players demonstrated this in 2023, with Spinx, flameZ, xertioN and NertZ emerging from a scene that has never had a notable team. Israel is only behind Denmark in representation in the top 3.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/hltv-israel.DzUY06RI_ZcQJlN.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;840&quot; height=&quot;638&quot;&gt;
This page doesn’t officially exist, but it demonstrates my point.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;fortunes-over-the-atlantic-ocean-may-yet-exist&quot;&gt;Fortunes over the Atlantic Ocean may yet exist&lt;/h2&gt;
&lt;p&gt;If the mechanical skills of North American players assert themselves, individual players can still venture over the ocean to a bright future. oBo and RUSH have already shown that American talent could fit on an EU team. Twistzz hammered that point home at FaZe.&lt;/p&gt;
&lt;p&gt;No team is willing to pass up talent anymore.&lt;/p&gt;
&lt;p&gt;Yet, of course, transplanting yourself across continents is a big ordeal, especially without the trappings of fame and fortune that other, well-established sports can offer. Some might say that this is the price for success, but this is easy for EU fans to say, given their players don’t have to make such a choice. Even Twistzz and NAF have the luxury of European relationships.&lt;/p&gt;
&lt;h2 id=&quot;a-scene-divided&quot;&gt;A scene divided&lt;/h2&gt;
&lt;p&gt;NA players grow up watching the demos of ZywOo, while EU players can play against him. Even in casual settings, EU players have the breadth of the entire continent to refine their skills against, while NA players have little in terms of elite talent to pick from.&lt;/p&gt;
&lt;p&gt;Compounding this further, retired legends also tend to contribute little to the scene, finding more lucrative retirement opportunities in content creation. This isn’t a dig - there is no obligation to do so. However, you cannot deny the lost opportunity for young talent to not play against the trophy winners of their region.&lt;/p&gt;
&lt;p&gt;All in all, this arrests their development. How can you be elite, without playing against them?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/FalleNCS/status/1693257082399817817&quot;&gt;FalleN raised a good point about the benefits of ESEA League&lt;/a&gt; bringing European talent to Europe for a couple of weeks. American tournaments have dried up over the years.&lt;/p&gt;
&lt;p&gt;When Brazil’s SK Gaming established themselves at the top of the world, NA had greatness on their doorstep. It is no surprise that Cloud9’s Boston victory, Liquid’s Grand Slam, and NRG becoming a #1 capable team happened in the years following.&lt;/p&gt;
&lt;h2 id=&quot;will-there-even-be-players&quot;&gt;Will there even be players?&lt;/h2&gt;
&lt;p&gt;Without a fully North American team to root with, will the viewership for Counter-Strike continue to diminish? Will this dissuade local players from even picking up the game competitively, without anyone to idolize.&lt;/p&gt;
&lt;p&gt;VALORANT has established itself at the top of the American tactical FPS foodchain, and while Counter-Strike 2 offers an opportunity to strike back, I’m unconvinced it’ll have the same cultural impact. Even without VALORANT, CS has bled players to other games, such as Apex Legends (Aceu and dizzy come to mind).&lt;/p&gt;
&lt;p&gt;You can’t force people to play something they’re not interested in - whether that be the game itself, or the lack of community surrounding it. Football is the apex sport in the world, and cricket stands tall behind it. Despite the success of these sports elsewhere, America is a non-existent force in both.&lt;/p&gt;
&lt;p&gt;Counter-Strike ending up at a similar fate would hardly be a bad thing. But America has contributed a rich tapestry to the games’ history, and it would be sad to see a future without American teams.&lt;/p&gt;</content:encoded></item><item><title>What Makes a CS:GO Major Playoff Stand Out?</title><link>https://bphilip.uk/blog/2023-05-30-what-makes-a-major-standout/</link><guid isPermaLink="true">https://bphilip.uk/blog/2023-05-30-what-makes-a-major-standout/</guid><description>A Look at Maps, Round Differentials, and Kill Differentials to evaluate how close Valve Major events have been over the years.</description><pubDate>Tue, 30 May 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;CS:GO Majors are supposed to be a raucous celebration of the game. The place where the best teams duke it out, in a desperate bid to establish themselves as the apex predator. There is no such as a free round within this theatre.&lt;/p&gt;
&lt;p&gt;Yet Boston 2018 was the last CS:GO major final to ever reach 3 maps.&lt;/p&gt;
&lt;p&gt;7 consecutive major finals, where the loser could not muster one map.&lt;/p&gt;
&lt;p&gt;What is going on?&lt;/p&gt;
&lt;h2 id=&quot;what-does-a-good-major-look-like&quot;&gt;What does a good major look like?&lt;/h2&gt;
&lt;p&gt;To me, a good major gradually becomes more competitive. Each stage delivers closer and closer matches - a gradual crescendo into the grand finals.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/average-round-diff.B3ZAYOLB_1CgtQR.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1000&quot; height=&quot;500&quot;&gt;&lt;/p&gt;
&lt;p&gt;Atlanta 2017 is considered an iconic (if underrated) major. The above graph shows why. A competitive event, where each stage got incrementally closer - building to a grand final where the teams were inseparable, winning the same number of rounds across the series. The story too was here: the legends of Virtus.Pro, seeking a 2nd major vs an Astralis trying to establish themselves.&lt;/p&gt;
&lt;p&gt;Krakow 2017 is interesting. Some pan the event for the underwhelming grand finalists. Maybe. Were the matches a close affair throughout? Yes.&lt;/p&gt;
&lt;p&gt;Cologne 2014 was a seminal event. The game was experiencing a unique influx of users. The event would be so memorable that ESL would re-host it every year, moving it from an expo at GAMESCOM to a full arena. Cologne doesn’t follow the perfect pattern, as the semis are less competitive than the quarters. However, let’s put this within context - this was one of the top 5 most competitive semi-finals. The grand final was another 0 round difference affair.&lt;/p&gt;
&lt;blockquote&gt;
&lt;h4 id=&quot;round-differential-during-semi-finals-at-valve-major-events&quot;&gt;Round differential during Semi Finals at Valve Major events&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/average-semi-final-round-diff.DixqrsNR_1HpKE7.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;700&quot; height=&quot;500&quot;&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Some grand finals even managed negative round differentials - the loser winning more rounds across the series.&lt;/p&gt;
&lt;p&gt;Berlin 2019 is exactly the opposite of what a major should be. The quarter finals are fine, but the semi-finals were less competitive, culminating in the biggest grand finals defeat in major history. It was also a result that was entirely predictable.&lt;/p&gt;
&lt;p&gt;Cluj-Napoca 2015, MLG Columbus 2016, and Cologne 2016 look like bad historical majors. Compared to the ones around them, I must agree - coldzera’s jumping double, or s1mple’s flying AWP doesn’t make the event great. The latter two events are saved by individual matches, but those majors were full of weak spots, especially the grand finals.&lt;/p&gt;
&lt;p&gt;Katowice 2019 was oh-so close to greatness. It had the closest semi-finals in major history. ENCE and Na’Vi duked it out brutally, the xseveN vs s1mple 1v1 symbolising a great Goliath being stoned by David. MiBR managed a close map against the savages of Astralis.&lt;/p&gt;
&lt;p&gt;And then came the grand finals. &lt;em&gt;sigh&lt;/em&gt;. &lt;a href=&quot;https://www.youtube.com/watch?v=NLVVQbK3OBM&quot;&gt;This was David vs Goliath 2&lt;/a&gt;, and this time, David was shown no mercy.&lt;/p&gt;
&lt;h2 id=&quot;speaking-of-astralis&quot;&gt;Speaking of Astralis&lt;/h2&gt;
&lt;p&gt;In 2018, Astralis set history by becoming the first team to not drop a map within the play off stages at a major. They would go on to repeat this feat 2 more times. Since then, Na’Vi and Vitality would also repeat this feat.&lt;/p&gt;
&lt;p&gt;To put this more into perspective - this was an event that didn’t happen for 11 majors, and then it happened 5/7 times.&lt;/p&gt;
&lt;p&gt;Vitality faced relatively easy opposition in Paris. Na’Vi didn’t face any world beaters: two lineups on the precipice of changes, and Gambit, that still faces struggles in 2023 to establish themselves.&lt;/p&gt;
&lt;p&gt;Katowice and London was much the same story, but Berlin wasn’t. Astralis faced one of the most dominant lineups in Liquid, and NRG, a future no.1 team in the world. NRG had even 2-0’d Astralis in a BO3 earlier on in the event.&lt;/p&gt;
&lt;p&gt;Sometimes majors are destined to be boring. Nothing was going to stop the brute force dominance they enacted for three majors.&lt;/p&gt;
&lt;p&gt;At the same time though, Na’Vi and Vitality repeating this feat should worry us.&lt;/p&gt;
&lt;h2 id=&quot;were-getting-less-maps&quot;&gt;We’re getting less maps&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/average-maps.Dvx-hHK8_1JSckC.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;700&quot; height=&quot;500&quot;&gt;&lt;/p&gt;
&lt;p&gt;With the exception of Rio, we’re getting less BO3s than before. London to Berlin was a particularly awful run (there was one series in the entire play-off series that had 3 maps), but Stockholm, Antwerp and Paris weren’t much better.&lt;/p&gt;
&lt;p&gt;Cologne 2015 to Cologne 2016 wasn’t brilliant either. It is salvaged by there being three majors a year, so this encompasses half a year, as opposed to the multi-year level of turgidity we’re seeing.&lt;/p&gt;
&lt;h2 id=&quot;some-of-the-worst-maps-in-major-play-off-history&quot;&gt;Some of the worst maps in Major play-off history&lt;/h2&gt;
&lt;h4 id=&quot;natus-vincere-vs-nip-semi-final-of-cluj-2015&quot;&gt;&lt;a href=&quot;https://www.hltv.org/matches/2298988/ninjas-in-pyjamas-vs-natus-vincere-dreamhack-open-cluj-napoca-2015&quot;&gt;Natus Vincere vs NiP, semi-final of Cluj 2015&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;NiP shouldn’t have been here. TSM were tournament favourites, but NiP were their kryptonite and delivered here&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. Na’Vi then promptly showed us why NiP shouldn’t have been there, with this match having the largest kill differential ever at a major.&lt;/p&gt;
&lt;h4 id=&quot;virtus-pro-vs-keyd-quarter-finals-of-katowice-2015&quot;&gt;&lt;a href=&quot;https://www.hltv.org/matches/2294625/virtuspro-vs-keyd-esl-one-katowice-2015&quot;&gt;Virtus Pro vs Keyd, quarter-finals of Katowice 2015&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Keyd could not afford to make it to the major. Donations, from pros like &lt;a href=&quot;https://twitter.com/flusha/status/564557021513793538&quot;&gt;like flusha&lt;/a&gt; helped get them here. They played with heart, and made it to the quarter-finals. But Virtus.Pro did give them any sympathy. VP delivered the biggest round differential, and the 2nd worst kill differential in Major history - despite Keyd winning a map. We all know where the story of FalleN and fer would end up at, but it wasn’t obvious here.&lt;/p&gt;
&lt;h4 id=&quot;gambit-vs-fnatic-quarter-finals-of-cologne-2016&quot;&gt;&lt;a href=&quot;https://www.hltv.org/matches/2303387/match&quot;&gt;Gambit vs fnatic, quarter-finals of Cologne 2016&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Looking at the scoreline, you’d never believe that the core of Gambit would win a major. This match was within the top 5 biggest kill and round differentials at a major.&lt;/p&gt;
&lt;h2 id=&quot;and-some-of-the-best&quot;&gt;And some of the best&lt;/h2&gt;
&lt;h4 id=&quot;ence-vs-natus-vincere-semi-finals-of-katowice-2019&quot;&gt;&lt;a href=&quot;https://www.hltv.org/matches/2331079/natus-vincere-vs-ence-iem-katowice-2019&quot;&gt;ENCE vs Natus Vincere, semi-finals of Katowice 2019&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;This had the lowest round and kill differential of any major match. But… this was because ENCE lost more rounds than Na’Vi. Nonetheless, we were given two exciting maps, were the underdog won.&lt;/p&gt;
&lt;h4 id=&quot;fnatic-vs-ninjas-in-pyjamas-grand-final-of-cologne-2014&quot;&gt;&lt;a href=&quot;https://www.hltv.org/matches/2292382/fnatic-vs-ninjas-in-pyjamas-esl-one-cologne-2014&quot;&gt;fnatic vs Ninjas In Pyjamas, grand final of Cologne 2014&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;A grand final where the round differential was zero, and the losing team had more kills. Iconic.&lt;/p&gt;
&lt;h2 id=&quot;rio-and-boston---why-are-they-treated-differently-to-what-the-data-suggests&quot;&gt;Rio and Boston - why are they treated differently to what the data suggests?&lt;/h2&gt;
&lt;p&gt;Boston 2018 is considered an all-time great major. Meanwhile, Rio 2022 is considered one of the worst.&lt;/p&gt;
&lt;p&gt;Rio’s quarter and semi-finals are more competitive than Boston’s. The round differential is lower, and Rio overall has more maps played across the major.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/average-maps-per-stage.BqKKkDvQ_QnjVf.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1000&quot; height=&quot;500&quot;&gt;&lt;/p&gt;
&lt;p&gt;So, why do people look down on Rio? Here are some of the factors.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A lack of a crowd for non-FURIA matches
&lt;ol&gt;
&lt;li&gt;Despite an explosion of demand, the arena failed to fill up for non-FURIA matches. The grand finals in particular were absent.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;The favourites were eliminated early
&lt;ol&gt;
&lt;li&gt;FaZe, Vitality, Liquid and G2 didn’t back it to the play-offs (G2 were eliminated in the RMR).&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;And the final was boring.
&lt;ol&gt;
&lt;li&gt;Outsiders played a boring style of Counter-Strike, for one.&lt;/li&gt;
&lt;li&gt;And the game wasn’t close. A two mapper, where Heroic managed 17 rounds. Heroic failed to show up.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;And why do people consider Boston great?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The story of the winning team
&lt;ol&gt;
&lt;li&gt;The first (and only) NA team to win a major.&lt;/li&gt;
&lt;li&gt;On home soil.&lt;/li&gt;
&lt;li&gt;As an underdog.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;The last map
&lt;ol&gt;
&lt;li&gt;Inferno was one of the most intense maps of CS:GO, ever. A dominant start, followed by the underdogs running it back. Who can forget the 15-14 round.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Boston’s narrative is built on the finals. If we exclude them, Rio is the more competitive major.&lt;/p&gt;
&lt;p&gt;It’s even worth noting that in the kills department, Cloud9 blew FaZe out of the water across the final, to the point where the kill differential is higher in Boston than in London. Sometimes even if the first two maps are boring, as long as you make it to a close third, the perception is different.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/average-kd-per-stage.bGdrm4mW_1wptjx.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1000&quot; height=&quot;500&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;on-average-have-majors-changed&quot;&gt;On average, have majors changed?&lt;/h2&gt;













&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;The Yearly Average of the number of maps played at play-off stages of Valve Major Events&lt;/th&gt;&lt;th&gt;The Yearly Average of the kill differential and round differential played at play-off stages of Valve Major Events&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;/_astro/yearly-average-maps-played.DnIythK__Z2rsOXf.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;700&quot; height=&quot;500&quot;&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;/_astro/yearly-round-diff-kill-diff.D4F3TWRQ_Z5v9WP.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;700&quot; height=&quot;500&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;When we look at the averages, it doesn’t look so bad. The historical lows of 2018 are slowly recovered from.&lt;/p&gt;
&lt;p&gt;So why aren’t we treating them as good majors?&lt;/p&gt;













&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Kill diff average per stage before 2018&lt;/th&gt;&lt;th&gt;Kill diff average per stage after 2020&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;/_astro/kill-diff-average-per-stage-before-2018.pWHu25kj_19PkWl.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;700&quot; height=&quot;500&quot;&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;/_astro/kill-diff-average-per-stage-after-2020.Dcv_YQxd_S8DAP.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;700&quot; height=&quot;500&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;













&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Round diff average per stage before 2018&lt;/th&gt;&lt;th&gt;Round diff average per stage after 2018&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;/_astro/round-diff-average-per-stage-before-2018.BsdLC9NK_Z25EyWr.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;700&quot; height=&quot;500&quot;&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;/_astro/round-diff-average-per-stage-after-2020.B9S-Dd4Q_ZSaKjh.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;700&quot; height=&quot;500&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Averaging the majors before 2018, and the majors after 2020 (so as to exclude the worst majors), and splitting it by stage, we can see the problem. As mentioned earlier in the article, the right way for a Major to trend is for each stage to be more competitive. Before 2018, this was the average. But after 2020 (and 2018, for that matter), this does not happen. The Grand Finals of now are even less competitive than the quarter-finals of before.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Each stage of a Major isn’t judged equally. We make the biggest judgement on how good a Major was based on the Grand Final.&lt;/p&gt;
&lt;br/&gt;
&lt;br/&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;The number of maps played in Grand Finals at Valve Major events&lt;/th&gt;&lt;th&gt;Kill differential during Grand Finals at Valve Major events&lt;/th&gt;&lt;th&gt;Round differential during the Grand Finals at Valve Major events&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;/_astro/maps-gf.CnFYN6eb_ZetpqN.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;700&quot; height=&quot;500&quot;&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;/_astro/kd-gf.DLo7jvVO_1YKx89.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;700&quot; height=&quot;500&quot;&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;/_astro/rd-gf.19bve4ir_Z1x4oVM.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;700&quot; height=&quot;500&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Grand finals, on average, are far less competitive than before. The most competitive recent majors, Stockholm and Antwerp, were still two map affairs. The tension that is built up by it going to the 3rd map, the tension from feeling that both teams are capable of notching tallys on the map counter - it never arrives.&lt;/p&gt;
&lt;p&gt;Adding the changes in how rounds are played (&lt;a href=&quot;/blog/2023-04-26-have-cs-rounds-gotten-slower/&quot;&gt;Have CS Rounds gotten slower&lt;/a&gt;), we have a unique blend of slow, drawn out executions right at the most critical stage of the game. Any excitement is bled out, inconsequential save after save. The victor is playing with its food.&lt;/p&gt;
&lt;p&gt;Majors used to self-correct themselves. The stretch from Cologne 2015 to Cologne 2016 concluded with an exciting Atlanta. But that pattern has been stopped. Whether COVID, changes in the way the game is played, or some other factor played a role, I cannot say.&lt;/p&gt;
&lt;p&gt;A potential reason, that is currently under the spotlight, is the format of major events. ELEAGUE’s 2017 Atlanta Major was the first major to use the Swiss format. The competitiveness of the two initial Swiss events indicates that something was working here. Even since Boston though, something hasn’t been working as well as it should be. People have noticed weaker and weaker teams making it to the play-off stage, and the quality of the games are suffering as a result.&lt;/p&gt;
&lt;p&gt;As with my previous article, we have a respite in CS2, and the major break it brings. Maybe the gameplay changes will bring us to a new Golden Age for Valve Major events. Maybe the discussions around formats might end up causing changes that end up with more competitive matches.&lt;/p&gt;
&lt;p&gt;Time to wait.&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;While this is an upset in the traditional sense, the TSM players were in a dispute with the organisation, impeding their performance. &lt;a href=&quot;https://twitter.com/fbyskov/status/660822085565030400&quot;&gt;https://twitter.com/fbyskov/status/660822085565030400&lt;/a&gt;. This dispute would lead to the foundation of Astralis. &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Have CS rounds gotten slower?</title><link>https://bphilip.uk/blog/2023-04-26-have-cs-rounds-gotten-slower/</link><guid isPermaLink="true">https://bphilip.uk/blog/2023-04-26-have-cs-rounds-gotten-slower/</guid><description>An analysis of Counter-Strike rounds over the years.</description><pubDate>Wed, 26 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Counter-Strike events seem to have less energy than ever. There are no concrete statistics to back this up, but the symphonies of Counter-Strike sound more like a small chorale. The crowds have gone from ecstasy, to gentle applause.&lt;/p&gt;
&lt;p&gt;If this is the case, pointing to a single cause is difficult. To list a few changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The makeup of teams has changed, with fan favourites such as NiP, SK and fnatic having all disappeared from the high levels of the scene.&lt;/li&gt;
&lt;li&gt;The local scene had one representative at the top in Virtus.Pro, who have now also disbanded, leaving the Polish crowd little home grown to cheer for.&lt;/li&gt;
&lt;li&gt;COVID might have caused more churn, especially as esports stopped playing offline events and became online only.&lt;/li&gt;
&lt;li&gt;Competition in the tactical FPS market has grown, and as such, the CS audience might have diminished in size.&lt;/li&gt;
&lt;li&gt;Partner teams for big tournaments have reduced the overall quality of competition&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But the way in which the game is played has also changed. Like in running, the equipment available to players has become lighter and more precise than ever. Like in Formula 1, there is an incomprehensible amount of data, with numerous statistical analysis tools to digest it. Like in football, the metagame has evolved, despite the rules of the game being nearly identical.&lt;/p&gt;
&lt;p&gt;Players have learned how to utilize every facet the game has to offer, from grenade timings to elaborate setups for precise smoke placement. The days when smokes were thrown ad-hoc have all but disappeared.&lt;/p&gt;
&lt;p&gt;I want to try and explore some of the ways in which the game has evolved that might have made it less interesting for audiences.&lt;/p&gt;
&lt;h2 id=&quot;what-is-interesting&quot;&gt;What is &lt;em&gt;interesting&lt;/em&gt;?&lt;/h2&gt;
&lt;p&gt;There is no central statistic that can be used to describe what interesting means.&lt;/p&gt;
&lt;p&gt;Interesting to some might be the level of competition, and the number of top teams that exist. Interesting to others might be the way that the mechanics of top players, such as the way in which they aim and throw utility.&lt;/p&gt;
&lt;p&gt;What might give us insight is understanding how individual rounds have changed across the years. If we can point to specific changes in the makeup of a round, we can start to understand ways that viewers might have lost interest.&lt;/p&gt;
&lt;h2 id=&quot;analysis&quot;&gt;Analysis&lt;/h2&gt;
&lt;p&gt;I took demos from all of the CS:GO majors from Katowice 2014, to Rio 2022. Additionally, I included Katowice 2023 to add some 2023 datapoints.&lt;/p&gt;
&lt;p&gt;Caveats:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;As much as I’ve tried to ensure data quality, this is not a thoroughly tested ingestion pipeline. There may be factual errors. Some demos were removed as they broke the ingestion, but this was minimal.&lt;/li&gt;
&lt;li&gt;Similarly, I’m a relative noob to Pandas,  so the data analysis might be flawed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nonetheless, the conclusions roughly point to what is observable, so my concerns are low on there being systemic issues.&lt;/p&gt;
&lt;h3 id=&quot;rounds-are-longer-on-average&quot;&gt;Rounds are longer on average&lt;/h3&gt;
&lt;p&gt;The average round duration grew from 78 seconds to 95 seconds. Strictly speaking, this isn’t a drastic change, even when compounded over a 30 round game (roughly an additional 8.5 minutes).&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/cs-duration.B5tqJNXf_Z24naqj.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;500&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;and-saving-is-more-prevalent-than-ever&quot;&gt;And saving is more prevalent than ever&lt;/h3&gt;
&lt;p&gt;Given that a team loses a round, a growth from 0.16 players saving per round to 0.54 players can be observed.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/cs-survivingcount.Date_DIF_Z2aJigr.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;500&quot;&gt;&lt;/p&gt;
&lt;p&gt;But the growth is even more drastic when you separate for sides. CT sides, when they know they’re losing a round, on average save nearly a player each time.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/cs-savingcountsplit.r4ve92XR_shQms.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;500&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;kills-are-spaced-further-out&quot;&gt;Kills are spaced further out&lt;/h3&gt;
&lt;p&gt;The longest wait between kills went from a low of 19 seconds in 2015, to peaking at 27 seconds in 2021. It currently averages at 25 seconds.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/cs-longestkillwaits.CyeNwAba_ZftXhA.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;500&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;and-take-place-later-on-in-the-round&quot;&gt;And take place later on in the round&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/cs-killticksrelative.6-Im1PTH_LWxuq.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;500&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;the-last-kill-to-the-end-of-the-round-takes-longer&quot;&gt;The last kill to the end of the round takes longer&lt;/h3&gt;
&lt;p&gt;Previously, when the last kill in a round took place, it took an average of 3 seconds for the round to conclude. This has increased to 10 seconds.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/cs-lastkilltoends.B98KWoog_2vT9FV.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;500&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;nades-are-pretty-static&quot;&gt;Nades are pretty static&lt;/h3&gt;
&lt;p&gt;Players are far more effective with their nades, averaging 13 points more damage.&lt;/p&gt;
&lt;p&gt;They’re thrown at virtually the same point in a round. Smokes too, are thrown at virtually the same, moving between 33 and 38 seconds in a round (this does not cleanly go up, unlike the other statistics).&lt;/p&gt;
&lt;p&gt;Molotovs are the notable exception, from being thrown at 41 seconds in a round to a low of 29 in 2022.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/cs-relativenades.SbP68K0c_ZABwBC.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;500&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;whos-saved-the-most&quot;&gt;Who’s saved the most?&lt;/h3&gt;
&lt;p&gt;If we take a look at the players whose teams have saved the most, the most of the top 5 make sense. dupreeh has attended the most majors, and s1mple, olofmeister and Zeus are all players who have made the grand finals multiple times.&lt;/p&gt;
&lt;p&gt;But exceptionally, Jame tops the charts, crushing the competition.&lt;/p&gt;
&lt;h4 id=&quot;players-whose-teams-have-saved-the-most&quot;&gt;Players, whose teams have saved the most&lt;/h4&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Player&lt;/th&gt;&lt;th&gt;Rounds their team have saved&lt;/th&gt;&lt;th&gt;Maps played&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Jame, qikert&lt;/td&gt;&lt;td&gt;289&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dupreeh&lt;/td&gt;&lt;td&gt;257&lt;/td&gt;&lt;td&gt;121&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;s1mple&lt;/td&gt;&lt;td&gt;228&lt;/td&gt;&lt;td&gt;85&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;olofmeister&lt;/td&gt;&lt;td&gt;216&lt;/td&gt;&lt;td&gt;109&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Zeus&lt;/td&gt;&lt;td&gt;212&lt;/td&gt;&lt;td&gt;89&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Dividing by the number of appearances they make in the data set, we can determine what players save most per game. Filtering to a minimum of 20 appearances (to prevent outliers making an appearance), the data continues to show the trend observed - newer players tend to save more, and the Outsiders players are outlier.&lt;/p&gt;
&lt;h4 id=&quot;a-scatter-graph-showing-the-ratio-of-rounds-saved-to-appearances-against-the-average-date-of-their-matches&quot;&gt;A scatter graph, showing the ratio of rounds saved to appearances against the average date of their matches&lt;/h4&gt;
&lt;iframe id=&quot;igraph&quot; scrolling=&quot;no&quot; style=&quot;border:none;&quot; seamless src=&quot;/embed/savingCountVsAvgDate.html&quot; height=&quot;525&quot; width=&quot;100%&quot; loading=&quot;lazy&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;It takes until 2019 for a player to reach a ratio of 1.5. After that, you have 11 players breach that boundary, with Jame almost reaching a ratio of 3. They aren’t outliers.&lt;/p&gt;
&lt;h4 id=&quot;a-scatter-graph-showing-the-ratio-of-rounds-saved-to-appearances-against-the-first-date-of-their-matches&quot;&gt;A scatter graph, showing the ratio of rounds saved to appearances against the first date of their matches&lt;/h4&gt;
&lt;iframe id=&quot;igraph&quot; scrolling=&quot;no&quot; style=&quot;border:none;&quot; seamless src=&quot;/embed/savingCountVsFirstDate.html&quot; height=&quot;325&quot; width=&quot;100%&quot; loading=&quot;lazy&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;This graph I find less useful, as you don’t get a sense of what era a player has primarily played within. For instance, cadiaN is at the start of this graph, but the majority of contributions take place at the other end.&lt;/p&gt;
&lt;h3 id=&quot;they-tend-to-take-longer-to-lose&quot;&gt;They tend to take longer to lose&lt;/h3&gt;
&lt;p&gt;We can also look at how long players’ teams take to lose rounds.  Once again, the new school of Counter-Strike takes longer to lose, and once again, Outsiders are outliers.&lt;/p&gt;
&lt;h4 id=&quot;a-scatter-graph-showing-length-of-time-for-a-players-team-to-lose-a-round-against-the-average-date-of-their-matches&quot;&gt;A scatter graph, showing length of time for a players’ team to lose a round against the average date of their matches&lt;/h4&gt;
&lt;iframe id=&quot;igraph&quot; scrolling=&quot;no&quot; style=&quot;border:none;&quot; seamless src=&quot;/embed/roundDurationVsAvgDate.html&quot; height=&quot;525&quot; width=&quot;100%&quot; loading=&quot;lazy&quot;&gt;&lt;/iframe&gt;
&lt;h4 id=&quot;a-scatter-graph-showing-length-of-time-for-a-players-team-to-lose-a-round-against-the-first-date-of-their-matches&quot;&gt;A scatter graph, showing length of time for a players’ team to lose a round against the first date of their matches&lt;/h4&gt;
&lt;iframe id=&quot;igraph&quot; scrolling=&quot;no&quot; style=&quot;border:none;&quot; seamless src=&quot;/embed/roundDurationVsFirstGameDate.html&quot; height=&quot;325&quot; width=&quot;100%&quot; loading=&quot;lazy&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;Similar comment to the above start date graph.&lt;/p&gt;
&lt;h3 id=&quot;what-does-this-show-us&quot;&gt;What does this show us?&lt;/h3&gt;
&lt;p&gt;Rounds take longer, and players save more. The meta shift has been expressed in full by the current generation of players. Arguably, this demonstrates more conservative playing habits - they’re far less likely to take round defining risks.&lt;/p&gt;
&lt;p&gt;None of this is a surprise. The concrete statistics do help us visualize what the change looks like.&lt;/p&gt;
&lt;h2 id=&quot;a-dance-of-interests&quot;&gt;A dance of interests&lt;/h2&gt;
&lt;p&gt;Within any sport, there is a balancing act between providing entertainment value, and providing an avenue for the very best of us to exhibit their otherworldly skills.&lt;/p&gt;
&lt;p&gt;It is not that those things aren’t linked. We watch football because we want to see what the most capable, the most gifted, and the hardest working human beings can achieve against each other within the confines of the game. We watch knowing that if we were to be on that pitch, we would be outclassed. The best managers instrument the orchestra of moves that lead to a goal.&lt;/p&gt;
&lt;p&gt;Yet despite “parking the bus” sometimes being the prudent tactical move, it is widely derided as uninteresting and boring. The very best are executing the ideal strategy, but the outcome causes us to switch off.&lt;/p&gt;
&lt;p&gt;Many consider Virtus.Pro to CS’ equivalent to parking the bus. Slow, methodical, and incredibly effective - but not interesting to watch. Bystanders might fear the effectiveness of this playbook as infecting the rest of the scene, but VP’s failure to qualify for Paris might dissuade others.&lt;/p&gt;
&lt;h2 id=&quot;are-people-turning-away&quot;&gt;Are people turning away?&lt;/h2&gt;
&lt;p&gt;Whether this has any impact on Counter-Strike is difficult to ascertain.&lt;/p&gt;
&lt;p&gt;Viewership in total has grown, breaking new heights every year. But viewership for English language streams appears to have stagnated  since 2017/2018. Atlanta 2018 enjoyed 1.1m concurrent viewers &lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, while 2021’s PGL Stockholm enjoyed 954,000 concurrent viewers on the English stream &lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Whether this is a symptom of changing demographics, better quality regional products (one only needs to see the popularity of Gaules), or some other factor, it is impossible to rule out. However, I can tell you that Counter-Strike is a less compelling entertainment product for me, and I’m not sure I’m alone.&lt;/p&gt;
&lt;h2 id=&quot;can-you-change-the-metagame&quot;&gt;Can you change the metagame?&lt;/h2&gt;
&lt;p&gt;Meddling with the game always leads to unintended consequences, but we can look at some ways to shift the playstyle.&lt;/p&gt;
&lt;p&gt;Counter-Strike 2 presents a couple of quick solutions. Smoke grenades can be dispersed by grenades, which adds another level of tactical depth that changes how both of those pieces of utility will be used. Smokes will be less effective, and grenades will be less used for inflicting damage. At the moment, the hitboxes appear to be larger, which could incentivize more aim heavy playstyles as the margin for error drops. Of course, this reduces the skill ceiling.&lt;/p&gt;
&lt;p&gt;Timings could always be changed. In 2015, Valve extended the round timer in competitive play to align with matchmaking. While this was not popular at the time, in retrospect, modern CS would be unplayable with even less time allocated to teams - molotovs and smokes would be more powerful, and teams would pull the plug earlier. But smokes and molotov timings can be modified - making them shorter would reduce the impact they have on the round.&lt;/p&gt;
&lt;p&gt;Monetary incentives for not saving would spur teams into making riskier plays, as the risk/reward balance would shift. Disincentives for saving would also have an effect.&lt;/p&gt;
&lt;h2 id=&quot;a-conclusion&quot;&gt;A conclusion&lt;/h2&gt;
&lt;p&gt;There is no right solution. Counter-Strike 2 gives us enough rope that the best option is to wait and see what it brings. The novelty of the game, despite the closeness to Global Offensive, should bring about a shift in the gameplay. At the time of publishing, Valve have hinted that there is even more to be revealed.&lt;/p&gt;
&lt;p&gt;CS2 could end down the same pathway, however. Should it do so, the time has come to evaluate whether aspects of the core gameplay loop need tweaking to promote more exciting gameplay.&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://archive.is/https://esportsobserver.com/eleague-boston-major-viewership-record&quot;&gt;https://archive.is/https://esportsobserver.com/eleague-boston-major-viewership-record&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://www.hltv.org/news/32764/pgl-major-stockholm-breaks-records-with-over-27-million-concurrent-viewers&quot;&gt;https://www.hltv.org/news/32764/pgl-major-stockholm-breaks-records-with-over-27-million-concurrent-viewers&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>COVID-19, a prologue</title><link>https://bphilip.uk/blog/2021-04-15-covid-19-a-prologue/</link><guid isPermaLink="true">https://bphilip.uk/blog/2021-04-15-covid-19-a-prologue/</guid><description>Reflections on the month prior to lockdown.</description><pubDate>Thu, 15 Apr 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Originally written on 2021-04-15, re-written in 2023.&lt;/p&gt;
&lt;p&gt;Special thanks to Loughborough University’s excellent public record of emails. While they are now gone, they were instrumental in writing this piece.&lt;/p&gt;
&lt;h2 id=&quot;february&quot;&gt;February&lt;/h2&gt;
&lt;p&gt;At this point, the news reporting had started to become common place, but was still just a mild curiosity to most of us.&lt;/p&gt;
&lt;p&gt;The 2009-2010 Swine flu epidemic, and Ebola reporting, had impacted the way I perceived media around disease outbreaks. Reporting in this area had a tendency sensationalized (especially in America). Any new outbreak would blow over, just like the previous ones that.&lt;/p&gt;
&lt;p&gt;Indeed, that month we would put down a deposit for a house for the next year of University. While it seems slightly crazy, knowing what was about to hit us, it was a good decision. We would not be around for the next months to look at houses, and we would be required to return to campus the next year. Staying in halls during that time would have been far worse.&lt;/p&gt;
&lt;h2 id=&quot;march&quot;&gt;March&lt;/h2&gt;
&lt;p&gt;Early March should have been when the alarm bells started ringing, but only with the gift of hindsight can I say that.&lt;/p&gt;
&lt;p&gt;The starting weekend of March, I went home and back to university on a train. On the 6th of March, we all went as a group to a pub. We had a running joke that we’d always make plans to go, but never execute on them right up until the end of the year - going to the club that was located on Campus was a much easier trip, as opposed to the 40 minute walk to town.&lt;/p&gt;
&lt;p&gt;Thank goodness we’d had the foresight to do so this time.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Update to staff and students - 7 March at 2pm&lt;/p&gt;
&lt;p&gt;Dear colleagues and students,&lt;/p&gt;
&lt;p&gt;I have been advised today that a student based on our Loughborough campus has contracted Coronavirus.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Suddenly the distance didn’t seem so small.&lt;/p&gt;
&lt;p&gt;Three days later, Italy would enter a nationwide lockdown.&lt;/p&gt;
&lt;p&gt;In the UK, life continued on. As we pursued herd immunity, nothing was closed yet. However, you couldn’t ignore it. Signs from the Government were being plastered everywhere, warning people to be vigilant.&lt;/p&gt;
&lt;p&gt;Some memories from this time come to mind.&lt;/p&gt;
&lt;p&gt;One was being in a crowded corridor, waiting for a meeting. With what we know now, this was insanity. But the advice given was not to avoid being the presence of others, but to avoid physical contacts. Me and a friend were mocking the advice given, employing the two new techniques suggested: distanced high fives, or elbowing each other. Now we know that avoiding hand shaking does very little for COVID, this would have been thought of as parody, but alas, we were not.&lt;/p&gt;
&lt;p&gt;Another was a dinner table discussion about COVID. With such certainty, did I evoke the sentiment that “this too shall pass”. Swine flu had taught us nothing!&lt;/p&gt;
&lt;p&gt;By the end of the month, all of us had returned to our homes.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Update to students - 11 March at 6pm&lt;/p&gt;
&lt;p&gt;Dear Students&lt;/p&gt;
&lt;p&gt;In his message on Monday the Vice-Chancellor promised we would keep you informed of the situation on campus with regard to Coronavirus (COVID-19). I am therefore writing with an update.&lt;/p&gt;
&lt;p&gt;I can restate that we still have just the single confirmed case associated with the University, notified to you on Saturday. The individual remains away from Loughborough and continues to do well.&lt;/p&gt;
&lt;p&gt;At present the University is still operating as normal and you should continue to attend classes, lab sessions etc as usual. If you feel you are not able to continue attending, you must notify your academic School. If you are studying on a Tier 4 visa we will write to you tomorrow (Thursday) with more detailed guidance.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Update to staff - 12 March at 9am&lt;/p&gt;
&lt;p&gt;Dear Colleagues&lt;/p&gt;
&lt;p&gt;I wanted to let you know that the Vice-Chancellor will write to you this afternoon announcing some changes in the way we are responding to Coronavirus (Covid-19). The University has developed a plan that escalates as the national position changes, and the Vice-Chancellor’s message will outline these. Please can you look out for this email and read it carefully. For clarity and to prevent rumour — it will &lt;strong&gt;not announce a closure of the University&lt;/strong&gt;, but will detail important escalating actions, including some changes to teaching activity.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This would be one of the most shortlived announcements of the month.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Prime Minister’s statement on coronavirus (COVID-19): 12 March 2020 (around 6pm GMT)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Good afternoon everybody and thank you very much for coming.&lt;/p&gt;
&lt;p&gt;I’ve just chaired a meeting of the government’s emergency committee including ministers from Scotland, Wales and Northern Ireland.&lt;/p&gt;
&lt;p&gt;And it’s clear that coronavirus, COVID-19, continues and will continue to spread across the world and our country over the next few months. We’ve done what can be done to contain this disease and this has bought us valuable time.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Update to students - 12 March at 6.45pm&lt;/p&gt;
&lt;p&gt;Dear Students,&lt;/p&gt;
&lt;p&gt;I am writing to you to outline significant changes in our approach to Coronavirus. The UK Government has this afternoon announced that it is moving from the ‘Containment’ to the ‘Delay’ phase of its planned response to Coronavirus (COVID-19).&lt;/p&gt;
&lt;p&gt;[…]&lt;/p&gt;
&lt;p&gt;Teaching will continue as normal until close of play tomorrow, Friday 13th March. &lt;strong&gt;From Monday 16th March we shall suspend ‘normal’ lecturing activity&lt;/strong&gt;. By this we mean a learning activity led by an individual member of staff presenting to a group of students in a lecture theatre setting. We have asked academic colleagues to make best efforts to ensure that instead, lecture material is online within 24 hours of the scheduled session and made available through Learn in the normal way. There will still be opportunities for you to ask teaching staff questions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Within the span of 24 hours, the position of the university had changed from “everything is mostly normal”, to the closure of teaching. You know, the main point of a university campus.&lt;/p&gt;
&lt;p&gt;I went to our final scheduled lecture, and it was vacant.&lt;/p&gt;
&lt;p&gt;The mood quickly changed. This was the announcement that caused most to evaluate whether they should stay on a university campus with no lectures. Most chose not to.&lt;/p&gt;
&lt;p&gt;For those of us that did stay, the situation kept evolving, day by day. On the 13th of March, halls announced that deep cleaning was underway, and large functions were cancelled. Catered halls kept running dinner services, as normal.&lt;/p&gt;
&lt;p&gt;That next week saw a small unit of us continue to reside, occupying the corner of a floor. As bleary as the world outside seemed, this was a small pocket of joy. No teaching activity was happening, so this was effectively a mini-holiday.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/covid-door.Zu-JBnWx_Z145GpQ.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1252&quot; height=&quot;1668&quot;&gt;
(18th March 2020)&lt;/p&gt;
&lt;p&gt;Dinner together kept evolving: first it was the introduction of disposable cutlery, followed by spaced out seating.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Update to students - 16 March at 7.30pm&lt;/p&gt;
&lt;p&gt;Dear Students&lt;/p&gt;
&lt;p&gt;I want to start by thanking all students for the understanding shown in response to the difficult situation of the last few days. I am personally hugely appreciative of this.&lt;/p&gt;
&lt;p&gt;As you may be aware the Government have announced daily briefings regarding the country’s COVID-19 response, the first of which was today.&lt;/p&gt;
&lt;p&gt;The University’s COVID-19 response group has met this evening to absorb the details of today’s Government briefing. More detail will follow tomorrow, but we have decided to communicate early and escalate our response in accordance with our pre-prepared plan. The key points are:&lt;/p&gt;
&lt;p&gt;Any face to face classes, labs, seminars or tutorials scheduled for tomorrow (Tuesday) will not go ahead and all of these activities are suspended until further notice. Details of the online replacement activity and any access to facilities will follow tomorrow. Students should leave the campus if they wish to do so. Our halls of residence will remain open and function as close to normal as possible. We know many of our students are unable to leave or may have an important reason to stay until the end of term. This is a personal decision but leaving now for the approaching vacation will incur no penalty.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This was the first communication to students that they could leave campus. People had already left ahead of this, but now it was getting realer.&lt;/p&gt;
&lt;p&gt;Around this time, I went to a GP for a mild skin condition.&lt;/p&gt;
&lt;p&gt;The walk around campus was eerier. A Sunday during term-time should not be empty.&lt;/p&gt;
&lt;p&gt;Getting into the GP involved COVID pre-screening checks. How quaint this was.&lt;/p&gt;
&lt;p&gt;The GP gave me a product recommendation, that I had to get from a pharmacist. I ventured over to the on-campus one. The signs outside proclaimed a lack of masks, thermometers or cold and flu medicine. As I entered the door, I was immediately accosted: We don’t have any masks. It feels as if I was the only person that day not looking for anything COVID related.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Update to staff and students - 19 March at 11.15am&lt;/p&gt;
&lt;p&gt;Dear Colleagues and Students,&lt;/p&gt;
&lt;p&gt;The Government announced yesterday further measures to minimise the risk of coronavirus in the UK, including the closure of schools from tomorrow afternoon until further notice. To reflect current concern, from 1700 tomorrow the University will move to a minimum level of campus operation.&lt;/p&gt;
&lt;p&gt;[…]&lt;/p&gt;
&lt;p&gt;It is likely that significant temporary restrictions on the movement of people may be issued by the Government shortly. If you are still resident in Loughborough and this is not your permanent home you should now think very carefully about whether staying here is in your best interests. My &lt;strong&gt;strong advice is that you should return home while you still have the flexibility to do so&lt;/strong&gt;. If you cannot get home, my colleagues and I shall continue to do our very best to support you.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;When I got back home, I took a picture of the corridor outside my room, and the view out of the window. I knew we weren’t coming back.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/_astro/covid-outside.CDp5OqDj_1mrp8J.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1252&quot; height=&quot;1668&quot;&gt;
On the 20th of March, I left my room in halls.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Prime Minister’s statement on coronavirus (COVID-19): 23 March 2020&lt;/p&gt;
&lt;p&gt;Good Evening,&lt;/p&gt;
&lt;p&gt;The coronavirus is the biggest threat this country has faced for decades — and this country is not alone.&lt;/p&gt;
&lt;p&gt;All over the world we are seeing the devastating impact of this invisible killer.&lt;/p&gt;
&lt;p&gt;[…]&lt;/p&gt;
&lt;p&gt;From this evening I must give the British people a very simple instruction - you &lt;strong&gt;must stay at home&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item></channel></rss>